// ──────────────────────────────────────────────────────────────
// i18n-content — heavier page content: CV, photographs, essays.
// photographs & essays are flagged as AI machine-translation via <AINote/>.
// ──────────────────────────────────────────────────────────────

// Banner shown atop photographs / essays when a non-English language is active.
function AINote() {
  const lang = useLang();
  if (lang === 'en') return null;
  const c = tr('chrome', lang);
  return (
    <div className="pp-rv" style={{
      display: 'flex', alignItems: 'center', gap: 12, margin: '0 0 28px',
      padding: '10px 14px', border: '1px dashed var(--line)', background: 'var(--sub)',
      fontSize: 11.5, color: 'var(--mute)', letterSpacing: '0.02em',
    }}>
      <span className="red" style={{ fontSize: 13 }}>✦</span>
      <span style={{ textTransform: 'uppercase', letterSpacing: '0.12em', color: 'var(--ink)' }}>AI</span>
      <span>{c.aiNote}</span>
    </div>
  );
}

// ── CV chrome + counts ────────────────────────────────────────
const I18N_CV = {
  en: {
    title: `Curriculum <span class="red">v</span>itæ`, updated: 'last updated · 2026.08.28', download: 'download as PDF →',
    intro: `Reverse-chronological.`,
    sWork: 'Work', sEdu: 'Education', sVol: 'Volunteering', sAwards: 'Awards & marks', sSkills: 'Skills',
    roles: (n) => `${n} roles`, degrees: (n) => `${n} degrees`,
  },
  uk: {
    title: `Curriculum <span class="red">v</span>itæ`, updated: 'оновлено · 2026.08.28', download: 'завантажити PDF →',
    intro: `Зворотна хронологія.`,
    sWork: 'Робота', sEdu: 'Освіта', sVol: 'Волонтерство', sAwards: 'Нагороди й оцінки', sSkills: 'Навички',
    roles: (n) => `${n} ролей`, degrees: (n) => `${n} дипломи`,
  },
  ru: {
    title: `Curriculum <span class="red">v</span>itæ`, updated: 'обновлено · 2026.08.28', download: 'скачать PDF →',
    intro: `Обратная хронология.`,
    sWork: 'Работа', sEdu: 'Образование', sVol: 'Волонтёрство', sAwards: 'Награды и оценки', sSkills: 'Навыки',
    roles: (n) => `${n} ролей`, degrees: (n) => `${n} диплома`,
  },
  sk: {
    title: `Curriculum <span class="red">v</span>itæ`, updated: 'aktualizované · 2026.08.28', download: 'stiahnuť ako PDF →',
    intro: `Obrátene chronologicky.`,
    sWork: 'Práca', sEdu: 'Vzdelanie', sVol: 'Dobrovoľníctvo', sAwards: 'Ocenenia a známky', sSkills: 'Zručnosti',
    roles: (n) => `${n} pozícií`, degrees: (n) => `${n} tituly`,
  },
  sv: {
    title: `Curriculum <span class="red">v</span>itæ`, updated: 'senast uppdaterad · 2026.08.28', download: 'ladda ner som PDF →',
    intro: `Omvänd kronologi.`,
    sWork: 'Arbete', sEdu: 'Utbildning', sVol: 'Ideellt', sAwards: 'Utmärkelser & betyg', sSkills: 'Färdigheter',
    roles: (n) => `${n} roller`, degrees: (n) => `${n} examina`,
  },
};

