// Pet MBTI — internationalization. Loaded FIRST (before pm-data + the UI files),
// because pm-data builds PM_TYPES/PM_QUESTIONS/etc. from PM_TXT and the screens
// read UI copy from PM_STR.
//
// SEO model: each language is its own static shell tree — English at the root,
// Chinese under /zh/ (see build/generate.mjs). PM_LANG/PM_PREFIX are derived from
// the URL path once at load; switching language is a *hard navigation* to the
// mirrored page in the other tree (pmLangHref), so the localized <head> loads.
// The share token (pm-data.jsx) stays language-independent, so a link opens to
// the same result on either tree.

// Registry of every language tree. `en` is the root (empty prefix); each other
// language lives under /<prefix>/. Everything downstream — the PM_LANG/PM_PREFIX
// derivation, pmLangHref, the NavBar switcher, and the generator's hreflang tables
// — is driven off this one list, so adding a language is a single-line change here
// plus its _TXT/_STR blocks below (and the SHELL/L tables in build/generate.mjs).
const PM_LANGS = [
  { code: 'en', prefix: '',    label: 'English', hrefLang: 'en',      ogLocale: 'en_US' },
  { code: 'zh', prefix: '/zh', label: '中文',     hrefLang: 'zh-Hans', ogLocale: 'zh_CN' },
  { code: 'ja', prefix: '/ja', label: '日本語',   hrefLang: 'ja',      ogLocale: 'ja_JP' },
  { code: 'ko', prefix: '/ko', label: '한국어',    hrefLang: 'ko',      ogLocale: 'ko_KR' },
];

// Matches any non-root language prefix at the start of the path (e.g. /zh, /ja, /ko).
const _PM_PREFIX_RE = new RegExp('^(' + PM_LANGS.map((l) => l.prefix).filter(Boolean).join('|') + ')(?=/|$)');

const PM_PREFIX = (typeof location !== 'undefined' && (location.pathname.match(_PM_PREFIX_RE) || [''])[0]) || '';
const PM_LANG = (PM_LANGS.find((l) => l.prefix === PM_PREFIX) || PM_LANGS[0]).code;

// Root-absolute href to the current page mirrored into `lang`'s tree (keeps the
// share token / ?view=types in the query). Root-absolute → immune to <base href>.
function pmLangHref(lang) {
  const target = PM_LANGS.find((l) => l.code === lang) || PM_LANGS[0];
  if (typeof location === 'undefined') return (target.prefix || '') + '/';
  const bare = (location.pathname || '/').replace(_PM_PREFIX_RE, '') || '/';
  let out = (target.prefix || '') + bare;
  if (out === '') out = '/';
  return out + (location.search || '');
}

