/* ═══════════════════════════════════════════════════════════════════════════
   GOODWOODHOME — КОЛЬОРОВА СИСТЕМА І ДВІ ТЕМИ
   Midnight Emerald · Botanical Dark Luxury

   ЩО ЦЕ
   =====
   Єдине джерело кольору для всього сайту. Файл підключається ПЕРЕД site.css і
   calculator.css і працює у три яруси:

     Ярус 1 · СИРА ПАЛІТРА (:root) — смарагд, онікс, латунь, устриця, камінь.
              Не залежить від теми. У компонентах напряму НЕ вживається.

     Ярус 2 · СЕМАНТИКА (html[data-theme=…]) — --bg-primary, --text-primary,
              --accent-primary тощо. Саме її читають нові компоненти.

     Ярус 3 · СУМІСНІСТЬ — старі змінні сайту (--gold, --dark, --paper, --ink…)
              перевизначені через семантику.

   ЧОМУ ЯРУС 3 — ГОЛОВНИЙ ТЕХНІЧНИЙ ХІД
   ====================================
   Ці сімнадцять змінних уже вжиті в site.css і calculator.css близько 300 разів:
   у кнопках, картках, межах, іконках, полях, модалках, футері. Переписати кожне
   з тих правил на нові імена означало б триста шансів щось зламати заради
   нульового візуального ефекту. Замість цього ми лишаємо правила недоторканими
   і міняємо ЗНАЧЕННЯ, які вони читають. Одна декларація перефарбовує весь сайт,
   і та сама декларація перемикає його між темами.

   ПРО ПРІОРИТЕТ СЕЛЕКТОРІВ
   ========================
   html[data-theme="…"] має вагу (0,1,1) — вищу за :root (0,1,0) у site.css,
   тож порядок підключення файлів на результат не впливає. Але вага збігається
   з body[data-page="home"], тому будь-який палітровий блок із такою вагою в
   site.css мусив бути прибраний — інакше на головній він перекривав би тему
   просто тому, що лежить у файлі нижче.
   ═══════════════════════════════════════════════════════════════════════════ */


/* ───────────────────────────────────────────────────────────────────────────
   ЯРУС 1 · СИРА ПАЛІТРА
   ─────────────────────────────────────────────────────────────────────────── */
:root{
  /* Смарагд. Це не «зелений колір» у звичному сенсі: 950 і 900 читаються оком
     як чорний, і лише при уважному погляді в них проступає хвоя. Саме на цьому
     тримається вся ідея — темрява, яка виявляється зеленою. */
  /* Ramp зсунуто глибше: попередні значення при денному світлі читались уже
     як «темно-зелений сайт», а задум був інший — темрява, у якій зелень лише
     вгадується. Різниця між сусідніми щаблями збережена (близько 4% яскравості),
     тож чергування секцій лишилось таким самим виразним, просто все воно
     відбувається на два тони нижче. */
  --emerald-950:#050D0A;
  --emerald-900:#08120E;
  --emerald-850:#0C1813;
  --emerald-800:#111F19;
  --emerald-700:#1B2C24;

  /* Онікс — нейтральна майже-чорна пара до смарагду. Потрібен, щоб чергування
     секцій не було монотонним: смарагд поруч зі смарагдом дає різницю в тоні,
     смарагд поруч з оніксом — ще й у температурі. */
  /* Онікс опущено слідом за смарагдом: інакше «нейтральна майже-чорна пара»
     виявилась би СВІТЛІШОЮ за нього, і чергування секцій перевернулось би. */
  --onyx-950:#070807;
  --onyx-900:#0B0D0C;
  --onyx-800:#121514;

  /* Латунь, а не «золото»: приглушена, з сірою складовою, без блиску. */
  --gold-600:#A9874F;
  --gold-500:#B9975B;
  --gold-400:#C9AA70;
  --gold-soft:#D5BC8A;
  /* Глибша латунь — для золотого ТЕКСТУ на світлому фоні. Значення підібране
     не на око, а за найтемнішим світлим фоном системи (--oyster-200 #E7E1D7):
     на ньому #A9874F дає 2.58:1, #8A6C3D — 3.76:1, і лише #785D33 переходить
     поріг 4.5. Це той самий брендовий тон, зсунутий рівно до читабельності. */
  --gold-700:#785D33;

  /* Устриця й камінь — тепла світла група. Чистого білого в системі немає
     навмисно: він одразу читається як корпоративний інтерфейс. */
  --oyster-50:#F7F3EC;
  --oyster-100:#F1EDE5;
  --oyster-200:#E7E1D7;
  --oyster-300:#D8D0C3;
  --stone-400:#B6AEA1;

  /* Натуральні відтінки для дрібних акцентів і службових станів. */
  --moss-muted:#47574B;
  --walnut:#5A4638;
  --warm-grey:#8B857B;

  /* Текстові тони світлої теми — темний смарагд замість чорного. */
  --ink-900:#17211D;
  --ink-600:#536059;
  /* #77766F давав на --oyster-200 лише 3.51:1, а ним набрані характеристики
     карток, підпис ціни й мітки «підходить для» — тобто дрібний текст, якому
     потрібні всі 4.5. */
  --ink-400:#5F5E58;
}


