{
    "prelaunch": {
        "badge": "Pre-launch · Hold your spot",
        "navReserve": "Hold your spot",
        "heroKicker": "EvoGO Academy for modern Go learning",
        "heroTitle": "Learn Go with review, quick practice, and Arena play",
        "heroSubtitle": "EvoGO.ai brings AI review, rank-aware puzzles, quick practice, and Arena games into one calm Academy built for steady progress.",
        "ctaTitle": "Register now — we open November 11",
        "ctaSubtitle": "Create an account or sign in to save your place. The Academy unlocks when the gates open.",
        "emailPlaceholder": "you@example.com",
        "emailAria": "Email address",
        "ctaButton": "Email me at launch",
        "ctaLoading": "Reserving…",
        "ctaNote": "Email list = launch reminder only. To hold a real Academy seat, use Register or Log in above.",
        "success": "You're on the list. See you when we open!",
        "invalidEmail": "Please enter a valid email address.",
        "errorGeneric": "Something went wrong. Please try again.",
        "featuresTitle": "What opens inside",
        "f1Title": "Review that explains the move",
        "f1Desc": "Upload games for AI Review (复盘) that shows the turning points, the reason, and the next practice step.",
        "f2Title": "Quick practice by rank",
        "f2Desc": "Short puzzle sessions for life & death, tesuji, captures, joseki, and endgame — matched to where you are now.",
        "f3Title": "Arena play when you are ready",
        "f3Desc": "Play real games and AI practice games with ratings and records that support learning, not noise.",
        "f4Title": "Service built for launch",
        "f4Desc": "Accounts, comments, email notices, Pro, GO wallet, Live, and Video are being prepared as one Academy service.",
        "comingTitle": "Launching soon",
        "comingDesc": "We're putting the final polish on EvoGO.ai. Register or sign in now to hold your spot — we open November 11, 2026.",
        "footerTagline": "Play. Learn. Evolve.",
        "rights": "© {{year}} EvoGO.ai · All rights reserved.",
        "privacy": "Privacy",
        "terms": "Terms",
        "langLabel": "Language",
        "countdownLabel": "Opens in",
        "countdownLive": "We're live — opening now…",
        "countdownDays": "Days",
        "countdownHours": "Hours",
        "countdownMinutes": "Mins",
        "countdownSeconds": "Secs",
        "registerCta": "Register & hold spot",
        "loginCta": "Log in",
        "waitBadge": "Registered · Waiting for open",
        "waitKicker": "Your seat is saved",
        "waitTitle": "You’re in — we open soon",
        "waitSubtitle": "Hi {{name}}. You’re logged in. Hang tight — when the countdown hits zero, refresh to enter.",
        "waitMember": "player",
        "waitCtaTitle": "Hang tight",
        "waitCtaSubtitle": "You can leave and come back anytime. When we open, refresh to enter the Academy.",
        "waitNote": "When the countdown hits zero, refresh this page to enter.",
        "logout": "Log out",
        "homeCta": "Back to hold-your-spot page",
        "metaDescription": "Register now to hold your spot — EvoGO Academy opens November 11, 2026. AI review, quick practice, Arena, Live, and Video in your browser.",
        "ogTitle": "EvoGO — Register & hold your spot",
        "portalNews1": "Official open date: November 11, 2026 — register now to hold your spot.",
        "portalNews2": "Academy pillars in final polish: Review, Quick practice, Arena, Live, and Video.",
        "portalNews3": "Before open: register, sign in, and complete your profile. Wallet and lessons unlock at launch.",
        "portalEvent1": "Academy Pro opens after launch — spot holders get notified first.",
        "portalEvent2": "Quick practice streaks and service notices launch with the gates open.",
        "portalUpdate1": "Pre-launch portal live with countdown and hold-your-spot registration.",
        "portalUpdate2": "AI Review (复盘), comments, and email notices are being tuned for opening day.",
        "portalStep2Desc": "Pro / GO wallet unlocks after launch — hold your spot now.",
        "waitNoteNoCountdown": "When we open, refresh this page to enter the Academy.",
        "waitSubtitleNoCountdown": "Hi {{name}}. You’re logged in. Your spot is held — we open November 11."
    },
    "mentorRelease": {
        "comingTitle": "Coming Soon",
        "comingMeta": "Unlocks {{date}} · {{remaining}} more",
        "locked": "This mentor hasn't opened yet."
    },
    "user": {
        "kishi": "Kishi",
        "codename": "Kishi Codename",
        "profile": "Kishi Profile",
        "completeProfile": "Complete Kishi Profile",
        "unknown": "Unknown",
        "activated": "Activated",
        "notActivated": "Not Activated",
        "avatarAlt": "Avatar",
        "elo": "ELO"
    },
    "lang": {
        "label": "Language",
        "updated": "Language updated",
        "sessionBlocked": "Exit the current game or review before changing language."
    },
    "nav": {
        "systemMenu": "System Menu",
        "hub": "Matrix Hub",
        "myRoom": "My Room",
        "arena": "Arena",
        "school": "Go School",
        "store": "Armory Store",
        "dojo": "Training Dojo",
        "console": "Console",
        "puzzleEditor": "Puzzle Editor",
        "disconnect": "Disconnect",
        "backHub": "Hub",
        "backRoom": "Room",
        "lounge": "Game Hall",
        "stats": "Stats",
        "friends": "Friends",
        "gameLibrary": "Game Library",
        "guild": "Guild",
        "achievements": "Achievements",
        "season": "Season",
        "quests": "Quests",
        "studio": "Photo Studio",
        "fullscreen": "Fullscreen",
        "exitFullscreen": "Exit fullscreen",
        "more": "More",
        "sectionPlay": "Play",
        "sectionMine": "My Space",
        "sectionLearn": "Learn",
        "sectionSocial": "Social",
        "sectionRecord": "Records",
        "sectionStaff": "Staff",
        "sectionMore": "More",
        "sectionPlayEdu": "Play",
        "sectionLearnEdu": "Learn",
        "hubEdu": "Home",
        "arenaEdu": "Play",
        "schoolEdu": "Puzzles",
        "dojoEdu": "Review",
        "storeEdu": "Store",
        "loungeEdu": "Game Hall"
    },
    "common": {
        "energy": "Energy",
        "tokens": "Tokens",
        "sync": "Sync Rate",
        "loading": "Loading...",
        "send": "Send",
        "import": "Import",
        "cancel": "Cancel",
        "confirm": "Confirm",
        "close": "Close",
        "networkError": "Network error",
        "tryAgain": "Try again",
        "backToHub": "← Back to Matrix Hub",
        "hire": "Hire {{cost}} 🪙",
        "topUp": "Top Up Now",
        "nationality": "Nationality",
        "permission": "Role",
        "linkStatus": "Email Link",
        "appName": "EvoGo Matrix",
        "error": "Error",
        "vs": "VS",
        "elo": "ELO",
        "notFilled": "Not provided",
        "sysTag": "[SYS]",
        "denied": "Access denied",
        "dbError": "Database error",
        "roomNotFound": "Room not found",
        "historyNotFound": "Match history not found",
        "offline": "Offline",
        "offlineBanner": "You are offline — some features may not work until you reconnect.",
        "aiOffline": "(AI offline)",
        "soundOn": "Sound on",
        "soundOff": "Sound off",
        "success": "Done"
    },
    "landing": {
        "title": "EVOGO MATRIX",
        "subtitle": "A cyber Go metaverse of emotion and strategy",
        "login": "Connect",
        "register": "Create Profile",
        "featureArena": "Ranked Arena",
        "featureArenaDesc": "Blitz, standard, and bounty rooms with live matchmaking.",
        "featureDojo": "AI Dojo Review",
        "featureDojoDesc": "Import SGF and replay move-by-move with your mentor coach.",
        "featureAlbum": "Constellation Album",
        "featureAlbumDesc": "Collect 48 mentors across 12 zodiac signs.",
        "tagline": "Create an account to match live opponents",
        "featurePlay": "Play",
        "featurePlayDesc": "Blitz and standard ranked games, or invite a friend.",
        "featureLearn": "Learn",
        "featureLearnDesc": "Graded life-and-death puzzles that match your level.",
        "featureReview": "Review",
        "featureReviewDesc": "Upload SGF and study each game with an AI coach.",
        "titleEdu": "EvoGO",
        "subtitleEdu": "Go education meets AI — puzzles, review, and live play in one place",
        "forestRealm": "Forest Grove",
        "forestTitle": "Learn Go in the forest",
        "forestSubtitle": "Relaxed and warm — puzzles, review, and live play, all in one woodland.",
        "forestTagline": "Switch to Cyber Matrix for the classic esports look",
        "forestPlayLine": "Sign up and play your first game in one tap",
        "forestMoreSummary": "Curious about puzzles and review? Peek inside",
        "loginEdu": "Log in",
        "registerEdu": "Sign up free",
        "featureAlbumEdu": "Mentor Album",
        "featureAlbumDescEdu": "Pick an AI mentor for coaching and sparring.",
        "academyBrand": "EVOGO.ai",
        "portalTagline": "Review · Puzzles · Videos",
        "academyHeadline": "Learn Go like a game you want to keep playing",
        "academyLead": "A coach who talks like a human, puzzles that level with you, and a daily path that keeps you coming back.",
        "academyCtaPrimary": "Start free",
        "academyCtaSecondary": "Log in",
        "academyCoachName": "Janice",
        "academyCoachRole": "Your AI Go coach",
        "pillarsKicker": "Academy services",
        "pillarsTitle": "Built deep for learning — not a metaverse mall",
        "pillarsLead": "One focused Academy. Five things we go deep on.",
        "pillar1Title": "Human-like AI review",
        "pillar1Desc": "Janice walks your game move by move — voice, board, and go reason together.",
        "pillar2Title": "Largest puzzle library",
        "pillar2Desc": "Life-and-death, joseki, and graded drills matched to your rank.",
        "pillar3Title": "Quick practice rhythm",
        "pillar3Desc": "Short rank-aware sessions help you keep momentum without turning study into chores.",
        "pillar4Title": "11 languages worldwide",
        "pillar4Desc": "Learn in your language — UI and coaching content across global Go communities.",
        "pillar5Title": "Rank ladder & video path",
        "pillar5Desc": "From first stone to advanced — structured video curriculum on a clear ladder.",
        "academyClose": "Ready for your first lesson?",
        "portalNavLabel": "Site menu",
        "portalNavHome": "Home",
        "portalNavPillars": "Services",
        "portalNavNotices": "Notices",
        "portalNavGuide": "Beginner guide",
        "portalNavTopup": "Top up",
        "portalNavProfile": "Profile",
        "portalAccountTitle": "Account",
        "portalAccountHint": "Log in on the web to learn, top up GO, and edit your profile.",
        "portalLogin": "Log in",
        "portalRegister": "Register",
        "portalHello": "Hi, {{name}}",
        "portalOpenApp": "Continue learning",
        "portalWallet": "Wallet / Top up",
        "portalProfile": "Edit profile",
        "portalLogout": "Log out",
        "portalDownloadApp": "Start on web",
        "portalDownloadAppSub": "Today · Review · Puzzles · Videos",
        "portalTopup": "Top up GO",
        "portalTopupSub": "Pro & GO wallet on the web",
        "portalGuide": "Beginner pack",
        "portalGuideSub": "3 steps to start learning",
        "portalHeroTitle": "Official Academy portal",
        "portalHeroLead": "Read notices here. Log in to learn, top up GO, and update your profile — all on the web.",
        "portalPlayCta": "Start learning",
        "portalNoticesCta": "Latest notices",
        "portalPlayNote": "Tip: start learning in your browser — no download required.",
        "portalNoticesTitle": "Official notices",
        "portalTabNews": "News",
        "portalTabEvent": "Events",
        "portalTabUpdate": "Updates",
        "portalTagNews": "News",
        "portalTagEvent": "Event",
        "portalTagUpdate": "Update",
        "portalNews1": "Janice human-like review is live — voice + board + go reason.",
        "portalNews1Date": "07-10",
        "portalNews2": "Academy focuses on Review, Quick practice, Arena, Live, and Video.",
        "portalNews2Date": "07-08",
        "portalNews3": "Learn in your browser: Today plan, puzzles, reviews, and videos — plus wallet and profile.",
        "portalNews3Date": "07-10",
        "portalEvent1": "Academy Pro is live — subscribe or extend anytime.",
        "portalEvent1Date": "07-08",
        "portalEvent2": "Quick practice streaks and service notices coming soon.",
        "portalEvent2Date": "07-12",
        "portalUpdate1": "Landing refreshed to game-portal style with latest logo.",
        "portalUpdate1Date": "07-10",
        "portalUpdate2": "Review speech: human shells + go-theory why beat.",
        "portalUpdate2Date": "07-10",
        "portalPillarsTitle": "EvoGO Academy services",
        "portalPillarsLead": "Deep learning product — not a metaverse mall.",
        "portalGuideKicker": "Beginner guide",
        "portalGuideTitle": "Start in three steps",
        "portalStep1Title": "Create account",
        "portalStep1Desc": "Register on the web and start your first lesson.",
        "portalStep2Title": "Top up if you need Pro / GO",
        "portalStep2Desc": "Wallet lives on the web settings page.",
        "portalStep3Title": "Play & review in your browser",
        "portalStep3Desc": "Today plan, Janice review, puzzles, and video ladder — all in your browser."
    },
    "hub": {
        "title": "EvoGo — Matrix Hub",
        "myRoomTitle": "My Room",
        "myRoomDesc": "Your private space. Start from a cabin, review on the floor, and bond with your AI mentor on the couch.",
        "arenaTitle": "Arena",
        "arenaDesc": "Holographic matchmaking. Quick pair or post bounty rooms for high-stakes token battles.",
        "schoolTitle": "Go School",
        "schoolDesc": "Training chamber. Solve life-and-death puzzles and earn bounty tokens.",
        "storeTitle": "Armory Store",
        "storeDesc": "Token forge. Collect mentors in the album, rent time, and unlock coaching across the matrix.",
        "dojoTitle": "Training Dojo",
        "dojoDesc": "Your active mentor reviews games, spars with you, and grows sync rate through every session.",
        "arenaDescShort": "Quick match games",
        "schoolDescShort": "Life-and-death drills",
        "dojoDescShort": "Mentor review & spar",
        "myRoomDescShort": "Personal space & mentor",
        "storeDescShort": "Mentor rentals & VIP",
        "statsDescShort": "Win rate & records",
        "dockMe": "Me",
        "emailWarning": "Email not verified. Ranked and bounty modes are locked until you verify your inbox.",
        "loungeTitle": "Game Hall",
        "loungeDesc": "Play Go Nexus and Pet Arena — our two flagship game modes.",
        "activityTitle": "Activity",
        "activityEmpty": "All caught up — explore the modules below.",
        "activityReviewTitle": "Review ready",
        "activityReviewBody": "{{label}} — open Dojo to study.",
        "activityReviewDefault": "Game review",
        "activityFriendTitle": "Friend request",
        "activityFriendBody": "{{name}} wants to connect.",
        "activityGuildTitle": "Guild invite",
        "activityGuildBody": "{{from}} invited you to [{{tag}}] {{guild}}.",
        "activityChallengeTitle": "Friend challenge",
        "activityChallengeBody": "{{name}} challenged you to a teaching match.",
        "activityAccept": "Accept",
        "activityDecline": "Decline",
        "activityPreview": "Preview",
        "activityOpenDojo": "Open in Dojo",
        "activityReviewStats": "{{moves}} moves · {{blunders}} issues · {{praise}} good moments",
        "questsTitle": "Today's path",
        "questDaily": "Claim daily supply",
        "questDailyDone": "Daily supply claimed",
        "questSeasonClaim": "Season reward ready at {{pts}} pts",
        "questSeasonProgress": "Season: {{name}} ({{pts}} pts)",
        "questActivity": "{{n}} items need your attention",
        "questFirstRent": "First mentor rent — {{pct}}% off",
        "moduleEmptyDojo": "Rent a mentor to unlock AI game reviews.",
        "moduleEmptyStore": "First rental 50% off — start in the Album.",
        "moduleEmptyLounge": "Rent a mentor to unlock Game Hall adventures with Go Nexus and Pet Arena.",
        "welcomeKicker": "Welcome back",
        "forestKicker": "Forest breeze · welcome back",
        "forestHeroTitle": "A game in the forest?",
        "forestHeroSub": "Match casually, or invite a friend to practice under the trees.",
        "forestPlayOnlyTitle": "Time for a game",
        "forestPlayOnlySub": "Forest Grove is here to play — tap the wooden sign and start.",
        "forestPlayCta": "Play now",
        "forestInviteSoft": "Invite a friend",
        "forestWhisperTitle": "Woodland whispers · light tasks",
        "forestLibraryHint": "Puzzles, review, store… tap the nook and follow the bubbles.",
        "forestExploreHintHover": "Hover a building to explore",
        "forestExploreHintTap": "Tap a building to explore",
        "forestChipEnergy": "Energy",
        "forestChipTokens": "Tokens",
        "forestClearingLabel": "Forest clearing",
        "forestCabinsLabel": "Forest cabins",
        "forestCabinsTitle": "Little cabins in the woods",
        "questsTitleForest": "Today's forest tasks",
        "activityTitleForest": "Woodland notes",
        "playHeroTitle": "Ready for a game?",
        "playHeroSub": "Match a live opponent or invite a friend to practice.",
        "playCta": "Start playing",
        "inviteFriend": "Invite a friend",
        "pathsLabel": "Learn · Practice · Play",
        "pathLearnLabel": "Learn",
        "pathLearnTitle": "Puzzles & shapes",
        "pathLearnDesc": "Build fundamentals at your rank.",
        "pathPracticeLabel": "Practice",
        "pathPracticeTitle": "AI game review",
        "pathPracticeDesc": "Upload a game and see what mattered.",
        "pathPlayLabel": "Play",
        "pathPlayTitle": "Arena",
        "pathPlayDesc": "Ranked matchmaking and friend games.",
        "exploreMore": "Explore more",
        "loungeDescShort": "Go Nexus & Pet Arena",
        "gamesDescShort": "Match library & records",
        "guildDescShort": "Teams & guild play",
        "questsTitleEdu": "Today's tasks",
        "activityTitleEdu": "Updates",
        "myRoomTitleEdu": "My Room",
        "storeTitleEdu": "Store",
        "loungeTitleEdu": "Game Hall"
    },
    "quests": {
        "title": "Quests & rewards",
        "subtitle": "Daily supply, season milestones, and your Day-1 path.",
        "viewAll": "All quests",
        "allClear": "All quests complete for now — great work!",
        "dismissDay1": "Hide Day-1 checklist",
        "day1Progress": "Day-1 progress: {{done}}/{{total}}",
        "day1Step_daily": "Claim daily supply on Hub",
        "day1Step_play": "Play your first match",
        "day1Step_mentor": "Rent or preview a mentor",
        "day1Daily": "Go claim",
        "day1Play": "Arena",
        "day1Mentor": "Album",
        "achievementProgress": "Achievements: {{n}} / {{total}} unlocked"
    },
    "mentorMeta": {
        "syncRate": "Sync Rate",
        "openAlbum": "Open Album",
        "noMentorTitle": "No active mentor",
        "noMentorHint": "Rent a mentor in the Collection Album to unlock coaching everywhere.",
        "pausedTitle": "Mentor on standby",
        "pausedHint": "{{count}} mentor(s) paused — tap Use in the album to resume countdown.",
        "collectionTitle": "Collection {{count}}/{{total}}",
        "expiredHint": "Some mentors are collected but asleep — renew to wake them.",
        "collectionProgress": "Collected {{count}} / {{total}} mentors",
        "nextMilestone": "Next milestone at {{count}}",
        "expiringSoon": "{{name}} expires within 48h — consider renewing",
        "milestoneNovice": "Novice Collector",
        "milestoneAdept": "Adept Collector",
        "milestoneMaster": "Master Collector",
        "coachLabel": "Coach",
        "coachDefault": "Keep training — I'll watch your shape and timing.",
        "coachRentHint": "Hire a mentor to get personalized puzzle and review coaching.",
        "puzzleIntro": "Read the shape carefully. I'll react to every try.",
        "puzzleOk": "Great job!",
        "puzzleRetry": "Try again",
        "puzzleWrong": "Try again",
        "puzzleSuccess": "Great job!",
        "sparring": "Sparring",
        "sparringHint": "Play naturally — we can review together in the Dojo after.",
        "goToDojoReview": "Review with mentor in Dojo",
        "dailyGreeting": "Good morning from {{name}}! Day {{streak}} together — sync +{{bond}}%. Supply delivered.",
        "dailyStreak": "{{name}}: 7-day streak! Extra sync +{{bond}}%. Proud of you.",
        "dailyPaused": "{{name}} is on standby (countdown paused).",
        "dailyNoMentor": "Daily supply delivered. Visit the album to activate a mentor.",
        "milestoneZodiac": "Zodiac Collector",
        "milestoneHalf": "Half Galaxy",
        "milestoneLegend": "Legendary Patron",
        "milestoneComplete": "Stellar Codex Complete",
        "zodiacSection": "{{symbol}} {{name}} · 3 mentors",
        "milestone_bond_5": "Your mentor recognizes your dedication.",
        "milestone_bond_10": "Growing trust — your mentor opens up more.",
        "milestone_bond_25": "Strong bond — deeper review insights unlocked.",
        "milestone_bond_50": "Elite sync — mentor speaks with rare candor.",
        "milestone_bond_75": "Near-perfect resonance.",
        "milestone_bond_99": "Maximum bond — legend status with your mentor."
    },
    "auth": {
        "loginTitle": "EvoGo — Sign In",
        "registerTitle": "EvoGo — Register",
        "forgotTitle": "EvoGo — Reset Password",
        "resetTitle": "EvoGo — New Password",
        "terminal": "Access Terminal",
        "google": "Google Sign-in",
        "facebook": "Facebook Sign-in",
        "apple": "Sign in with Apple",
        "override": "OVERRIDE",
        "accessKey": "Access Key",
        "password": "Password",
        "email": "Email",
        "codenamePlaceholder": "Enter codename...",
        "passwordPlaceholder": "••••••••",
        "lostKey": "Forgot password?",
        "connect": "Connect",
        "noProfile": "No profile? Register →",
        "backLobby": "← Back to lobby",
        "createProfile": "Initialize Profile",
        "verifyEmail": "Verify Email",
        "resetPassword": "Reset Password",
        "newPassword": "New Password",
        "confirmPassword": "Confirm Password",
        "submitReset": "Update Password",
        "sendResetLink": "Send Reset Link",
        "errors": {
            "notFound": "Account not found — register first, or run npm run seed:dev for a local demo login",
            "wrongPassword": "Incorrect password",
            "invalidCredentials": "Incorrect username or password",
            "system": "System error",
            "csrfExpired": "This form expired. Refresh the page and submit again.",
            "googleFail": "Google authorization failed",
            "facebookFail": "Facebook authorization failed",
            "appleFail": "Apple Sign In failed. Please try again.",
            "appleNotConfigured": "Apple Sign In is not available yet.",
            "useAppPassword": "In the mobile app, sign in with username & password (or Apple). Google / Facebook open the system browser — return to the app and try again.",
            "socialEmailExists": "This email is already registered. Please log in with that account first, then link social sign-in in settings.",
            "registerFail": "Registration failed. Please check your details and try again.",
            "registerInvalidInput": "Please check your username, email, and password.",
            "registerConflict": "This account could not be created because one of the account fields is already in use.",
            "emailRegistered": "This email is already registered. Please sign in instead.",
            "verificationEmailFail": "Account created, but the verification email could not be sent. Please try signing in or contact support.",
            "invalidVerify": "Invalid verification link",
            "verifyExpired": "Link expired or invalid token",
            "verifySystem": "Verification processing error",
            "invalidEmail": "Please enter a valid email",
            "invalidReset": "Invalid reset link",
            "resetExpired": "Link expired or already used",
            "passwordShort": "Password must be at least 6 characters",
            "codenameTaken": "This codename is already taken by another kishi",
            "profileFail": "Profile save failed, check your input",
            "registrationClosed": "Registration is temporarily closed. Try again later or sign in with an existing account.",
            "rateLimited": "Too many attempts. Please wait a few minutes and try again."
        },
        "success": {
            "registered": "Profile created. Check your email to verify your account.",
            "registeredReady": "Account ready — sign in to hold your spot. We open November 11.",
            "verified": "Email verified! Welcome to EvoGo Matrix.",
            "resetSent": "If this email is registered, a reset link has been sent.",
            "passwordReset": "Password updated. Sign in with your new password."
        },
        "academyAuth": {
            "divider": "Or sign in with username & password",
            "registerDivider": "Or register with email",
            "username": "Username",
            "password": "Password",
            "signIn": "Sign in",
            "forgotPassword": "Forgot password?",
            "noAccount": "No account? Register",
            "createAccount": "Create account",
            "profileLater": "Phone, birthday, and rank can wait — add them in your profile after sign-up to unlock the welcome GO gift.",
            "appShellLoginHint": "In the app, use username & password or Sign in with Apple. Google / Facebook open the system browser and leave the app."
        },
        "prelaunchWaitNote": "Pre-launch: browser sign-in may wait on /wait; the mobile app opens Academy after sign-in."
    },
    "store": {
        "paymentReturn": {
            "pageTitle": "EvoGO — Secure Checkout",
            "kicker": "Secure Checkout",
            "cancelTitle": "Checkout cancelled",
            "cancelSub": "No tokens or VIP time were added. Returning you to the Store.",
            "successTitle": "Payment received",
            "successSub": "We are confirming your order and returning you to EvoGO.",
            "cancelSubAcademy": "Subscription not activated. Returning to your Academy wallet.",
            "successSubAcademy": "Confirming your subscription and returning to your Academy wallet.",
            "keepOpen": "Please keep this page open for a moment.",
            "confirmingTitle": "Confirming payment",
            "confirmingSub": "We are verifying your order with the payment provider. Returning you to EvoGO shortly.",
            "confirmingSubAcademy": "Confirming your purchase — returning to your Academy wallet shortly."
        },
        "title": "Armory Store",
        "finance": "💳 Finance Terminal",
        "financeDesc": "Convert fiat through encrypted nodes into in-matrix battle assets.",
        "mentors": "🧬 Mentor Hub",
        "mentorsDesc": "Hired mentors join your dojo for review, sparring, and coaching.",
        "albumTitle": "📖 Mentor Collection Album",
        "albumDesc": "Collect mentors over time. Owned mentors appear in full color; unowned slots stay dim until you rent them.",
        "albumDescShort": "Browse 12 constellations, 48 mentors — tap a sign, then open full profiles to rent or activate.",
        "albumCountdownHint": "Active mentors always show time remaining. Only the mentor you are using counts down — others stay paused until you switch.",
        "albumStatus": {
            "never_owned": "Locked",
            "active_using": "In Use",
            "active_idle": "Paused",
            "expired": "Collected"
        },
        "albumCollected": "Previously collected — rent again to reactivate",
        "countdownActive": "Time remaining",
        "countdownPaused": "Paused time",
        "activateMentor": "Use This Mentor",
        "mentorInUse": "Currently Active",
        "mentorTrial": "15s preview",
        "mentorTrialTitle": "Mentor preview",
        "mentorTrialHint": "15-second idle clip preview",
        "mentorTrialEnded": "Preview ended — rent to unlock the full mentor.",
        "rentCta": "Rent in Album",
        "rentSuccessFirst": "{{name}} rented for {{days}} days — first-rent 50% off applied!",
        "firstRentBanner": "🎁 First mentor rental: {{pct}}% off — browse the Album below.",
        "firstRentShort": "first rent",
        "checkoutRedirect": "Redirecting to secure checkout…",
        "paymentSuccess": "Payment received — tokens will appear shortly.",
        "paymentCancelled": "Checkout cancelled.",
        "paymentProcessing": "Payment received — tokens may take a moment to appear.",
        "paymentSuccessTokens": "Payment complete! +{{amount}} 🪙 credited.",
        "vipPaymentSuccess": "VIP subscription active — perks unlocked!",
        "checkoutFailed": "Checkout could not start. Try again or contact support.",
        "orderCreated": "Order created — complete checkout when payment opens.",
        "vipCompareTitle": "Free vs VIP",
        "vipCompareFree": "Free",
        "vipCompareBase": "Standard",
        "vipCompareBonus": "VIP bonus",
        "daysUnit": "d",
        "rentConfirm": "Spend {{cost}} tokens to rent {{name}} for {{days}} days?",
        "rentSuccessMsg": "{{name}} rented for {{days}} days!",
        "roomPerkLine": "Room Lv.{{level}} \"{{scene}}\" · mentor rent -{{pct}}%",
        "upgradeRoomLink": "Upgrade room for more discount",
        "activateSuccessMsg": "{{name}} is now your active mentor. Countdown resumed.",
        "mentorNotOwned": "You do not have active time on this mentor.",
        "hireConfirm": "Spend {{cost}} tokens to hire {{name}}?",
        "hireSuccess": "Mentor hired successfully!",
        "insufficient": "Insufficient tokens",
        "albumFull": "Your room album is full — upgrade your room or let a mentor's time expire before renting another.",
        "alreadyHired": "You already have a mentor",
        "topUpSuccess": "Top-up successful! Received {{amount}} tokens.",
        "paymentPending": "Payment gateway coming soon — top-up is in preview mode until launch.",
        "gatewaysPending": "Secure checkout will activate once merchant settings are ready.",
        "legalNotice": "By purchasing you agree to our",
        "usdPrice": "≈ ${{usd}} USD",
        "myrSettlementNote": "USD prices are reference only. Secure checkout charges in MYR using the current USD/MYR rate plus a 4% gateway/FX markup.",
        "yourBalance": "Your balance: {{amount}} 🪙",
        "vipTitle": "👑 EvoVIP Subscription",
        "vipDesc": "Monthly / quarterly / yearly — full member perks while active; time stacks on renewals.",
        "vipActiveUntil": "Active until {{date}}",
        "vipDaysLeft": "{{days}} days left",
        "vipPerkStamina": "Lounge stamina 25/day (+10)",
        "vipPerkRent": "Extra 5% off mentor rentals (stacks with room discount)",
        "vipPerkDaily": "+5 tokens on daily sign-in",
        "vipPerkEnergy": "+1 energy cap",
        "vipPerkBuys": "5 lounge stamina pack buys/day (3 for free users)",
        "vipPerkFrame": "Gold Crown avatar frame (yearly adds Year Crown)",
        "vipPlan_monthly": "Monthly",
        "vipPlan_quarterly": "Quarterly",
        "vipPlan_yearly": "Yearly",
        "vipDurationDays": "{{days}} days",
        "vipYearFrame": "Yearly exclusive Year Crown frame",
        "vipActivate": "Subscribe / renew",
        "vipConfirm": "Activate {{plan}}?\n(Preview mode until payment gateway is live.)",
        "vipActivateSuccess": "VIP active for {{days}} days!",
        "vipActivateSuccessBonus": "VIP active for {{days}} days — bonus {{bonus}} tokens granted!",
        "currentMentor": "Active mentor: {{name}}",
        "mentorActive": "Hired",
        "alreadyHiredMentor": "You already hired {{name}}.",
        "hireSuccessMsg": "Contract signed! {{name}} has joined your dojo.",
        "vipCompareVip": "VIP"
    },
    "albumHub": {
        "title": "Mentor Collection Album",
        "subtitle": "Twelve zodiac constellations guard thirty-six AI mentors. Collect, rent, and bond — one constellation at a time.",
        "collectionLabel": "Collection",
        "hubHint": "Tap a constellation card — it glows, trembles, and unlocks.",
        "unsealHint": "Tap to unlock",
        "crumbAlbum": "Album",
        "zodiacSubtitle": "{{symbol}} {{name}} · {{count}}/3 mentors in your collection",
        "legacyTag": "Legacy mentor",
        "genderF": "Female",
        "genderM": "Male",
        "bondLabel": "Sync {{level}}%",
        "rentSection": "Rental tiers",
        "constellationLine": "Constellation mentor",
        "storePromoTitle": "Need more tokens?",
        "storePromoDesc": "Return to the armory for top-up packages.",
        "backStore": "Store",
        "openAlbum": "Open Collection Album",
        "openAlbumSub": "12 signs · 48 mentors · zodiac galleries & full profiles",
        "openMentorProfile": "Open {{name}} profile"
    },
    "mentor": {
        "chloe": {
            "role": "Gentle Tutor",
            "desc": "A patient big-sister type who stays with you through every setback."
        },
        "stella": {
            "role": "Tsundere Heiress",
            "desc": "A high-rank heiress who talks tough but secretly cares about you."
        },
        "elara": {
            "role": "Mystic Go Teacher",
            "desc": "An ethereal yet very human mentor — quiet, perceptive, and always on point."
        },
        "cangfeng": {
            "name": "Cangfeng",
            "role": "Immortal Sage",
            "desc": "A reclusive master who guides you in classical prose."
        },
        "kael": {
            "role": "Sharp Genius",
            "desc": "An arrogant prodigy ready to roast your blunders."
        },
        "aria": {
            "role": "Tactical Analyst",
            "desc": "A cold military instructor who calculates win rates to decimals."
        },
        "nova": {
            "role": "Energetic Kouhai",
            "desc": "An enthusiastic junior who always calls you Senpai."
        },
        "luna": {
            "role": "Kuudere",
            "desc": "Minimal emotion, maximum precision in every word."
        },
        "qingxuan": {
            "name": "Qingxuan",
            "role": "Hidden Go Saint",
            "desc": "A graceful young saint whose stones seem to whisper with the wind."
        },
        "sienna": {
            "name": "Sienna",
            "role": "Blazing Vanguard",
            "desc": "Crimson ponytail warrior beauty — bold laughs, fearless openings, always first to charge."
        },
        "vera": {
            "name": "Vera",
            "role": "Athletic Ace",
            "desc": "Short-haired fitness goddess with sun-kissed skin; pushes you to fight for every point."
        },
        "axel": {
            "name": "Axel",
            "role": "Iron General",
            "desc": "Sharp-jawed commander with piercing eyes; direct, hot-blooded, never backs down."
        },
        "rosalie": {
            "name": "Rosalie",
            "role": "Velvet Heiress",
            "desc": "Long wavy hair, lazy elegance; treats the board like fine wine — patient and luxurious."
        },
        "mira": {
            "name": "Mira",
            "role": "Honey Smile",
            "desc": "Dimpled sweet sister type who calms you with warmth before every critical move."
        },
        "damian": {
            "name": "Damian",
            "role": "Steadfast Baron",
            "desc": "Deep-voiced gentleman with rock-solid temperament; unshakeable in complex fights."
        },
        "zara": {
            "name": "Zara",
            "role": "Twin-Tail Trickster",
            "desc": "Witty genius girl with sparkling eyes; turns tactics into playful riddles."
        },
        "iris": {
            "name": "Iris",
            "role": "Scholar Fox",
            "desc": "Glasses beauty with sly charm; reads ten moves ahead while teasing your habits."
        },
        "felix": {
            "name": "Felix",
            "role": "Silver Tongue",
            "desc": "Handsome smooth talker who makes heavy joseki feel like casual chat."
        },
        "seraphina": {
            "name": "Seraphina",
            "role": "Golden Queen",
            "desc": "Regal blonde with commanding aura; expects royal-level shape from you."
        },
        "lyra": {
            "name": "Lyra",
            "role": "Stage Star",
            "desc": "Spotlight idol beauty — dramatic praise, dramatic scolding, always memorable."
        },
        "cyrus": {
            "name": "Cyrus",
            "role": "Solar King",
            "desc": "Charismatic lion-hearted prince; generous when you shine, fierce when you slack."
        },
        "hana": {
            "name": "Hana",
            "role": "Precision Nurse",
            "desc": "Clean, perfect ponytail; finds every cutting point like a spotless diagnosis."
        },
        "vivian": {
            "name": "Vivian",
            "role": "Ice Librarian",
            "desc": "Cool violet-eyed beauty; minimal words, surgical accuracy."
        },
        "ethan": {
            "name": "Ethan",
            "role": "Quiet Top Student",
            "desc": "Reserved handsome scholar; awkward with feelings but brilliant with numbers."
        },
        "celeste": {
            "name": "Celeste",
            "role": "Moonlight Artist",
            "desc": "Ethereal painter girl who sees harmony and imbalance on the board as color."
        },
        "ophelia": {
            "name": "Ophelia",
            "role": "Gentle Mediator",
            "desc": "Soft-spoken angel who eases tilt and helps you breathe through bad patches."
        },
        "adrian": {
            "name": "Adrian",
            "role": "Fair Knight",
            "desc": "Classic gentleman beauty; balances attack and defense like a diplomat."
        },
        "victoria": {
            "name": "Victoria",
            "role": "Ice CEO",
            "desc": "Tailored suit queen with frost-blue gaze; efficiency is her love language."
        },
        "selene": {
            "name": "Selene",
            "role": "Night Strategist",
            "desc": "Moonlit workaholic beauty; thrives in long endgames and late-night training."
        },
        "marcus": {
            "name": "Marcus",
            "role": "Steel Executive",
            "desc": "Mature sharp suit elite; climbs the ladder one cold calculation at a time."
        },
        "aura": {
            "name": "Aura",
            "role": "Neon Future",
            "desc": "Cyberpunk hologram girl with electric style; unconventional ideas, stunning looks."
        },
        "nixie": {
            "name": "Nixie",
            "role": "Gadget Genius",
            "desc": "Quirky inventor beauty with goggles; treats joseki like experimental tech."
        },
        "orion": {
            "name": "Orion",
            "role": "Rebel Scientist",
            "desc": "Handsome mad-lab type; breaks rules creatively then proves it works."
        },
        "melody": {
            "name": "Melody",
            "role": "Song Healer",
            "desc": "Gentle musician with dreamy eyes; guides rhythm and flow like a lullaby."
        },
        "serene": {
            "name": "Serene",
            "role": "Dream Painter",
            "desc": "Soft watercolor muse; speaks in images, sees beauty in thin connections."
        },
        "river": {
            "name": "River",
            "role": "Poet Wanderer",
            "desc": "Long-haired gentle guy; calm voice, flowing style, never hurries a stone."
        },
        "noelle": {
            "name": "Noelle",
            "role": "Winter Guardian",
            "desc": "A protective winter healer who helps you shelter weak groups and recover calmly."
        }
    },
    "dojo": {
        "reviewJobReadyMulti": "{{count}} reviews are ready",
        "title": "Training Dojo",
        "privateRoom": "Private Dojo",
        "import": "Import",
        "replay": "Replay",
        "teaching": "Teaching Game",
        "purified": "Dojo reset",
        "purifiedHint": "Start fresh — every stone is practice.",
        "moveCount": "Move",
        "start": "|◀ Start",
        "prev": "◀ Back",
        "next": "Next ▶",
        "autoExplain": "▶ Auto Explain",
        "noMentorTitle": "⛩️ Activate a Mentor",
        "noMentorDesc": "Rent a mentor in the Collection Album, then tap Use to start the countdown.",
        "goStore": "Go to Store 🛍️",
        "bond": "Bond",
        "ready": "{{kishi}}, ready when you are.",
        "mentorOnline": "System: Your mentor is online. Long analyses appear here.",
        "askMentor": "Ask your mentor...",
        "chatLog": "Chat history",
        "matchHistory": "📜 Your Match History",
        "reading": "Reading...",
        "engineOffline": "Analysis engine offline — cannot detect good or bad moves. Try again later.",
        "colorNeeded": "Color selection needed.",
        "colorQuestion": "{{kishi}}, are you playing Black or White? I need to lock the perspective.",
        "generatingSummary": "Generating summary...",
        "reviewDone": "Review completed.",
        "endReview": "End Review",
        "autoExplainRunning": "⏸ Pause Explain",
        "autoExplainStart": "▶ Auto Explain",
        "pauseTeach": "⏸ Pause",
        "continueTeach": "▶ Continue",
        "loginRequired": "Please sign in first",
        "hireFirst": "Rent and activate a mentor in the album first!",
        "noEnergy": "Not enough energy to start a teaching game!",
        "roomFail": "Failed to create room",
        "noValidMoves": "No valid moves found!",
        "sgfLoaded": "Game loaded. Tap Black or White below once.",
        "sgfLoadedAutoColor": "Game loaded — you're {{color}} (from the SGF). Tap Submit to mentor.",
        "colorChosenHint": "{{color}} selected. Tap the gold button below (or the same under the board).",
        "reviewJobOpenWithColor": "Game loaded — you play {{color}} this game. Review starting soon...",
        "winrateChart": "Winrate curve",
        "blackWinrate": "Black winrate",
        "moveNumberLast": "Last move",
        "wrChartLabel": "Move {{move}} · Black {{pct}}%",
        "wrChartLead": "Black ahead {{score}} pts",
        "wrChartTrail": "Black behind {{score}} pts",
        "wrChartEven": "Even on points",
        "wrChartLegendLead": "Score lead",
        "submitReview": "📮 Submit to mentor",
        "reviewJobDefaultLabel": "Game review",
        "reviewJobSubmitted": "Sent to your mentor. First we'll analyze the full-game winrate, then build key variation lines.",
        "reviewJobQueued": "Your mentor is reviewing this game in the background. We will notify you when it is ready.",
        "reviewJobStillReading": "Still analyzing the full game and key variations — open again from notifications when ready.",
        "reviewJobCancelUnavailable": "You can only cancel for about 60 seconds, before analysis starts.",
        "reviewJobQueueFull": "Your mentor is already reading {{max}} games. Wait for one to finish before submitting another.",
        "reviewJobTooShort": "Need at least 3 moves before submitting for review.",
        "reviewJobNotFound": "Review job not found.",
        "reviewJobReadyTitle": "{{mentor}} finished reading your game",
        "reviewJobReadyBody": "\"{{label}}\" is ready — tap the notification to replay in the Dojo.",
        "reviewJobReadyBodySampled": "\"{{label}}\" is ready (streamlined review for a long game) — tap to replay in the Dojo.",
        "reviewListModeSampled": "Streamlined review",
        "reviewListModePartial": "Partial engine data",
        "reviewJobOpenSampledHint": "Streamlined long-game review: full-game winrate is ready, with key variation lines added for the main moments.",
        "reviewJobFailedTitle": "Review analysis failed",
        "reviewJobFailedBody": "\"{{label}}\" could not be analyzed. Try another game or retry later.",
        "reviewJobStatusQueued": "Queued",
        "reviewJobStatusProcessing": "Reading & building lines",
        "reviewJobStatusProcessingMins": "Reading · {{min}} min",
        "reviewJobStatusProcessingRetry": "Reading · {{min}} min (pass {{retry}})",
        "reviewJobStudyingSlow": "Engine is busy — still analyzing. If it exceeds 15 minutes, delete and resubmit.",
        "reviewJobStaleTimeout": "Analysis timed out (server restart or engine hang). Please submit again.",
        "reviewJobStaleBody": "\"{{label}}\" timed out and was re-queued — open the Dojo to check progress, or tap Retry if it appears under failed reviews.",
        "reviewJobStatusReady": "Ready",
        "reviewJobLegacyLines": "This review was saved before full A/B/C lines were stored. Submit a new review for complete routes.",
        "reviewJobLinesPending": "A/B/C variation lines for some key moves are still loading — they will appear as you replay, or ask in chat.",
        "reviewJobReadyOpen": "Your review is ready — open the Dojo to start.",
        "prescanAllTooLong": "Games over {{max}} moves use chunked prescan instead of a single pass.",
        "reviewJobStatusFailed": "Failed",
        "reviewJobOpen": "Start review",
        "reviewListStudyingTitle": "Mentor studying ({{current}}/{{max}})",
        "reviewListStudyingHint": "Full-game winrates and key variation lines are computing in the background. Ready games appear on the right and in notifications.",
        "reviewListStudyingEmpty": "No games in progress.",
        "reviewListReadyTitle": "Ready to review",
        "reviewFabOpen": "Open review queue",
        "reviewListReadyHint": "Analysis is complete — tap a row to replay. Your 3 most recent ready games appear here; open the library for older ones.",
        "reviewListReadyEmpty": "Nothing ready yet. Submit an SGF or match from history to queue a review.",
        "reviewListMoves": "{{n}} moves",
        "reviewListHits": "{{n}} key points",
        "reviewListGoodBad": "{{good}} good, {{bad}} bad",
        "reviewListNoMoments": "Full replay (no highlighted moves)",
        "reviewListArchiveToggle": "Older reviews ({{n}})",
        "reviewListArchiveOpen": "Open review library ({{n}} older)",
        "reviewListArchiveMore": "Load {{n}} more",
        "reviewArchiveModalTitle": "Review library",
        "reviewArchiveModalSubtitle": "{{n}} completed reviews",
        "reviewArchiveSearchPlaceholder": "Search by game name…",
        "reviewArchiveEmpty": "No matching reviews.",
        "reviewArchiveClose": "Close",
        "reviewArchiveLoadMore": "Load more",
        "reviewArchiveRange": "Showing {{from}}–{{to}} of {{total}}",
        "reviewArchiveSearching": "Searching…",
        "reviewArchiveDateLabel": "Date",
        "reviewArchiveDateAll": "All dates",
        "reviewArchiveDate7": "Last 7 days",
        "reviewArchiveDate30": "Last 30 days",
        "reviewArchiveDate90": "Last 90 days",
        "reviewArchiveDate365": "Last year",
        "reviewArchiveDateCustom": "Custom range",
        "reviewArchiveDateTo": "to",
        "reviewArchiveDelete": "Delete",
        "reviewArchiveDeleteConfirm": "Delete \"{{name}}\"? This cannot be undone.",
        "reviewArchiveDeleteBusy": "Cannot delete — job is still processing or not found.",
        "reviewArchiveBulkDelete": "Delete older than…",
        "reviewArchiveBulkOlder30": "30 days ago",
        "reviewArchiveBulkOlder90": "90 days ago",
        "reviewArchiveBulkOlder180": "6 months ago",
        "reviewArchiveBulkOlder365": "1 year ago",
        "reviewArchiveBulkConfirm": "Delete {{n}} completed or failed review(s) older than the selected cutoff (matching your current filters)? This cannot be undone.",
        "reviewArchiveBulkDone": "Deleted {{n}} review(s).",
        "reviewArchiveBulkNone": "No reviews match that cutoff with the current filters.",
        "reviewArchiveDeleteNoCutoff": "Choose how far back to delete.",
        "reviewArchiveSortLabel": "Sort",
        "reviewArchiveSortNewest": "Newest first",
        "reviewArchiveSortOldest": "Oldest first",
        "reviewArchiveSortNameAz": "Name A–Z",
        "reviewArchiveSortNameZa": "Name Z–A",
        "reviewArchiveSortMostGood": "Most good moves",
        "reviewArchiveSortMostBad": "Most problem moves",
        "reviewArchiveBulkPreview": "{{n}} review(s) will be deleted.",
        "reviewArchiveDeletedToast": "Deleted {{n}} review(s).",
        "reviewRetry": "Retry analysis",
        "reviewRetryFailed": "Could not queue a retry for this review.",
        "reviewFailedTitle": "Failed reviews",
        "reviewFailureTimeout": "That took too long. Tap Retry when the engine is back.",
        "reviewFailureOffline": "The engine is unreachable right now — retry in a bit.",
        "reviewFailureEmpty": "The engine finished but returned no usable winrates — tap Retry, or try again later.",
        "reviewFailureUnknown": "Couldn’t finish this game — retry or try another.",
        "weeklyInsightEmpty": "Complete a few mentor reviews this week and I will summarize patterns here.",
        "weeklyInsightBody": "Last {{n}} reviews: about {{blunders}} problem moves and {{praises}} highlights. Common theme: {{theme}}",
        "reviewThemeBarHint": "Tap a chip to jump to that move.",
        "copySummary": "Copy summary",
        "copySummaryDone": "Copied to clipboard.",
        "jumpToMove": "Go to move…",
        "jumpToMovePrompt": "Move number (1–{{max}})",
        "replayKeyOnly": "Auto: key moves only",
        "replayAllMoves": "Auto-play full game",
        "blunderClusterHeadline": "Moves {{from}}–{{to}}: {{count}} big mistakes — focus on move {{focus}}.",
        "blunderClusterDetail": "Several heavy plays between moves {{from}} and {{to}}. Study move {{focus}} first.",
        "dojoToast": "{{msg}}",
        "reviewListSlotsFree": "You can submit {{n}} more.",
        "reviewListUploaded": "Submitted {{at}}",
        "reviewNameTitle": "Name this game record",
        "reviewNameHint": "Helps you find it in the list. You can keep the suggested name.",
        "reviewNameSubmit": "Send to mentor",
        "reviewRename": "Rename",
        "reviewRenamePrompt": "Game record name",
        "reviewRenameInvalid": "Invalid or too long (max 80 characters).",
        "reviewBriefThemeDefault": "Key moments are marked — we'll walk through them move by move.",
        "reviewBriefThemeNoMoments": "Engine could not mark key moves — full replay only.",
        "reviewBriefOpeningDefault": "{{theme}} Opening eval ~{{pct}}%. We only pause on highlighted moves.",
        "reviewTierBeginner": "Tier: Beginner focus — prioritize shape stability and reading discipline.",
        "reviewTierIntermediate": "Tier: Intermediate focus — balance local fights with whole-board direction.",
        "reviewTierAdvanced": "Tier: Advanced focus — optimize conversion and endgame precision.",
        "reviewBriefClosingDefault": "Review done. Main swing: move {{blunderN}}. Best moment: move {{praiseN}}.",
        "reviewBriefPracticeDefault": "Replay the marked moves on a board once before your next game.",
        "reviewCallbackDefault": "After move {{prev}}, ",
        "reviewCallbackGap": "We fast-forwarded from move {{prev}} to move {{n}}. ",
        "reviewBriefStart": "▶ Skip intro, start now",
        "reviewBriefMoments": "Key points: {{hits}}",
        "reviewBriefMomentsTitle": "We'll pause on these moves:",
        "reviewQuietMove": "Move {{n}} · steady",
        "reviewReadingProgress": "Reading game",
        "btnSubmitReview": "📮 Send to mentor",
        "btnReviewReading": "Reading…",
        "btnReviewSubmitted": "Submitted — awaiting mentor",
        "btnStartReplay": "▶ Start review",
        "reviewAskVariation": "Try your line, then you can still open the mentor's A/B/C routes.",
        "variationLineWr": "Line {{label}}: ~{{pct}}%",
        "variationLinePvMoves": "{{n}} moves",
        "variationLinesLoading": "Loading lines B/C…",
        "variationPickLine": "Pick line",
        "viewMentorLines": "👀 Mentor lines A/B/C",
        "viewMentorLine": "Line {{label}}",
        "afterUserPvHint": "Your variation is scored. Resume the review or open the mentor's three lines (~20+ moves each, with win rates).",
        "slowMoveHint": "A bit slow — tap \"Mentor lines\" for A/B/C if you want detail.",
        "resumeAfterVariation": "▶ Resume review",
        "variationStudyHint": "Tap A / B / C for the coach's key points, then continue.",
        "noHistory": "No match history found.",
        "historyWinner": "Winner: {{winner}} ({{reason}})",
        "teachingConfirm": "Starting a teaching game costs 1 Energy. Proceed?",
        "teachingDisabled": "Teaching games are paused for now — use Review to study your games.",
        "contextOpening": "Opening",
        "contextMove": "Move {{n}}, {{color}} just played.",
        "black": "⚫ Black",
        "white": "⚪ White",
        "perspectiveLocked": "Perspective locked. Auto explaining...",
        "prescanStart": "I'll analyze the full-game winrate first, then add key variation lines before we review move by move.",
        "prescanCountdown": "Still reading your game… review starts in {{sec}}s.",
        "prescanWaiting": "I'm still studying your moves… just a moment.",
        "prescanProgress": "Almost ready — bear with me a little longer.",
        "prescanEnriching": "Full-game winrate analysis is complete. Building recommendation-change diagrams for each problem move...",
        "prescanDone": "All right, I've got the whole picture. Let's review move by move.",
        "reviewWinrateLine": "Your winrate is about {{pct}}% right now — let's go move by move.",
        "winrateComputing": "KataGo is still calculating this position — we'll keep reviewing and update you shortly.",
        "kataOfflineStart": "KataGo could not score this game yet (timeout or offline). We'll still replay; good/bad moves will appear once analysis lands.",
        "endSummaryOffline": "Review finished. End-game KataGo was unavailable — try again later or import another game.",
        "endSummaryFallback": "Review done. Roughly {{pct}}% winrate and about {{score}} points on the board. Keep going — we'll dig deeper next time.",
        "endSummaryMentorDefault": "I",
        "endSummaryIntro": "{{mentor}} walked through the whole game with you. Here's how it felt in the opening, middle game, and endgame —",
        "endSummaryLabelOpening": "Opening",
        "endSummaryLabelMiddle": "Middle game",
        "endSummaryLabelEndgame": "Endgame",
        "endSummaryPhaseQuiet": {
            "opening": "Nothing stood out as a tagged key move in the opening — you got on the board in a normal, steady way.",
            "middle": "The middle game stayed fairly even without a cluster of big mistakes, which suggests you mostly kept up in reading.",
            "endgame": "The endgame was clean — no long chain of point losses. Keep that habit."
        },
        "endSummaryPhaseMixed": {
            "opening": "A mixed start: {{praise}} worked well, but {{bad}} held you back, so the opening left a split impression.",
            "middle": "You shone at {{praise}}, yet {{bad}} tightened the game — worth replaying those variations side by side.",
            "endgame": "{{praise}} was solid in yose, though {{bad}} gave up some points — watch similar shapes next time."
        },
        "endSummaryPhaseWeak": {
            "opening": "The main opening issue was around {{bad}} — shape and timing were a bit loose, and initiative slipped away.",
            "middle": "The middle-game swing came at {{bad}} — often the gap between \"attack first\" and \"fix weaknesses first.\"",
            "endgame": "Endgame weakness showed at {{bad}} — counting and sente still have room to grow."
        },
        "endSummaryPhaseStrong": {
            "opening": "{{praise}} in the opening was crisp — direction and timing looked good.",
            "middle": "{{praise}} was a highlight in the fight — you found good rhythm when it mattered.",
            "endgame": "{{praise}} in yose was steady — guarding the result is how you climb."
        },
        "endSummaryResult": {
            "heavyLoss": "Closing picture: about {{pct}}% winrate and roughly {{score}} points on the board — a tough game. That's okay — replay today's marked moves once before the next game; that beats chasing a quick win.",
            "loss": "You finished near {{pct}}% and about {{score}} points down — behind, but with lessons in the middle. Drill the painful marked moves; similar positions will feel calmer next time.",
            "slightLoss": "Around {{pct}}% and {{score}} points — a small loss. The gap is often one or two moves in order or thickness; use the tagged lines as your checklist.",
            "even": "About {{pct}}% and {{score}} points — very close. These games reward a careful second pass; one or two fixes can flip the next result.",
            "win": "About {{pct}}% and {{score}} points — well played. Keep today's pace, and note the few slow moves too; you'll feel even steadier."
        },
        "endSummaryWeakness": {
            "opening": "Weak spot:In the opening you sometimes hesitate on order and thickness, letting opponents seize the initiative.",
            "middle": "Weak spot:Middle-game reading depth — in heavy fights you occasionally play before fixing, which loads extra risk.",
            "endgame": "Weak spot:Yose — point counting and sente are still sensitive; small slips can change the result.",
            "volatile": "Weak spot:Big swings both ways — great moves and leaks in the same game; stability is the next level.",
            "solid": "Weak spot:Overall solid with few blunders, but attack tempo is cautious — you sometimes miss chances to press an advantage.",
            "balanced": "Weak spot:No single fatal flaw, but key moves are still a bit loose — be bolder on the marked turning points."
        },
        "endSummaryImprove": {
            "opening": "Next steps:Drill common joseki follow-ups (where to extend / invade); compare move {{blunderN}} with the idea behind move {{praiseN}}.",
            "middle": "Next steps:Before fighting, ask \"is there a group I must save?\"; replay move {{blunderN}} three times, then try whether you'd play near move {{praiseN}}.",
            "endgame": "Next steps:Do a few yose problems daily; replay move {{blunderN}} with counting, then contrast move {{praiseN}}.",
            "volatile": "Next steps:Next game: if you slip twice in a row, pause 30 seconds; start today's rework from move {{blunderN}}.",
            "solid": "Next steps:When ahead, look for one pressing move that doesn't overreach; study move {{praiseN}} for similar chances.",
            "balanced": "Next steps:Note your worst move {{blunderN}} and best move {{praiseN}} — one sentence each for \"if I replay…\", and skim them before the next game."
        },
        "endSummaryDiagnosis": {
            "opening": "Game diagnosis:The main issue is the opening: {{openingBad}} tagged problem move(s). Replay move {{blunderN}}, then compare it with the direction behind move {{praiseN}}.",
            "middle": "Game diagnosis:This game was not mainly about the opening — it turned in the middle-game contact fights. Move {{blunderN}} says: check weak groups and cutting points before attacking.",
            "endgame": "Game diagnosis:The result hinged on endgame details. Recount sente and points around move {{blunderN}}, then use move {{praiseN}} as the good example.",
            "volatile": "Game diagnosis:Big swings both ways: move {{praiseN}} was a highlight, while move {{blunderN}} changed the game. Stability is the next target.",
            "solid": "Game diagnosis:Overall solid with no collapse. The next step is to press more actively when chances like move {{praiseN}} appear.",
            "balanced": "Game diagnosis:No single phase collapsed. Replay your worst move {{blunderN}} and best move {{praiseN}}, then write one sentence for each decision."
        },
        "prescanTimeoutStart": "Let's start the review — I'll keep thinking as we go.",
        "prescanFailed": "Tricky game — we'll review anyway, one move at a time.",
        "resume": "▶ Resume",
        "showVariation": "👀 Show variation",
        "playHere": "🤔 I'll play here",
        "ignore": "⏭️ Ignore",
        "blunder": "Major blunder!",
        "blunderFallback": "That {{bad}} play costs a lot — look at {{good}} instead.",
        "slowMove": "Slow move",
        "slowFallback": "That {{bad}} slackens your position — consider {{good}}.",
        "praise": "Nice!",
        "praiseLightFallback": "Good shape — your winrate ticked up nicely.",
        "praiseBig": "Excellent!",
        "praiseBigFallback": "Beautiful! A big winrate swing in your favor — remember this idea.",
        "praiseFeelFallback": "Move {{n}} in {{bad}} — the position feels better; keep this rhythm.",
        "praiseBigFeelFallback": "Move {{n}} is a real highlight in {{bad}} — {{wrSpan}}.",
        "slowFeelFallback": "Move {{n}} at {{bad}} is a touch loose — when you have time, compare {{good}}.",
        "slowClusterHeadline": "Between moves {{from}} and {{to}} there were {{count}} slow moves — let's focus on move {{focus}}.",
        "slowClusterDetail": "Moves {{from}}–{{to}} dragged a little. Move {{focus}} is the best place to study — open the variation when you're ready.",
        "reviewPhase": {
            "openingToMiddle": "The opening is behind us — now the middle game begins.",
            "middleToEndgame": "Fighting eases off — time to count the endgame carefully."
        },
        "userPvFallback": "I checked your variation — about {{pct}}% winrate now. Try another line or resume the review.",
        "templates": {
            "blunder": {
                "opening": [
                    "Move {{n}} at {{bad}} is too heavy — about {{pts}} points lost ({{before}}%→{{after}}%). {{good}} is tighter; let's open the variation.",
                    "In the opening, {{bad}} costs roughly {{pts}} points. Compare with {{good}} on the board.",
                    "After move {{n}}, the eval slips to {{after}}%. {{good}} fits the whole-board flow better."
                ],
                "middlegame": [
                    "Move {{n}} at {{bad}} is a clear mistake — ~{{pts}} points ({{before}}%→{{after}}%). {{good}} is the key point; see the variation.",
                    "This {{bad}} play loosens the position by ~{{pts}} points. {{good}} keeps the initiative.",
                    "Around move {{n}}, {{bad}} hurts — eval near {{after}}%. Anchor on {{good}} instead."
                ],
                "endgame": [
                    "Endgame move {{n}} at {{bad}} loses ~{{pts}} points ({{before}}%→{{after}}%). {{good}} is the correct order — check the variation.",
                    "At {{bad}} the yose is slack — about {{pts}} points gone. {{good}} is cleaner.",
                    "Move {{n}} in the endgame: {{bad}} vs {{good}} is roughly {{pts}} points on the board."
                ]
            },
            "slow": {
                "opening": [
                    "Move {{n}} at {{bad}} is a bit slow — ~{{pts}} points. Compare {{good}} for shape.",
                    "Opening {{bad}} softens the game by ~{{pts}} points; {{good}} is more efficient.",
                    "After move {{n}}, {{bad}} drifts — {{good}} is the steadier plan."
                ],
                "middlegame": [
                    "Move {{n}} at {{bad}} lacks punch (~{{pts}} points). {{good}} keeps pressure.",
                    "Middlegame {{bad}} is passive; {{good}} is sharper.",
                    "Around move {{n}}, ~{{pts}} points slip away at {{bad}} — look at {{good}}."
                ],
                "endgame": [
                    "Yose {{n}} at {{bad}} is loose (~{{pts}} points). {{good}} is standard.",
                    "Endgame {{bad}} costs ~{{pts}} points; {{good}} is tighter.",
                    "Move {{n}}: {{good}} is the usual endgame here."
                ]
            },
            "praise": {
                "opening": [
                    "Solid move {{n}} — +~{{pts}} points ({{before}}%→{{after}}%).",
                    "Good opening rhythm; eval near {{after}}%.",
                    "Move {{n}} improves the position by ~{{pts}} points."
                ],
                "middlegame": [
                    "Move {{n}} is accurate — {{signed}} points; you keep the initiative.",
                    "Strong middlegame play; eval {{after}}%.",
                    "This move gains ~{{pts}} points — well timed."
                ],
                "endgame": [
                    "Precise yose at move {{n}} (+~{{pts}} points).",
                    "Clean endgame — eval {{after}}%.",
                    "Move {{n}} is correct endgame (+~{{pts}} points)."
                ]
            },
            "praiseBig": {
                "opening": [
                    "Excellent move {{n}} — +{{pts}} points ({{before}}%→{{after}}%), seizing the opening.",
                    "A big opening success; eval jumps to {{after}}%.",
                    "Move {{n}} is a highlight — ~{{pts}} points gained."
                ],
                "middlegame": [
                    "Brilliant move {{n}} — +{{pts}} points, a turning point.",
                    "Huge swing to {{after}}% — remember this idea.",
                    "Move {{n}} might be the best you played today — about {{pts}} points gained."
                ],
                "endgame": [
                    "Key endgame move {{n}} (+{{pts}} points).",
                    "Decisive yose — eval {{after}}%.",
                    "Move {{n}} swings the endgame by ~{{pts}} points."
                ]
            },
            "feel": {
                "praise": {
                    "opening": [
                        "Move {{n}} in {{bad}} flows well — the opening has a clear direction now.",
                        "Good timing in the opening at {{bad}} — {{wrSpan}}."
                    ],
                    "middlegame": [
                        "Move {{n}} keeps things comfortable in {{bad}} — you hold the initiative.",
                        "Steady middlegame play at {{bad}} — {{wrSpan}}."
                    ],
                    "endgame": [
                        "Clean endgame touch at move {{n}} — {{bad}} is the right area.",
                        "Move {{n}} in yose — sensible order at {{bad}}."
                    ]
                },
                "praiseBig": {
                    "opening": [
                        "Move {{n}} is a standout in the opening — about {{pts}} points gained, {{wrSpan}}.",
                        "Big opening success at {{bad}} — remember this idea."
                    ],
                    "middlegame": [
                        "Move {{n}} might be the best you played today — about {{pts}} points gained.",
                        "A turning-point middlegame move at {{bad}} — {{wrSpan}}."
                    ],
                    "endgame": [
                        "Key endgame move {{n}} — roughly {{pts}} points, {{wrSpan}}.",
                        "Decisive yose at {{bad}} — well counted."
                    ]
                },
                "slow": {
                    "opening": [
                        "Move {{n}} at {{bad}} is slightly slow — peek at {{good}} when you can.",
                        "The opening loses a little pace at {{bad}} — {{good}} is more efficient."
                    ],
                    "middlegame": [
                        "Move {{n}} in {{bad}} lacks punch — {{good}} keeps more pressure.",
                        "Around move {{n}}, {{bad}} softens the fight — compare {{good}}."
                    ],
                    "endgame": [
                        "Yose move {{n}} at {{bad}} is loose — {{good}} is the usual answer.",
                        "Endgame at {{bad}} can be tighter — see {{good}}."
                    ]
                }
            },
            "userPv": {
                "ahead": [
                    "Your line scores about {{pct}}% — it works. Resume the review or try a sharper continuation.",
                    "Variation checks at ~{{pct}}% in your favor. Nice.",
                    "Roughly {{pct}}% here — the idea is sound."
                ],
                "even": [
                    "About {{pct}}% — balanced try. Continue exploring or return to the game line.",
                    "Near {{pct}}%, playable but not urgent.",
                    "Variation ~{{pct}}% — reasonable test."
                ],
                "behind": [
                    "This branch is ~{{pct}}% — a bit worse, which explains the game move. Retry or resume?",
                    "Around {{pct}}% — useful to see why the actual move was needed.",
                    "Variation ~{{pct}}% — not ideal; good learning."
                ]
            },
            "summary": {
                "ahead": [
                    "Review done — about {{pct}}% and {{score}} points on the board. Strong game; let's deepen a few key moments next time.",
                    "Closing eval ~{{pct}}%, lead ~{{score}} points. Well played.",
                    "Summary: {{pct}}% winrate, {{score}} points — you're ahead."
                ],
                "even": [
                    "Review done — ~{{pct}}%, {{score}} points, very close. The marked key moves are your study list.",
                    "About {{pct}}% and {{score}} points — balanced game.",
                    "Summary: {{pct}}% / {{score}} points — even fight."
                ],
                "behind": [
                    "Review done — ~{{pct}}%, {{score}} points. Tough game, but the big mistakes are marked for next time.",
                    "Closing ~{{pct}}%, down ~{{score}} points. Focus on the blunders we flagged.",
                    "Summary: {{pct}}%, {{score}} points — learn from today's turning points."
                ]
            }
        },
        "board": {
            "region": {
                "pass": "a pass",
                "center": "the center",
                "topRight": "the upper right",
                "topLeft": "the upper left",
                "bottomRight": "the lower right",
                "bottomLeft": "the lower left",
                "side": "the side or corner"
            }
        },
        "viewingVariation": "Viewing variation...",
        "back": "◀ Back",
        "resumeReview": "⏭️ Resume review",
        "waitingInput": "Waiting for your move...",
        "undo": "◀ Undo",
        "evaluate": "Evaluate",
        "placeStoneFirst": "Place a stone first!",
        "evaluating": "Let me read your line…",
        "tryAgain": "🤔 Try again",
        "evalComplete": "Here’s what I see.",
        "reviewResuming": "Resuming review...",
        "coachShowPortrait": "Show mentor video",
        "coachHidePortrait": "Hide mentor video",
        "reviewLocaleBetaBanner": "Voice review narration is in English for now. Full voice support: Chinese, English, Japanese, Korean, and Thai.",
        "ttsCacheMiss": "Cached voice unavailable — trying live synthesis.",
        "colorBlack": "Black",
        "colorWhite": "White",
        "vsLine": "⚫ {{black}} vs ⚪ {{white}}",
        "reviewJobReadyToast": "Review ready: {{label}}",
        "forestGuideKicker": "Forest mentor grove",
        "forestGuideTitle": "Review one game at a time",
        "forestGuideBody": "Import an SGF or open a saved match. Your mentor studies the whole winrate story first, then highlights the moments that are worth replaying.",
        "forestGuideStepsLabel": "Dojo review steps",
        "forestGuideImportTitle": "Bring a game",
        "forestGuideImportBody": "Upload SGF or choose a match from history.",
        "forestGuideReadTitle": "Let the mentor read",
        "forestGuideReadBody": "Full-game winrate and A/B/C key lines build in the background.",
        "forestGuideReplayTitle": "Study the turning points",
        "forestGuideReplayBody": "Replay good moves, mistakes, and mentor notes at your pace.",
        "mentorChatUnavailable": "I can't reach the mentor AI right now. Your game is still here — please try again in a moment.",
        "reviewJobEtaSuffix": "Estimated wait: about {{min}} minutes.",
        "reviewJobStudyingEta": "≈ {{min}} min",
        "reviewJobDuplicatePrompt": "This game was already reviewed ({{label}}). Opening the existing lesson — no GO charged.",
        "reviewJobDuplicateSubmitConfirm": "Submit a fresh review anyway? This will use queue time.",
        "reviewJobReused": "This game was already reviewed ({{label}}). Opening the existing lesson — no GO charged.",
        "fourBeat": {
            "situation": "{{move}} at {{bad}} — {{wrSpan}}.",
            "problem": "The issue costs about {{pts}} points around {{bad}}.",
            "strength": "Strong direction at {{good}} — about +{{pts}} points.",
            "suggestion": "Tighter is {{good}} — compare with {{bad}}.",
            "variation": "Let’s open the variation.",
            "keepTip": "Remember the feel around {{good}} — reuse it next game."
        },
        "takeawaysHeadline": "Take these with you",
        "takeawayFix": "Replay the line at {{move}} (~{{pts}} pts lost) until you find the tighter move yourself.",
        "takeawayKeep": "Keep the feel of {{move}} — reach for that idea in similar positions next game.",
        "takeawayDrill": "Drill “{{category}}” puzzles today to reinforce this game’s weak spot.",
        "endSummaryLessonLine": "In this lesson we covered: {{list}}.",
        "reviewJobRetryQueued": "Alright — I’ll queue this game again.",
        "reviewJobEtaWithAhead": "About {{ahead}} games ahead — roughly {{min}} minutes.",
        "reviewJobStudyingEtaAhead": "{{ahead}} ahead · ~{{min}} min",
        "voiceMute": "Mute mentor voice",
        "ttsUnlockHint": "Tap to enable mentor voice explanation"
    },
    "arena": {
        "title": "Arena Command",
        "ranked": "⚡ Ranked Ladder",
        "blitz": "☄️ Blitz",
        "blitzSub": "1m | 20s",
        "standard": "⚔️ Standard",
        "standardSub": "5m | 30s",
        "slow": "🛡️ Slow",
        "slowSub": "20m | 60s",
        "cancelQueue": "🛑 Cancel matchmaking...",
        "betting": "🪙 Bounty Betting",
        "createBounty": "👑 Create Bounty Room",
        "bountySub": "Pinned for all players",
        "activeRooms": "🔥 Active Battle Zones",
        "active": "ACTIVE",
        "radar": "🌐 Orbit Radar",
        "online": "ONLINE",
        "worldChat": "💬 World Channel",
        "chatWelcome": "Welcome to the EvoGo forest campfire.",
        "chatPlaceholder": "Broadcast to all players...",
        "createBountyTitle": "👑 Create Bounty Room",
        "createBountyDesc": "Your room will be pinned at the top for challengers.",
        "boardSize": "Board Size",
        "mainTime": "Main Time",
        "byoTime": "Byo-yomi",
        "wager": "Wager (Tokens)",
        "handicap": "Handicap",
        "launch": "Launch Bounty",
        "verifyEmail": "Verify your email to enter ranked and bounty modes.",
        "activeLabel": "ACTIVE",
        "onlineLabel": "ONLINE",
        "boardSize19": "19×19",
        "boardSize13": "13×13",
        "boardSize9": "9×9",
        "mainTime20": "20 min",
        "mainTime5": "5 min",
        "mainTime60": "60 sec",
        "byo30x3": "30s × 3",
        "byo20x3": "20s × 3",
        "handicapNone": "None",
        "handicap2": "2 stones",
        "handicap3": "3 stones",
        "cancelBounty": "🛑 Cancel bounty (refund wager)...",
        "recentForm": "Recent form (last 15)",
        "viewProfile": "View profile & posts",
        "myProfile": "My profile",
        "win": "Win",
        "loss": "Loss",
        "viewReplay": "View",
        "noHistory": "No match history",
        "noData": "No data",
        "botTag": "[AI]",
        "katagoBots": "KataGo bots",
        "challengeBot": "Challenge",
        "noBots": "Bots are not loaded — refresh or check the server.",
        "noHumansOnline": "No other players online",
        "roomBounty": "Bounty",
        "roomBoardLines": "{{size}} lines",
        "roomWagerHandicap": "Wager 🪙 {{wager}} | Handicap {{hc}}",
        "challenge": "Challenge",
        "gameOver": "Finished",
        "spectate": "Spectate 👁️",
        "moveCount": "{{n}} moves",
        "noRooms": "No active battles in orbit.",
        "modeRanked": "Ranked",
        "modeTeaching": "Teaching",
        "modeBetting": "Betting",
        "statusIdle": "Idle",
        "statusInBattle": "In battle",
        "statusMatching": "Matching",
        "errors": {
            "unauthorized": "Unauthorized",
            "emailVerifyRanked": "Verify your email to enter ranked modes.",
            "emailVerifyBounty": "Verify your email to enter bounty modes.",
            "invalidQueue": "Invalid queue.",
            "alreadyBusy": "Already in queue or game.",
            "energyDepleted": "Not enough energy!",
            "invalidRoomSettings": "Invalid room settings.",
            "notEnoughTokens": "Not enough tokens!",
            "roomExpired": "Room expired!",
            "ownRoom": "Cannot join your own room.",
            "hostOffline": "Host offline.",
            "botNotFound": "AI player not found.",
            "botBusy": "That AI is in a game — try another."
        },
        "tabPlay": "Play",
        "tabLeaderboards": "Leaderboards",
        "leaderboardHint": "Top players across ranked ladder, wins, win rate, and current season.",
        "lbElo": "ELO ranking",
        "lbWins": "Most wins",
        "lbWinrate": "Win rate (3+ games)",
        "lbSeason": "Season points",
        "lbEmpty": "No entries yet.",
        "lbLoadFail": "Failed to load leaderboards.",
        "queueSearching": "Searching for opponent…",
        "friendChallengeWait": "Waiting for friend to join the teaching match…",
        "queueWait": "Waiting {{time}}",
        "queueEta": "~{{sec}}s estimated · {{depth}} in queue",
        "socketDisconnected": "Connection lost — reconnecting…",
        "mobileSections": "Arena sections",
        "mobileTabMatch": "Match",
        "mobileTabRooms": "Rooms",
        "mobileTabSocial": "Social"
    },
    "puzzle": {
        "rewardMsg": "Bounty claimed: +1 token!",
        "alreadySolved": "Already solved.",
        "solved": "Puzzle cleared",
        "waiting": "Waiting for {{kishi}} to play... (Black first)",
        "reviewing": "Already cleared — review mode",
        "continue": "{{kishi}}, keep attacking...",
        "wrong": "Wrong move — try again",
        "correct": "Correct!",
        "aiThinking": "AI is defending...",
        "checking": "Evaluating result...",
        "reviewComplete": "Review complete! Flawless solution!",
        "reset": "Recalculate",
        "backSchool": "← Back to School",
        "bounty": "Bounty",
        "difficulty": "Difficulty",
        "wrongDetailed": "Try again",
        "rewardBlocked": "Reward blocked — check your connection.",
        "offlineSaved": "Saved offline — will sync when you are back online.",
        "prev": "Previous",
        "next": "Next",
        "navKeys": "← → to switch",
        "progress": "{{solved}} / {{total}} solved",
        "position": "{{current}} / {{total}}",
        "voiceMute": "Mute mentor voice",
        "voiceUnmuted": "Unmute mentor voice",
        "voiceMuted": "Mentor voice muted",
        "nextPuzzleBtn": "Next puzzle →",
        "autoNextCountdown": "Next in {{n}}…",
        "bondGain": "Bond with {{mentor}} +{{n}}",
        "reportError": "Report error",
        "editThis": "Edit this puzzle",
        "reportReasonLabel": "What's wrong? (optional)",
        "reportReasonPlaceholder": "Wrong answer, broken line, bad diagram…",
        "reportSubmit": "Submit report",
        "reportCancel": "Cancel",
        "reportSent": "Thanks — we got your report.",
        "reportFailed": "Couldn't send the report — try again later.",
        "reportRateLimited": "Too many reports — try again later.",
        "reportInvalid": "Invalid puzzle.",
        "reportNotFound": "Puzzle not found.",
        "navStartOfSet": "First puzzle in this set",
        "navEndOfSet": "End of this set",
        "navFreeLimit": "Free plan ends here — unlock Pro for more",
        "navUpgradePro": "Unlock Pro"
    },
    "play": {
        "title": "Live Match",
        "pass": "Pass",
        "resign": "Resign",
        "handicapBanner": "Handicap game: White receives {{stars}} stone(s) on star points.",
        "captures": "Captures",
        "connecting": "[ Establishing neural link... ]",
        "doNotDisconnect": "Do not disconnect",
        "channelTitle": "Battle Channel",
        "sysConnected": "Battle comms online. Spectator chat is blocked until the match ends.",
        "chatPlaceholder": "Send battle message...",
        "copyReplayLink": "Copy replay link",
        "leaveArena": "Leave arena",
        "settingsTitle": "Visual & audio settings",
        "sfxLabel": "Stone sound (SFX)",
        "coordsLabel": "Board coordinates",
        "sfxOn": "On",
        "sfxOff": "Off",
        "coordsShow": "Show",
        "coordsHide": "Hide",
        "confirmMoveLabel": "Confirm each move",
        "confirmMoveOn": "On",
        "confirmMoveOff": "Off",
        "confirmMoveHint": "{{coord}} — tap again to confirm",
        "roleSpectator": "Spectator",
        "rolePlayer": "Player",
        "handicapLive": "Handicap {{stars}} · White placed · Black first",
        "confirmPass": "Pass this turn?",
        "confirmResign": "Resign and forfeit this match?",
        "gameOver": "Game over",
        "yourTurn": "Your turn",
        "oppTurn": "Opponent's turn",
        "byoPeriods": "{{n}} periods",
        "disconnectWarning": "Player disconnected — {{sec}}s to reconnect this session",
        "disconnectDetail": "(total budget {{budget}}s left, disconnect {{used}}/{{max}})",
        "reconnecting": "Reconnecting to your match…",
        "matchEnded": "Match ended",
        "sharePending": "Replay is still being saved — please wait...",
        "shareCopied": "Replay link copied!\nAnyone can review without signing in.",
        "noRoom": "No active match room. Returning to arena…",
        "roomGone": "This match has ended or the room no longer exists. Returning to arena…",
        "reject": {
            "occupied": "Point already occupied",
            "suicide": "Suicide — move not allowed",
            "ko": "Ko — immediate recapture forbidden",
            "wrong_turn": "Not your turn yet",
            "not_your_turn": "Not your turn yet",
            "not_a_player": "You are not a player in this game",
            "busy": "Please wait — previous move still processing",
            "no_active_game": "Game not found or already ended",
            "illegal_move": "Illegal move",
            "default": "Move rejected"
        },
        "resignBroadcast": "[Broadcast] {{player}} has resigned.",
        "scoringBroadcast": "[Broadcast] Both players passed — KataGo scoring...",
        "resultDraw": "🤝 Draw!\n{{black}} ⚖️ {{white}}\n{{reason}}",
        "resultWin": "🏆 Match over!\nWinner: {{winner}}\nRating change:\n{{winner}} 📈 +{{winDiff}}\n{{loser}} 📉 {{loseDiff}}",
        "resultPractice": "🏆 Practice complete!\nWinner: {{winner}}\nSaved to match archive.",
        "rakeLine": "\n💰 Pool: {{pool}} | Rake: {{rake}} | Net: {{net}} tokens",
        "socketDisconnected": "Connection lost — reconnecting…"
    },
    "school": {
        "title": "Go School",
        "hall": "Puzzle Hall",
        "selectRankKyu": "Choose challenge rank (Kyu)",
        "selectRankDan": "Enter the abyss (Dan)",
        "zone": "{{rank}} Zone",
        "emptyPuzzles": "No {{category}} puzzles at {{rank}} yet.<br><br><span style=\"font-size:12px;\">Try another rank.</span>",
        "reward": "Bounty",
        "solved": "Cleared ✓",
        "unsolved": "Not attempted",
        "catOpening": "Opening",
        "catOpeningDesc": "Macro board building",
        "catJoseki": "Joseki",
        "catJosekiDesc": "Local tactical modules",
        "catLifeDeath": "Life & Death",
        "catLifeDeathDesc": "Reading drills",
        "catMiddle": "Middle Game",
        "catMiddleDesc": "Fleet combat",
        "catEndgame": "Endgame",
        "catEndgameDesc": "Final resource harvest",
        "catTesuji": "Tesuji",
        "catTesujiDesc": "Local tactics",
        "catCapture": "Capturing",
        "catCaptureDesc": "Capture techniques",
        "catAppreciation": "Masterpieces",
        "catAppreciationDesc": "Famous shapes to appreciate",
        "catTheory": "Theory",
        "catTheoryDesc": "Principles and feel",
        "catMiddlegame": "Middlegame",
        "catMiddlegameDesc": "Fighting in the middle game",
        "catKeyOpening": "布局",
        "catKeyJoseki": "定式",
        "catKeyLifeDeath": "死活",
        "catKeyMiddle": "中盘",
        "catKeyCapturingRace": "对杀",
        "catKeyEndgame": "官子",
        "catKeyTesuji": "手筋",
        "catKeyCapture": "吃子",
        "catKeyAppreciation": "欣赏",
        "catKeyTheory": "棋理",
        "catKeyMiddlegame": "中盘",
        "rankPickerDesc": "Choose a rank (15k–7d) to browse practice puzzles.",
        "rankSectionKyu": "Kyu (15k–1k)",
        "rankSectionDan": "Dan (1d–7d)",
        "emptyPuzzlesRank": "No puzzles at {{rank}} yet.<br><br><span style=\"font-size:12px;\">Try another rank or ask a supervisor to add content.</span>",
        "supervisorHint": "You can add and edit puzzles in the puzzle editor.",
        "editPuzzle": "Edit",
        "deletePuzzle": "Delete",
        "confirmDeletePuzzle": "Delete 「{{title}}」 (#{{id}})? This cannot be undone.",
        "alertPuzzleDeleted": "Puzzle deleted.",
        "alertPuzzleDeleteFail": "Delete failed — check permissions or network.",
        "puzzleCount": "{{n}}",
        "puzzleNo": "Puzzle {{n}}",
        "progress": "{{solved}} / {{total}} solved",
        "rankSolved": "{{solved}}/{{total}} solved",
        "lastAt": "Last: #{{n}}",
        "continueAt": "Continue #{{n}}",
        "continueHere": "Continue here",
        "lastPlayed": "Last played",
        "offlineMode": "Offline — showing cached puzzles from your last sync.",
        "offlinePuzzleHint": "Playing cached puzzle (offline).",
        "loadMorePuzzles": "Show more ({{shown}}/{{total}})",
        "offlinePuzzleMissing": "This puzzle is not cached. Open its group online once, then try again.",
        "homeTitle": "School Learning Center",
        "homeDesc": "Choose what to study today: watch structured courses or practice in the question bank.",
        "schoolLabel": "School",
        "videoEntryTitle": "Go Videos",
        "videoEntryDesc": "Janice's structured course across seven levels. Unlock one lesson or a full level.",
        "questionBankTitle": "Question Bank",
        "questionBankDesc": "15k to 7d practice across opening, joseki, life & death, capturing races, endgame, tesuji, capturing techniques, appreciation, theory, and middlegame.",
        "videoTitle": "Go Videos",
        "videoDesc": "Seven levels open step by step. Unfinished levels stay marked as coming soon until ready.",
        "videoLessonsDesc": "Buy single lessons, or unlock the whole level at a 30% discount.",
        "backLearningCenter": "Back to Learning Center",
        "backLevels": "Back to Levels",
        "categoryTitle": "Question Bank Categories",
        "categoryTitleForRank": "{{rank}} Question Bank Categories",
        "categoryDesc": "Only categories with available puzzles at this rank are shown.",
        "backCategories": "Back to Categories",
        "puzzlePracticeTitle": "Puzzle Practice",
        "puzzleListDesc": "Practice puzzles to improve.",
        "categorySolved": "{{solved}}/{{total}} solved",
        "categoryPracticeDesc": "{{category}} practice. Practice puzzles to improve.",
        "emptyCategory": "No {{category}} puzzles are available at this rank yet.",
        "videoOpen": "Open",
        "videoComingSoon": "Coming soon",
        "lessonsReadyPrice": "{{ready}}/{{total}} lessons ready · {{price}} GO each",
        "packPrice": "Full level {{price}} GO · save {{discount}}%",
        "levelPackTitle": "Unlock all {{level}} lessons",
        "levelPackDesc": "{{count}} lessons cost {{fullPrice}} GO separately. Full level costs {{packPrice}} GO after a {{discount}}% discount.",
        "levelOwned": "Full level unlocked",
        "buyLevel": "Buy full level {{price}} GO",
        "lessonPrice": "{{price}} GO per lesson",
        "playLesson": "Play",
        "buyLesson": "Buy {{price}} GO",
        "comingSoon": "Coming soon",
        "purchaseFail": "Purchase failed",
        "purchaseAlreadyOwned": "You already own this course.",
        "purchaseOk": "Purchase successful",
        "purchaseInsufficientGo": "Not enough GO tokens.",
        "purchaseUnavailable": "This course cannot be purchased right now.",
        "protectedVideoNotice": "Video is limited to the current account. Downloads are hidden and your account watermark is applied.",
        "videoCourseSuffix": " Video Course",
        "catCapturingRace": "Capturing Race",
        "catCapturingRaceDesc": "Tight liberties for both sides"
    },
    "myroom": {
        "title": "My Room",
        "level": "Lv.1 Cyber Slum",
        "terminalTitle": "Salvaged Terminal",
        "terminalSub": "Connect to Armory Store",
        "albumTitle": "Mentor Album",
        "albumSub": "View collection & rentals",
        "boardTitle": "Holographic Board",
        "boardSub": "Analysis / Review",
        "mentorJoined": "Mentor {{name}} is stationed",
        "badge": "MY ROOM",
        "dockLabel": "Room shortcuts",
        "nexusLoadoutTitle": "Nexus active slots",
        "nexusLoadoutHint": "Select a slot, then tap ⚔ on a pet to assign. Campaign clears unlock more slots.",
        "nexusLoadoutUnlocked": "{{unlocked}} / {{total}} unlocked",
        "nexusSlotEmpty": "Empty",
        "nexusSlotLocked": "Clear more campaign stages to unlock this slot.",
        "nexusSlotAssign": "Assign to selected Nexus slot",
        "nexusSlotClear": "Clear slot",
        "nexusSlotAssigned": "Pet assigned to Nexus loadout.",
        "nexusSlotCleared": "Nexus slot cleared.",
        "nexusSlotSelected": "Slot {{slot}} selected",
        "petTrainStats": "Train stats",
        "petFeed": "Feed",
        "petEvolve": "Evolve",
        "petEvolveMaterials": "Evolution materials",
        "petMatGoStones": "GO Stones {{have}}/{{need}}",
        "petMatShards": "Shards {{have}}/{{need}}",
        "petMatCores": "Cores {{have}}/{{need}}",
        "petMatEssence": "Fusion Essence {{have}}/{{need}}",
        "petStatReset": "Reset stats",
        "petStatResetConfirm": "Spend {{cost}} GO to reset all stat points?",
        "petStatResetCost": "Reset for {{cost}} GO",
        "petStatResetSuccess": "Stats reset (−{{cost}} GO).",
        "petStatResetSuccessFree": "Stats reset (free on evolution).",
        "petStatResetInsufficient": "Need {{cost}} GO to reset stats.",
        "petStatResetEmpty": "No stat points allocated yet.",
        "petStatSave": "Save build",
        "petStatSaveSuccess": "Stats saved.",
        "petStatSaveInvalid": "Invalid stat allocation.",
        "petBond": "Bond {{value}}",
        "petBondTitle": "Bond with your pet",
        "petRename": "Rename",
        "petRenameKicker": "Nickname",
        "petRenameTitle": "Rename your pet",
        "petRenameLabel": "Display name",
        "petRenameSave": "Save name",
        "petRenameFree": "First rename is free",
        "petRenameCost": "Next rename costs {{cost}} GO",
        "petRenameConfirm": "Spend {{cost}} GO to rename?",
        "petRenameSuccess": "Nickname updated.",
        "petRenameInvalid": "Enter a valid name.",
        "petRenameInsufficient": "Need {{cost}} GO to rename.",
        "petStatTraining": "Training",
        "petStatAllocate": "Allocate stats",
        "petStatBudget": "Budget {{used}} / {{total}}",
        "petStatSoftCap": "Cap {{cap}}",
        "petStatOverBudget": "Over budget",
        "petStatHp": "HP",
        "petStatAtk": "ATK",
        "petStatDef": "DEF",
        "petStatSpd": "SPD",
        "petStatSup": "SUP",
        "petStatCtl": "CTL",
        "petCollectionEmpty": "Summon pets in Monthly Summon to start your arena collection.",
        "petPanelAria": "Pet Arena collection",
        "myPetsTitle": "My Pets",
        "ownedCount": "{{count}} owned",
        "petNavAria": "Pet Arena shortcuts",
        "enterArena": "Enter Arena",
        "equipped": "Equipped",
        "expLabel": "EXP",
        "maxLabel": "MAX",
        "arenaRatingTitle": "Arena rating",
        "recordShort": "{{wins}}W · {{losses}}L",
        "featuredAttribute": "Featured {{attribute}}",
        "collectionTitle": "Collection"
    },
    "petSummon": {
        "pageTitle": "Pet Summon — EvoGo",
        "kicker": "Monthly Summon",
        "featuredAttribute": "{{attribute}} Attribute",
        "boardCopy": "Destiny weaves on the Go board…",
        "actMentorLine": "{{mentor}} reads the stones…",
        "rollLabel": "Silhouette forming…",
        "freePulls": "Free pulls: {{used}}/1",
        "freeRefreshes": "Free refreshes: {{used}}/2",
        "summonBtn": "Summon",
        "refreshBtn": "Refresh Fate",
        "anyAttributeBtn": "Any Attribute (200 GO)",
        "renameLabel": "Name your pet",
        "renameConfirm": "Confirm",
        "summonSuccess": "Summoned {{attribute}} lineage!",
        "renameSuccess": "Pet named!",
        "renameFail": "Rename failed.",
        "summonFail": "Summon failed.",
        "statPreviewTitle": "Origin stats",
        "statStr": "STR",
        "statAgi": "AGI",
        "statVit": "VIT",
        "statLuck": "LUCK",
        "statInt": "INT",
        "statDex": "DEX"
    },
    "petFusion": {
        "title": "Genesis Fusion",
        "desc": "Combine two Ultimate Lv100 pets. 24h ritual · 500 GO · admin art review.",
        "parentA": "Parent A",
        "parentB": "Parent B",
        "submit": "Begin Fusion Ritual",
        "pickTwo": "Pick two different Ultimate pets.",
        "started": "Fusion ritual started.",
        "failed": "Fusion failed.",
        "statusPending": "Ritual in progress",
        "statusGenerating": "Generating art",
        "statusReview": "Awaiting admin review",
        "statusComplete": "Genesis awakened — check your collection",
        "statusRejected": "Fusion rejected",
        "countdown": "{{time}} remaining",
        "jobLabel": "Fusion #{{id}}",
        "codexTitle": "Genesis forms (7 stages)",
        "codexHint": "Each fusion instance can ascend through seven unique forms."
    },
    "roomMeta": {
        "rentDiscount": "Rent -{{pct}}%",
        "albumSlots": "Display {{n}}",
        "bondCap": "Sync cap {{n}}/day",
        "upgradeBtn": "Upgrade Lv.{{level}} · {{cost}} 🪙",
        "upgradeHint": "Next scene: {{name}}",
        "upgradeConfirm": "Spend {{cost}} 🪙 to upgrade to Lv.{{level}} \"{{name}}\"?",
        "upgradeSuccess": "Room upgraded to Lv.{{level}} — {{name}}!",
        "switchSuccess": "Switched to Lv.{{level}} \"{{name}}\"",
        "switchTitle": "Unlocked rooms — tap to visit",
        "maxUnlocked": "Max Lv.{{level}}",
        "roomLocked": "That room is not unlocked yet",
        "ambientOn": "Ambient sound on (tap to mute)",
        "ambientOff": "Ambient sound off (tap to enable)",
        "maxLevel": "Max tier — Ocean Villa unlocked",
        "scene": {
            "slum": "Lv.1 Cyber Slum",
            "duct": "Lv.2 Duct Workshop",
            "bunker": "Lv.3 Bunker Terminal",
            "loft": "Lv.4 Holo Loft",
            "oldBlock": "Lv.5 Old Block Flat",
            "midrise": "Lv.6 Mid-rise Suite",
            "executive": "Lv.7 Executive Room",
            "skylab": "Lv.8 Sky Lab",
            "panorama": "Lv.9 Panorama View",
            "garden": "Lv.10 Sky Garden",
            "mountain": "Lv.11 Mountain Villa",
            "lakeside": "Lv.12 Lakeside Manor",
            "manor": "Lv.13 Private Manor",
            "cliff": "Lv.14 Cliff Villa",
            "oceanVilla": "Lv.15 Ocean Villa"
        },
        "upgradeCelebration": "Room Lv.{{level}}"
    },
    "daily": {
        "claim": "Claim Daily Supply",
        "claiming": "Claiming...",
        "claimedToday": "Claimed today"
    },
    "tasks": {
        "loginRequired": "Please sign in first",
        "alreadyClaimed": "Already claimed today. Come back tomorrow.",
        "success": "Supply opened: +3 energy and +10 tokens!",
        "successRoom": "Supply delivered: +{{energy}} energy (cap {{cap}}), +{{tokens}} tokens!"
    },
    "kyc": {
        "section": "Identity Verification (KYC)",
        "frontId": "ID front photo",
        "selfie": "Selfie holding ID",
        "submit": "Submit for Review",
        "missingImages": "Please upload both the ID front and selfie photos",
        "submitted": "KYC submitted for review",
        "pending": "Under review"
    },
    "email": {
        "verifySubject": "[EvoGo] Verify your account",
        "verifyHeading": "Welcome to EvoGo Matrix",
        "verifyBody": "Kishi, click below to activate your matrix access:",
        "verifyButton": "Activate My Profile",
        "resetSubject": "[EvoGo] Reset your password",
        "resetHeading": "Password Reset Request",
        "resetBody": "Click below to reset within 1 hour (one-time link):",
        "resetButton": "Reset Password",
        "matchWinSubject": "[EvoGo] Ranked win",
        "matchLossSubject": "[EvoGo] Ranked loss",
        "matchWinBody": "You won against {{opponent}} ({{reason}}).",
        "matchLossBody": "You lost to {{opponent}} ({{reason}}).",
        "energyFullSubject": "[EvoGo] Energy full",
        "energyFullBody": "Your energy has refilled to your room cap. Ready for ranked play?"
    },
    "admin": {
        "kishiHint": "Kishi tip: click an image to zoom for manual review.",
        "forceVerifyConfirm": "Force-verify email for kishi 【{{username}}】?\nThis removes arena soft-ban immediately.",
        "title": "Admin",
        "subtitle": "Operations console — payments, ledger, and player support",
        "backHub": "← App settings",
        "backApp": "← App settings",
        "heading": "Ops console",
        "legacySection": "Legacy / Lab",
        "tabUsers": "Users",
        "tabLogs": "Audit log",
        "colUser": "Codename / Email",
        "colTokens": "Tokens",
        "colEnergy": "Energy",
        "colLadder": "Ladder / Bond",
        "colGender": "Gender / Rank",
        "editGender": "Gender",
        "editInitialRank": "Initial rank",
        "colProfile": "Profile & role",
        "colKyc": "KYC",
        "kycStatusNone": "Not submitted",
        "kycStatusPending": "Pending review",
        "kycStatusApproved": "Approved",
        "kycStatusRejected": "Rejected",
        "colActions": "Actions",
        "nationality": "Nationality",
        "phone": "Phone",
        "notFilled": "Not provided",
        "roleSupervisor": "Supervisor",
        "roleAdmin": "Admin",
        "roleUser": "User",
        "linkVerified": "Verified",
        "linkUnverified": "Unverified",
        "revokeSupervisor": "🔻 Revoke supervisor",
        "promoteSupervisor": "🎖️ Promote supervisor",
        "forceActivate": "⚡ Force activate",
        "kycApprove": "Approve",
        "kycReject": "Reject",
        "edit": "✏️ Edit",
        "viewId": "👁️ ID",
        "noAiReport": "No anti-fraud scan on file",
        "logTime": "Time",
        "logAdmin": "Operator",
        "logAction": "Action",
        "logTarget": "Target",
        "logDetails": "Details",
        "logEmpty": "No privileged actions recorded yet.",
        "editTitle": "✏️ Edit player:",
        "editTokens": "Tokens",
        "editEnergy": "Energy",
        "editElo": "ELO",
        "editBond": "Bond",
        "editNation": "Nationality",
        "editPhone": "Phone",
        "editBirthday": "Birthday",
        "editSave": "💾 Force save to database",
        "kycModalTitle": "👁️ KYC documents & AI scan",
        "kycLoading": "Loading...",
        "imageLoadFail": "Image decode failed or missing",
        "viewFront": "View ID front",
        "viewSelfie": "View selfie",
        "alertEditOk": "✅ Saved — audit log updated!",
        "alertEditFail": "❌ Save failed — check connection.",
        "confirmKyc": "Confirm {{action}} for this KYC submission?",
        "kycActionApprove": "approval",
        "kycActionReject": "rejection",
        "alertKycDone": "Decision recorded!",
        "confirmRole": "⚠️ Override:\nChange {{username}} role to 【{{role}}】?",
        "roleNameSupervisor": "Supervisor",
        "roleNameUser": "User",
        "alertRoleOk": "✅ Role updated — user panel will refresh.",
        "alertRoleFail": "❌ Role change failed.",
        "alertVerifyOk": "⚡ Email force-activated — full matrix access granted.",
        "alertVerifyFail": "❌ Activation failed.",
        "tabFinance": "Finance",
        "tabPayments": "Payments",
        "paymentsHint": "Orders awaiting gateway confirmation or manual fulfillment.",
        "paymentsEmpty": "No pending payment orders.",
        "fulfillOrder": "Credit tokens",
        "fulfillConfirm": "Credit tokens for this order?",
        "fulfillDone": "Order fulfilled and tokens credited.",
        "colOrder": "Order",
        "colGateway": "Gateway",
        "tabAiCost": "AI cost",
        "tabTokenLedger": "Token ledger",
        "tabPetFusion": "Pet fusion (legacy)",
        "fusionHint": "Review Genesis fusion rituals after the 24h timer. Approve mints the pet; reject refunds the ritual.",
        "fusionJob": "Job #{{id}}",
        "fusionUser": "Player",
        "fusionParents": "Parents",
        "fusionCompletes": "Completes",
        "fusionStatus": "Status",
        "fusionApprove": "Approve & mint",
        "fusionReject": "Reject",
        "fusionRejectReason": "Note or rejection reason (optional)",
        "fusionApproved": "Fusion approved — Genesis pet minted.",
        "fusionRejected": "Fusion rejected.",
        "fusionNotReady": "Timer not finished yet.",
        "fusionEmpty": "No fusion jobs awaiting review.",
        "searchUser": "Search username or email…",
        "pagination": "User list pages",
        "prevPage": "← Previous",
        "nextPage": "Next →",
        "pageOf": "Page {{page}} of {{total}}",
        "viewLedger": "Ledger",
        "logChanges": "Changes",
        "loading": "Loading…",
        "loadFail": "Failed to load data.",
        "noChanges": "No field changes recorded.",
        "tokensCirculation": "Tokens in circulation",
        "totalUsers": "Registered players",
        "verifiedUsers": "Verified",
        "vipActiveCount": "Active VIP",
        "incomeTokens": "Token inflow",
        "referralPaid": "Referral commissions paid",
        "ledgerByReason": "Token flow by reason",
        "reason": "Reason",
        "entries": "Entries",
        "credits": "Credits",
        "debits": "Debits",
        "payments": "Payment orders",
        "status": "Status",
        "count": "Count",
        "topSpenders": "Top spenders (period)",
        "noData": "No data yet.",
        "noPayments": "No payment orders in this period.",
        "noLedger": "No ledger entries match filters.",
        "periodDays": "Period (days)",
        "refresh": "Refresh",
        "financeHint": "Open this tab to load revenue and token economy reports.",
        "filterUsername": "Filter by username",
        "allReasons": "All reasons",
        "delta": "Δ",
        "balance": "Balance",
        "ref": "Reference",
        "openTab": "Switch to this tab to load entries.",
        "newSignups": "New signups",
        "activePlayers": "Active players",
        "matches": "Matches played",
        "vipActive": "Active VIP",
        "revenuePeriod": "Revenue (period)",
        "allTime": "All time",
        "outflow": "Outflow",
        "referralNetwork": "Referred users",
        "trials": "Referral trials",
        "guildCount": "Guilds",
        "members": "Members",
        "mentorsActive": "Active mentors",
        "socialLogins": "Social logins",
        "chartSignups": "Daily signups",
        "chartTokenFlow": "Token inflow vs outflow",
        "chartMatches": "Daily matches",
        "chartLocales": "Player locales",
        "inflow": "Inflow",
        "topReferrers": "Top referrers",
        "referralByLevel": "Referral commissions by level",
        "marketingFunnel": "Marketing funnel",
        "referredUsersTotal": "Total referred",
        "storePurchases": "Store purchases",
        "vipBonuses": "VIP bonuses",
        "chartKyc": "KYC status",
        "topEarners": "Top earners (period)",
        "sectionOverview": "Overview & growth",
        "sectionOverviewSub": "Signups, matches, token flow, and locale mix.",
        "sectionMarketing": "Marketing & acquisition",
        "sectionMarketingSub": "Referrals, trials, store, VIP, and KYC pipeline.",
        "sectionEconomy": "Economy & revenue",
        "sectionEconomySub": "Ledger breakdown, payments, top spenders and earners.",
        "sectionEngagement": "Engagement & retention",
        "sectionEngagementSub": "Social, guild, mentor, dojo, and push activity.",
        "sectionOps": "Admin operations",
        "sectionOpsSub": "Privileged actions in this period.",
        "posts": "Blog posts",
        "directMessages": "Direct messages",
        "guildChat": "Guild chat",
        "friendRequests": "Friend requests",
        "mentorRents": "Mentor rentals",
        "dojoReviews": "Dojo reviews",
        "pending": "Pending",
        "achievements": "Achievements unlocked",
        "pushSubs": "Push subscribers",
        "adminActions": "Admin actions",
        "reportGenerated": "Report generated",
        "aiCostHint": "Open this tab to load AI usage and projected monthly bill from real call volume.",
        "aiCostTotal30d": "Est. monthly total",
        "aiCostVariable30d": "Variable (30d proj.)",
        "aiCostPodFixed30d": "RunPod fixed (30d)",
        "aiCostDailyBurn": "Daily burn",
        "aiCostRunway": "RunPod runway",
        "aiCostRunwayNote": "Based on AI_COST_RUNPOD_BALANCE_USD and projected daily burn.",
        "aiCostRunwayUnknown": "Set AI_COST_RUNPOD_BALANCE_USD in .env to estimate runway.",
        "aiCostCalls": "AI API calls",
        "aiCostFailCalls": "Failed",
        "aiCostGpuHours": "KataGo GPU hours",
        "aiCostKatagoUsd": "KataGo (period)",
        "aiCostGeminiUsd": "Gemini (period)",
        "aiCostElevenUsd": "ElevenLabs (period)",
        "aiCostByChannel": "Usage by channel",
        "aiCostDailyChart": "Daily variable cost (USD)",
        "aiCostPricing": "Pricing assumptions",
        "aiCostPerCall": "Est. / call",
        "aiCostService": "Service",
        "aiCostChannel": "Channel",
        "aiCostAvgMs": "Avg ms",
        "aiCostEstimatedUsd": "Est. USD",
        "aiCostDaysSuffix": "days",
        "aiCostChannelKatagoBot": "Arena bots",
        "aiCostChannelKatagoScoring": "Game scoring",
        "aiCostChannelKatagoReview": "Prescan / replay",
        "aiCostChannelKatagoDojoLive": "Dojo live review",
        "aiCostChannelKatagoUserPv": "User variation PV",
        "aiCostChannelGeminiMentor": "Mentor chat",
        "aiCostChannelGeminiKyc": "KYC scan",
        "aiCostChannelElevenlabsTts": "Live TTS",
        "vendorWalletsTitle": "Vendor balances & top-up",
        "vendorWalletsSub": "Runtime services first — update .env balances after each top-up.",
        "vendorAttention": "{{count}} vendor(s) need attention",
        "vendorAllClear": "All tracked runtime vendors look OK.",
        "vendorManualHint": "Set VENDOR_*_BALANCE_USD in .env after top-up. RunPod & ElevenLabs auto-fetch when API keys are set.",
        "vendorTierRuntime": "Runtime (live product)",
        "vendorTierDev": "Dev / batch scripts",
        "vendorTierInfra": "Payments & infra",
        "vendorRunway": "Runway",
        "vendorMonthlyProj": "Proj. monthly",
        "vendorTopUp": "Top up",
        "vendorSourceApi": "Live API",
        "vendorSourceManual": "Manual .env",
        "vendorSourceNone": "Not set",
        "vendorCharsLeft": "Chars left",
        "vendorStatusOk": "OK",
        "vendorStatusWarn": "Low",
        "vendorStatusCritical": "Critical",
        "vendorStatusUnknown": "Unknown balance",
        "vendorStatusInactive": "Not configured",
        "vendorStatusConfigured": "Configured",
        "vendorStatusUnconfigured": "Not configured",
        "vendorRunpod": "RunPod (KataGo GPU)",
        "vendorElevenlabs": "ElevenLabs (TTS)",
        "vendorGemini": "Google Gemini (mentor / KYC)",
        "vendorOpenai": "OpenAI (Nexus assets)",
        "vendorFal": "FAL.ai (Nexus assets)",
        "vendorHeygen": "HeyGen (mentor clips)",
        "vendorStripe": "Stripe (payments in)",
        "vendorCommercepay": "CommercePay (payments in)",
        "editGameSection": "Mini-game & arena stats",
        "editWins": "Total wins",
        "editLosses": "Total losses",
        "editSeasonPts": "Season points",
        "editNexusMaterials": "Nexus materials",
        "editNexusWins": "Nexus TD wins",
        "editGomokuWins": "Gomoku wins",
        "editMemoryWins": "Memory wins",
        "editPuzzleWins": "Puzzle wins",
        "tabStudio": "📸 Studio review",
        "studioQueueEmpty": "No selfie reviews pending.",
        "studioSelfieTitle": "Selfie verification queue",
        "studioPhotoAppealsTitle": "Photo appeals (refund review)",
        "studioPhotoAppealsHint": "Compare generated photo vs user center selfie. Approve to refund tokens paid for that photo.",
        "studioPhotoAppealsEmpty": "No photo appeals pending.",
        "studioPhotoGenerated": "Generated photo",
        "studioPhotoSelfie": "User reference selfie",
        "studioColUser": "Player",
        "studioColStatus": "Status",
        "studioColAppeal": "Appeal",
        "studioApprove": "Approve",
        "studioReject": "Reject"
    },
    "photoStudio": {
        "title": "Photo Studio",
        "subtitle": "Real-photo style mentor albums — shoot, browse, and download.",
        "backAlbum": "Back to Album",
        "newPhoto": "＋ New photo",
        "manageSelfies": "Reference selfies",
        "shootTitle": "Create a photo",
        "albumTitle": "{{mentor}} · Photos",
        "albumEmpty": "No photos yet — tap New photo to create your first shot.",
        "albumPhotos": "{{count}} photos",
        "selfieTitle": "Reference selfies",
        "selfieHint": "Take a clear front-facing photo. After approval it is locked; changes cost 500 🪙.",
        "selfieHintMulti": "Upload 3 photos: left profile, front face, and right profile. We anchor on your front face and use profiles to lock your identity across batch scenes.",
        "selfieTip1": "Good lighting, no filters, one person only.",
        "selfieTip2": "Recommended order: left → center (front) → right.",
        "selfieTip3": "AI checks instantly — no admin wait.",
        "selfieReady": "Selfies verified — ready to shoot",
        "selfieNeeded": "Set up reference selfies first",
        "selfieReuploadNeeded": "Re-upload reference selfies (left, center, right)",
        "refSlotLeft": "Left",
        "refSlotCenter": "Center (front)",
        "refSlotRight": "Right",
        "refTapToAdd": "Tap to add",
        "openCamera": "Open camera",
        "uploadPhoto": "Upload photo",
        "cameraTitle": "Take a selfie",
        "capture": "Capture",
        "cameraDenied": "Camera access denied — use Upload instead.",
        "maxRefs": "Maximum 3 reference photos.",
        "noSelfie": "No selfie yet",
        "takeSelfie": "Take / upload selfie",
        "submitSelfie": "Save selfies",
        "resubmitSelfie": "Replace selfies ({{cost}} 🪙)",
        "resubmitConfirm": "Replace your verified selfies for 500 🪙?",
        "pickMentors": "Choose mentor",
        "pickMentorsHint": "Pick one rented mentor — you + mentor, 2 people total.",
        "groupSizeWarn": "Photos are front-facing with EvoGO logo, mentor signature, and timestamp.",
        "pickScene": "Choose scene",
        "pickScenesHint": "Tap to select scenes — up to 10. Tap again to deselect.",
        "scenePickCount": "Selected {{count}}/{{max}}",
        "selectScenesFirst": "Select at least one scene.",
        "maxScenes": "You can select at most {{max}} scenes.",
        "selectMentor": "Pick one mentor.",
        "noActiveRentals": "No active mentor rentals — rent in the Store first.",
        "groupAlbumTitle": "Group photos",
        "groupBadge": "Group",
        "photoMissing": "Photo file lost after deploy — please shoot again (500 🪙).",
        "clearAlbum": "Clear album",
        "clearAlbumConfirm": "Delete all photos in this album? This cannot be undone.",
        "selectPhotos": "Select",
        "cancelSelect": "Cancel",
        "deleteSelected": "Delete",
        "deletingPhotos": "Deleting…",
        "photosDeleted": "{{count}} photo(s) deleted.",
        "deleteSelectedConfirm": "Delete {{count}} selected photo(s)? This cannot be undone.",
        "selectPhotosFirst": "Select at least one photo to delete.",
        "albumCleared": "Cleared {{count}} photo(s).",
        "download": "Download",
        "generateTitle": "Create photo",
        "mentorRequired": "Rent mentors in the Store to generate photos.",
        "generateBtn": "Generate photo ({{cost}} 🪙)",
        "generateSelected": "Generate {{count}} photos ({{cost}} 🪙)",
        "generateCost": "Generate — {{cost}} 🪙",
        "confirmGenerate": "Spend {{cost}} 🪙 to generate this photo?",
        "confirmGenerateSelected": "Spend {{cost}} 🪙 to generate {{count}} photos in the background?",
        "generating": "Generating…",
        "batchStarted": "Queued! Photos are generating in the background — we'll notify you when done.",
        "batchProgress": "Generating with {{mentor}}: {{done}}/{{total}} scenes…",
        "topbarBatch": "{{done}}/{{total}} generating…",
        "batchWaitTitle": "Submitting…",
        "batchWaitStay": "Please wait a few seconds — stay on this page until the task is queued.",
        "batchSubmittingNote": "Do not refresh or switch pages until you see the confirmation.",
        "batchGeneratingNote": "Runs in the background — you can play elsewhere. Tap the notification when ready.",
        "batchLeaveConfirm": "Still submitting your request. Leave anyway?",
        "batchLeaveBrowser": "Still submitting your request. Leave this page anyway?",
        "batchReadyTitle": "{{mentor}} album — photos ready",
        "batchReadyBody": "{{ready}}/{{total}} photos are in your album.",
        "cancelBatch": "Cancel queued photos",
        "cancelBatchConfirm": "Cancel remaining queued photos and refund their cost?",
        "cancelBatchPrompt": "Cancel the stuck batch and retry?",
        "batchCancelled": "Cancelled {{count}} queued photo(s); tokens refunded.",
        "pricingNote": "1000 🪙 per photo — any of 10 scenes. Includes logo, signature, date & unique ID.",
        "appealBtn": "Appeal",
        "appealHint": "Unhappy with this photo? Appeal within 24 hours of generation for a token refund review.",
        "appealPrompt": "Describe what is wrong with this photo (at least 10 characters):",
        "appealSubmitted": "Appeal submitted — our team will review it.",
        "appealPending": "Appeal pending",
        "appealApproved": "Refund approved",
        "appealRejected": "Appeal declined",
        "appealWindowClosed": "The 24-hour appeal window for this photo has ended.",
        "appealExists": "You already appealed this photo.",
        "appealTooShort": "Please describe the issue in at least 10 characters.",
        "appealTooLong": "Appeal text is too long.",
        "appealNotFound": "Photo not found.",
        "appealApprovedTitle": "Photo appeal approved",
        "appealApprovedBody": "Your GO Tokens for this photo were refunded.",
        "appealRejectedTitle": "Photo appeal declined",
        "appealRejectedBody": "Your appeal was reviewed and not approved for a refund.",
        "realismNote": "Realistic photo style — mentors match their in-game look, not anime art.",
        "brandingNote": "Every photo includes Evogo.ai logo, mentor signature, shoot time & unique serial code.",
        "galleryTitle": "Your photos",
        "galleryEmpty": "No photos in this album yet.",
        "loading": "Loading…",
        "selfieSubmitOk": "Selfies verified — you can shoot photos now.",
        "selfieResubmitOk": "Selfies updated.",
        "generateOk": "Photo ready!",
        "statusNone": "Add at least one reference selfie",
        "statusApproved": "Verified",
        "statusAiRejected": "Did not pass AI check — try clearer photos",
        "sceneDefault": "Dojo default",
        "sceneArena": "Arena spotlight",
        "sceneSkyline": "Neon skyline",
        "sceneClassroom": "Go classroom",
        "sceneChampion": "Champion podium",
        "sceneCherry": "Cherry courtyard",
        "sceneCafe": "Go café",
        "sceneBeach": "Sunset beach",
        "sceneLibrary": "Quiet library",
        "sceneGarden": "Urban garden",
        "sceneFree": "Included",
        "sceneExtra": "+{{cost}} 🪙 scene",
        "errInvalidImage": "Invalid image — use JPG/PNG under 4 MB.",
        "errSelfieRejected": "Photo did not pass AI safety check — use a clear single-person selfie.",
        "errLockedResubmit": "Verified selfies are locked — use Replace (500 🪙).",
        "errNotLocked": "No verified selfies to replace.",
        "errInsufficient": "Not enough GO Tokens.",
        "errMentor": "Invalid mentor.",
        "errMentorActive": "Selected mentor rental has expired — renew in Store.",
        "errTooManyMentors": "Only one mentor per photo.",
        "errSelfieCenterRequired": "A front-facing (center) reference selfie is required.",
        "errSelfieRequired": "Verified reference selfies required.",
        "errSelfieReupload": "Reference selfies expired after server update — please re-upload left, center, and right photos.",
        "errGenerate": "Photo generation failed — tokens refunded.",
        "errBatchActive": "A batch is already generating — please wait for it to finish.",
        "errNoScenes": "Select at least one scene.",
        "errTooManyScenes": "You can generate at most 10 scenes at once.",
        "errBatchStart": "Could not start batch generation",
        "errNoActiveBatch": "No batch is running.",
        "errBatchProcessing": "A photo is generating right now — try again in a minute."
    },
    "tokenLedger": {
        "reason": {
            "dailyClaim": "Daily claim",
            "roomUpgrade": "Room upgrade",
            "storePurchase": "Store top-up",
            "vipBonus": "VIP bonus",
            "adminAdjust": "Admin adjustment",
            "puzzleReward": "Puzzle reward",
            "loungeStamina": "Lounge stamina pack",
            "mentorRent": "Mentor rental",
            "referralCommission": "Referral commission",
            "nexusReward": "Nexus reward",
            "nexusEntry": "Nexus level entry",
            "nexusEntryRefund": "Nexus entry refund",
            "nexusSkillEmpower": "Nexus skill empower",
            "nexusCoreRevive": "Nexus core revive",
            "nexusDoubleMaterials": "Nexus double materials",
            "guildRenewalDonate": "Guild renewal donation",
            "arenaWager": "Arena wager",
            "arenaWagerRefund": "Arena wager refund",
            "arenaPayout": "Arena bounty payout",
            "guildSubscription": "Guild subscription",
            "guildQuestReward": "Guild weekly quest",
            "guildWarReward": "Guild war-board reward",
            "guildInviteReward": "Guild invite reward",
            "photoStudioGenerate": "Photo studio — generate",
            "photoStudioBatchGenerate": "Photo studio — all scenes",
            "photoStudioSelfieResubmit": "Photo studio — selfie replace",
            "photoStudioRefund": "Photo studio — refund"
        }
    },
    "register": {
        "title": "Create Your Profile",
        "subtitle": "Submit accurate info for KYC and physical prize redemption",
        "standaloneCodename": "Standalone Codename",
        "secureEmail": "Secure Email",
        "phone": "Phone",
        "birthday": "Birthday",
        "submitVerify": "Submit & Verify Email",
        "hasAccount": "Already have a profile? Sign in",
        "skipRegister": "Skip for now, back to lobby",
        "completeTitle": "Complete Kishi Profile",
        "completeSubtitle": "Social account linked — add your codename and compliance info",
        "signalLinked": "Signal linked",
        "googleLinked": "Google account connected",
        "socialEmail": "Social account",
        "finish": "Complete Registration",
        "gender": "Gender",
        "selectGender": "Select gender…",
        "genderMale": "Male",
        "genderFemale": "Female",
        "genderOther": "Other",
        "genderUndisclosed": "Prefer not to say",
        "initialRank": "Starting strength (optional)",
        "initialRankDefault": "Default — 18k",
        "initialRankHint": "Sets your starting Elo for matchmaking. You can still climb through play.",
        "invitedHint": "You were invited by a member — complete registration to link your referral.",
        "legalAgree": "By registering you agree to our"
    },
    "legal": {
        "lastUpdated": "Last updated: {{date}}",
        "addressPending": "Registered business address is being updated. For urgent inquiries please email us directly.",
        "contactFormTitle": "Send us a message",
        "contactFormIntro": "Fill in the form and we will reply directly to your email.",
        "contactName": "Your name",
        "contactNamePh": "How should we address you?",
        "contactEmail": "Your email",
        "contactEmailPh": "you@example.com",
        "contactSubject": "Subject (optional)",
        "contactSubjectPh": "Billing, refund, account…",
        "contactMessage": "Message",
        "contactMessagePh": "Tell us how we can help…",
        "contactSend": "Send message",
        "contactSending": "Sending…",
        "contactSent": "Thanks! Your message has been sent. We'll reply to your email soon.",
        "contactInvalid": "Please enter your name, a valid email, and a message.",
        "contactFailed": "Sorry, we couldn't send your message right now. Please email us directly."
    },
    "form": {
        "codenameMin": "Codename must be at least 3 characters",
        "scanning": "Scanning...",
        "checkingEmail": "Checking email...",
        "codenameAvailable": "Codename available",
        "codenameTaken": "Codename taken",
        "emailAvailable": "Email available",
        "emailRegistered": "Email already registered",
        "networkFluctuation": "Network unstable",
        "selectNationality": "Select nationality...",
        "selectDate": "Select date...",
        "codenamePlaceholder": "Unique platform codename...",
        "emailExample": "example@matrix.com",
        "phoneExample": "+60 123456789",
        "phoneLocalPlaceholder": "123456789",
        "invalidEmail": "Please enter a valid email address",
        "invalidPhone": "Please enter a valid mobile number for your country",
        "phoneValid": "Mobile format OK"
    },
    "countries": {
        "malaysia": "Malaysia",
        "singapore": "Singapore",
        "china": "China",
        "taiwan": "Taiwan",
        "hong_kong": "Hong Kong",
        "united_states": "United States",
        "united_kingdom": "United Kingdom",
        "japan": "Japan",
        "south_korea": "South Korea",
        "australia": "Australia",
        "canada": "Canada",
        "france": "France",
        "germany": "Germany",
        "india": "India",
        "indonesia": "Indonesia",
        "thailand": "Thailand",
        "vietnam": "Vietnam",
        "philippines": "Philippines",
        "new_zealand": "New Zealand",
        "brazil": "Brazil",
        "russia": "Russia",
        "italy": "Italy",
        "spain": "Spain",
        "mexico": "Mexico",
        "south_africa": "South Africa",
        "united_arab_emirates": "United Arab Emirates",
        "argentina": "Argentina",
        "sweden": "Sweden",
        "switzerland": "Switzerland"
    },
    "replay": {
        "pageTitle": "Cyber Archive",
        "heading": "Match Archive",
        "winnerLine": "🏆 {{winner}} — {{reason}}",
        "start": "|◀ Start",
        "prev": "◀ Prev",
        "next": "Next ▶",
        "end": "End ▶|",
        "keyboardHint": "Tip: use ← / → arrow keys to step through moves",
        "private": "This replay is private. Sign in as a player or use a valid share link.",
        "toolsTitle": "Tools",
        "toolsDesc": "Step through the game, explore variations, or judge the current position on demand.",
        "btnVariation": "Explore variations",
        "btnJudge": "Position judgment",
        "judgeTitle": "Position judgment",
        "judgeIdle": "Press Position judgment to analyze the current board.",
        "variationActive": "Variation mode — click the board to play moves. Press again to exit.",
        "kataComputing": "Analyzing position…",
        "kataOffline": "KataGo unavailable — try again shortly.",
        "blackWinrate": "Black win rate",
        "whiteWinrate": "White win rate",
        "scoreLead": "Score lead (Black): {{score}}",
        "reviewTitle": "AI review",
        "reviewDesc": "Scan the whole game for blunders, slow moves, and praise — like Dojo replay.",
        "reviewAs": "Review as",
        "asBlack": "Black",
        "asWhite": "White",
        "startReview": "Start AI review",
        "reviewRunning": "Scanning all moves with KataGo…",
        "reviewDone": "Review ready — scrub moves to see judgments.",
        "reviewFailed": "Review failed — try again.",
        "tooShort": "Game too short for AI review.",
        "openDojo": "Open mentor review in Dojo →",
        "loginForDojo": "Sign in for full mentor review in Dojo",
        "winrateChart": "Winrate curve",
        "suggestionLabel": "Best {{mark}}"
    },
    "supervisor": {
        "pageTitle": "Puzzle Editor",
        "heading": "Multi-branch puzzle entry",
        "subtitle": "Codename {{username}} — build variation trees for the pool",
        "phase1Title": "Phase 1: Initial position",
        "placeBlack": "⚫ Place black",
        "placeWhite": "⚪ Place white",
        "phase1Hint": "Left-click to place, right-click to erase.\nSet the puzzle starting position.",
        "clear": "Clear",
        "enterRecord": "Start recording ➔",
        "phase2Title": "Phase 2: Record solution tree",
        "stepCount": "Moves: <strong>{{n}}</strong>",
        "turnBlack": "⚫ Black to play",
        "turnWhite": "⚪ White to play",
        "undoStep": "◀ Undo step",
        "saveBranch": "💾 Save branch",
        "undoBranch": "🗑️ Delete last saved branch",
        "exitRecord": "⬅ Back to setup (edit initial board)",
        "phase3Title": "Phase 3: Publish",
        "categoryLabel": "Category",
        "rankLabel": "Rank",
        "rankKyu": "Kyu",
        "rankDan": "Dan",
        "titleLabel": "Puzzle title",
        "titlePlaceholder": "e.g. Classic life & death — under the coat",
        "submit": "🚀 Save to library",
        "branchesRecorded": "{{n}} branches",
        "defaultDifficulty": "Standard bounty",
        "confirmClear": "Clear the initial board?",
        "confirmEmptyBoard": "The board is empty. Is this an opening puzzle from an empty board?",
        "confirmExitRecord": "⚠️ Returning to setup will permanently delete all recorded branches.\nContinue?",
        "confirmDiscardRecord": "Discard changes from this recording session and restore branches from before you entered record mode?",
        "editNotFound": "Puzzle #{{id}} not found",
        "openIdLabel": "Open by ID",
        "openIdPlaceholder": "Puzzle ID",
        "openIdButton": "Open ID",
        "alertNeedValidId": "Enter a valid puzzle ID",
        "alertNoMoves": "No moves to save!",
        "alertBranchSaved": "✅ Branch {{n}} added! Undo to a fork for alternates, or tap Reset recording for a new main line.",
        "alertDuplicateBranch": "This sequence matches a branch already saved.",
        "recordBranchHint": "<strong>{{n}}</strong> branch(es) saved. Undo to a fork for alternates, or Reset recording to clear moves and start from move one.",
        "resetTake": "↺ Reset recording",
        "confirmResetTake": "Clear current moves and re-record from the first move? (Saved branches are kept.)",
        "alertResetTake": "Current moves cleared — record from the first move.",
        "confirmDeleteBranch": "Delete the latest branch (#{{n}})?\n(Initial board is kept.)",
        "alertBranchDeleted": "🗑️ Branch removed — you can re-record it.",
        "alertNeedBranch": "❌ Save at least one solution branch!",
        "alertNeedTitle": "❌ Name this puzzle!",
        "uploading": "Uploading... ⏳",
        "alertSaveOk": "🎉 Variations serialized and saved!",
        "alertSaveFail": "❌ Upload failed — check permissions or network.",
        "alertUpdateOk": "🎉 Puzzle updated!",
        "turnToPlay": "Next to play: {{stone}}",
        "guideToggle": "📖 Entry guide",
        "guideHide": "Hide guide",
        "guideTitle": "Supervisor checklist",
        "guideBody": "① Phase 1 — Set the initial position (left-click place, right-click erase).\n② Phase 2 — Black plays first. Record the full line, then tap Save branch. Record extra branches for alternate correct lines.\n③ Phase 3 — Pick category & rank, enter a title, then publish.\n\nRules:\n• Players only place black stones; white replies are auto-played.\n• Category keys are stored in Chinese (布局/定式/死活/对杀/官子/手筋/吃子/欣赏/棋理/中盘) — pick from the dropdown.\n• Rank format: 18k–1k, 1d–7d.\n• Branches may end on a white reply (e.g. white kills).\n• After saving, you are taken to preview — solve it once to verify the reward.",
        "manageTitle": "📋 Published puzzles",
        "manageHint": "Preview, edit, or delete published puzzles here. While editing a puzzle, you can also use Delete in the top banner.",
        "manageLoading": "Loading...",
        "manageEmpty": "No puzzles yet.",
        "preview": "Preview",
        "edit": "Edit",
        "delete": "Delete",
        "deletePuzzle": "🗑️ Delete puzzle",
        "confirmDelete": "Delete puzzle 「{{title}}」 (#{{id}})? This cannot be undone.",
        "alertDeleted": "Puzzle deleted.",
        "alertDeleteFail": "Delete failed.",
        "updateSubmit": "💾 Update puzzle",
        "editMode": "Editing #{{id}} — {{title}}",
        "cancelEdit": "Cancel edit"
    },
    "zodiac": {
        "aries": "Aries",
        "taurus": "Taurus",
        "gemini": "Gemini",
        "cancer": "Cancer",
        "leo": "Leo",
        "virgo": "Virgo",
        "libra": "Libra",
        "scorpio": "Scorpio",
        "sagittarius": "Sagittarius",
        "capricorn": "Capricorn",
        "aquarius": "Aquarius",
        "pisces": "Pisces"
    },
    "lounge": {
        "title": "Game Hall",
        "subtitle": "Flagship game modes",
        "heroDesc": "Choose Go Nexus or Pet Arena. Train with mentors and battle with your pets.",
        "pickTitle": "Choose a game",
        "pickHint": "Two modes for now — more Go Nexus games will join the hall later.",
        "playNow": "Play now",
        "backHall": "Game Hall",
        "gameGoNexus": "Go Nexus",
        "gameGoNexusDesc": "Vertical roguelite on a Go board — mentors, skills, and stone combat.",
        "gamePetArena": "Pet Arena",
        "gamePetArenaDesc": "3v3 pet battles — equip your roster and climb the arena rating.",
        "stamina": "Lounge stamina",
        "buyStamina": "Buy +5 (120 tokens)",
        "buyOk": "Added {{n}} stamina",
        "buyLimit": "Daily purchase limit reached",
        "noStamina": "Not enough lounge stamina. Buy more or come back tomorrow.",
        "gameGomoku": "Gomoku",
        "gameGomokuDesc": "Japanese rules: 15×15, exactly five wins, black first.",
        "gameMemory": "Mentor Memory",
        "gameMemoryDesc": "Random female mentor portraits — take turns flipping pairs; most matches wins.",
        "gamePuzzle": "Mentor Puzzle",
        "gamePuzzleDesc": "Random female mentor 3×3 slide puzzle — co-op, alternate moves to restore the portrait.",
        "comingSoon": "Coming soon",
        "quickMatch": "Quick match",
        "createRoom": "Create room",
        "openRooms": "Open rooms",
        "join": "Join",
        "host": "Host",
        "players": "{{n}}/{{max}}",
        "matchWaiting": "Searching for an opponent…",
        "roomGone": "Room no longer exists",
        "backLounge": "Lounge",
        "ready": "Ready",
        "unready": "Cancel ready",
        "startGame": "Start",
        "resign": "Resign",
        "resignConfirm": "Resign this game? Your opponent will win.",
        "waitingOpponent": "Waiting for opponent…",
        "yourTurn": "Your turn",
        "oppTurn": "Opponent's turn",
        "black": "Black",
        "white": "White",
        "youWin": "You win!",
        "youLose": "You lose",
        "draw": "Draw",
        "needReady": "Both players must ready up",
        "playingAs": "Playing as",
        "chatPlaceholder": "Say something…",
        "lobbyChat": "Lounge chat",
        "chatWelcome": "Welcome to the parallel world lounge.",
        "soloPlay": "Solo practice",
        "cancelMatch": "Cancel match",
        "categoryMain": "Main",
        "categoryMainDesc": "Lattice Defense — hub upgrades, campaign missions, and daily challenges.",
        "categoryMini": "Mini Games",
        "categoryMiniDesc": "Solo or multiplayer arcade — Gomoku, Memory, Puzzle, and open rooms.",
        "backCategories": "All zones",
        "mainLeaderboardsHint": "Nexus campaign stars, clears, wins, and materials.",
        "miniLeaderboardsHint": "Arcade mini-game win counts.",
        "leaderboardsTitle": "Leaderboards",
        "leaderboardsHint": "Nexus campaign stars, arcade mini-games, and materials.",
        "lbNexusStars": "Nexus · total stars",
        "lbNexusClears": "Nexus · level clears",
        "lbNexusWins": "Nexus TD wins",
        "lbMaterials": "Nexus materials",
        "lbGomoku": "Gomoku wins",
        "lbMemory": "Memory wins",
        "lbPuzzle": "Puzzle wins",
        "lbEmpty": "No entries yet.",
        "lbLoadFail": "Failed to load leaderboards.",
        "soloMemoryHint": "Flip matching mentor portraits to score pairs.",
        "soloPuzzleHint": "Tap tiles next to the empty slot to restore the full portrait.",
        "soloCoopHint": "Tap tiles next to the empty slot to restore the full portrait.",
        "soloMoves": "Moves: {{n}}",
        "puzzleTeamMoves": "Team moves: {{n}}",
        "puzzleMovesLabel": "moves",
        "soloDifficulty": "AI level",
        "soloMode": "Solo — you are Black (first). Japanese rules.",
        "aiThinking": "AI thinking…",
        "diff1": "Lv1 · Beginner",
        "diff2": "Lv2 · Easy",
        "diff3": "Lv3 · Normal",
        "diff4": "Lv4 · Hard",
        "diff5": "Lv5 · Expert",
        "waitingTurn": "Waiting for partner…",
        "teamPairs": "Team pairs: {{n}}",
        "coopDone": "Puzzle complete — great teamwork!",
        "memoryPlay": "Play",
        "memoryCreate": "Create room",
        "memoryJoin": "Join"
    },
    "petArena": {
        "title": "Pet Arena",
        "kicker": "Pet Arena",
        "headline": "3v3 Command Battle",
        "backHall": "Game Hall",
        "yourTeam": "Your Team",
        "teamSlotsHint": "3 slots · Lv.{{level}}+",
        "roster": "Roster",
        "rosterMeta": "{{owned}} owned · {{ready}} ranked-ready",
        "rosterEmpty": "No pets yet — summon one from My Room.",
        "slotLabel": "Slot {{n}}",
        "tapRoster": "Tap roster",
        "needMorePets": "Need {{n}} more pet{{plural}} for a full 3v3 team. Try Monthly Summon in My Room.",
        "practiceHint": "All pets can join Practice. Ranked unlocks at Lv.{{level}} each.",
        "readyRanked": "Ready for ranked",
        "needRankedLevel": "Lv.{{level}}+ needed for ranked",
        "saveTeam": "Save Team",
        "practice": "Practice 3v3",
        "ranked": "Ranked Match",
        "teachingTitle": "Tutorial 1v1",
        "teachingSubtitle": "Open on registration — pick one pet to learn auto battle.",
        "teachingSlot": "Tutorial pet",
        "teachingPick": "Tap a pet below",
        "teachingStart": "Start Tutorial",
        "teachingFirstClear": "First clear bonus +{{bonus}} EXP",
        "teachingMentor": "Pick one pet — Tutorial works at any level.",
        "seasonChip": "{{name}} · {{days}}d left",
        "seasonReset": "Season reset — rating softened to {{rating}}",
        "seasonRecord": "{{wins}}W · {{losses}}L",
        "rating": "Arena rating",
        "mentorIdle": "Line up three pets — Practice works at any level.",
        "mentorTeaching": "Tutorial 1v1 — one pet vs a training dummy.",
        "mentorPractice": "Auto Practice — sit back and read the tempo.",
        "mentorRanked": "Ranked stakes — full auto replay.",
        "mentorWin": "Clean win — watch burst timing and shields in the next spar.",
        "mentorLoss": "Study the log — shields and heals kept them alive longer than you.",
        "mentorCoaching": "Auto battle — watch shields and burst timing.",
        "mentorSwap": "Swap pets anytime — Practice works at any level.",
        "hudReady": "Ready",
        "hudPickThree": "Pick 3 pets",
        "hudPressPractice": "Press Practice",
        "hudPressTeaching": "Press Tutorial",
        "hudWatching": "Watching tempo…",
        "autoBattle": "Auto Battle",
        "autoReady": "Ready",
        "autoHintIdle": "Pick 3 pets · press Practice",
        "autoHintTeaching": "Pick 1 pet · press Tutorial",
        "autoHintDone": "Tap Continue",
        "resultTeaching": "Tutorial 1v1",
        "resultPractice": "Practice 3v3",
        "resultRanked": "Ranked Match",
        "resultVictory": "Victory",
        "resultDefeat": "Defeat",
        "resultWinMeta": "Your pack held the line. EXP applied (daily cap).",
        "resultLossMeta": "Good sparring — EXP still gained. Level up for Ranked.",
        "resultTeachingWinMeta": "Nice first steps — EXP applied to your pet.",
        "resultTeachingLossMeta": "Training counts — try again for the first-clear bonus.",
        "resultContinue": "Continue",
        "resultRounds": "Rounds",
        "resultTeamExp": "Team EXP",
        "resultFirstClear": "First clear bonus",
        "weeklyBossSoon": "Weekly Boss · Lv.{{level}} (coming soon)",
        "awakeningSoon": "Awakening Trial · Lv.{{level}} (coming soon)",
        "errors": {
            "pickTeachingPet": "Select one pet for Tutorial 1v1.",
            "noPets": "Summon a pet in My Room first.",
            "invalidPet": "Invalid team pet.",
            "teachingLocked": "Tutorial requires a Lv.1+ pet.",
            "needThreePets": "Select exactly 3 pets for arena.",
            "rankedLevel": "Ranked requires all pets Lv.{{level}}+.",
            "teamFull": "All 3 slots are full. Tap a slotted pet to remove it first.",
            "pickOneToSave": "Select at least one pet.",
            "pickThreeToSave": "Pick 3 pets for a full arena team.",
            "matchFailed": "Match failed.",
            "network": "Network error."
        },
        "toast": {
            "teamSaved": "Arena team saved.",
            "teamSaveFail": "Unable to save team."
        },
        "leaderboardLink": "Leaderboard",
        "replayNext": "Next",
        "replayRestart": "Replay",
        "leaderboard": {
            "title": "Ranked Leaderboard",
            "hint": "Top trainers by arena rating. Ranked matches prefer opponents near your rating.",
            "empty": "No ranked records yet — play a Ranked Match to appear here.",
            "colTrainer": "Trainer",
            "colRating": "Rating",
            "colRecord": "Record",
            "colWinRate": "Win %",
            "you": "you"
        }
    },
    "nexus": {
        "title": "Lattice Defense",
        "subtitle": "Parallel world · Nexus hub",
        "heroDesc": "Defend the go-grid against noise entities. Upgrade your hub, spend lounge stamina per mission.",
        "materials": "Lattice materials",
        "materialsShort": "mat",
        "hubTitle": "Nexus hub",
        "coreName": "Compute Core",
        "coreDesc": "Unlocks chapters and raises tower tier cap.",
        "barracksName": "Star Barracks",
        "barracksDesc": "Unlocks tower types and global damage bonus.",
        "upgrade": "Upgrade",
        "upgradeOk": "Building upgraded!",
        "maxLevel": "MAX",
        "insufficientMaterials": "Not enough lattice materials.",
        "campaignTitle": "Campaign · Chapter 1",
        "ch1Name": "Awakening Grid",
        "ch1Desc": "Eight campaign maps on the 9×9 lattice. Final stage runs 20 waves with boss milestones.",
        "level11": "First Signal",
        "level12": "Broken Line",
        "level13": "Spiral Noise",
        "level14": "Diagonal Rush",
        "level15": "Long March",
        "level16": "Circuit Loop",
        "level17": "Corner Siege",
        "level18": "Core Breach",
        "levelNotFound": "Level not found",
        "noActiveRun": "No active run — start the level from the Nexus map before submitting results.",
        "levelLocked": "Clear the previous level first.",
        "playTitle": "Lattice Defense",
        "loadingAssets": "Loading battle assets… {{pct}}%",
        "canvasEngineLegacy": "Legacy canvas renderer — remove ?engine=canvas for the full Phaser experience.",
        "backHub": "Back to hub",
        "wave": "Wave",
        "pause": "Pause",
        "resume": "Resume",
        "win": "Lattice secured!",
        "winBadge": "Victory",
        "perfectBadge": "Perfect",
        "perfectStarsTitle": "Perfect clear — 3 stars!",
        "perfectWinTitle": "Flawless defense!",
        "lose": "Core breached",
        "loseBadge": "Defeat",
        "winDetail": "{{stars}}★ · +{{mat}} materials",
        "loseDetail": "Try a different tower layout.",
        "submitting": "Saving progress…",
        "towerCannon": "Pulse Cannon",
        "towerSlow": "Graviton Field",
        "towerLink": "Chain Link",
        "towerSniper": "Star Sniper",
        "spawn": "IN",
        "core": "CORE",
        "waveProgress": "{{cur}} / {{max}}",
        "skillBar": "Mentor skills",
        "skillBarrage": "Lattice Barrage",
        "skillFreeze": "Time Freeze",
        "skillUlt": "Mentor Ultimate",
        "skillReady": "Ready",
        "insufficientTokens": "Not enough Go tokens for this action",
        "replayEntryCost": "Replay costs {{cost}} Go tokens",
        "skillEmpowerHint": "Shift+click: empowered cast ({{cost}} tokens)",
        "skillEmpowerFail": "Empower failed — insufficient tokens",
        "coreRevive": "Revive CORE ({{cost}})",
        "coreReviveOk": "CORE restored",
        "reviveUsed": "Revive already used this run",
        "doubleMatPrompt": "Spend {{cost}} tokens to double material rewards?",
        "doubleMatApplied": "Materials ×2",
        "tokenHud": "Go tokens",
        "staminaBuyHint": "Out of stamina? Buy +5 ({{cost}} tokens)",
        "bossIncoming": "BOSS WAVE",
        "finaleBoss": "FINAL BOSS WAVE",
        "hubFinaleBadge": "FINALE",
        "hubBossBadge": "BOSS",
        "materialsReward": "+{{n}} lattice materials",
        "speedToggle": "Game speed",
        "muteToggle": "Sound on/off",
        "achievementUnlocked": "Achievement unlocked",
        "campaignProgress": "{{cleared}}/{{total}} cleared · {{stars}}/{{maxStars}}★",
        "levelWaves": "{{n}} waves",
        "ch2Name": "Ember Frontier",
        "ch2Desc": "Volcanic lattice missions. Requires Chapter 1 complete and Lattice Core Lv.5+.",
        "ch2Locked": "Clear all Chapter 1 missions (1-8) to unlock Ember Frontier.",
        "ch2CoreLocked": "Upgrade Compute Core to Lv 3 to open Ember Frontier.",
        "hubCoreCh2Hint": "Lv 3 unlocks Chapter 2",
        "waveIntelTitle": "Next wave",
        "waveIntelBoss": "Boss wave",
        "waveIntelEmpty": "All waves cleared",
        "waveBreakTpl": "Next wave in {{s}}s — click to start now",
        "waveBreakGo": "Start now",
        "targetFirst": "Target: lead",
        "targetLast": "Target: trail",
        "targetStrong": "Target: tank",
        "autoWaveOn": "Auto waves",
        "autoWaveOff": "Manual waves",
        "comboTpl": "Combo ×{{n}} · +{{gold}} gold",
        "briefRoster": "Enemy roster",
        "enemyNoise": "Noise",
        "enemyFast": "Runner",
        "enemyTank": "Tank",
        "enemyBoss": "Boss",
        "skillTreeTitle": "Mentor skill tree",
        "skillTreeDesc": "Spend materials to power up barrage, freeze, and ultimate between missions.",
        "skillUpgradeOk": "Skill upgraded!",
        "skillLocked": "Upgrade barracks or core first to unlock this skill.",
        "dailyTitle": "Daily lattice drill",
        "dailyName": "Daily drill",
        "dailyDesc": "Rotating challenge each day. Bonus materials on first clear.",
        "dailyPlay": "Enter daily drill",
        "dailyLocked": "Clear any campaign stage once to unlock daily drills.",
        "dailyCleared": "Cleared today",
        "factionLattice": "Lattice",
        "factionFlux": "Flux",
        "synergyLink": "Synergy!",
        "starChallengesTitle": "Star challenges",
        "challengePerfectCore": "Perfect core — no lives lost",
        "challengeSwift": "Swift clear — finish under the time limit",
        "challengeMinimal": "Minimal build — few towers only",
        "challengeSkills": "Skill master — use mentor skills twice",
        "challengeBonusTpl": "+{{n}} challenge mat",
        "challengeDone": "Challenge complete",
        "challenge_perfect_core": "Perfect core",
        "challenge_swift_clear": "Swift clear",
        "challenge_minimal_build": "Minimal build",
        "challenge_skill_master": "Skill master",
        "codexTitle": "Synergy codex",
        "codexRuleAdj": "Adjacent same faction: +{{pct}}% damage each",
        "codexRuleSet": "{{n}}+ same faction on field: +{{pct}}% damage to that faction",
        "codexLatticeDesc": "Burst and chain towers — best on straight path segments.",
        "codexFluxDesc": "Control and sniper towers — strongest on bends and choke points.",
        "skillLatticeBreak": "Lattice Break",
        "skillEmberStrike": "Ember Strike",
        "questBoardTitle": "Mission orders",
        "questDailyTitle": "Daily orders",
        "questWeeklyTitle": "Weekly orders",
        "questClaim": "Claim",
        "questClaimOk": "+{{n}} mat claimed",
        "questClaimed": "Claimed",
        "questNotDone": "Objective not complete yet",
        "questWin1": "Win 1 lattice mission",
        "questWin3": "Win 3 lattice missions today",
        "questDaily": "Clear the daily drill",
        "questChallenge": "Complete 2 star challenges",
        "questCombo": "Trigger 8 kill combos",
        "questWeekWins": "Win 10 missions this week",
        "questWeekStars": "Earn 15 stars this week",
        "questWeekCh1": "Clear a new Chapter 1 stage",
        "questWeekBoss": "Defeat 3 bosses",
        "level21": "Ash Gateway",
        "level22": "Magma Breach",
        "level23": "Frost Lattice",
        "level24": "Core Ember Siege",
        "brief21": "Volcanic gate — spread towers before the ash rush.",
        "brief22": "Magma breach — boss milestones on long waves.",
        "brief23": "Frozen lattice spiral — slow towers on inner bends.",
        "brief24": "Final ember siege. Eighteen waves — hold the core.",
        "winQuote21": "Ash gate held. The frontier opens.",
        "winQuote22": "Magma line broken. Push deeper.",
        "winQuote23": "Frost lattice sealed. The core awaits.",
        "winQuote24": "Ember frontier secured. Chapter 2 complete.",
        "critHit": "CRIT!",
        "bossEnrage": "ENRAGE",
        "waveBreakIncome": "Intermission +{{gold}} gold",
        "sidebarSkills": "Mentor skills",
        "sidebarTowers": "Deploy towers",
        "questDoneToast": "Order complete: {{label}} — claim in hub",
        "questDoneToastMulti": "{{n}} orders ready — claim in hub",
        "ch3Name": "Deep Lattice",
        "ch3Desc": "Shield, split, and flying noise — specialization matters.",
        "ch3Locked": "Clear Chapter 2 to enter the deep lattice.",
        "ch3CoreLocked": "Upgrade Core to Lv 8 to unlock Chapter 3.",
        "level31": "Shield Corridor",
        "level32": "Prism Gate",
        "level33": "Aurora Spiral",
        "level34": "Deep Prism Siege",
        "brief31": "Shielded noise — break shields before HP damage sticks.",
        "brief32": "Prism gate — mixed shield and sky noise.",
        "brief33": "Aurora spiral — all advanced types converge.",
        "brief34": "Chapter 3 finale — eighteen waves at the deep core.",
        "winQuote31": "Shields shattered. The deep lattice opens.",
        "winQuote32": "Prism gate secured. Push onward.",
        "winQuote33": "Spiral sealed. The core light answers.",
        "winQuote34": "Deep prism held. Chapter 3 is yours.",
        "ch4Name": "Void Rift",
        "ch4Desc": "Full noise roster — bosses fight in three phases.",
        "ch4Locked": "Clear Chapter 3 to enter the void rift.",
        "ch4CoreLocked": "Core Forge Lv 12 unlocks Chapter 4.",
        "level41": "Rift Outpost",
        "level42": "Abyss Corridor",
        "level43": "Void Spiral",
        "level44": "Void Rift Siege",
        "brief41": "Rift outpost — shields and splits first.",
        "brief42": "Abyss corridor — tanks and flyers press.",
        "brief43": "Void spiral — four noise types converge.",
        "brief44": "Chapter finale — 18 waves and a three-phase boss.",
        "winQuote41": "Outpost held. The rift widens.",
        "winQuote42": "Corridor cleared. Push deeper.",
        "winQuote43": "Spiral sealed. Finale ahead.",
        "winQuote44": "Void rift held. Chapter 4 is yours.",
        "bossShield": "SHIELD",
        "bossDesperate": "DESPERATE",
        "campaignMapTitle": "Campaign path",
        "hubChapterTagFmt": "Ch.{{id}}",
        "hubEnemyRoster": "Enemies",
        "hubChapterLockedShort": "Locked",
        "hubCoreCh4Hint": "Lv 12 unlocks Chapter 4",
        "ch5Name": "Crown Lattice",
        "ch5Desc": "Pre-finale gauntlet — full roster and three-phase bosses.",
        "ch5Locked": "Clear Chapter 4 to enter the Crown Lattice.",
        "ch5CoreLocked": "Core Forge Lv 15 unlocks Chapter 5.",
        "level51": "Crown Outpost",
        "level52": "Gilded Corridor",
        "level53": "Royal Spiral",
        "level54": "Crown Siege Finale",
        "brief51": "Crown outpost — shields and splits first.",
        "brief52": "Gilded corridor — tanks and flyers press.",
        "brief53": "Royal spiral — four noise types converge.",
        "brief54": "Chapter finale — 18 waves and a three-phase boss.",
        "winQuote51": "Outpost held. The crown awaits.",
        "winQuote52": "Corridor cleared. Gold light answers.",
        "winQuote53": "Spiral sealed. Finale ahead.",
        "winQuote54": "Crown held. Chapter 5 is yours.",
        "skillPrismSurge": "Prism Surge",
        "skillVoidCollapse": "Void Collapse",
        "hubCoreCh5Hint": "Lv 15 unlocks Chapter 5",
        "ch6Name": "Omega Nexus",
        "ch6Desc": "Campaign finale — full-spectrum noise and three-phase bosses at peak difficulty.",
        "ch6Locked": "Clear Chapter 5 to unlock Omega Nexus.",
        "ch6CoreLocked": "Core Forge Lv 18 unlocks Chapter 6.",
        "level61": "Weave Outpost",
        "level62": "Omega Corridor",
        "level63": "Ω Crystal Spiral",
        "level64": "Omega Finale Siege",
        "brief61": "Weave outpost — shields and splits lead the assault.",
        "brief62": "Omega corridor — tanks and flyers press the line.",
        "brief63": "Ω spiral — all four noise families converge.",
        "brief64": "Chapter 6 finale: 18 waves and a three-phase boss.",
        "winQuote61": "Outpost secured — the weave awaits.",
        "winQuote62": "Corridor cleared — omega draws near.",
        "winQuote63": "Spiral sealed — finale ahead.",
        "winQuote64": "The weave is yours — Chapter 6 complete.",
        "skillCrownShatter": "Crown Shatter",
        "hubCoreCh6Hint": "Lv 18 unlocks Chapter 6",
        "loseHint41": "Void levels lean on shields and splits — Prism Surge (6) breaks shields; watch flyers.",
        "loseHint51": "Crown levels hit harder — Crown Shatter (8) breaks shields and grants gold; fortify the exit lane.",
        "loseHint61": "Omega Nexus is dense — use all chapter skills (4–8); save cooldowns for the finale boss wave.",
        "dailyNameElite": "Elite Daily Challenge",
        "dailyEliteTag": "Elite",
        "dailyStreak": "Streak",
        "dailyModGold": "Modifier: +22% starting gold",
        "dailyModTower": "Modifier: +15% tower damage",
        "dailyModBoss": "Modifier: +20% damage vs bosses",
        "dailyModSwift": "Modifier: +18% wave clear gold",
        "questWeekCh6": "Clear 4 Chapter 6 levels this week",
        "questWeekDaily": "Complete 5 daily dungeons this week",
        "ch7Name": "Source Rift",
        "ch7Desc": "Final campaign chapter — source noise and three-phase bosses at peak intensity.",
        "ch7Locked": "Clear Chapter 6 to unlock Source Rift.",
        "ch7CoreLocked": "Core Forge Lv 21 unlocks Chapter 7.",
        "level71": "Source Outpost",
        "level72": "Rift Corridor",
        "level73": "Source Spiral",
        "level74": "Source Finale Siege",
        "brief71": "Source outpost — shields and splits lead.",
        "brief72": "Rift corridor — tanks and flyers press hard.",
        "brief73": "Source spiral — all noise families converge.",
        "brief74": "Chapter 7 finale: 18 waves, three-phase boss.",
        "winQuote71": "Outpost secured — the source awaits.",
        "winQuote72": "Corridor cleared — the rift calms.",
        "winQuote73": "Spiral sealed — finale ahead.",
        "winQuote74": "The source is yours — Chapter 7 complete.",
        "skillOmegaWeave": "Omega Weave",
        "skillSourceFracture": "Source Fracture",
        "hubCoreCh7Hint": "Lv 21 unlocks Chapter 7",
        "loseHint71": "Source Rift hits hardest — save Source Fracture (0) and chapter skills for the finale boss wave.",
        "mountFailed": "Battle view failed to load. Retry or refresh.",
        "artPipelineHint": "Run npm run nexus:assets for HD maps and enemy art.",
        "weeklyTitle": "Weekly modifier",
        "weeklyLattice": "Lattice towers +12% damage",
        "weeklyFlux": "Flux towers +12% damage",
        "weeklyGold": "Gold rewards +18%",
        "weeklyBoss": "Boss damage +22%",
        "weeklySwift": "Wave clear gold +15%",
        "masteryTitle": "Tower specialization",
        "masteryDesc": "Spend materials to power up each tower line in battle.",
        "masteryUpgradeOk": "Tower line upgraded!",
        "branchPickTitle": "Choose upgrade path (Lv 2)",
        "branchPickCancel": "Cancel",
        "branchCannonPierce": "Pierce",
        "branchCannonBlast": "Blast",
        "branchSlowFrost": "Deep frost",
        "branchSlowDrain": "Gold drain",
        "branchLinkChain": "Chain",
        "branchLinkOver": "Overcharge",
        "branchSniperMark": "Marksman",
        "branchSniperExec": "Executioner",
        "autoSkillOn": "Auto skills",
        "autoSkillOff": "Manual skills",
        "reportKills": "Kills {{n}}",
        "reportDamage": "Damage {{n}}",
        "reportDuration": "Time {{s}}s",
        "reportTopTower": "Top tower: {{name}}",
        "enemyShield": "Shield noise",
        "enemySplit": "Split noise",
        "enemyFlying": "Sky noise",
        "hubCoreCh3Hint": "Lv 8 unlocks Chapter 3",
        "retryLevel": "Retry mission",
        "cloudSaveRestored": "Cloud save restored",
        "cloudSaveFound": "Cloud save available — continuing battle",
        "missionBriefTag": "Mission briefing",
        "missionBriefBody": "Defend the lattice core. Place mentor towers on green pads, click a tower to upgrade, right-click to sell.",
        "missionBriefStart": "Deploy",
        "controlsHint": "Left-click pad: build · Left-click tower: upgrade · Right-click tower: sell · 1–3 mentor skills · 4–0 chapter skills (unlock by progress)",
        "controlsHintShort": "Build/upgrade/sell · 1–0 skills · QWER towers",
        "towerUpgraded": "Tower upgraded",
        "towerSold": "Tower sold",
        "towerMaxLevel": "Tower at max level",
        "waveCleared": "Wave {{n}} cleared · +{{gold}} gold",
        "notEnoughGold": "Not enough gold",
        "coreThreat": "Enemies nearing CORE — hold the line!",
        "guestBadge": "Guest trial — progress not saved",
        "guestNoSave": "Guest run complete. Register to save stars and materials.",
        "guestRegister": "Create account to save progress",
        "tryGuest": "Try Lattice Defense (no login)",
        "placeHint": "Click a glowing green pad to place your first tower",
        "tutorialPlace": "Step 1: Click a glowing green pad to place your first tower",
        "tutorialWave": "Step 2: Stop enemies before they reach CORE",
        "tutorialSkill": "Tip: Press 1 / 2 / 3 for mentor skills",
        "tutorialBend": "Step 1: Cover the spiral bend — place towers on green pads at the corners.",
        "milestone14": "Half the grid secured. Stronger waves ahead — upgrade your hub.",
        "milestone18": "Chapter 1 mastered! The lattice holds.",
        "loseHint11": "Place a tower on the first green pad before wave 1 ends.",
        "loseHint12": "Cover both sides of the broken path with at least two towers.",
        "loseHint13": "Put slow towers on the inner spiral bend where enemies stack.",
        "loseHint14": "Diagonal maps need sniper range — upgrade range early.",
        "loseHint15": "Save freeze for the long march wave with tanks.",
        "loseHint16": "Splash towers help on the circuit loop — try Chain Link.",
        "loseHint17": "Boss waves need burst skills — hold Mentor Ultimate.",
        "loseHint18": "Final stage: sell weak towers and upgrade before wave 10.",
        "hubDamageBonus": "+{{pct}}% DMG",
        "hubGoldBonus": "+{{gold}} start gold",
        "hubMaxTierBonus": "Lv{{n}} max towers",
        "sellRefund": "Sell +{{gold}}",
        "hubDamageHint": "Towers deal +{{pct}}% damage in missions",
        "hubGoldHint": "Missions start with +{{gold}} bonus gold",
        "goTokensEarned": "+{{n}} 🪙",
        "bondEarned": "+{{n}} bond",
        "touchHint": "Tap pad: build · Tap tower: upgrade · Long-press tower: sell",
        "nextLevel": "Next mission",
        "mentorBarkLabel": "Mentor",
        "chapterComplete": "Chapter 1 mastered! The lattice holds. Return to the hub for new upgrades.",
        "winQuoteDefault": "Clean defense. The core signal is stable.",
        "brief11": "Noise entities probe the coast grid. Place your first cannon on a green pad and hold the line.",
        "brief12": "The path bends — spread towers to cover both approach angles.",
        "brief13": "Spiral noise climbs from the north. Slow fields help on tight corners.",
        "brief14": "Diagonal rush from the high road. Upgrade early or leak.",
        "brief15": "Long march across the snow lattice. Save skills for stacked waves.",
        "brief16": "Circuit loop — enemies circle back. Splash damage shines here.",
        "brief17": "Corner siege before the core breach. Boss milestones ahead.",
        "brief18": "Final breach: twenty waves. Mentor ultimate ready — defend the core at all costs.",
        "winQuote11": "First signal held. The grid is listening.",
        "winQuote12": "Broken line repaired. Keep building.",
        "winQuote13": "Spiral contained. Your formation adapts well.",
        "winQuote14": "Diagonal rush stopped. Precision matters.",
        "winQuote15": "Long march complete. Stamina well spent.",
        "winQuote16": "Loop sealed. Chain links earned their keep.",
        "winQuote17": "Siege broken. One step from the core.",
        "winQuote18": "Core breach denied. Chapter One is yours.",
        "loseQuotes": [
            "Hold the bends — place towers before the rush.",
            "Upgrade your cannon; raw damage wins early waves.",
            "Slow towers shine when enemies stack on one tile.",
            "Sell and reposition if leaks keep slipping through.",
            "Save skills for boss waves — burst wins milestones.",
            "Hub Barracks adds permanent damage — visit the Nexus hub.",
            "Cover both sides of the path on diagonal maps.",
            "Chain Link splash clears grouped noise swarms."
        ]
    },
    "energy": {
        "regenRule": "+1 energy every 3 hours (up to your room cap)",
        "nextIn": "Next +1 in {{time}}"
    },
    "notifications": {
        "title": "Notifications",
        "empty": "No notifications",
        "markAll": "Mark all read",
        "matchWin": "Ranked win",
        "matchLoss": "Ranked loss",
        "matchBody": "vs {{opponent}} — {{reason}}",
        "gameInviteTitle": "Game invite from {{from}}",
        "gameInviteBody": "{{from}} invited you to the Arena — tap to play."
    },
    "push": {
        "hint": "Browser alerts for review ready & invites",
        "enable": "Enable push",
        "enabled": "Push on",
        "enabling": "Enabling…",
        "blocked": "Blocked in browser",
        "unsupported": "Not supported",
        "serverOff": "Push not configured on server"
    },
    "friends": {
        "title": "Friends",
        "addLabel": "Add by username",
        "usernamePlaceholder": "Username",
        "send": "Send request",
        "sent": "Friend request sent",
        "list": "Friends",
        "chat": "Messages",
        "empty": "No friends yet",
        "accept": "Accept",
        "reject": "Decline",
        "pendingFrom": "Request from {{name}}",
        "notFound": "User not found",
        "already": "Already friends",
        "self": "Cannot add yourself",
        "notFriends": "You must be friends to message",
        "requestNotifTitle": "Friend request from {{name}}",
        "requestNotifBody": "Open Friends to accept or decline.",
        "challenge": "Challenge",
        "challengeSent": "Challenge sent — waiting for response",
        "challengePending": "A challenge is already pending",
        "challengeAccept": "Accept & play",
        "challengeDecline": "Decline",
        "challengeFrom": "Challenge from {{name}}",
        "challengeNotifTitle": "Challenge from {{name}}",
        "challengeNotifBody": "Teaching match — accept in Friends.",
        "challengeAcceptedTitle": "{{name}} accepted your challenge",
        "challengeAcceptedBody": "Head to Arena to start the match.",
        "challengeAccepted": "Challenge accepted",
        "challengeDeclined": "Challenge declined",
        "challengeExpired": "Challenge expired",
        "challengeSpeedTitle": "Choose match speed",
        "challengeSpeedFast": "Fast — 1 min main time",
        "challengeSpeedMedium": "Standard — 5 min main time",
        "challengeSpeedSlow": "Slow — 20 min main time",
        "challengeCancel": "Cancel"
    },
    "onboarding": {
        "title": "Welcome to EvoGO",
        "intro": "A quick tour before you enter the matrix.",
        "stepArena": "Arena — ranked and betting matches (costs energy)",
        "stepSchool": "Go School — puzzles and homework",
        "stepLounge": "Game Hall — Go Nexus and Pet Arena",
        "stepAlbum": "Album — rent mentors for perks",
        "visitArena": "Visit Arena",
        "visitLounge": "Visit Game Hall",
        "done": "Enter Matrix Hub",
        "noMentorHub": "Rent a mentor to unlock Dojo reviews, bond growth, and Game Hall modes.",
        "rentMentorCta": "Browse mentors",
        "noEnergy": "Energy depleted — ranked matches need ⚡. Check the hub for regen time.",
        "day1Intro": "Complete these three steps on your first day for the best start:",
        "day1StepDaily": "Claim daily supply (+⚡ +🪙)",
        "day1StepPlay": "Play one ranked or casual match",
        "day1StepMentor": "Preview or rent a mentor in the Album",
        "day1Cta": "View Day-1 quests",
        "skip": "Skip",
        "next": "Next",
        "dojoStepImport": "Step 1: Import an SGF or pick a match replay.",
        "dojoStepReview": "Step 2: Start mentor review when ready.",
        "dojoStepQueue": "Step 3: Async reviews appear here when complete."
    },
    "stats": {
        "title": "Match stats",
        "record": "Record",
        "recent": "Recent matches",
        "win": "Win",
        "loss": "Loss",
        "draw": "Draw",
        "hint": "Use View game to replay on the board (not Dojo). Submit to mentor only when you want background analysis.",
        "viewReplay": "View game",
        "mentorReview": "Mentor review",
        "mentorReviewConfirm": "Submit this game for background mentor analysis (uses a review slot). Continue?",
        "pickColor": "Your color in this game (1=Black, 2=White):",
        "winRate": "Win rate ≈ {{pct}}%",
        "noMatches": "No saved games yet.",
        "noSgf": "No SGF saved for this game.",
        "recordShort": "{{wins}}W / {{losses}}L"
    },
    "kycProgress": {
        "submit": "Submit documents",
        "review": "Under review",
        "approved": "Approved",
        "rejected": "Rejected — resubmit below"
    },
    "goNexus": {
        "kicker": "Chapter campaign · Nexus Rebirth",
        "intro": "Vertical Go-board roguelite: drag to move, auto-fire stones, survive waves, and pick mentor-powered skills.",
        "progressLine": "Saved progress: {{wins}} wins · {{clears}} stage clears",
        "campaignTitle": "Go Nexus",
        "campaignDesc": "Walk your mentor across the board path. Tap a node to march there, then enter the stage.",
        "chapterProgress": "{{cleared}} / {{total}} stages cleared",
        "starsProgress": "{{stars}} / {{max}} stars",
        "continue": "Continue",
        "myRoom": "My Room",
        "chapter1Title": "Chapter 1 · Noise on the Board",
        "chapter1Meta": "4 stages · ~90s each",
        "chapter2Title": "Chapter 2 · Dawn Board",
        "chapter2Meta": "4 stages · faster patterns",
        "chapter2PreviewMeta": "Preview · coming in next update",
        "stageLocked": "Complete the previous stage before playing {{stage}}.",
        "mapNodeLocked": "This stage is still locked.",
        "locked": "Locked",
        "comingSoon": "Soon",
        "starsLabel": "{{stars}} of 3 stars",
        "clears": "{{count}} clears",
        "backCampaign": "Campaign",
        "goBalance": "GO balance",
        "newChapter": "New Chapter",
        "mapLabel": "Go Nexus campaign map",
        "mapHint": "Tap a glowing node — your mentor walks there, then the run begins.",
        "chapter2Soon": "Chapter 2 stages are coming in the next update.",
        "chapter2Unlocked": "Chapter 2 unlocked — march to 2-1 and play.",
        "chapter1CompleteBadge": "Chapter 1 complete",
        "chapter1CompleteDesc": "Noise Core shattered. Chapter 2 · Dawn Board is open — equip pets in My Room, then march to 2-1.",
        "petLoadoutLabel": "Nexus pet actives",
        "stagePanelKicker": "Selected stage",
        "stagePanelPlay": "March & Play",
        "stagePanelHint": "Your mentor will walk to this node, then the run begins.",
        "continueHint": "Recommended next — chase more stars or push forward.",
        "endlessCampaignDesc": "The board never ends. Clear bosses to unlock the next chapter — farm stars for mastery rewards.",
        "endlessFrontier": "Frontier · Ch {{chapter}}",
        "ascendCycle": "Ascend {{cycle}}",
        "endlessMapTitle": "Endless campaign board",
        "endlessMapHint": "Chapters 1–8 are fixed campaigns. Chapter 9+ scales forever — use arrows to revisit cleared boards.",
        "endlessNavLabel": "Browse endless chapters",
        "endlessNavPrev": "Prev ch",
        "endlessNavNext": "Next ch",
        "endlessChapterView": "Viewing Chapter {{chapter}}",
        "endlessCompletedLabel": "Cleared endless chapters",
        "endlessUnlocked": "Campaign board unlocked — Chapter 3 awaits after Dawn Core.",
        "battle": {
            "boardSecured": "Board Secured",
            "coreBroken": "Core Broken",
            "killsLine": "Kills {{kills}} · Run Lv {{level}} · Stars {{stars}}/3",
            "starClear": "Clear",
            "starTime": "Time",
            "starHp": "HP",
            "savedProgress": "Saved · {{stars}}★ best · {{clears}} clears",
            "runRecorded": "Run recorded · clear the stage to unlock the next",
            "campaignStats": "Campaign · {{wins}} wins · {{clears}} clears",
            "syncPending": "Progress sync pending — check connection",
            "bondPreview": "Bond preview",
            "backCampaign": "Back to Campaign",
            "continueRun": "Continue run (free)",
            "replayStage": "Replay stage",
            "nextStage": "Next · {{stage}}",
            "walkChapter2": "Walk map · Chapter 2",
            "tapToStart": "Tap to Start",
            "petSlots": "Pet slots {{limit}}/5 · 1–5 keys · tap slots",
            "focusReady": "Focus ready",
            "focusCooldown": "Focus {{seconds}}s",
            "controlsDrag": "Drag / WASD",
            "controlsAuto": "Auto stones",
            "controlsSkills": "Skills 1–5 · tap slots",
            "starLine": "{{clearMark}} Clear · {{timeMark}} Time · {{hpMark}} HP {{hp}}",
            "bondRunLine": "{{into}}/{{needed}} this run (+{{bond}} bond preview)",
            "nextUnlock": "Next unlock: {{unlock}}",
            "petExpAward": "Pet +{{exp}} EXP · {{name}}{{level}}",
            "allSlotsUnlocked": "All slots unlocked",
            "hudLevelLine": "Lv {{level}} · Captures {{kills}} · XP {{xp}}/{{needed}}",
            "rewardLine": "Shards {{stones}} · Bond {{bond}}",
            "petReady": "Pet{{plural}} ready",
            "petCooldown": "Pet {{seconds}}s",
            "mentorBarkIntro": "Mentor: Drag to move. Keys 1–5 fire pet actives; Q uses the first ready slot.",
            "skillPickTitle": "Choose a Joseki Blessing",
            "skillPickHint": "Tap a card or press 1 / 2 / 3",
            "startPetLine": "Pet: {{name}} · Q for {{active}}",
            "startMyRoomHint": "Pet growth lives in My Room; Go Nexus uses equipped actives.",
            "mentorCutinKicker": "MENTOR CUT-IN",
            "gameTitle": "GO NEXUS",
            "freeContinue": "Free continue for this campaign run.",
            "petActiveReadyIn": "{{pet}}: active ready in {{secs}}s.",
            "petSlotAssignHint": "Assign pets to Nexus slots in My Room.",
            "petSlotEmptyHint": "Pet slot {{slot}} is empty — equip in My Room.",
            "petSlotReadyIn": "{{pet}} (slot {{slot}}): ready in {{secs}}s.",
            "skillMultishotName": "Double Stone",
            "skillMultishotDetail": "+1 stone projectile",
            "skillSlowFieldName": "Atari Field",
            "skillSlowFieldDetail": "Slow territory burst",
            "skillFireRateName": "Fast Kifu",
            "skillFireRateDetail": "+28% fire rate",
            "skillTrailName": "Kifu Path",
            "skillTrailDetail": "Hits leave slow fields",
            "skillFocusName": "Mentor Focus",
            "skillFocusDetail": "+damage now",
            "critLabel": "CRIT",
            "petActiveCast": "{{name}} active!"
        },
        "stages": {
            "1_1": {
                "title": "1-1 First Capture",
                "objective": "Learn movement, auto stones, and first blessing.",
                "clearGoal": "Defeat the first core within 90s."
            },
            "1_2": {
                "title": "1-2 Fast Noise",
                "objective": "Read fast side-entry enemies and keep board space.",
                "clearGoal": "Survive fast side pressure and clear the core."
            },
            "1_3": {
                "title": "1-3 Shell Pressure",
                "objective": "Handle tank shells without losing the center.",
                "clearGoal": "Clear tank pressure with at least one skill field."
            },
            "1_boss": {
                "title": "1-Boss Noise Core",
                "objective": "Survive elite pressure and break the Nexus core.",
                "clearGoal": "Break the Noise Core boss stage."
            },
            "2_1": {
                "title": "2-1 Dawn Board",
                "objective": "A new noise pattern spreads across the upper board.",
                "clearGoal": "Hold the dawn lane and break the first core."
            },
            "2_2": {
                "title": "2-2 Crosswind",
                "objective": "Enemies cross from both sides — keep your pet actives ready.",
                "clearGoal": "Survive crosswind pressure without losing center control."
            },
            "2_3": {
                "title": "2-3 Prism Shell",
                "objective": "Tank shells stack with fast flanks — time your fields.",
                "clearGoal": "Clear prism shells before the board fills."
            },
            "2_boss": {
                "title": "2-Boss Dawn Core",
                "objective": "Break the Dawn Core before the board floods with noise.",
                "clearGoal": "Shatter the Dawn Core boss."
            },
            "3_1": {
                "title": "3-1 Signal Wake",
                "objective": "Signal pings drift diagonally — keep lanes open for pet actives.",
                "clearGoal": "Hold the signal lane and break the first core."
            },
            "3_2": {
                "title": "3-2 Arc Lane",
                "objective": "Arc enemies weave fast — read side swaps before they cross.",
                "clearGoal": "Survive arc pressure without losing center control."
            },
            "3_3": {
                "title": "3-3 Anchor Hold",
                "objective": "Signal anchors stack the center — time your slow fields.",
                "clearGoal": "Clear anchor shells before the board floods."
            },
            "3_boss": {
                "title": "3-Boss Signal Overseer",
                "objective": "Break the Signal Overseer before echo spawns overwhelm the board.",
                "clearGoal": "Shatter the Signal Overseer boss core."
            },
            "4_1": {
                "title": "4-1 Mirror Wake",
                "objective": "Mirror shards race the rails — keep your side swaps ready.",
                "clearGoal": "Hold the mirror lane and break the first core."
            },
            "4_2": {
                "title": "4-2 Twin Flank",
                "objective": "Fast mirrors cross from both sides — stagger pet cooldowns.",
                "clearGoal": "Survive twin-flank pressure without losing the center."
            },
            "4_3": {
                "title": "4-3 Plate Grid",
                "objective": "Mirror plates stack with fast flanks — burst tanks first.",
                "clearGoal": "Clear mirror plates before the board fills."
            },
            "4_boss": {
                "title": "4-Boss Mirror Titan",
                "objective": "Break the Mirror Titan before split doubles flood the lanes.",
                "clearGoal": "Shatter the Mirror Titan boss core."
            },
            "5_1": {
                "title": "5-1 Prism Wake",
                "objective": "Prism drops swell from the top — keep wide lanes for kiting.",
                "clearGoal": "Hold the prism lane and break the first core."
            },
            "5_2": {
                "title": "5-2 Spray Wall",
                "objective": "Spray enemies flank while shells advance — time your fields.",
                "clearGoal": "Survive spray pressure without losing center control."
            },
            "5_3": {
                "title": "5-3 Crystal Hold",
                "objective": "Heavy prism shells stack the board — focus fire tanks early.",
                "clearGoal": "Clear crystal shells before the board floods."
            },
            "5_boss": {
                "title": "5-Boss Prism Monarch",
                "objective": "Break the Prism Monarch before tank floods choke the center.",
                "clearGoal": "Shatter the Prism Monarch boss core."
            },
            "6_1": {
                "title": "6-1 Static Wake",
                "objective": "Static sparks surge early — keep moving to dodge shock pulses.",
                "clearGoal": "Hold the static lane and break the first core."
            },
            "6_2": {
                "title": "6-2 Bolt Rush",
                "objective": "Bolt enemies weave fast — pet actives must cover both rails.",
                "clearGoal": "Survive bolt rush without losing center control."
            },
            "6_3": {
                "title": "6-3 Crown Grid",
                "objective": "Crownlings stack with fast bolts — burst elites before tanks land.",
                "clearGoal": "Clear crown pressure before the board fills."
            },
            "6_boss": {
                "title": "6-Boss Static Regent",
                "objective": "Break the Static Regent before shock aura shreds your shape.",
                "clearGoal": "Shatter the Static Regent boss core."
            },
            "7_1": {
                "title": "7-1 Echo Wake",
                "objective": "Echo whispers swarm the rails — control space with slow fields.",
                "clearGoal": "Hold the echo lane and break the first core."
            },
            "7_2": {
                "title": "7-2 Pulse Wall",
                "objective": "Pulse enemies cross in waves — stagger pet cooldowns.",
                "clearGoal": "Survive pulse walls without losing center control."
            },
            "7_3": {
                "title": "7-3 Reverb Hold",
                "objective": "Reverb tanks echo your fields — burst them before duplicates stack.",
                "clearGoal": "Clear reverb shells before the board floods."
            },
            "7_boss": {
                "title": "7-Boss Echo Choir",
                "objective": "Break the Echo Choir before duplicate bursts flood both rails.",
                "clearGoal": "Shatter the Echo Choir boss core."
            },
            "8_1": {
                "title": "8-1 Null Wake",
                "objective": "Null bits grid the board — pet cooldowns decide lane control.",
                "clearGoal": "Hold the null lane and break the first core."
            },
            "8_2": {
                "title": "8-2 Glitch Rush",
                "objective": "Glitch gremlins weave unpredictably — keep your shape mobile.",
                "clearGoal": "Survive glitch rush without losing center control."
            },
            "8_3": {
                "title": "8-3 Void Grid",
                "objective": "Void blocks stack slowly but relentlessly — focus fire tanks early.",
                "clearGoal": "Clear void blocks before the board fills."
            },
            "8_boss": {
                "title": "8-Boss Null Sovereign",
                "objective": "Break the Null Sovereign before the void field swallows the center.",
                "clearGoal": "Shatter the Null Sovereign boss core."
            }
        },
        "chapter3Title": "Chapter 3 · Signal Drift",
        "chapter3Meta": "4 stages · echo spawns",
        "chapter4Title": "Chapter 4 · Mirror Rush",
        "chapter4Meta": "4 stages · split bosses",
        "chapter5Title": "Chapter 5 · Prism Flood",
        "chapter5Meta": "4 stages · tank floods",
        "chapter6Title": "Chapter 6 · Static Crown",
        "chapter6Meta": "4 stages · shock aura",
        "chapter7Title": "Chapter 7 · Echo Board",
        "chapter7Meta": "4 stages · duplicates",
        "chapter8Title": "Chapter 8 · Null Lattice",
        "chapter8Meta": "4 stages · void fields",
        "families": {
            "noise": {
                "name": "Noise Swarm"
            },
            "dawn": {
                "name": "Dawn Chorus"
            },
            "signal": {
                "name": "Signal Drift"
            },
            "mirror": {
                "name": "Mirror Rush"
            },
            "prism": {
                "name": "Prism Flood"
            },
            "static": {
                "name": "Static Crown"
            },
            "echo": {
                "name": "Echo Board"
            },
            "null": {
                "name": "Null Lattice"
            }
        },
        "enemies": {
            "noise_mote": {
                "name": "Noise Mote"
            },
            "noise_wisp": {
                "name": "Noise Wisp"
            },
            "noise_shell": {
                "name": "Noise Shell"
            },
            "noise_core": {
                "name": "Noise Core"
            },
            "dawn_spark": {
                "name": "Dawn Spark"
            },
            "dawn_skiff": {
                "name": "Dawn Skiff"
            },
            "dawn_bulwark": {
                "name": "Dawn Bulwark"
            },
            "dawn_core": {
                "name": "Dawn Core"
            },
            "signal_ping": {
                "name": "Signal Ping"
            },
            "signal_arc": {
                "name": "Signal Arc"
            },
            "signal_anchor": {
                "name": "Signal Anchor"
            },
            "signal_overseer": {
                "name": "Signal Overseer"
            },
            "mirror_shard": {
                "name": "Mirror Shard"
            },
            "mirror_racer": {
                "name": "Mirror Racer"
            },
            "mirror_plate": {
                "name": "Mirror Plate"
            },
            "mirror_titan": {
                "name": "Mirror Titan"
            },
            "prism_drop": {
                "name": "Prism Drop"
            },
            "prism_spray": {
                "name": "Prism Spray"
            },
            "prism_shell": {
                "name": "Prism Shell"
            },
            "prism_monarch": {
                "name": "Prism Monarch"
            },
            "static_spark": {
                "name": "Static Spark"
            },
            "static_bolt": {
                "name": "Static Bolt"
            },
            "static_crownling": {
                "name": "Crownling"
            },
            "static_regent": {
                "name": "Static Regent"
            },
            "echo_whisper": {
                "name": "Echo Whisper"
            },
            "echo_pulse": {
                "name": "Echo Pulse"
            },
            "echo_reverb": {
                "name": "Echo Reverb"
            },
            "echo_choir": {
                "name": "Echo Choir"
            },
            "null_bit": {
                "name": "Null Bit"
            },
            "null_gremlin": {
                "name": "Null Gremlin"
            },
            "null_block": {
                "name": "Null Block"
            },
            "null_sovereign": {
                "name": "Null Sovereign"
            }
        }
    },
    "games": {
        "title": "Game Library",
        "desc": "Your ranked and saved games. Private games need a share link.",
        "empty": "No saved games yet.",
        "viewReplay": "View replay",
        "togglePrivacy": "Toggle privacy",
        "privateLink": "Private replay link (share carefully):"
    },
    "guild": {
        "title": "Guild",
        "viewTitle": "Guild",
        "intro": "Rally your squad — share a tag, climb the season board together, and coordinate in guild hall chat.",
        "noGuild": "You are not in a guild yet. Create one or join an existing squad below.",
        "notFound": "Guild not found.",
        "invalidInput": "Enter a valid guild name and tag (2–8 characters).",
        "alreadyInGuild": "You are already in a guild. Leave first to join another.",
        "tagTaken": "That guild tag is already taken.",
        "nameTaken": "That guild name is already taken.",
        "namePh": "Guild name",
        "tagPh": "Tag (2-8 chars)",
        "descPh": "Guild description / motto",
        "create": "Create guild",
        "joinPh": "Guild tag to join",
        "join": "Join guild",
        "joinThis": "Join this guild",
        "joined": "Welcome to the guild!",
        "left": "You left the guild.",
        "disbanded": "Guild disbanded.",
        "leaveGuild": "Leave guild",
        "disbandGuild": "Disband guild",
        "confirmLeave": "Leave this guild?",
        "confirmDisband": "Disband this guild permanently? All members will be removed.",
        "confirmKick": "Remove {{user}} from the guild?",
        "memberKicked": "{{user}} was removed from the guild.",
        "ownerMustDisband": "As leader, disband the guild or transfer leadership before leaving.",
        "cannotKickOwner": "Cannot remove the guild leader.",
        "createdTitle": "Guild created",
        "createdBody": "Your guild is ready. Invite friends with your tag.",
        "members": "Members",
        "leader": "Leader",
        "ownerRole": "Leader",
        "memberRole": "Member",
        "editGuild": "Manage guild",
        "saveGuild": "Save changes",
        "updated": "Guild profile updated.",
        "forbidden": "Only the guild leader can do this.",
        "notInGuild": "You must be in a guild first.",
        "inviteToGuild": "Invite to guild",
        "invitePlayerPh": "Invite player by username",
        "inviteSent": "Guild invite sent!",
        "inviteTitle": "Guild invite: {{guild}}",
        "inviteBody": "{{from}} invited you to join [{{tag}}]. Open Guild to accept.",
        "alreadyInvited": "This player already has a pending invite.",
        "targetInGuild": "That player is already in a guild.",
        "pendingInvites": "Pending invites",
        "accept": "Accept",
        "decline": "Decline",
        "inviteDeclined": "Invite declined.",
        "viewGuild": "View guild",
        "chat": "Guild hall chat",
        "chatPh": "Message your guild…",
        "chatEmpty": "No messages yet — say hello!",
        "joinToChat": "Join this guild to participate in hall chat.",
        "copyLink": "Copy invite link",
        "linkCopied": "Invite link copied!",
        "statsTitle": "Guild power",
        "statMembers": "Members",
        "statWins": "Total wins",
        "statSeason": "Season points",
        "statElo": "Avg ELO",
        "statMessages": "Hall messages",
        "statFounded": "Founded",
        "seasonGoal": "Season rally",
        "seasonGoalDesc": "Combined ranked season points from all members this season.",
        "directoryTitle": "Top guilds",
        "directoryHint": "Guilds ranked by combined member season points.",
        "directoryEmpty": "No guilds yet — be the first to create one!",
        "colTag": "Tag",
        "colMembers": "Members",
        "colSeason": "Season",
        "colWins": "Wins",
        "colElo": "Avg ELO",
        "memberJoined": "Joined",
        "kickMember": "Remove",
        "subscriptionTitle": "Guild subscription",
        "subscriptionHint": "{{cost}} 🪙 per {{days}} days — keeps hall chat, weekly quests, and war board active.",
        "subActive": "Active · {{days}} days left",
        "subExpired": "Expired — renew to restore full features",
        "renewSub": "Renew ({{cost}} 🪙 / {{days}}d)",
        "renewTakeLead": "Renew & become leader ({{cost}} 🪙 / {{days}}d)",
        "renewed": "Guild subscription renewed.",
        "renewedLeadership": "Subscription renewed — you are now guild leader.",
        "confirmRenew": "Renew guild subscription for {{cost}} 🪙 from your balance?",
        "confirmRenewLead": "Renew for {{cost}} 🪙 and become guild leader?",
        "notEnoughTokens": "Not enough GO tokens.",
        "subscriptionExpired": "Guild subscription expired. Leader must renew to chat.",
        "inactiveGuild": "Guild is inactive — renew subscription to restore features.",
        "inactiveFeatures": "Guild is inactive. Renew subscription to edit, invite, or chat.",
        "chatLocked": "Hall chat is locked while the guild subscription is inactive.",
        "renewForbidden": "You cannot renew at this stage — wait for your turn in the grace period.",
        "guildDisbanded": "This guild has been disbanded due to unpaid subscription.",
        "phaseActive": "Active",
        "phaseLeaderGrace": "Inactive · leader grace",
        "phaseOfficerGrace": "Inactive · officer grace",
        "phaseOpenGrace": "Inactive · open grace",
        "phaseActiveHint": "Full features active. Leader can renew early anytime.",
        "phaseLeaderGraceHint": "Subscription expired. Leader has {{days}} days to renew for {{cost}} 🪙.",
        "phaseOfficerGraceHint": "Leader grace ended. Officer {{user}} can renew for {{cost}} 🪙 and become leader ({{days}} days). If no officer, any member may renew.",
        "phaseOpenGraceHint": "Last chance: any member can renew for {{cost}} 🪙 and become leader ({{days}} days), or the guild disbands.",
        "subscriptionMeta": "Create {{create}} 🪙 · Renew {{renew}} 🪙 / {{days}}d · {{left}} days left in current phase",
        "officerRole": "Officer",
        "officerPh": "Set officer by username",
        "setOfficer": "Set officer",
        "officerSet": "{{user}} is now guild officer.",
        "cannotOfficerOwner": "The guild leader cannot be set as officer.",
        "eventsTitle": "Guild log",
        "eventCreated": "Guild founded.",
        "eventRenewed": "Subscription renewed ({{cost}} 🪙).",
        "eventLeadership": "Leadership transferred via renewal.",
        "eventOfficer": "{{user}} appointed as officer.",
        "eventJoin": "Member joined.",
        "questInactive": "Weekly rewards require an active subscription.",
        "createCostNote": "Create for {{create}} 🪙 ({{days}} days). Monthly renew {{renew}} 🪙. Weekly quests earn ~{{reward}} 🪙 per member.",
        "createPaid": "Create guild ({{cost}} 🪙 / {{days}}d)",
        "emblemTitle": "Guild emblem",
        "emblemHint": "Pick a badge shown on war board and your guild profile.",
        "emblemUpdated": "Emblem updated.",
        "weeklyQuestTitle": "Weekly guild quest",
        "questRankedWins": "Ranked victories",
        "questRankedWinsDesc": "Win 20 ranked Arena games as a guild this week.",
        "questSeasonPts": "Season momentum",
        "questSeasonPtsDesc": "Earn 150 combined season points from ranked wins this week.",
        "questMessages": "Hall activity",
        "questMessagesDesc": "Send 30 messages in guild hall chat this week.",
        "claimQuest": "Claim +{{n}} 🪙",
        "questClaimed": "Weekly reward claimed: +{{n}} 🪙",
        "questClaimedTag": "Claimed",
        "questIncomplete": "Guild quest not complete yet.",
        "questAlreadyClaimed": "You already claimed this week's reward.",
        "warTitle": "Guild war board",
        "warHint": "This week's guild activity — ranked wins and season points.",
        "warEmpty": "No guild activity this week yet.",
        "warColWins": "Week wins",
        "levelBadge": "Guild Lv.{{level}}",
        "levelNext": "Next: Lv.{{level}} — {{members}} members & {{pts}} season pts",
        "levelMax": "Max guild level reached",
        "emotesUnlocked": "Hall emotes unlocked",
        "announcementTitle": "Guild bulletin",
        "announcementPh": "Tactics, schedule, or rally call…",
        "announcementEmpty": "No bulletin posted yet.",
        "announcementLocked": "Bulletin is read-only while subscription is inactive.",
        "saveAnnouncement": "Post bulletin",
        "announcementSaved": "Bulletin updated.",
        "contribTitle": "Weekly contributors",
        "contribHint": "Ranked by wins, season points, and hall activity this week.",
        "contribWins": "Wins",
        "contribSeason": "Season",
        "contribChat": "Chat",
        "warClaimBtn": "Claim war reward (#{{rank}} · {{amount}} 🪙)",
        "warLeaderClaim": "Last week rank #{{rank}} — leader can claim {{amount}} 🪙",
        "warClaimed": "War reward claimed: +{{amount}} 🪙 (rank #{{rank}})",
        "warAlreadyClaimed": "War reward already claimed for last week.",
        "warNoReward": "No war-board reward available.",
        "eventInviteReward": "Invite reward paid (+{{amount}} 🪙)",
        "eventWarReward": "War-board reward claimed (rank #{{rank}}, {{amount}} 🪙)",
        "eventChallengeSent": "Friendly challenge sent.",
        "eventChallengeAccepted": "Friendly challenge accepted.",
        "eventAnnouncement": "Bulletin updated.",
        "challengeTitle": "Cross-guild friendly",
        "challengeHint": "Leaders challenge another guild. Reps meet in Arena with the room code.",
        "challengeSend": "Send challenge",
        "challengeTagPh": "Target guild tag",
        "challengeRepPh": "Your rep username",
        "challengeWagerPh": "Optional wager (GO)",
        "challengeIncoming": "Incoming challenges",
        "challengeActive": "Active matches",
        "challengeAccept": "Accept",
        "challengeJoin": "Join in Arena",
        "challengeWaiting": "Waiting for opposing guild rep…",
        "challengeSent": "Challenge sent to [{{tag}}].",
        "challengeAccepted": "Challenge accepted — reps join in Arena.",
        "challengeDeclined": "Challenge declined.",
        "challengeTargetNotFound": "Target guild not found.",
        "challengeSelf": "Cannot challenge your own guild.",
        "challengeTargetInactive": "Target guild subscription is inactive.",
        "challengeInvalidRep": "Enter a valid representative username.",
        "challengeRepNotMember": "Representative must be a guild member.",
        "challengePending": "A challenge to that guild is already pending.",
        "challengeNotPending": "Challenge is no longer pending.",
        "challengeExpired": "Challenge expired.",
        "seasonBlockTitle": "Guild season",
        "seasonBlockMeta": "{{name}} · {{pts}} pts · rank #{{rank}} · {{wins}} friendly wins",
        "matchWeekTitle": "Rivalry week",
        "matchWeekVs": "vs [{{tag}}] {{name}}",
        "matchWeekWinning": "Your guild is ahead this week!",
        "matchWeekTied": "Tied — keep pushing!",
        "matchWeekBehind": "Behind — rally the squad!",
        "coopTitle": "Squad goals",
        "coopHint": "Complete together this week for guild season credit.",
        "coopRanked": "Ranked squad",
        "coopRankedDesc": "15 ranked wins as a guild.",
        "coopDojo": "Dojo squad",
        "coopDojoDesc": "5 dojo reviews completed.",
        "coopLounge": "Game Hall squad",
        "coopLoungeDesc": "10 Game Hall plays as a guild.",
        "renewalPoolTitle": "Renewal fund",
        "renewalPoolHint": "Members can chip in GO toward the next subscription.",
        "renewalDonate": "Donate",
        "renewalDonated": "Donated {{amount}} 🪙 to renewal fund.",
        "reportsTitle": "Battle reports",
        "reportLiked": "Cheered!",
        "timelineTitle": "Guild timeline",
        "thanksBtn": "Thank squad",
        "thanksSent": "Thanks sent to the hall!",
        "thanksAlready": "You already thanked the squad this week.",
        "sysWelcome": "🎉 Welcome {{user}} — say hi!",
        "sysOnline": "👋 {{user}} is online",
        "sysThanks": "💛 {{user}} thanked the squad",
        "title_mvp": "MVP",
        "title_recruiter": "Recruiter",
        "title_newbie": "Rookie",
        "milestone_founded": "Guild founded",
        "milestone_members_5": "5 members united",
        "milestone_members_10": "10 members strong",
        "milestone_season_500": "500 season points reached",
        "milestone_level_3": "Reached guild level 3",
        "milestone_level_5": "Reached max guild level",
        "eventWelcome": "Welcome {{user}} to the guild!",
        "eventRenewalDonate": "{{user}} donated {{amount}} 🪙 to renewal fund",
        "eventBattleReport": "Battle report: {{winner}} won"
    },
    "achievements": {
        "title": "Achievements",
        "empty": "No achievements yet.",
        "noneUnlocked": "Keep playing to unlock your first badge.",
        "first_win": {
            "title": "First Victory",
            "desc": "Win your first ranked or bounty game."
        },
        "wins_10": {
            "title": "Ten Wins",
            "desc": "Reach 10 total wins."
        },
        "wins_50": {
            "title": "Fifty Wins",
            "desc": "Reach 50 total wins."
        },
        "puzzle_10": {
            "title": "Puzzle Scholar",
            "desc": "Solve 10 tsumego puzzles."
        },
        "dojo_review_5": {
            "title": "Review Apprentice",
            "desc": "Complete 5 dojo reviews."
        },
        "bond_25": {
            "title": "Deep Bond",
            "desc": "Reach bond level 25 with a mentor."
        },
        "lounge_20": {
            "title": "Game Hall Regular",
            "desc": "Play 20 Game Hall sessions (Go Nexus or Pet Arena)."
        },
        "guild_join": {
            "title": "Guild Member",
            "desc": "Join or create a guild."
        },
        "guild_founder": {
            "title": "Guild Founder",
            "desc": "Create a guild."
        },
        "guild_recruiter": {
            "title": "Guild Recruiter",
            "desc": "Invite 3 members who earn their first ranked win."
        },
        "guild_coop_week": {
            "title": "Squad Complete",
            "desc": "Be in a guild that finished all squad goals in a season week."
        },
        "nexus_first_clear": {
            "title": "Lattice Initiate",
            "desc": "Win a Lattice Defense campaign mission."
        },
        "nexus_ch1_master": {
            "title": "Awakening Grid Master",
            "desc": "Clear all eight Chapter 1 campaign maps."
        },
        "nexus_ch2_master": {
            "title": "Ember Gate Keeper",
            "desc": "Master Chapter 2 — Ember Gate."
        },
        "nexus_ch3_master": {
            "title": "Prism Depth Warden",
            "desc": "Master Chapter 3 — Prism Depths."
        },
        "nexus_ch4_master": {
            "title": "Void Rift Warden",
            "desc": "Master Chapter 4 — Void Rift."
        },
        "nexus_ch5_master": {
            "title": "Crown Lattice Regent",
            "desc": "Master Chapter 5 — Crown Lattice."
        },
        "nexus_ch6_master": {
            "title": "Omega Weave Ascendant",
            "desc": "Master Chapter 6 — Omega Nexus."
        },
        "nexus_ch7_master": {
            "title": "Source Fracture Sage",
            "desc": "Master Chapter 7 — Source Rift."
        },
        "nexus_wins_25": {
            "title": "Lattice Veteran",
            "desc": "Win 25 Nexus campaign or daily missions."
        },
        "nexus_boss_slayer": {
            "title": "Boss Breaker",
            "desc": "Defeat 10 Nexus boss units across all runs."
        },
        "nexus_daily_7": {
            "title": "Daily Defender",
            "desc": "Clear the daily dungeon on 7 separate days."
        },
        "nexus_daily_streak_5": {
            "title": "Daily Streak V",
            "desc": "Reach a 5-day daily dungeon clear streak."
        },
        "nexus_perfect_12": {
            "title": "Perfect Grid",
            "desc": "Earn 3★ on 12 different campaign levels."
        },
        "nexus_campaign_omega": {
            "title": "Campaign Omega",
            "desc": "Complete Chapter 7 and conquer the Source Rift finale."
        }
    },
    "season": {
        "title": "Season Rankings",
        "noActive": "No active season.",
        "yourPoints": "Your season points:",
        "milestoneTrack": "Season rewards",
        "milestonePts": "{{pts}} pts",
        "milestoneClaim": "Claim",
        "milestoneClaimed": "Claimed",
        "milestoneLocked": "Reach {{pts}} pts",
        "milestoneRewardTokens": "+{{tokens}} 🪙",
        "milestone50": "Warm-up",
        "milestone100": "Contender",
        "milestone200": "Champion",
        "milestone350": "Legend",
        "milestoneClaimedToast": "Season reward claimed!"
    },
    "homework": {
        "title": "Assigned homework"
    },
    "pwa": {
        "installHint": "Install EvoGO on your home screen for faster access and offline puzzles.",
        "install": "Install app"
    },
    "profile": {
        "title": "Kishi Profile",
        "notFound": "Player not found.",
        "privateAccount": "This profile is private.",
        "record": "{{wins}}W · {{losses}}L",
        "mentor": "Mentor",
        "bond": "Bond",
        "editBio": "Edit bio",
        "editBioPrompt": "Tell others about your Go journey (max 500 chars):",
        "changeAvatar": "Change photo",
        "avatarUpdated": "Profile photo updated.",
        "avatarInvalid": "Please choose a JPG, PNG, or WebP image under 2 MB.",
        "saved": "Profile updated.",
        "inviteGame": "Invite to Arena",
        "inviteSent": "Game invite sent!",
        "message": "Message",
        "newPost": "New post",
        "postPlaceholder": "Share a thought, game review, or update…",
        "addPhotos": "Photos",
        "addVideo": "Video",
        "publish": "Publish",
        "feed": "Posts",
        "noPosts": "No posts yet.",
        "noPostsCta": "Write your first post ↑",
        "postCreated": "Post published.",
        "postDeleted": "Post deleted.",
        "postEmpty": "Add text or media to publish.",
        "postDailyLimit": "Daily post limit reached — try again tomorrow.",
        "confirmDelete": "Delete this post?",
        "tokenHistory": "GO Token history",
        "tokenHistoryDesc": "All credits and debits to your balance.",
        "tokenHistoryEmpty": "No token transactions yet.",
        "tokenTime": "Time",
        "tokenDelta": "Change",
        "tokenBalance": "Balance",
        "tokenReason": "Reason",
        "accountKyc": "Account & KYC",
        "studioHeroBtn": "📸 Photo Studio",
        "studioPromoTitle": "Mentor photo studio",
        "studioPromoDesc": "Browse per-mentor albums — duo photos with signature & EvoGO branding. 1000 🪙 each.",
        "studioPromoCta": "Open studio",
        "studioPromoStatusLoading": "Checking studio status…",
        "studioPromoStatusReady": "Selfies verified — open studio to shoot.",
        "studioPromoStatusRejected": "Selfies need update — open studio.",
        "studioPromoStatusNone": "No reference selfies yet — open Photo Studio.",
        "kycSeparateNote": "KYC uploads are for identity verification only. Mentor photos use Photo Studio — not these files.",
        "kycChooseFile": "Choose file"
    },
    "referral": {
        "title": "Invite & Earn",
        "desc": "Share your link. New players get 72 hours of any mentor free. You earn tokens when they top up (3 levels: 10% + 2.5% + 2.5%).",
        "rates": "Commission: Level 1 · 10% · Level 2 · 2.5% · Level 3 · 2.5% (15% total from referred purchases).",
        "share": "Share link",
        "copy": "Copy",
        "copied": "Link copied!",
        "directCount": "{{count}} direct invites",
        "earnings": "{{amount}} 🪙 earned from referrals",
        "trialTitle": "Welcome gift — free mentor trial",
        "trialDesc": "You joined via a friend link. Pick any mentor for {{hours}} hours free.",
        "claimTrial": "Start free trial",
        "trialGranted": "{{mentor}} unlocked for {{hours}} hours!",
        "trialUsed": "You already used your referral mentor trial.",
        "notReferred": "Referral trial is for users who registered with an invite link.",
        "orgHubBtn": "🔒 My organization",
        "orgHubTitle": "Organization center",
        "orgHubPeriod": "Report period (days)",
        "orgHubYou": "You",
        "orgHubGen1": "Gen 1 · direct",
        "orgHubGen2": "Gen 2",
        "orgHubGen3": "Gen 3",
        "orgHubUpline": "Your upline",
        "orgHubTree": "3-generation org chart",
        "orgHubGrowth": "Org growth",
        "orgHubEarnings": "Token earnings",
        "orgHubNoMembers": "No members in this generation yet.",
        "orgHubTotalOrg": "Total org size",
        "orgHubPeriodNew": "New this period",
        "orgHubVerified": "Verified in org",
        "orgHubEarnTotal": "All-time referral earnings",
        "orgHubEarnPeriod": "Earnings this period",
        "orgHubRecent": "Recent commissions",
        "orgHubLevel": "Level {{level}}",
        "orgHubFrom": "from {{user}}",
        "orgHubNoData": "No data in this period."
    },
    "feedback": {
        "achievementUnlocked": "Achievement unlocked!",
        "celebrateSync": "+{{n}}% Sync",
        "celebrateTokens": "+{{n}} 🪙"
    },
    "forest": {
        "libraryTitle": "Treasure nook",
        "librarySub": "Learn, social, store, records — browse at your own pace.",
        "libraryShort": "Nook",
        "libraryOpen": "Open treasure nook",
        "librarySearch": "Search features, e.g. review, store, guild",
        "bubblesHint": "Tap a bubble to explore further",
        "bubbleBack": "Back",
        "libCatNest": "Cozy nest",
        "libCatPlay": "Play",
        "libCatLearn": "Learn & practice",
        "libCatMine": "My space",
        "libCatSocial": "Social",
        "libCatRecord": "Records",
        "libCatMore": "More",
        "libStudioHint": "Photos & studio",
        "libStatsHint": "Rank and win rate",
        "libSeasonHint": "Season progress and rewards",
        "libAchievementsHint": "Badges and milestones",
        "libAdminHint": "Admin console",
        "libSupervisorHint": "Puzzle editor",
        "libSchoolCenterLabel": "School Center",
        "libSchoolCenterMeta": "Videos / Question bank"
    },
    "theme": {
        "label": "Theme",
        "cyber": "Cyber Matrix (neon)",
        "ink": "Forest Grove (relaxed)"
    },
    "academy": {
        "appName": "EvoGO Academy",
        "tagline": "Review · Puzzles · Videos",
        "authWelcome": "Your board. Your coach. Your progress.",
        "student": "Student",
        "tabNav": "Main navigation",
        "tab_today": "Today",
        "tab_review": "Review",
        "tab_puzzles": "Puzzles",
        "tab_videos": "Videos",
        "settings": "Study settings",
        "greeting": "Good morning, {{name}}",
        "todayProgress": "Today",
        "mentorNudge": "Still to do today: {{items}} — you’ve got this!",
        "mentorAllDone": "All goals done for today. Great work!",
        "listSep": ", ",
        "remaining_reviews": "{{n}} review(s)",
        "remaining_puzzles": "{{n}} puzzle(s)",
        "remaining_videos": "{{n}} video lesson(s)",
        "taskReview": "Review",
        "taskReviewDesc": "Upload SGF · AI mentor replay",
        "taskPuzzles": "Puzzles",
        "taskPuzzlesDesc": "Daily practice drills",
        "taskVideos": "Videos",
        "taskVideosDesc": "Academy lessons",
        "noGoals": "Set your daily goals in Study settings.",
        "uploadSgf": "Upload SGF",
        "uploadSgfHint": "Upload an SGF/.txt file and add game info",
        "recentReviews": "Recent reviews",
        "noReviews": "No reviews yet — upload your first game.",
        "reviewReady": "View review",
        "reviewProcessing": "Analyzing",
        "reviewFailed": "Failed",
        "reviewUntitled": "Game review",
        "pickSgf": "Choose SGF file",
        "sgfFormats": ".sgf · .txt",
        "yourColor": "Your color",
        "colorBlack": "Black",
        "colorWhite": "White",
        "reviewPerspective": "Review perspective",
        "reviewPerspectiveUser": "My side",
        "reviewPerspectiveBoth": "Both sides",
        "yourName": "Your name",
        "opponentName": "Opponent",
        "reviewOpponentLabel": "vs. {{name}}",
        "gameResult": "Result",
        "eventName": "Event / game name",
        "note": "Note",
        "optional": "Optional",
        "uploadEta": "Analysis takes about 3–8 minutes. We’ll notify you when ready.",
        "submitReview": "Submit AI review",
        "reviewSubmitted": "Submitted — check Review tab for progress.",
        "needMentor": "Need GO to run AI review. Top up or upgrade to Pro.",
        "noFile": "Choose a file first.",
        "puzzleDaily": "Today {{done}}/{{target}} puzzles",
        "continuePuzzle": "Continue #{{n}}",
        "completionPct": "{{pct}}% complete",
        "noPuzzles": "No puzzles in this rank yet.",
        "videoDaily": "Today {{done}}/{{target}} lessons",
        "markVideoDone": "Mark lesson complete",
        "videoMarked": "Counted toward today’s goal",
        "dailyGoals": "Daily goals",
        "puzzlesPerDay": "Puzzles per day",
        "puzzleRanks": "Rank range",
        "puzzleCategories": "Categories",
        "videosPerDay": "Videos per day",
        "reviewsPerDay": "Reviews per day",
        "reminders": "Reminders",
        "remindAt": "Reminder time",
        "pushEnabled": "Push notifications",
        "mentorNudgeSetting": "Mentor nudges",
        "saveSettings": "Save settings",
        "settingsSaved": "Settings saved",
        "reminderPushTitle": "EvoGO Academy",
        "reminderPushBody": "Time for your daily Go practice!",
        "coachName": "Janice",
        "reviewSectionReady": "My games",
        "reviewSectionProcessing": "Analyzing",
        "reviewSectionFailed": "Needs attention",
        "reviewOpenAction": "View review",
        "reviewBlackName": "Black: {{name}}",
        "reviewWhiteName": "White: {{name}}",
        "reviewResultLabel": "Result: {{result}}",
        "reviewFilterLabel": "Game filter",
        "reviewFilterAll": "All games",
        "reviewFilterFavorites": "My favorites",
        "reviewFavoritesEmpty": "No favorite games yet.",
        "reviewFavorite": "Favorite",
        "reviewUnfavorite": "Remove favorite",
        "reviewEdit": "Edit info",
        "reviewDelete": "Delete",
        "reviewCancel": "Cancel",
        "reviewEditNamePrompt": "Game title",
        "reviewEditBlackPrompt": "Black player",
        "reviewEditWhitePrompt": "White player",
        "reviewEditResultPrompt": "Result (for example B+R / W+3.5)",
        "reviewEditGameDatePrompt": "Game date (for example 2026-07-20)",
        "reviewGameDateLabel": "Date: {{date}}",
        "reviewDeleteConfirm": "Delete \"{{name}}\"? This cannot be undone.",
        "reviewCancelConfirm": "Cancel this queued review? Cancels within 60 seconds refund this GO charge.",
        "mentorPageTitle": "AI coach",
        "mentorPageHint": "Upgrade to Academy Pro or buy GO to unlock AI review and coaching voice.",
        "mentorPageWhy": "What you get",
        "mentorPagePerkReview": "Upload SGF and get move-by-move AI review",
        "mentorPagePerkCoach": "Coach voice and tips during replay",
        "mentorPageCta": "Go to wallet",
        "iapRentDays": "Coach access · {{days}} days",
        "iapNativePending": "In-app purchase will open in the TestFlight build.",
        "webCheckoutUnavailable": "Web checkout is temporarily unavailable. Please try again later.",
        "iapSuccess": "Ready — {{name}} for {{days}} days!",
        "iap_receipt_verification_pending": "Purchase verification is not live yet.",
        "iap_unknown_product": "Unknown product.",
        "iap_missing_transaction": "Missing transaction id.",
        "iap_fulfill_failed": "Could not activate purchase.",
        "iap_missing_platform": "Missing store platform.",
        "iap_transaction_claimed": "This purchase was already used on another account.",
        "iap_apple_not_configured": "Apple receipt verification is not configured yet.",
        "iap_google_not_configured": "Google Play verification is not configured yet.",
        "reviewCostNotice": "Each AI review costs {{cost}} GO.",
        "reviewInsufficientGo": "Not enough GO for this review. Top up or go Pro.",
        "reviewGoFrozen": "Your GO is frozen. Reactivate Academy Pro to use it.",
        "goBalance": "{{n}} GO",
        "proBadge": "Pro",
        "freeBadge": "Free",
        "proActiveUntil": "Pro · until {{date}}",
        "goFrozenBadge": "GO frozen",
        "upgradePro": "Go Pro — $49/mo",
        "topUpGo": "Top up GO",
        "proPerkGrant": "5,000 GO credited every month (enough for ~8 AI reviews)",
        "proPerkIntro": "All intro videos free (20 lessons)",
        "proPerkPuzzles": "Full puzzle library unlocked",
        "proPerkReview": "AI game reviews still cost 600 GO each — use your monthly grant",
        "subscribeCta": "Subscribe Pro — $49/mo",
        "packBuy": "Buy {{go}} GO — ${{usd}}",
        "puzzleLockedTitle": "Pro puzzle",
        "puzzleLockedBody": "The first 20 of each set are free. Unlock the full library with Academy Pro.",
        "videoLangPick": "Audio language",
        "videoBuyLang": "Buy {{lang}} — {{go}} GO",
        "videoOwnedLang": "Owned",
        "videoIntroFreePro": "Free with Pro",
        "todayPlan": "Today's plan",
        "reviewReused": "Already reviewed — opening your existing lesson (no GO charged).",
        "reviewNeedGo": "Need GO to run AI review. Top up or upgrade to Pro.",
        "reviewTakeaways": "From your last review",
        "drillFromReview": "Practice {{category}} puzzles",
        "drillFromReviewShort": "Practice puzzles",
        "reviewMoreReady": "{{n}} older reviews are not fully listed here.",
        "walletStore": "Wallet & store",
        "walletRetry": "Retry",
        "pushAppShellHint": "In the native app, study reminders use the system notification channel once store push is live. On the web App, enable the button above.",
        "greetingMorning": "Good morning, {{name}}",
        "greetingAfternoon": "Good afternoon, {{name}}",
        "greetingEvening": "Good evening, {{name}}",
        "verifyEmailForWelcome": "Verify your email to unlock your {{n}} GO welcome gift.",
        "welcomeReady": "Almost there — finish your profile to receive {{n}} GO.",
        "welcomeReceived": "Welcome gift received: {{n}} GO is in your wallet.",
        "completeProfileCta": "Complete profile",
        "puzzleListMore": "Showing {{shown}} of {{total}} — Pro unlocks the full set.",
        "puzzleFreeLimit": "Free plan: first {{n}} puzzles per rank × category.",
        "offlinePackRefresh": "Refresh pack",
        "offlinePackSyncing": "Downloading flight pack (up to {{n}})…",
        "firstRunTitle": "Preparing Academy",
        "firstRunHint": "First launch caches the app and your current puzzle pack so tabs open instantly. The whole puzzle library stays online-only for safety.",
        "firstRunAssets": "Caching app resources…",
        "firstRunShells": "Caching Academy screens…",
        "firstRunTabs": "Warming Today / Review / Puzzles / Videos…",
        "firstRunPack": "Downloading current puzzle pack…",
        "firstRunPackHint": "One category pack only (not the whole library), sealed on device.",
        "firstRunDone": "Ready",
        "firstRunRetry": "Retry",
        "firstRunError": "Download incomplete. Check your connection and retry.",
        "pressBackAgainToExit": "Press back again to exit",
        "offlinePackReady": "Flight pack ready: {{n}} puzzles ({{rank}} · {{category}}). Airplane mode OK.",
        "offlinePackEmpty": "No flight pack yet. Open a puzzle category online to cache up to {{n}} puzzles.",
        "offlinePackWrongGroup": "Cached pack is {{rank}} · {{category}} ({{n}}). Open that group, or go online to refresh.",
        "offlinePackDownloaded": "Cached {{n}} puzzles for offline.",
        "offlinePackLimitHint": "Flight limit: one category pack, up to {{n}} puzzles (Pro gets a larger pack). Switching category online replaces the pack. Packs are sealed on device; whole-library offline is not offered. Solves sync when you reconnect.",
        "offlineMegaSyncing": "Wyns mega-pack 1D–7D: {{done}} / {{total}}…",
        "offlineMegaReady": "Wyns mega-pack ready: {{n}} puzzles (1D–7D). Airplane mode OK.",
        "offlineMegaFailed": "Mega-pack sync failed — will retry when online.",
        "offlineMegaEnter": "Enable offline pack",
        "offlineMegaEnterToast": "Offline browser open — pick 1D–7D.",
        "offlineMegaBrowseHint": "Offline practice: 1D–7D only (cached). Tap a dan rank, or Enable offline pack.",
        "offlineMegaKyuBlocked": "Boarding pack is 1D–7D only. Scroll to dan ranks or tap Enable offline pack.",
        "offlineMegaRankCached": "{{n}} cached",
        "offlineFlightEnter": "Enter offline pack",
        "offlineFlightEnterToast": "Offline pack open — only cached puzzles.",
        "offlineFlightPackHeading": "Offline: {{n}} puzzles ({{rank}} · {{category}})",
        "offlineOnlyCached": "Airplane mode: only puzzles in your flight pack are playable. Open that group online first, or tap Enter offline pack.",
        "accountSection": "Account",
        "myProfile": "My profile",
        "logout": "Log out",
        "restorePurchases": "Restore purchases",
        "restoreNone": "No purchases to restore.",
        "restoreOk": "Purchases restored.",
        "restoreWebHint": "Restore App Store / Play purchases in the iOS or Android app.",
        "videoComingSoonMeta": "{{count}} lessons · {{unit}} GO each · full level {{pack}} GO ({{discount}}% off)",
        "bundleHint": "Pick any 10 ready lessons in this level for 20% off.",
        "bundleStartPick": "Pick 10 — 20% off",
        "bundleCancelPick": "Cancel pick",
        "bundleSelected": "{{n}}/{{need}} selected",
        "bundleBuy": "Buy {{n}} lessons — {{go}} GO",
        "bundleNeedTen": "Select {{n}} lessons",
        "bundleAlreadyOwned": "One or more selected lessons are already owned. Pick different ones.",
        "reviewArchiveOpen": "Browse {{n}} older reviews",
        "reviewArchiveMore": "Load more",
        "legalNav": "Legal",
        "profileIncompleteForWelcome": "Finish your profile details to unlock your {{n}} GO welcome gift.",
        "claimWelcomeCta": "Claim welcome GO",
        "webPayHint": "Web checkout is available here — buy GO or go Pro without any app.",
        "videoMarkAutoHint": "Watch most of the lesson (or tap) to count it toward today’s goal.",
        "uploadAgain": "Upload again",
        "welcomeChecklistTitle": "Get started",
        "welcomeChecklistProgress": "Step {{current}} of {{total}}",
        "welcomeChecklistShowAll": "Show all steps",
        "welcomeStepVerify": "Verify your email",
        "welcomeStepProfile": "Complete your profile",
        "welcomeStepClaim": "Claim {{n}} GO welcome gift",
        "welcomeStepPuzzle": "Start your first puzzle",
        "doFirstPuzzle": "Do puzzle #{{n}}",
        "iap_apple_missing_receipt": "Purchase receipt was missing. Tap Restore purchases, or buy again after updating the app.",
        "navPlacing": "Placing…",
        "proPitchTitle": "Academy Pro",
        "proPitchLead": "Unlock the full study path — puzzles, intro lessons, and a monthly GO grant for AI reviews.",
        "proPerkValue": "Better value than buying GO packs alone",
        "subscribeNote": "Get 5,000 GO right away. On web, each purchase extends your Pro end date. In the App, Apple manages renewals.",
        "extendProCta": "Extend Pro — add 1 month",
        "extendProNote": "Already Pro? Another web purchase stacks from your current end date. App Store renewals stay in Apple subscriptions.",
        "settingsNeedRanks": "Pick at least one puzzle rank.",
        "settingsNeedCategories": "Pick at least one puzzle category.",
        "welcomeClaimReady": "You are eligible — claim your {{n}} GO welcome gift.",
        "paymentConfirming": "Confirming payment…",
        "paymentConfirmed": "Payment confirmed — refreshing wallet…",
        "paymentFailed": "Payment could not be confirmed. Try again or contact support.",
        "stepperDecrease": "Decrease",
        "stepperIncrease": "Increase",
        "breadcrumb": "Puzzle navigation",
        "iap_apple_transaction_mismatch": "Purchase receipt did not match this transaction. Tap Restore purchases.",
        "reviewProcessingWait": "In queue — analysis will start shortly."
    }
}