// ── Localized content (feeds pm-data.jsx) ──────────────────────────────────────
const _TXT = {
  en: {
    axes: {
      EI: { a: 'Outgoing',    b: 'Reserved',    label: 'Company' },
      SN: { a: 'Grounded',    b: 'Dreamy',      label: 'Outlook' },
      TF: { a: 'Cool-headed', b: 'Tender',      label: 'Heart'   },
      JP: { a: 'Planner',     b: 'Free spirit', label: 'Rhythm'  },
    },
    groups: {
      analyst:  { name: 'The Thinkers',    role: 'Analysts'   },
      diplomat: { name: 'The Softhearts',  role: 'Diplomats'  },
      sentinel: { name: 'The Keepers',     role: 'Sentinels'  },
      explorer: { name: 'The Adventurers', role: 'Explorers'  },
    },
    questions: {
      q1:  'My pet races to the door to greet every single visitor.',
      q2:  'My pet is happiest with a familiar routine and their same old favorite toys.',
      q3:  'My pet can tell the moment I’m sad and comes over to comfort me.',
      q4:  'My pet expects meals and walks at the exact same time every day.',
      q5:  'My pet would rather watch the room quietly from a cozy corner than be in the middle of it.',
      q6:  'My pet chases and pounces at things that only they can see.',
      q7:  'My pet stays cool and unbothered even when the house gets chaotic.',
      q8:  'My pet is up for anything at any moment — no plan required.',
      q9:  'My pet makes a new friend out of every person and pet they meet.',
      q10: 'My pet invents strange little games that nobody ever taught them.',
      q11: 'My pet forgives instantly and never seems to hold a grudge.',
      q12: 'My pet has a tidy routine and a special spot for absolutely everything.',
    },
    types: {
      INTP: { nick: 'The Ponderer', species: 'Owl', tagline: 'Give me a box and a big question.',
        blurb: 'Curious, unbothered, and always three thoughts deep into something you’ll never fully understand.',
        long: 'Your pet is a tiny philosopher in fur. They’d rather figure out how the latch works than be told, and they treat every quiet afternoon as a chance to ponder the mysteries of the treat cupboard. Independent, clever, and endlessly curious.',
        loves: ['Puzzle feeders', 'Quiet corners', 'Watching you cook'] },
      INTJ: { nick: 'The Mastermind', species: 'Cat', tagline: 'I already planned my nap. And yours.',
        blurb: 'Quietly runs the entire household from a single, very strategically chosen cushion.',
        long: 'Calm, deliberate, and always two steps ahead. Your pet observes everything, wastes no energy, and has strong opinions about how the day should go. They don’t ask twice — they simply expect the plan to happen.',
        loves: ['A high vantage point', 'A predictable schedule', 'Being right'] },
      ENTP: { nick: 'The Trickster', species: 'Monkey', tagline: 'Rules are just games I haven’t broken yet.',
        blurb: 'A clever little chaos gremlin who negotiates every single boundary you set.',
        long: 'Endlessly inventive and impossible to out-smart, your pet treats every closed door as a personal challenge. They’re playful, quick, and delighted by their own cleverness — and they will absolutely open that cupboard.',
        loves: ['New tricks', 'Outsmarting the latch', 'An audience'] },
      ENTJ: { nick: 'The Boss', species: 'Eagle', tagline: 'This house runs on my schedule.',
        blurb: 'Confident, decisive, and absolutely certain that dinner should be served now.',
        long: 'A natural leader with places to be and things to supervise. Your pet is bold, direct, and utterly sure of themselves. Give them a job and a routine and they’ll run the whole household like a tight little operation.',
        loves: ['Being in charge', 'Punctual dinners', 'A good vantage point'] },
      INFJ: { nick: 'The Old Soul', species: 'Deer', tagline: 'I feel your mood before you do.',
        blurb: 'Gentle, intuitive, and somehow always there right when you need them most.',
        long: 'Quiet and deeply feeling, your pet seems to understand things they were never taught. They bond closely with their favorite person and carry a calm, knowing softness wherever they go.',
        loves: ['Long gazes out the window', 'Their one favorite person', 'Gentle mornings'] },
      INFP: { nick: 'The Daydreamer', species: 'Rabbit', tagline: 'I’m mostly here. Mostly.',
        blurb: 'A soft, sensitive dreamer who loves deeply and stares wistfully out of windows.',
        long: 'Tender, gentle, and a little bit magic. Your pet has a rich inner world and a heart the size of the yard. They love quietly but completely, and they’ll always find the softest, sunniest spot to dream in.',
        loves: ['Sunbeams', 'Flowers to sniff', 'Being spoken to softly'] },
      ENFP: { nick: 'The Sunbeam', species: 'Dolphin', tagline: 'Best. Day. Ever. Again!',
        blurb: 'Boundless joy on four legs — every single moment is somehow the best one yet.',
        long: 'Pure, bouncing enthusiasm. Your pet greets each day like a festival and each person like a long-lost best friend. Warm, playful, and gloriously easy to delight — life is simply more fun with them in it.',
        loves: ['New friends', 'Splashing about', 'Absolutely everything'] },
      ENFJ: { nick: 'The Cheerleader', species: 'Elephant', tagline: 'Everyone deserves a snack and a hug.',
        blurb: 'Warm, social, and personally invested in making sure everyone in the room is happy.',
        long: 'A big-hearted host who looks after the whole family. Your pet notices who’s left out, checks on everyone, and gives love generously. Loyal and gentle, they hold the group together with quiet devotion.',
        loves: ['Group cuddles', 'Looking after the little ones', 'Company'] },
      ISTJ: { nick: 'The Guardian', species: 'Hamster', tagline: 'Dinner is at six. I keep the records.',
        blurb: 'Steady and dependable, thrives on routine and a very well-kept schedule.',
        long: 'Reliable to the core. Your pet likes their world orderly and their days predictable, and they take their little duties seriously. Not flashy — just steady, loyal, and always exactly where they said they’d be.',
        loves: ['A fixed routine', 'Their own bed', 'A job to do'] },
      ISFJ: { nick: 'The Nurturer', species: 'Cat', tagline: 'I saved you the warm spot.',
        blurb: 'Devoted and cozy, quietly taking care of everyone they love without a fuss.',
        long: 'Gentle, attentive, and endlessly caring. Your pet remembers what everyone likes and shows love in small, thoughtful ways. Home is their whole world, and they make it warmer just by being in it.',
        loves: ['Baking-warm kitchens', 'Keeping you company', 'Soft blankets'] },
      ESTJ: { nick: 'The Captain', species: 'Dog', tagline: 'Follow me — I know where the treats are.',
        blurb: 'Organized and take-charge, leads every walk like a well-run group expedition.',
        long: 'Confident, dependable, and always ready to take the lead. Your pet likes clear rules and clear roles, and they’ll happily herd the whole family toward dinner. Loyal, hard-working, and proud of a job done right.',
        loves: ['Leading the walk', 'Clear rules', 'A well-earned treat'] },
      ESFJ: { nick: 'The Host', species: 'Bear', tagline: 'You came! Sit, sit — make yourself at home.',
        blurb: 'A social butterfly who greets your guests like long-lost family members.',
        long: 'Warm, welcoming, and happiest in a full house. Your pet loves a gathering, remembers every visitor, and makes sure nobody feels like a stranger. Generous and affectionate — the beating heart of any get-together.',
        loves: ['Parties', 'Greeting guests', 'Sharing snacks'] },
      ISTP: { nick: 'The Tinkerer', species: 'Fox', tagline: 'I’ll figure out how this opens.',
        blurb: 'Cool, hands-on, and quietly fascinated by exactly how everything works.',
        long: 'Calm under pressure and clever with their paws. Your pet loves a good problem — a stuck door, a new toy, a mysterious noise — and will work at it, unhurried, until it gives. Independent and quietly capable.',
        loves: ['Taking things apart', 'New gadgets', 'Figuring it out alone'] },
      ISFP: { nick: 'The Free Spirit', species: 'Squirrel', tagline: 'Wherever the sun is, that’s where I’ll be.',
        blurb: 'Easygoing and sweet, they follow simple joys and warm sunbeams everywhere.',
        long: 'Gentle, artistic, and happily unbothered by schedules. Your pet lives in the moment and finds beauty in small things — a good smell, a soft blanket, a patch of sun. Quietly affectionate and free as can be.',
        loves: ['Sunny naps', 'Collecting little treasures', 'Pretty things'] },
      ESTP: { nick: 'The Daredevil', species: 'Leopard', tagline: 'Bet I can reach that shelf.',
        blurb: 'Bold and playful, they never met a couch they couldn’t leap right off of.',
        long: 'Fearless, fast, and full of beans. Your pet lives for action and treats gravity as a suggestion. Endlessly entertaining and always mid-adventure — blink and they’re already on top of the fridge.',
        loves: ['Big leaps', 'Fast games', 'A brand-new challenge'] },
      ESFP: { nick: 'The Entertainer', species: 'Parrot', tagline: 'Is everybody watching? Good.',
        blurb: 'Lives for attention and delight — a total showstopper right down to their last tail feather.',
        long: 'A born performer who lights up the second all eyes are on them. Your pet is spontaneous, affectionate, and joyfully dramatic. Every day is a show, and they are, of course, the star.',
        loves: ['An audience', 'Music and movement', 'Being the center of it all'] },
    },
    matchWhy: {
      INTP: 'The Boss brings the plan, the Ponderer brings the big ideas — together they run a surprisingly tight little ship.',
      INTJ: 'The Sunbeam melts the Mastermind’s cool exterior, and the Mastermind gives the Sunbeam a plan to bounce off.',
      ENTP: 'The Old Soul quietly grounds the Trickster’s endless schemes — and secretly finds every one of them delightful.',
      ENTJ: 'A calm thinker for a bold leader: the Ponderer keeps the Boss curious, the Boss keeps the Ponderer moving.',
      INFJ: 'Two big hearts, one loud and one quiet — the Sunbeam gently draws the Old Soul out into the sunshine.',
      INFP: 'The Cheerleader champions every one of the Daydreamer’s tender ideas and makes sure they never feel alone.',
      ENFP: 'The Old Soul understands the Sunbeam on a deeper level — endless play met with endless understanding.',
      ENFJ: 'The Daydreamer gives the Cheerleader someone gentle and dreamy to pour all of that big love into.',
      ISTJ: 'The Entertainer loosens up the Guardian, and the Guardian keeps the Entertainer’s whole show on the road.',
      ISFJ: 'One cares quietly and one dazzles loudly — and each absolutely adores exactly what the other does best.',
      ESTJ: 'The Free Spirit softens the Captain’s edges; the Captain gives the Free Spirit a cozy structure to roam within.',
      ESFJ: 'The Host loves to fuss and the Free Spirit loves to be fussed over — a perfectly matched little cuddle pile.',
      ISTP: 'The Host coaxes the Tinkerer out of their workshop and into the party — just for a little while.',
      ISFP: 'The Cheerleader sees the Free Spirit’s quiet magic and celebrates every single bit of it, loudly.',
      ESTP: 'The Nurturer is the warm, calm home base the Daredevil always comes bounding happily back to.',
      ESFP: 'The Nurturer keeps the Entertainer grounded and fed; the Entertainer keeps life fun and full of surprises.',
    },
  },

  zh: {
    axes: {
      EI: { a: '外向',   b: '内敛',   label: '社交' },
      SN: { a: '踏实',   b: '爱幻想', label: '视角' },
      TF: { a: '理性',   b: '温柔',   label: '内心' },
      JP: { a: '计划派', b: '随性派', label: '节奏' },
    },
    groups: {
      analyst:  { name: '思考家', role: '分析家' },
      diplomat: { name: '软心肠', role: '外交家' },
      sentinel: { name: '守护者', role: '守卫者' },
      explorer: { name: '冒险家', role: '探险家' },
    },
    questions: {
      q1:  '每来一位客人，我的宠物都会冲到门口迎接。',
      q2:  '我的宠物最喜欢熟悉的日常和那些用旧了的心爱玩具。',
      q3:  '我一难过，我的宠物立刻就能察觉，并过来安慰我。',
      q4:  '我的宠物希望每天都在同一时间吃饭、散步。',
      q5:  '比起待在热闹中心，我的宠物更愿意在舒适的角落里安静地观察。',
      q6:  '我的宠物会追逐、扑向一些只有它自己才看得见的东西。',
      q7:  '即使家里乱成一团，我的宠物依然淡定从容。',
      q8:  '我的宠物随时都乐意来一场说走就走的冒险，完全不用计划。',
      q9:  '我的宠物遇到的每个人和每只动物，都能变成新朋友。',
      q10: '我的宠物会自创一些没人教过的奇怪小游戏。',
      q11: '我的宠物立刻就会原谅，从不记仇。',
      q12: '我的宠物作息规律，每样东西都有它固定的专属位置。',
    },
    types: {
      INTP: { nick: '沉思者', species: '猫头鹰', tagline: '给我一个纸箱和一个大问题就够了。',
        blurb: '好奇、淡定，总是沉浸在你永远搞不懂的思绪深处。',
        long: '你的宠物是一位披着皮毛的小小哲学家。比起听你指挥，它更想自己琢磨门闩是怎么开的；每个安静的午后，都是它思索零食柜奥秘的好时光。独立、聪明，好奇心永无止境。',
        loves: ['益智漏食器', '安静的角落', '看你做饭'] },
      INTJ: { nick: '谋略家', species: '猫', tagline: '我的午觉早就安排好了，连你的也是。',
        blurb: '在一个精心挑选的坐垫上，悄悄掌控着整个家。',
        long: '沉着、深思熟虑，永远快人两步。你的宠物观察一切、绝不浪费力气，对每天该怎么过都有自己坚定的主张。它从不多问——只是默默期待计划照它的意思进行。',
        loves: ['居高临下的位置', '可预测的作息', '事事都对'] },
      ENTP: { nick: '机灵鬼', species: '猴子', tagline: '规矩不过是我还没破解的游戏。',
        blurb: '一个聪明的小捣蛋鬼，你定的每一条界线，它都要来讨价还价。',
        long: '创意无穷，没人斗得过它的小机灵。你的宠物把每一扇关上的门都当成个人挑战——它爱玩、机敏，为自己的聪明沾沾自喜，而且它绝对会把那个柜子打开。',
        loves: ['学新把戏', '智取门闩', '有观众捧场'] },
      ENTJ: { nick: '大老板', species: '老鹰', tagline: '这个家，按我的时间表运转。',
        blurb: '自信、果断，并且坚信晚饭现在就该开饭。',
        long: '天生的领导者，总有地方要去、有事情要监督。你的宠物大胆、直接，对自己充满把握。给它一份工作和一套规律，它会把整个家管得像个高效运转的小团队。',
        loves: ['当家做主', '准点的晚餐', '绝佳的瞭望位'] },
      INFJ: { nick: '老灵魂', species: '鹿', tagline: '你还没察觉，我就先懂了你的心情。',
        blurb: '温柔、敏锐，总在你最需要的时候恰好出现在身边。',
        long: '安静而情感深沉，你的宠物似乎懂得许多从没人教过的道理。它与最爱的人紧紧相依，无论走到哪里，都带着一份平静而通透的柔软。',
        loves: ['久久望向窗外', '唯一最爱的人', '温柔的清晨'] },
      INFP: { nick: '梦想家', species: '兔子', tagline: '我基本上在这儿……基本上。',
        blurb: '柔软、敏感的梦想家，爱得深沉，常常出神地望着窗外。',
        long: '温柔、细腻，还带着一点点魔力。你的宠物有着丰富的内心世界，和满院子那么大的一颗心。它爱得安静却彻底，总能找到最柔软、最向阳的角落做梦。',
        loves: ['一缕阳光', '可以嗅闻的花', '被轻声细语'] },
      ENFP: { nick: '小太阳', species: '海豚', tagline: '今天！又是！最棒的一天！',
        blurb: '四条腿装着无穷的快乐——每一刻不知怎地都是至今最棒的一刻。',
        long: '纯粹、蹦蹦跳跳的热情。你的宠物把每一天都当成节日，把每个人都当成久别重逢的挚友。温暖、爱玩，特别容易被逗乐——有它在，生活就是更有趣。',
        loves: ['结交新朋友', '戏水玩闹', '几乎所有事'] },
      ENFJ: { nick: '暖心大使', species: '大象', tagline: '每个人都该有一份零食和一个拥抱。',
        blurb: '温暖、爱社交，一心要让屋里的每个人都开开心心。',
        long: '一位心怀宽广的主人翁，照看着全家。你的宠物会留意谁被冷落，挨个关心每个人，慷慨地付出爱。忠诚而温柔，用默默的深情把整个团队凝聚在一起。',
        loves: ['集体抱抱', '照顾小家伙们', '有人相伴'] },
      ISTJ: { nick: '守护者', species: '仓鼠', tagline: '晚饭六点开。账本我来记。',
        blurb: '稳重可靠，在规律和井井有条的作息里如鱼得水。',
        long: '可靠到骨子里。你的宠物喜欢世界井然有序、日子按部就班，并认真对待自己的每一份小职责。它不张扬——只是稳当、忠诚，永远待在它说过会在的地方。',
        loves: ['固定的作息', '自己的小床', '有活儿要干'] },
      ISFJ: { nick: '呵护者', species: '猫', tagline: '我给你留了那个暖和的位置。',
        blurb: '专情又暖心，默默照顾着每一个所爱之人，从不声张。',
        long: '温柔、体贴，关怀无尽。你的宠物记得每个人喜欢什么，用一件件小小的、贴心的举动表达爱。家就是它的整个世界，只要它在，家就更温暖几分。',
        loves: ['烘焙般温暖的厨房', '陪在你身边', '柔软的毯子'] },
      ESTJ: { nick: '队长', species: '狗狗', tagline: '跟我走——我知道零食在哪儿。',
        blurb: '有条理、能扛事，把每次散步都带成一场井然有序的团队远征。',
        long: '自信、可靠，随时准备挑起大梁。你的宠物喜欢清晰的规则和明确的分工，会乐呵呵地把全家赶向饭桌。忠诚、勤恳，为把事情做好而自豪。',
        loves: ['带队散步', '清晰的规则', '应得的奖励零食'] },
      ESFJ: { nick: '热情主人', species: '熊', tagline: '你来啦！快坐快坐——别客气，当自己家。',
        blurb: '社交小达人，把你的客人都当成久别重逢的家人来迎接。',
        long: '热情、好客，家里越热闹它越开心。你的宠物爱聚会，记得每一位来客，绝不让任何人觉得自己是外人。慷慨又亲昵——是每场相聚里跳动的心脏。',
        loves: ['聚会', '迎接客人', '分享零食'] },
      ISTP: { nick: '捣鼓家', species: '狐狸', tagline: '这玩意儿怎么打开，我来研究研究。',
        blurb: '酷酷的、爱动手，默默地对万物的运作原理着迷。',
        long: '临危不乱，一双爪子灵巧得很。你的宠物就爱一个好难题——一扇卡住的门、一个新玩具、一声神秘的响动——它会不慌不忙地钻研，直到把它搞定。独立，又悄悄地很能干。',
        loves: ['把东西拆开', '新奇小玩意', '独自琢磨明白'] },
      ISFP: { nick: '逍遥客', species: '松鼠', tagline: '阳光在哪儿，我就在哪儿。',
        blurb: '随和又甜美，追着简单的快乐和温暖的阳光四处走。',
        long: '温柔、有点艺术气质，乐得不被作息束缚。你的宠物活在当下，在小事里发现美——一缕好闻的气味、一条柔软的毯子、一片阳光。安静地亲昵，自在得不能再自在。',
        loves: ['晒太阳打盹', '收集小宝贝', '漂亮的东西'] },
      ESTP: { nick: '冒险家', species: '豹', tagline: '我打赌我能够到那层架子。',
        blurb: '大胆又爱玩，就没有它跳不下去的沙发。',
        long: '无所畏惧、身手敏捷、精力爆棚。你的宠物为行动而生，把地心引力当成一句建议而已。它趣味无穷，永远在冒险的半路上——一眨眼，它已经蹲在冰箱顶上了。',
        loves: ['纵身一跃', '快节奏游戏', '全新的挑战'] },
      ESFP: { nick: '表演家', species: '鹦鹉', tagline: '大家都在看吗？很好。',
        blurb: '为关注和欢乐而活——从头到最后一根尾羽，都是全场焦点。',
        long: '天生的表演者，全场目光聚焦的那一刻它就闪闪发光。你的宠物随性、亲昵，还带着欢快的戏剧感。每一天都是一场演出，而它当然，就是那位主角。',
        loves: ['有观众', '音乐与舞动', '成为全场中心'] },
    },
    matchWhy: {
      INTP: '大老板带来计划，沉思者带来奇思妙想——两个凑一块儿，居然把小日子过得井井有条。',
      INTJ: '小太阳融化了谋略家冷冷的外壳，而谋略家给了小太阳一个可以尽情蹦跶的计划。',
      ENTP: '老灵魂悄悄稳住了机灵鬼那些没完没了的鬼点子——其实心里对每一个都乐在其中。',
      ENTJ: '沉稳的思考者配上大胆的领袖：沉思者让大老板保持好奇，大老板让沉思者动起来。',
      INFJ: '两颗宽厚的心，一个热闹、一个安静——小太阳温柔地把老灵魂拉到阳光下。',
      INFP: '暖心大使为梦想家每一个柔软的念头喝彩，让它从不觉得孤单。',
      ENFP: '老灵魂在更深的层面懂得小太阳——无尽的玩闹，遇上无尽的理解。',
      ENFJ: '梦想家给了暖心大使一个温柔又爱幻想的对象，好把满腔的爱尽情倾注。',
      ISTJ: '表演家让守护者放松下来，守护者则让表演家的整场演出顺顺当当地进行。',
      ISFJ: '一个默默付出，一个闪耀全场——彼此都无比欣赏对方最擅长的那一面。',
      ESTJ: '逍遥客磨平了队长的棱角；队长给了逍遥客一个可以自在漫游的温馨框架。',
      ESFJ: '热情主人爱操心张罗，逍遥客爱被人娇宠——正好凑成一堆完美的小抱团。',
      ISTP: '热情主人把捣鼓家从工作间里哄出来，加入派对——哪怕就那么一小会儿也好。',
      ISFP: '暖心大使看见了逍遥客那份安静的魔力，并大声为它的每一分而喝彩。',
      ESTP: '呵护者是那个温暖平静的大本营，冒险家总会欢快地一路蹦跶着回到这里。',
      ESFP: '呵护者让表演家吃饱、踏实；表演家让日子充满乐趣和惊喜。',
    },
  },

  ja: {
    axes: {
      EI: { a: '社交的', b: 'ひとり好き', label: '社交' },
      SN: { a: '現実派', b: '夢見がち',   label: '視点' },
      TF: { a: 'クール', b: 'やさしい',   label: 'こころ' },
      JP: { a: '計画派', b: '自由派',     label: 'リズム' },
    },
    groups: {
      analyst:  { name: 'かしこ組',   role: '分析家' },
      diplomat: { name: 'やさしさ組', role: '外交官' },
      sentinel: { name: 'しっかり組', role: '番人' },
      explorer: { name: 'やんちゃ組', role: '探検家' },
    },
    questions: {
      q1:  'うちの子は、来客のたびに玄関までダッシュでお出迎えする。',
      q2:  'うちの子は、いつもの日課と使い慣れたお気に入りのおもちゃがいちばん落ち着く。',
      q3:  'わたしが落ち込むと、うちの子はすぐ気づいてそばに来て慰めてくれる。',
      q4:  'うちの子は、ごはんも散歩も毎日きっちり同じ時間じゃないと気がすまない。',
      q5:  'うちの子は、輪の中心にいるより、心地いい隅っこから静かにみんなを眺めていたい派。',
      q6:  'うちの子は、自分にしか見えない“なにか”を追いかけて飛びかかる。',
      q7:  'うちの子は、家の中がドタバタしても動じずマイペース。',
      q8:  'うちの子は、思いつきでいつでも冒険OK。計画なんていらない。',
      q9:  'うちの子は、出会う人も動物もぜんぶ友だちにしてしまう。',
      q10: 'うちの子は、だれも教えてない謎の遊びを勝手に発明する。',
      q11: 'うちの子は、すぐ許してくれて根に持たない。',
      q12: 'うちの子は、生活リズムがきっちりで、物の定位置もぜんぶ決まっている。',
    },
    types: {
      INTP: { nick: 'もの思い屋', species: 'フクロウ', tagline: '箱ひとつと、でっかい謎があればいい。',
        blurb: '好奇心のかたまりでマイペース。いつもキミには理解できない考えごとの三段くらい奥にいる。',
        long: 'うちの子は毛皮をまとった小さな哲学者。だれかに教わるより、自分で掛け金の仕組みを解き明かしたいタイプ。静かな午後はぜんぶ、おやつ棚の謎を考える時間。自立していて、かしこくて、好奇心は無限。',
        loves: ['知育トイ', '静かな隅っこ', '料理するキミの観察'] },
      INTJ: { nick: '策士', species: 'ネコ', tagline: 'わたしの昼寝も、キミの予定も、もう決めといた。',
        blurb: 'えらんだ一等地のクッションから、家じゅうをこっそり仕切っている。',
        long: '冷静で計画的、いつも二手先を読んでいる。うちの子はすべてを観察し、ムダなエネルギーは使わず、一日の過ごし方に強いこだわりを持つ。二度は言わない——ただ、計画どおりに進むのを当然のように待っている。',
        loves: ['見晴らしのいい高い場所', '崩れない日課', '自分が正しいこと'] },
      ENTP: { nick: 'いたずらっ子', species: 'サル', tagline: 'ルールは、まだ破ってないゲームってだけ。',
        blurb: 'かしこい小さなイタズラ天才。キミが引いた線を、ぜんぶ交渉しにくる。',
        long: 'アイデアは無限で、知恵くらべじゃ勝てっこない。閉まったドアは、ぜんぶ自分への挑戦状。遊び好きで頭の回転が速く、自分のかしこさにご満悦。そしてあの戸棚、ぜったい開ける。',
        loves: ['新しい芸を覚える', '掛け金を出しぬく', '観客（ギャラリー）'] },
      ENTJ: { nick: '大ボス', species: 'ワシ', tagline: 'この家は、わたしのスケジュールで回ってる。',
        blurb: '自信たっぷりで即断即決。晩ごはんは“今すぐ”出すべきだと確信している。',
        long: '生まれながらのリーダーで、行くべき場所と仕切るべき用事がいつもある。大胆で率直、自分にゆるぎない自信。仕事と日課を与えれば、家じゅうを効率のいいチームみたいにまとめあげる。',
        loves: ['仕切ること', '時間ぴったりの晩ごはん', '最高の見張り台'] },
      INFJ: { nick: '賢者', species: 'シカ', tagline: 'キミが気づく前に、キミの気持ちがわかる。',
        blurb: 'やさしくて勘が鋭い。いつも、いちばん必要なときにそっとそばにいる。',
        long: '静かで感受性が深く、教わってもいないことを分かっているみたい。いちばん好きな人と深くつながり、どこへ行っても穏やかで見透かしたようなやわらかさをまとっている。',
        loves: ['窓の外をずっと眺める', 'たったひとりの推し人間', 'おだやかな朝'] },
      INFP: { nick: '夢想家', species: 'ウサギ', tagline: 'だいたいここにいるよ。……だいたいね。',
        blurb: 'やわらかくて繊細な夢見がち。深く愛し、よく切なげに窓の外を見つめている。',
        long: 'やさしくて繊細で、ちょっぴり魔法みたい。豊かな内なる世界と、お庭くらい大きな心を持っている。静かに、でも全力で愛する。いつだって、いちばんやわらかくて陽のあたる場所を見つけて夢を見る。',
        loves: ['ひだまり', 'くんくんできるお花', 'やさしく話しかけられること'] },
      ENFP: { nick: 'おひさまっ子', species: 'イルカ', tagline: '今日も！人生で！最高の日！',
        blurb: '四本足に無限の幸せ。どの瞬間も、なぜか今までで最高。',
        long: 'まっすぐで、ぴょんぴょん弾ける情熱のかたまり。毎日をお祭りみたいに迎え、だれのことも久しぶりに会う親友みたいに歓迎する。あったかくて遊び好きで、笑わせるのなんて朝飯前。いるだけで人生がもっと楽しい。',
        loves: ['新しい友だち', '水しぶきで遊ぶ', 'とにかくぜんぶ'] },
      ENFJ: { nick: '応援団長', species: 'ゾウ', tagline: 'みんなにおやつとハグを、ひとつずつ。',
        blurb: 'あったかくて社交的。部屋のみんなを幸せにすることに本気。',
        long: '心が広くて、家族みんなの面倒を見るホスト役。うちの子は仲間はずれになってる子に気づき、ひとりひとりを気にかけ、惜しみなく愛を注ぐ。忠実でやさしく、静かな献身でみんなをつなぎとめる。',
        loves: ['みんなでぎゅっとハグ', '小さい子のお世話', 'だれかといること'] },
      ISTJ: { nick: '守り神', species: 'ハムスター', tagline: 'ごはんは6時。記録はわたしがつけてる。',
        blurb: 'どっしり頼れる。決まった日課ときっちりした予定が大好物。',
        long: '芯から信頼できる子。世界は整然と、毎日は予定どおりがお好み。小さな役目も真面目にこなす。派手さはないけれど、ただただ堅実で忠実。いつだって「ここにいる」と言った場所にちゃんといる。',
        loves: ['決まった日課', '自分専用のベッド', 'やるべき仕事'] },
      ISFJ: { nick: 'お世話やき', species: 'ネコ', tagline: 'あったかい場所、キミに取っといたよ。',
        blurb: '一途であったか。愛する人みんなを、さりげなく静かに世話している。',
        long: 'やさしくて気配り上手で、思いやりは尽きない。みんなの好みを覚えていて、小さくて心のこもった仕草で愛を伝える。家がまるごと世界のすべて。いるだけで、家がちょっとあったかくなる。',
        loves: ['焼きたてみたいにあったかい台所', 'そばにいること', 'ふわふわのブランケット'] },
      ESTJ: { nick: 'キャプテン', species: 'イヌ', tagline: 'ついてきて。おやつの場所ならわかる。',
        blurb: '仕切り上手で頼れる。散歩はいつも統率のとれたチーム遠征。',
        long: '自信たっぷりで頼れて、いつでも先頭に立つ準備万端。明確なルールと役割分担が好きで、上機嫌で家族みんなをごはんへと引き連れていく。忠実で働き者、いい仕事をしたことを誇りに思う。',
        loves: ['散歩の先導', 'はっきりしたルール', 'がんばったご褒美おやつ'] },
      ESFJ: { nick: 'おもてなし番長', species: 'クマ', tagline: '来てくれたんだ！さあ座って、遠慮しないで。',
        blurb: '社交の達人。キミのお客さんを、久しぶりに会う家族みたいに迎える。',
        long: 'あったかくて、もてなし上手で、家がにぎやかなほどうれしい。集まりが大好きで、来た人みんなを覚えていて、だれにも“よそ者”を感じさせない。気前がよくて甘えん坊——どんな集まりでも、脈打つ心臓みたいな存在。',
        loves: ['パーティー', 'お客さんのお出迎え', 'おやつのおすそ分け'] },
      ISTP: { nick: 'いじくり職人', species: 'キツネ', tagline: 'これがどう開くか、ちょっと調べてみる。',
        blurb: 'クールで手を動かすのが好き。ものの仕組みに、ひそかに夢中。',
        long: 'ピンチでも冷静で、前足づかいが器用。うちの子はいい難問が大好き——動かないドア、新しいおもちゃ、なぞの物音——それを、あわてず、解けるまでコツコツ。自立していて、こっそり有能。',
        loves: ['分解すること', '新しいガジェット', 'ひとりでコツコツ解くこと'] },
      ISFP: { nick: '自由きまま', species: 'リス', tagline: '陽のあたる場所が、わたしの居場所。',
        blurb: 'おだやかで甘い子。シンプルな喜びとあったかい陽だまりをどこまでも追いかける。',
        long: 'やさしくて、ちょっとアーティスト気質で、予定に縛られないのが幸せ。今この瞬間を生きて、小さなものに美を見つける——いい匂い、やわらかいブランケット、ひとすじの陽ざし。静かに甘えん坊で、どこまでも自由。',
        loves: ['ひなたぼっこのお昼寝', '小さな宝物あつめ', 'かわいいもの'] },
      ESTP: { nick: 'こわいもの知らず', species: 'ヒョウ', tagline: 'あの棚、ぜったい届く。賭けてもいい。',
        blurb: '大胆で遊び好き。飛びおりられないソファなんて、この世に存在しない。',
        long: 'こわいもの知らずで、すばやくて、元気いっぱい。行動するために生まれてきて、重力なんてただの提案くらいに思っている。見ていて飽きず、いつも冒険の真っ最中——まばたきした隙に、もう冷蔵庫の上。',
        loves: ['大ジャンプ', 'テンポの速い遊び', '真新しいチャレンジ'] },
      ESFP: { nick: 'アイドル', species: 'インコ', tagline: 'みんな見てる？よし、完璧。',
        blurb: '注目と楽しさのために生きる。しっぽの先まで、まるごと主役。',
        long: '生まれながらのパフォーマー。みんなの視線が集まった瞬間、パッと輝く。気まぐれで甘えん坊で、うれしくなるほどドラマチック。毎日がショーで、そしてもちろん、主役はこの子。',
        loves: ['観客', '音楽と動き', '注目の的になること'] },
    },
    matchWhy: {
      INTP: '大ボスが計画を、もの思い屋が大きなひらめきを持ちよる——ふたりでいると、意外なほどきっちり回る名コンビ。',
      INTJ: 'おひさまっ子が策士のクールな殻をとかし、策士はおひさまっ子に思いっきり跳ねられる計画をくれる。',
      ENTP: '賢者はいたずらっ子の尽きない企みをそっと地に足つかせ——じつは内心、そのぜんぶを面白がっている。',
      ENTJ: '大胆なリーダーには冷静な思索家を：もの思い屋は大ボスの好奇心を保ち、大ボスはもの思い屋を動かしつづける。',
      INFJ: 'ふたつの大きな心、ひとつは陽気でひとつは静か——おひさまっ子が賢者をそっと陽のあたる場所へ連れ出す。',
      INFP: '応援団長は夢想家のやさしい思いつきぜんぶに声援を送り、けっしてひとりにさせない。',
      ENFP: '賢者はおひさまっ子をより深いところで理解する——尽きない遊びに、尽きない理解で応える。',
      ENFJ: '夢想家は、応援団長がありったけの愛を注げる、やさしくて夢見がちな相手になる。',
      ISTJ: 'アイドルは守り神の肩の力をほぐし、守り神はアイドルのショーをちゃんと軌道に乗せる。',
      ISFJ: '一方は静かに世話をやき、一方は華やかに輝く——おたがい、相手の得意技を心から愛している。',
      ESTJ: '自由きままがキャプテンの角をやわらげ、キャプテンは自由きままに、のびのび動ける心地よい枠をくれる。',
      ESFJ: 'おもてなし番長は世話をやくのが好き、自由きままは甘やかされるのが好き——ぴったり息の合ったモフモフコンビ。',
      ISTP: 'おもてなし番長は、いじくり職人を作業場からパーティーへとそっと連れ出す——ほんの少しのあいだだけ。',
      ISFP: '応援団長は自由きままの静かな魔法を見抜き、その一つひとつを大きな声でたたえる。',
      ESTP: 'お世話やきは、こわいもの知らずがいつも上機嫌で駆け戻ってくる、あったかくて穏やかなホームベース。',
      ESFP: 'お世話やきはアイドルをちゃんと食べさせ地に足つかせ、アイドルは毎日を楽しくサプライズだらけにする。',
    },
  },

  ko: {
    axes: {
      EI: { a: '인싸',   b: '집순이',   label: '사교성' },
      SN: { a: '현실파', b: '몽상가',   label: '시선' },
      TF: { a: '쿨한 편', b: '다정함',   label: '마음' },
      JP: { a: '계획파', b: '자유파',   label: '리듬' },
    },
    groups: {
      analyst:  { name: '생각파',   role: '분석가' },
      diplomat: { name: '순둥이',   role: '외교관' },
      sentinel: { name: '든든이',   role: '관리자' },
      explorer: { name: '개구쟁이', role: '탐험가' },
    },
    questions: {
      q1:  '우리 아이는 손님이 올 때마다 현관까지 쪼르르 달려가 반겨요.',
      q2:  '우리 아이는 익숙한 일상과 늘 쓰던 최애 장난감이 제일 편해요.',
      q3:  '내가 슬프면 우리 아이는 바로 알아채고 다가와 위로해줘요.',
      q4:  '우리 아이는 밥도 산책도 매일 딱 같은 시간이어야 해요.',
      q5:  '우리 아이는 무리 한가운데보다 아늑한 구석에서 조용히 지켜보는 걸 좋아해요.',
      q6:  '우리 아이는 자기 눈에만 보이는 뭔가를 쫓아 달려들어요.',
      q7:  '집이 아무리 정신없어도 우리 아이는 흔들림 없이 마이웨이예요.',
      q8:  '우리 아이는 계획 없이도 언제든 모험 갈 준비 완료예요.',
      q9:  '우리 아이는 만나는 사람도 동물도 다 친구로 만들어요.',
      q10: '우리 아이는 아무도 안 가르쳐준 희한한 놀이를 스스로 만들어내요.',
      q11: '우리 아이는 금방 용서하고 뒤끝이 하나도 없어요.',
      q12: '우리 아이는 생활 패턴이 규칙적이고 모든 물건의 제자리가 딱 정해져 있어요.',
    },
    types: {
      INTP: { nick: '골똘이', species: '올빼미', tagline: '상자 하나랑 큰 질문 하나면 충분해.',
        blurb: '호기심 많고 느긋해. 늘 네가 끝내 이해 못 할 생각 세 겹쯤 속에 있어.',
        long: '우리 아이는 털옷 입은 꼬마 철학자. 시키는 걸 듣기보다 걸쇠가 어떻게 열리는지 스스로 알아내고 싶어 해요. 조용한 오후는 전부 간식장의 미스터리를 탐구하는 시간. 독립적이고 똑똑하고 호기심은 끝이 없어요.',
        loves: ['노즈워크 장난감', '조용한 구석', '요리하는 너 구경'] },
      INTJ: { nick: '큰그림러', species: '고양이', tagline: '내 낮잠은 이미 계획해뒀어. 네 것도.',
        blurb: '공들여 고른 방석 하나에서 온 집안을 조용히 좌지우지해요.',
        long: '침착하고 계획적이며 늘 두 수 앞을 봐요. 모든 걸 관찰하고 힘은 낭비하지 않으며, 하루를 어떻게 보낼지에 대한 확고한 소신이 있어요. 두 번 말하지 않아요 — 그냥 계획대로 되길 당연하게 기대하죠.',
        loves: ['높은 전망대', '예측 가능한 루틴', '내 말이 맞는 것'] },
      ENTP: { nick: '장난꾸러기', species: '원숭이', tagline: '규칙은 아직 안 깬 게임일 뿐이야.',
        blurb: '똑똑한 꼬마 장난 천재. 네가 그은 선마다 협상하러 와요.',
        long: '아이디어가 무궁무진하고 머리싸움으론 못 이겨요. 닫힌 문은 전부 자기한테 온 도전장. 놀기 좋아하고 잽싸고 자기 똑똑함에 뿌듯해하죠 — 그리고 저 찬장, 무조건 열어요.',
        loves: ['새 재주 배우기', '걸쇠 따돌리기', '봐줄 관객'] },
      ENTJ: { nick: '보스', species: '독수리', tagline: '이 집은 내 스케줄대로 돌아가.',
        blurb: '자신감 넘치고 결단력 있어. 저녁은 “지금 당장” 나와야 한다고 확신해요.',
        long: '타고난 리더라 갈 곳도 감독할 일도 늘 있어요. 대담하고 직설적이며 자기 확신이 확고해요. 임무와 루틴을 주면 온 집안을 잘 굴러가는 팀처럼 이끌어가요.',
        loves: ['주도권 잡기', '칼같은 저녁 시간', '좋은 전망 자리'] },
      INFJ: { nick: '애어른', species: '사슴', tagline: '네가 알기도 전에 네 기분을 먼저 알아.',
        blurb: '다정하고 눈치 빨라. 늘 네가 가장 필요할 때 곁에 있어요.',
        long: '조용하고 감수성이 깊어, 배운 적 없는 것도 아는 것 같아요. 가장 좋아하는 사람과 깊이 이어지고, 어디를 가든 잔잔하고 다 아는 듯한 부드러움을 지녀요.',
        loves: ['창밖 오래 바라보기', '단 한 명의 최애 사람', '잔잔한 아침'] },
      INFP: { nick: '몽상가', species: '토끼', tagline: '나 거의 여기 있어. …거의.',
        blurb: '여리고 섬세한 몽상가. 깊이 사랑하고 자주 아련하게 창밖을 봐요.',
        long: '다정하고 섬세하고 살짝 마법 같아요. 풍부한 내면 세계와 마당만 한 큰 마음을 지녔어요. 조용하지만 온전히 사랑하고, 늘 가장 폭신하고 볕 좋은 자리를 찾아 꿈을 꿔요.',
        loves: ['햇살 한 줄기', '킁킁댈 꽃', '다정하게 말 걸어주기'] },
      ENFP: { nick: '햇살이', species: '돌고래', tagline: '오늘도! 인생! 최고의 날!',
        blurb: '네 발 달린 무한 행복. 매 순간이 어쩐지 지금껏 최고의 순간이에요.',
        long: '순수하게 통통 튀는 열정 그 자체. 하루하루를 축제처럼 맞이하고 모두를 오랜 절친처럼 반겨요. 따뜻하고 잘 놀고 웃기기 쉬운 — 함께 있으면 인생이 그냥 더 즐거워요.',
        loves: ['새 친구', '물장구', '그냥 전부 다'] },
      ENFJ: { nick: '응원단장', species: '코끼리', tagline: '모두에게 간식이랑 포옹 하나씩.',
        blurb: '따뜻하고 사교적. 방 안 모두를 행복하게 하는 데 진심이에요.',
        long: '마음이 넓어 온 가족을 챙기는 호스트. 소외된 아이를 알아채고 하나하나 살피며 아낌없이 사랑을 줘요. 충직하고 다정해서 조용한 헌신으로 무리를 하나로 묶어줘요.',
        loves: ['다 같이 꼭 껴안기', '어린 친구들 돌보기', '누군가와 함께'] },
      ISTJ: { nick: '수호신', species: '햄스터', tagline: '저녁은 6시. 기록은 내가 담당.',
        blurb: '든든하고 믿음직해. 정해진 루틴과 딱 맞춰진 일정이 최애예요.',
        long: '뼛속까지 믿음직해요. 세상은 질서 있게, 하루는 예측 가능하게가 취향이고 작은 임무도 진지하게 해내요. 화려하진 않아도 그저 한결같고 충직해서, 늘 있겠다고 한 자리에 정확히 있어요.',
        loves: ['고정된 루틴', '자기 전용 침대', '해야 할 임무'] },
      ISFJ: { nick: '챙김이', species: '고양이', tagline: '따뜻한 자리, 너 주려고 맡아놨어.',
        blurb: '한결같고 따뜻해. 사랑하는 모두를 티 안 나게 조용히 챙겨요.',
        long: '다정하고 세심하고 끝없이 보살펴요. 다들 뭘 좋아하는지 기억하고 작고 사려 깊은 방식으로 사랑을 표현해요. 집이 온 세상이라, 있기만 해도 집이 더 따뜻해져요.',
        loves: ['갓 구운 듯 따뜻한 주방', '네 곁 지키기', '보들보들 담요'] },
      ESTJ: { nick: '캡틴', species: '개', tagline: '따라와 — 간식이 어디 있는지 알거든.',
        blurb: '체계적이고 리더십 만렙. 산책마다 잘 짜인 단체 원정처럼 이끌어요.',
        long: '자신감 있고 믿음직하며 언제든 앞장설 준비 완료. 명확한 규칙과 역할 분담을 좋아하고 신나서 온 가족을 저녁 식탁으로 몰아가요. 충직하고 성실하며 일 잘한 걸 뿌듯해해요.',
        loves: ['산책 선두', '명확한 규칙', '제대로 받은 간식 보상'] },
      ESFJ: { nick: '인싸 호스트', species: '곰', tagline: '왔구나! 앉아 앉아 — 편하게 있어.',
        blurb: '사교 만렙. 네 손님을 오랜만에 만난 가족처럼 반겨요.',
        long: '따뜻하고 손님 대접을 좋아하며 집이 북적일수록 행복해요. 모임을 사랑하고 온 손님을 다 기억하며 누구도 이방인처럼 느끼게 안 둬요. 후하고 애교 많은 — 어떤 모임이든 뛰는 심장 같은 존재.',
        loves: ['파티', '손님 맞이', '간식 나눠 먹기'] },
      ISTP: { nick: '분해왕', species: '여우', tagline: '이거 어떻게 열리는지 내가 알아낼게.',
        blurb: '쿨하고 손재주 좋아. 모든 게 어떻게 돌아가는지에 조용히 빠져 있어요.',
        long: '위기에도 침착하고 발재주가 야무져요. 좋은 난제를 사랑해요 — 안 열리는 문, 새 장난감, 수상한 소리 — 서두르지 않고 풀릴 때까지 뚝심 있게 파고들어요. 독립적이고 은근히 유능해요.',
        loves: ['분해하기', '새 장치', '혼자 힘으로 알아내기'] },
      ISFP: { nick: '자유영혼', species: '다람쥐', tagline: '햇살 있는 곳, 거기가 내 자리야.',
        blurb: '느긋하고 사랑스러워. 소소한 기쁨과 따뜻한 햇살을 끝까지 따라가요.',
        long: '다정하고 예술가 기질이 있고 일정에 안 얽매여 행복해요. 지금 이 순간을 살며 작은 것에서 아름다움을 찾아요 — 좋은 냄새, 보들한 담요, 한 뼘 햇볕. 조용히 애교 많고 더없이 자유로워요.',
        loves: ['볕 쬐며 낮잠', '작은 보물 모으기', '예쁜 것'] },
      ESTP: { nick: '액션스타', species: '표범', tagline: '저 선반, 나 분명히 닿을 수 있어.',
        blurb: '대담하고 잘 놀아. 못 뛰어내릴 소파는 이 세상에 없어요.',
        long: '겁 없고 빠르고 에너지 넘쳐요. 행동하려고 태어난 아이라 중력쯤은 그냥 제안으로 여겨요. 보는 재미가 끝없고 늘 모험 중 — 눈 깜짝할 새 벌써 냉장고 위예요.',
        loves: ['크게 점프', '빠른 놀이', '완전 새로운 도전'] },
      ESFP: { nick: '무대체질', species: '앵무새', tagline: '다들 보고 있지? 좋았어.',
        blurb: '관심과 즐거움을 위해 살아. 꼬리 끝까지 완전 주인공이에요.',
        long: '타고난 무대 체질. 모두의 시선이 쏠리는 순간 반짝 빛나요. 즉흥적이고 애교 많고 신나게 극적이에요. 매일이 공연이고 주인공은 당연히 이 아이죠.',
        loves: ['관객', '음악과 춤', '모두의 중심 되기'] },
    },
    matchWhy: {
      INTP: '보스가 계획을, 골똘이가 큰 아이디어를 가져와 — 둘이 뭉치면 의외로 야무지게 굴러가는 콤비.',
      INTJ: '햇살이가 큰그림러의 쿨한 겉모습을 녹이고, 큰그림러는 햇살이에게 맘껏 튈 계획을 줘요.',
      ENTP: '애어른이 장난꾸러기의 끝없는 꿍꿍이를 조용히 붙잡아줘요 — 사실 속으론 그 하나하나가 다 재밌고요.',
      ENTJ: '대담한 리더엔 침착한 사색가를: 골똘이는 보스의 호기심을 지키고, 보스는 골똘이를 계속 움직이게 해요.',
      INFJ: '큰 마음 둘, 하나는 시끌 하나는 잔잔 — 햇살이가 애어른을 살며시 햇볕 속으로 이끌어요.',
      INFP: '응원단장은 몽상가의 여린 생각 하나하나에 응원을 보내고, 절대 외롭게 두지 않아요.',
      ENFP: '애어른은 햇살이를 더 깊은 결로 이해해요 — 끝없는 놀이에 끝없는 이해로 응답하죠.',
      ENFJ: '몽상가는 응원단장이 그 큰 사랑을 쏟을, 다정하고 몽글몽글한 상대가 되어줘요.',
      ISTJ: '무대체질은 수호신의 긴장을 풀어주고, 수호신은 무대체질의 공연을 착착 굴러가게 해줘요.',
      ISFJ: '한쪽은 조용히 챙기고 한쪽은 화려하게 빛나 — 서로가 상대의 최고 장기를 진심으로 아껴요.',
      ESTJ: '자유영혼이 캡틴의 모난 데를 부드럽게, 캡틴은 자유영혼에게 맘껏 누빌 아늑한 틀을 줘요.',
      ESFJ: '인싸 호스트는 챙기는 걸 좋아하고 자유영혼은 챙김받는 걸 좋아해 — 딱 맞는 몽실 콤비.',
      ISTP: '인싸 호스트가 분해왕을 작업실에서 파티로 살살 꾀어내요 — 딱 잠깐만이라도.',
      ISFP: '응원단장은 자유영혼의 조용한 마법을 알아보고, 그 하나하나를 큰 소리로 칭찬해요.',
      ESTP: '챙김이는 액션스타가 늘 신나서 달려 돌아오는 따뜻하고 잔잔한 베이스캠프예요.',
      ESFP: '챙김이는 무대체질을 잘 먹이고 땅에 발붙이게, 무대체질은 매일을 재밌고 서프라이즈 가득하게.',
    },
  },
};

