{
  "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": "Parallel World",
    "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": "Lounge"
  },
  "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 36 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."
  },
  "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.",
    "emailWarning": "Email not verified. Ranked and bounty modes are locked until you verify your inbox.",
    "loungeTitle": "Parallel World",
    "loungeDesc": "Casual lounge with friends. Mini-games, chat, spend tokens for extra stamina.",
    "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": "Activate a mentor for parallel-world quests.",
    "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.",
    "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",
    "myRoomDescShort": "Personal space & mentor",
    "storeDescShort": "Mentor rentals & VIP",
    "loungeDescShort": "Casual mini-games",
    "gamesDescShort": "Match library & records",
    "guildDescShort": "Teams & guild play",
    "questsTitleEdu": "Today's tasks",
    "activityTitleEdu": "Updates",
    "myRoomTitleEdu": "My Room",
    "storeTitleEdu": "Store",
    "loungeTitleEdu": "Lounge"
  },
  "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",
    "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",
      "system": "System error",
      "googleFail": "Google authorization failed",
      "facebookFail": "Facebook authorization failed",
      "registerFail": "Registration failed: username or email may be taken",
      "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"
    },
    "success": {
      "registered": "Profile created. Check your email to verify your account.",
      "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."
    }
  },
  "store": {
    "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, 36 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": "Stripe and CommercePay will activate once merchant accounts are registered.",
    "legalNotice": "By purchasing you agree to our",
    "usdPrice": "≈ ${{usd}} USD",
    "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."
  },
  "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 · 36 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."
    }
  },
  "dojo": {
    "title": "Training Dojo",
    "privateRoom": "Private Dojo",
    "import": "Import",
    "replay": "Replay",
    "teaching": "Teaching Game",
    "purified": "⛩️ Dojo Ready",
    "purifiedHint": "Choose an action above to begin training.",
    "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",
    "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 are {{color}}. Starting move-by-move review.",
    "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 analyzing the full game and building A/B/C lines for key moves (up to 3 games at once). We'll notify you when ready.",
    "reviewJobStillReading": "Still analyzing the full game and key variations — open again from notifications when ready.",
    "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}})",
    "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": "Analysis timed out — tap Retry when the engine is back.",
    "reviewFailureOffline": "KataGo was offline or unreachable — try again in a moment.",
    "reviewFailureUnknown": "Analysis failed — you can retry or delete this record.",
    "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": "Key moves only",
    "replayAllMoves": "All marked moves",
    "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",
    "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": "Winrates are ready — building A/B/C variation lines for key moves…",
    "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": "Evaluating...",
    "tryAgain": "🤔 Try again",
    "evalComplete": "Evaluation complete.",
    "reviewResuming": "Resuming review...",
    "colorBlack": "Black",
    "colorWhite": "White",
    "vsLine": "⚫ {{black}} vs ⚪ {{white}}",
    "reviewJobReadyToast": "Review ready: {{label}}"
  },
  "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.",
    "prev": "Previous",
    "next": "Next",
    "navKeys": "← → to switch",
    "progress": "{{solved}} / {{total}} solved",
    "voiceMute": "Mute mentor voice",
    "voiceUnmuted": "Unmute mentor voice",
    "voiceMuted": "Mentor voice muted",
    "nextPuzzleBtn": "Next puzzle →",
    "bondGain": "Bond with {{mentor}} +{{n}}"
  },
  "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",
    "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",
    "catKeyOpening": "布局",
    "catKeyJoseki": "定式",
    "catKeyLifeDeath": "死活",
    "catKeyMiddle": "中盘",
    "catKeyEndgame": "官子",
    "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}}",
    "lastPlayed": "Last played",
    "offlineMode": "Offline — showing cached puzzles from your last sync.",
    "offlinePuzzleHint": "Playing cached puzzle (offline)."
  },
  "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"
  },
  "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": "✦ EvoGo Admin",
    "subtitle": "Highest clearance confirmed",
    "backHub": "← Return to Matrix Hub",
    "heading": "God Mode Console",
    "tabUsers": "👥 Player management",
    "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",
    "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 & reports",
    "tabPayments": "💳 Pending orders",
    "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",
    "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",
    "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?",
    "alertNoMoves": "No moves to save!",
    "alertBranchSaved": "✅ Branch {{n}} added to the tree!\nBoard reset — record opponent responses.",
    "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": "Parallel World",
    "subtitle": "Entertainment lounge",
    "heroDesc": "Play as yourself — your mentor accompanies you. Social mini-games, separate from ranked Go.",
    "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",
    "pickTitle": "Choose a zone",
    "pickHint": "Main campaign or casual mini-games — pick where you want to play.",
    "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"
  },
  "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": "Parallel World — casual games with lounge stamina",
    "stepAlbum": "Album — rent mentors for perks",
    "visitArena": "Visit Arena",
    "visitLounge": "Visit Lounge",
    "done": "Enter Matrix Hub",
    "noMentorHub": "Rent a mentor to unlock Dojo reviews, bond growth, and parallel-world quests.",
    "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."
  },
  "kycProgress": {
    "submit": "Submit documents",
    "review": "Under review",
    "approved": "Approved",
    "rejected": "Rejected — resubmit below"
  },
  "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": "Lounge squad",
    "coopLoungeDesc": "10 lounge mini-game plays.",
    "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": "Lounge Regular",
      "desc": "Play 20 lounge mini-games."
    },
    "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):",
    "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"
  },
  "theme": {
    "label": "Theme",
    "cyber": "Cyber Matrix (neon)",
    "ink": "Forest Grove (relaxed)"
  }
}