/* ───────────────────────────────────────────────────────────────────────────
   ЯРУС 2 + 3 · ТЕМНА ТЕМА (основна презентація бренду)
   ─────────────────────────────────────────────────────────────────────────── */
/* html:not([data-theme]) — запобіжник для випадку, коли JS вимкнено або не
   виконався: сторінка все одно приходить у брендовій темній темі, а не голою.
   Атрибут навмисно НЕ прописаний у самій розмітці <html>: перевірка 9b звіряє
   тег посимвольно (`<html lang="en">`), і зайвий атрибут її б завалив. */
html[data-theme="dark"],
html:not([data-theme]){
  color-scheme:dark;

  /* ── Поверхні ── */
  --bg-primary:var(--emerald-900);
  --bg-secondary:var(--emerald-850);
  --bg-elevated:var(--emerald-800);
  --bg-muted:var(--emerald-950);
  --bg-deep:var(--onyx-900);
  --bg-deepest:var(--onyx-950);
  --surface-card:var(--emerald-800);
  --surface-card-hover:var(--emerald-700);

  /* ── Текст ── */
  --text-primary:var(--oyster-100);
  --text-secondary:var(--oyster-300);
  --text-muted:#A9A297;
  --text-on-accent:var(--emerald-950);

  /* ── Межі ──
     Напівпрозорі, а не суцільні: на п'яти різних темних фонах суцільна межа
     виглядала б то занадто світлою, то невидимою. */
  --border-subtle:rgba(241,237,229,0.12);
  --border-strong:rgba(241,237,229,0.22);
  --border-accent:rgba(185,151,91,0.34);

  /* ── Акцент ── */
  --accent-primary:var(--gold-500);
  --accent-hover:var(--gold-400);
  --accent-quiet:var(--gold-400);
  /* Чорнило ПО акценту — для випадків, коли акцент стає заливкою, а не текстом.
     У темній темі акцент світлий (латунь gold-500), тож напис на ньому темний.
     Пара мусить жити поряд із самим акцентом: варто перефарбувати один — і
     другий видно одразу, інакше виходить білий напис на світлому золоті. */
  --accent-ink:var(--emerald-950);

  /* ── Кнопки ── */
  --button-primary-bg:var(--gold-500);
  --button-primary-text:var(--emerald-950);
  --button-primary-hover:var(--gold-400);
  --button-secondary-bg:transparent;
  --button-secondary-border:rgba(241,237,229,0.30);

  /* ── Поля вводу ── */
  --field-bg:rgba(7,21,17,0.55);
  --field-border:rgba(241,237,229,0.18);

  /* ── Службове ── */
  --overlay-hero:rgba(7,21,17,0.62);
  --shadow-color:rgba(0,0,0,0.55);
  --shadow-card:0 18px 40px rgba(0,0,0,0.38);
  /* Тон шапки = емеральд-900, найтемніший тон фонової текстури лісу: композит
     підкладки (гасник 82% поверх screen-знімка) у найтемніших місцях сходиться
     рівно до #08120E, і світліша смуга rgba(11,28,23) читалась на ньому як
     чужорідна панель поверх фото (зауваження власника, 2026-08-18). */
  /* НЕПРОЗОРА (власниця, 2026-08-22). Було 0.9 — і десяти відсотків вистачало,
     щоб заголовок секції, який проходить під шапкою, просвічував крізь неї й
     змішувався з логотипом. Прокручена шапка — це панель, а не серпанок; там,
     де вона лежить поверх кадру, її прозорість дає не легкість, а брудний
     стик. Стан «поверх героя» лишається прозорим — там під нею нічого
     немає, крім самого фото. */
  --nav-bg-scrolled:rgb(8,18,14);
  --scrollbar-thumb:rgba(241,237,229,0.18);
  --scrollbar-track:rgba(241,237,229,0.05);

  /* ── ТЕКСТУРА: ГУСТИЙ ЛІС ──
     Пара до каменю у світлій темі: там знімок поверхні, тут — знімок крон
     згори (вибір власниці, 2026-08-12: кандидат D6, без туману й неба —
     самі дерева). Процедурні плями давали масу, але не давали рисунка: маса
     без гілок читається як віньєтка, а не як ліс.

     ДВА ШАРИ, І ЦЕ ГОЛОВНЕ
     Знімок висвітлює смарагд (screen) — тільки так на майже чорному тлі
     взагалі щось видно: multiply дав би чорне на чорному, soft-light на
     такому темному тлі не зрушує нічого. Але сам screen задирає світлі
     ділянки крон до сірих плям, тому ЗВЕРХУ лягає той самий смарагд на 62%
     — він притискає весь результат назад у темряву рівномірно, зберігаючи
     рисунок. Це і є регулятор сили: одне число замість перезбирання файлу.

     Порядок шарів у CSS зверху вниз, тож у списку спершу притискач, потім
     знімок; blend-mode перелічені в тому ж порядку. */
  --bg-texture:
    linear-gradient(rgba(8,18,14,0.82),rgba(8,18,14,0.82)),
    url("/assets/images/bg/forest-canopy.jpg");
  --bg-texture-size:cover,cover;
  --bg-texture-blend:normal,screen;
  --bg-texture-position:center,center;
  --bg-texture-attachment:fixed,fixed;

  /* ── ЯРУС 3 · старі змінні сайту ── */
  --gold:var(--gold-500);
  --gold-lt:var(--gold-400);
  --gold-deep:var(--gold-400);      /* на темному «глибоке» золото має бути СВІТЛІШИМ */
  --dark:var(--emerald-900);
  --dark2:var(--emerald-850);
  --dark3:var(--emerald-800);
  --warm:var(--emerald-800);
  --text:var(--oyster-100);
  --text-60:var(--oyster-300);
  --text-40:#A9A297;
  --border:rgba(241,237,229,0.12);
  /* «Паперові» секції в темній темі — не папір, а онікс: та сама роль
     «інша поверхня», але в темній гамі. Розмітку це не чіпає. */
  --paper:var(--onyx-900);
  --paper-2:var(--emerald-850);
  --ink:var(--oyster-100);
  --ink-60:var(--oyster-300);
  --ink-40:#A9A297;
  --paper-border:rgba(241,237,229,0.12);
}


