/* ============================================================
   PETRI GAMES — content + i18n (RU / EN)
   ============================================================ */

// Resolve a bundled resource id to its inlined blob URL when present
// (standalone export), otherwise fall back to the original URL (live/dev).
function R(id, fallback) {
  return (typeof window !== 'undefined' && window.__resources && window.__resources[id]) || fallback;
}

// Lemniscate (figure-8 / ∞) path generator — Gerono form.
// Returns an SVG path string centred at (cx,cy) with half-width a, half-height b.
function lemniscatePath(cx, cy, a, b, steps = 160) {
  let d = '';
  for (let i = 0; i <= steps; i++) {
    const t = (i / steps) * Math.PI * 2;
    const x = cx + a * Math.cos(t);
    const y = cy + b * Math.sin(t) * Math.cos(t);
    d += (i === 0 ? 'M' : 'L') + x.toFixed(2) + ' ' + y.toFixed(2) + ' ';
  }
  return d.trim() + ' Z';
}

const PETRI_PROJECTS = [
  {
    id: 'deathdeck',
    name: 'MORTAROT',
    status: 'testing',
    build: '0.1',
    hue: 0,
    accentCell: 'var(--exp-orange)',
    image: R('ddHero', 'img/deathdeck/hero.jpg'),
    modalHero: R('ddHero', 'img/deathdeck/hero.jpg'),
    wideShots: true,
    shots: [
      R('ddS1', 'img/deathdeck/s1.jpg'),
      R('ddS2', 'img/deathdeck/s2.jpg'),
      R('ddS3', 'img/deathdeck/s3.jpg'),
      R('ddS4', 'img/deathdeck/s4.jpg'),
      R('ddS5', 'img/deathdeck/s5.jpg'),
      R('ddS6', 'img/deathdeck/s6.jpg'),
      R('ddS7', 'img/deathdeck/s7.jpg'),
      R('ddS8', 'img/deathdeck/s8.jpg'),
    ],
    en: {
      statusLabel: 'Coming Soon',
      tagline: 'A card roguelike: Death shuffles, you draw',
      desc: 'Death shuffles, you draw, and one card too many decides everything. Clear twelve circles and leave the table alive.',
      cta: 'Read more',
      modal: {
        badge: 'Coming Soon',
        title: 'MORTAROT',
        subtitle: 'Death in the Deck',
        slogan: 'A card roguelike: Death shuffles, you draw, and one card too many decides everything.',
        desc: 'Death waits at the card table and offers you a game. Her spread promises riches to fools and hope to the desperate, but the price of a mistake is the same for everyone. Draw cards, take what’s yours or tempt fate one more time — while the mistress of the table gloats wearily over everyone who dared to risk it all, waiting for you to slip.',
        quote: 'Clear twelve circles and leave the table alive. If you can.',
        meta: 'Genre: card roguelike · Platforms: Windows, Browser · Status: Coming Soon',
        links: [
          { label: 'Soon on Steam' },
          { label: 'Trailer', url: 'https://www.youtube.com/watch?v=9FaVso-PQsM', primary: true },
        ],
        credit: 'Developed by Petri Games',
      },
    },
    ru: {
      statusLabel: 'Coming Soon',
      tagline: 'Карточный roguelike: Смерть тасует, ты тянешь',
      desc: 'Смерть тасует, ты тянешь, и одна лишняя карта решает всё. Пройди двенадцать кругов и уйди из-за стола живым.',
      cta: 'Подробнее',
      modal: {
        badge: 'Coming Soon',
        title: 'MORTAROT',
        subtitle: 'Death in the Deck',
        slogan: 'Карточный roguelike: Смерть тасует, ты тянешь, и одна лишняя карта решает всё.',
        desc: 'Смерть ждёт за карточным столом и предлагает сыграть. Её расклад сулит богатство глупцам и надежду отчаявшимся, но цена ошибки для всех одна. Тяни карты, забирай своё или испытай судьбу ещё раз — а хозяйка стола устало злорадствует над каждым, кто решился рискнуть всем, и ждёт, когда ты оступишься.',
        quote: 'Пройди двенадцать кругов и уйди из-за стола живым. Если сумеешь.',
        meta: 'Жанр: карточный roguelike · Платформы: Windows, Браузер · Статус: Coming Soon',
        links: [
          { label: 'Скоро в Steam' },
          { label: 'Трейлер', url: 'https://www.youtube.com/watch?v=9FaVso-PQsM', primary: true },
        ],
        credit: 'Разработано Petri Games',
      },
    },
  },
  {
    id: 'casualblade',
    name: 'Casual Blade',
    status: 'funded',
    build: '1.0',
    hue: 18,
    accentCell: 'var(--exp-orange)',
    image: R('cbImg', 'https://play-lh.googleusercontent.com/bmnM0HjGkoO_1H5ajgoSJGACauzpPtc2U1tIfdJzXINVqpbZFR_apVNATPMsaxPed_LfB1EQo6M7D2ZJApP7cxQ=w526-h296'),
    modalHero: R('cbHero', 'https://play-lh.googleusercontent.com/Jun_DGapJ6y1ypKPcezCmM8HLgHnHYQZAsOqLJ0kc_95amYl_I9Gkurw5cMJog2YpOxIAVmItCbIuzuMX4fXl_c=w526-h296'),
    playUrl: 'https://play.google.com/store/apps/details?id=com.NimbleBladeStudio.CasualBlade',
    shots: [
      R('cbImg', 'https://play-lh.googleusercontent.com/bmnM0HjGkoO_1H5ajgoSJGACauzpPtc2U1tIfdJzXINVqpbZFR_apVNATPMsaxPed_LfB1EQo6M7D2ZJApP7cxQ=w526-h296'),
      R('cbShot2', 'https://play-lh.googleusercontent.com/vKtu8ng4EDsqXwg_o1YDDu0mDhnJTTB5M06cp0USgNiywugMK1NAY5jAeECushtChk6zYV8E06kfxJAC3QabEw=w526-h296'),
      R('cbShot3', 'https://play-lh.googleusercontent.com/AHAOION_2zxCeAIKweny_mjznsAwZxfLcX3mllNZyD8-Lgp_faEGaM-5yk7G6tk4pE97tNZWS1m0cAotP2jy=w526-h296'),
      R('cbShot4', 'https://play-lh.googleusercontent.com/AoS63exBI3vtSrSVmNC1ZAH7rLBliTsUrY9yEUkJcq9lE83Z6B40--dFWgl2peNNJlArxz3kM-1p3m-kYY4Gkg=w526-h296'),
    ],
    en: {
      statusLabel: 'Funded by us',
      tagline: 'Robots vs robots. Only blades decide',
      desc: 'Sci-fi PvP action with sword combat. 1v1, Battle Royale, capture the flag. 1M+ downloads.',
      cta: 'Learn more',
      modal: {
        badge: 'Funded by PetriGames',
        title: 'Casual Blade: Robot PvP Battles',
        slogan: 'Sci-fi Medieval. Robots. Blades. Only skill decides.',
        desc: 'Casual Blade is a fast 3D action game where futurism meets the medieval. Robots in sci-fi armor clash with swords and katanas. Built with direct financial backing from PetriGames.',
        stats: [
          { n: '1M+', l: 'downloads' },
          { n: '4', l: 'PvP modes' },
          { n: '12+', l: 'rating' },
          { n: '2026', l: 'updated' },
        ],
        mechanics: [
          { icon: '\u2694\uFE0F', h: '1v1 Duel', p: 'A fair fight. No cheats — just reflexes and tactics.' },
          { icon: '\uD83D\uDC80', h: 'Battle Royale', p: 'Many robots, one arena — survive at any cost.' },
          { icon: '\uD83D\uDEA9', h: 'Capture the Flag', p: 'Team tactics: cover your allies, push for the win.' },
        ],
        cta: 'Download on Google Play',
      },
    },
    ru: {
      statusLabel: 'Финансировано нами',
      tagline: 'Роботы vs роботы. Только клинки решают',
      desc: 'Sci-fi PvP-экшен с боями на мечах. 1v1, Battle Royale, захват флага. 1M+ загрузок',
      cta: 'Подробнее',
      modal: {
        badge: 'Финансировано PetriGames',
        title: 'Casual Blade: Битва роботов PvP',
        slogan: 'Sci-fi Средневековье. Роботы. Клинки. Только скилл решает всё.',
        desc: 'Casual Blade — динамичный 3D-экшен, где футуризм встречается со средневековьем. Роботы в sci-fi доспехах сходятся в схватках на мечах и катанах. Разработано при непосредственном финансовом участии PetriGames.',
        stats: [
          { n: '1M+', l: 'загрузок' },
          { n: '4', l: 'режима PvP' },
          { n: '12+', l: 'рейтинг' },
          { n: '2026', l: 'обновлено' },
        ],
        mechanics: [
          { icon: '\u2694\uFE0F', h: '1v1 Дуэль', p: 'Честный поединок. Никаких читов, только реакция и тактика.' },
          { icon: '\uD83D\uDC80', h: 'Battle Royale', p: 'Несколько роботов, одна арена — выживи любой ценой.' },
          { icon: '\uD83D\uDEA9', h: 'Захват флага', p: 'Командная тактика: прикрывай союзников, рвись к победе.' },
        ],
        cta: 'Скачать в Google Play',
      },
    },
  },
  {
    id: 'exp1',
    name: 'Experiment 01',
    status: 'started',
    build: '—',
    empty: true,
    placeholder: { en: 'Empty dish. Something will grow here.', ru: 'Пустая чашка. Здесь что-то вырастет' },
    hue: 70,          // lime-ish
    accentCell: 'var(--lime-glow)',
    en: {
      statusLabel: 'Prototype',
      tagline: 'Grey boxes, one loop, one question.',
      desc: 'No textures yet — just the core loop we are stress-testing. If the grey cubes don\u2019t grab you, no skin ever will. We want to know in week one.',
      cta: 'Try the prototype',
    },
    ru: {
      statusLabel: 'Прототип',
      tagline: 'Серые кубы, одна петля, один вопрос.',
      desc: 'Текстур ещё нет — только ядро, которое мы прогоняем на прочность. Если серые кубы не цепляют, никакой скин не спасёт. Хотим узнать это на первой неделе.',
      cta: 'Пощупать прототип',
    },
  },
  {
    id: 'exp2',
    name: 'Experiment 02',
    status: 'started',
    build: '—',
    empty: true,
    placeholder: { en: 'Empty dish. Something will grow here.', ru: 'Пустая чашка. Здесь что-то вырастет' },
    hue: 200,         // cool teal
    accentCell: 'var(--lab-yellow)',
    en: {
      statusLabel: 'Just Started',
      tagline: 'An idea pulled fresh from the incubator.',
      desc: 'Three days old. We are not sure it works yet — that is exactly the point. Follow along while it is still messy and shapeless.',
      cta: 'Watch it grow',
    },
    ru: {
      statusLabel: 'Только начали',
      tagline: 'Идея, только что из инкубатора.',
      desc: 'Ей три дня. Мы пока не уверены, что она работает — и в этом весь смысл. Следи, пока она ещё бесформенная и сырая.',
      cta: 'Наблюдать за ростом',
    },
  },
];