// Translated CV entries. Orgs / dates / tool tokens stay as proper nouns; the
// readable role names, bullets, notes, awards and skill-group names localise.
const CV_TR = {
  uk: {
    work: [
      { role: 'Асистент проєкту', kind: 'Контракт', bullets: [
        'Побудував автоматизований процес обробки рекомендаційних листів студентів; скоротив адмінчас на ~20%.',
        'Загальна оптимізація адміністрування дослідницького центру, який, відверто, тримався на ентузіазмі.',
      ] },
      { role: 'Фотограф-фрилансер', kind: 'Фриланс' },
      { role: 'Асистент-дослідник', kind: 'Часткова зайнятість', bullets: [
        'Побудував play-fairway конвеєр для низькотемпературної геотермії у Віденському басейні.',
        'ArcPy-автоматизація рутинних ГІС-завдань. Частково автоматизований веб-скрейпінг для вхідних даних.',
        'Бази даних, аналіз в ArcGIS / Excel / Origin. Підсумкові схеми в CorelDraw + ArcGIS Pro.',
      ] },
      { role: 'Лаборант', kind: 'Повна зайнятість', bullets: [
        'Похідні тіазолового помаранчевого для глибоко-червоної / ІЧ фотодинамічної терапії та біовізуалізації.',
        'Спектроскопія поглинання та емісії. Підготовка спектрів до публікації.',
        'Написав SOP зі спектроскопії, якими тепер користуються аспіранти. Робив синтез, що не вдавався, поки не почав вдаватися.',
      ] },
    ],
    edu: [
      { deg: 'Магістр, екологічні студії та наука про сталий розвиток', note: 'Стипендіат Swedish Institute Global Professionals.' },
      { deg: 'Бакалавр, екологічні студії', note: 'Середній бал 1.00 · 99-й перцентиль · кілька стипендій.' },
    ],
    vol: [
      { role: 'Фотографія · Відеозйомка', note: '' },
      { role: 'Співпрезидент · організатор', note: '' },
      { role: 'Представник студентів і з охорони праці', note: '' },
      { role: 'Співзасновник · головний редактор', note: 'Команда 20+; неформальна освіта для української молоді.' },
      { role: 'Навчальний ментор', note: 'Заповнення прогалин, які війна лишила в біології та хімії учнів.' },
      { role: 'Співзасновник · головний редактор', note: 'Команда з 15 осіб. Неформальна освіта.' },
      { role: 'Дослідник-стажист', note: 'Польові обстеження для створення ландшафтної заповідної території.' },
    ],
    awards: [
      'Стипендія Шведського інституту — Global Professionals',
      'Бакалаврат завершено в топ-1%, середній бал 1.00',
      'Наймолодший співробітник природничого факультету Університету Коменського',
      'Автоматизував ~15% рутинної ГІС-роботи в LAGEA',
      'Дві статті з міського сталого планування, Мала академія наук України',
      'Багаторазовий переможець — всеукраїнські олімпіади з екології та природничих наук',
    ],
    skills: [
      { group: 'Інструменти' }, { group: 'Лабораторія', items: ['UV/Vis', 'Флуоресценція', 'Органічний синтез', 'Написання SOP'] },
      { group: 'Гнучкі', items: ['Редагування', 'Публічні виступи', 'Керування командою', 'Дизайн процесів'] },
      { group: 'Мови' },
    ],
  },
  ru: {
    work: [
      { role: 'Ассистент проекта', kind: 'Контракт', bullets: [
        'Построил автоматизированный процесс обработки рекомендательных писем студентов; сократил админвремя на ~20%.',
        'Общая оптимизация администрирования исследовательского центра, который, откровенно, держался на энтузиазме.',
      ] },
      { role: 'Фотограф-фрилансер', kind: 'Фриланс' },
      { role: 'Научный ассистент', kind: 'Частичная занятость', bullets: [
        'Построил play-fairway конвейер для низкотемпературной геотермии в Венском бассейне.',
        'ArcPy-автоматизация рутинных ГИС-задач. Частично автоматизированный веб-скрейпинг входных данных.',
        'Базы данных, анализ в ArcGIS / Excel / Origin. Итоговые схемы в CorelDraw + ArcGIS Pro.',
      ] },
      { role: 'Лаборант', kind: 'Полная занятость', bullets: [
        'Производные тиазолового оранжевого для глубоко-красной / ИК фотодинамической терапии и биовизуализации.',
        'Спектроскопия поглощения и эмиссии. Подготовка спектров к публикации.',
        'Написал SOP по спектроскопии, которыми теперь пользуются аспиранты. Делал синтез, что не давался, пока не начал получаться.',
      ] },
    ],
    edu: [
      { deg: 'Магистр, экологические исследования и наука об устойчивом развитии', note: 'Стипендиат Swedish Institute Global Professionals.' },
      { deg: 'Бакалавр, экологические исследования', note: 'Средний балл 1.00 · 99-й перцентиль · несколько стипендий.' },
    ],
    vol: [
      { role: 'Фотография · Видеосъёмка', note: '' },
      { role: 'Сопрезидент · организатор', note: '' },
      { role: 'Представитель студентов и по охране труда', note: '' },
      { role: 'Соучредитель · главный редактор', note: 'Команда 20+; неформальное образование для украинской молодёжи.' },
      { role: 'Учебный ментор', note: 'Заполнение пробелов, оставленных войной в биологии и химии учеников.' },
      { role: 'Соучредитель · главный редактор', note: 'Команда из 15 человек. Неформальное образование.' },
      { role: 'Исследователь-стажёр', note: 'Полевые обследования для создания ландшафтной охраняемой территории.' },
    ],
    awards: [
      'Стипендия Шведского института — Global Professionals',
      'Бакалавриат окончен в топ-1%, средний балл 1.00',
      'Самый молодой сотрудник факультета естественных наук Университета Коменского',
      'Автоматизировал ~15% рутинной ГИС-работы в LAGEA',
      'Две статьи о городском устойчивом планировании, Малая академия наук Украины',
      'Многократный победитель — всеукраинские олимпиады по экологии и естественным наукам',
    ],
    skills: [
      { group: 'Инструменты' }, { group: 'Лаборатория', items: ['UV/Vis', 'Флуоресценция', 'Органический синтез', 'Написание SOP'] },
      { group: 'Гибкие', items: ['Редактирование', 'Публичные выступления', 'Управление командой', 'Дизайн процессов'] },
      { group: 'Языки' },
    ],
  },
  sk: {
    work: [
      { role: 'Asistent projektu', kind: 'Kontrakt', bullets: [
        'Vytvoril automatizovaný proces spracovania odporúčacích listov študentov; znížil administratívny čas o ~20%.',
        'Všeobecná optimalizácia administratívy výskumného centra, ktoré úprimne fungovalo na dobrej vôli.',
      ] },
      { role: 'Fotograf na voľnej nohe', kind: 'Na voľnej nohe' },
      { role: 'Výskumný asistent', kind: 'Čiastočný úväzok', bullets: [
        'Vytvoril play-fairway proces pre nízkoteplotnú geotermiu vo Viedenskej panve.',
        'ArcPy automatizácia rutinných GIS úloh. Čiastočne automatizovaný web-scraping vstupov.',
        'Databázy, analýza v ArcGIS / Excel / Origin. Finálne schémy v CorelDraw + ArcGIS Pro.',
      ] },
      { role: 'Laboratórny technik', kind: 'Plný úväzok', bullets: [
        'Deriváty tiazolovej oranžovej pre hlboko-červenú / NIR fotodynamickú terapiu a biozobrazovanie.',
        'Absorpčná a emisná spektroskopia. Príprava spektier na publikáciu.',
        'Napísal SOP pre spektroskopiu, ktoré teraz používajú doktorandi. Robil syntézu, ktorá mi nešla, kým nezačala ísť.',
      ] },
    ],
    edu: [
      { deg: 'Mgr., environmentálne štúdiá a veda o udržateľnosti', note: 'Štipendista Swedish Institute Global Professionals.' },
      { deg: 'Bc., environmentálne štúdiá', note: 'Priemer 1.00 · 99. percentil · viacero štipendií.' },
    ],
    vol: [
      { role: 'Fotografia · Videotvorba', note: '' },
      { role: 'Spoluprezident · organizátor', note: '' },
      { role: 'Zástupca študentov a pre BOZP', note: '' },
      { role: 'Spoluzakladateľ · šéfredaktor', note: 'Tím 20+; neformálne vzdelávanie ukrajinskej mládeže.' },
      { role: 'Študijný mentor', note: 'Dopĺňanie medzier, ktoré vojna spôsobila v biológii a chémii študentov.' },
      { role: 'Spoluzakladateľ · šéfredaktor', note: '15-členný tím. Neformálne vzdelávanie.' },
      { role: 'Výskumný stážista', note: 'Terénne prieskumy pre vznik chránenej krajinnej oblasti.' },
    ],
    awards: [
      'Štipendium Švédskeho inštitútu — Global Professionals',
      'Bakalárske štúdium v top 1%, priemer 1.00',
      'Najmladší zamestnanec Prírodovedeckej fakulty Univerzity Komenského',
      'Automatizoval ~15% rutinnej GIS práce v LAGEA',
      'Dve práce o mestskom udržateľnom plánovaní, Malá akadémia vied Ukrajiny',
      'Viacnásobný víťaz — celoukrajinské olympiády z environmentálnych a prírodných vied',
    ],
    skills: [
      { group: 'Nástroje' }, { group: 'Laboratórium', items: ['UV/Vis', 'Fluorescencia', 'Organická syntéza', 'Tvorba SOP'] },
      { group: 'Mäkké', items: ['Redigovanie', 'Verejné vystupovanie', 'Vedenie tímu', 'Návrh procesov'] },
      { group: 'Jazyky' },
    ],
  },
  sv: {
    work: [
      { role: 'Projektassistent', kind: 'Kontrakt', bullets: [
        'Byggde ett automatiserat flöde för hantering av studenters rekommendationsbrev; minskade admintiden ~20%.',
        'Allmän administrativ optimering av ett forskningscentrum som ärligt talat gick på god vilja.',
      ] },
      { role: 'Frilansfotograf', kind: 'Frilans' },
      { role: 'Forskningsassistent', kind: 'Deltid', bullets: [
        'Byggde en play-fairway-pipeline för lågtemperatur-geotermi i Wienbäckenet.',
        'ArcPy-automatisering av rutinmässiga GIS-sysslor. Delvis automatiserad web-scraping av indata.',
        'Databaser, analys i ArcGIS / Excel / Origin. Slutfigurer i CorelDraw + ArcGIS Pro.',
      ] },
      { role: 'Laboratorietekniker', kind: 'Heltid', bullets: [
        'Tiazol-orange-derivat för djupröd / NIR fotodynamisk terapi och bildåtergivning.',
        'Absorptions- och emissionsspektroskopi. Spektraberedning för publicering.',
        'Skrev spektroskopi-SOP:er som doktorander nu använder. Gjorde syntesen jag var dålig på tills jag blev bra.',
      ] },
    ],
    edu: [
      { deg: 'Master, miljöstudier & hållbarhetsvetenskap', note: 'Swedish Institute Global Professionals-stipendiat.' },
      { deg: 'Kandidat, miljöstudier', note: 'Snitt 1.00 · 99:e percentilen · flera stipendier.' },
    ],
    vol: [
      { role: 'Foto · Video', note: '' },
      { role: 'Medordförande · arrangör', note: '' },
      { role: 'Student- och arbetsmiljöombud', note: '' },
      { role: 'Medgrundare · chefredaktör', note: 'Team på 20+; icke-formell utbildning för ukrainsk ungdom.' },
      { role: 'Studiementor', note: 'Fyller luckorna kriget lämnat i elevernas biologi och kemi.' },
      { role: 'Medgrundare · chefredaktör', note: '15 personer i teamet. Icke-formell utbildning.' },
      { role: 'Forskningspraktikant', note: 'Fältinventeringar mot ett landskapsskyddat område.' },
    ],
    awards: [
      'Svenska institutets stipendium — Global Professionals',
      'Kandidat avslutad i topp 1%, snitt 1.00',
      'Yngsta anställda vid Naturvetenskapliga fakulteten, Comenius-universitetet',
      'Automatiserade ~15% av rutinmässigt GIS-arbete på LAGEA',
      'Två artiklar om hållbar stadsplanering, Ukrainas Lilla vetenskapsakademi',
      'Flerfaldig vinnare — Ukrainas nationella olympiader i miljö- och naturvetenskap',
    ],
    skills: [
      { group: 'Verktyg' }, { group: 'Labb', items: ['UV/Vis', 'Fluorescens', 'Organisk syntes', 'SOP-författande'] },
      { group: 'Mjuka', items: ['Redigering', 'Tala inför publik', 'Teamledning', 'Processdesign'] },
      { group: 'Språk' },
    ],
  },
};