/* ───────────────────────────────────────────────────────────────────────────
   ЯРУС 2 + 3 · СВІТЛА ТЕМА
   Тепла, природна, не «біла корпоративна». Основа — устриця й льон.
   ─────────────────────────────────────────────────────────────────────────── */
html[data-theme="light"]{
  color-scheme:light;

  --bg-primary:var(--oyster-100);
  --bg-secondary:var(--oyster-200);
  --bg-elevated:var(--oyster-50);
  --bg-muted:var(--oyster-300);
  --bg-deep:var(--emerald-850);
  --bg-deepest:var(--emerald-950);
  --surface-card:var(--oyster-50);
  --surface-card-hover:#FBF8F2;

  --text-primary:var(--ink-900);
  --text-secondary:var(--ink-600);
  --text-muted:var(--ink-400);
  --text-on-accent:var(--oyster-100);

  --border-subtle:rgba(22,35,29,0.14);
  --border-strong:rgba(22,35,29,0.26);
  --border-accent:rgba(169,135,79,0.42);

  /* На світлому акцент темніє: латунь #B9975B дає на устриці лише 3.2:1,
     а --gold-600 (#A9874F) — 2.58:1. Для тексту працює тільки --gold-700. */
  --accent-primary:var(--gold-700);
  --accent-hover:var(--gold-700);
  --accent-quiet:var(--gold-700);
  /* Тут акцент, навпаки, ТЕМНИЙ (gold-700 — та сама латунь, що дає 4.5:1 на
     устриці), тож заливка ним вимагає СВІТЛОГО напису. Пара до --accent-primary
     вище — див. пояснення в темній темі. */
  --accent-ink:var(--oyster-100);

  /* Головна кнопка світлої теми — темний смарагд, а не латунь: золота заливка
     на теплому світлому фоні втрачає контраст і виглядає дешево. */
  --button-primary-bg:var(--emerald-850);
  --button-primary-text:var(--oyster-100);
  --button-primary-hover:var(--emerald-700);
  --button-secondary-bg:transparent;
  --button-secondary-border:rgba(22,35,29,0.28);

  --field-bg:var(--oyster-50);
  --field-border:rgba(22,35,29,0.20);

  --overlay-hero:rgba(7,21,17,0.52);
  --shadow-color:rgba(22,35,29,0.16);
  --shadow-card:0 14px 32px rgba(22,35,29,0.10);
  /* Непрозора, як і в темній темі — див. коментар там. */
  --nav-bg-scrolled:rgb(241,237,229);
  /* Заливка головної кнопки в прокрученій шапці. Латунь, а не смарагд: у
     світлій темі зелена пляма була єдиною зеленою річчю на сторінці. Тон той
     самий, що й у золотого тексту на світлому (--gold-700), тож кнопка
     лишається брендовою, а не просто «коричневою». */
  --nav-cta-bg:var(--gold-700);
  --nav-cta-bg-hover:#614927;
  --scrollbar-thumb:rgba(22,35,29,0.22);
  --scrollbar-track:rgba(22,35,29,0.06);

  /* ── ТЕКСТУРА: ЗРІЗ ТЕПЛОГО КАМЕНЮ ──
     Процедурне зерно замінене справжнім знімком каменю з візерунком сонця й
     тіні (вибір власниці, 2026-08-12: кандидат L4). Причина, чому фото, а не
     feTurbulence: шум дає рівну «наждачку», а камінь має неоднорідність —
     світлі й темні поля, дрібні тріщини, м'яку пляму світла. Саме ця
     неоднорідність і читається як матеріал, а не як фільтр поверх кольору.

     Знімок знебарвлений, приглушений до текстури (середня яскравість 239 із
     255 при розкиді 225–255) і стиснутий до 1400px/43 КБ. Приглушення тут не
     косметика: у сирому вигляді середня була 146, і множення на устрицю
     перетворило б сторінку на сіру плиту замість рисунка каменю.

     cover + fixed, а не плитка: секції мають різну висоту, і плитка 320px
     видала б себе повтором. Із fixed усі секції показують ОДИН і той самий
     знімок, вирівняний по вікну, тож сторінка читається як один суцільний
     зріз каменю, а не як стос плит. */
  --bg-texture:url("/assets/images/bg/stone-leaf.jpg");
  --bg-texture-size:cover;
  --bg-texture-blend:multiply;
  --bg-texture-position:center;
  --bg-texture-attachment:fixed;

  /* ── ЯРУС 3 ── */
  --gold:var(--gold-700);
  --gold-lt:var(--gold-700);
  --gold-deep:var(--gold-700);
  --dark:var(--oyster-100);
  --dark2:var(--oyster-200);
  --dark3:var(--oyster-50);
  --warm:var(--oyster-200);
  --text:var(--ink-900);
  --text-60:var(--ink-600);
  --text-40:var(--ink-400);
  --border:rgba(22,35,29,0.14);
  --paper:var(--oyster-100);
  /* Картка мусить бути СВІТЛІШОЮ за секцію, а не такою самою. --paper-2 —
     поверхня карток (каталог, моделі, «наступний крок»), і поки вона дорівнювала
     oyster-200, картки на секції того ж відтінку зникали разом із межами:
     у каталозі моделей у світлій темі не було видно, де закінчується одна
     картка й починається інша (2026-08-12). */
  --paper-2:var(--oyster-50);
  --ink:var(--ink-900);
  --ink-60:var(--ink-600);
  --ink-40:var(--ink-400);
  /* Разом із підняттям поверхні трохи міцніша межа: на теплому фоні 0.14
     читалось як тінь, а не як контур. */
  --paper-border:rgba(22,35,29,0.20);
}