const PETRI_I18N = {
  en: {
    nav: { games: 'Games', approach: 'Approach', services: 'Services', about: 'Studio', join: 'Join' },
    routes: { home: 'Home', projects: 'Games', services: 'Services', about: 'Studio', contact: 'Join' },

    hero: {
      tag: 'Live experiments · shipping now',
      l1: 'Games grown',
      l2: 'in the',
      l3: 'lab',
      accentWord: 'lab',
      lede: 'We build small experimental games and put them in players’ hands from day one. No years of waiting — one bold idea, a working build, and real emotions right away.',
      cta1: 'See the games',
      cta2: 'Work with us',
      stats: [
        { n: '3', l: 'live experiments' },
        { n: '1', l: 'idea at a time' },
        { n: '∞', l: 'iterations' },
      ],
    },
    homeApproach: {
      kicker: '01 — How we work',
      title: 'One idea at a time. Shipped raw',
      lede: 'The best polish is real players. A working prototype people already love beats any perfect plan.',
      items: [
        { i: 'A', h: 'One idea at a time', p: 'We take one thing and stay with it until we get an answer. Focus over breadth.' },
        { i: 'B', h: 'Working build first', p: 'A playable version beats a perfect plan. A bug is an answer — just an unexpected one.' },
        { i: 'C', h: 'Feedback decides', p: 'Not "we think it\u2019s cool" — how many players reached the end of the level. Time, not words.' },
        { i: 'D', h: 'AI where it fits', p: 'Routine to the machine, decisions to us. So we can think about what matters.' },
      ],
    },
    homeProjects: {
      kicker: '02 — In the dishes',
      title: 'What\u2019s growing right now',
      lede: 'Three experiments at different stages — each one making us sharper. We grow our games in the open, together with players.',
      all: 'All games',
    },
    mission: {
      kicker: 'Mission',
      q1: 'Make the games big studios ',
      qaccent: 'won\u2019t touch',
      q2: '. Test them on living people — not on slides',
    },

    projectsPage: {
      kicker: 'The lab',
      title: 'Current experiments',
      lede: 'Everything we’re growing, and the stage it’s at. We build in the open and share every step of the journey.',
      legendTitle: 'Stages',
      legend: [
        { k: 'Just Started', v: 'Days old. Shape unclear.' },
        { k: 'Prototype', v: 'Core loop, no skin yet.' },
        { k: 'In Testing', v: 'Players in, feedback flowing.' },
        { k: 'Live', v: 'Out in the world.' },
      ],
      buildLabel: 'Build',
    },

    aboutPage: {
      kicker: 'Who we are',
      title: 'A small team running big experiments',
      lede: 'Petri Games makes small experimental games and ships them to real players fast. We don\u2019t plan for years — we take one idea, build a minimal working version, and watch what happens.',
      audienceKicker: '02 — Who it\u2019s for',
      audienceTitle: 'Built for people tired of the noise',
      audienceFoot: 'What unites them: they value substance over packaging, they\u2019re tired of the noise, and they respect anyone who works honestly and doesn\u2019t pretend to be big.',
      voiceKicker: '03 — How we talk',
      voiceTitle: 'The person who texts you at 1am: "hey, the mechanic works"',
      valuesKicker: '04 — Principles',
      valuesTitle: 'How we make decisions',
    },
    audience: [
      {
        en: 'Early Adopters', ru: 'Игроки-исследователи',
        title: { en: 'Explorer players', ru: 'Игроки-исследователи' },
        who: { en: 'People bored of pretty-but-empty games. They dig through itch.io for the new stuff — not because they have to, but because it\u2019s fun.', ru: '' },
        need: { en: 'To be first. Playing a raw prototype isn\u2019t an inconvenience — it\u2019s the point. They want their feedback to change things.', ru: '' },
        give: { en: 'They touch the game first. Their feedback shapes what ships. Not a marketing move — that\u2019s just how it works.', ru: '' },
      },
      {
        en: 'The Observers', ru: 'Идейные последователи',
        title: { en: 'Idea followers', ru: 'Идейные последователи' },
        who: { en: 'Game designers, indie devs, enthusiasts. They follow not a specific game but how a studio thinks and works.', ru: '' },
        need: { en: 'Honesty and transparency. Seeing a small team make decisions — close failures, change course, keep going.', ru: '' },
        give: { en: 'Proof that a small team can work clean and fast if it doesn\u2019t spread itself thin.', ru: '' },
      },
      {
        en: 'Collaborators', ru: 'Потенциальные таланты',
        title: { en: 'Future talent', ru: 'Потенциальные таланты' },
        who: { en: 'Developers, artists, writers tired of bureaucracy. Looking for a place where decisions get made, not approved.', ru: '' },
        need: { en: 'An environment where creative calls stay with the team and routine is automated. Work where you know why you\u2019re here.', ru: '' },
        give: { en: 'A "build together" culture — fast iterations, clear tasks, real influence on what ships.', ru: '' },
      },
    ],
    voice: [
      { h: 'Transparent', p: 'We share the whole journey — wins and lessons alike. Always straight with you.' },
      { h: 'Focused', p: 'No filler. We value the player\u2019s time as much as our own.' },
      { h: 'Inspired', p: 'We love the process as much as the result.' },
    ],
    values: [
      { h: 'Experiment over perfection', p: 'A raw prototype beats a perfect plan. A mistake is an answer — just an unexpected one.' },
      { h: 'The player is the lab tech', p: 'Players are our co-creators. Their time tells us what truly resonates — so we pour our energy into what people love.' },
      { h: 'Honest process', p: 'We say what we’re doing and share every step openly. You always see the real process behind the games.' },
      { h: 'Focus on core fun', p: 'If the grey cubes don\u2019t grab you, pretty textures won\u2019t save it. First we find the reason to press again.' },
      { h: 'Small team, big range', p: 'A small team isn\u2019t a weakness. We decide faster, pivot faster. Routine goes to the machines — so we can think about what matters.' },
    ],

    servicesPage: {
      kicker: 'Petri Games · service for developers',
      title: 'Find out what players think of your game — while there\u2019s still time to fix it',
      lede: 'A structured playtest with a mixed panel of testers: playthrough videos with live commentary plus a questionnaire. You don\u2019t get \u201clike / dislike\u201d — you get a concrete list of what to fix, and in what order.',
      stats: [
        { n: '20+', l: 'testers in our case study' },
        { n: '5+', l: 'audience segments per panel' },
        { n: '2', l: 'formats — your games and rating others' },
        { n: '1', l: 'prioritized fix-list on delivery' },
      ],
      modesKicker: 'Two formats',
      modesTitle: 'For your task',
      modes: [
        { h: 'Prototype validation', p: 'Did the player understand what to do in the first 5 minutes? Where did they stall, where did they want to keep going? We surface blockers and growth points — while they’re still cheap to fix.' },
        { h: 'Investment review', p: 'Would you buy it? At what price? Who would you recommend it to? An independent outside view — numbers and opinions instead of guesses.' },
      ],
      stepsKicker: 'How it works',
      stepsTitle: 'Five steps to a verdict',
      steps: [
        { h: 'Panel assembly', p: 'Genre experts, non-genre players, target audience, a QA eye — just 4 distinct profiles already deliver a stable consensus. The panel’s diversity is the value: you see the full picture, not one opinion.' },
        { h: 'Think-aloud playthrough', p: 'Each tester voices their thoughts while playing: what they like, what confuses them, where they want to press again. These moments are more honest than any form.' },
        { h: 'Genre-specific questionnaire', p: 'Ratings on your genre’s own criteria — narrative, roguelike, action or idle. Plus questions on price, audience and the desire to keep playing.' },
        { h: 'Find what recurs across everyone', p: 'A 3–4 of 4 consensus is an iron signal. Two testers independently proposing the same fix is gold. A one-off opinion is a note, not a priority.' },
        { h: 'Prioritized report — and a measured result', p: 'A clear fix-list: what to fix first, what gives the most effect for the least effort. After the edits, a second round measures what changed.' },
      ],
      caseKicker: 'Real case · 20 iterations',
      caseTitle: 'How a 2D-chan ended up in Omsk',
      caseMeta: 'Visual novel · June 2026 · 20 testers · pros, genre connoisseurs, casual players, QA/UX, co-op Discord sessions',
      caseDesc: 'We started with 4 testers — and got the first stable consensus. Then scaled to 20: a professional gamedev writer, genre connoisseurs, non-genre players, co-op Discord sessions, a Linux/Wine test, a first female perspective. All 20 independently flagged the same strengths — and one shared growth barrier.',
      caseBoxes: [
        { k: 'Unanimous asset (20/20)', v: 'Sprite art, the twist, atmosphere, humor' },
        { k: 'Key growth barrier', v: 'Act two needs stakes and choices' },
        { k: 'Unexpected insight', v: 'Social/co-op format — 4 independent signals' },
        { k: 'Closed fork', v: 'Background style — resolved via the panel' },
      ],
      caseInsights: [
        'The “real vs drawn backgrounds” debate (7 to 4 votes) was closed by one insight: a light grade on real photos — and both camps are happy.',
        'A hidden legal risk surfaced: brand logos and readable license plates in photos — a key signal before a commercial release.',
        'The “hooked → willing to pay more” correlation held: a spread from 100 to 1000 ₽ tracked directly with tester engagement.',
      ],
      deliverKicker: 'What you get',
      deliverTitle: 'On delivery',
      deliverables: [
        'A summary — the essentials about your game in 4–5 lines',
        'A ratings table: every tester × every criterion',
        'A list of strengths — what to lean on and not touch',
        'A prioritized fix-list by “most effect / least effort”',
        'Price and audience guidance — in the players’ own words',
        'Cross-patterns and unexpected insights — what you can’t see without a panel',
        'On a repeat round — an objective measure of progress before and after edits',
      ],
      ctaTitle: 'Get a sample report for free',
      ctaDesc: 'We’ll send the full “Omsk” case report (20 testers) for free — see the format and depth of the breakdown before ordering your own.',
      ctaBtn: 'Request the sample report',
      ctaHref: 'mailto:hello@petrigames.com?subject=Sample%20playtest%20report',
      contactTitle: 'Ready to test your game?',
      contactLede: 'Write to us — we\u2019ll talk through your game, its genre and which tester panel fits best.',
      contactLinks: [
        { k: 'Email', v: 'hello@petrigames.com', href: 'mailto:hello@petrigames.com' },
      ],
    },

    contactPage: {
      kicker: 'Join the experiment',
      title: 'Got a verdict? Want to build?',
      lede: 'Play a build and tell us where to take it next. And if you make things — let’s build together.',
      formTitle: 'Drop us a line',
      name: 'Your name', email: 'Email', role: 'I am a…', message: 'Message',
      roles: ['Player / tester', 'Developer', 'Artist', 'Writer', 'Just curious'],
      send: 'Send it', sending: 'Sending…',
      sentBig: 'Got it.', sentSub: 'We read everything. Expect a reply that sounds like a human — because it is one.',
      directKicker: 'Reach us directly',
      links: [
        { k: 'Email', v: 'hello@petrigames.com', href: 'mailto:hello@petrigames.com' },
      ],
      socialNote: 'Socials will appear as the studio grows — watch the site for updates.',
    },
    footer: {
      tagline: 'Small team. Big experiments.',
      explore: 'Explore', studio: 'Studio', connect: 'Connect',
      rights: '© Petri Games, 2026 ',
      built: '',
    },
  },

  ru: {
    nav: { games: 'Игры', approach: 'Подход', services: 'Наши услуги', about: 'Студия', join: 'Контакты' },
    routes: { home: 'Главная', projects: 'Игры', services: 'Наши услуги', about: 'Студия', contact: 'Контакты' },

    hero: {
      tag: 'Живые эксперименты · выходят сейчас',
      l1: 'Игры,',
      l2: 'выращенные в',
      l3: 'лаборатории',
      accentWord: 'лаборатории',
      lede: 'Создаём небольшие экспериментальные игры и сразу даём их в руки живым игрокам. Никаких лет ожидания — яркая идея, рабочая сборка и живые эмоции с первого дня.',
      cta1: 'Наши игры',
      cta2: 'Работать с нами',
      stats: [
        { n: '3', l: 'живых эксперимента' },
        { n: '1', l: 'идея за раз' },
        { n: '∞', l: 'итераций' },
      ],
    },
    homeApproach: {
      kicker: '01 — Как мы работаем',
      title: 'Одна идея за раз Выпускаем сырым',
      lede: 'Лучшая полировка — это живые игроки. Рабочий прототип, в который уже играют и влюбляются, ценнее любого идеального плана.',
      items: [
        { i: 'A', h: 'Одна идея за раз', p: 'Берём одно — и работаем с ним, пока не получим ответ. Фокус важнее охвата.' },
        { i: 'B', h: 'Сначала рабочая версия', p: 'Играбельная версия лучше идеального плана. Баг — это ответ, просто неожиданный.' },
        { i: 'C', h: 'Фидбек решает', p: 'Не «нам кажется, что круто» — а сколько людей дошло до конца уровня. Время, а не слова.' },
        { i: 'D', h: 'ИИ там, где уместно', p: 'Рутину — машине, решения — нам. Чтобы думать о том, что важно.' },
      ],
    },
    homeProjects: {
      kicker: '02 — В чашках Петри',
      title: 'Что растёт прямо сейчас',
      lede: 'Три эксперимента на разных стадиях — и каждый делает нас сильнее. Мы растим игры открыто, вместе с игроками.',
      all: 'Все игры',
    },
    mission: {
      kicker: 'Миссия',
      q1: 'Делать игры, за которые крупные студии ',
      qaccent: 'не возьмутся',
      q2: '. Проверять их на живых людях — не на слайдах',
    },

    projectsPage: {
      kicker: 'Лаборатория',
      title: 'Текущие эксперименты',
      lede: 'Всё, что мы выращиваем, и стадия, на которой оно сейчас. Мы работаем открыто и делимся каждым шагом пути.',
      legendTitle: 'Стадии',
      legend: [
        { k: 'Только начали', v: 'Несколько дней. Форма неясна.' },
        { k: 'Прототип', v: 'Ядро есть, скина нет.' },
        { k: 'В тестировании', v: 'Игроки внутри, фидбек идёт.' },
        { k: 'Вышла', v: 'Уже в мире.' },
      ],
      buildLabel: 'Сборка',
    },

    aboutPage: {
      kicker: 'Кто мы',
      title: 'Маленькая команда с большими экспериментами',
      lede: 'Petri Games делает небольшие экспериментальные игры и сразу выпускает их на реальных игроков. Не планируем годами — берём одну идею, делаем минимальную рабочую версию, смотрим, что происходит.',
      audienceKicker: '02 — Для кого',
      audienceTitle: 'Для тех, кто устал от шума',
      audienceFoot: 'Что объединяет всех: ценят суть выше упаковки, устали от шума, уважают тех, кто работает честно и не притворяется большим.',
      voiceKicker: '03 — Как мы говорим',
      voiceTitle: 'Тот, кто в час ночи пишет тебе: «слушай, механика заработала»',
      valuesKicker: '04 — Принципы',
      valuesTitle: 'Как мы принимаем решения',
    },
    audience: [
      {
        en: 'Early Adopters', ru: 'Игроки-исследователи',
        title: { en: 'Explorer players', ru: 'Игроки-исследователи' },
        who: { ru: 'Людям надоели красивые, но пустые игры. Роются в новинках на itch.io — не потому что надо, а потому что интересно.', en: '' },
        need: { ru: 'Быть первыми. Играть в сырой прототип для них — не неудобство, а смысл. Хотят, чтобы их фидбек что-то менял.', en: '' },
        give: { ru: 'Они первыми трогают игру руками. Их фидбек меняет то, что выйдет. Это не маркетинговый ход — так оно и работает.', en: '' },
      },
      {
        en: 'The Observers', ru: 'Идейные последователи',
        title: { en: 'Idea followers', ru: 'Идейные последователи' },
        who: { ru: 'Геймдизайнеры, инди-разработчики, энтузиасты. Следят не за конкретной игрой — за тем, как студия думает и работает.', en: '' },
        need: { ru: 'Честность и прозрачность. Видеть, как маленькая команда принимает решения — закрывает неудачи, меняет курс, идёт дальше.', en: '' },
        give: { ru: 'Подтверждение, что маленькая команда может работать чисто и быстро, если не распыляется.', en: '' },
      },
      {
        en: 'Collaborators', ru: 'Потенциальные таланты',
        title: { en: 'Future talent', ru: 'Потенциальные таланты' },
        who: { ru: 'Разработчики, художники, сценаристы, которым надоела бюрократия. Ищут место, где решения принимаются, а не согласовываются.', en: '' },
        need: { ru: 'Среда, где творческие решения остаются с командой, а рутина автоматизирована. Работа, где понятно, зачем ты здесь.', en: '' },
        give: { ru: 'Культура «строим вместе» — быстрые итерации, понятные задачи, реальное влияние на то, что выходит.', en: '' },
      },
    ],
    voice: [
      { h: 'Прозрачно', p: 'Делимся всем путём — и победами, и уроками. Всегда честно и по-человечески.' },
      { h: 'Сфокусированно', p: 'Никакой воды. Ценим время игрока так же, как своё.' },
      { h: 'Воодушевлённо', p: 'Любим процесс не меньше результата.' },
    ],
    values: [
      { h: 'Эксперимент важнее идеала', p: 'Сырой прототип лучше, чем идеальный план. Ошибка — это ответ, просто неожиданный.' },
      { h: 'Игрок — главный лаборант', p: 'Игрок — наш соавтор. Время игроков подсказывает, что по-настоящему цепляет, — и мы вкладываемся в то, что любят.' },
      { h: 'Честность процесса', p: 'Говорим, что делаем, и открыто показываем каждый шаг. Вы всегда видите настоящий процесс за играми.' },
      { h: 'Фокус на ядре — Core Fun', p: 'Если серые кубы не цепляют — красивые текстуры не спасут. Сначала ищем то, ради чего хочется нажать ещё раз.' },
      { h: 'Маленькая команда — большие возможности', p: 'Маленькая команда не слабость. Решаем быстрее, меняем курс быстрее. Рутину отдаём машинам — чтобы думать о важном.' },
    ],

    servicesPage: {
      kicker: 'Petri Games · услуга для разработчиков',
      title: 'Узнайте, что игроки думают о вашей игре — пока не поздно это исправить',
      lede: 'Структурированный плейтест с разнопрофильной панелью тестировщиков: видео прохождения с живыми комментариями плюс анкета. На выходе — не «нравится / не нравится», а конкретный список того, что чинить, и в каком порядке.',
      stats: [
        { n: '20+', l: 'тестировщиков в нашем кейсе' },
        { n: '5+', l: 'сегментов аудитории в панели' },
        { n: '2', l: 'формата — свои игры и оценка чужих' },
        { n: '1', l: 'фикс-лист с приоритетами на выходе' },
      ],
      modesKicker: 'Два формата',
      modesTitle: 'Под вашу задачу',
      modes: [
        { h: 'Валидация прототипа', p: 'Понял ли игрок, что делать, за первые 5 минут? Где застрял, где захотел продолжить? Выявляем блокеры и точки роста — пока ещё легко исправить.' },
        { h: 'Инвест-оценка игры', p: 'Купил бы? По какой цене? Кому посоветовал бы? Независимый взгляд со стороны — цифры и мнения вместо догадок.' },
      ],
      stepsKicker: 'Как это работает',
      stepsTitle: 'Пять шагов до вердикта',
      steps: [
        { h: 'Сборка панели', p: 'Эксперты жанра, не-жанровые игроки, целевая аудитория, QA-взгляд — уже 4 разных профиля дают устойчивый консенсус. Разнообразие панели и есть ценность: вы видите не одно мнение, а полную картину.' },
        { h: 'Прохождение с комментариями вслух', p: 'Каждый тестировщик проговаривает мысли вслух во время игры: что нравится, что смущает, где хочется нажать ещё раз. Эти моменты честнее любой анкеты.' },
        { h: 'Структурная анкета под жанр', p: 'Оценки по критериям именно вашего жанра — нарратив, рогалик, экшн или idle. Плюс вопросы про цену, аудиторию и желание играть дальше.' },
        { h: 'Находим то, что повторяется у всех', p: 'Консенсус 3–4 тестировщиков из 4 — железный сигнал. Если двое независимо предложили одно решение — это золото. Разовое мнение — заметка, не приоритет.' },
        { h: 'Отчёт с приоритетами — и замер результата', p: 'Чёткий фикс-лист: что исправить первым, что даёт максимальный эффект при минимальных затратах. После правок — второй раунд: измеряем, что изменилось.' },
      ],
      caseKicker: 'Реальный кейс · 20 итераций',
      caseTitle: 'Как 2D-тян попала в Омск',
      caseMeta: 'Визуальная новелла · июнь 2026 · 20 тестировщиков · профессионалы, знатоки жанра, казуальные игроки, QA/UX, кооп-сессии по Discord',
      caseDesc: 'Начали с 4 тестировщиков — получили первый устойчивый консенсус. Расширили до 20: профессиональный сценарист-геймдев, знатоки жанра, не-жанровые игроки, кооп-сессии по Discord, тест на Linux/Wine, первый женский взгляд. Все 20 независимо отметили одни и те же сильные стороны — и один общий барьер роста.',
      caseBoxes: [
        { k: 'Единогласный актив (20/20)', v: 'Арт спрайтов, твист, атмосфера, юмор' },
        { k: 'Ключевой барьер роста', v: 'Второй акт — нужны ставки и выборы' },
        { k: 'Неожиданный инсайт', v: 'Соц/кооп формат — 4 независимых сигнала' },
        { k: 'Закрытая развилка', v: 'Стиль фонов — решение найдено через панель' },
      ],
      caseInsights: [
        'Спор «реальные vs рисованные фоны» (7 против 4 голосов) закрыт одним инсайтом: лёгкий грейдинг реальных фото — и оба лагеря довольны.',
        'Обнаружен скрытый юридический риск: логотипы брендов и читаемые автомобильные номера на фото — важный сигнал перед коммерческим релизом.',
        'Корреляция «зацепило → готов платить больше» подтверждена: разброс от 100 до 1000 ₽ напрямую связан с вовлечённостью тестировщика.',
      ],
      deliverKicker: 'Что вы получаете',
      deliverTitle: 'На выходе',
      deliverables: [
        'Краткий вывод — главное о вашей игре в 4–5 строках',
        'Сводная таблица оценок: каждый тестировщик × каждый критерий',
        'Список сильных сторон — на что опираться и что не трогать',
        'Приоритизированный фикс-лист по принципу «максимум эффекта / минимум усилий»',
        'Ориентиры по цене и аудитории — словами самих игроков',
        'Кросс-паттерны и неожиданные инсайты — то, что не видно без панели',
        'При повторном раунде — объективный замер прогресса до и после правок',
      ],
      ctaTitle: 'Получите образец отчёта бесплатно',
      ctaDesc: 'Отправим полный отчёт по кейсу «Омск» (20 тестировщиков) бесплатно — увидите формат и глубину разбора до того, как закажете свой.',
      ctaBtn: 'Запросить образец отчёта',
      ctaHref: 'mailto:hello@petrigames.com?subject=Хочу%20образец%20отчёта%20по%20плейтесту',
      contactTitle: 'Готовы протестировать свою игру?',
      contactLede: 'Напишите нам — обсудим вашу игру, жанр и какая панель тестировщиков подойдёт лучше всего.',
      contactLinks: [
        { k: 'Email', v: 'hello@petrigames.com', href: 'mailto:hello@petrigames.com' },
      ],
    },

    contactPage: {
      kicker: 'Присоединиться к эксперименту',
      title: 'Есть вердикт? Хочешь строить?',
      lede: 'Поиграй в сборку и подскажи, куда двигаться дальше. А если ты что-то создаёшь — давай строить вместе.',
      formTitle: 'Напиши нам',
      name: 'Имя', email: 'Email', role: 'Я…', message: 'Сообщение',
      roles: ['Игрок / тестер', 'Разработчик', 'Художник', 'Сценарист', 'Просто интересно'],
      send: 'Отправить', sending: 'Отправляем…',
      sentBig: 'Получили.', sentSub: 'Читаем всё. Ответим так, будто пишет человек — потому что так и есть.',
      directKicker: 'Напрямую',
      links: [
        { k: 'Почта', v: 'hello@petrigames.com', href: 'mailto:hello@petrigames.com' },
      ],
      socialNote: 'Соцсети появятся по мере роста студии — следи за обновлениями на сайте.',
    },
    footer: {
      tagline: 'Маленькая команда. Большие эксперименты',
      explore: 'Разделы', studio: 'Студия', connect: 'Контакты',
      rights: '© Petri Games, 2026 ',
      built: 'Без роадмапов. Только сборки.',
    },
  },
};

Object.assign(window, { lemniscatePath, PETRI_PROJECTS, PETRI_I18N });