// ── photographs (index + series detail) ───────────────────────
const I18N_PHOTOS = {
  en: {
    kicker: (n) => `~/ostroukhov/photographs · ${n} series`, title: `Photo<span class="red">g</span>raphs`,
    intro: 'Mostly film. Mostly fieldwork. Sometimes whichever city I was being defeated by that month.',
    cNo: 'no.', cSeries: 'series', framesView: (n) => `${n} frames · view series →`,
    allSeries: '← all series', shown: (a, b) => `${a}/${b} frames shown`, seriesNo: 'series no.',
    pShot: 'shot', pLoc: 'location', pFormat: 'format', pFrames: 'frames', pScanner: 'scanner',
    locVal: 'Vienna Basin · SK/AT', framesVal: (n) => `${n} kept of 187`, scannerVal: 'Plustek 8200i · DSLR copy',
    fig: 'fig.', lbHint: 'click any frame to open in lightbox · ←/→ to navigate',
    colophon: 'colophon',
    colophonText: `Made between June and September 2024 during fieldwork for the play-fairway project at <b style="color:var(--ink)">LAGEA, VŠB-TU Ostrava</b>. None of these are research images; they are what was happening in the margins.`,
    next: 'next', nextLink: '02 — Donetsk, before →', close: 'esc · close',
  },
  uk: {
    kicker: (n) => `~/ostroukhov/фотографії · ${n} серій`, title: `Фото<span class="red">г</span>рафії`,
    intro: 'Переважно плівка. Переважно польова робота. Іноді — місто, що перемагало мене того місяця.',
    cNo: '№', cSeries: 'серія', framesView: (n) => `${n} кадрів · дивитися серію →`,
    allSeries: '← усі серії', shown: (a, b) => `показано ${a}/${b} кадрів`, seriesNo: 'серія №',
    pShot: 'знято', pLoc: 'локація', pFormat: 'формат', pFrames: 'кадри', pScanner: 'сканер',
    locVal: 'Віденський басейн · SK/AT', framesVal: (n) => `${n} відібрано зі 187`, scannerVal: 'Plustek 8200i · DSLR-копія',
    fig: 'рис.', lbHint: 'клік по кадру відкриває лайтбокс · ←/→ для навігації',
    colophon: 'колофон',
    colophonText: `Знято з червня по вересень 2024 під час польових робіт для play-fairway проєкту в <b style="color:var(--ink)">LAGEA, VŠB-TU Ostrava</b>. Жодне з цих фото не є дослідницьким; це те, що відбувалося на полях.`,
    next: 'далі', nextLink: '02 — Донецьк, раніше →', close: 'esc · закрити',
  },
  ru: {
    kicker: (n) => `~/ostroukhov/фотографии · ${n} серий`, title: `Фото<span class="red">г</span>рафии`,
    intro: 'В основном плёнка. В основном полевая работа. Иногда — город, что побеждал меня в тот месяц.',
    cNo: '№', cSeries: 'серия', framesView: (n) => `${n} кадров · смотреть серию →`,
    allSeries: '← все серии', shown: (a, b) => `показано ${a}/${b} кадров`, seriesNo: 'серия №',
    pShot: 'снято', pLoc: 'локация', pFormat: 'формат', pFrames: 'кадры', pScanner: 'сканер',
    locVal: 'Венский бассейн · SK/AT', framesVal: (n) => `${n} отобрано из 187`, scannerVal: 'Plustek 8200i · DSLR-копия',
    fig: 'рис.', lbHint: 'клик по кадру открывает лайтбокс · ←/→ для навигации',
    colophon: 'колофон',
    colophonText: `Снято с июня по сентябрь 2024 во время полевых работ для play-fairway проекта в <b style="color:var(--ink)">LAGEA, VŠB-TU Ostrava</b>. Ни одно из этих фото не исследовательское; это то, что происходило на полях.`,
    next: 'далее', nextLink: '02 — Донецк, раньше →', close: 'esc · закрыть',
  },
  sk: {
    kicker: (n) => `~/ostroukhov/fotografie · ${n} sérií`, title: `Foto<span class="red">g</span>rafie`,
    intro: 'Väčšinou film. Väčšinou terén. Občas to mesto, ktoré ma ten mesiac práve porážalo.',
    cNo: 'č.', cSeries: 'séria', framesView: (n) => `${n} záberov · pozrieť sériu →`,
    allSeries: '← všetky série', shown: (a, b) => `zobrazených ${a}/${b} záberov`, seriesNo: 'séria č.',
    pShot: 'nasnímané', pLoc: 'lokalita', pFormat: 'formát', pFrames: 'zábery', pScanner: 'skener',
    locVal: 'Viedenská panva · SK/AT', framesVal: (n) => `${n} z 187 ponechaných`, scannerVal: 'Plustek 8200i · DSLR kópia',
    fig: 'obr.', lbHint: 'klik na záber otvorí lightbox · ←/→ na navigáciu',
    colophon: 'kolofón',
    colophonText: `Nasnímané od júna do septembra 2024 počas terénnych prác pre play-fairway projekt v <b style="color:var(--ink)">LAGEA, VŠB-TU Ostrava</b>. Žiadna z týchto fotiek nie je výskumná; je to to, čo sa dialo na okraji.`,
    next: 'ďalej', nextLink: '02 — Doneck, predtým →', close: 'esc · zavrieť',
  },
  sv: {
    kicker: (n) => `~/ostroukhov/fotografier · ${n} serier`, title: `Foto<span class="red">g</span>rafier`,
    intro: 'Mest film. Mest fältarbete. Ibland vilken stad som än besegrade mig den månaden.',
    cNo: 'nr.', cSeries: 'serie', framesView: (n) => `${n} bildrutor · visa serie →`,
    allSeries: '← alla serier', shown: (a, b) => `${a}/${b} bildrutor visas`, seriesNo: 'serie nr.',
    pShot: 'tagen', pLoc: 'plats', pFormat: 'format', pFrames: 'bildrutor', pScanner: 'skanner',
    locVal: 'Wienbäckenet · SK/AT', framesVal: (n) => `${n} behållna av 187`, scannerVal: 'Plustek 8200i · DSLR-kopia',
    fig: 'fig.', lbHint: 'klicka på en bildruta för lightbox · ←/→ för att navigera',
    colophon: 'kolofon',
    colophonText: `Tagna mellan juni och september 2024 under fältarbete för play-fairway-projektet vid <b style="color:var(--ink)">LAGEA, VŠB-TU Ostrava</b>. Inga av dessa är forskningsbilder; det är vad som hände i marginalen.`,
    next: 'nästa', nextLink: '02 — Donetsk, förut →', close: 'esc · stäng',
  },
};