/* ───────────────────────────────────────────────────────────────────────────
   ТЕМНІ ОСТРОВИ
   Темним в обох темах лишається тільки те, під чим справді лежить фотографія:
   герой і підпис під геройським кадром моделі. Світла підкладка вбила б
   вечірнє освітлення знімка, а текст поверх нього однаково має бути світлим.

   Раніше сюди входили ще банер конфігуратора, фінальний заклик, футер і «Що ви
   будуєте?». Власниця прибрала їх зі списку (2026-08-12): у світлій темі
   сторінка читалась як недоперемкнена — чотири темні смуги посеред теплої
   сторінки виглядали не як задум, а як забутий блок.

   Такий блок не можна просто пофарбувати: усередині нього кнопки, межі й
   дрібний текст читають ті самі змінні, і у світлій темі вони прийшли б
   темними на темне. Тому блок ПЕРЕВИЗНАЧАЄ повний набір токенів локально —
   це той самий прийом «поверхні», що й у дизайн-системі /brand/.
   ─────────────────────────────────────────────────────────────────────────── */
/* .landing-hero тут з 2026-08-15: герой лендінга — та сама фотографія на весь
   екран, і без локальної інверсії токенів у світлій темі його заголовок
   приходив чорнилом по темному знімку — сторінка для реклами відкривалась
   нечитабельною. */
html[data-theme="light"] .hero,
html[data-theme="light"] .landing-hero,
html[data-theme="light"] .model-hero-cap{
  --bg-primary:var(--emerald-900);
  --bg-secondary:var(--emerald-850);
  --surface-card:var(--emerald-800);
  --surface-card-hover:var(--emerald-700);
  --text-primary:var(--oyster-100);
  --text-secondary:var(--oyster-300);
  --text-muted:#A9A297;
  --border-subtle:rgba(241,237,229,0.12);
  --border-strong:rgba(241,237,229,0.22);
  --accent-primary:var(--gold-500);
  --accent-hover:var(--gold-400);
  --accent-quiet:var(--gold-400);
  --button-primary-bg:var(--gold-500);
  --button-primary-text:var(--emerald-950);
  --button-primary-hover:var(--gold-400);
  --button-secondary-border:rgba(241,237,229,0.30);
  --field-bg:rgba(7,21,17,0.55);
  --field-border:rgba(241,237,229,0.18);
  /* Ярус 3 — те саме для старих імен */
  --gold:var(--gold-500);
  --gold-lt:var(--gold-400);
  --gold-deep:var(--gold-400);
  --dark:var(--emerald-900);
  --dark2:var(--emerald-850);
  --dark3:var(--emerald-800);
  --text:var(--oyster-100);
  --text-60:var(--oyster-300);
  --text-40:#A9A297;
  --border:rgba(241,237,229,0.12);
  --paper:var(--emerald-850);
  --paper-2:var(--emerald-800);
  --ink:var(--oyster-100);
  --ink-60:var(--oyster-300);
  --ink-40:#A9A297;
  --paper-border:rgba(241,237,229,0.12);
}


