{
  "schema": {
    "headerBest": {
      "name": "Best score label",
      "description": "Header label preceding the session-best score."
    },
    "headerLevel": {
      "name": "Level label",
      "description": "Header label preceding the current level indicator."
    },
    "headerTime": {
      "name": "Time label",
      "description": "Header label preceding the remaining seconds."
    },
    "bestEmpty": {
      "name": "Best score placeholder",
      "description": "Shown in place of the score when the player has not passed any round yet."
    },
    "levelDisplay": {
      "name": "Level value template",
      "description": "Current level vs. total levels. Keep both placeholders.",
      "tokens": [
        "current",
        "max"
      ]
    },
    "timeDisplay": {
      "name": "Time value template",
      "description": "Remaining time with a units suffix (e.g. seconds).",
      "tokens": [
        "seconds"
      ]
    },
    "announceRoundStarted": {
      "name": "Announcer: round started",
      "description": "Live-region screen-reader message when the round begins (after peek phase ends)."
    },
    "announceMemorize": {
      "name": "Announcer: memorize",
      "description": "Live-region screen-reader message during the peek phase while cards are revealed."
    },
    "announceOutOfTime": {
      "name": "Announcer: out of time",
      "description": "Live-region screen-reader message when the round timer hits zero."
    },
    "announceRoundPassed": {
      "name": "Announcer: round passed",
      "description": "Live-region screen-reader message when all pairs are matched."
    },
    "announceMatch": {
      "name": "Announcer: match",
      "description": "Live-region screen-reader message when the player flips a matching pair."
    },
    "announceNoMatch": {
      "name": "Announcer: no match",
      "description": "Live-region screen-reader message when the player flips a mismatched pair."
    },
    "ariaCard": {
      "name": "Card aria-label",
      "description": "Screen-reader label for each tile. Index is 1-based.",
      "tokens": [
        "index"
      ]
    },
    "ariaBoard": {
      "name": "Board aria-label",
      "description": "Screen-reader label for the grid of cards."
    },
    "startTitle": {
      "name": "Start screen title",
      "description": "Headline shown on the start screen before the player begins level 1."
    },
    "startBody": {
      "name": "Start screen body",
      "description": "Instructions shown on the start screen."
    },
    "startButton": {
      "name": "Start button",
      "description": "Label for the button that begins level 1."
    },
    "winTitleLevel1": {
      "name": "Win title (level 1)",
      "description": "Headline shown after the player passes level 1."
    },
    "winTitleLevel2": {
      "name": "Win title (level 2)",
      "description": "Headline shown after the player passes level 2."
    },
    "winTitleLevel3": {
      "name": "Win title (level 3)",
      "description": "Headline shown after the player passes level 3."
    },
    "winTitleLevel4": {
      "name": "Win title (final level)",
      "description": "Headline shown after the player passes the final level. Tone is intentionally celebratory and bot-aware."
    },
    "winBodyNewBest": {
      "name": "Win body (new best)",
      "description": "Body shown when the round score beats the previous session best.",
      "tokens": [
        "score"
      ]
    },
    "winBodyScore": {
      "name": "Win body (regular)",
      "description": "Body shown after a passed round when the score did not beat the previous best.",
      "tokens": [
        "score"
      ]
    },
    "winRetry": {
      "name": "Retry button (win screen)",
      "description": "Label for the button that restarts the same level after passing it."
    },
    "winLevelUpDefault": {
      "name": "Level-up button (default)",
      "description": "Fallback label for the advance-level button when no per-level label is defined."
    },
    "winLevelUpAfter1": {
      "name": "Level-up button (after level 1)",
      "description": "Label for the button that advances from level 1 to level 2."
    },
    "winLevelUpAfter2": {
      "name": "Level-up button (after level 2)",
      "description": "Label for the button that advances from level 2 to level 3."
    },
    "winLevelUpAfter3": {
      "name": "Level-up button (after level 3)",
      "description": "Label for the button that advances from level 3 to level 4 (the final level)."
    },
    "lossTitle": {
      "name": "Loss screen title",
      "description": "Headline shown on the loss screen when the timer expires."
    },
    "lossBody": {
      "name": "Loss screen body",
      "description": "Body text shown on the loss screen."
    },
    "lossRetry": {
      "name": "Retry button (loss screen)",
      "description": "Label for the button that restarts the failed level."
    },
    "lossEasier": {
      "name": "Try easier button",
      "description": "Label for the button that drops one level down. Hidden at level 1."
    }
  },
  "presets": {
    "English": {
      "_lang": "en",
      "_default": true,
      "headerBest": "Best",
      "headerLevel": "Level",
      "headerTime": "Time",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds}s",
      "announceRoundStarted": "Round started",
      "announceMemorize": "Memorize the cards",
      "announceOutOfTime": "Out of time",
      "announceRoundPassed": "Round passed",
      "announceMatch": "Match",
      "announceNoMatch": "No match",
      "ariaCard": "Card {index}",
      "ariaBoard": "Memory board",
      "startTitle": "Leaf Memory",
      "startBody": "Flip two cards at a time to find matching leaves. Clear the board before time runs out.",
      "startButton": "Start",
      "winTitleLevel1": "You win!",
      "winTitleLevel2": "Nice memory!",
      "winTitleLevel3": "Razor sharp!",
      "winTitleLevel4": "No bot can ever be that good!",
      "winBodyNewBest": "New best score: {score}.",
      "winBodyScore": "Score: {score}.",
      "winRetry": "Retry",
      "winLevelUpDefault": "Level up!",
      "winLevelUpAfter1": "Bigger board!",
      "winLevelUpAfter2": "Even bigger!",
      "winLevelUpAfter3": "Final challenge!",
      "lossTitle": "Out of time",
      "lossBody": "The board did not clear before the buzzer.",
      "lossRetry": "Retry",
      "lossEasier": "Try easier"
    },
    "Arabic": {
      "_lang": "ar",
      "_default": true,
      "headerBest": "الأفضل",
      "headerLevel": "المستوى",
      "headerTime": "الوقت",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} ث",
      "announceRoundStarted": "بدأت الجولة",
      "announceMemorize": "احفظ البطاقات",
      "announceOutOfTime": "انتهى الوقت",
      "announceRoundPassed": "نجحت الجولة",
      "announceMatch": "تطابق",
      "announceNoMatch": "غير متطابق",
      "ariaCard": "بطاقة {index}",
      "ariaBoard": "لوحة الذاكرة",
      "startTitle": "ذاكرة الأوراق",
      "startBody": "اقلب بطاقتين في كل مرة للعثور على أوراق متطابقة. أكمل اللوحة قبل انتهاء الوقت.",
      "startButton": "ابدأ",
      "winTitleLevel1": "لقد فزت!",
      "winTitleLevel2": "ذاكرة رائعة!",
      "winTitleLevel3": "ذاكرة حديدية!",
      "winTitleLevel4": "لا روبوت يضاهيك!",
      "winBodyNewBest": "أفضل نتيجة جديدة: {score}.",
      "winBodyScore": "النتيجة: {score}.",
      "winRetry": "حاول مرة أخرى",
      "winLevelUpDefault": "ارفع المستوى!",
      "winLevelUpAfter1": "لوحة أكبر!",
      "winLevelUpAfter2": "أكبر فأكبر!",
      "winLevelUpAfter3": "التحدي الأخير!",
      "lossTitle": "انتهى الوقت",
      "lossBody": "لم تكتمل اللوحة قبل انتهاء المؤقت.",
      "lossRetry": "حاول مرة أخرى",
      "lossEasier": "جرب مستوى أسهل"
    },
    "Chinese (Simplified)": {
      "_lang": "zh-Hans",
      "_default": true,
      "headerBest": "最佳",
      "headerLevel": "关卡",
      "headerTime": "时间",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds}秒",
      "announceRoundStarted": "本轮开始",
      "announceMemorize": "记住卡片",
      "announceOutOfTime": "时间到",
      "announceRoundPassed": "本轮通过",
      "announceMatch": "配对成功",
      "announceNoMatch": "未配对",
      "ariaCard": "卡片 {index}",
      "ariaBoard": "记忆面板",
      "startTitle": "树叶记忆",
      "startBody": "每次翻开两张卡片，找出相同的树叶。在时间结束前清空牌面。",
      "startButton": "开始",
      "winTitleLevel1": "你赢了！",
      "winTitleLevel2": "记性真好！",
      "winTitleLevel3": "过目不忘！",
      "winTitleLevel4": "机器人甘拜下风！",
      "winBodyNewBest": "新的最佳成绩：{score}。",
      "winBodyScore": "得分：{score}。",
      "winRetry": "再玩一次",
      "winLevelUpDefault": "升级！",
      "winLevelUpAfter1": "更大的牌面！",
      "winLevelUpAfter2": "再大一点！",
      "winLevelUpAfter3": "最终挑战！",
      "lossTitle": "时间到",
      "lossBody": "时间结束前没能清空牌面。",
      "lossRetry": "再玩一次",
      "lossEasier": "试试简单些"
    },
    "Spanish": {
      "_lang": "es",
      "_default": true,
      "headerBest": "Mejor",
      "headerLevel": "Nivel",
      "headerTime": "Tiempo",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} s",
      "announceRoundStarted": "Ronda iniciada",
      "announceMemorize": "Memoriza las cartas",
      "announceOutOfTime": "Se acabó el tiempo",
      "announceRoundPassed": "Ronda superada",
      "announceMatch": "Pareja",
      "announceNoMatch": "No coinciden",
      "ariaCard": "Carta {index}",
      "ariaBoard": "Tablero de memoria",
      "startTitle": "Memoria de Hojas",
      "startBody": "Voltea dos cartas a la vez para encontrar hojas iguales. Despeja el tablero antes de que se acabe el tiempo.",
      "startButton": "Empezar",
      "winTitleLevel1": "¡Ganaste!",
      "winTitleLevel2": "¡Buena memoria!",
      "winTitleLevel3": "¡Memoria de elefante!",
      "winTitleLevel4": "¡Ningún bot te llega!",
      "winBodyNewBest": "Nueva mejor puntuación: {score}.",
      "winBodyScore": "Puntuación: {score}.",
      "winRetry": "Reintentar",
      "winLevelUpDefault": "¡Sube de nivel!",
      "winLevelUpAfter1": "¡Tablero más grande!",
      "winLevelUpAfter2": "¡Aún más grande!",
      "winLevelUpAfter3": "¡Desafío final!",
      "lossTitle": "Se acabó el tiempo",
      "lossBody": "No despejaste el tablero a tiempo.",
      "lossRetry": "Reintentar",
      "lossEasier": "Más fácil"
    },
    "Portuguese": {
      "_lang": "pt",
      "_default": true,
      "headerBest": "Melhor",
      "headerLevel": "Nível",
      "headerTime": "Tempo",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} s",
      "announceRoundStarted": "Rodada iniciada",
      "announceMemorize": "Memorize as cartas",
      "announceOutOfTime": "Tempo esgotado",
      "announceRoundPassed": "Rodada concluída",
      "announceMatch": "Par",
      "announceNoMatch": "Não combina",
      "ariaCard": "Carta {index}",
      "ariaBoard": "Tabuleiro da memória",
      "startTitle": "Memória das Folhas",
      "startBody": "Vire duas cartas por vez para achar folhas iguais. Limpe o tabuleiro antes do tempo acabar.",
      "startButton": "Começar",
      "winTitleLevel1": "Você venceu!",
      "winTitleLevel2": "Boa memória!",
      "winTitleLevel3": "Memória de elefante!",
      "winTitleLevel4": "Nenhum robô te alcança!",
      "winBodyNewBest": "Novo recorde: {score}.",
      "winBodyScore": "Pontuação: {score}.",
      "winRetry": "Tentar de novo",
      "winLevelUpDefault": "Subir de nível!",
      "winLevelUpAfter1": "Tabuleiro maior!",
      "winLevelUpAfter2": "Ainda maior!",
      "winLevelUpAfter3": "Desafio final!",
      "lossTitle": "Tempo esgotado",
      "lossBody": "Você não limpou o tabuleiro a tempo.",
      "lossRetry": "Tentar de novo",
      "lossEasier": "Mais fácil"
    },
    "French": {
      "_lang": "fr",
      "_default": true,
      "headerBest": "Record",
      "headerLevel": "Niveau",
      "headerTime": "Temps",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} s",
      "announceRoundStarted": "Manche commencée",
      "announceMemorize": "Mémorisez les cartes",
      "announceOutOfTime": "Temps écoulé",
      "announceRoundPassed": "Manche réussie",
      "announceMatch": "Paire",
      "announceNoMatch": "Pas de paire",
      "ariaCard": "Carte {index}",
      "ariaBoard": "Plateau de mémoire",
      "startTitle": "Mémoire des Feuilles",
      "startBody": "Retournez deux cartes à la fois pour trouver les feuilles identiques. Videz le plateau avant la fin du temps.",
      "startButton": "Commencer",
      "winTitleLevel1": "Gagné !",
      "winTitleLevel2": "Belle mémoire !",
      "winTitleLevel3": "Mémoire d'éléphant !",
      "winTitleLevel4": "Aucun robot ne fait mieux !",
      "winBodyNewBest": "Nouveau record : {score}.",
      "winBodyScore": "Score : {score}.",
      "winRetry": "Réessayer",
      "winLevelUpDefault": "Niveau supérieur !",
      "winLevelUpAfter1": "Plateau plus grand !",
      "winLevelUpAfter2": "Encore plus grand !",
      "winLevelUpAfter3": "Défi final !",
      "lossTitle": "Temps écoulé",
      "lossBody": "Vous n'avez pas vidé le plateau à temps.",
      "lossRetry": "Réessayer",
      "lossEasier": "Plus facile"
    },
    "German": {
      "_lang": "de",
      "_default": true,
      "headerBest": "Rekord",
      "headerLevel": "Level",
      "headerTime": "Zeit",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} s",
      "announceRoundStarted": "Runde gestartet",
      "announceMemorize": "Karten merken",
      "announceOutOfTime": "Zeit abgelaufen",
      "announceRoundPassed": "Runde geschafft",
      "announceMatch": "Paar",
      "announceNoMatch": "Kein Paar",
      "ariaCard": "Karte {index}",
      "ariaBoard": "Memory-Brett",
      "startTitle": "Blätter-Memory",
      "startBody": "Decke zwei Karten gleichzeitig auf, um passende Blätter zu finden. Leere das Brett, bevor die Zeit abläuft.",
      "startButton": "Start",
      "winTitleLevel1": "Gewonnen!",
      "winTitleLevel2": "Gutes Gedächtnis!",
      "winTitleLevel3": "Elefantengedächtnis!",
      "winTitleLevel4": "Da kommt kein Bot mit!",
      "winBodyNewBest": "Neuer Rekord: {score}.",
      "winBodyScore": "Punkte: {score}.",
      "winRetry": "Nochmal",
      "winLevelUpDefault": "Nächstes Level!",
      "winLevelUpAfter1": "Größeres Brett!",
      "winLevelUpAfter2": "Noch größer!",
      "winLevelUpAfter3": "Letzte Herausforderung!",
      "lossTitle": "Zeit abgelaufen",
      "lossBody": "Du hast das Brett nicht rechtzeitig geleert.",
      "lossRetry": "Nochmal",
      "lossEasier": "Leichter"
    },
    "Russian": {
      "_lang": "ru",
      "_default": true,
      "headerBest": "Рекорд",
      "headerLevel": "Уровень",
      "headerTime": "Время",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} с",
      "announceRoundStarted": "Раунд начался",
      "announceMemorize": "Запомните карты",
      "announceOutOfTime": "Время вышло",
      "announceRoundPassed": "Раунд пройден",
      "announceMatch": "Пара",
      "announceNoMatch": "Не совпало",
      "ariaCard": "Карта {index}",
      "ariaBoard": "Поле памяти",
      "startTitle": "Память: Листья",
      "startBody": "Открывайте по две карты за раз, чтобы найти одинаковые листья. Очистите поле до окончания времени.",
      "startButton": "Начать",
      "winTitleLevel1": "Победа!",
      "winTitleLevel2": "Хорошая память!",
      "winTitleLevel3": "Память как у слона!",
      "winTitleLevel4": "Ни один бот так не сможет!",
      "winBodyNewBest": "Новый рекорд: {score}.",
      "winBodyScore": "Счёт: {score}.",
      "winRetry": "Ещё раз",
      "winLevelUpDefault": "Новый уровень!",
      "winLevelUpAfter1": "Поле больше!",
      "winLevelUpAfter2": "Ещё больше!",
      "winLevelUpAfter3": "Финальный вызов!",
      "lossTitle": "Время вышло",
      "lossBody": "Вы не успели очистить поле.",
      "lossRetry": "Ещё раз",
      "lossEasier": "Полегче"
    },
    "Japanese": {
      "_lang": "ja",
      "_default": true,
      "headerBest": "ベスト",
      "headerLevel": "レベル",
      "headerTime": "時間",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds}秒",
      "announceRoundStarted": "ラウンド開始",
      "announceMemorize": "カードを覚えて",
      "announceOutOfTime": "時間切れ",
      "announceRoundPassed": "ラウンドクリア",
      "announceMatch": "ペア成立",
      "announceNoMatch": "不一致",
      "ariaCard": "カード {index}",
      "ariaBoard": "メモリーボード",
      "startTitle": "リーフメモリー",
      "startBody": "一度に2枚めくって、同じ葉っぱを見つけよう。時間内にすべて揃えてね。",
      "startButton": "スタート",
      "winTitleLevel1": "クリア！",
      "winTitleLevel2": "記憶力いいね！",
      "winTitleLevel3": "記憶力が冴えてる！",
      "winTitleLevel4": "ボットには無理だ！",
      "winBodyNewBest": "自己ベスト更新：{score}。",
      "winBodyScore": "スコア：{score}。",
      "winRetry": "もう一度",
      "winLevelUpDefault": "レベルアップ！",
      "winLevelUpAfter1": "ボードが大きく！",
      "winLevelUpAfter2": "さらに大きく！",
      "winLevelUpAfter3": "最終チャレンジ！",
      "lossTitle": "時間切れ",
      "lossBody": "時間内にボードを揃えられなかった。",
      "lossRetry": "もう一度",
      "lossEasier": "簡単にする"
    },
    "Korean": {
      "_lang": "ko",
      "_default": true,
      "headerBest": "최고",
      "headerLevel": "레벨",
      "headerTime": "시간",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds}초",
      "announceRoundStarted": "라운드 시작",
      "announceMemorize": "카드를 기억하세요",
      "announceOutOfTime": "시간 종료",
      "announceRoundPassed": "라운드 통과",
      "announceMatch": "짝 맞춤",
      "announceNoMatch": "짝이 아님",
      "ariaCard": "카드 {index}",
      "ariaBoard": "메모리 보드",
      "startTitle": "리프 메모리",
      "startBody": "한 번에 카드 두 장을 뒤집어 같은 잎을 찾으세요. 시간이 끝나기 전에 보드를 비우세요.",
      "startButton": "시작",
      "winTitleLevel1": "승리!",
      "winTitleLevel2": "기억력 좋네요!",
      "winTitleLevel3": "기억력이 예리해요!",
      "winTitleLevel4": "어떤 봇도 못 따라와요!",
      "winBodyNewBest": "최고 기록 경신: {score}.",
      "winBodyScore": "점수: {score}.",
      "winRetry": "다시 하기",
      "winLevelUpDefault": "레벨 업!",
      "winLevelUpAfter1": "더 큰 보드!",
      "winLevelUpAfter2": "더 크게!",
      "winLevelUpAfter3": "마지막 도전!",
      "lossTitle": "시간 종료",
      "lossBody": "시간 안에 보드를 비우지 못했어요.",
      "lossRetry": "다시 하기",
      "lossEasier": "더 쉽게"
    },
    "Indonesian": {
      "_lang": "id",
      "_default": true,
      "headerBest": "Terbaik",
      "headerLevel": "Level",
      "headerTime": "Waktu",
      "bestEmpty": "-",
      "levelDisplay": "{current} / {max}",
      "timeDisplay": "{seconds} dtk",
      "announceRoundStarted": "Ronde dimulai",
      "announceMemorize": "Hafalkan kartunya",
      "announceOutOfTime": "Waktu habis",
      "announceRoundPassed": "Ronde selesai",
      "announceMatch": "Cocok",
      "announceNoMatch": "Tidak cocok",
      "ariaCard": "Kartu {index}",
      "ariaBoard": "Papan memori",
      "startTitle": "Memori Daun",
      "startBody": "Balik dua kartu sekaligus untuk menemukan daun yang sama. Bersihkan papan sebelum waktu habis.",
      "startButton": "Mulai",
      "winTitleLevel1": "Kamu menang!",
      "winTitleLevel2": "Ingatan bagus!",
      "winTitleLevel3": "Ingatan tajam!",
      "winTitleLevel4": "Tak ada bot sehebat ini!",
      "winBodyNewBest": "Rekor baru: {score}.",
      "winBodyScore": "Skor: {score}.",
      "winRetry": "Coba lagi",
      "winLevelUpDefault": "Naik level!",
      "winLevelUpAfter1": "Papan lebih besar!",
      "winLevelUpAfter2": "Lebih besar lagi!",
      "winLevelUpAfter3": "Tantangan terakhir!",
      "lossTitle": "Waktu habis",
      "lossBody": "Papan belum bersih saat waktu habis.",
      "lossRetry": "Coba lagi",
      "lossEasier": "Lebih mudah"
    }
  }
}