// ── essays (index + detail) ───────────────────────────────────
const I18N_ESSAYS = {
  en: {
    kicker: (n) => `~/ostroukhov/essays · ${n} pieces`, title: `Ess<span class="red">a</span>ys`,
    intro: 'Two collections — pieces I wrote, and pieces I edited and published with my teams. Most are in Ukrainian; titles here are translated.',
    back: '← essays', readMeta: (date, read, tags) => `${date} · ${read} read · ${tags}`,
    sidenotes: 'sidenotes', further: 'further reading', cite: 'cite',
    body: `<p class="dropcap">There is a habit in our discipline of treating sustainability as a question about facts. We measure carbon, we model land-use, we run the integrated assessment models again, we put error bars on the error bars. And then we present this to a minister, who nods, and changes nothing.</p>
<p>I want to suggest that the bottleneck is not the measurement. <span class="red">We have measured enough.</span> The bottleneck is that "sustainable" is not a property of an ecosystem; it is a property of a deal. Between generations, between countries, between the people who pay and the people who get paid.</p>
<h2>1. What the IAM cannot tell you</h2>
<p>The integrated assessment model is a beautiful machine. It can tell you the cheapest pathway from where we are to a two-degree world, conditional on a few thousand assumptions. What it cannot tell you is which assumption a Polish coal-mining town considers negotiable.<sup class="red">[1]</sup></p>
<p>I have, in my modest career so far, watched a play-fairway model for geothermal development in the Vienna Basin produce an excellent map of where the warm rocks are. I have also watched a municipal council in eastern Slovakia decide, in twenty minutes, that they would rather not drill there because their grandmother's well is on that hill.</p>
<p>Both of these facts are correct. Only one of them shows up in the journal article.</p>
<h2>2. The methods trap</h2>
<p>Sustainability science has, in its desire to be taken seriously, borrowed almost all of its prestige cues from the natural sciences. Peer review. Reproducibility. Quantitative everything. This is fine, mostly. But it has produced a generation of researchers — I include myself — who are better at modelling a transition than at <em>negotiating</em> one.<sup class="red">[2]</sup></p>
<p>The result is a field that publishes very competently about a problem it has structurally disabled itself from solving.</p>
<h2>3. So what should we do, then</h2>
<p>I do not have a clean answer. (If I did, I would not be writing essays at midnight; I would be a deputy minister somewhere, doing.) But I have a working suspicion, which is this: the next useful sustainability researcher is one who can read a budget, draft a regulation, and still tell you the lower-bound chlorophyll concentration in the Baltic in March.</p>
<p>This is the discipline I am, slowly, trying to learn. It involves much more sitting in council meetings than the prospectus advertised. <span class="red">I do not regret enrolling.</span></p>`,
    note1: `In Lower Silesia, in 2017, the negotiable thing turned out to be the funeral parlour. The non-negotiable thing turned out to be the bus route.`,
    note2: `See Wesselink &amp; Hoppe, <i>Sci. Public Policy</i> (2020), on "boundary work" in sustainability research — they are kinder about it than I am being here.`,
  },
  uk: {
    kicker: (n) => `~/ostroukhov/есеї · ${n} текстів`, title: `Ес<span class="red">е</span>ї`,
    intro: 'Те, що я вважав правдою достатньо довго, щоб надрукувати. Із приблизно половиною я вже не згоден — у цьому й суть.',
    back: '← есеї', readMeta: (date, read, tags) => `${date} · читати ${read} · ${tags}`,
    sidenotes: 'примітки на полях', further: 'далі читати', cite: 'цитувати',
    body: `<p class="dropcap">У нашій дисципліні є звичка трактувати сталий розвиток як питання фактів. Ми вимірюємо вуглець, моделюємо землекористування, знову проганяємо інтегровані моделі оцінки, ставимо похибки на похибки. А потім показуємо це міністрові, який киває і нічого не змінює.</p>
<p>Я хочу припустити, що вузьке місце — не у вимірюванні. <span class="red">Ми виміряли вже досить.</span> Вузьке місце в тому, що "сталість" — це не властивість екосистеми; це властивість угоди. Між поколіннями, між країнами, між тими, хто платить, і тими, кому платять.</p>
<h2>1. Чого не може сказати вам IAM</h2>
<p>Інтегрована модель оцінки — прекрасна машина. Вона підкаже найдешевший шлях звідси до дводеградусного світу за умови кількох тисяч припущень. Чого вона не скаже — яке припущення польське шахтарське містечко вважає предметом торгу.<sup class="red">[1]</sup></p>
<p>У своїй скромній кар'єрі я бачив, як play-fairway модель геотермального розвитку у Віденському басейні дала чудову карту того, де лежать теплі породи. Я також бачив, як муніципальна рада на сході Словаччини за двадцять хвилин вирішила, що краще не бурити там, бо на тому пагорбі — бабусина криниця.</p>
<p>Обидва ці факти правдиві. Лише один із них потрапляє в журнальну статтю.</p>
<h2>2. Пастка методів</h2>
<p>Наука про сталий розвиток у прагненні бути серйозною запозичила майже всі знаки престижу в природничих наук. Рецензування. Відтворюваність. Усе кількісне. Це здебільшого нормально. Але це породило покоління дослідників — і я серед них, — які краще моделюють перехід, ніж <em>домовляються</em> про нього.<sup class="red">[2]</sup></p>
<p>Як наслідок, маємо галузь, що дуже вправно публікує про проблему, яку структурно позбавила себе здатності розв'язати.</p>
<h2>3. То що ж нам робити</h2>
<p>У мене немає чистої відповіді. (Якби була, я не писав би есеї опівночі; я був би десь заступником міністра й діяв.) Але є робоча підозра: наступний корисний дослідник сталого розвитку — той, хто вміє прочитати бюджет, скласти регламент і все ще назвати вам нижню межу концентрації хлорофілу в Балтиці в березні.</p>
<p>Саме цієї дисципліни я, повільно, намагаюся навчитися. Вона передбачає набагато більше сидіння на засіданнях рад, ніж обіцяв проспект. <span class="red">Я не шкодую, що вступив.</span></p>`,
    note1: `У Нижній Сілезії 2017 року предметом торгу виявилася ритуальна контора. А неторговельним — автобусний маршрут.`,
    note2: `Див. Wesselink &amp; Hoppe, <i>Sci. Public Policy</i> (2020), про "межову роботу" в дослідженнях сталості — вони добріші до неї, ніж я тут.`,
  },
  ru: {
    kicker: (n) => `~/ostroukhov/эссе · ${n} текстов`, title: `Эс<span class="red">с</span>е`,
    intro: 'То, что я считал правдой достаточно долго, чтобы напечатать. Примерно с половиной я уже не согласен — в этом и смысл.',
    back: '← эссе', readMeta: (date, read, tags) => `${date} · читать ${read} · ${tags}`,
    sidenotes: 'примечания на полях', further: 'дальше читать', cite: 'цитировать',
    body: `<p class="dropcap">В нашей дисциплине есть привычка трактовать устойчивость как вопрос фактов. Мы измеряем углерод, моделируем землепользование, снова прогоняем интегрированные модели оценки, ставим погрешности на погрешности. А потом показываем это министру, который кивает и ничего не меняет.</p>
<p>Я хочу предположить, что узкое место не в измерении. <span class="red">Мы измерили уже достаточно.</span> Узкое место в том, что "устойчивость" — не свойство экосистемы; это свойство сделки. Между поколениями, между странами, между теми, кто платит, и теми, кому платят.</p>
<h2>1. Чего не может сказать вам IAM</h2>
<p>Интегрированная модель оценки — прекрасная машина. Она подскажет самый дешёвый путь отсюда к двухградусному миру при условии нескольких тысяч допущений. Чего она не скажет — какое допущение польский шахтёрский городок считает предметом торга.<sup class="red">[1]</sup></p>
<p>В своей скромной карьере я видел, как play-fairway модель геотермального развития в Венском бассейне дала отличную карту того, где лежат тёплые породы. Я также видел, как муниципальный совет на востоке Словакии за двадцать минут решил, что лучше не бурить там, потому что на том холме — бабушкин колодец.</p>
<p>Оба этих факта верны. Лишь один из них попадает в журнальную статью.</p>
<h2>2. Ловушка методов</h2>
<p>Наука об устойчивости в стремлении быть серьёзной заимствовала почти все знаки престижа у естественных наук. Рецензирование. Воспроизводимость. Всё количественное. Это в основном нормально. Но это породило поколение исследователей — и я среди них, — которые лучше моделируют переход, чем <em>договариваются</em> о нём.<sup class="red">[2]</sup></p>
<p>В итоге получаем область, очень умело публикующую о проблеме, которую структурно лишила себя способности решить.</p>
<h2>3. Так что же нам делать</h2>
<p>У меня нет чистого ответа. (Если бы был, я не писал бы эссе в полночь; я был бы где-нибудь замминистра и действовал.) Но есть рабочее подозрение: следующий полезный исследователь устойчивости — тот, кто умеет прочитать бюджет, составить регламент и всё ещё назвать вам нижнюю границу концентрации хлорофилла в Балтике в марте.</p>
<p>Именно этой дисциплине я, медленно, пытаюсь научиться. Она предполагает гораздо больше сидения на заседаниях советов, чем обещал проспект. <span class="red">Я не жалею, что поступил.</span></p>`,
    note1: `В Нижней Силезии в 2017-м предметом торга оказалась ритуальная контора. А неторгуемым — автобусный маршрут.`,
    note2: `См. Wesselink &amp; Hoppe, <i>Sci. Public Policy</i> (2020), о "пограничной работе" в исследованиях устойчивости — они добрее к ней, чем я здесь.`,
  },
  sk: {
    kicker: (n) => `~/ostroukhov/eseje · ${n} textov`, title: `Es<span class="red">e</span>je`,
    intro: 'Veci, ktoré som považoval za pravdivé dosť dlho na to, aby som ich napísal. S približne polovicou už nesúhlasím — a to je celý zmysel.',
    back: '← eseje', readMeta: (date, read, tags) => `${date} · čítanie ${read} · ${tags}`,
    sidenotes: 'poznámky na okraji', further: 'ďalšie čítanie', cite: 'citovať',
    body: `<p class="dropcap">V našej disciplíne existuje zvyk chápať udržateľnosť ako otázku faktov. Meriame uhlík, modelujeme využitie pôdy, znova spúšťame integrované hodnotiace modely, dávame chybové úsečky na chybové úsečky. A potom to predložíme ministrovi, ktorý prikývne a nezmení nič.</p>
<p>Chcem naznačiť, že úzkym miestom nie je meranie. <span class="red">Namerali sme už dosť.</span> Úzkym miestom je, že "udržateľné" nie je vlastnosť ekosystému; je to vlastnosť dohody. Medzi generáciami, medzi krajinami, medzi tými, čo platia, a tými, čo dostávajú zaplatené.</p>
<h2>1. Čo vám IAM nepovie</h2>
<p>Integrovaný hodnotiaci model je krásny stroj. Povie vám najlacnejšiu cestu odtiaľto k dvojstupňovému svetu za podmienky niekoľkých tisíc predpokladov. Čo vám nepovie, je ktorý predpoklad považuje poľské banícke mesto za vyjednateľný.<sup class="red">[1]</sup></p>
<p>Vo svojej skromnej kariére som videl, ako play-fairway model geotermálneho rozvoja vo Viedenskej panve vytvoril vynikajúcu mapu toho, kde ležia teplé horniny. Videl som aj, ako mestská rada na východnom Slovensku za dvadsať minút rozhodla, že tam radšej nebude vŕtať, lebo na tom kopci je starkej studňa.</p>
<p>Oba tieto fakty sú správne. Len jeden z nich sa objaví v časopiseckom článku.</p>
<h2>2. Pasca metód</h2>
<p>Veda o udržateľnosti si v túžbe byť braná vážne požičala takmer všetky znaky prestíže od prírodných vied. Recenzné konanie. Reprodukovateľnosť. Všetko kvantitatívne. To je väčšinou v poriadku. No vyprodukovalo to generáciu výskumníkov — vrátane mňa —, ktorí lepšie modelujú transformáciu, než ju <em>vyjednávajú</em>.<sup class="red">[2]</sup></p>
<p>Výsledkom je odbor, ktorý veľmi kompetentne publikuje o probléme, ktorý sa štrukturálne pripravil o schopnosť vyriešiť.</p>
<h2>3. Tak čo by sme teda mali robiť</h2>
<p>Nemám čistú odpoveď. (Keby som ju mal, nepísal by som eseje o polnoci; bol by som niekde námestník ministra a konal.) No mám pracovné podozrenie: ďalší užitočný výskumník udržateľnosti je ten, kto vie prečítať rozpočet, navrhnúť reguláciu a stále vám povedať dolnú hranicu koncentrácie chlorofylu v Baltskom mori v marci.</p>
<p>To je disciplína, ktorú sa pomaly snažím naučiť. Zahŕňa oveľa viac sedenia na zasadnutiach rady, než sľuboval prospekt. <span class="red">Neľutujem, že som sa zapísal.</span></p>`,
    note1: `V Dolnom Sliezsku sa v roku 2017 vyjednateľnou vecou ukázala pohrebná služba. Nevyjednateľnou autobusová linka.`,
    note2: `Pozri Wesselink &amp; Hoppe, <i>Sci. Public Policy</i> (2020), o "hraničnej práci" vo výskume udržateľnosti — sú k nej láskavejší než ja tu.`,
  },
  sv: {
    kicker: (n) => `~/ostroukhov/essäer · ${n} texter`, title: `Ess<span class="red">ä</span>er`,
    intro: 'Saker jag trodde var sanna tillräckligt länge för att skriva ner. Ungefär hälften håller jag inte längre med om, vilket är poängen.',
    back: '← essäer', readMeta: (date, read, tags) => `${date} · ${read} läsning · ${tags}`,
    sidenotes: 'marginalnoter', further: 'vidare läsning', cite: 'citera',
    body: `<p class="dropcap">Det finns en vana i vår disciplin att behandla hållbarhet som en fråga om fakta. Vi mäter kol, modellerar markanvändning, kör de integrerade bedömningsmodellerna igen, sätter felmarginaler på felmarginalerna. Och så presenterar vi detta för en minister, som nickar och ändrar ingenting.</p>
<p>Jag vill föreslå att flaskhalsen inte är mätningen. <span class="red">Vi har mätt tillräckligt.</span> Flaskhalsen är att "hållbart" inte är en egenskap hos ett ekosystem; det är en egenskap hos en uppgörelse. Mellan generationer, mellan länder, mellan dem som betalar och dem som får betalt.</p>
<h2>1. Vad IAM:en inte kan berätta</h2>
<p>Den integrerade bedömningsmodellen är en vacker maskin. Den kan ge dig den billigaste vägen härifrån till en tvågradersvärld, villkorad av några tusen antaganden. Vad den inte kan säga är vilket antagande en polsk gruvstad anser förhandlingsbart.<sup class="red">[1]</sup></p>
<p>I min blygsamma karriär hittills har jag sett en play-fairway-modell för geotermisk utveckling i Wienbäckenet producera en utmärkt karta över var de varma bergarterna finns. Jag har också sett ett kommunfullmäktige i östra Slovakien besluta, på tjugo minuter, att de hellre inte borrar där eftersom mormors brunn ligger på den kullen.</p>
<p>Båda dessa fakta är korrekta. Bara ett av dem dyker upp i tidskriftsartikeln.</p>
<h2>2. Metodfällan</h2>
<p>Hållbarhetsvetenskapen har, i sin önskan att tas på allvar, lånat nästan alla sina prestigemarkörer från naturvetenskaperna. Kollegial granskning. Reproducerbarhet. Allt kvantitativt. Det är mestadels okej. Men det har skapat en generation forskare — jag inräknad — som är bättre på att modellera en omställning än på att <em>förhandla</em> fram en.<sup class="red">[2]</sup></p>
<p>Resultatet är ett fält som mycket kompetent publicerar om ett problem det strukturellt har gjort sig oförmöget att lösa.</p>
<h2>3. Så vad bör vi då göra</h2>
<p>Jag har inget rent svar. (Om jag hade det skulle jag inte skriva essäer vid midnatt; jag skulle vara biträdande minister någonstans och göra.) Men jag har en arbetshypotes: nästa användbara hållbarhetsforskare är en som kan läsa en budget, utforma en förordning och ändå tala om den nedre gränsen för klorofyllhalten i Östersjön i mars.</p>
<p>Det är den disciplin jag, långsamt, försöker lära mig. Den innebär mycket mer möten i kommunfullmäktige än prospektet utlovade. <span class="red">Jag ångrar inte att jag skrev in mig.</span></p>`,
    note1: `I Nedre Schlesien, 2017, visade sig det förhandlingsbara vara begravningsbyrån. Det icke förhandlingsbara visade sig vara busslinjen.`,
    note2: `Se Wesselink &amp; Hoppe, <i>Sci. Public Policy</i> (2020), om "gränsarbete" i hållbarhetsforskning — de är snällare mot det än jag är här.`,
  },
};