/* ───────────────────────────────────────────────────────────────────────────
   БАЗА ДОКУМЕНТА
   ─────────────────────────────────────────────────────────────────────────── */
html{background:var(--bg-primary);}
body{background:var(--bg-primary);color:var(--text-primary);}

/* ── ПЛАВНЕ ПЕРЕМИКАННЯ ТЕМИ ──
   Перелік властивостей явний: transition:all примусив би браузер стежити за
   кожним обчисленим значенням на кожному вузлі — на цій сторінці це тисячі
   елементів і помітний фриз у момент перемикання.

   Клас .theme-anim вмикає скрипт ПІСЛЯ першого рендеру. Без цього перехід
   програвався б і на завантаженні: сторінка відкривалась би у стартових
   кольорах і 300ms повзла до збережених. */
html.theme-anim body,
html.theme-anim section,
html.theme-anim header,
html.theme-anim footer,
html.theme-anim .nav,
html.theme-anim .cta-banner,
html.theme-anim .final-cta,
html.theme-anim .collection-card,
html.theme-anim .goal-card,
html.theme-anim .case-card,
html.theme-anim .benefit-card,
html.theme-anim .faq-item,
html.theme-anim .btn-gold,
html.theme-anim .btn-ghost,
html.theme-anim .nav-cta,
html.theme-anim .collection-cta,
html.theme-anim .collection-view,
html.theme-anim input,
html.theme-anim textarea,
html.theme-anim select{
  transition:background-color 260ms ease,
             border-color 260ms ease,
             color 260ms ease,
             fill 260ms ease,
             stroke 260ms ease,
             box-shadow 260ms ease;
}
@media(prefers-reduced-motion:reduce){
  html.theme-anim *,
  html.theme-anim *::before,
  html.theme-anim *::after{transition-duration:0.01ms !important;}
}

/* Смуга прокрутки теж належить темі — світлий системний скролбар на майже
   чорній сторінці видно найкраще з усього, що на ній є. */
html{scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);}
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-track{background:var(--scrollbar-track);}
::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:6px;}
::selection{background:var(--accent-primary);color:var(--text-on-accent);}


/* ───────────────────────────────────────────────────────────────────────────
   ПЕРЕМИКАЧ ТЕМИ
   Проста кругла кнопка, яку натискаєш і відтискаєш (власник, 2026-08-17):
   повзунок-доріжка читався як стан і плутав. Іконка показує ДІЮ, а не стан —
   у темній темі сонце («увімкнути світлу»), у світлій місяць. Це <button> з
   aria-label, а не чекбокс: для скрінрідера це дія «перемкнути».
   ─────────────────────────────────────────────────────────────────────────── */
/* Обвідка — стрільчаста арка, а не коло (власник, 2026-08-20): силует наших
   будинків замість нейтрального кружка. Малює її ::before маскою
   --gwh-arch-frame; сама кнопка лишається без border і без заливки, інакше
   під аркою проступав би круглий або прямокутний слід. */
.theme-toggle{
  position:relative;flex-shrink:0;
  display:inline-flex;align-items:center;justify-content:center;
  width:38px;height:40px;padding:0;
  background:none;border:none;
  cursor:pointer;
  color:var(--text-secondary);
  transition:color 200ms ease,transform 120ms ease;
}
/* Арка 28×29, а не на всю коробку кнопки. Коробка лишається 38×40 — це зона
   дотику, — але сам контур мусить бути ДРІБНІШИЙ за знак бренду ліворуч
   (глиф ~30px). Інакше найпомітнішою аркою в шапці стає перемикач теми, а не
   логотип (власник, 2026-08-20).

   Два шари: ::before — залита арка-плашка ПІД іконкою, ::after — контур.
   Порядок саме такий, бо для позиційованих елементів браузер малює ::before,
   потім вміст, потім ::after. Плашці треба лежати нижче іконки, тож вона
   перша; контур зверху нікому не заважає — це волосина по периметру. */
.theme-toggle::before,
.theme-toggle::after{
  content:'';position:absolute;top:50%;left:50%;
  width:28px;height:29px;margin:-14.5px 0 0 -14px;
}
.theme-toggle::before{
  background-color:var(--nav-chip,var(--field-bg));
  -webkit-mask:var(--gwh-arch-solid) center/contain no-repeat;
  mask:var(--gwh-arch-solid) center/contain no-repeat;
}
.theme-toggle::after{
  background-color:currentColor;
  -webkit-mask:var(--gwh-arch-frame) center/contain no-repeat;
  mask:var(--gwh-arch-frame) center/contain no-repeat;
  opacity:0.5;
  transition:opacity 200ms ease;
}
.theme-toggle:hover{color:var(--accent-primary);}
.theme-toggle:hover::after{opacity:1;}
/* Тактильний відгук натискання — кнопка «втискається» під пальцем. */
.theme-toggle:active{transform:scale(0.88);}
.theme-toggle:focus-visible{outline:2px solid var(--accent-primary);outline-offset:3px;}
/* Іконка 13px: усередині арки 28×29 корисна ширина на висоті іконки — близько
   22px, і 16px торкались би схилів контуру. position/z-index — щоб іконка
   лягла ПОВЕРХ арки-плашки, а не під нею. */