// ── UI copy (feeds the screens). Values that interpolate are functions. ────────
const _STR = {
  en: {
    dir: 'ltr',
    langMenuLabel: 'Choose language',   // aria-label on the switcher button
    brandTag: 'personality',
    nav: { types: 'The 16 pets', take: 'Take the test' },

    // Landing
    heroTitle: ['What kind of personality', 'is your pet, really?'],
    heroSub: 'Answer a few gentle questions about your furry (or feathery) friend and discover which of the 16 pet personalities they are.',
    heroTake: 'Take the test', heroMeet: 'Meet the 16 pets',
    heroAlt: 'A happy group of pets from the Paws personality test',
    familiesKicker: 'Four little families', familiesTitle: 'Every pet belongs to one',
    seeAll: 'See all 16 pets →',
    howTitle: 'How it works',
    steps: [
      { t: 'Answer honestly', b: 'Twelve quick statements about how your pet acts day to day. Slide from agree to disagree — go with your gut.' },
      { t: 'We read the vibe', b: 'Your answers map onto four playful traits, from Outgoing–Reserved to Planner–Free spirit.' },
      { t: 'Meet their type', b: 'Get your pet’s personality, their spirit animal, and the little things that make them tick.' },
    ],
    startTest: 'Start the test',

    // Test
    agree: 'Agree', disagree: 'Disagree', back: 'Back', home: 'Home',
    thinking: 'Thinking about your pet',
    seeType: 'See your pet’s type',
    nextOne: 'Great — next one…', pickScale: 'Pick where your pet lands on the scale',

    // Reveal + result
    reading: 'Reading the vibes', matchingPet: 'Matching your pet to a personality',
    yourPetIs: 'Your pet is…',
    meetSpecies: (sp) => 'Meet the ' + sp.toLowerCase(),
    theSpecies: (sp) => 'the ' + sp.toLowerCase(),
    lovesTitle: 'Little things they love',
    traitsTitle: 'Their four traits',
    compatKicker: 'Compatibility', bffTitle: 'Best friend forever',
    yourPet: 'Your pet', bestMatch: 'Best match',
    alsoPals: 'Also gets along great with',
    restOf: (g) => 'The rest of ' + g,
    shareYourCard: 'Share your pet’s card', shareThisCard: 'Share this card',
    testAnother: 'Test another pet', browseAll: 'Browse all 16 pets',
    diaryOf: (nick) => 'Give ' + nick + ' a diary of their own',
    diaryBody: 'Keep their little moments, photos, and milestones together in the Paws pet diary app.',

    // Gallery
    galleryKicker: 'The whole gang', galleryTitle: 'The 16 pet personalities',
    gallerySub: 'Tap any pet to read all about them — then find out which one is yours.',

    // Footer
    footerTitle: 'Keep the love going in Paws',
    footerBody: 'A cozy diary for your pet — log moments, track their days, and treasure every memory.',
    qrCaption: 'Scan to get the app',

    // Share modal
    shareHead: (nick) => 'Share ' + nick,
    shareSub: 'Send a link, or save the keepsake card',
    copy: 'Copy', copied: 'Copied!',
    shareNote: (nick) => 'Anyone who opens this sees ' + nick + ' with all four traits.',
    shareLinkBtn: 'Share link',
    orSaveCard: 'OR SAVE A CARD',
    shareCardImg: 'Share card image', saveImg: 'Save image',
    savedToDevice: 'Saved to your device',
    shareAppCta: (nick) => 'Love ' + nick + '? Keep their memories in the Paws pet diary app.',
    shareText: (nick, code) => `My pet is ${nick} (${code}) on Paws! Find out your pet's personality:`,
    shareNativeTitle: (nick) => 'My pet is ' + nick,
    close: 'Close',

    // Keepsake card (canvas)
    cardBrand: 'PAWS · PERSONALITY', cardYourPet: 'YOUR PET IS', cardTagline: 'a pet personality test',
  },

  zh: {
    dir: 'ltr',
    langMenuLabel: '选择语言',
    brandTag: '宠物性格',
    nav: { types: '16 种宠物', take: '开始测试' },

    heroTitle: ['你的宠物', '究竟是什么性格？'],
    heroSub: '回答几个关于你毛茸茸（或毛绒绒）小伙伴的温柔小问题，看看它是 16 种宠物性格中的哪一种。',
    heroTake: '开始测试', heroMeet: '认识 16 种宠物',
    heroAlt: 'Paws 性格测试里一群快乐的宠物',
    familiesKicker: '四个小家族', familiesTitle: '每只宠物都属于其一',
    seeAll: '查看全部 16 种宠物 →',
    howTitle: '测试怎么玩',
    steps: [
      { t: '如实作答', b: '关于宠物日常表现的十二个小问题。在“同意”与“不同意”之间滑动——凭直觉选就好。' },
      { t: '我们读懂气质', b: '你的答案会映射到四个有趣的维度，从“外向—内敛”到“计划派—随性派”。' },
      { t: '揭晓它的类型', b: '获得宠物的专属性格、它的守护动物，以及那些让它与众不同的小细节。' },
    ],
    startTest: '开始测试',

    agree: '同意', disagree: '不同意', back: '返回', home: '首页',
    thinking: '想想你的宠物',
    seeType: '查看宠物的类型',
    nextOne: '很好——下一题……', pickScale: '选出你的宠物落在刻度的哪一端',

    reading: '正在读取气质', matchingPet: '正在为你的宠物匹配性格',
    yourPetIs: '你的宠物是……',
    meetSpecies: (sp) => '认识这只' + sp,
    theSpecies: (sp) => sp,
    lovesTitle: '它爱的那些小事',
    traitsTitle: '它的四项特质',
    compatKicker: '契合度', bffTitle: '一生挚友',
    yourPet: '你的宠物', bestMatch: '最佳搭档',
    alsoPals: '也很合得来的还有',
    restOf: (g) => g + '家族的其他成员',
    shareYourCard: '分享宠物卡片', shareThisCard: '分享这张卡片',
    testAnother: '测测另一只', browseAll: '浏览全部 16 种宠物',
    diaryOf: (nick) => '给「' + nick + '」一本专属日记',
    diaryBody: '用 Paws 宠物日记 App，把它的点滴瞬间、照片和成长里程碑都留在一起。',

    galleryKicker: '全员集合', galleryTitle: '16 种宠物性格',
    gallerySub: '点一点任意宠物，读读它的故事——再看看哪一种是你家的那位。',

    footerTitle: '在 Paws 里延续这份爱',
    footerBody: '一本温暖的宠物日记——记录瞬间、追踪它的每一天，珍藏每一段回忆。',
    qrCaption: '扫码下载 App',

    shareHead: (nick) => '分享「' + nick + '」',
    shareSub: '发送链接，或保存这张纪念卡片',
    copy: '复制', copied: '已复制！',
    shareNote: (nick) => '任何打开链接的人，都会看到「' + nick + '」和它的四项特质。',
    shareLinkBtn: '分享链接',
    orSaveCard: '或保存一张卡片',
    shareCardImg: '分享卡片图', saveImg: '保存图片',
    savedToDevice: '已保存到你的设备',
    shareAppCta: (nick) => '喜欢「' + nick + '」吗？用 Paws 宠物日记 App 留住它的回忆。',
    shareText: (nick, code) => `我家宠物在 Paws 上是「${nick}」（${code}）！来测测你家宠物的性格吧：`,
    shareNativeTitle: (nick) => '我家宠物是「' + nick + '」',
    close: '关闭',

    cardBrand: 'PAWS · 宠物性格', cardYourPet: '你的宠物是', cardTagline: '宠物性格测试',
  },

  ja: {
    dir: 'ltr',
    langMenuLabel: '言語を選ぶ',
    brandTag: 'ペットの性格',
    nav: { types: '16タイプ', take: '診断する' },

    heroTitle: ['うちの子って', 'どんな性格？'],
    heroSub: 'モフモフ（もしくはフワフワ）な相棒についての、やさしい質問にいくつか答えて、16タイプのうちどれかを見つけよう。',
    heroTake: '診断する', heroMeet: '16タイプを見る',
    heroAlt: 'Paws性格診断の、幸せそうなペットたち',
    familiesKicker: '4つの小さな家族', familiesTitle: 'どの子もどれかに所属',
    seeAll: '16タイプをぜんぶ見る →',
    howTitle: '診断のしくみ',
    steps: [
      { t: '正直に答える', b: 'うちの子の毎日のふるまいについて、12個のかんたんな質問。「そう思う」と「思わない」のあいだをスライドして——直感でどうぞ。' },
      { t: '性格を読みとる', b: 'キミの答えを、「社交的—ひとり好き」から「計画派—自由派」まで、4つの楽しい特性にマッピング。' },
      { t: 'タイプが判明', b: 'うちの子の性格、守護アニマル、そしてその子らしさを作る小さなツボがわかる。' },
    ],
    startTest: '診断スタート',

    agree: 'そう思う', disagree: '思わない', back: 'もどる', home: 'ホーム',
    thinking: 'うちの子を思いうかべて',
    seeType: 'うちの子のタイプを見る',
    nextOne: 'いいね——次へ…', pickScale: 'うちの子がスケールのどこに当てはまるか選んで',

    reading: '性格を読みとり中', matchingPet: 'うちの子の性格をマッチング中',
    yourPetIs: 'うちの子は……',
    meetSpecies: (sp) => 'この' + sp + 'に会おう',
    theSpecies: (sp) => sp,
    lovesTitle: '好きな小さいこと',
    traitsTitle: '4つの特性',
    compatKicker: '相性', bffTitle: 'ずっと親友',
    yourPet: 'うちの子', bestMatch: 'ベストマッチ',
    alsoPals: '仲よくできるのはほかにも',
    restOf: (g) => g + 'の他のなかま',
    shareYourCard: 'カードをシェア', shareThisCard: 'このカードをシェア',
    testAnother: '別の子を診断', browseAll: '16タイプをぜんぶ見る',
    diaryOf: (nick) => '「' + nick + '」だけの日記を',
    diaryBody: 'Pawsペット日記アプリで、その子の小さな瞬間・写真・成長の記録をぜんぶ一緒に残そう。',

    galleryKicker: '全員集合', galleryTitle: '16のペット性格',
    gallerySub: 'どの子でもタップして読んでみて——そして、うちの子がどれか見つけよう。',

    footerTitle: 'Pawsでこの愛をつづけよう',
    footerBody: 'うちの子のためのあったかい日記——瞬間を記録して、毎日を追いかけて、思い出をぜんぶ大切に。',
    qrCaption: 'スキャンしてアプリを入手',

    shareHead: (nick) => '「' + nick + '」をシェア',
    shareSub: 'リンクを送るか、記念カードを保存',
    copy: 'コピー', copied: 'コピーしたよ！',
    shareNote: (nick) => 'リンクを開いた人はみんな、「' + nick + '」と4つの特性を見られるよ。',
    shareLinkBtn: 'リンクをシェア',
    orSaveCard: 'またはカードを保存',
    shareCardImg: 'シェアカード画像', saveImg: '画像を保存',
    savedToDevice: 'デバイスに保存したよ',
    shareAppCta: (nick) => '「' + nick + '」が好き？Pawsペット日記アプリで思い出を残そう。',
    shareText: (nick, code) => `うちの子はPawsで「${nick}」（${code}）！キミのうちの子の性格も診断してみて：`,
    shareNativeTitle: (nick) => 'うちの子は「' + nick + '」',
    close: '閉じる',

    cardBrand: 'PAWS · せいかく診断', cardYourPet: 'うちの子は', cardTagline: 'ペット性格診断',
  },

  ko: {
    dir: 'ltr',
    langMenuLabel: '언어 선택',
    brandTag: '반려동물 성격',
    nav: { types: '16가지 타입', take: '테스트 하기' },

    heroTitle: ['우리 아이는', '대체 무슨 성격일까?'],
    heroSub: '털복숭이(혹은 깃털복숭이) 단짝에 대한 다정한 질문 몇 개에 답하고, 16가지 성격 중 어느 쪽인지 알아보세요.',
    heroTake: '테스트 하기', heroMeet: '16가지 타입 보기',
    heroAlt: 'Paws 성격 테스트 속 행복한 반려동물 무리',
    familiesKicker: '네 개의 작은 가족', familiesTitle: '모든 아이는 하나에 속해요',
    seeAll: '16가지 타입 전부 보기 →',
    howTitle: '테스트 방법',
    steps: [
      { t: '솔직하게 답하기', b: '우리 아이의 평소 행동에 관한 짧은 질문 12개. “그렇다”와 “아니다” 사이를 슬라이드하며 — 직감대로 고르세요.' },
      { t: '성향 읽어내기', b: '답을 “인싸—집순이”부터 “계획파—자유파”까지 네 가지 재미난 특성으로 매핑해요.' },
      { t: '타입 공개', b: '우리 아이의 성격, 수호 동물, 그리고 그 아이다움을 만드는 소소한 포인트를 알려드려요.' },
    ],
    startTest: '테스트 시작',

    agree: '그렇다', disagree: '아니다', back: '뒤로', home: '홈',
    thinking: '우리 아이를 떠올려보세요',
    seeType: '우리 아이 타입 보기',
    nextOne: '좋아요 — 다음 질문…', pickScale: '우리 아이가 눈금 어디쯤인지 골라주세요',

    reading: '성향 읽는 중', matchingPet: '우리 아이 성격 매칭 중',
    yourPetIs: '우리 아이는…',
    meetSpecies: (sp) => '이 ' + sp + ' 만나보기',
    theSpecies: (sp) => sp,
    lovesTitle: '이 아이가 좋아하는 소소한 것',
    traitsTitle: '네 가지 특성',
    compatKicker: '궁합', bffTitle: '영원한 단짝',
    yourPet: '우리 아이', bestMatch: '최고의 짝',
    alsoPals: '이 아이들과도 잘 지내요',
    restOf: (g) => g + ' 가족의 나머지',
    shareYourCard: '카드 공유하기', shareThisCard: '이 카드 공유하기',
    testAnother: '다른 아이 테스트', browseAll: '16가지 타입 전부 보기',
    diaryOf: (nick) => '‘' + nick + '’만의 다이어리 선물하기',
    diaryBody: 'Paws 반려 다이어리 앱으로 이 아이의 소소한 순간, 사진, 성장 기록을 한데 모아두세요.',

    galleryKicker: '다 같이 모여', galleryTitle: '16가지 반려동물 성격',
    gallerySub: '아무 아이나 탭해서 이야기를 읽어보세요 — 그리고 우리 아이가 누군지 찾아봐요.',

    footerTitle: 'Paws에서 이 사랑을 이어가요',
    footerBody: '우리 아이를 위한 따뜻한 다이어리 — 순간을 기록하고, 하루하루를 담고, 모든 추억을 소중히.',
    qrCaption: '스캔해서 앱 받기',

    shareHead: (nick) => '‘' + nick + '’ 공유하기',
    shareSub: '링크를 보내거나 기념 카드를 저장하세요',
    copy: '복사', copied: '복사됐어요!',
    shareNote: (nick) => '링크를 여는 사람은 누구나 ‘' + nick + '’와 네 가지 특성을 볼 수 있어요.',
    shareLinkBtn: '링크 공유',
    orSaveCard: '또는 카드 저장',
    shareCardImg: '공유 카드 이미지', saveImg: '이미지 저장',
    savedToDevice: '기기에 저장했어요',
    shareAppCta: (nick) => '‘' + nick + '’가 좋으세요? Paws 반려 다이어리 앱에 추억을 담아두세요.',
    shareText: (nick, code) => `우리 아이는 Paws에서 ‘${nick}’(${code})! 너희 아이 성격도 알아봐:`,
    shareNativeTitle: (nick) => '우리 아이는 ‘' + nick + '’',
    close: '닫기',

    cardBrand: 'PAWS · 반려동물 성격', cardYourPet: '우리 아이는', cardTagline: '반려동물 성격 테스트',
  },
};

const PM_STR = _STR[PM_LANG];
const PM_TXT = _TXT[PM_LANG];

Object.assign(window, { PM_LANG, PM_PREFIX, PM_LANGS, PM_STR, PM_TXT, pmLangHref });