// Per-id translated titles + subs for essays and photo series (keyed by id).
const ESSAY_TR = {
  uk: {
    e1: ['Сталий розвиток — не наука', 'Це проблема політики, переодягнена в проблему методів.'],
    e2: ['Про випадкові кар\'єри', 'Я вчився на хіміка. Потім пішов у геологію. Потім подався в сталий розвиток. Не раджу.'],
    e3: ['Пастка 1%', 'Чого насправді коштує бути "найкращим студентом" і чому я зробив би це знову.'],
    e4: ['Нотатки з Віденського басейну', 'Два роки пошуку теплих порід під холодною землею.'],
    e5: ['Чому я пішов із лабораторії', 'Коротке, неласкаве прощання з витяжною шафою, яку я любив.'],
    e6: ['Донецьк, у минулому часі', 'Місто, з якого я родом, тепер здебільшого спогад і речення, яке доводиться виправляти.'],
    e7: ['Проти "впливу"', 'Слово зжерло те, що мало описувати.'],
  },
  ru: {
    e1: ['Устойчивость — не наука', 'Это проблема политики, переодетая в проблему методов.'],
    e2: ['О случайных карьерах', 'Я учился на химика. Потом ушёл в геологию. Потом подался в устойчивое развитие. Не советую.'],
    e3: ['Ловушка 1%', 'Чего на самом деле стоит быть "лучшим студентом" и почему я сделал бы это снова.'],
    e4: ['Заметки из Венского бассейна', 'Два года поиска тёплых пород под холодной землёй.'],
    e5: ['Почему я ушёл из лаборатории', 'Короткое, неласковое прощание с вытяжным шкафом, который я любил.'],
    e6: ['Донецк, в прошедшем времени', 'Город, откуда я родом, теперь в основном память и фраза, которую приходится поправлять.'],
    e7: ['Против "импакта"', 'Слово сожрало то, что должно было описывать.'],
  },
  sk: {
    e1: ['Udržateľnosť nie je veda', 'Je to problém politiky preoblečený za problém metód.'],
    e2: ['O náhodných kariérach', 'Vyučil som sa za chemika. Potom som šiel do geológie. Potom som odišiel k udržateľnosti. Neodporúčam.'],
    e3: ['Pasca 1%', 'Čo naozaj stojí byť "najlepším študentom" a prečo by som to urobil znova.'],
    e4: ['Poznámky z Viedenskej panvy', 'Dva roky hľadania teplých hornín pod studenou zemou.'],
    e5: ['Prečo som odišiel z laboratória', 'Krátka, neláskavá rozlúčka s digestorom, ktorý som miloval.'],
    e6: ['Doneck, v minulom čase', 'Mesto, z ktorého pochádzam, je teraz väčšinou spomienka a veta, ktorú si musím opravovať.'],
    e7: ['Proti "dopadu"', 'To slovo zožralo to, čo malo opisovať.'],
  },
  sv: {
    e1: ['Hållbarhet är ingen vetenskap', 'Det är ett politikproblem förklätt till ett metodproblem.'],
    e2: ['Om oavsiktliga karriärer', 'Jag utbildade mig till kemist. Sedan gick jag till geologi. Sedan lämnade jag för hållbarhet. Jag rekommenderar det inte.'],
    e3: ['1%-fällan', 'Vad det faktiskt kostar att vara en "toppstudent", och varför jag skulle göra det igen.'],
    e4: ['Anteckningar från ett Wienbäcken', 'Två år av letande efter varma bergarter under kall mark.'],
    e5: ['Varför jag lämnade labbet', 'Ett kort, ogeneröst farväl till ett dragskåp jag älskade.'],
    e6: ['Donetsk, i förfluten tid', 'Staden jag kommer från är nu mest ett minne och en mening jag ständigt måste rätta.'],
    e7: ['Mot "impact"', 'Ordet har ätit upp det det skulle beskriva.'],
  },
};