.theme-toggle__icon{width:13px;height:13px;display:block;position:relative;z-index:1;}
html[data-theme="dark"] .theme-toggle__icon--moon{display:none;}
html[data-theme="light"] .theme-toggle__icon--sun{display:none;}
.theme-toggle__icon svg{width:100%;height:100%;display:block;
  fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;}
@media(prefers-reduced-motion:reduce){
  .theme-toggle,.theme-toggle__icon{transition:none;}
  .theme-toggle:active{transform:none;}
}

/* У шапці перемикач стоїть поруч із UA|EN і успадковує її кольори. Обвідка
   там теж арка — вона малюється currentColor, тож достатньо задати колір. */
.nav .theme-toggle{
  background:transparent;
  color:var(--nav-fg-muted,var(--text-secondary));
}
.nav .theme-toggle:hover{color:var(--nav-accent,var(--accent-primary));}

/* Мобільне меню: перемикач у шапці меню, ліворуч від хрестика. Праворуч від
   нього — хрестик, ліворуч — перемикач мови, який приїжджає сюди зі шапки
   сайту. Відсув до правого краю тримає САМЕ перемикач мови (site.css): він
   стоїть у парі першим, і якби auto-поле лишалось тут, глобус прилипав би до
   назви бренду, а порожнє місце зяяло б між двома налаштуваннями. */
.mobile-menu-head .theme-toggle{margin-right:14px;}

/* На телефоні перемикач теми живе ТІЛЬКИ в повноекранному меню — поруч із
   перемикачем мови, який туди ж і переїжджає (власник, 2026-08-20). У шапці
   він поступився місцем назві розділу: після того як із сайту прибрали хлібні
   крихти, це єдина відповідь на «де я» там, де ряд меню згорнутий у бургер.
   Поріг той самий, за яким меню поступається бургеру, — 1060px, а не 400. */
@media(max-width:1060px){
  .nav .theme-toggle{display:none;}
}



/* ───────────────────────────────────────────────────────────────────────────
   ГОЛОВНА КНОПКА У СВІТЛІЙ ТЕМІ
   .btn-gold — це клас основного заклику на всьому сайті, і колір у нього
   зашитий як background:var(--gold). У світлій темі золота заливка на теплому
   фоні втрачає контраст, тому кнопка стає темно-смарагдовою.

   Виняток — герой: там під кнопкою фотографія, і смарагдова кнопка на ній
   просто зникла б, тож вона лишається латунною. Правило йде ДРУГИМ, тому
   перемагає за порядком. Банер і фінальний заклик у світлій темі більше не
   темні, тож вони теж беруть смарагдову кнопку — на теплому фоні латунь на
   ній не тримала контрасту.
   ─────────────────────────────────────────────────────────────────────────── */
html[data-theme="light"] .btn-gold{
  background:var(--emerald-850);color:var(--oyster-100);
}
html[data-theme="light"] .btn-gold:hover{background:var(--emerald-700);}
html[data-theme="light"] .hero .btn-gold,
html[data-theme="light"] .landing-hero .btn-gold{
  background:var(--gold-500);color:var(--emerald-950);
}
html[data-theme="light"] .hero .btn-gold:hover,
html[data-theme="light"] .landing-hero .btn-gold:hover{background:var(--gold-400);}

/* Кнопка-привид поруч із головною: її межа зашита кістяним rgba і на теплому
   фоні світлої теми зникає — напис лишається без контуру. Та сама логіка, що
   й у .btn-gold вище: на світлому — темна рамка, у героя (і лендінга) під нею
   фотографія, тож там кістяна лишається. */
html[data-theme="light"] .btn-ghost{border-color:rgba(22,35,29,0.30);}
html[data-theme="light"] .btn-ghost:hover{border-color:var(--ink-900);}
html[data-theme="light"] .hero .btn-ghost,
html[data-theme="light"] .landing-hero .btn-ghost{border-color:rgba(241,237,229,0.34);}
html[data-theme="light"] .hero .btn-ghost:hover,
html[data-theme="light"] .landing-hero .btn-ghost:hover{border-color:var(--oyster-100);}



/* ───────────────────────────────────────────────────────────────────────────
   ШАПКА НАД СВІТЛОЮ СТОРІНКОЮ
   Прозора шапка від початку розрахована на темний герой під собою: текст у ній
   світлий. У світлій темі це зламалось саме там, де героя немає — на /models/,
   /faq/, /contact/, сторінках моделей і рішень перша ж секція стала теплою
   устрицею, і світлий логотип із меню на ній просто зникли.

   Тому у світлій темі непрокручена шапка за замовчуванням отримує ТЕМНИЙ текст,
   а світлий повертається лише двом сторінкам, у яких під шапкою справді лежить
   фотографія: головній і лендінгу.
   ─────────────────────────────────────────────────────────────────────────── */