const SERIES_TR = {
  uk: {
  },
  ru: {
  },
  sk: {
  },
  sv: {
  },
};

// Resolve a localised [title, sub] pair, falling back to the English data object.
function essayText(e, lang) {
  const t = ESSAY_TR[lang] && ESSAY_TR[lang][e.id];
  return { title: t ? t[0] : e.title, sub: t ? t[1] : e.sub };
}
function seriesText(s, lang) {
  const t = SERIES_TR[lang] && SERIES_TR[lang][s.id];
  return { title: t ? t[0] : s.title, sub: t ? t[1] : s.sub };
}
// Merge a translated CV onto the English source so untranslated fields survive.
function cvFor(lang) {
  if (lang === 'en' || !CV_TR[lang]) return CV;
  const t = CV_TR[lang];
  const merge = (base, over) => (over || []).map((o, i) => ({ ...base[i], ...o }));
  return {
    work: merge(CV.work, t.work),
    edu: merge(CV.edu, t.edu),
    vol: merge(CV.vol, t.vol),
    awards: CV.awards.map((a, i) => ({ ...a, t: (t.awards && t.awards[i]) || a.t })),
    skills: merge(CV.skills, t.skills),
  };
}

// ── projects ──────────────────────────────────────────────────
// Stable per-project metadata (index aligns with I18N_PROJECTS[lang].items).
const PROJECTS_META = [
  { no: '01', name: 'SustGolf — Golfing for Change', year: '2026',
    href: 'https://vlady.fyi/golf/', host: 'vlady.fyi/golf', cover: 'assets/projects/golf.jpg' },
  { no: '02', name: '[sic!] — Sustainability Impact Compass', year: '2026',
    href: 'https://vlady.fyi/sic/', host: 'vlady.fyi/sic', cover: 'assets/projects/sic.svg' },
  { no: '03', name: 'EA Lund', year: '2026',
    href: 'https://vlady.fyi/ealund', host: 'vlady.fyi/ealund', cover: 'assets/projects/ealund.png' },
];

const I18N_PROJECTS = {
  en: {
    kicker: (n) => `~/ostroukhov/projects · ${n}`,
    title: `Pro<span class="red">j</span>ects`,
    intro: 'Where the analysis actually shipped — fieldwork, models, and the things that got built. A short, growing list.',
    roleLabel: 'role', contextLabel: 'context', yearLabel: 'year', cta: 'visit the project →',
    items: [{
      role: 'GIS · Hydrology modelling · Photography · Web design',
      context: 'Lund University · Knowledge to Action · with Lunds Akademiska Golfklubb',
      desc: 'A communication concept arguing that golf can be sustainable — built on our own biodiversity and surface-runoff analysis of the Kungsmarken Natura 2000 reserve. I ran the geospatial outlier analysis that located the biodiversity hotspots near Green 12, modelled the runoff geometry behind the plant-distribution finding, co-shot the on-site photography, and designed and built the site.',
      tags: ['GIS', 'hydrology', 'sci-comm', 'Natura 2000'],
    }, {
      role: 'Concept · Research · Design · Website',
      context: 'Lund University · LUCSUS · with Melena Schneider',
      desc: 'A tool for choosing what to work on, and for showing how you got there. In writing, “[sic!]” marks a critical pause over something questionable; the tool asks for that same pause before you commit to a topic. It walks you through finding a topic, comparing candidate problems, and names your blind spots. I designed the compass logic and built the site.',
      tags: ['prioritisation', 'decision tools', 'sci-comm', 'front-end'],
    }, {
      role: 'Co-President · Strategy · Design · Photography · SMM',
      context: 'Effective Altruism Lund · Lund University student group',
      desc: 'The public site for a student group thinking seriously about how to do good — talks, reading groups and an intro fellowship, open to anyone with no prior reading required. Built in Next.js with a server-rendered events calendar pinned to Swedish local time, and structured so a committee that turns over every year can keep it current without touching the code.',
      tags: ['prioritisation', 'community-building', 'facilitation'],
    }],
  },
  uk: {
    kicker: (n) => `~/ostroukhov/проєкти · ${n}`,
    title: `Про<span class="red">є</span>кти`,
    intro: 'Там, де аналіз справді дійшов до справи — польова робота, моделі й те, що було зроблено. Короткий список, що зростає.',
    roleLabel: 'роль', contextLabel: 'контекст', yearLabel: 'рік', cta: 'відкрити проєкт →',
    items: [{
      role: 'ГІС · Гідрологічне моделювання · Фотографія · Вебдизайн',
      context: 'Лундський університет · Knowledge to Action · з Lunds Akademiska Golfklubb',
      desc: 'Комунікаційна концепція, що доводить: гольф може бути сталим — побудована на власному аналізі біорізноманіття та поверхневого стоку заповідника Kungsmarken (Natura 2000). Я провів геопросторовий аналіз викидів, що визначив гарячі точки біорізноманіття біля Green 12, змоделював геометрію стоку, що пояснює розподіл рослин, співзняв фотографії на місці та спроєктував і побудував сайт.',
      tags: ['ГІС', 'гідрологія', 'наук-комунікація', 'Natura 2000'],
    }, {
      role: 'Концепція · Дослідження · Дизайн · Вебсайт',
      context: 'Лундський університет · LUCSUS · з Меленою Шнайдер',
      desc: 'Інструмент для вибору теми, над якою варто працювати, — і для того, щоб показати хід власних міркувань. У письмі «[sic!]» позначає критичну паузу над чимось сумнівним; інструмент просить про таку саму паузу, перш ніж ви візьметеся за тему. Він проводить через пошук теми, порівняння можливих проблем і називає ваші сліпі зони. Я спроєктував логіку компаса й побудував сайт.',
      tags: ['пріоритизація', 'інструменти рішень', 'наук-комунікація', 'фронтенд'],
    }, {
      role: 'Співпрезидент · Стратегія · Дизайн · Фотографія · SMM',
      context: 'Effective Altruism Lund · студентська спільнота Лундського університету',
      desc: 'Публічний сайт студентської спільноти, яка серйозно думає про те, як робити добро, — лекції, читацькі групи та вступна програма, відкриті для всіх без попередньої підготовки. Побудований на Next.js із серверним календарем подій, прив’язаним до шведського часу, і влаштований так, щоб комітет, який щороку змінюється, міг підтримувати сайт без коду.',
      tags: ['пріоритизація', 'розбудова спільноти', 'фасилітація'],
    }],
  },
  ru: {
    kicker: (n) => `~/ostroukhov/проекты · ${n}`,
    title: `Про<span class="red">е</span>кты`,
    intro: 'Там, где анализ действительно дошёл до дела — полевая работа, модели и то, что было сделано. Короткий растущий список.',
    roleLabel: 'роль', contextLabel: 'контекст', yearLabel: 'год', cta: 'открыть проект →',
    items: [{
      role: 'ГИС · Гидрологическое моделирование · Фотография · Веб-дизайн',
      context: 'Лундский университет · Knowledge to Action · с Lunds Akademiska Golfklubb',
      desc: 'Коммуникационная концепция, доказывающая: гольф может быть устойчивым — построенная на собственном анализе биоразнообразия и поверхностного стока заповедника Kungsmarken (Natura 2000). Я провёл геопространственный анализ выбросов, определивший горячие точки биоразнообразия у Green 12, смоделировал геометрию стока, объясняющую распределение растений, со-снял фотографии на месте и спроектировал и построил сайт.',
      tags: ['ГИС', 'гидрология', 'науч-коммуникация', 'Natura 2000'],
    }, {
      role: 'Концепция · Исследование · Дизайн · Вебсайт',
      context: 'Лундский университет · LUCSUS · с Меленой Шнайдер',
      desc: 'Инструмент для выбора темы, над которой стоит работать, — и для того, чтобы показать ход собственных рассуждений. В письме «[sic!]» отмечает критическую паузу над чем-то сомнительным; инструмент просит о такой же паузе, прежде чем вы возьмётесь за тему. Он проводит через поиск темы, сравнение возможных проблем и называет ваши слепые зоны. Я спроектировал логику компаса и построил сайт.',
      tags: ['приоритизация', 'инструменты решений', 'науч-коммуникация', 'фронтенд'],
    }, {
      role: 'Сопрезидент · Стратегия · Дизайн · Фотография · SMM',
      context: 'Effective Altruism Lund · студенческое сообщество Лундского университета',
      desc: 'Публичный сайт студенческого сообщества, которое серьёзно думает о том, как делать добро, — лекции, читательские группы и вводная программа, открытые для всех без подготовки. Построен на Next.js с серверным календарём событий, привязанным к шведскому времени, и устроен так, чтобы ежегодно сменяющийся комитет мог поддерживать сайт без кода.',
      tags: ['приоритизация', 'развитие сообщества', 'фасилитация'],
    }],
  },
  sk: {
    kicker: (n) => `~/ostroukhov/projekty · ${n}`,
    title: `Pro<span class="red">j</span>ekty`,
    intro: 'Tam, kde sa analýza naozaj dostala do praxe — terénna práca, modely a veci, ktoré vznikli. Krátky, rastúci zoznam.',
    roleLabel: 'rola', contextLabel: 'kontext', yearLabel: 'rok', cta: 'otvoriť projekt →',
    items: [{
      role: 'GIS · Hydrologické modelovanie · Fotografia · Web dizajn',
      context: 'Lundská univerzita · Knowledge to Action · s Lunds Akademiska Golfklubb',
      desc: 'Komunikačný koncept dokazujúci, že golf môže byť udržateľný — postavený na vlastnej analýze biodiverzity a povrchového odtoku rezervácie Kungsmarken (Natura 2000). Vykonal som geopriestorovú analýzu odľahlých hodnôt, ktorá lokalizovala horúce miesta biodiverzity pri Green 12, modeloval geometriu odtoku za zistením o rozložení rastlín, spolufotografoval zábery na mieste a navrhol a postavil túto stránku.',
      tags: ['GIS', 'hydrológia', 'sci-comm', 'Natura 2000'],
    }, {
      role: 'Koncept · Výskum · Dizajn · Web',
      context: 'Lundská univerzita · LUCSUS · s Melenou Schneiderovou',
      desc: 'Nástroj na výber témy, ktorej sa oplatí venovať — a na to, aby bolo vidieť, ako ste k nej dospeli. V písaní „[sic!]“ označuje kritickú pauzu nad niečím sporným; nástroj žiada tú istú pauzu predtým, než sa pre tému rozhodnete. Prevedie vás hľadaním témy, porovnaním možných problémov a pomenuje vaše slepé miesta. Navrhol som logiku kompasu a postavil stránku.',
      tags: ['prioritizácia', 'rozhodovacie nástroje', 'sci-comm', 'front-end'],
    }, {
      role: 'Spolupredseda · Stratégia · Dizajn · Fotografia · SMM',
      context: 'Effective Altruism Lund · študentská skupina Lundskej univerzity',
      desc: 'Verejná stránka študentskej skupiny, ktorá vážne premyšľa o tom, ako konať dobro — prednášky, čitateľské skupiny a úvodný program, otvorené každému bez prípravy. Postavená v Next.js so serverovo vykresľovaným kalendárom podujatí ukotveným vo švédskom čase a usporiadaná tak, aby ju každoročne sa meniaci výbor udržal aktuálnu bez zásahu do kódu.',
      tags: ['prioritizácia', 'budovanie komunity', 'facilitácia'],
    }],
  },
  sv: {
    kicker: (n) => `~/ostroukhov/projekt · ${n}`,
    title: `Pro<span class="red">j</span>ekt`,
    intro: 'Där analysen faktiskt blev verklighet — fältarbete, modeller och det som byggdes. En kort, växande lista.',
    roleLabel: 'roll', contextLabel: 'sammanhang', yearLabel: 'år', cta: 'öppna projektet →',
    items: [{
      role: 'GIS · Hydrologisk modellering · Fotografi · Webbdesign',
      context: 'Lunds universitet · Knowledge to Action · med Lunds Akademiska Golfklubb',
      desc: 'Ett kommunikationskoncept som hävdar att golf kan vara hållbart — byggt på vår egen analys av biologisk mångfald och ytavrinning i naturreservatet Kungsmarken (Natura 2000). Jag körde den geospatiala avvikelseanalysen som lokaliserade mångfaldens hotspots nära Green 12, modellerade avrinningsgeometrin bakom växtfördelningen, var med och fotograferade på plats och designade och byggde sajten.',
      tags: ['GIS', 'hydrologi', 'sci-comm', 'Natura 2000'],
    }, {
      role: 'Koncept · Research · Design · Webbplats',
      context: 'Lunds universitet · LUCSUS · med Melena Schneider',
      desc: 'Ett verktyg för att välja vad man ska arbeta med — och för att visa hur man kom fram till det. I skrift markerar ”[sic!]” en kritisk paus inför något tvivelaktigt; verktyget ber om samma paus innan du binder dig vid ett ämne. Det leder dig genom att hitta ett ämne, jämföra tänkbara problem och sätter ord på dina blinda fläckar. Jag formgav kompassens logik och byggde sajten.',
      tags: ['prioritering', 'beslutsverktyg', 'forskningskommunikation', 'frontend'],
    }, {
      role: 'Medordförande · Strategi · Design · Foto · SMM',
      context: 'Effective Altruism Lund · studentgrupp vid Lunds universitet',
      desc: 'Den publika sajten för en studentgrupp som tänker allvarligt på hur man gör gott — föredrag, läsgrupper och ett introduktionsprogram, öppna för alla utan förkunskaper. Byggd i Next.js med en serverrenderad evenemangskalender låst till svensk lokaltid, och upplagd så att en styrelse som byts ut varje år kan hålla den aktuell utan att röra koden.',
      tags: ['prioritering', 'community-byggande', 'facilitering'],
    }],
  },
};

Object.assign(window, { AINote, I18N_CV, CV_TR, I18N_PHOTOS, I18N_ESSAYS, ESSAY_TR, SERIES_TR, essayText, seriesText, cvFor, PROJECTS_META, I18N_PROJECTS });