/* Заливка кнопок-арок (тема, мова, телефон) у світлій темі — СВІТЛА (власник,
   2026-08-21). Базове значення --nav-chip у site.css розраховане на шапку
   поверх фотографії й темне: rgba(7,21,17,0.42). У світлій темі воно діставалось
   і прокрученій шапці — і три кнопки праворуч сиділи на теплій паперовій панелі
   темно-сірими плямами, помітнішими за самі іконки. Тон той самий, що в полів
   форм світлої теми (--field-bg = --oyster-50), тож кнопка читається як
   поверхня, а не як пляма. Виняток — шапка на фотографії; вона нижче. */
html[data-theme="light"] .nav{
  --nav-chip:var(--oyster-50);
}
html[data-theme="light"] .nav:not(.scrolled){
  --nav-fg:var(--text-primary);
  --nav-fg-muted:var(--text-secondary);
  --nav-accent:var(--accent-primary);
  --nav-accent-ink:var(--accent-ink);
  /* Темної підкладки під шапкою тут не треба: під нею тепла секція, а текст
     і так темний. Пара до --nav-scrim із site.css. */
  --nav-scrim:none;
}
/* Знак теж має стати темним — світла версія на устриці невидима. */
html[data-theme="light"] .nav:not(.scrolled) .nav-logo{
  background-image:url('/assets/images/brand/logo-mark-96.png');
}

/* ───────────────────────────────────────────────────────────────────────────
   ШАПКА НАД ФОТОГРАФІЄЮ: ПЕРЕХІД БЕЗ ПОРОГА (власник, 2026-08-21)

   Тут шапка мусить бути світлою на кадрі й темною на паперовій панелі — і
   раніше вона міняла це РІВНО НА ПОРОЗІ .scrolled (60px), тоді як саме тло
   панелі проявлялось поступово з прокруткою. Наслідок було видно щоразу, коли
   з головної гортали герой униз: на 60-му пікселі текст умить ставав темним,
   тло під ним було ще на дві третини прозорим, а темна розтяжка ще 0,4 с
   згасала — тобто темні літери на темному тлі. Око читало це як блимання
   шапки, і воно ж поверталось при гортанні вгору.

   Розв'язок: один прогрес --nav-reveal (0 → 1, з кривою й тривалістю самої
   шапки — див. @property у site.css) веде ВСІ переходи разом. Кожна пара
   кольорів змішується ним через color-mix, розтяжка згасає як (1 − reveal),
   знак бренду перетікає зі світлої версії в темну другим шаром. Розсинхрон
   став неможливим за побудовою: значення одне.

   color-mix у @supports, а не голим правилом: там, де його немає (Safari до
   16.2), лишається колишня поведінка з порогом — гірша, але робоча.
   ─────────────────────────────────────────────────────────────────────────── */
html[data-theme="light"] body[data-page="home"] .nav:not(.scrolled),
html[data-theme="light"] body[data-hero="photo"] .nav:not(.scrolled),
html[data-theme="light"] body:has(.landing-hero) .nav:not(.scrolled){
  --nav-fg:var(--oyster-100);
  --nav-fg-muted:rgba(241,237,229,0.72);
  --nav-accent:var(--gold-400);
  /* Під шапкою фото, акцент повертається до світлого золота — отже й напис по
     ньому знову темний, попри світлу тему сторінки. Саме цю пару й загубили:
     ivory на gold-400 давав 1.9:1 (власник, 2026-08-21). */
  --nav-accent-ink:var(--emerald-950);
  --nav-scrim:linear-gradient(to bottom,
    rgba(7,21,17,0.72) 0%, rgba(7,21,17,0.42) 52%, rgba(7,21,17,0) 100%);
  --nav-chip:rgba(7,21,17,0.42);
}
/* Подвоєний .nav.nav у селекторах нижче — навмисно, і зняти його не можна.
   Клас .scrolled з'являється НА ПОЧАТКУ переходу, а не в кінці: далі 0,4с
   браузер веде --nav-reveal від 0 до 1. Тому правила суміші мусять діяти в
   обох станах — і при цьому важити більше за запасний блок вище (він із
   :not(.scrolled), тобто на один клас важчий за просте .nav). Друге .nav
   вирівнює вагу, а перемагає цей блок за порядком, як і має. */
@supports (color: color-mix(in srgb, red, blue)){
  html[data-theme="light"] body[data-page="home"] .nav.nav,
  html[data-theme="light"] body[data-hero="photo"] .nav.nav,
  html[data-theme="light"] body:has(.landing-hero) .nav.nav{
    /* Частка «панельного» кольору в суміші. Одна змінна на всі пари — щоб
       текст, слоган, акцент і плашки їхали строго разом. */
    --nav-mix:calc(var(--nav-reveal, 0) * 100%);
    --nav-fg:color-mix(in srgb, var(--text-primary) var(--nav-mix), var(--oyster-100));
    --nav-fg-muted:color-mix(in srgb, var(--text-secondary) var(--nav-mix), rgba(241,237,229,0.72));
    --nav-accent:color-mix(in srgb, var(--accent-primary) var(--nav-mix), var(--gold-400));
    /* Чорнило їде тим самим прогресом і в той самий бік: акцент світлішає —
       напис темнішає, і навпаки. Інакше на середині переїзду виходила б пара
       «майже біле по світлому», тобто та сама пляма, лише коротша. */
    --nav-accent-ink:color-mix(in srgb, var(--accent-ink) var(--nav-mix), var(--emerald-950));
    --nav-chip:color-mix(in srgb, var(--oyster-50) var(--nav-mix), rgba(7,21,17,0.42));
    --nav-scrim:linear-gradient(to bottom,
      rgba(7,21,17,0.72) 0%, rgba(7,21,17,0.42) 52%, rgba(7,21,17,0) 100%);
  }
  /* Розтяжка згасає рівно тим самим прогресом, яким проявляється панель: сума
     двох шарів лишається сталою, тож смуга ніде не темніє і ніде не світлішає
     стрибком. Власного транзішена немає — його веде --nav-reveal. */
  html[data-theme="light"] body[data-page="home"] .nav.nav::before,
  html[data-theme="light"] body[data-hero="photo"] .nav.nav::before,
  html[data-theme="light"] body:has(.landing-hero) .nav.nav::before{
    opacity:calc(1 - var(--nav-reveal, 0));
    transition:none;
  }
}
html[data-theme="light"] body[data-page="home"] .nav:not(.scrolled) .nav-logo,
html[data-theme="light"] body[data-hero="photo"] .nav:not(.scrolled) .nav-logo,
html[data-theme="light"] body:has(.landing-hero) .nav:not(.scrolled) .nav-logo{
  background-image:url('/assets/images/brand/logo-mark-light-96.png');
}
/* Знак бренду двома шарами: світла версія лишається фоном, темна лежить над
   нею псевдоелементом і проявляється тим самим --nav-reveal. Перемальовувати
   маскою не можна — маска зробила б знак одноколірним і з'їла б золоту лінію
   всередині арки (див. site.css).

   Лише від 1280px: нижче знак у непрокрученій шапці не показується взагалі, і
   там діють власні правила вузької шапки (site.css, @media max-width:1279px). */
@media(min-width:1280px){
  html[data-theme="light"] body[data-page="home"] .nav .nav-logo,
  html[data-theme="light"] body[data-hero="photo"] .nav .nav-logo,
  html[data-theme="light"] body:has(.landing-hero) .nav .nav-logo{
    position:relative;
    background-image:url('/assets/images/brand/logo-mark-light-96.png');
  }
  html[data-theme="light"] body[data-page="home"] .nav .nav-logo::before,
  html[data-theme="light"] body[data-hero="photo"] .nav .nav-logo::before,
  html[data-theme="light"] body:has(.landing-hero) .nav .nav-logo::before{
    content:'';position:absolute;left:0;top:0;bottom:0;width:48px;
    background:url('/assets/images/brand/logo-mark-96.png') left center/48px 36px no-repeat;
    opacity:var(--nav-reveal, 0);
    pointer-events:none;
  }
}
/* :has() підтримують не всі браузери, тож для лендінгу є ще й прямий запобіжник
   через його власний клас на секції — він спрацьовує незалежно від :has(). */
html[data-theme="light"] .landing-hero{
  --nav-fg:var(--oyster-100);
  --nav-fg-muted:rgba(241,237,229,0.72);
}



/* Застосування текстури живе в КІНЦІ site.css, а не тут. Причина проста:
   базові правила секцій (.benefits{background:var(--dark2)} тощо) написані
   скороченням background, а воно скидає background-image. site.css
   підключається після theme.css, тож будь-яке правило звідси програвало б їм
   за порядком — текстура зникала б, лишаючи саме тільки змішування. */

/* ── ПЛАВНЕ ПРОЯВЛЕННЯ ШАПКИ У СВІТЛІЙ ТЕМІ (власниця, 2026-08-18) ──
   Замість стрибка «прозора → паперова панель» на порозі .scrolled фон шапки
   набирає непрозорість поступово: --nav-reveal іде 0 → 1. Темної теми це не
   стосується: там тон шапки збігається з тлом сторінки, і стрибка не видно. */
html[data-theme="light"] .nav,
html[data-theme="light"] .nav.scrolled{
  /* Множник 1, а не 0.88 (власниця, 2026-08-22): проявлення лишається плавним,
     але доходить до КІНЦЯ. На 0.88 крізь готову шапку просвічував заголовок
     секції, що проходив під нею, і змішувався з логотипом. Тут значення
     записане числом, а не через --nav-bg-scrolled: цей рядок веде анімацію
     проявлення, і токен у ньому не використовується (див. коментар вище). */
  background:rgba(241,237,229, calc(var(--nav-reveal, 0) * 1));
  /* Фон веде --nav-reveal, тож власний транзішен йому не потрібен — він лише
     додав би другу, іншу криву поверх першої. Решта переходів лишається. */
  transition-property:--nav-reveal,backdrop-filter,border-color,padding;
}
