/* ============================================================
   FOAM HEROES — дизайн-система v1 «Гараж-зин»
   База: чёрный + тёплая бумага + кислотный жёлтый,
   акценты — цвета линейки составов (см. --c-*)
   ============================================================ */

/* ---------- 1. Шрифты (лицензионные, из папки «Шрифты») ----------
   Заголовочный шрифт — Wix Madefor Display (19.08). Gotham Pro убран целиком
   21.08: лицензии нет, файлы больше не раздаём.
   THURSTON — только латиница, для названий составов.
   Веб-текст (body) = Manrope — решение владельца 31.07. Museo Sans Cyrl 500 куплен, но
   это единственный вес; для веба оставляем Manrope (все веса, кириллица, единый рендер
   на всех машинах). Museo убран из стека, чтобы не «плыть» на машинах, где он установлен. */


/* Manrope (body) + JetBrains Mono (моно) — самохостинг вместо Google Fonts (перф + 152-ФЗ).
   Вариативные (1 файл/сабсет), веса 400–700, кир+лат сабсеты. OFL, самохостинг легален. */
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/manrope-cyrillic-ext.woff2") format("woff2");unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/manrope-cyrillic.woff2") format("woff2");unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/manrope-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/manrope-latin.woff2") format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/jbmono-cyrillic-ext.woff2") format("woff2");unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/jbmono-cyrillic.woff2") format("woff2");unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/jbmono-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/jbmono-latin.woff2") format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}

/* ---------- 2. Токены ---------- */
:root {
  /* цвет */
  --ink:    #0C0C0C;
  --paper:  #F2F3F5;   /* холодный светло-серый: единая светлая база, без бежевого */
  --white:  #FFFFFF;
  --acid:   #FFD02F;          /* фирменный акцент, hover/выделения */
  --acid-deep: #F5B90A;

  /* цвета линейки составов (= цвета категорий) */
  --c-wash: #1F3BD1;          /* мойка и экстерьер — Chuck NoRinse blue */
  --c-int:  #F58A1F;          /* интерьер — Clean Ton orange */
  --c-prot: #E63A7E;          /* защита — Mad Drops pink */
  --c-kit:  #FFC93C;          /* оборудование — yellow */
  --c-acc:  #5A34B8;          /* аксессуары — Pure Wheels purple */
  --c-eco:  #63BF4A;          /* Lime Scrub green — сервисный/успех */

  --ink-08: rgba(12, 12, 12, .08);
  --ink-16: rgba(12, 12, 12, .16);
  --ink-55: rgba(12, 12, 12, .62);

  /* типографика */
  --f-disp: "Wix Madefor Display",system-ui,sans-serif;
  --f-body: "Manrope", system-ui, -apple-system, "Segoe UI", sans-serif;
  --f-mono: "JetBrains Mono", ui-monospace, monospace;
  /* Маркерный шрифт (21.08): Thurston убран — в файле «All Rights Reserved»,
     лицензия не указана, ровно как было с Gotham Pro. Заменён на заголовочный
     Wix Madefor Display: он свободный (OFL), уже грузится на каждой странице,
     значит замена стоит ноль дополнительных байт, и кириллица у него есть. */
  --f-marker: "Wix Madefor Display", system-ui, sans-serif;

  --fs-hero: clamp(2.5rem, 6.4vw, 5.9rem);
  --fs-h2:   clamp(2rem, 4.6vw, 4.25rem);
  --fs-page-title: clamp(1.9rem, 3.6vw, 3rem);  /* заголовок ВНУТРЕННЕЙ страницы (не геройский hero) */
  --fs-h2-section: clamp(1.75rem, 3vw, 2.75rem);  /* секционный H2 — единый (был то 44, то 68px) */
  --acid-rgb: 255,208,47; --c-kit-rgb: 255,201,60; --c-prot-rgb: 230,58,126;  /* RGB-каналы фирм-цветов для rgba() */
  --fs-h3:   clamp(1.25rem, 2.2vw, 1.75rem);
  --fs-body: 1.0625rem;    /* 17px */
  --fs-small: .875rem;
  --fs-mono: .8125rem;

  /* пространство (8pt) */
  --s-1: 8px;  --s-2: 16px; --s-3: 24px; --s-4: 32px;
  --s-5: 48px; --s-6: 64px; --s-7: 96px; --s-8: 128px;

  /* форма — стикерная пластика */
  --r-chip: 999px;
  --r-xs: 8px;
  --r-sm: 12px;
  --r-card: 14px;
  --r-lg: 20px;
  --r-panel: 24px;
  --header-h: 92px;  /* высота липкой шапки — единый оффсет для sticky/scroll-anchor */
  --border: 1.5px solid var(--ink);
  --hairline: 1px solid rgba(12, 12, 12, .14);
  --shadow-sticker: 0 22px 48px -22px rgba(12, 12, 12, .30);
  --shadow-sticker-hover: 0 32px 64px -26px rgba(12, 12, 12, .38);

  /* движение */
  --t-fast: 150ms cubic-bezier(.2, .8, .3, 1);
  --t-med:  280ms cubic-bezier(.2, .8, .3, 1);

  --container: 1280px;
  --gutter: clamp(16px, 4vw, 48px);
  /* ★ 21.08: единый отступ от конца страницы до подвала (см. блок «ЕДИНЫЙ ОТСТУП») */
  --gap-footer: clamp(48px, 5vw, 64px);
}

/* ---------- 3. Сброс и база ---------- */
*, *::before, *::after { box-sizing: border-box; }
/* scrollbar-gutter:stable — место под полосу прокрутки резервируется ВСЕГДА.
   19.08 (владелец: «при зуме фото скачет вёрстка»): при открытии просмотра фото и
   мобильного меню скрипт ставит корню overflow:hidden — на Windows классическая полоса
   прокрутки исчезает, документ становится шире на ~15 точек, и весь сайт прыгает вправо.
   С резервом полосы ширина не меняется и прыжка нет. На iOS полоса накладная — там ничего
   не меняется. */
html { scroll-behavior: smooth; overflow-x: clip; scrollbar-gutter: stable; }
/* Страховка от бокового скролла на мобиле (clip не ломает sticky-хедер). */
body { overflow-x: clip; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}
body {
  margin: 0;
  font-family: var(--f-body);
  font-size: var(--fs-body);
  line-height: 1.6;
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
}
img, video { max-width: 100%; height: auto; display: block; }
a { color: inherit; }
button { font: inherit; cursor: pointer; }
:focus-visible {
  outline: 3px solid var(--c-wash);
  outline-offset: 3px;
  border-radius: 4px;
}
.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  background: var(--ink); color: var(--white);
  padding: 12px 20px; font-weight: 700;
}
.skip-link:focus { left: 12px; top: 12px; }

.container {
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* ---------- 4. Типографика ---------- */
html { color-scheme: light; }
h1, h2, h3 { line-height: 1.02; margin: 0; text-wrap: balance; }
.h-display {
  font-family: var(--f-disp);
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: -.015em;
}
h1.h-display { font-size: var(--fs-hero); }
/* 19.08: секционный H2 уважает предохранитель от разрыва слова — так же, как H1.
   --h2cap приходит инлайном из render.js и равен кеглю, при котором самое длинное
   слово этого заголовка влезает в колонку целиком. Где переменной нет, min() берёт
   999px и правило работает как раньше. */
h2.h-display { font-size: min(var(--fs-h2-section), var(--h2cap, 999px)); }
.h3 { font-family: var(--f-disp); font-weight: 800; font-size: var(--fs-h3); letter-spacing: -.01em; }

/* маркер-выделение слова в заголовке */
.hl {
  position: relative;
  display: inline;
  padding: 0 .02em;
  background: linear-gradient(transparent 82%, var(--hl-c, var(--acid)) 82%, var(--hl-c, var(--acid)) 96%, transparent 96%);
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
}
.hl--pink { --hl-c: var(--c-prot); }
.hl--blue { --hl-c: var(--c-wash); }

/* моно-надзаголовок: гиковский слой */
.eyebrow {
  font-family: var(--f-mono);
  font-size: var(--fs-mono);
  text-transform: uppercase;
  letter-spacing: .08em;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-bottom: var(--s-2);
}
.eyebrow::before { content: "▸"; color: var(--c-prot); }

.section-lead { max-width: 56ch; font-size: 1.125rem; margin-top: var(--s-2); }
.mono { font-family: var(--f-mono); font-size: var(--fs-mono); }

/* ---------- 5. Кнопки, чипы ---------- */
.btn {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 14px 26px;
  min-height: 48px;
  font-family: var(--f-disp);
  font-weight: 800;
  font-size: 1rem;
  text-transform: uppercase;
  letter-spacing: .02em;
  text-decoration: none;
  border: var(--border);
  border-radius: var(--r-chip);
  background: var(--ink); color: var(--white);
  transition: transform var(--t-fast), background var(--t-fast),
              color var(--t-fast), border-color var(--t-fast);
}
.btn:hover { background: var(--acid); color: var(--ink); border-color: var(--acid); transform: scale(1.03); }
.btn:active { transform: scale(.99); }
.btn--ghost { background: transparent; color: var(--ink); }
.btn--ghost:hover { background: var(--ink); color: var(--white); }
.btn--acid { background: var(--acid); color: var(--ink); }
.btn--acid:hover { background: var(--ink); color: var(--acid); }
.btn--ondark { border-color: var(--white); background: var(--white); color: var(--ink); }
.btn--ondark:hover { background: var(--acid); color: var(--ink); border-color: var(--acid); }
.btn--ondark-ghost { border-color: var(--white); background: transparent; color: var(--white); box-shadow: none; }
.btn--ondark-ghost:hover { background: var(--white); color: var(--ink); }

.chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 14px;
  border: var(--border);
  border-radius: var(--r-chip);
  font-family: var(--f-mono);
  font-size: var(--fs-mono);
  background: var(--white);
  white-space: nowrap;
}
.chip--acid { background: var(--acid); }
.chip--soft { border-color: var(--ink-16); }

/* стикер-бейдж (наклейка) */
.sticker {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 14px;
  font-family: var(--f-mono);
  font-size: .6875rem;
  text-transform: uppercase;
  letter-spacing: .12em;
  border: 1px solid rgba(255,255,255,.4);
  border-radius:var(--r-chip);
  background: rgba(12,12,12,.42);
  color: var(--white);
  backdrop-filter: blur(8px);
}
.sticker::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--acid); }
.sticker--acid::before { background: var(--acid); }
.sticker--pink::before { background: var(--c-prot); }
.sticker--r::before { background: var(--white); }

/* ---------- 6. Хедер: чёрный, лого в белом круге (канон гайда) ---------- */
.site-header {
  position: sticky; top: 0; z-index: 100;
  background: var(--ink);
  color: var(--white);
  transition: box-shadow var(--t-med);
}
.site-header.is-scrolled { box-shadow: 0 6px 24px rgba(15,14,12,.45); }
.header-inner {
  display: flex; align-items: center; gap: var(--s-2);
  min-height: 92px;
}
.logo {
  display: grid; place-items: center; flex-shrink: 0;
  width: 72px; height: 72px;
  background: var(--white);
  border-radius: 50%;
  transition: transform var(--t-med);
  transform-origin: center center;
}
.logo img { width: 62px; height: auto; display: block; }
.logo:hover { transform: rotate(-6deg); }

/* язык + личный кабинет (структура как в v10, на тёмном) */
.hdr-actions { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.hdr-lang {
  display: inline-flex;
  border: 1.5px solid rgba(255,255,255,.4);
  border-radius: var(--r-chip);
  overflow: hidden;
}
.hdr-lang-btn {
  border: 0; background: transparent;
  padding: 7px 12px;
  font-family: var(--f-disp); font-weight: 700; font-size: .8125rem;
  color: rgba(255,255,255,.55);
  transition: background var(--t-fast), color var(--t-fast);
}
.hdr-lang-btn.is-active { background: var(--white); color: var(--ink); }
.hdr-lang-btn:not(.is-active):hover { color: var(--white); }
.hdr-b2b {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 16px;
  border: 1.5px solid rgba(255,255,255,.4);
  border-radius: var(--r-chip);
  color: var(--white);
  font-family: var(--f-disp); font-weight: 700; font-size: .8125rem;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast);
}
.hdr-b2b:hover { background: var(--acid); color: var(--ink); border-color: var(--acid); }
@media (max-width: 1280px) { .hdr-b2b span { display: none; } .hdr-b2b { padding: 9px 11px; } }
.main-nav { display: flex; gap: 6px; margin-inline: auto; }
.main-nav a {
  padding: 9px 13px;
  white-space: nowrap;
  font-family: var(--f-disp);
  font-weight: 700;
  font-size: .875rem;
  text-transform: uppercase;
  letter-spacing: .02em;
  text-decoration: none;
  border-radius: var(--r-chip);
  transition: background var(--t-fast), color var(--t-fast);
}
/* ховер только для мыши: на таче он «залипает» после нажатия (жёлтая пилюля оставалась в меню) */
@media (hover: hover) { .main-nav a:hover { background: var(--acid); color: var(--ink); } }
.main-nav a[aria-current="page"] { background: var(--white); color: var(--ink); }
.header-cta { margin-left: var(--s-2); }
.burger {
  display: none;
  margin-left: auto;
  width: 48px; height: 48px;
  border: var(--border); border-radius:var(--r-sm);
  background: var(--white);
  flex-direction: column; align-items: center; justify-content: center; gap: 5px;
}
.burger span { width: 20px; height: 2.5px; background: var(--ink); border-radius: 2px; transition: transform var(--t-fast), opacity var(--t-fast); }
.burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(7.5px) rotate(45deg); }
.burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7.5px) rotate(-45deg); }

@media (max-width: 1060px) {
  .main-nav, .header-cta, .hdr-actions { display: none; }
  .burger { display: flex; }
  .header-inner { min-height: 88px; }
  .logo { width: 68px; height: 68px; }
  .logo img { width: 58px; height: auto; }
  /* язык и кабинет дублируются внизу мобильного меню */
  .mnav-extra {
    display: flex; align-items: center; gap: 16px;
    padding: 20px 14px 0;
    border-top: 1px solid rgba(255,255,255,.25);
    margin-top: auto;
  }
  /* Полноэкранная шторка меню (утверждено 08.08; правки по живому iPhone-тесту):
     фон блокируется классом html.menu-locked (ставит main.js).
     Пока меню открыто, шапка = fixed: на iOS overflow:hidden убивает sticky,
     и лого с крестом уезжали за экран — fixed чинит по построению. */
  .site-header.nav-open { position: fixed; top: 0; left: 0; right: 0; }
  /* Шторка вылезает за края вьюпорта на 120px: Safari на iOS рисует страницу
     в зонах статус-бара и нижней панели — отрицательные top/bottom закрашивают
     их чёрным, фон не «проскакивает» ни сверху, ни снизу. */
  .site-header.nav-open .main-nav {
    display: flex; flex-direction: column;
    position: fixed; top: -120px; bottom: -120px; left: 0; right: 0; z-index: 250;
    background: var(--ink);
    padding: 224px var(--gutter) 28px;
    padding-bottom: calc(max(28px, env(safe-area-inset-bottom)) + 120px);
    overflow-y: auto; overscroll-behavior: contain;
  }
  /* лого и крест остаются поверх шторки */
  .site-header.nav-open .logo,
  .site-header.nav-open .burger { position: relative; z-index: 260; }
  .site-header.nav-open .main-nav a { font-size: 1.05rem; padding: 12px 14px; border-radius: var(--r-sm); }
  .site-header.nav-open .main-nav a:active { background: rgba(255,255,255,.08); }
  /* низ шторки: язык и кабинет — без «чипов», читаемые на чёрном */
  .site-header.nav-open .hdr-lang { border-color: rgba(255,255,255,.55); }
  .site-header.nav-open .hdr-lang-btn { color: rgba(255,255,255,.85); }
  .site-header.nav-open .hdr-lang-btn[data-lang] { opacity: .85; }
  .site-header.nav-open .hdr-lang-btn.is-active { color: var(--ink); }
  .site-header.nav-open .mnav-extra .hdr-b2b { border: 0; padding: 12px 0; font-size: .95rem; }
  /* в полноэкранном меню подпись «Личный кабинет» видна (глобальное ≤1280 её прячет) */
  .mnav-extra .hdr-b2b span { display: inline; }
  /* фон не скроллится, пока открыто меню; холст страницы — чёрный:
     даже за пределами вылета шторки (резинка iOS, зоны панелей Safari) — чернота */
  html.menu-locked, html.menu-locked body { overflow: hidden; background: var(--ink); }
  /* и сам контент страницы на время меню невидим (visibility — без сдвигов и потери
     позиции скролла): подложка нижней панели Safari рисует документ, а не fixed-слои —
     прятать контент = единственный надёжный способ убрать «просвет» снизу */
  html.menu-locked body > :not(.site-header) { visibility: hidden; }
}

/* ---------- 7. Hero ---------- */
.hero {
  position: relative;
  /* влезает в один экран вместе с хедером (112px) */
  min-height: clamp(460px, calc(100svh - 150px), 820px);
  display: flex; align-items: flex-end;
  color: var(--white);
  overflow: hidden;
  background: var(--ink);
}
.hero video, .hero .hero-fallback {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 1.2s ease;
}
.hero video.is-front { opacity: .62; }
.hero::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(15,14,12,.1) 30%, rgba(15,14,12,.82) 100%);
}
.hero-inner {
  position: relative; z-index: 2;
  width: 100%;
  padding-block: var(--s-5) var(--s-5);
}
@media (max-width: 420px) {
  :root { --fs-hero: clamp(1.9rem, 10vw, 2.4rem); }
}
@media (max-height: 760px) {
  :root { --fs-hero: clamp(2.2rem, 5.6vw, 4.6rem); }
  .hero-sub { font-size: 1.0625rem; margin-top: var(--s-2); }
  .hero-cta { margin-top: var(--s-3); }
}
.hero .eyebrow { color: var(--acid); }
.hero .eyebrow::before { color: var(--acid); }
.hero h1 { max-width: 17ch; text-wrap: balance; }
.hero-sub {
  max-width: 46ch;
  font-size: 1.1875rem;
  margin-top: var(--s-3);
  color: rgba(255,255,255,.9);
}
.hero-cta { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-top: var(--s-4); }
.hero-stickers {
  position: absolute; z-index: 2;
  top: clamp(84px, 12vh, 140px); right: var(--gutter);
  display: flex; flex-direction: column; gap: 14px; align-items: flex-end;
}
@media (max-width: 700px) { .hero-stickers { display: none; } }

/* ---------- 8. Marquee (бегущая строка) ---------- */
.marquee {
  overflow: hidden;
  border-block: var(--border);
  background: var(--acid);
  padding-block: 12px;
}
.marquee--tilt { transform: rotate(-1.2deg) scale(1.02); margin-block: -8px; position: relative; z-index: 3; }
.marquee-track {
  display: flex; gap: 0;
  width: max-content;
  animation: marquee 84s linear infinite;  /* -50% теперь = 3 копии, длительность ×3 → та же скорость */
}
.marquee span {
  font-family: var(--f-mono);
  font-weight: 700;
  font-size: .8125rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  white-space: nowrap;
  padding-inline: 16px;
}
.marquee span::after { content: "·"; margin-left: 32px; opacity: .5; }
@keyframes marquee { to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) {
  .marquee-track { animation: none; flex-wrap: wrap; width: auto; }
}

/* ---------- 9. Секции ---------- */
.section { padding-block: clamp(36px, 4vw, 60px); }
.section--white { background: var(--white); }
.section--ink { background: var(--ink); color: var(--white); }
.section-head { margin-bottom: clamp(20px, 2.5vw, 36px); }
/* заголовок внутри цветной секции шоукейса */
.showcase-head { padding-top: clamp(28px, 3vw, 44px); }
.showcase-head .eyebrow { color: rgba(255,255,255,.9); }
.showcase-head .eyebrow::before { color: var(--white); }
.section-head--row {
  display: flex; flex-wrap: wrap; align-items: flex-end;
  justify-content: space-between; gap: var(--s-3);
}

/* появление при скролле */
/* прячем контент для reveal-анимации ТОЛЬКО при работающем JS (html.js ставит инлайн-скрипт в head,
   main.js подтверждает; нет JS — контент виден сразу, встроенные браузеры TG/VK не видят пустых страниц) */
html.js .reveal { opacity: 0; transform: translateY(24px); transition: opacity .6s ease, transform .6s cubic-bezier(.2,.8,.3,1); }
/* правила раскрытия обязаны быть НЕ слабее прячущего (html.js = 2 класса + элемент) */
html.js .reveal.is-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { html.js .reveal { opacity: 1; transform: none; } }

/* ---------- 11. Категории ---------- */
.cat-grid {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: var(--s-2);
}
.cat-card {
  grid-column: span 2;
  position: relative;
  display: flex; flex-direction: column; justify-content: flex-end;
  min-height: 240px;
  padding: var(--s-3);
  border: var(--border);
  border-radius: var(--r-panel);
  background: var(--cat, var(--white));
  color: var(--cat-ink, var(--white));
  text-decoration: none;
  overflow: hidden;
  transition: transform var(--t-med), box-shadow var(--t-med);
}
.cat-card:nth-child(1), .cat-card:nth-child(2) { grid-column: span 3; min-height: 280px; }
.cat-card:hover { transform: translate(-3px, -3px); box-shadow: var(--shadow-sticker-hover); }
.cat-card h3 {
  font-family: var(--f-disp);
  font-weight: 800;
  font-size: clamp(1.5rem, 2.6vw, 2.25rem);
  text-transform: uppercase;
  letter-spacing: -.01em;
}
.cat-card .cat-count {
  font-family: var(--f-mono);
  font-size: var(--fs-mono);
  opacity: .85;
  margin-top: 6px;
}
.cat-card .cat-arrow {
  position: absolute; top: var(--s-3); right: var(--s-3);
  width: 44px; height: 44px;
  display: grid; place-items: center;
  border: 2px solid currentColor;
  border-radius: 50%;
  transition: transform var(--t-med), background var(--t-fast), color var(--t-fast);
}
.cat-card:hover .cat-arrow { transform: rotate(45deg); background: var(--white); color: var(--ink); border-color: var(--white); }
@media (max-width: 900px) {
  .cat-grid { grid-template-columns: minmax(0,1fr) minmax(0,1fr); }
  .cat-card, .cat-card:nth-child(1), .cat-card:nth-child(2) { grid-column: span 1; min-height: 200px; }
  .cat-card:last-child { grid-column: span 2; }
}
@media (max-width: 540px) {
  .cat-grid { grid-template-columns: minmax(0,1fr); }
  .cat-card:last-child { grid-column: span 1; }
}

/* ---------- 13. Карточки продуктов ---------- */
.prod-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s-3);
}
.prod-card {
  position: relative;
  display: flex; flex-direction: column;
  background: var(--white);
  border: var(--border);
  border-radius: var(--r-card);
  overflow: hidden;
  text-decoration: none;
  transition: transform var(--t-med), box-shadow var(--t-med);
}
.prod-card:hover { transform: translate(-3px, -3px); box-shadow: var(--shadow-sticker); }
.prod-media {
  position: relative;
  background: var(--white);
  aspect-ratio: 1;
  display: grid; place-items: center;
  border-bottom: var(--border);
}
.prod-media img {
  max-width: 84%; max-height: 84%; width: auto; height: auto;
  object-fit: contain;
  transition: transform var(--t-med);
}
.prod-card:hover .prod-media img { transform: scale(1.05) rotate(-1.5deg); }
/* фолбэк для товара без фото — брендовый водяной знак вместо бледного «Фото скоро» */
.prod-ph { width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; background: var(--paper); }
.prod-ph-logo { width: 46%; max-width: 96px; height: auto; opacity: .22; }
.prod-ph-cap { font-family: var(--f-mono); font-size: .6875rem; text-transform: uppercase; letter-spacing: .06em; color: var(--ink-55); }
/* фото вехи истории (about) и карта/фото контактов — из CMS */
/* 11.08 (владелец): вертикальные 3:4 вместо 4:3 */
.rm-photo { display: block; width: 100%; aspect-ratio: 3/4; object-fit: cover; border-radius: var(--r-sm); margin-top: var(--s-3); }
/* на невысоких экранах (ноутбуки) фото вехи мягко режется по высоте, чтобы карточка
   с заголовком секции влезала в вьюпорт во время закрепа ленты */
@media (min-width: 901px) {
  .rm-photo { max-height: max(250px, calc(100vh - 535px)); }
}
.contact-map { display: block; width: 100%; min-height: 340px; border-radius: var(--r-lg); overflow: hidden; object-fit: cover; background: var(--paper); }
.contact-map iframe { width: 100%; height: 100%; min-height: 340px; display: block; border: 0; }
.prod-badge { position: absolute; top: 12px; left: 12px; }
.prod-body { padding: var(--s-2) var(--s-3) var(--s-3); display: flex; flex-direction: column; gap: 8px; flex: 1; }
.prod-name {
  font-family: var(--f-disp);
  font-weight: 800;
  font-size: 1.1875rem;
  text-transform: uppercase;
}
.prod-line { font-size: var(--fs-small); color: var(--ink-55); }
.prod-scent { align-self: flex-start; }
.prod-meta {
  margin-top: auto;
  display: flex; align-items: center; justify-content: space-between;
  padding-top: var(--s-2);
}
.prod-price { font-family: var(--f-disp); font-weight: 800; font-size: 1.25rem; }
.rub { font-weight: 500; }  /* знак ₽ — вес 500: легче жирных цифр 800/900 */
.prod-rating { font-family: var(--f-mono); font-size: var(--fs-mono); color: var(--ink-55); }
@media (max-width: 1100px) { .prod-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Пакет Б (утв. владельцем 08.08): на телефоне 2 компактные колонки товаров вместо 1 гиганта (8 товаров были 13 экранов) */
@media (max-width: 540px)  { .prod-grid { grid-template-columns: repeat(2, minmax(0,1fr)); gap: 10px; } }

/* фото-заглушка: что и куда вставить */
.ph {
  position: relative;
  display: grid; place-items: center;
  aspect-ratio: var(--ph-ratio, 1);
  border: 2px dashed var(--ink-55);
  border-radius: var(--r-card);
  background:
    repeating-linear-gradient(45deg, transparent 0 14px, var(--ink-08) 14px 15px),
    var(--white);
  padding: var(--s-2);
  text-align: center;
}
.ph .ph-label {
  max-width: min(30ch, 100%);
  font-family: var(--f-mono);
  font-size: var(--fs-mono);
  line-height: 1.5;
  background: var(--white);
  border: 1px solid var(--ink-16);
  border-radius:var(--r-xs);
  padding: 8px 12px;
}
.section--ink .ph, .scene .ph { background: repeating-linear-gradient(45deg, transparent 0 14px, rgba(255,255,255,.07) 14px 15px), transparent; border-color: rgba(255,255,255,.5); }
.section--ink .ph .ph-label, .scene .ph .ph-label {
  max-width: min(30ch, 100%); background: var(--ink); border-color: rgba(255,255,255,.3); color: rgba(255,255,255,.85); }

/* ---------- 15. Отзывы ---------- */
.reviews-grid {
  display: grid;
  /* 12.08: auto-FILL, не auto-fit — при 2-3 реальных отзывах auto-fit схлопывал пустые
     треки и растягивал карточки в полосы на 576px (у соседних блоков карточка 282px) */
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--s-4);
}
.review-card {
  background: var(--white);
  border: var(--border);
  border-radius: var(--r-card);
  box-shadow: 4px 4px 0 var(--ink-16);
  padding: var(--s-3);
  display: flex; flex-direction: column; gap: var(--s-2);
}
.review-card blockquote { margin: 0; font-size: 1.0625rem; }
.review-who { display: flex; align-items: center; gap: 12px; margin-top: auto; }
.review-ava {
  width: 44px; height: 44px; flex-shrink: 0;
  border-radius: 50%;
  border: var(--border);
  display: grid; place-items: center;
  font-family: var(--f-disp); font-weight: 800;
  background: var(--av, var(--acid));
}
.review-name { font-weight: 700; font-size: var(--fs-small); }
.review-src { font-family: var(--f-mono); font-size: .75rem; color: var(--ink-55); }
.review-stars { color: var(--acid-deep); letter-spacing: 2px; }
.review-product {
  font-family: var(--f-mono); font-size: .75rem; letter-spacing: .08em;
  text-transform: uppercase; color: var(--ink-55);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ---------- 16. Где купить ---------- */
.buy-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s-2);
}
.buy-tile {
  display: flex; flex-direction: column; gap: 6px;
  padding: var(--s-3);
  border: var(--border);
  border-radius: var(--r-card);
  background: var(--white);
  text-decoration: none;
  font-family: var(--f-disp); font-weight: 800; font-size: 1.125rem;
  transition: transform var(--t-fast), box-shadow var(--t-fast), background var(--t-fast);
}
.buy-tile .mono { color: var(--ink-55); font-weight: 400; }
.buy-tile:hover { transform: translate(-2px, -2px); box-shadow: var(--shadow-sticker); background: var(--acid); }
@media (max-width: 900px) { .buy-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* ---------- 17. FAQ ---------- */
/* 30.08: список во всю ширину контейнера. Было 820 при контейнере 1184, и
   жёлтая плашка под ним не совпадала краем — расхождение 364 px. */
.faq-list { max-width: none; }
/* Плашка после списка — тоже во всю ширину, край совпадает. */
.faq-list + .hint { max-width: none; }
.faq-item { border-bottom: var(--border); }
/* 30.08: у последнего вопроса линии нет — сверху у первого её тоже нет,
   и висящая снизу читалась как недоделка. */
.faq-item:last-child { border-bottom: 0; }
.faq-item summary {
  list-style: none;
  display: flex; align-items: center; justify-content: space-between; gap: var(--s-3);
  padding: var(--s-3) 4px;
  /* 30.08: вес 700, а не 800. На телефоне заголовок блока упирается в нижнюю
     границу clamp и даёт 20px, вопрос — 17px: разница 1,18x при одинаковом весе,
     и уровни сливались в один. Иерархию теперь держит насыщенность, а не кегль,
     и это работает на любой ширине экрана. */
  font-family: var(--f-disp); font-weight: 700; font-size: 1.1875rem;
  line-height: 1.3; /* 09.08: вопросы в 2 строки не разъезжаются */
  cursor: pointer;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+";
  flex-shrink: 0;
  width: 40px; height: 40px;
  display: grid; place-items: center;
  border: var(--border); border-radius: 50%;
  font-weight: 400; font-size: 1.5rem;
  transition: transform var(--t-med), background var(--t-fast);
}
.faq-item[open] summary::after { transform: rotate(45deg); background: var(--acid); }
/* 30.08: текст ответа 92ch (~900 px). Подобрано замером: у 12 живых ответов
   число строк одинаково в диапазоне 900-1050 px — шире 900 строка только
   удлиняется без выигрыша, уже 900 ответы распухают. */
.faq-item .faq-body { padding: 0 4px var(--s-3); max-width: 92ch; }
/* 30.08: гасим ВЕРХНИЙ margin абзаца — 17 px умолчания браузера, которых никто
   не задавал: глобального сброса полей на сайте нет. От вопроса до его ответа
   набегало 54 px против 79 до следующего вопроса, ответ висел посередине между
   двумя вопросами. Стало 37 против 79.
   Нижний margin оставлен НАМЕРЕННО: без него ответ подтянулся бы и к следующему
   вопросу, соотношение упало бы до 1:1,7 — та же болезнь с другой стороны. Он же
   держит расстояние между абзацами внутри длинного ответа. */
.faq-item .faq-body p { margin-top: 0; }

/* ---------- 19. Футер ---------- */
.site-footer {
  background: var(--ink);
  color: var(--white);
  padding-block: var(--s-6) var(--s-4);
}
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: var(--s-4);
}
.footer-brand img { width: 72px; height: 72px; border-radius: 50%; }
.footer-brand .footer-logo { width: auto; height: 56px; border-radius: 0; }
.footer-brand p { color: rgba(255,255,255,.7); max-width: 30ch; }
/* 09.08: заголовки колонок — это навигация, ей голос Gotham (как в меню), а не мono;
   жёлтый снят — самый громкий цвет подвала доставался самому служебному тексту */
.footer-col h3 {
  font-family: var(--f-disp); font-weight: 800; font-size: .8125rem;
  text-transform: uppercase; letter-spacing: .06em;
  color: var(--white);
  margin-bottom: var(--s-2);
}
.footer-col ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.footer-col a { text-decoration: none; color: rgba(255,255,255,.85); }
.footer-col a:hover { color: var(--acid); }
.footer-bottom {
  margin-top: var(--s-6);
  padding-top: var(--s-3);
  border-top: 1px solid rgba(255,255,255,.2);
  display: flex; flex-wrap: wrap; gap: var(--s-2);
  justify-content: space-between;
  font-family: var(--f-mono); font-size: .75rem;
  color: rgba(255,255,255,.55);
}
@media (max-width: 900px) { .footer-grid { grid-template-columns: minmax(0,1fr) minmax(0,1fr); } }
/* --- Подвал: компакт-мобайл (Экран 3, утверждён 08.08: «верни как было» + шрифт ссылок -1.4px) --- */
@media (max-width: 640px) {
  .site-footer { padding-block: 26px 16px; }
  .footer-grid { grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 16px 14px; }
  .footer-brand { grid-column: 1 / -1; display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
  .footer-brand .footer-logo { height: 38px; }
  .footer-brand p { font-size: .78rem; line-height: 1.35; margin: 0; max-width: none; color: rgba(255,255,255,.6); }
  .footer-col h3 { margin-bottom: 6px; font-size: .68rem; }
  .footer-col ul { gap: 0; }
  .footer-col a { font-size: .82rem; display: inline-block; padding: 6px 0; }
  nav[aria-label="Каталог"].footer-col { grid-column: 1; grid-row: 2 / span 2; }
  nav[aria-label="Покупателям и партнёрам"].footer-col { grid-column: 2; grid-row: 2; }
  nav[aria-label="Бренд"].footer-col { grid-column: 2; grid-row: 3; }
  .footer-bottom { margin-top: 16px; padding-top: 10px; font-size: .68rem; gap: 4px 12px; }
}

/* ============================================================
   ЧАСТЬ 2 — многостраничник: страницы, шоукейс, переходы
   ============================================================ */

/* (шторка-переход удалена по фидбэку) */

/* stagger для сеток: JS проставляет --d */
.reveal { transition-delay: var(--d, 0ms); }

/* ---------- 21. Заголовок внутренней страницы ---------- */
.page-head { padding-block: clamp(20px, 2.5vw, 36px) 0; }
/* заголовки внутренних страниц: длинные слова переносятся, не рвут вёрстку */
.page-head h1.h-display { font-size: var(--fs-page-title); }   /* размер задан единым блоком в конце файла */
@media (max-width: 560px) { .page-head h1.h-display { font-size: clamp(1.7rem, 8.5vw, 2.4rem); } }
.breadcrumbs {
  font-family: var(--f-mono); font-size: var(--fs-mono);
  color: var(--ink-55);
  display: flex; flex-wrap: wrap; gap: 6px;
  margin-bottom: var(--s-3);
}
.breadcrumbs a { color: inherit; text-decoration: none; }
.breadcrumbs a:hover { color: var(--ink); text-decoration: underline; }
.on-dark .breadcrumbs { color: rgba(255,255,255,.75); }
.on-dark .breadcrumbs a:hover { color: var(--white); }

/* ---------- 22. Шоукейс составов (главная, 2-й экран) ---------- */
.showcase {
  background: linear-gradient(125deg, var(--sc, var(--c-prot)) -25%, var(--ink) 52%); /* фолбэк без color-mix */
  background:
    radial-gradient(120% 130% at 22% 40%, color-mix(in oklab, var(--sc, var(--c-prot)) 46%, #0C0C0C) 0%, transparent 60%),
    radial-gradient(90% 110% at 85% 90%, color-mix(in oklab, var(--sc, var(--c-prot)) 22%, #0C0C0C) 0%, transparent 55%),
    var(--ink);
  color: var(--white);
  transition: background .6s ease;
  overflow: hidden;
}
.showcase-inner {
  display: grid;
  grid-template-columns: minmax(280px, 5fr) 7fr;
  gap: clamp(24px, 5vw, 72px);
  align-items: center;
  padding-block: clamp(28px, 4vw, 56px);
}
.showcase-media { position: relative; display: grid; place-items: center; min-height: clamp(280px, 32vw, 380px); }
.showcase-media::before {
  content: "";
  position: absolute; inset: 4% 8%;
  background: radial-gradient(circle, var(--sc, var(--c-prot)) 0%, transparent 70%); /* фолбэк без color-mix */
  background: radial-gradient(circle, color-mix(in oklab, var(--sc, var(--c-prot)) 75%, #fff) 0%, transparent 70%);
  opacity: .5;
  filter: blur(46px);
}
.showcase-media img {
  position: relative;
  width: min(78%, 380px);
  filter: drop-shadow(10px 14px 0 rgba(15,14,12,.28));
  animation: bottle-float 5s ease-in-out infinite;
}
@keyframes bottle-float {
  0%, 100% { transform: translateY(0) rotate(-1.2deg); }
  50% { transform: translateY(-14px) rotate(1.2deg); }
}
.showcase-media:hover img { animation: bottle-wobble .5s ease-in-out; }
@keyframes bottle-wobble {
  0%,100% { transform: rotate(0); } 25% { transform: rotate(-3deg); } 75% { transform: rotate(3deg); }
}
.showcase-name {
  color: var(--white);
  font-family: var(--f-disp);   /* был --f-marker (только латиница → кириллица падала в cursive) */
  font-size: clamp(2.6rem, 5.4vw, 5rem);
  line-height: 1;
  text-transform: uppercase;
  text-shadow: 4px 4px 0 rgba(15,14,12,.35);
}
.showcase-line { font-size: 1.125rem; margin-top: var(--s-2); max-width: 44ch; color: rgba(255,255,255,.94); }
.showcase-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-top: var(--s-3); }
.showcase .chip { background: rgba(255,255,255,.08); color: var(--white); border-color: rgba(255,255,255,.35); backdrop-filter: blur(6px); }
.showcase-cta { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-top: var(--s-4); }
.showcase-tabs {
  display: flex; flex-wrap: wrap; gap: 10px;
  padding-bottom: clamp(24px, 3vw, 40px);
}
.showcase-tab {
  width: 72px; height: 72px;
  border: var(--border); border-radius:var(--r-card);
  background: var(--white);
  display: grid; place-items: center;
  padding: 8px;
  transition: transform var(--t-fast), box-shadow var(--t-fast);
}
.showcase-tab img { max-height: 100%; object-fit: contain; }
.showcase-tab:hover { transform: translate(-2px,-2px); box-shadow: 4px 4px 0 rgba(15,14,12,.4); }
.showcase-tab[aria-selected="true"] {
  box-shadow: 4px 4px 0 var(--ink);
  transform: translate(-2px,-2px);
  outline: 3px solid var(--white);
}
@media (max-width: 860px) {
  .showcase-inner { grid-template-columns: minmax(0,1fr); }
  .showcase-media { order: -1; }
  .showcase-media img { width: min(52%, 260px); }
}

/* УТП-полоса под шоукейсом */
.utp-strip {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--s-4);
  padding-block: clamp(40px, 6vw, 72px);
}
.utp-strip article { border-top: var(--border); padding-top: var(--s-2); }
.utp-strip .utp-num { display: block; margin-bottom: 6px; }
.utp-strip h3 { font-family: var(--f-disp); font-weight: 800; font-size: 1.1875rem; }
.utp-strip p { margin: 8px 0 0; font-size: var(--fs-small); color: var(--ink-55); }
@media (max-width: 860px) { .utp-strip { grid-template-columns: minmax(0,1fr); gap: var(--s-3); } }

/* ---------- 23. Страница категории ---------- */
.cat-hero {
  background: linear-gradient(125deg, var(--cat, var(--c-wash)) -25%, var(--ink) 52%); /* фолбэк без color-mix */
  background:
    radial-gradient(120% 150% at 18% 30%, color-mix(in oklab, var(--cat, var(--c-wash)) 52%, #0C0C0C) 0%, transparent 62%),
    var(--ink);
  color: var(--white) !important;
}
.cat-hero-inner { padding-block: clamp(48px, 7vw, 96px); }
.cat-hero h1 { font-size: var(--fs-page-title); }
.cat-hero .lead { max-width: 52ch; font-size: 1.125rem; margin-top: var(--s-3); }
.cat-hero-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-top: var(--s-4); }
.cat-hero .chip { background: rgba(255,255,255,.92); color: var(--ink); border-color: var(--ink); }

/* хелпер-блок «подсказка» */
.hint {
  border: var(--border); border-radius: var(--r-card);
  background: var(--acid);
  padding: var(--s-4);
  display: flex; flex-wrap: wrap; gap: var(--s-3);
  align-items: center; justify-content: space-between;
}
.hint p { margin: 0; max-width: 56ch; }

/* ---------- 24. Страница продукта ---------- */
.pp-grid {
  display: grid;
  grid-template-columns: minmax(300px, 5fr) 6fr;
  gap: clamp(24px, 5vw, 72px);
  padding-block: clamp(20px, 2.5vw, 36px) clamp(32px, 5vw, 64px);
}
.pp-gallery {
  position: sticky; top: var(--header-h);
  align-self: start;
  border: var(--border); border-radius: var(--r-panel);
  background: var(--white);
  min-height: 420px;
  display: grid; place-items: center;
  padding: var(--s-4);
  overflow: hidden;
}
.pp-gallery img {
  max-height: 480px; width: auto; max-width: 100%;
  filter: drop-shadow(8px 12px 0 rgba(15,14,12,.22));
}
.pp-info h1 { font-size: var(--fs-page-title); }
.pp-sub { font-size: 1.125rem; color: var(--ink-55); margin-top: 8px; }
.pp-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-top: var(--s-3); }
.pp-buy {
  margin-top: var(--s-3);
  border: var(--border); border-radius: var(--r-card);
  background: var(--white);
  box-shadow: var(--shadow-sticker);
  padding: var(--s-3);
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--s-2);
}
.pp-price { font-family: var(--f-disp); font-weight: 800; font-size: 2rem; }
.pp-buy-btns { display: flex; flex-wrap: wrap; gap: 10px; }
@media (max-width: 420px) { .pp-buy-btns { width: 100%; } .pp-buy-btns .btn { flex: 1 1 100%; } }
.spec {
  margin-top: var(--s-4);
  border: var(--border); border-radius: var(--r-card);
  overflow: hidden;
}
.spec-row {
  display: grid; grid-template-columns: minmax(0, 1fr) 2fr; /* Пакет Б: длинный моно-лейбл распирал свою строку — «ступенька» в таблице реквизитов */
  border-top: 1px solid var(--ink-16);
}
.spec-row:first-child { border-top: 0; }
.spec-row dt {
  font-family: var(--f-mono); font-size: var(--fs-mono);
  text-transform: uppercase; letter-spacing: .06em;
  padding: 12px 16px;
  background: var(--paper);
  border-right: 1px solid var(--ink-16);
}
.spec-row dd { margin: 0; padding: 12px 16px; background: var(--white); }
.pp-details { margin-top: var(--s-4); }
.pp-details .faq-item summary { font-size: 1.0625rem; }
@media (max-width: 900px) {
  .pp-grid { grid-template-columns: minmax(0,1fr); }
  .pp-gallery { position: static; min-height: 320px; }
  .pp-gallery img { max-height: 320px; }
}

/* ---------- 25. Калькулятор ---------- */
.calc-card {
  border: var(--border); border-radius: var(--r-panel);
  background: var(--white);
  box-shadow: var(--shadow-sticker);
  padding: clamp(24px, 4vw, 48px);
  max-width: 760px;
}
.field { display: grid; gap: 8px; margin-bottom: var(--s-3); }
.field label { font-family: var(--f-disp); font-weight: 700; font-size: var(--fs-small); text-transform: uppercase; }
.field .help { font-family: var(--f-mono); font-size: .75rem; color: var(--ink-55); }
.input, select.input {
  font: inherit;
  padding: 12px 16px;
  min-height: 48px;
  border: var(--border); border-radius:var(--r-sm);
  background: var(--paper);
  width: 100%;
}
.input:focus-visible { outline: 3px solid var(--c-wash); outline-offset: 1px; }
/* --- Калькулятор V2: слева выбор концентрата, справа расчёт --- */
.calc-desk { display: grid; grid-template-columns: 1.1fr 1fr; gap: 16px; align-items: stretch; }
@media (max-width: 860px) { .calc-desk { grid-template-columns: minmax(0, 1fr); } }
.calc-left { display: flex; flex-direction: column; min-height: 0; }
.calc-barhead { display: flex; align-items: center; justify-content: space-between; margin: 0 0 10px; }
.calc-lbl { font-family: var(--f-mono); font-size: .72rem; letter-spacing: .13em; text-transform: uppercase; color: var(--ink-55); margin: 0; display: flex; gap: 9px; align-items: center; }
.calc-n { font-family: var(--f-body); width: 20px; height: 20px; border-radius: 50%; background: var(--ink); color: var(--white); font-size: .66rem; display: grid; place-items: center; font-weight: 800; letter-spacing: 0; }
.calc-shuffle { font-family: var(--f-mono); font-size: .72rem; border: var(--border); background: var(--white); border-radius: var(--r-chip); padding: 7px 13px; cursor: pointer; min-height: 34px; color: var(--ink); }
.calc-shuffle:hover { border-color: var(--ink); }
.calc-tiles { flex: 1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: repeat(3, minmax(0, 1fr)); gap: 10px; }
@media (max-width: 560px) { .calc-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: auto; gap: 8px; } }

.calc-tile { position: relative; display: flex; gap: 12px; text-align: left; background: var(--white); border: 1px solid var(--ink-16); border-radius: var(--r-card); padding: 12px 13px 11px; cursor: pointer; font: inherit; color: inherit; transition: border-color var(--t-fast), transform var(--t-fast); box-shadow: 0 1px 2px rgba(12,12,12,.04); }
.calc-tile:hover { border-color: var(--ink-55); transform: translateY(-2px); }
.calc-tile-txt { flex: 1; display: flex; flex-direction: column; min-width: 0; }
/* 19.08 (решение владельца, вариант 2): рамку вокруг фото убрали — карточка концентрата
   и так обведена, вторая обводка внутри неё была лишней линией. У плиток инструментов
   (ПК/Ведро/Помпа/Триггер) рамка остаётся: это кнопки выбора, ей они и опознаются. */
.calc-ph { flex: none; width: 52px; align-self: stretch; border-radius: 10px; background: var(--white); display: grid; place-items: center; overflow: hidden; }
/* 20.08 (владелец: «почему такие мелкие фотки в калькуляторе на компьютере, будто от мобилы»):
   окно под фото было 52 точки при плитке в 197 — товар занимал четверть карточки, хотя
   исходник 800×800. Ширина 52 разумна для телефона, где плитка вдвое уже. На компьютере
   даём 76: текстовой части остаётся ~110 точек, названия линеек в неё укладываются. */
/* 20.08, итог (решение владельца): окно 51 точка. Считали от ТЕКСТА, а не на глаз —
   самое широкое, что должно вставать в строку, это «Chuck NoRinse» (106 точек); «Ручная
   мойка» требует 89, строка цены 99. Под текст и фото в плитке 157 точек, значит окну
   остаётся 51. Фото при этом не мелкое: в калькуляторе показываются ОБРЕЗАННЫЕ копии
   (имя_calc.webp) без прозрачных полей, поэтому товар занимает окно целиком. */
@media (min-width: 821px) { .calc-ph { width: 51px; } }
/* 20.08: кадр в калькуляторе — абсолютом. Обрезанные копии концентратов вытянутые
   (флакон 199x666), и в обычном потоке картинка ЗАДАВАЛА высоту плитки: карточка вырастала
   со 129 до 290 точек. Абсолютное положение убирает влияние кадра на размер — высоту
   по-прежнему держит текст, а фото просто вписывается в оставшееся окно. */
.calc-ph { position: relative; }
/* доля из --ph применяется к ВЫСОТЕ: ширина остаётся полной, а object-fit вписывает
   кадр внутрь. Если долю задавать обоим измерениям, широкая канистра упирается в
   ширину окна и перестаёт расти в высоту — из-за этого 5 л и 500 мл выглядели одинаково. */
.calc-ph img { position: absolute; inset: 0; margin: auto; width: 100%; height: var(--ph, 100%); object-fit: contain; }
.calc-ph-cap { font-family: var(--f-mono); font-size: .5rem; color: var(--ink-55); text-align: center; padding: 2px; }
.calc-tile-cat { font-family: var(--f-mono); font-size: .6rem; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-55); margin-bottom: 5px; display: flex; align-items: center; gap: 6px; }
.calc-tile-cat i { width: 7px; height: 7px; border-radius: 50%; background: var(--cc, var(--c-wash)); flex: none; }
.calc-tile-nm { font-weight: 800; font-size: .9rem; line-height: 1.1; }
.calc-tile-row { display: flex; justify-content: space-between; align-items: center; margin-top: auto; padding-top: 8px; border-top: 1px solid var(--ink-08); }
.calc-rt { font-family: var(--f-mono); font-size: .7rem; color: var(--ink-55); }
.calc-pl { font-weight: 800; font-size: .95rem; } .calc-pl .u { font-size: .62rem; color: var(--ink-55); }
.calc-tile[aria-pressed="true"] { border-color: var(--ink); box-shadow: 0 0 0 3px rgba(255,208,47,.6); }
.calc-tile[aria-pressed="true"]::after { content: "✓"; position: absolute; top: 10px; right: 11px; width: 20px; height: 20px; border-radius: 50%; background: var(--ink); color: var(--acid); font-size: 12px; font-weight: 800; line-height: 1; display: grid; place-items: center; }
.calc-console { background: var(--white); border: var(--border); border-radius: var(--r-panel); padding: 18px; }
.calc-flab { font-family: var(--f-mono); font-size: .66rem; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-55); margin: 0 0 8px; display: block; }
.calc-tools { display: flex; gap: 7px; margin-bottom: 16px; }
.calc-tool { position: relative; flex: 1; background: var(--paper); border: 1.5px solid var(--ink-16); border-radius: 12px; padding: 10px 6px 8px; text-align: center; cursor: pointer; font: inherit; color: inherit; transition: .14s; }
.calc-slot { width: 62px; height: 62px; margin: 2px auto 6px; border-radius: 12px; display: grid; place-items: center; }
.calc-slot img { width: 60px; height: 60px; object-fit: contain; display: block; }
.calc-tn { font-size: .64rem; font-weight: 700; line-height: 1.05; }
.calc-tool[aria-pressed="true"] { border-color: var(--ink); background: var(--white); box-shadow: 0 0 0 3px rgba(255,208,47,.6); }
.calc-tool.is-dim { opacity: .3; filter: grayscale(1); pointer-events: none; }
.calc-io { display: grid; grid-template-columns: 1.2fr .8fr; gap: 12px; margin-bottom: 16px; }
.calc-vrow { display: flex; gap: 6px; }
.calc-input { font: inherit; font-size: 1.2rem; font-weight: 800; padding: 10px; border: 1.5px solid var(--ink-16); border-radius: 11px; background: var(--white); color: var(--ink); text-align: center; width: 100%; min-width: 0; min-height: 46px; }
.calc-input:focus-visible { outline: none; border-color: var(--ink); box-shadow: 0 0 0 3px rgba(12,12,12,.06); }
.calc-ratio { border-color: var(--acid); background: #fffdf3; }
.calc-ratio::placeholder { color: var(--ink-55); font-weight: 700; }
.calc-utog { display: flex; border: 1.5px solid var(--ink-16); border-radius: 11px; overflow: hidden; flex: none; }
.calc-utog button { font: inherit; font-weight: 800; border: 0; background: var(--white); padding: 0 11px; cursor: pointer; color: var(--ink-55); min-height: 46px; }
.calc-utog button[aria-pressed="true"] { background: var(--ink); color: var(--white); }
.calc-rr { display: flex; align-items: center; gap: 8px; }
.calc-one { font-size: 1.5rem; font-weight: 800; color: var(--ink); }
.calc-result { background: var(--acid); border: 2px dashed rgba(12,12,12,.5); border-radius: var(--r-card); padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; }
.calc-part { display: flex; justify-content: space-between; align-items: center; min-height: 1.955rem; }
.calc-rl { font-family: var(--f-mono); font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; color: rgba(12,12,12,.62); }
.calc-rv { font-family: var(--f-disp); font-size: 1.7rem; font-weight: 800; letter-spacing: -.02em; min-height: 1.15em; line-height: 1.15; }
.calc-rv .u { font-family: var(--f-body); font-size: .8rem; color: rgba(12,12,12,.55); font-weight: 700; }
.calc-cost { border-top: 2px dashed rgba(12,12,12,.35); padding-top: 9px; }
.calc-note { margin-top: 14px; font-family: var(--f-mono); font-size: .72rem; color: var(--ink-55); }

/* --- Калькулятор: компакт-мобайл (Экран 2 v3, утверждён 08.08: «человек пришёл считать») --- */
@media (max-width: 560px) {
  .pg-calc { padding-block: 10px 0; }
  .pg-calc .eyebrow, .pg-calc .section-lead { display: none; }
  .pg-calc h1.h-display { font-size: 1.45rem; margin: 4px 0 0; }
  /* плитка без фото и подписи категории: цвет-точка + имя одной строкой + 1:X и ₽/л */
  .calc-ph, .calc-tile-cat { display: none; }
  .calc-tile { padding: 9px 10px 8px; gap: 0; }
  .calc-tile-nm { display: block; font-size: .8rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .calc-tile-nm::before { content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--cc, var(--c-wash)); margin-right: 6px; }
  .calc-tile-row { margin-top: 4px; padding-top: 5px; }
  .calc-rt { font-size: .66rem; } .calc-pl { font-size: .8rem; }
  .calc-tile[aria-pressed="true"]::after { top: 7px; right: 7px; width: 16px; height: 16px; font-size: 10px; }
  .calc-console { padding: 12px; }
  .calc-flab { margin-bottom: 6px; }
  .calc-tools { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; margin-bottom: 10px; }
  .calc-tool { min-width: 0; padding: 6px 3px; }
  .calc-slot { width: auto; max-width: 52px; height: 42px; margin: 0 auto 4px; }
  .calc-slot img { width: auto; max-width: 100%; height: 42px; }
  .calc-io { gap: 8px; margin-bottom: 10px; }
  .calc-barhead { margin-bottom: 8px; }
  .calc-result { padding: 12px 14px; gap: 8px; }
}

/* ---------- 26. Журнал ---------- */
.post-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-3); }
.post-card {
  display: flex; flex-direction: column;
  background: var(--white);
  border: var(--border); border-radius: var(--r-card);
  overflow: hidden;
  text-decoration: none;
  transition: transform var(--t-med), box-shadow var(--t-med);
}
.post-card:hover { transform: translate(-3px,-3px); box-shadow: var(--shadow-sticker); }
.post-card .ph { border: 0; border-bottom: var(--border); border-radius: 0; --ph-ratio: 16/10; }
.post-body { padding: var(--s-3); display: flex; flex-direction: column; gap: 10px; flex: 1; }
.post-kicker { font-family: var(--f-mono); font-size: .75rem; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-55); }
.post-title { font-family: var(--f-disp); font-weight: 800; font-size: 1.25rem; line-height: 1.15; }
.post-meta { margin-top: auto; font-family: var(--f-mono); font-size: .75rem; color: var(--ink-55); }
@media (max-width: 1000px) { .post-grid { grid-template-columns: minmax(0,1fr) minmax(0,1fr); } }
@media (max-width: 620px) { .post-grid { grid-template-columns: minmax(0,1fr); } }

/* статья */
.prose { max-width: 720px; font-size: var(--fs-body); } /* 09.08: единый размер текста с сайтом (был 18px) */
.prose--tight h2:first-child { margin-top: 0; } /* 09.08: без провала после лида страницы */
.prose h2 { font-family: var(--f-disp); font-weight: 800; font-size: 1.75rem; margin: var(--s-5) 0 var(--s-2); letter-spacing: -.01em; }
.prose p { margin: 0 0 var(--s-3); }
.prose ul { padding-left: 1.2em; margin: 0 0 var(--s-3); }
.prose li { margin-bottom: 8px; }
.prose .callout {
  border: var(--border); border-left-width: 8px;
  border-radius:var(--r-sm);
  background: var(--white);
  padding: var(--s-3);
  margin-block: var(--s-4);
}

/* ---------- 27. Контакты, партнёры, формы ---------- */
.split { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: clamp(24px, 4vw, 64px); align-items: start; }
@media (max-width: 860px) { .split { grid-template-columns: minmax(0,1fr); } }
.contact-card {
  border: var(--border); border-radius: var(--r-card);
  background: var(--white);
  padding: var(--s-3);
  display: grid; gap: 6px;
}
.contact-card .mono { color: var(--ink-55); }
.contact-card a { font-family: var(--f-disp); font-weight: 800; font-size: 1.25rem; text-decoration: none; }
.contact-card a:hover { color: var(--c-prot); }
.stack { display: grid; gap: var(--s-2); }

.benefit-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-3); }
@media (max-width: 900px) { .benefit-grid { grid-template-columns: minmax(0,1fr); } }

/* ---------- 28. Текстовые страницы, 404 ---------- */
.page-404 {
  min-height: 60svh;
  display: grid; place-items: center; text-align: center;
  padding-block: var(--s-7) 0;
}
.page-404 img { width: min(280px, 60vw); margin-inline: auto; }
.page-404 h1 { font-size: var(--fs-page-title); margin-top: var(--s-3); }

.marquee--pink { background: var(--c-prot); color: var(--white); }
.marquee--ink { background: var(--ink); color: var(--acid); }

/* мини-карта заглушка */
.map-ph { --ph-ratio: 16/9; }

/* дилеры */
.dealer-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-2); }
.dealer {
  border: var(--border); border-radius: var(--r-card);
  background: var(--white); padding: var(--s-3);
}
.dealer h3 { font-family: var(--f-disp); font-weight: 800; font-size: 1.0625rem; }
.dealer p { margin: 6px 0 0; font-size: var(--fs-small); color: var(--ink-55); }
@media (max-width: 900px) { .dealer-grid { grid-template-columns: minmax(0,1fr); } }

/* скрыть дубли языка/кабинета в десктоп-навигации */
@media (min-width: 1061px) { .mnav-extra, .main-nav .mnav-only { display: none; } }

/* ---------- 29. Hero: моргание фар + вспышка (из v10) ---------- */
.cine-blink {
  position: absolute; z-index: 2;
  left: 50%; top: 44%;
  width: 30vw; min-width: 280px; aspect-ratio: 1/1;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  pointer-events: none; opacity: 0;
  background: radial-gradient(circle, rgba(var(--c-kit-rgb),.9) 0%, rgba(var(--c-kit-rgb),.35) 42%, rgba(var(--c-kit-rgb),0) 68%);
  filter: blur(28px);
}
.cine-blink.is-on { animation: cineBlink 320ms linear both; }
@keyframes cineBlink {
  0% { opacity: 0; } 18.75% { opacity: 1; } 37.5% { opacity: 0; }
  62.5% { opacity: 0; } 81.25% { opacity: 1; } 100% { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) { .cine-blink { display: none !important; } }

/* ---------- 31. О бренде: полноэкранный hero + инфографика ---------- */
.about-hero {
  min-height: calc(100svh - 112px);
  display: flex; flex-direction: column; justify-content: center;
  padding-block: var(--s-5);
}
.about-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 6.5fr) minmax(0, 5.5fr);
  gap: clamp(24px, 4vw, 64px);
  align-items: center;
}
.team-photo {
  position: relative;
  border-radius: var(--r-panel);
  box-shadow: var(--shadow-sticker);
  overflow: hidden;
}
.team-photo img {
  display: block; width: 100%; height: 100%;
  object-fit: cover;
  border-radius: calc(var(--r-panel) - 2px);
}
.team-photo .sticker {
  position: absolute; top: 14px; left: 14px;
}
.team-photo .sticker--r { top: auto; bottom: 14px; right: 14px; left: auto; }
@media (max-width: 900px) {
  .about-hero-grid { grid-template-columns: minmax(0, 1fr); }
  .team-photo { transform: rotate(0); margin-top: var(--s-3); }
}
.about-hero .lead { max-width: 60ch; font-size: clamp(1.0625rem, 1.6vw, 1.375rem); margin-top: var(--s-3); }
.about-stats {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--s-2);
  margin-top: clamp(28px, 5vh, 56px);
}
.stat {
  border-top: var(--hairline);
  padding: var(--s-3) 0 0;
  position: relative;
}
.stat::before {
  content: "";
  position: absolute; top: -4px; left: 0;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--acid);
}
.stat:nth-child(2)::before { background: var(--c-prot); }
.stat:nth-child(3)::before { background: var(--c-wash); }
.stat:nth-child(4)::before { background: var(--c-eco); }
.scene .stat { border-top-color: rgba(255,255,255,.22); }
.stat b {
  display: block;
  font-family: var(--f-disp); font-weight: 800;
  font-size: clamp(1.75rem, 3.4vw, 2.75rem);
  letter-spacing: -.02em;
}
.stat span { font-family: var(--f-mono); font-size: var(--fs-mono); }
.scene .stat span { color: rgba(255,255,255,.6); }
@media (max-width: 900px) {
  .about-hero { min-height: auto; }
  .about-stats { grid-template-columns: minmax(0,1fr) minmax(0,1fr); }
}

/* ============================================================
   ЧАСТЬ 3 — v3 «Cinematic Loop»: тёмные сцены, каталог-список,
   ритуал-сцена, фиксики-раннеры, чувак-попап, дорожная карта
   ============================================================ */

/* ---------- 32. Тёмная сцена со скруглением (референс-паттерн) ---------- */
.scene {
  position: relative;
  background: var(--ink);
  color: var(--white);
  border-radius: clamp(20px, 3vw, 40px);
  margin-inline: clamp(8px, 1.2vw, 20px);
  overflow: clip;
  will-change: transform;
}
.scene .eyebrow { color: var(--acid); }
.scene .eyebrow::before { color: var(--acid); }
.showcase {
  border-radius: clamp(20px, 3vw, 40px);
  margin-inline: clamp(8px, 1.2vw, 20px);
  border: 0;
  overflow: clip;
}
.marquee--tilt { transform: none; }

/* мягче пятна на белом */
.bottles-splash { opacity: .22; filter: blur(80px); animation: splash-drift 14s ease-in-out infinite alternate; }
@keyframes splash-drift {
  from { transform: translate(0, 0) scale(1); }
  to { transform: translate(40px, -30px) scale(1.15); }
}
.bottles { border-block: 0; }

/* ---------- 33. Каталог: editorial-строки ---------- */
.cat-list { border-top: var(--hairline); }
.cat-row {
  display: flex; align-items: center; gap: clamp(14px, 2.5vw, 36px);
  padding: clamp(20px, 3vw, 34px) 0;
  border-bottom: var(--hairline);
  text-decoration: none;
  position: relative;
  transition: padding-left .4s cubic-bezier(.2,.8,.2,1);
}
.cat-row::before { /* цветная нить слева при ховере */
  content: "";
  position: absolute; left: 0; top: 50%;
  width: 0; height: 2px;
  background: var(--cat, var(--acid));
  transform: translateY(-50%);
  transition: width .4s cubic-bezier(.2,.8,.2,1);
}
.cat-row:hover, .cat-row:focus-visible { padding-left: clamp(28px, 4vw, 56px); }
.cat-row:hover::before, .cat-row:focus-visible::before { width: clamp(16px, 2.6vw, 36px); }
.cat-row-num {
  font-family: var(--f-mono); font-size: var(--fs-mono);
  color: var(--ink-55); min-width: 2.4em;
}
.cat-row-title {
  font-family: var(--f-disp); font-weight: 800;
  font-size: clamp(1.5rem, 4vw, 3.3rem);
  text-transform: uppercase; letter-spacing: -.015em;
  line-height: 1;
  transition: color .3s ease;
}
.cat-row:hover .cat-row-title { color: var(--cat, var(--ink)); color: color-mix(in oklab, var(--cat, var(--ink)) 72%, var(--ink)); }
.cat-row-meta {
  font-family: var(--f-mono); font-size: var(--fs-mono);
  color: var(--ink-55);
  margin-left: auto; text-align: right;
}
.cat-row-thumb {
  width: clamp(64px, 6.5vw, 96px); height: clamp(64px, 6.5vw, 96px);
  border-radius:var(--r-card); flex-shrink: 0;
  background: var(--white);
  background: color-mix(in oklab, var(--cat, var(--acid)) 14%, var(--white));
  border: var(--hairline);
  display: grid; place-items: center;
  overflow: hidden;
  transition: transform .4s cubic-bezier(.2,.8,.2,1), background .3s ease;
}
.cat-row-thumb img { width: 78%; height: 84%; object-fit: contain; transition: transform .4s cubic-bezier(.2,.8,.2,1); }
.cat-row:hover .cat-row-thumb { transform: scale(1.08) rotate(2deg); background: var(--white); background: color-mix(in oklab, var(--cat, var(--acid)) 26%, var(--white)); }
.cat-row:hover .cat-row-thumb img { transform: scale(1.1); }
@media (max-width: 700px) {
  .cat-row-meta { display: none; }
}

/* ---------- 37. Дорожная карта (о бренде) ---------- */
.roadmap { overflow: hidden; }
.roadmap-track {
  display: flex; gap: clamp(20px, 3.5vw, 56px);
  /* 11.08 (владелец): вертикальные отступы блока = боковым отступам карточек (были 48px);
     карточки НЕ растягиваются под самую высокую — каждая своей высоты, снизу ровно
     тот же отступ, что сверху над годом */
  align-items: flex-start;
  padding-block: clamp(20px, 2.2vw, 30px);
  will-change: transform;
}
.rm-item {
  /* 11.08: 400→360px — с вертикальными фото 3:4 карточка с заголовком секции
     должна помещаться в вьюпорт ~960px при закрепе ленты */
  flex: 0 0 min(360px, 76vw);
  border-top: var(--hairline);
  padding-top: var(--s-3);
  position: relative;
}
.rm-item::before {
  content: "";
  position: absolute; top: -5px; left: 0;
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--rm, var(--acid));
}
.rm-year {
  font-family: var(--f-disp); font-weight: 800;
  /* 11.08 (владелец): год = размер заголовка страницы («История…»), а не гигант 104px —
     карточки с вертикальными фото не влезали на экран */
  font-size: var(--fs-page-title);
  line-height: 1; letter-spacing: -.04em;
  color: var(--ink);
}
.rm-title { font-family: var(--f-disp); font-weight: 800; font-size: 1.25rem; margin-top: var(--s-2); }
.rm-text { color: var(--ink-55); margin-top: 8px; font-size: var(--fs-small); max-width: 34ch; }
.rm-item .ph { margin-top: var(--s-3); --ph-ratio: 16/10; }
.roadmap-fallback-scroll {
  overflow-x: auto; scroll-snap-type: x mandatory;
  scrollbar-width: thin;
}
.roadmap-fallback-scroll .rm-item { scroll-snap-align: start; }


/* ---------- 38. Ароматы-пузыри в шоукейсе ---------- */
.aroma-bubbles { position: absolute; inset: 0; pointer-events: none; }
.aroma-bubble {
  position: absolute;
  display: grid; place-items: center; text-align: center;
  border-radius: 50%;
  background: rgba(255,255,255,.1);
  border: 1px solid rgba(255,255,255,.4);
  backdrop-filter: blur(10px);
  color: var(--white);
  font-family: var(--f-disp); font-weight: 800;
  text-transform: uppercase;
  box-shadow: 0 14px 30px -12px rgba(12,12,12,.4);
  animation: bubble-float 6s ease-in-out infinite;
  padding: 12px;
  line-height: 1.05;
  overflow: hidden;
}
/* 19.08: было `white-space:nowrap` — надпись жила одной строкой, и в кружок 98 точек
   влезало только короткое. Разрешаем вторую строку: «Сила лайма» встаёт как «СИЛА /
   ЛАЙМА» и читается кеглем 15 вместо обрезки многоточием. Переносы только по пробелу
   и по уже стоящему дефису («Древесно-фруктовый») — дефисной расстановки нет, владелец
   такие переносы не принимает. break-word — страховка на случай длинного слова без пробелов.
   JS (renderAromas) по-прежнему ужимает шрифт, если и в две строки не влезло. */
.ab-txt { display: inline-block; white-space: normal; overflow-wrap: break-word; }
/* 1-е слово — внизу слева, 2-е — вверху справа; одинаковый размер, чтобы текст влезал */
.aroma-bubble:nth-child(1) { width: clamp(96px, 8.5vw, 122px); height: clamp(96px, 8.5vw, 122px); bottom: 8%; left: 2%; font-size: clamp(.7rem, .95vw, .875rem); }
.aroma-bubble:nth-child(2) { width: clamp(96px, 8.5vw, 122px); height: clamp(96px, 8.5vw, 122px); top: 4%; right: 4%; font-size: clamp(.7rem, .95vw, .875rem); animation-delay: 1.2s; animation-duration: 7s; }
.aroma-bubble:nth-child(3) { width: clamp(40px, 4vw, 60px); height: clamp(40px, 4vw, 60px); top: 18%; left: 8%; font-size: .625rem; animation-delay: 2.1s; animation-duration: 5.2s; background: rgba(255,255,255,.75); }
@keyframes bubble-float {
  0%, 100% { transform: translateY(0) rotate(-2deg); }
  50% { transform: translateY(-16px) rotate(2deg); }
}
.aroma-note {
  position: absolute; left: 0; bottom: -6px;
  font-family: var(--f-mono); font-size: .6875rem;
  color: rgba(255,255,255,.6);
}

/* ---------- 39. «Задай вопрос» — тёмная сцена вместо жёлтой карточки ---------- */
/* 11.08 (решение владельца + вердикт дизайнера): сцены с маскотом ВЛЕВО, как весь сайт —
   центр дрался с маскотом (наезды заголовка, уменьшение, выпадание на ноутбуках) */
.ask-scene h2 {
  font-size: clamp(2rem, 5.4vw, 4.6rem);
  max-width: 18ch;
}
.ask-scene .section-lead { color: rgba(255,255,255,.7); }

/* ============================================================
   ЧАСТЬ 4 — v5 «Editorial»: зерно, маски, номера секций, полировка
   ============================================================ */

/* тонкое зерно по всему сайту — «киношная» фактура */
body::after {
  content: "";
  position: fixed; inset: 0; z-index: 2000;
  pointer-events: none;
  opacity: .035;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E");
}

/* мягкая виньетка в тёмных сценах */
.scene::after, .hero::before {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  background: radial-gradient(130% 100% at 50% 0%, transparent 55%, rgba(0,0,0,.4) 100%);
  z-index: 1;
}
.hero::before { z-index: 1; }

/* маска-реавил заголовков (JS вешает .mask-reveal) */
.mask-reveal { clip-path: inset(0 0 100% 0); }
.mask-reveal.is-shown {
  clip-path: inset(0 0 -8% 0);
  transition: clip-path .9s cubic-bezier(.65, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) { .mask-reveal { clip-path: none !important; } }

/* номера секций по краю — издательская деталь */
.sec-num {
  font-family: var(--f-mono);
  font-size: .6875rem;
  letter-spacing: .14em;
  color: var(--ink-55);
  display: block;
  margin-bottom: var(--s-2);
}
.scene .sec-num, .showcase .sec-num { color: rgba(255,255,255,.45); }

/* eyebrow строже: без стрелки-треугольника; черта цветом самого кикера
   (чёрная на светлом — решение владельца 09.08), не розовым от старой стрелки */
.eyebrow::before { content: ""; width: 22px; height: 1px; background: currentColor; color: inherit; opacity: .8; }

/* заглушки фото: спокойнее */
.ph {
  border: 1px dashed rgba(12,12,12,.28);
  background: repeating-linear-gradient(45deg, transparent 0 18px, rgba(12,12,12,.035) 18px 19px), var(--white);
}
.ph .ph-label { border: var(--hairline); box-shadow: none; }

/* чипы: тоньше */
.chip { border-width: 1px; }

/* карточки/плитки: hover без прыжков-сдвигов */
.prod-card:hover, .post-card:hover, .buy-tile:hover { transform: translateY(-4px); }
.utp-card { border: var(--hairline); box-shadow: none; }
.review-card { border: var(--hairline); box-shadow: none; }
.buy-tile { border: var(--hairline); }
.buy-tile:hover { background: var(--white); box-shadow: var(--shadow-sticker); }
.hint { border: 0; }
.dealer, .contact-card, .calc-card { border: var(--hairline); }
.calc-card { box-shadow: var(--shadow-sticker); }
.prod-card { border: var(--hairline); }
.prod-media { border-bottom: var(--hairline); }
.faq-item { border-bottom: var(--hairline); }
.faq-item summary::after { border: var(--hairline); }
.spec, .spec-row dt { border-color: rgba(12,12,12,.14); }
.spec { border: var(--hairline); }
.pp-buy { border: var(--hairline); box-shadow: var(--shadow-sticker); }

/* фиксики: подпись-заглушка тише */

/* чувак: строже пузырь */
.buddy-bubble { border: var(--hairline); box-shadow: var(--shadow-sticker); border-radius: 14px 14px 14px 4px; }
.buddy-ava { border: 2px solid var(--white); }

/* hero 09.08 (консилиум, согласовано владельцем): блок выше — в нижней трети,
   фару не перекрывает; воздух под строкой FOAM HEROES */
.hero-inner { padding-block: var(--s-6) clamp(64px, 16svh, 150px); }
.hero .eyebrow { margin-bottom: var(--s-2); }

/* ============================================================
   ЧАСТЬ 5 — правки главной: UGC-доска, обложки каталога, где купить
   ============================================================ */

/* ---------- UGC: пинтерест-доска (masonry) ---------- */
.ugc-board { columns: 4 240px; column-gap: clamp(12px, 1.4vw, 18px); }
.ugc-card {
  position: relative; display: block;
  break-inside: avoid;
  margin-bottom: clamp(12px, 1.4vw, 18px);
  border-radius:var(--r-lg); overflow: hidden;
  text-decoration: none; color: var(--white);
  border: 1px solid var(--line, rgba(12,12,12,.14));
  transition: transform .4s cubic-bezier(.2,.8,.2,1), box-shadow .4s ease;
  /* 10.08 (правка маркетолога п.2): transform задан ПОСТОЯННО + карточка живёт в своём слое —
     в Safari появление transform на ховере ВНУТРИ CSS columns перерисовывало карточку белой */
  transform: translateY(0);
  will-change: transform;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}
.ugc-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-sticker); }
.ugc-ph {
  display: grid; place-items: center;
  aspect-ratio: var(--ratio, 3/4);
  padding: 18px; text-align: center;
  background:
    repeating-linear-gradient(135deg, rgba(12,12,12,.04) 0 16px, rgba(12,12,12,.02) 16px 17px),
    var(--paper);
}
.ugc-ph-label { font-family: var(--f-mono); font-size: .6875rem; line-height: 1.5; color: var(--ink-55); max-width: 22ch; }
.ugc-tag {
  position: absolute; left: 12px; bottom: 12px; right: 12px;
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 8px 12px; border-radius:var(--r-chip);
  /* 12.08: убран backdrop-filter — в Safari он появлялся по ховеру ВНУТРИ CSS columns
     и белил экран. Плотная тёмная плашка читается так же, без блюра-виновника. */
  background: rgba(12,12,12,.74);
  opacity: 0; transform: translateY(6px);
  transition: opacity .3s ease, transform .3s ease;
}
.ugc-card:hover .ugc-tag { opacity: 1; transform: none; }
.ugc-tag b { font-family: var(--f-disp); font-weight: 700; font-size: .8125rem; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* пилюля площадки не сжимается — длинный ник обрезается в «…», а не выдавливает TG/VK/YT */
.ugc-plat { font-family: var(--f-mono); font-size: .625rem; letter-spacing: .1em; border: 1px solid rgba(255,255,255,.4); border-radius:var(--r-chip); padding: 2px 8px; flex: 0 0 auto; }
/* Пакет А: колонки без жёсткой ширины — 2×160px не влезали в 328px (@360) и доска падала в 1 колонку высотой 3650px */
@media (max-width: 900px) { .ugc-board { columns: 2 auto; column-gap: 10px; } }

/* ---------- Каталог: тёмные обложки-фото (вариант B) ---------- */
.covers { display: grid; grid-template-columns: repeat(12, 1fr); gap: clamp(12px, 1.4vw, 18px); }
.cover {
  position: relative; overflow: hidden; border-radius:var(--r-lg);
  min-height: clamp(260px, 30vw, 400px);
  background: #191919; color: var(--white);
  border: 1px solid rgba(255,255,255,.12);
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: clamp(22px, 2.4vw, 34px);
  text-decoration: none;
}
.cover:nth-child(1) { grid-column: span 7; }
.cover:nth-child(2) { grid-column: span 5; }
.cover:nth-child(3) { grid-column: span 5; }
.cover:nth-child(4) { grid-column: span 4; }
.cover:nth-child(5) { grid-column: span 3; }
.cover::before {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(130% 130% at 82% 8%, var(--c) 0%, transparent 55%);
  opacity: .55; transition: opacity .5s ease;
}
.cover::after {
  content: ""; position: absolute; inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.4'/%3E%3C/svg%3E");
  opacity: .06; pointer-events: none;
}
.cover:hover::before { opacity: .9; }
.cover img {
  /* 12.08 ОТКАТ: пробовал показывать на плитах кадр без прозрачных полей (автокроп) —
     у фото разные пропорции, и товары поехали в разном масштабе. Владелец: «стало
     сильно хуже». Вернулись к исходным фото и прежней раскладке. */
  position: absolute; right: -4%; top: 50%;
  transform: translateY(-50%) rotate(-8deg);
  height: 78%; width: auto;
  filter: drop-shadow(0 30px 42px rgba(0,0,0,.55));
  transition: transform .6s cubic-bezier(.2,.8,.2,1);
}
.cover:hover img { transform: translateY(-52%) rotate(-4deg) scale(1.07); }
.cover-ph {
  position: absolute; right: 8%; top: 50%; transform: translateY(-50%);
  width: 30%; aspect-ratio: 1/2.2;
  border: 1px dashed rgba(255,255,255,.3); border-radius:var(--r-sm);
  display: grid; place-items: center;
  font-family: var(--f-mono); font-size: .625rem; color: rgba(255,255,255,.6);
  text-align: center; padding: 10px;
}
.cover-idx { position: absolute; top: clamp(22px, 2.4vw, 34px); left: clamp(22px, 2.4vw, 34px); color: rgba(255,255,255,.7); z-index: 1; }
.cover-title {
  position: relative; z-index: 1;
  font-family: var(--f-disp); font-weight: 800; text-transform: uppercase;
  font-size: clamp(1.15rem, 2vw, 2.2rem);
  letter-spacing: -.02em; line-height: 1.05;
  overflow-wrap: normal; word-break: keep-all; /* слова не рвём по буквам */
}
/* Четвёртая и пятая обложки на компьютере узкие (4 и 3 колонки из 12), поэтому заголовок
   там мельче. ★ 20.08: на телефоне все обложки ОДНОЙ ширины, а правило продолжало работать —
   владелец: «чем ниже, тем меньше шрифт, прям бросается в глаза». Замер на 390: первые три
   заголовка 18,4 точки, четвёртый и пятый 16. Ограничиваем правило шириной, где узкие колонки
   реально существуют. */
@media (min-width: 821px) {
  .cover:nth-child(4) .cover-title, .cover:nth-child(5) .cover-title { font-size: clamp(1rem, 1.45vw, 1.55rem); }
}
/* нижний скрим — заголовок читается поверх флакона */
.cover .cover-scrim {
  position: absolute; left: 0; right: 0; bottom: 0; height: 55%;
  background: linear-gradient(180deg, transparent, rgba(0,0,0,.62));
  pointer-events: none;
}
.cover-meta { position: relative; z-index: 1; margin-top: 8px; color: rgba(255,255,255,.65); }
@media (max-width: 820px) {
  .covers { grid-template-columns: 1fr 1fr; }
  .cover, .cover:nth-child(n) { grid-column: span 1; min-height: 220px; }
  .cover:nth-child(5) { grid-column: span 2; }
}
@media (max-width: 520px) {
  .covers { grid-template-columns: 1fr; }
  .cover:nth-child(5) { grid-column: span 1; }
}

/* ============================================================
   ЧАСТЬ 6 — секция ароматов + ровный ритм светлых зон
   ============================================================ */

/* ============================================================
   ЧАСТЬ 7 — «Где купить» с иконками площадок + roadmap v2
   ============================================================ */
.buy-cards {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(12px, 1.4vw, 18px);
}
.buy-card {
  position: relative;
  display: flex; flex-direction: column; gap: 6px;
  padding: clamp(18px, 2vw, 26px);
  border: var(--hairline); border-radius:var(--r-lg);
  background: var(--paper);
  text-decoration: none; color: var(--ink);
  transition: transform .35s cubic-bezier(.2,.8,.2,1), box-shadow .35s ease, background .3s ease;
}
.buy-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-sticker); background: var(--white); }
.buy-logo {
  /* слот под официальный логотип площадки — заменить на <img> */
  display: grid; place-items: center;
  height: 46px; margin-bottom: 10px;
  border: 1px dashed rgba(12,12,12,.25); border-radius:var(--r-sm);
  font-size: .625rem; color: var(--ink-55);
}
.buy-card-name { font-family: var(--f-disp); font-weight: 800; text-transform: uppercase; font-size: 1.0625rem; letter-spacing: -.01em; }
.buy-card-desc { font-size: .875rem; color: var(--ink-55); }
.buy-card-arrow { position: absolute; top: 14px; right: 16px; color: var(--acid-deep); font-size: 1.125rem; transition: transform .3s ease; }
.buy-card:hover .buy-card-arrow { transform: translate(3px, -3px); }
@media (max-width: 900px) { .buy-cards { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 480px) { .buy-cards { grid-template-columns: minmax(0,1fr); } }

/* ---------- Дорожная карта v2: карточки, живой ритм ---------- */
.rm-item {
  background: var(--white);
  border: var(--hairline);
  border-top: none;
  border-radius:var(--r-lg);
  padding: clamp(20px, 2.2vw, 30px);
  box-shadow: 0 18px 40px -30px rgba(12,12,12,.25);
}
.rm-item::before { top: 0; left: clamp(20px, 2.2vw, 30px); width: 34px; height: 5px; border-radius:var(--r-chip); }
/* 12.08 (решение владельца): сдвиг чётных вех УДАЛЁН - он не работал (перебивался
   анимацией появления .reveal.is-in{transform:none}), а карточки с вертикальными фото
   и без него впритык по высоте при закрепе ленты. Лента ровной линией. */
.rm-year { margin-top: 4px; }
/* --- История «О бренде» на мобиле/планшете: вертикально, компакт (Экран 6 v2, утв. 08.08) --- */
@media (max-width: 900px) {
  .roadmap-fallback-scroll { overflow-x: visible; scroll-snap-type: none; }
  .roadmap-track { flex-direction: column; gap: 14px; padding-block: var(--s-4); position: relative; }
  .roadmap-track::before { content: ""; position: absolute; left: 11px; top: 8px; bottom: 8px; width: 3px; border-radius: 2px; background: var(--ink-16); }
  .rm-item { flex: none; width: auto; margin-left: 34px; padding: 14px 16px 16px; }
  .rm-item::before { left: -29px; top: 20px; width: 13px; height: 13px; border-radius: 50%; border: 2.5px solid var(--paper); }
  .rm-year { font-size: 1.5rem; margin-top: 0; letter-spacing: -.02em; }
  .rm-title { font-size: 1.05rem; line-height: 1.2; margin-top: 4px; }
  .rm-text { margin-top: 6px; font-size: .85rem; line-height: 1.4; max-width: none; }
  .rm-item .ph { margin-top: 10px; --ph-ratio: 21/9; }
}

/* ============================================================
   ЧАСТЬ 8 — senior-полиш: фокус на тёмном, тач, ритм сцен
   ============================================================ */

/* фокус-кольцо на тёмных поверхностях — жёлтое, а не синее */
.scene :focus-visible,
.showcase :focus-visible,
.site-header :focus-visible,
.site-footer :focus-visible,
.hero :focus-visible,
.cat-hero :focus-visible {
  outline-color: var(--acid);
}

/* подписи UGC-карточек: на тач-устройствах видны всегда (hover нет) */
@media (hover: none) {
  .ugc-tag { opacity: 1; transform: none; }
  /* Полировка (утв. роадмеп): ховеры-сдвиги — только для мыши, на таче «залипают» после нажатия */
  .btn:hover { transform: none; }
  .logo:hover { transform: none; }
  .cat-card:hover { transform: none; box-shadow: var(--shadow-sticker); }
  .cat-card:hover .cat-arrow { transform: none; }
  .prod-card:hover { transform: none; }
  .prod-card:hover .prod-media img { transform: none; }
  .buy-tile:hover { transform: none; }
  .showcase-tab:hover { transform: none; }
  .calc-tile:hover { transform: none; border-color: var(--ink-16); }
  .buy-card:hover .buy-card-arrow { transform: none; }
}
/* --- Полировка: функциональные подписи не мельче ~12px на мобиле (утв. роадмеп; декоративные номера не трогаем) --- */
@media (max-width: 640px) {
  .calc-flab, .calc-rl, .calc-lbl, .calc-rt, .jr-tag, .aroma-note { font-size: .75rem; }
  .calc-tn { font-size: .74rem; }
  .calc-pl .u, .ugc-plat, .footer-bottom { font-size: .72rem; }
}

/* воздух между подряд идущими тёмными/цветными сценами и перед футером */
.scene + .scene,
.scene + .showcase,
.showcase + .scene,
.section--white + .scene,
.showcase + .section--white { margin-top: clamp(20px, 2.6vw, 44px); }
/* ============ ЕДИНЫЙ ОТСТУП ДО ПОДВАЛА (21.08, консилиум двух дизайнеров,
   макет согласован владельцем) ============
   Было: у каждого шаблона своё число — 20 у главной, 36 у вопросов, 72 у раздела,
   92 у статьи, 96 у товара и 404. Владелец заметил на телефоне. Стало: одно число
   --gap-footer, 48 на телефоне и 64 на компьютере.
   Почему растёт к компьютеру, а не плоское: у подвала СВОЯ набивка, и она тоже
   разная — 26 против 64 (см. .site-footer ниже). Плоский зазор сделал бы компьютер
   визуально теснее телефона.
   Зазор ставится ОДИН раз — на подвал. Всё, что давало его раньше, обнулено ТАМ,
   ГДЕ ЛЕЖИТ: catalog.css (обёртка), journal.css (тема и статья), .page-404 выше,
   .section и .scene здесь. Перебить catalog.css/journal.css отсюда нельзя — они
   подключаются ПОЗЖЕ main.css.
   :last-of-type, а НЕ :last-child: в конце <main> у товара, раздела, журнала и
   калькулятора лежат служебные <script>, из-за них :last-child молча не срабатывал.
   Прошлое правило (11.08, скрин владельца с iPhone: «блок заезжает за футер»)
   давало тёмной сцене 20 точек. Оно отменено: замер показал, что тёмная плитка
   каталога — тот же самый объект (инкрустированная карточка #0C0C0C со скруглением)
   и под ней всегда было 72 точки светлого, и это никого не смущало. */
.site-footer{ margin-top: var(--gap-footer); }
main > .section:last-of-type:not(.scene):not(.showcase){ padding-bottom: 0; }
main > .scene:last-of-type,
main > .showcase:last-of-type{ margin-bottom: 0; }
/* хвостовой отступ последнего абзаца приплюсовывался к зазору: политика и оферта
   давали 62 вместо 36 */
main > .section:last-of-type > *:last-child,
main > .section:last-of-type > .container > *:last-child{ margin-bottom: 0; }

/* Исключение — полосная КРАШЕНАЯ секция в конце страницы («Где купить»): её фон
   обязан доходить до подвала, шов закреплён линией (см. #wtb .optwrap). Поэтому
   зазор кладём ВНУТРЬ неё (#wtb .opt-inner), а снаружи не добавляем — иначе под
   синей полосой появляется светлая щель. Поймал владелец на макете 21.08. */
body:has(.optwrap) .site-footer{ margin-top: 0; }

/* вторичный текст на тёмном: не ниже 3:1 */
.scene .section-lead, .showcase .showcase-line { color: rgba(255,255,255,.78); }
.cover-meta { color: rgba(255,255,255,.72); }
.buy-idx { color: rgba(255,255,255,.55); }

/* цена и рейтинг — табличные цифры, без скачков ширины */
.prod-price, .pp-price, .rm-year, .stat b { font-variant-numeric: tabular-nums; }

/* курсор и живой отклик на всех интерактивных */
a, button, summary, .showcase-tab { cursor: pointer; touch-action: manipulation; }
.buy-card:active, .prod-card:active, .cover:active, .ugc-card:active, .scent-hidden { transform: scale(.985); }

/* review-source контраст */
.review-src { color: var(--ink-55); }

/* ---------- карточка-выгода (страница «Для партнёров») ---------- */
.utp-card {
  background: var(--white);
  border: var(--hairline);
  border-radius: var(--r-card);
  padding: var(--s-4);
  display: flex; flex-direction: column; gap: var(--s-2);
}
.utp-num {
  font-family: var(--f-mono);
  font-size: var(--fs-mono);
  color: var(--ink-55);
}

/* ============================================================
   ЧАСТЬ 9 — маскот на сценах, 404
   ============================================================ */
.scene-mascot {
  position: absolute;
  right: clamp(12px, 4vw, 64px);
  bottom: -14px;
  width: clamp(150px, 17vw, 250px);
  z-index: 2;
  filter: drop-shadow(0 24px 28px rgba(0,0,0,.45));
  animation: mascot-float 6s ease-in-out infinite;
  pointer-events: none;
}
@keyframes mascot-float {
  0%, 100% { transform: translateY(0) rotate(-2deg); }
  50% { transform: translateY(-12px) rotate(2deg); }
}
/* контент сцены не заезжает под маскота */
.ask-scene .container { position: relative; }
@media (min-width: 861px) {
  .ask-scene .section-lead { max-width: 46ch; }
}
@media (max-width: 860px) {
  .scene-mascot {
    position: static;
    display: block;
    margin: var(--s-4) auto 0;
    width: 150px;
  }
}
.ask-actions { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-top: var(--s-4); }

/* 404: маскот крупнее и с парением */
.page-404 img {
  width: min(300px, 62vw);
  margin-inline: auto;
  animation: mascot-float 6s ease-in-out infinite;
}

/* ============================================================
   ЧАСТЬ 10 — логотипы площадок «Где купить»
   ============================================================ */
/* единый белый чип-контейнер: Ozon-вордмарк и WB-иконка выглядят согласованно */
.buy-logo {
  display: inline-flex; align-items: center; justify-content: center;
  height: 56px; min-width: 100px; padding: 0 18px;
  margin-bottom: 14px;
  background: #fff;
  border: 1px solid rgba(12,12,12,.10);
  border-radius:var(--r-card);
  box-shadow: 0 6px 16px -10px rgba(12,12,12,.3);
  color: var(--ink-55);
  align-self: flex-start;
}
.buy-logo img { max-height: 26px; width: auto; object-fit: contain; display: block; }
/* страница «Где купить»: та же логика чипа */
.buy-tile { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
.buy-tile-logo {
  display: inline-flex; align-items: center; justify-content: center;
  height: 54px; padding: 0 18px;
  background: #fff; border: 1px solid rgba(12,12,12,.10);
  border-radius:var(--r-card);
}
.buy-tile-logo img { max-height: 26px; width: auto; object-fit: contain; }

/* EN — версия «скоро»: кнопка приглушена, по клику — тост (см. main.js) */
.hdr-lang-btn[data-lang] { opacity: .5; }
.hdr-lang-btn[data-lang]:hover { opacity: .78; }
.fh-toast {
  position: fixed; left: 50%; bottom: calc(24px + env(safe-area-inset-bottom, 0px)); z-index: 2000;
  transform: translate(-50%, 12px);
  max-width: 90vw; text-align: center;
  background: var(--ink); color: var(--paper);
  padding: .7rem 1.15rem; border-radius:var(--r-chip);
  font-family: var(--f-mono); font-size: .85rem; line-height: 1;
  box-shadow: 0 10px 34px rgba(0,0,0,.28);
  opacity: 0; pointer-events: none;
  transition: opacity .25s ease, transform .25s ease;
}
.fh-toast.is-on { opacity: 1; transform: translate(-50%, 0); }
@media (prefers-reduced-motion: reduce) { .fh-toast { transition: none; } }

/* ---------- 27. Журнал (divan-раскладка в брендовых токенах) ---------- */
.jr-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-bottom: clamp(28px, 4vw, 44px); }
.jr-chip {
  font-family: var(--f-mono); font-size: .8125rem; font-weight: 600;
  letter-spacing: .02em; text-transform: uppercase;
  border: 1.5px solid var(--ink-16); background: transparent; color: var(--ink);
  padding: 9px 18px; border-radius:var(--r-chip); cursor: pointer; white-space: nowrap;
  transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast);
}
.jr-chip:hover { border-color: var(--ink); }
.jr-chip.is-active { background: var(--ink); border-color: var(--ink); color: var(--white); }

.jr-tag { font-family: var(--f-mono); font-size: .6875rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--tc, var(--ink)); }
.jr-meta { font-family: var(--f-mono); font-size: .75rem; color: var(--ink-55); letter-spacing: .02em; }

.jr-featured {
  display: grid; grid-template-columns: 1.35fr 1fr;
  background: var(--white); border: var(--border); border-radius: var(--r-panel);
  overflow: hidden; margin-bottom: clamp(28px, 4vw, 44px);
  transition: transform var(--t-fast), box-shadow var(--t-fast);
}
.jr-featured:hover { transform: translate(-3px, -3px); box-shadow: var(--shadow-sticker); }
.jr-featured-img { position: relative; min-height: 320px; background: var(--paper); }
.jr-featured-img img { width: 100%; height: 100%; object-fit: cover; }
.jr-featured-pin {
  position: absolute; top: 16px; left: 16px; z-index: 2;
  background: var(--acid); color: var(--ink); border: 1.5px solid var(--ink);
  font-family: var(--f-mono); font-size: .6875rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  padding: 6px 12px; border-radius:var(--r-chip);
}
.jr-featured-body { padding: clamp(24px, 3vw, 44px); display: flex; flex-direction: column; justify-content: center; gap: 12px; }
.jr-featured-title { font-family: var(--f-disp); font-weight: 800; font-size: clamp(1.6rem, 3vw, 2.4rem); letter-spacing: -.02em; line-height: 1.05; margin: 0; }
.jr-featured-lead { color: var(--ink-55); font-size: 1.0625rem; margin: 0; }
.jr-read { font-family: var(--f-disp); font-weight: 700; font-size: .9375rem; }
.jr-featured:hover .jr-read { color: var(--c-prot); }

.jr-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-3); }
.jr-card {
  display: flex; flex-direction: column;
  background: var(--white); border: var(--border); border-radius: var(--r-card); overflow: hidden;
  transition: transform var(--t-fast), box-shadow var(--t-fast);
}
.jr-card:hover { transform: translate(-3px, -3px); box-shadow: var(--shadow-sticker); }
.jr-card-img { aspect-ratio: 122 / 79; background: var(--paper); overflow: hidden; }
.jr-card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.jr-card:hover .jr-card-img img { transform: scale(1.04); }
.jr-card-img .ph { width: 100%; height: 100%; border: 0; border-radius: 0; }
.jr-card-body { padding: var(--s-3); display: flex; flex-direction: column; gap: 10px; flex: 1; }
.jr-card-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.jr-card-title { font-family: var(--f-disp); font-weight: 700; font-size: 1.0625rem; letter-spacing: -.01em; line-height: 1.25; margin: 0; }
.jr-card-foot { margin-top: auto; }
.jr-empty { color: var(--ink-55); padding: var(--s-3) 0; }

.jr-article-head { padding-top: var(--s-3); display: flex; flex-direction: column; gap: 14px; }
.jr-article-title { font-family: var(--f-disp); font-weight: 800; font-size: var(--fs-page-title); letter-spacing: -.025em; line-height: 1.03; margin: 0; max-width: 20ch; }
.jr-article-lead { font-size: clamp(1.0625rem, 1.6vw, 1.25rem); color: var(--ink-55); margin: 0; max-width: 60ch; }
.jr-article-hero { margin-top: var(--s-4); }
.jr-article-hero img { width: 100%; height: clamp(240px, 42vw, 520px); object-fit: cover; border-radius: var(--r-panel); }
.jr-article-narrow { max-width: 760px; margin-top: clamp(32px, 4vw, 48px); }
.jr-source { display: inline-block; margin-top: var(--s-3); font-family: var(--f-disp); font-weight: 700; font-size: .9375rem; color: var(--c-wash); }
.jr-source:hover { text-decoration: underline; }
.jr-author { margin-top: var(--s-5); background: var(--white); border: var(--border); border-radius: var(--r-card); padding: var(--s-3); display: flex; gap: 16px; align-items: center; }
.jr-author-ava { width: 52px; height: 52px; border-radius: 50%; background: var(--ink); color: var(--white); display: grid; place-items: center; font-family: var(--f-disp); font-weight: 800; flex-shrink: 0; }
.jr-author-name { font-weight: 700; margin: 0 0 4px; }
.jr-author-bio { margin: 0; font-size: .875rem; color: var(--ink-55); }
.jr-article-related { margin-top: clamp(40px, 5vw, 64px); }
.jr-related-title { font-family: var(--f-disp); font-weight: 800; font-size: clamp(1.5rem, 3vw, 2rem); letter-spacing: -.02em; margin: 0 0 var(--s-3); }

.prose ol { padding-left: 1.3em; margin: 0 0 var(--s-3); }
.prose ol li { margin-bottom: 8px; }
.prose blockquote { margin: var(--s-4) 0; padding: var(--s-2) var(--s-3); border-left: 3px solid var(--c-prot); background: var(--paper); border-radius: 0 12px 12px 0; font-style: italic; }
.prose b { font-weight: 800; }

@media (max-width: 1000px) {
  .jr-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .jr-featured { grid-template-columns: 1fr; }
  .jr-featured-img { min-height: 260px; }
}
@media (max-width: 620px) {
  .jr-grid { grid-template-columns: 1fr; }
}

/* ================= РАЗДЕЛ «ГДЕ КУПИТЬ» (#wtb, изолировано) ================= */
#wtb{
  --disp:var(--f-disp,"Helvetica Neue",Arial,sans-serif);
  --mono:var(--f-mono,ui-monospace,"JetBrains Mono",monospace);
  --body:var(--f-body,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif);
  --muted:#7A7E85; --soft:#E4E6EA;
  --site-h:var(--header-h); /* было 104px — сведено к единой --header-h */
  color:var(--ink); font-family:var(--body); line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
#wtb,#wtb *{box-sizing:border-box}
@media (max-width:640px){ #wtb{ --site-h:84px } }
#wtb a{color:inherit;text-decoration:none}
  #wtb .wtb-container{max-width:1160px;margin:0 auto;padding:20px 20px 90px}

  
  #wtb .regionbar{
    display:flex;align-items:center;flex-wrap:wrap;gap:10px;
    background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-card);
    padding:10px 14px;margin-bottom:14px;position:relative;
  }
  #wtb .regionbar .rb-label{font-family:var(--mono);font-size:12.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
  #wtb .region-sel{
    font-family:var(--disp);font-weight:800;font-size:16px;letter-spacing:-.01em;
    background:var(--ink);color:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-chip);
    padding:9px 16px;cursor:pointer;display:inline-flex;align-items:center;gap:8px;
  }
  #wtb .region-sel:hover{background:var(--acid-deep);color:var(--ink)}
  #wtb .region-sel .car{font-size:12px;opacity:.8}
  #wtb .rb-hint{font-family:var(--mono);font-size:11.5px;color:var(--muted);margin-left:auto}
  #wtb .region-menu{
    position:absolute;top:calc(100% - 4px);left:14px;z-index:60;
    background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-card);
    box-shadow:6px 6px 0 rgba(12,12,12,.12);padding:6px;margin-top:8px;
    display:grid;grid-template-columns:repeat(2,minmax(150px,1fr));gap:4px;min-width:320px;max-width:420px;
  }
  #wtb .region-menu button{
    font-family:var(--body);font-size:15px;text-align:left;border:1.5px solid transparent;background:transparent;
    color:var(--ink);border-radius:var(--r-xs);padding:9px 12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:8px;
  }
  #wtb .region-menu button:hover{border-color:var(--ink);background:var(--paper)}
  #wtb .region-menu button.cur{background:var(--acid)}
  #wtb .region-menu button .mn{font-family:var(--mono);font-size:11px;color:var(--muted)}

  
  #wtb .geo-prompt{
    display:flex;align-items:center;flex-wrap:wrap;gap:10px;
    background:var(--white);border:1.5px solid var(--soft);border-radius:var(--r-sm);padding:9px 12px;margin-bottom:14px;
  }
  #wtb .geo-prompt .gp-ico{width:26px;height:26px;flex:0 0 auto;color:var(--muted)}
  #wtb .geo-prompt .gp-txt{font-size:13.5px;color:#33363B;flex:1;min-width:170px}
  #wtb .geo-prompt .gp-btn{font-family:var(--mono);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:7px 13px;cursor:pointer;background:var(--ink);color:var(--white)}
  #wtb .geo-prompt .gp-btn:hover{background:var(--acid-deep);color:var(--ink)}
  #wtb .geo-prompt .gp-btn.ghost{background:transparent;color:var(--muted);border-color:var(--soft)}
  #wtb .geo-prompt .gp-btn.ghost:hover{background:var(--paper);color:var(--ink)}
  #wtb .geo-prompt .gp-x{margin-left:2px;border:0;background:transparent;color:var(--muted);font-size:18px;line-height:1;cursor:pointer;padding:11px 13px} /* Пакет Б: тап-зона крестика ~40px (была 21×26) */
  #wtb .geo-prompt .gp-x:hover{color:var(--ink)}

  
  #wtb .masthead{margin-top:22px}
  #wtb .eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink);font-weight:600;margin-bottom:14px}
  #wtb .title{font-family:var(--disp);font-weight:800;font-size:clamp(38px,7vw,74px);line-height:.96;letter-spacing:-.02em;text-transform:uppercase;margin:0 0 16px}
  #wtb .title .u{position:relative;white-space:nowrap}
  #wtb .title .u::after{content:"";position:absolute;left:-2px;right:-2px;bottom:.08em;height:.24em;background:var(--acid);z-index:-1}
  #wtb .sub{max-width:620px;font-size:16px;color:#33363B;margin:0}

  
  #wtb .blk{margin-top:54px}
  #wtb .block-title{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:clamp(22px,3.6vw,32px);line-height:1;margin:0}
  #wtb .block-note{font-family:var(--mono);font-size:12.5px;letter-spacing:.03em;color:var(--muted);margin:10px 0 0;min-height:1em}
  #wtb .block-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:14px 20px;margin-bottom:8px}
  #wtb .counter{font-family:var(--mono);font-size:13px;letter-spacing:.04em;color:var(--muted);display:inline-flex;align-items:center;gap:8px;border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:7px 14px;background:var(--white)}
  #wtb .counter:empty{display:none}
  #wtb .counter b{color:var(--ink);font-weight:700}

  
  #wtb .mp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin-top:16px}
  #wtb .mp-tile{background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-lg);padding:22px;display:flex;flex-direction:column;gap:12px;min-height:170px;transition:transform .07s ease, box-shadow .07s ease}
  #wtb .mp-tile:hover{transform:translate(-3px,-3px);box-shadow:5px 5px 0 var(--ink)}
  
  #wtb .mp-logobox{ display:inline-flex; align-items:center; justify-content:center;
    height:56px; min-width:100px; padding:0 18px; margin-bottom:14px;
    background:#fff; border:1px solid rgba(12,12,12,.10); border-radius:var(--r-card);
    box-shadow:0 6px 16px -10px rgba(12,12,12,.3); align-self:flex-start; }
  #wtb .mp-logobox img{ max-height:26px; width:auto; object-fit:contain; display:block; }
  #wtb .mp-desc{font-size:14px;color:#33363B;flex:1}
  #wtb .mp-go{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;align-self:flex-start;border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:7px 13px}
  #wtb .mp-tile:hover .mp-go{background:var(--acid)}
  #wtb .mp-fallback{grid-column:1/-1;background:var(--white);border:1.5px dashed var(--ink);border-radius:var(--r-card);padding:20px;font-size:15px;color:#33363B}

  
  #wtb .controls{margin:22px 0 8px}
  #wtb .search{position:relative;display:flex;align-items:center;background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-card);padding:0 14px;height:56px}
  #wtb .search:focus-within{box-shadow:4px 4px 0 var(--ink)}
  #wtb .search .lupa{width:20px;height:20px;flex:0 0 auto;color:var(--ink)}
  #wtb .search input{flex:1;border:0;outline:0;background:transparent;font-family:var(--body);font-size:17px;color:var(--ink);padding:0 12px;height:100%}
  
  #wtb .search input::-webkit-search-cancel-button,#wtb .search input::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}
  #wtb .search input::-ms-clear{display:none}
  #wtb .search input::placeholder{color:#9AA0A6}
  #wtb .search .clear{border:0;background:var(--ink);color:var(--white);width:26px;height:26px;border-radius:50%;font-size:17px;line-height:1;cursor:pointer;display:none;flex:0 0 auto}
  #wtb .search .clear.show{display:inline-flex;align-items:center;justify-content:center}

  
  #wtb .rail{position:sticky;top:var(--site-h);z-index:20;display:flex;flex-wrap:wrap;gap:5px;padding:12px 0;margin-top:22px;background:var(--paper);border-bottom:1.5px solid var(--soft)}
  #wtb .rl{font-family:var(--mono);font-size:13px;font-weight:600;width:30px;height:30px;border-radius:var(--r-xs);display:inline-flex;align-items:center;justify-content:center;border:1.5px solid transparent;color:var(--ink);cursor:pointer;user-select:none}
  #wtb .rl:hover{border-color:var(--ink)}
  #wtb .rl.active{background:var(--ink);color:var(--white);border-color:var(--ink)}
  #wtb .rl.dim{color:#C2C6CC;cursor:default;pointer-events:none}
  #wtb .rl-online{width:auto;gap:5px;padding:0 12px;background:var(--acid);border:1.5px solid var(--ink);color:var(--ink);font-weight:700;letter-spacing:.04em;text-transform:uppercase;margin-left:6px}
  #wtb .rl-online:hover{background:var(--ink);color:var(--acid);border-color:var(--ink)}
  #wtb #wtb-onlineblock{scroll-margin-top:calc(var(--site-h) + 12px)}
  #wtb .online-flash{animation:wtb-onlineFlash 1.1s ease}
  @keyframes wtb-onlineFlash{0%{box-shadow:0 0 0 0 var(--acid)}30%{box-shadow:0 0 0 4px var(--acid)}100%{box-shadow:0 0 0 0 rgba(var(--acid-rgb),0)}}

  
  #wtb .sec{padding-top:26px;scroll-margin-top:calc(var(--site-h) + 16px)}
  #wtb .sec-h{font-family:var(--disp);font-weight:800;font-size:clamp(28px,5vw,44px);letter-spacing:-.01em;line-height:1;margin:0 0 16px;display:flex;align-items:baseline;gap:14px}
  #wtb .sec-h .bar{flex:1;height:3px;background:var(--ink);transform:translateY(-6px)}
  #wtb .citygrid{display:grid;gap:4px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
  #wtb .cityitem{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:9px 12px;border-radius:var(--r-xs);cursor:pointer;border:1.5px solid transparent;background:transparent;text-align:left;font-family:var(--body);font-size:15.5px;color:var(--ink);width:100%}
  #wtb .cityitem:hover{border-color:var(--ink);background:var(--white)}
  #wtb .cityitem .cn{font-weight:600}
  #wtb .cityitem .cc{font-family:var(--mono);font-size:12px;color:var(--muted);margin-left:auto}

  
  #wtb .typebar{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 20px}
  #wtb .tchip{font-family:var(--mono);font-size:12px;letter-spacing:.03em;text-transform:uppercase;border:1.5px solid var(--ink);background:var(--white);color:var(--ink);border-radius:var(--r-chip);padding:7px 13px;cursor:pointer;transition:transform .04s}
  #wtb .tchip:hover{box-shadow:3px 3px 0 var(--ink)}
  #wtb .tchip:active{transform:translate(1px,1px)}
  #wtb .tchip.active{background:var(--ink);color:var(--white)}
  #wtb .tchip.active:hover{box-shadow:none}
  #wtb .tchip .n{opacity:.55;margin-left:5px}
  #wtb .tchip.active .n{opacity:.7}

  
  #wtb .back{font-family:var(--mono);font-size:13px;letter-spacing:.03em;text-transform:uppercase;display:inline-flex;align-items:center;gap:8px;cursor:pointer;border:1.5px solid var(--ink);background:var(--white);border-radius:var(--r-chip);padding:8px 15px;margin-bottom:20px}
  #wtb .back:hover{box-shadow:3px 3px 0 var(--ink)}
  #wtb .cv-h{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:clamp(26px,4.4vw,42px);line-height:1;margin:0 0 6px}
  #wtb .cv-sub{font-family:var(--mono);font-size:13px;color:var(--muted);margin-bottom:22px}

  
  #wtb .cards{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
  #wtb .wtb-card{background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-card);padding:18px;display:flex;flex-direction:column;gap:12px;transition:transform .07s ease, box-shadow .07s ease}
  #wtb .wtb-card:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--ink)}
  #wtb .card-top{display:flex;align-items:center;gap:12px}
  #wtb .logo{width:56px;height:56px;flex:0 0 auto;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;font-family:var(--disp);font-weight:800;font-size:20px;color:#fff;letter-spacing:-.02em;border:1.5px solid rgba(12,12,12,.14)}
  #wtb .badge{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;border:1.5px solid var(--ink);border-radius:var(--r-xs);padding:3px 8px;align-self:flex-start}
  #wtb .badge.market{background:var(--acid)}
  #wtb .badge.cosmetics{background:var(--white)}
  #wtb .p-name{font-family:var(--disp);font-weight:800;font-size:19px;line-height:1.15;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  #wtb .p-meta{font-family:var(--mono);font-size:12px;color:var(--muted);letter-spacing:.02em}
  #wtb .p-addr{font-size:14.5px;color:#33363B}
  #wtb .p-contacts{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:2px;padding-top:12px;border-top:1.5px solid var(--soft)}
  #wtb .p-tel{font-family:var(--mono);font-size:13px;display:inline-flex;align-items:center;gap:7px;font-weight:600}
  #wtb .p-tel svg{width:14px;height:14px}
  #wtb .p-tel:hover{text-decoration:underline}
  #wtb .p-site{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.04em;border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:5px 11px;margin-left:auto}
  #wtb .p-site:hover{background:var(--acid)}
  #wtb .more{grid-column:1/-1;justify-self:start;margin-top:6px;font-family:var(--mono);font-size:13px;letter-spacing:.03em;text-transform:uppercase;border:1.5px solid var(--ink);background:var(--white);border-radius:var(--r-chip);padding:11px 20px;cursor:pointer}
  #wtb .more:hover{background:var(--ink);color:var(--white)}

  
  #wtb .empty{text-align:center;padding:60px 20px;color:var(--muted)}
  #wtb .empty .ico{width:64px;height:64px;border:1.5px solid var(--ink);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;margin-bottom:18px;color:var(--ink)}
  #wtb .empty h3{font-family:var(--disp);font-weight:800;text-transform:uppercase;color:var(--ink);margin:0 0 8px}
  #wtb .empty p{max-width:480px;margin:0 auto}
  #wtb .empty-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:22px}
  #wtb .empty-actions .eb{font-family:var(--mono);font-size:13px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:11px 18px;cursor:pointer;background:var(--white);color:var(--ink)}
  #wtb .empty-actions .eb.solid{background:var(--ink);color:var(--white)}
  #wtb .empty-actions .eb:hover{background:var(--acid);color:var(--ink)}

  
  #wtb .online-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));margin-top:20px}
  #wtb .online-card{background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-card);padding:16px;display:flex;flex-direction:column;gap:10px;min-height:158px;transition:transform .07s ease, box-shadow .07s ease}
  #wtb .online-card:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--ink)}
  #wtb .oc-head{display:flex;align-items:center;gap:11px}
  #wtb .logo.sm{width:44px;height:44px;font-size:16px;border-radius:var(--r-sm)}
  #wtb .oc-name{font-family:var(--disp);font-weight:800;font-size:16.5px;letter-spacing:-.01em;line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
  #wtb .oc-dom{font-family:var(--mono);font-size:12px;color:var(--muted);word-break:break-all}
  #wtb .oc-tel{font-family:var(--mono);font-size:13.5px;font-weight:600;color:var(--ink);align-self:flex-start;text-decoration:none} /* Пакет А: телефон-ссылка в онлайн-карточке */
  #wtb .oc-tel:hover{color:var(--c-wash)}
  #wtb .oc-deliv{font-family:var(--mono);font-size:12px;letter-spacing:.02em;color:var(--ink);background:var(--paper);border:1.5px solid var(--soft);border-radius:var(--r-xs);padding:4px 8px;align-self:flex-start} /* Пакет Б: география доставки — ключевая инфа, была 11px */
  #wtb .oc-go{margin-top:auto;align-self:flex-start;font-family:var(--mono);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:7px 13px}
  #wtb .online-card:hover .oc-go{background:var(--acid)}

  
  #wtb .cta{margin-top:60px;background:var(--acid);border:1.5px solid var(--ink);border-radius:var(--r-lg);padding:clamp(26px,4vw,44px);display:flex;flex-wrap:wrap;align-items:center;gap:22px;justify-content:space-between}
  #wtb .cta h2{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:clamp(22px,3.4vw,34px);line-height:1.02;margin:0 0 10px;max-width:640px}
  #wtb .cta p{margin:0;max-width:560px;font-size:15.5px;color:#1a1a1a}
  #wtb .cta .wtb-btn{font-family:var(--mono);font-size:14px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;background:var(--ink);color:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:15px 26px;cursor:pointer;white-space:nowrap}
  #wtb .cta .wtb-btn:hover{background:var(--acid-deep);color:var(--ink)}

  
  
  #wtb .ms{display:inline-flex;background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:3px;gap:2px}
  #wtb .ms-tab{font-family:var(--mono);font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;font-weight:600;color:var(--muted);background:transparent;border:0;border-radius:var(--r-chip);padding:7px 15px;cursor:pointer;line-height:1}
  #wtb .ms-tab:hover{color:var(--ink)}
  #wtb .ms-tab.active{background:var(--ink);color:var(--white)}
  
  #wtb .masthead-top{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
  #wtb .masthead-top .eyebrow{margin-bottom:0}
  #wtb .wtb-heroswitch{flex:0 0 auto}
  
  #wtb .wtb-swfloat{position:fixed;right:16px;bottom:16px;z-index:45;box-shadow:4px 4px 0 rgba(12,12,12,.22);
    opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .18s ease, transform .18s ease}
  #wtb .wtb-swfloat.show{opacity:1;visibility:visible;transform:none}

  
  #wtb .top-optlink{display:inline-block;margin-top:16px;font-family:var(--mono);font-size:12.5px;letter-spacing:.03em;color:var(--muted);border-bottom:1.5px solid var(--soft);padding-bottom:2px}
  #wtb .top-optlink:hover{color:var(--ink);border-color:var(--ink)}
  #wtb .retail-optlink{margin:44px 0 0;text-align:center;font-size:14.5px;color:var(--muted)}
  #wtb .retail-optlink a{color:var(--ink);border-bottom:1.5px solid var(--acid);font-weight:600;display:inline-block;padding:10px 2px} /* Пакет Б: тап-зона ссылки в опт ≥40px (была 21px высотой) */
  #wtb .retail-optlink a:hover{background:var(--acid)}

  
  /* ★ Нижняя точка градиента НЕ должна совпадать с цветом подвала (#0C0C0C):
     19.08 владелец увидел, что оптовый блок и подвал слились в одно тёмное
     пятно — границы блока не видно. Останавливаемся на тёмно-синем, подвал
     ниже читается отдельной чёрной полосой; тонкая линия закрепляет шов. */
  #wtb .optwrap{background:linear-gradient(180deg,#14203A 0%,#111C33 100%);color:#EAECEF;margin-top:0;scroll-margin-top:var(--site-h);border-bottom:1px solid rgba(255,255,255,.10)}
  #wtb .opt-inner{max-width:1160px;margin:0 auto;padding:54px 20px var(--gap-footer)}
  #wtb .opt-seam{display:flex;align-items:center;gap:16px;margin-bottom:34px}
  #wtb .opt-seam::before,#wtb .opt-seam::after{content:"";flex:1;height:1.5px;background:rgba(255,255,255,.16)}
  #wtb .opt-seam span{font-family:var(--mono);font-size:12px;letter-spacing:.28em;text-transform:uppercase;color:#8493AD}
  #wtb .opt-head{margin-bottom:30px}
  #wtb .opt-title{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:clamp(30px,5vw,52px);line-height:.98;margin:0 0 14px;color:#fff}
  #wtb .opt-sub{max-width:640px;font-size:16px;color:#B9C2D4;margin:0 0 10px}
  #wtb .opt-microback{font-family:var(--mono);font-size:12px;letter-spacing:.03em;color:#7C89A3;margin:0}
  #wtb .opt-microback::before{content:"";}

  #wtb .opt-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:16px 22px;margin-bottom:30px}
  #wtb .opt-field{display:flex;flex-direction:column;gap:7px}
  #wtb .opt-flabel{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8493AD}
  #wtb .opt-select{font-family:var(--body);font-size:15px;font-weight:500;color:#fff;background:#1B2740;border:1.5px solid rgba(255,255,255,.22);border-radius:var(--r-sm);padding:12px 40px 12px 15px;min-width:270px;cursor:pointer;appearance:none;background-image:linear-gradient(45deg,transparent 50%,#C7D0E0 50%),linear-gradient(135deg,#C7D0E0 50%,transparent 50%);background-position:calc(100% - 20px) 19px,calc(100% - 14px) 19px;background-size:6px 6px,6px 6px;background-repeat:no-repeat;transition:border-color .1s}
  #wtb .opt-select:hover{border-color:rgba(255,255,255,.45)}
  #wtb .opt-select:focus{outline:none;border-color:var(--acid);box-shadow:0 0 0 3px rgba(var(--acid-rgb),.18)}
  #wtb .opt-select option{background:#14203A;color:#fff}
  #wtb .opt-fcaption{font-family:var(--mono);font-size:10.5px;letter-spacing:.02em;color:#6E7A93;margin-top:1px}
  #wtb .opt-morebtn{margin-top:16px;font-family:var(--mono);font-size:12.5px;letter-spacing:.03em;text-transform:uppercase;background:transparent;color:#C7D0E0;border:1.5px solid rgba(255,255,255,.3);border-radius:var(--r-chip);padding:10px 18px;cursor:pointer}
  #wtb .opt-morebtn:hover{border-color:var(--acid);color:var(--acid)}
  #wtb .opt-chips{display:flex;flex-wrap:wrap;gap:8px}
  #wtb .opt-chip{font-family:var(--mono);font-size:12px;letter-spacing:.03em;text-transform:uppercase;background:transparent;color:#C7D0E0;border:1.5px solid rgba(255,255,255,.22);border-radius:var(--r-chip);padding:9px 15px;cursor:pointer}
  #wtb .opt-chip:hover{border-color:#fff;color:#fff}
  #wtb .opt-chip.active{background:var(--acid);color:var(--ink);border-color:var(--acid)}
  #wtb .opt-count{font-family:var(--mono);font-size:12.5px;color:#8493AD;margin-left:auto;align-self:center}

  #wtb .opt-grouph{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:20px;color:#fff;margin:34px 0 4px;display:flex;align-items:baseline;gap:12px}
  #wtb .opt-grouph:first-child{margin-top:0}
  #wtb .opt-grouph .gsub{font-family:var(--mono);font-size:11.5px;font-weight:400;text-transform:none;letter-spacing:0;color:#8493AD}
  #wtb .opt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin-top:14px}
  /* 11.08 (владелец): до выбора региона — карусель-превью партнёров в один ряд со свайпом,
     случайный порядок при каждой загрузке. Десктоп — прокрутка ряда, мобила — 1 карточка + краешек */
  #wtb .opt-grid--carousel{display:flex;overflow-x:auto;gap:16px;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:6px}
  #wtb .opt-grid--carousel::-webkit-scrollbar{display:none}
  #wtb .opt-grid--carousel>*{flex:0 0 340px;min-width:340px;scroll-snap-align:start}

  #wtb .dealer{position:relative;background:#1B2740;border:1.5px solid rgba(255,255,255,.12);border-radius:var(--r-card);padding:18px;display:flex;flex-direction:column;gap:10px;min-height:210px}
  #wtb .dealer.dealer-fed{border-color:var(--acid)}
  #wtb .dealer-corner{position:absolute;top:-1px;right:-1px;font-family:var(--mono);font-size:9.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;background:var(--acid);color:var(--ink);border-radius:0 15px 0 12px;padding:5px 10px 6px}
  #wtb .zbadge{align-self:flex-start;font-family:var(--mono);font-size:11px;letter-spacing:.03em;border-radius:var(--r-chip);padding:5px 11px;border:1.5px solid transparent}
  #wtb .zbadge.zfed{background:var(--acid);color:var(--ink)}
  #wtb .zbadge.zloc{background:transparent;color:#C7D0E0;border-color:rgba(255,255,255,.24)}
  #wtb .zbadge.zexp{background:rgba(90,52,184,.28);color:#D8CCFF;border-color:rgba(150,120,240,.4)}
  #wtb .dealer-name{font-family:var(--disp);font-weight:800;font-size:18px;line-height:1.12;letter-spacing:-.01em;color:#fff;margin:2px 0 0}
  #wtb .dealer-city{font-family:var(--mono);font-size:12px;color:#8493AD}
  #wtb .dealer-addr{font-size:13px;color:#C7D0E0;line-height:1.35}
  #wtb .dealer-segs{font-size:12.5px;color:#B9C2D4;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
  #wtb .dealer-segs .segs-label{color:#7C89A3;font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:.04em}
  #wtb .seg{border:1.5px solid rgba(255,255,255,.2);border-radius:var(--r-xs);padding:2px 8px;font-size:12px;color:#C7D0E0}
  #wtb .seg.on{background:var(--acid);color:var(--ink);border-color:var(--acid);font-weight:600}
  #wtb .dealer-contacts{margin-top:auto;padding-top:12px;border-top:1.5px solid rgba(255,255,255,.1);display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
  #wtb .dcall{font-family:var(--mono);font-size:14px;font-weight:600;color:#fff}
  #wtb .dcall:hover{color:var(--acid)}
  #wtb .dmail{font-family:var(--mono);font-size:12px;color:#8493AD;word-break:break-all}
  #wtb .dmail:hover{color:#C7D0E0}
  #wtb .dbtn{margin-left:auto;font-family:var(--mono);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;color:#fff;border:1.5px solid rgba(255,255,255,.35);border-radius:var(--r-chip);padding:8px 14px}
  #wtb .dbtn:hover{border-color:var(--acid);color:var(--acid)}

  #wtb .opt-hint{font-family:var(--mono);font-size:12.5px;color:#8493AD;margin:20px 0 0}
  #wtb .opt-note{background:rgba(255,255,255,.05);border:1.5px dashed rgba(255,255,255,.22);border-radius:var(--r-sm);padding:16px 18px;font-size:14.5px;color:#C7D0E0;margin-top:8px}
  #wtb .opt-becomelink{display:inline-block;margin-top:16px;font-family:var(--mono);font-size:12.5px;color:var(--acid);border-bottom:1.5px solid rgba(var(--acid-rgb),.5);padding-bottom:2px}
  #wtb .opt-becomelink:hover{border-color:var(--acid)}
  #wtb .opt-emptystate{text-align:center;padding:40px 20px}
  #wtb .opt-emptystate h3{font-family:var(--disp);font-weight:800;text-transform:uppercase;color:#fff;font-size:22px;margin:0 0 10px}
  #wtb .opt-emptystate p{color:#B9C2D4;max-width:460px;margin:0 auto 8px}
  #wtb .opt-emptystate a.mono{font-family:var(--mono);font-size:13px;color:var(--acid)}

  #wtb .opt-banner{margin-top:46px;background:var(--acid);border-radius:var(--r-lg);padding:clamp(24px,3.5vw,38px);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px}
  #wtb .opt-banner-txt h3{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:clamp(20px,3vw,28px);line-height:1.05;margin:0 0 8px;color:var(--ink);max-width:640px}
  #wtb .opt-banner-txt p{margin:0;font-size:15px;color:#1a1a1a;max-width:560px}
  #wtb .opt-primary{font-family:var(--mono);font-size:14px;text-transform:uppercase;letter-spacing:.04em;font-weight:700;background:var(--ink);color:#fff;border-radius:var(--r-chip);padding:16px 28px;white-space:nowrap}
  #wtb .opt-primary:hover{background:#fff;color:var(--ink)}

  
  #wtb .pf-overlay{position:fixed;inset:0;z-index:2100;background:rgba(12,12,12,.62);display:flex;align-items:center;justify-content:center;padding:48px 16px 16px}
  #wtb .pf-modal{position:relative;display:flex;flex-direction:column;background:var(--white);color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--r-lg);width:100%;max-width:660px;max-height:92vh;box-shadow:8px 8px 0 rgba(12,12,12,.25);overflow:hidden}
  #wtb .pf-close{position:absolute;top:13px;right:13px;width:30px;height:30px;border:1.5px solid var(--ink);background:var(--white);color:var(--ink);border-radius:50%;font-size:19px;line-height:1;cursor:pointer;z-index:3}
  #wtb .pf-close:hover{background:var(--acid)}
  #wtb .pf-head{flex:0 0 auto;padding:18px clamp(16px,3vw,26px) 12px;border-bottom:1.5px solid var(--soft)}
  #wtb .pf-headrow{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding-right:40px}
  #wtb .pf-title{font-family:var(--disp);font-weight:800;text-transform:uppercase;letter-spacing:-.01em;font-size:clamp(18px,2.4vw,22px);margin:0 0 4px}
  #wtb .pf-sub{font-size:13.5px;color:#33363B;margin:0}
  #wtb .pf-typeswitch{flex:0 0 auto;display:flex;gap:6px;background:var(--paper);border:1.5px solid var(--soft);border-radius:var(--r-chip);padding:4px;margin-top:2px}
  #wtb .pf-type{font-family:var(--mono);font-size:11.5px;text-transform:uppercase;letter-spacing:.03em;font-weight:600;border:0;background:transparent;color:var(--muted);border-radius:var(--r-chip);padding:8px 13px;cursor:pointer;white-space:nowrap}
  #wtb .pf-type.active{background:var(--ink);color:var(--white)}
  #wtb .pf-body{flex:1 1 auto;padding:14px clamp(16px,3vw,26px) 6px;min-height:0;overflow-y:auto}
  #wtb .pf-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
  #wtb .span2{grid-column:1 / -1}
  #wtb .pf-field{display:flex;flex-direction:column;gap:5px;margin-bottom:11px}
  #wtb .pf-label{font-family:var(--mono);font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:#5A5E66}
  #wtb .pf-label .req{color:var(--c-prot)}
  #wtb .req{color:var(--c-prot)}
  #wtb .pf-input{font-family:var(--body);font-size:16px;color:var(--ink);background:var(--white);border:1.5px solid var(--ink);border-radius:var(--r-sm);padding:9px 12px;width:100%}
  #wtb .pf-input:focus{outline:none;box-shadow:3px 3px 0 var(--ink)}
  #wtb .pf-input.bad{border-color:var(--c-prot);box-shadow:0 0 0 3px rgba(var(--c-prot-rgb),.15)}
  #wtb textarea.pf-input{resize:none;height:42px}
  #wtb .pf-checks{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;min-height:100px;align-content:flex-start}
  #wtb .pf-checks label{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink);cursor:pointer}
  #wtb .pf-checks.bad{outline:1.5px solid var(--c-prot);outline-offset:6px;border-radius:var(--r-xs)}
  #wtb .pf-checks input{width:17px;height:17px;flex:0 0 auto;accent-color:var(--ink)}
  #wtb .pf-radios{display:flex;flex-wrap:wrap;gap:8px 16px;padding-top:2px}
  #wtb .pf-radios label{display:flex;align-items:center;gap:7px;font-size:14px;color:var(--ink);cursor:pointer}
  #wtb .pf-radios input{width:17px;height:17px;flex:0 0 auto;accent-color:var(--ink)}
  #wtb .pf-foot{flex:0 0 auto;padding:11px clamp(16px,3vw,26px) 15px;border-top:1.5px solid var(--soft);background:var(--white);display:flex;align-items:center;gap:16px}
  #wtb .pf-consent-wrap{flex:1 1 auto;display:flex;flex-direction:column;gap:3px}
  #wtb .pf-consent{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink);cursor:pointer}
  #wtb .pf-consent input{width:17px;height:17px;flex:0 0 auto;accent-color:var(--ink)}
  #wtb .pf-consent .req{color:var(--c-prot)}
  #wtb .pf-err{font-family:var(--mono);font-size:11px;color:var(--c-prot);min-height:0}
  #wtb .pf-err:empty{display:none}
  #wtb .pf-submit{flex:0 0 auto;font-family:var(--mono);font-size:13.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:700;background:var(--acid);color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--r-chip);padding:13px 30px;cursor:pointer}
  #wtb .pf-submit:hover{background:var(--acid-deep)}
  #wtb #wtb-pfDone{text-align:center;padding:24px 6px}
  #wtb #wtb-pfDone .pf-submit{width:100%;margin-top:16px}
  #wtb .pf-done-ic{width:60px;height:60px;margin:4px auto 14px;border-radius:50%;background:var(--acid);border:1.5px solid var(--ink);display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:800}

  #wtb [hidden]{display:none!important}

  @media (max-width:640px){
    #wtb .wtb-container{padding:16px 15px 70px}
    /* Экран 7 (утв. 08.08): тап-цели под палец, рассчитано на ПОЛНЫЙ алфавит городов.
       Рейл на мобиле НЕ липкий: с полным алфавитом липкие 5 рядов съедали бы треть экрана. */
    #wtb .rail{position:static;gap:6px;padding:10px 0 14px}
    #wtb .rl{width:38px;height:38px;font-size:13.5px;border-radius:10px}
    #wtb .rl-online{width:auto;padding:0 14px}
    #wtb .ms-tab{padding:11px 17px;font-size:12px}
    #wtb .mp-go,#wtb .p-site,#wtb .oc-go,#wtb .tchip{padding:10px 15px}
    #wtb .back,#wtb .more,#wtb .empty-actions .eb{padding:12px 18px}
    #wtb .region-sel{padding:11px 17px}
    #wtb .citygrid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
    #wtb .cards{grid-template-columns:1fr}
    #wtb .region-menu{grid-template-columns:1fr;min-width:220px;left:0;right:0}
    #wtb .rb-hint{display:none}
    #wtb .cta{flex-direction:column;align-items:flex-start}
    #wtb .opt-inner{padding:40px 15px var(--gap-footer)}
    #wtb .opt-grid{grid-template-columns:1fr}
    #wtb .opt-grid--carousel>*{flex:0 0 calc(100% - 32px);min-width:calc(100% - 32px)}
    /* 19.08: кегль 16 — не про красоту, а про поведение iPhone. Safari принудительно
       увеличивает страницу, когда касаешься поля с кеглем меньше 16, и обратно её
       не возвращает: дальше человек листает «Где купить» в зуме, с боковой прокруткой.
       Единственное исключение из общей шкалы мелкого текста, и оно вынужденное. */
    #wtb .opt-select{min-width:0;width:100%;font-size:16px}
    #wtb .opt-count{margin-left:0}
    #wtb .dcall{font-size:16px}
    #wtb .opt-banner{flex-direction:column;align-items:flex-start}
    #wtb .pf-grid{grid-template-columns:1fr}
    #wtb .pf-checks{grid-template-columns:1fr;min-height:0}
    #wtb .pf-headrow{flex-direction:column;padding-right:34px}
    #wtb .pf-typeswitch{width:100%}
    #wtb .pf-type{flex:1;text-align:center}
    #wtb .pf-foot{flex-direction:column;align-items:stretch;gap:10px}
    #wtb .pf-submit{width:100%}
    #wtb .wtb-swfloat{right:12px;bottom:12px}
    /* Экран 4 (утв. 08.08): форма партнёра на телефоне — во весь экран,
       без «плавающего окна»; «Отправить» всегда у нижнего края */
    #wtb .pf-overlay{padding:0}
    #wtb .pf-modal{max-width:none;width:100%;height:100dvh;max-height:100dvh;border:0;border-radius:0;box-shadow:none}
    #wtb .pf-close{top:10px;right:10px;width:36px;height:36px}
  }
  /* ссылка на политику в согласии (Экран 4) */
  #wtb .pf-consent a{color:inherit;text-decoration:underline}
  #wtb .pf-consent a:hover{color:var(--c-wash)}


/* #wtb: модалка формы выше хрома сайта (site modals z-index 2000) */
#wtb .pf-overlay{ z-index: 2100; }

/* --- Пакет Б (08.08): тап-цели и подписи — также на тач-планшетах 641-900px (первый проход покрыл только ≤640) --- */
@media (min-width: 641px) and (max-width: 900px) {
  #wtb .rl { width: 38px; height: 38px; font-size: 13.5px; border-radius: 10px; }
  #wtb .rl-online { width: auto; padding: 0 14px; }
  #wtb .ms-tab { padding: 11px 17px; }
  #wtb .mp-go, #wtb .p-site, #wtb .oc-go, #wtb .tchip { padding: 10px 15px; }
  #wtb .back, #wtb .more { padding: 12px 18px; }
  .ugc-plat { font-size: .72rem; }
  .jr-tag { font-size: .75rem; }
}

/* --- Пакет Б хвост (08.08): выравнивание текстовых страниц на планшете --- */
@media (max-width: 900px) {
  /* .prose (720px) центровался внутри контейнера, а заголовок страницы — нет: левые края расходились на 24px */
  .container.prose { margin-inline: 0; }
}

/* --- Куки-уведомление (юр-блок, 08.08) --- */
.cookie-bar {
  position: fixed; left: 12px; right: 12px; z-index: 150;
  bottom: max(12px, env(safe-area-inset-bottom));
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  background: var(--ink); color: var(--white);
  border-radius: var(--r-card);
  padding: 12px 16px;
  box-shadow: 0 18px 40px -18px rgba(12,12,12,.5);
  max-width: 720px; margin-inline: auto;
}
.cookie-bar__txt { flex: 1 1 260px; font-size: .85rem; line-height: 1.45; color: rgba(255,255,255,.85); }
.cookie-bar__txt a { color: var(--acid); text-decoration: underline; }
.cookie-bar__ok {
  flex: 0 0 auto; margin-left: auto;
  font-family: var(--f-disp); font-weight: 800; font-size: .8rem;
  text-transform: uppercase; letter-spacing: .02em;
  background: var(--acid); color: var(--ink);
  border: 0; border-radius: var(--r-chip);
  padding: 11px 22px; cursor: pointer; min-height: 40px;
}
.cookie-bar__ok:hover { background: var(--acid-deep); }
.cookie-bar__btns { display: flex; gap: 8px; margin-left: auto; flex-wrap: wrap; }
.cookie-bar__min {
  flex: 0 0 auto;
  font-family: var(--f-disp); font-weight: 700; font-size: .78rem;
  text-transform: uppercase; letter-spacing: .02em;
  background: transparent; color: rgba(255,255,255,.85);
  border: 1.5px solid rgba(255,255,255,.4); border-radius: var(--r-chip);
  padding: 10px 16px; cursor: pointer; min-height: 40px;
}
.cookie-bar__min:hover { border-color: var(--white); color: var(--white); }
/* Мобайл (09.08): кнопки не влезали в ряд и разваливались по диагонали, в боковые
   зазоры просвечивала жёлтая бегущая строка. Решение — шит от края до края,
   кнопки столбиком во всю ширину, «Принять все» первой. */
@media (max-width: 640px) {
  .cookie-bar {
    left: 0; right: 0; bottom: 0; max-width: none;
    border-radius: 14px 14px 0 0; gap: 12px;
    padding: 14px 16px calc(14px + env(safe-area-inset-bottom));
    box-shadow: 0 -14px 34px -14px rgba(12,12,12,.55);
  }
  .cookie-bar__txt { flex-basis: 100%; }
  .cookie-bar__btns { width: 100%; flex-direction: column; gap: 8px; margin-left: 0; }
  .cookie-bar__ok, .cookie-bar__min { width: 100%; min-height: 46px; }
  .cookie-bar__ok { order: -1; }
}

/* --- Шапка-трансформер на мобиле (владелец 09.08): при скролле чёрная полоса
   растворяется, остаются два круга — лого (на главную) и бургер-круг (меню).
   Реализация лёгкая: те же элементы шапки, меняется только фон/форма/обводка. --- */
@media (max-width: 1060px) {
  .site-header { transition: background-color .28s ease, box-shadow .28s ease; }
  .logo { transition: transform .28s ease, box-shadow .28s ease; }
  .burger { transition: border-radius .28s ease, box-shadow .28s ease, background .2s ease; }
  .site-header.hdr-float:not(.nav-open) { background: transparent; box-shadow: none; pointer-events: none; }
  .site-header.hdr-float:not(.nav-open) .logo,
  .site-header.hdr-float:not(.nav-open) .burger { pointer-events: auto; }
  /* тени идентичные у обоих кругов — тёмно-серая у лого одобрена владельцем 09.08 */
  .site-header.hdr-float:not(.nav-open) .logo {
    transform: scale(.8);
    box-shadow: 0 0 0 1.5px var(--ink), 0 10px 24px rgba(30,30,30,.42);
  }
  .site-header.hdr-float:not(.nav-open) .logo:hover { transform: scale(.8) rotate(-6deg); }
  .site-header.hdr-float:not(.nav-open) .burger {
    border-radius: 50%;
    /* у бургера обводка — его родной border (1.5px, как ring лого); ring не дублируем, иначе двойной контур */
    box-shadow: 0 10px 24px rgba(30,30,30,.42);
  }
}

/* Ремень 09.08 (владелец: «под верхним меню просвечивается сайт» на живом iPhone;
   в эмуляции не воспроизводится): при открытом меню красим ВСЕ слои в чёрный —
   любая щель между шапкой, шторкой и краями вьюпорта становится невидимой */
html.menu-locked, html.menu-locked body { background: var(--ink); }

/* --- Правки главной 09.08 (решения владельца) --- */
@media (max-width: 640px) {
  /* «Разводишь концентрат»: кнопка калькулятора — текст строго в одну строку */
  .hint { padding: 18px 16px; gap: 14px; }
  .hint .btn { white-space: nowrap; font-size: 13px; padding: 12px 16px; width: 100%; justify-content: center; }
  /* Отзывы: карусель со свайпом вместо длинной колонки карточек */
  .reviews-grid {
    display: flex; overflow-x: auto; scroll-snap-type: x mandatory;
    gap: 12px; padding-bottom: 14px;
    scrollbar-width: none; -webkit-overflow-scrolling: touch;
  }
  .reviews-grid::-webkit-scrollbar { display: none; }
  .reviews-grid .review-card { flex: 0 0 84%; scroll-snap-align: center; }
  /* карточки в карусели не «прыгают»: reveal-появление глушим (это оно дёргало кадр) */
  .reviews-grid .review-card { opacity: 1 !important; transform: none !important; }
}

/* --- Правки главной 09.08, батч 3 (решения владельца) --- */
/* hero: тире-черта перед FOAM HEROES убрана (во внутренних секциях остаётся) */
.hero .eyebrow::before { display: none; }
@media (max-width: 700px) {
  /* первый экран компактнее: подзаголовок 16px, кнопки 44px — обе влезают в строку даже на 360 */
  .hero-sub { font-size: 1rem; line-height: 1.55; }
  .hero-cta { gap: 12px; }
  .hero-cta .btn { min-height: 44px; padding: 10px 18px; font-size: .9375rem; }
}
@media (max-width: 640px) {
  /* тёмный блок каталога: верхний отступ = нижнему, не разбрасываемся местом */
  #catalog.section { padding-top: 26px; }
  /* подпись UGC помещается в 2 строки */
  .ugc-note { font-size: 14px; }
}
/* отзывы и «Где купить» — единый отступ (две белые секции подряд давали двойной) */
#buy.section--white { padding-top: 0; }

/* Правило владельца 09.08: на десктопе всё кликабельное — курсор-«палец» + видимый отклик */
button:not(:disabled), [role="button"], summary, select, .fh-like { cursor: pointer; }

/* 09.08 стандартизация: заголовок «О бренде» = внутренний (48px), не геройский 92px */
#rm-h.h-display{ font-size: var(--fs-page-title); }
@media (max-width: 560px){ #rm-h.h-display{ font-size: clamp(1.7rem, 8.5vw, 2.4rem); } }

/* 09.08: заголовок комьюнити на телефоне — строго 2 строки: длинная фраза ротации
   («Ритуал выходного дня.») давала сироту «ДНЯ.» третьей строкой */
@media (max-width: 640px){
  #ugc .section-head--row{ display: block; }
  #ugc .section-head--row .btn{ margin-top: 14px; }
  #ugc h2.h-display{ font-size: clamp(19px, 6vw, 26px); }
}

/* 09.08 (решение владельца): hero ТОЛЬКО на адаптиве — текст расступается:
   кикер+заголовок к верху, подзаголовок+кнопки к низу, центр машины виден.
   Десктоп не трогаем («там всё классно»). */
@media (max-width: 700px) {
  .hero { align-items: stretch; }
  .hero-inner {
    display: flex; flex-direction: column;
    padding-block: clamp(24px, 4svh, 44px) clamp(44px, 8svh, 80px);
  }
  /* 12.08: «.hero-sub { margin-top: auto }» убрано — правило было мёртвым (его перебивало
     .hero-sub{margin-top:var(--s-1)} ниже по файлу), а решение владельца от 12.08 другое:
     подпись остаётся при заголовке, к низу уходят ТОЛЬКО кнопки (блок в конце файла). */
}

/* ============================================================
   10.08 — правки маркетолога (пп. 4, 5, 12)
   ============================================================ */

/* п.5 (ревизия 11.08, решение владельца + вердикт дизайнера): exp-сцена ВЛЕВО, зеркально
   ask-сцене; заголовок ЕДИНОГО с ней размера, в две строки — правый низ свободен, маскот
   в полном размере (стандартные правила .scene-mascot, ≤860 — static по центру) */
.exp-scene .container { position: relative; }
/* 19.08: min(..., --h2cap) продублирован здесь намеренно — это правило идёт ПОЗЖЕ
   общего `h2.h-display` и с той же силой, поэтому побеждает порядком. Без дубля
   предохранитель до этого заголовка не доходил, и на 320 он оставался обрезанным. */
.exp-scene h2 { font-size: min(clamp(2rem, 5.4vw, 4.6rem), var(--h2cap, 999px)); max-width: 21ch; }

/* п.4: соцсети в подвале — SVG-иконки, рендерятся только заполненные в CMS.
   11.08: живут в .footer-brand (десктоп — сразу под тэглайном, подвал НЕ растягивается) */
.footer-social { display: flex; gap: 10px; margin-top: 16px; }
.footer-social a {
  display: inline-grid; place-items: center;
  /* 19.08 (просьба владельца): было 40 — на телефоне кружок давно 44 (норма тап-зоны),
     на компьютере оставался мельче. Выравниваем: 44 везде. */
  width: 44px; height: 44px;
  border: 1px solid rgba(255,255,255,.35); border-radius: 50%;
  color: #fff;
  transition: background .25s ease, color .25s ease, border-color .25s ease;
}
.footer-social a:hover { background: #fff; border-color: #fff; color: var(--ink); }
.footer-social svg { display: block; }

/* 18.08: до этого на ≤640 иконки уводились абсолютом в пустой угол колонки «Каталог».
   Приём был рассчитан на ТРИ иконки (140px); с Рутубом ряд стал 190px, а колонка на
   экране 320 — всего 137, и четвёртая иконка легла на «Правила UGC» (замер: наезд на
   320/360/390, чисто только с 430). Владелец выбрал вариант «строка сверху»: ряд встаёт
   отдельной строкой под логотипом и подписью — наезжать не на что при любом числе иконок
   (пять по 44 = 260 при поле 288). Кружок 40→44 — минимальная тап-зона Apple/Google.
   ★ Блок стоит ПОСЛЕ базовых правил намеренно: правило без медиазапроса, идущее ниже,
   перебило бы размер кружка (специфичность равна, побеждает порядок). */
@media (max-width: 640px) {
  .footer-brand { flex-wrap: wrap; }
  .footer-grid .footer-social { width: 100%; margin: 12px 0 2px; }
  /* размер кружка (44) больше не дублируется здесь — он такой же в базовом правиле выше */
}

/* п.12: «Правила UGC» — текст на одной вертикали с заголовком (НЕ левее), маскот справа.
   На узких экранах маскот уходит вниз под списки, чтобы не наезжать на текст. */
.rules-flow { position: relative; }
.rules-mascot {
  position: absolute; right: clamp(24px, 6vw, 120px); top: 34%;
  width: min(250px, 19vw); height: auto;
  filter: drop-shadow(0 18px 24px rgba(0,0,0,.22));
  pointer-events: none;
}
@media (max-width: 1199px) {
  .rules-mascot { position: static; display: block; margin: var(--s-4) auto 0; width: min(220px, 60vw); }
}

/* ============================================================
   12.08 — ПАКЕТ ПО РЕВЬЮ ВНЕШНЕГО ДИЗАЙНЕРА (вердикты консилиума,
   решение владельца). Всё, что ниже, — принятые пункты.
   ============================================================ */

/* (1) Межстрочное: одна шкала вместо единственного 1.02 на заголовки любого размера.
   Плакатным капсам 1.05 (русские Д/Ц/Щ с хвостами и Й/Ё со значками переставали тереться),
   мелким заголовкам 1.2. Значения — множители, масштабируются вместе с кеглем. */
:root { --lh-display: 1.05; --lh-title: 1.2; }
h1, h2 { line-height: var(--lh-display); }
h3, .h3 { line-height: var(--lh-title); }
.rm-title { line-height: var(--lh-title); }   /* было 1.6 на десктопе против 1.2 на мобиле */
.footer-col h3 { line-height: var(--lh-title); }

/* (2) Первый экран: стикер держится КОЛОНКИ контента, а не края окна (уезжал на 320px
   вправо на широком мониторе), плашка непрозрачная — на светлом кадре видео читалась плохо.
   ⚠ ТОЛЬКО десктоп: на телефоне стикер скрыт правилом выше (@max-width:700px display:none),
   а `display:flex` без медиазапроса перебивало его (правило ниже по файлу) — стикер
   возвращался на мобилу и ложился поверх заголовка. */
@media (min-width: 701px) {
  .hero-stickers {
    left: 0; right: 0;
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
    display: flex; justify-content: flex-end;
    pointer-events: none;
  }
}
.hero .sticker { background: var(--ink); border-color: rgba(255,255,255,.28); }
/* подзаголовок принадлежит заголовку — подтягиваем к нему (было 24px при 32px до кнопок) */
.hero-sub { margin-top: var(--s-1); }

/* (3) Отзывы — в общий ритм карточных блоков (были зазор 32 и радиус 14 против 18 и 20) */
.reviews-grid { gap: clamp(12px, 1.4vw, 18px); }
.review-card { border-radius: var(--r-lg); }

/* (4) Подвал (только десктоп — мобильный компакт утверждён 08.08 отдельно):
   заголовок колонки был МЕЛЬЧЕ своих же ссылок (13 против 17) */
@media (min-width: 641px) {
  .footer-col h3 { font-size: .9375rem; }
  .footer-col ul { gap: 6px; }
  .footer-col a { font-size: .9375rem; }
  /* 19.08 (просьба владельца): подпись под логотипом наследовала общий кегль 17 и была
     КРУПНЕЕ пунктов меню (15) — служебный текст звучал громче навигации. Ставим 15,
     тот же, что у ссылок; на телефоне подпись давно 14 (блок мелкого текста ниже). */
  .footer-brand p { font-size: .9375rem; }
}

/* (5) Cookie-плашка больше не перекрывает копирайт и ссылку на политику */
html.consent-open .site-footer { padding-bottom: calc(var(--s-4) + var(--consent-h, 84px) + 12px); }

/* ============================================================
   12.08 — СТАНДАРТИЗАЦИЯ ШАПОК СТРАНИЦ, добор отступников
   (канон утверждён 09.08: крошки → кикер mono → H1 48/900 → лид 18 ink).
   По канону уже 11 страниц; здесь добираем «Где купить», категорию и статью.
   ============================================================ */

/* «Где купить»: был H1 74px/800, лид 16px серый, крошек не было, свой контейнер 1160
   (левый край 160 против 128 у всех) */
#wtb .wtb-container { max-width: var(--container); padding-inline: var(--gutter); }
#wtb .masthead .breadcrumbs { margin-bottom: var(--s-3); }
#wtb .eyebrow {
  font-family: var(--f-mono); font-size: var(--fs-mono); letter-spacing: .14em;
  text-transform: uppercase; color: var(--ink); font-weight: 500;
  display: inline-flex; align-items: center; gap: 10px;
}
#wtb .eyebrow::before { content: ""; width: 22px; height: 1px; background: currentColor; opacity: .8; }
#wtb .title {
  font-family: var(--f-disp); font-weight: 800;
  font-size: var(--fs-page-title); line-height: var(--lh-display);
  letter-spacing: -.02em; text-transform: uppercase; margin: 0 0 var(--s-2);
}
#wtb .sub { max-width: 56ch; font-size: 1.125rem; color: var(--ink); }
@media (max-width: 560px) { #wtb .title { font-size: clamp(1.7rem, 8.5vw, 2.4rem); } }

/* Статья журнала: заголовок материала был 52/800 — приводим к канону страниц */
.jr-article-title, .article-hero h1, main article h1 { font-size: var(--fs-page-title); font-weight: 800; }

/* 12.08: пришли РЕАЛЬНЫЕ отзывы — длина от одной строки до 15, и сетка растягивала
   все карточки ряда под самый длинный: рядом с простынёй стояли карточки с дырой
   в пол-экрана. Текст ограничиваем 8 строками (клик по карточке ведёт на площадку),
   карточки держат свою высоту. */
.reviews-grid { align-items: start; }
.review-card blockquote {
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 8;
  overflow: hidden;
}
@media (max-width: 640px) {
  /* в мобильной карусели карточки одной высоты — иначе «прыгает» при листании */
  .reviews-grid { align-items: stretch; }
  .review-card blockquote { -webkit-line-clamp: 7; }
}

/* ============================================================
   12.08 — ОТЗЫВЫ: лента вместо сетки (решение владельца)
   Карточки СТРОГО одного размера; лента листается влево/вправо
   бесконечно (ряд продублирован, перескок в main.js).
   ============================================================ */
.reviews-rail {
  overflow-x: auto; overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  margin-top: var(--s-3);
  /* 12.08 (владелец): лента во всю ширину ОКНА, а не по контейнеру.
     --sbw (ширина полосы прокрутки) считает main.js: чистый 100vw дал бы
     горизонтальный скролл всей страницы на Windows. */
  width: calc(100vw - var(--sbw, 0px));
  max-width: calc(100vw - var(--sbw, 0px));
  margin-inline: calc(50% - (100vw - var(--sbw, 0px)) / 2);
  padding-inline: var(--gutter);
  /* края ленты растворяются — видно, что она продолжается */
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 40px, #000 calc(100% - 40px), transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 40px, #000 calc(100% - 40px), transparent 100%);
}
.reviews-rail::-webkit-scrollbar { display: none; }
.reviews-track { display: flex; gap: clamp(12px, 1.4vw, 18px); width: max-content; }
/* десктоп: лента в ДВА ряда (просьба владельца) — карточки идут колонками по две */
@media (min-width: 641px) {
  .reviews-track {
    display: grid; grid-auto-flow: column;
    grid-template-rows: repeat(2, auto);
    grid-auto-columns: 320px;
  }
}
.reviews-rail .review-card {
  flex: 0 0 320px; width: 320px;
  height: 384px;                     /* один размер у всех — просьба владельца */
  display: flex; flex-direction: column;
  margin: 0;
}
/* в карточке фиксированной высоты flex сжимал подпись товара и звёзды в ноль */
.reviews-rail .review-card > * { flex: 0 0 auto; }
.reviews-rail .review-card blockquote {
  /* высота задана В СТРОКАХ — иначе фиксированная высота карточки резала строку пополам */
  flex: 0 0 auto;
  line-height: 1.6;
  max-height: calc(7 * 1.6em);
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 7;
  overflow: hidden; text-overflow: ellipsis;
}
.reviews-rail .review-who { margin-top: auto; }
.reviews-rail .review-src { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.reviews-rail .review-product {
  display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@media (max-width: 640px) {
  .reviews-rail .review-card { flex-basis: 78vw; width: 78vw; height: 360px; }
  .reviews-rail .review-card blockquote { max-height: calc(5 * 1.6em); -webkit-line-clamp: 5; }
  .reviews-rail { -webkit-mask-image: none; mask-image: none; }
}

/* 12.08 (владелец): блок автора в отзыве был растянут по высоте (аватар 44 + две
   строки = 82px). Причёсываем: аватар меньше, строки плотнее, отступ от текста короче. */
.reviews-rail .review-who { gap: 10px; margin-top: auto; padding-top: 12px; }
.reviews-rail .review-ava { width: 34px; height: 34px; font-size: .875rem; }
.reviews-rail .review-name { font-size: .8125rem; line-height: 1.25; }
.reviews-rail .review-src { font-size: .6875rem; line-height: 1.25; margin-top: 1px; }

/* ============================================================
   12.08 ФИНАЛ (владелец): отзывы — сетка 4×2, восемь на экране.
   Лента с бесконечной прокруткой отменена.
   ============================================================ */
@media (min-width: 641px) {
  .reviews-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: stretch; }
  .reviews-grid .review-card { height: 384px; }
  .reviews-grid .review-card blockquote {
    line-height: 1.6; max-height: calc(7 * 1.6em);
    display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 7;
    overflow: hidden; text-overflow: ellipsis;
  }
}
/* 12.08 (владелец): в HTML лежат ВСЕ отзывы, на экране — восемь.
   Порядок тасует main.js при каждой загрузке, так что «первые восемь» каждый раз
   разные. Скрытые карточки не занимают места ни в сетке, ни в мобильной карусели. */
.reviews-grid[data-shuffle] .review-card:nth-child(n + 9) { display: none; }

/* ПРИЧИНА «растянутого» блока автора: имя и площадка — абзацы, между ними стоял
   абзацный отступ. Убираем — строки идут вплотную, как и должны. */
.review-who p { margin: 0; }
.review-who { gap: 10px; }
.review-ava { width: 34px; height: 34px; font-size: .875rem; }
.review-name { font-size: .8125rem; line-height: 1.3; }
.review-src { font-size: .6875rem; line-height: 1.3; }

/* ============================================================
   12.08 (решение владельца) — ПЕРВЫЙ ЭКРАН НА ТЕЛЕФОНЕ:
   текст остаётся сверху (кикер + заголовок + подпись вместе, размеры не трогаем),
   а кнопки прижимаются к низу первого экрана.
   ⚠ Блок обязан стоять В КОНЦЕ ФАЙЛА: выше по файлу есть .hero-sub{margin-top:var(--s-1)},
   которое перебивало прежнюю «раздвижку» (она молча умерла 10.08).
   ============================================================ */
@media (max-width: 700px) {
  .hero { align-items: stretch; }
  .hero-inner {
    display: flex; flex-direction: column;
    padding-block: clamp(24px, 4svh, 44px) clamp(28px, 5svh, 48px);
  }
  .hero-sub { margin-top: var(--s-1); }   /* подпись держится заголовка */
  .hero-cta { margin-top: auto; transition: opacity .3s ease; }
  /* мельче на пару пунктов — на узком Android две кнопки перестают
     переноситься на вторую строку */
  .hero-cta .btn { min-height: 46px; padding: 10px 14px; font-size: .875rem; }
  /* Пока висит плашка про cookie, кнопок не показываем. Плашка прибита к низу ЭКРАНА,
     а кнопки — к низу первого экрана, который заканчивается выше: без этого правила
     кнопки торчали бы из-под плашки разрезанными по буквам и не нажимались. */
  html.consent-open .hero-cta { opacity: 0; pointer-events: none; }
}

/* ============================================================
   Пасхалки FH (eggs) — оверлеи. Активны только на стенде до апрува
   (замок по домену в assets/js/eggs.js). C: пенный залп.
   ============================================================ */
.fh-egg-foam { position: fixed; inset: 0; z-index: 9999; pointer-events: none; opacity: 1; transition: opacity .5s ease; }
.fh-egg-foam.fh-egg-out { opacity: 0; }
.fh-egg-cv { position: absolute; inset: 0; width: 100%; height: 100%; }
.fh-egg-mascot { position: absolute; right: 16px; bottom: 0; width: clamp(140px, 22vw, 230px); height: auto; transform: translateY(118%); transition: transform .45s cubic-bezier(.2,.9,.3,1); will-change: transform; }
.fh-egg-mascot.fh-egg-mascot-in { transform: translateY(0); }
.fh-egg-say { position: absolute; left: 50%; top: 20%; transform: translateX(-50%) translateY(10px); opacity: 0; transition: opacity .3s ease, transform .3s ease; background: var(--ink); color: #fff; font-family: var(--f-body); font-weight: 800; font-size: clamp(1rem, 3.4vw, 1.5rem); padding: 12px 20px; border-radius: 16px; box-shadow: 0 14px 30px -12px rgba(0,0,0,.5); max-width: min(86vw, 640px); text-align: center; }
.fh-egg-say.fh-egg-say-in { opacity: 1; transform: translateX(-50%) translateY(0); }
.fh-egg-x { position: absolute; top: 14px; right: 14px; pointer-events: auto; width: 44px; height: 44px; border-radius: 50%; border: 0; background: rgba(12,12,12,.72); color: #fff; font-size: 26px; line-height: 1; cursor: pointer; }
.fh-egg-x:hover { background: var(--ink); }
/* Пеномёт-тир: крестик — спрайт художника (тёмный диск + жёлтый ободок + ×) */
.fh-tir .fh-tir-x { background: url(../img/eggs/close.png) center/contain no-repeat; color: transparent; font-size: 0; border: 0; filter: drop-shadow(0 2px 6px rgba(0,0,0,.45)); transition: transform .12s ease; }
.fh-tir .fh-tir-x:hover { background: url(../img/eggs/close.png) center/contain no-repeat; transform: scale(1.08); filter: drop-shadow(0 3px 9px rgba(0,0,0,.55)); }
.fh-egg-static .fh-egg-cv { background: radial-gradient(120% 90% at 78% 88%, rgba(255,255,255,.96) 0, rgba(255,255,255,.6) 34%, transparent 62%); }
/* A: плашка-реакция маскота в калькуляторе (тост, не толкает раскладку) */
.fh-calc-egg { position: fixed; z-index: 900; right: 20px; bottom: 20px; max-width: min(78vw, 340px); display: flex; align-items: center; gap: 10px; background: var(--ink); color: #fff; padding: 9px 15px 9px 9px; border-radius: 14px; box-shadow: 0 16px 34px -14px rgba(0,0,0,.55); transform: translateY(16px); opacity: 0; transition: opacity .22s ease, transform .22s ease; pointer-events: none; font-family: var(--f-body); font-weight: 700; font-size: .95rem; line-height: 1.25; }
.fh-calc-egg.in { opacity: 1; transform: translateY(0); }
.fh-calc-egg img { width: 36px; height: 36px; border-radius: 9px; object-fit: cover; object-position: center top; flex: 0 0 auto; background: var(--acid); }
@media (max-width: 640px) { .fh-calc-egg { right: 12px; left: 12px; bottom: 12px; max-width: none; } }
/* B: «Назови героя» — тёмный оверлей + имя маркером + канвас-эффект (десктоп, на боевом инертно) */
.fh-hero { position: fixed; inset: 0; z-index: 9999; pointer-events: none; opacity: 0; transition: opacity .3s ease; background: rgba(12,12,12,.66); }
.fh-hero.in { opacity: 1; }
.fh-hero.out { opacity: 0; }
.fh-hero-cv { position: absolute; inset: 0; width: 100%; height: 100%; }
.fh-hero-name { position: absolute; top: 46%; left: 50%; transform: translate(-50%,-50%) rotate(-3deg) scale(.82); opacity: 0; font-family: var(--f-marker); font-weight: 800; font-size: clamp(3rem, 11vw, 8rem); line-height: 1; color: var(--hc, #fff); text-shadow: 0 0 1px rgba(255,255,255,.85), 0 8px 34px rgba(0,0,0,.55); transition: transform .2s cubic-bezier(.2,.9,.3,1), opacity .2s ease; white-space: nowrap; }
.fh-hero.in .fh-hero-name { transform: translate(-50%,-50%) rotate(-3deg) scale(1); opacity: 1; }
.fh-hero-quip.fh-calc-egg { top: auto; left: 50%; right: auto; bottom: 9%; transform: translateX(-50%); }
.fh-hero-static .fh-hero-cv { background: radial-gradient(58% 46% at 50% 46%, var(--hc) 0, transparent 72%); opacity: .45; }
/* D: «Пеномёт-тир» на 404 (десктоп+мобила; на боевом инертно — узлы не создаются) */
.fh-tir-entry { margin-top: var(--s-3, 20px); display: flex; flex-direction: column; align-items: center; gap: 8px; }
.fh-tir-teaser { font-family: var(--f-mono); font-size: .72rem; color: var(--ink-55); text-transform: uppercase; letter-spacing: .06em; margin: 0; }
.fh-tir-start { font-family: var(--f-disp); font-weight: 800; text-transform: uppercase; font-size: .8rem; letter-spacing: .04em; min-height: 44px; padding: 0 20px; border-radius: var(--r-chip); border: 1.5px solid var(--line-strong, rgba(12,12,12,.25)); background: transparent; color: var(--ink); cursor: pointer; transition: background .2s ease, color .2s ease, border-color .2s ease; }
.fh-tir-start:hover { background: var(--acid, #FFD02F); border-color: transparent; color: var(--ink); }
.fh-tir { position: fixed; inset: 0; z-index: 9999; opacity: 0; transition: opacity .3s ease; overflow: hidden;
  background:
    radial-gradient(130% 80% at 50% -12%, rgba(120,150,170,.20) 0, transparent 52%),
    repeating-linear-gradient(114deg, rgba(255,255,255,.018) 0 2px, transparent 2px 26px),
    repeating-linear-gradient(72deg, rgba(0,0,0,.05) 0 1px, transparent 1px 34px),
    radial-gradient(120% 100% at 50% 0%, #212b34 0, #0d1218 78%); }
.fh-tir.in { opacity: 1; } .fh-tir.out { opacity: 0; }
.fh-tir-cv { position: absolute; inset: 0; width: 100%; height: 100%; touch-action: none; cursor: url(../img/eggs/reticle.png) 32 32, crosshair; }
.fh-tir-hud { position: absolute; top: 0; left: 0; right: 0; display: flex; align-items: center; gap: 16px; padding: 14px 62px 14px 18px; font-family: var(--f-mono); font-size: .78rem; color: #fff; letter-spacing: .04em; pointer-events: none; z-index: 3; }
.fh-tir-hud b { font-size: 1.05rem; }
.fh-tir-st { display: inline-flex; gap: 6px; } .fh-tir-st i { width: 12px; height: 12px; border-radius: 50%; background: #fff; transition: opacity .2s ease, transform .2s ease; } .fh-tir-st i.off { opacity: .22; transform: scale(.78); }
.fh-tir-bar { flex: 1; max-width: 240px; height: 6px; border-radius: 4px; background: rgba(255,255,255,.16); overflow: hidden; } .fh-tir-bar u { display: block; height: 100%; width: 100%; background: #fff; }
.fh-tir-mascot { z-index: 2; }
.fh-tir-say { position: absolute; right: 16px; bottom: calc(16px + clamp(140px, 22vw, 230px) * .52); max-width: 230px; background: var(--ink); color: #fff; font-family: var(--f-body); font-weight: 700; font-size: .85rem; line-height: 1.3; padding: 8px 14px; border-radius: 12px; opacity: 0; transform: translateY(8px); transition: opacity .2s ease, transform .2s ease; z-index: 3; }
.fh-tir-say.in { opacity: 1; transform: translateY(0); }
.fh-tir-end { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; text-align: center; color: #fff; background: rgba(11,14,18,.74); padding: 24px; z-index: 4; }
.fh-tir-end h2 { font-family: var(--f-disp); font-weight: 800; font-size: clamp(1.6rem, 4vw, 2.6rem); margin: 0; }
.fh-tir-scl { font-family: var(--f-mono); font-size: 1rem; margin: 0; } .fh-tir-scl b { font-size: 1.6rem; }
.fh-tir-rec { font-family: var(--f-mono); color: var(--acid, #FFD02F); margin: 0; }
.fh-tir-4w { font-family: var(--f-mono); font-size: .78rem; color: rgba(255,255,255,.5); margin: 4px 0 6px; }
.fh-tir-eb { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
.fh-tir-again, .fh-tir-quit { font-family: var(--f-disp); font-weight: 800; text-transform: uppercase; font-size: .82rem; min-height: 46px; padding: 0 22px; border-radius: var(--r-chip); cursor: pointer; border: 0; }
.fh-tir-again { background: var(--acid, #FFD02F); color: var(--ink); }
.fh-tir-quit { background: transparent; color: #fff; border: 1.5px solid rgba(255,255,255,.4); }
.fh-tir-sw { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; color: #fff; padding: 24px; z-index: 3; }
.fh-tir-shd { font-family: var(--f-disp); font-weight: 800; font-size: clamp(1.4rem, 3.4vw, 2.2rem); margin: 0; }
.fh-tir-spots { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.fh-tir-spot { width: clamp(56px, 12vw, 88px); height: clamp(56px, 12vw, 88px); border-radius: 50%; border: 0; cursor: pointer; background: radial-gradient(circle at 40% 35%, #6b5a44, #14110c); transition: opacity .25s ease, transform .25s ease; }
.fh-tir-spot.gone { opacity: 0; transform: scale(.4); pointer-events: none; }
.fh-tir-swin { text-align: center; display: flex; flex-direction: column; gap: 14px; align-items: center; }

/* Награды/пресса на «О бренде»; карточка фактов «Коротко о компании» — на «Контактах» (тёмная .scene-секция) */
.fh-awards { padding: 48px 0 8px; }
.fh-awards__list { list-style: none; margin: 20px 0 0; padding: 0; display: grid; gap: 2px; }
.fh-awards__list li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; padding: 14px 0; border-top: 1px solid var(--ink-16, rgba(12,12,12,.16)); }
.fh-awards__list li:last-child { border-bottom: 1px solid var(--ink-16, rgba(12,12,12,.16)); }
.fh-awards__yr { font-family: var(--f-mono); font-size: .82rem; color: var(--ink-55, #6a6a6a); min-width: 46px; }
.fh-awards__src { font-weight: 800; }
.fh-awards__ttl { color: var(--ink-72, #3a3a3a); }
.fh-facts__dl { max-width: 840px; margin: var(--s-4, 32px) 0 0; display: grid; grid-template-columns: 1fr 1fr; column-gap: clamp(28px, 5vw, 64px); row-gap: 0; }
.fh-facts__dl > div { padding: 16px 0; border-top: 1px solid rgba(255,255,255,.16); }
.fh-facts__dl dt { font-family: var(--f-mono); font-size: .75rem; text-transform: uppercase; letter-spacing: .06em; color: rgba(255,255,255,.52); margin: 0 0 4px; }
.fh-facts__dl dd { margin: 0; font-weight: 700; font-size: 1.0625rem; line-height: 1.35; }
.fh-facts__dl dd.fh-num { font-family: var(--f-mono); font-weight: 600; }
@media (max-width: 720px) { .fh-facts__dl { grid-template-columns: 1fr; } }

/* ===== ЕДИНЫЙ ЗАГОЛОВОК СТРАНИЦЫ НА ТЕЛЕФОНЕ (19.08) =====
   Было: одна роль — шесть кеглей (главная 38,4 · каталог 33,2 · категория 30,4 · статья 28,1 ·
   товар 24 · калькулятор 23,2 на экране 390), и на границе 560→561 заголовок СКАЧКОМ
   уменьшался с 38,4 до 30,4 — экран шире, а надпись мельче (6 страниц).
   Стало: одна шкала, растущая монотонно — 28 на 320, ~32 на 390, 44 на 620, 48 на компьютере.
   ★ ВТОРОЙ множитель — предохранитель от разрыва слова: --h1cap приходит инлайном из
   render.js и равен кеглю, при котором самое длинное слово ЭТОГО заголовка влезает целиком.
   Поэтому «АВТОШАМПУНИ ДЛЯ РУЧНОЙ МОЙКИ» на 320 садится до 28,4 и не рвётся, а короткий
   «КАТАЛОГ» ограничения не замечает. Ручное уменьшение кегля «на глаз» больше не нужно.
   hyphens:manual — дефисные переносы владелец не принимает («РАЗ-БАВЛЯТЬ»);
   break-word (а НЕ anywhere) оставлен только как страховка: рвёт лишь то, что физически
   не влезает, тогда как anywhere рвал слова и там, где они помещались на следующей строке. */
/* Список селекторов длинный не от красоты: у трёх страниц заголовок живёт не в page-head,
   а в собственной шапке — журнал внутри .page-404 (класс переиспользован), «о бренде» это
   #rm-h в .section-head, «где купить» — .masthead внутри #wtb. Без них эти три страницы
   остались бы на старой шкале (замер 19.08 после первой выкладки это и показал). */
.page-head h1.h-display,
.page-404 h1,
#rm-h.h-display,
#wtb .masthead h1.title{
  /* 20.08 (владелец: «почему заголовок первого уровня меньше, чем категории на плашках?»).
     Замер высоты прописных: H1 36 точек против 28,5 у плитки — формально H1 крупнее на 26%,
     но белое на чёрном зрительно прибавляет, и превосходство съедалось. Верхний предел
     48 -> 56: буквы H1 становятся 42 против 28,5, разрыв читается сразу. Нижняя часть
     шкалы не тронута — на телефоне (390) кегль как был, 31,7. */
  font-size: min(clamp(28px, calc(10.9px + 5.33vw), 56px), var(--h1cap, 999px));
  overflow-wrap: break-word; -webkit-hyphens: manual; hyphens: manual;
}

/* ===== МЕЛКИЙ ТЕКСТ: ДВЕ СТУПЕНИ ВМЕСТО ЧЕТЫРНАДЦАТИ (19.08, вариант «В») =====
   Было: 14 размеров мельче 15 (9,5 · 10 · 10,5 · 10,9 · 11 · 11,5 · 11,8 · 12 · 12,5 · 12,8 ·
   13 · 13,1 · 13,5 · 13,6 · 14 · 14,5) и 12 ролей с контрастом ниже нормы 4,5 (худшая — 1,0).
   Стало две ступени, как на НАСТОЯЩЕМ apple.com (замер 19.08: у них 12 и 14, межстрочное 1,33):
     12 — сноски, подвал, юридическое и ВСЁ моноширинное. JetBrains Mono на 14% шире Manrope,
          поэтому его 12 «весит» как 13,7 — отдельная ступень для моно не нужна.
     14 — то, что человек читает и по чему решает: описания, адреса, счётчики, подписи дилеров.
   ★ Правки владельца (19.08): аромат и артикул в карточке — 12, а не 14 («артикул покупателю
   не нужен, а ароматы на 14 перестанут влезать»); страницу калькулятора не трогаем совсем.
   ★ НЕ УМЕНЬШАЕМ кнопки и цену: «Купить на Ozon» с 14 до 12 сужается с 219 до 199 точек,
   и на экранах 390 и 414 блок кнопок перестраивается в другой ряд (замер на 5 ширинах).
   ★ Блок стоит в конце файла намеренно: правила без медиазапроса ниже перебили бы его. */

/* ★ РАЗМЕРЫ — ТОЛЬКО ТЕЛЕФОН (владелец 19.08: «мы же только адаптив меняли»).
   Компьютер остаётся как был. Ниже, без медиазапроса, — то, что является
   исправлением ОШИБКИ и нужно везде: контраст, многоточие, выравнивание. */
@media (max-width: 620px) {
  .footer-col h3{ font-size: 12px; line-height: 1.35; }
  .footer-col a{ font-size: 12px; line-height: 1.35; }
  .footer-bottom, .footer-bottom a, .footer-bottom span{ font-size: 12px; line-height: 1.35; }
  .ugc-plat{ font-size: 12px; line-height: 1.35; }
  .review-src{ font-size: 12px; line-height: 1.35; }
  .rm-text{ font-size: 14px; line-height: 1.4; }
  #wtb .counter{ font-size: 14px; line-height: 1.35; }
  #wtb .oc-tel{ font-size: 14px; }
  #wtb .oc-name{ font-size: 15px; }
  #wtb .opt-flabel{ font-size: 14px; line-height: 1.35; }
  #wtb .opt-fcaption{ font-size: 14px; line-height: 1.35; }
  #wtb .segs-label{ font-size: 14px; line-height: 1.35; }
  #wtb .dealer-addr{ font-size: 14px; line-height: 1.4; }
  #wtb .zbadge{ font-size: 12px; line-height: 1.35; }
  #wtb .oc-dom, #wtb .dmail{ font-size: 12px; line-height: 1.35; }
  #wtb .oc-go, #wtb .dbtn, #wtb .gp-btn{ font-size: 14px; }
  .breadcrumbs, .breadcrumbs a, .breadcrumbs span{ font-size: 12px; line-height: 1.35; }
  .eyebrow{ font-size: 12px; line-height: 1.35; }
  .utp-num, .cover-idx, .cover-meta, .mono{ font-size: 12px; line-height: 1.35; }
  .showcase-chips .chip{ font-size: 12px; }
  #wtb .segs-label, #wtb .block-note, #wtb .rb-label, #wtb .opt-count,
#wtb .opt-hint, #wtb .rl{ font-size: 12px; line-height: 1.35; }
  .fh-tir-teaser{ font-size: 12px; }
  .review-name{ font-size: 14px; line-height: 1.35; }
  .footer-brand p{ font-size: 14px; line-height: 1.4; }
  .hint .btn, .fh-tir-start{ font-size: 14px; }
  #wtb .gp-txt, #wtb .gp-btn, #wtb .retail-optlink, #wtb .retail-optlink a{ font-size: 14px; }
  .fh-card__chips span{ font-size: 12px; }
  #catalog .fh-card__chips span{ font-size: 12px; }
  .tr > *{ font-size: 12px; line-height: 1.35; }
  .author .meta{ font-size: 12px; line-height: 1.35; }
  #wtb .regionbar .rb-label{ font-size: 12px; }
  #wtb .dealer-segs .segs-label{ font-size: 12px; }
  #wtb .geo-prompt .gp-txt{ font-size: 14px; }
  #wtb .geo-prompt .gp-btn{ font-size: 12px; }
  #wtb .masthead-top .eyebrow{ font-size: 12px; }
  .aroma-bubble .ab-txt{ font-size: 12px; }
}

#wtb .opt-flabel{ color: #6B7A99; }
#wtb .opt-fcaption{ color: #5D6980; }
#wtb .counter{ color: #55565A; }
.breadcrumbs a{ color: #55565A; }
/* 19.08: `max-width: calc(100% - 18px)` срезал 18 точек от и без того тесного кружка —
   на телефоне под текст оставалось 52 точки из 72, отсюда «СИЛА…» вместо «Сила лайма».
   Ширину возвращаем полную; многоточие оставляем последней страховкой. */
.aroma-bubble .ab-txt{ max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
#wtb .rb-label, #wtb .gp-btn, #wtb .ms-tab, #wtb .block-note, #wtb .oc-dom,
#wtb .oc-deliv, #wtb .dmail, #wtb .opt-count, #wtb .opt-hint,
#wtb .counter{ color: #616369; }
#wtb .rl:not(.active):not(.dim):not(.rl-online){ color: #616369; }
#wtb .regionbar .rb-label{ color: #616369; }
#wtb .geo-prompt .gp-btn{ color: #fff; }
/* ★ :not(.active):not(.dim) обязательно: правило идёт ПОЗЖЕ и с тем же весом,
   что `#wtb .rl.active{color:#fff}` и `#wtb .rl.dim{color:#C2C6CC}`. Без исключений
   оно красило выбранную букву тёмным на тёмном квадрате (не видно) и делало
   недоступные буквы такими же тёмными, как обычные. Поймал владелец 19.08. */
#wtb .rail .rl:not(.active):not(.dim):not(.rl-online){ color: #3A3B3F; }
#wtb .retail-optlink, #wtb .retail-optlink a{ color: #5A5C62; }
#wtb .opt-microback, #wtb .opt-seam span, #wtb .opt-sub{ color: #5A6683; }
#wtb .opt-flabel{ color: #4F5B78; }
#wtb .opt-chip{ color: #5A6683; }
#wtb .geo-prompt button.gp-btn, #wtb button.gp-btn{ color: #fff; }
#wtb .dealer-segs .segs-label{ color: #9AA8C4; }
#wtb .geo-prompt .gp-btn.ghost{ color: #3A3B3F; }

/* ===== ПОДВАЛ: НИЖНЯЯ СТРОКА ПО КОЛОНКАМ (19.08, просьба владельца) =====
   Было `justify-content: space-between`: копирайт слева, «Пользовательское соглашение»
   прижато к правому краю, «Политика» посередине — замер показал 527 точек от левого края
   при колонке «Каталог» на 467. Владельцу казалось, что ссылки уехали вправо, и по сути
   так и было: они стояли не по сетке. Ставим ту же сетку, что у колонок меню (2fr 1fr 1fr 1fr):
   копирайт под логотипом, ссылки — ровно под «Каталог» и «Бренд». */
@media (min-width: 641px) {
  .footer-bottom {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr 1fr;
    gap: var(--s-4);
    justify-content: initial;
    align-items: start;
  }
}

/* ===== ПАРТНЁРЫ: СЕТКА ПОРЦИЯМИ (19.08) =====
   Ленту с горизонтальной прокруткой убрали совсем. На компьютере её нечем было
   листать (стрелок на сайте нет, полоса прокрутки скрыта), а на сотне партнёров
   лента не масштабируется — владелец: «что будем делать, когда тут будет 100?».
   Теперь обычная сетка: первые 6 карточек и кнопка «Показать ещё» — тот же приём,
   что уже работает в журнале. Класс .opt-grid--carousel больше не выдаётся,
   базовые правила ленты выше оставлены на случай кэша старого where-to-buy.js.
   Скрываем классом, а не [hidden]: у .dealer стоит display:flex. */
#wtb .opt-grid .dealer.is-hidden { display: none; }

/* ===== ТЕЛЕФОН: ПАРТНЁРОВ ЛИСТАЮТ ПАЛЬЦЕМ (19.08, решение владельца) =====
   На телефоне лента остаётся: свайп там естественный и ничего не ломает —
   «а по партнёрам на адаптиве пусть листают!». Порции и кнопка «Показать ещё»
   нужны только там, где листать нечем, — на компьютере и планшете.
   Правила идут ПОСЛЕ `.dealer.is-hidden{display:none}` и с той же силой,
   поэтому перебивают его: на телефоне скрытых карточек нет, лента полная. */
@media (max-width: 640px) {
  #wtb #wtb-optPaged{
    display: flex; gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch; scrollbar-width: none; padding-bottom: 6px;
    /* 19.08 «карточка наполовину пустая»: лента равняла ВСЕ карточки по самой высокой —
       замер на 390: рамка 330 при содержимом 199, то есть 131 точка пустоты внутри девяти
       карточек из десяти. Пробовал прижать нижнюю группу к низу — дыра просто переехала
       в середину, стало не лучше. Оставляем карточку ровно по её содержимому: свободное
       место превращается в обычный фон под лентой, а не в пустую обведённую рамку. */
    align-items: flex-start;
  }
  #wtb #wtb-optPaged::-webkit-scrollbar{ display: none; }
  #wtb #wtb-optPaged > *{
    flex: 0 0 calc(100% - 32px); min-width: calc(100% - 32px); scroll-snap-align: start;
  }
  #wtb .opt-grid .dealer.is-hidden{ display: flex; }
  #wtb #wtb-optPageBtn{ display: none; }
}

/* Дисплейный шрифт сайта = Onest (владелец одобрил 22.08). Имя семейства оставлено
   «Wix Madefor Display», чтобы не трогать сотни мест использования — подменён только
   ФАЙЛ. Исключение — баннер главной (.hero .h-display) остаётся на Wix, см. ниже. */
/* Метрики Onest подогнаны под прежние Wix (ascent 100.80 / descent 25.20 / gap 0),
   чтобы дисплейный текст сидел в центрированных боксах ровно как раньше — иначе после
   смены шрифта цена/имена «поехали» на 1-3px. Override глобален (лечит все боксы разом,
   одинаково в Blink и WebKit); движок без поддержки просто игнорит = как сейчас, не хуже. */
@font-face{font-family:"Wix Madefor Display";font-style:normal;font-weight:100 900;font-display:swap;src:url("../fonts/onest-full.ttf") format("truetype");ascent-override:100.80%;descent-override:25.20%;line-gap-override:0%;}
/* Баннер главной остаётся на Wix Madefor Display — отдельное семейство WixBanner на
   исходных файлах (само имя «Wix Madefor Display» теперь указывает на Onest). */
@font-face{font-family:"WixBanner";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/wixdisplay-500.woff2") format("woff2");}
@font-face{font-family:"WixBanner";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/wixdisplay-700.woff2") format("woff2");}
@font-face{font-family:"WixBanner";font-style:normal;font-weight:800;font-display:swap;src:url("../fonts/wixdisplay-800.woff2") format("woff2");}
.hero .h-display{font-family:"WixBanner",system-ui,sans-serif !important;}
/* 20.08: подключение «веса 900» убрано. У Wix Madefor Display такого начертания нет —
   файл wixdisplay-900.woff2 оказался тем же ExtraBold, что и 800 (размер до байта тот же,
   отрисовка идентична). Пока он был подключён, браузер грузил лишние 25 КБ, а в стилях
   стоял вес, которого не существует, — из-за чего заголовок страницы и плитка каталога
   выходили одинаковой жирности. Максимум семейства — 800. */

/* ===== ЗАГОЛОВОЧНЫЙ ШРИФТ: Wix Madefor Display (19.08, решение владельца) =====
   Ушли с Gotham Pro: наши файлы — неофициальная кириллизация с копирайтом Hoefler,
   веб-лицензию в России купить негде. Wix Madefor Display — свободная лицензия (OFL).
   ★ catalog.css и journal.css подключаются ПОСЛЕ main.css и переопределяют --f-disp
   своими значениями, поэтому этот блок дописан во ВСЕ ТРИ файла — иначе сменился бы
   только заголовок страницы, а плитки, цены и статьи остались бы на старом шрифте. */
:root,#catalog,#journal{--f-disp:"Wix Madefor Display",system-ui,sans-serif;--disp:"Wix Madefor Display",system-ui,sans-serif}
.h-display,h1,h2,h3,h4,
#catalog .fh-card__name,#catalog .fh-card__price b,#catalog .pd__name,#catalog .pd__price,
#catalog .pd__price b,#catalog .cat-hero h1,#catalog .cat-banner h2,#catalog .pd-col__h,
#catalog .subcard__title,
#journal .article-title,#journal .featured-body h3,#journal .card-body h3,#journal .prose h2,
#journal .prose .pull{font-family:"Wix Madefor Display",system-ui,sans-serif}

/* Воздух в крупных заголовках: у Wix прописная выше при том же кегле, при интервале
   1,05 строки слипались. Перечислены и те заголовки, у кого был свой жёсткий межстрочный
   с более сильным селектором, — иначе правка их не достаёт. */
.h-display,h1,h2,h3,
#catalog .cat-hero h1,#catalog .cat-banner h2,#catalog .subcard__title,
#journal .article-title,#journal .featured-body h3,
.cat-row-title,.cover-title,.jr-featured-title,.jr-article-title,.fh-hero-name,
#wtb .title,#wtb .block-title,#wtb .sec-h,#wtb .cv-h,#wtb .cta h2,#wtb .opt-title,
#wtb .opt-banner-txt h3{line-height:1.12}

/* ★★★ Компенсация ch: ширина заголовка баннера задана как max-width:17ch, а ch —
   это ширина нуля ТЕКУЩЕГО шрифта. Ноль у Wix на 9,6% уже, чем у Gotham, поэтому
   строка молча укоротилась и заголовок ломался на три строки. 17 * 1241/1122 = 18,8. */
.hero h1{max-width:19ch}

/* ===== ОБЪЁМ КРУПНЫМ НАДПИСЯМ =====
   Замер: тёмная тень на почти чёрном фоне не даёт ничего (26,81% -> 26,91% «белизны»),
   объём держит блик по верхней кромке — поэтому на баннере блик 30%, а тень работает
   только там, где под буквами светлое (жёлтые блики на капоте, пена).
   Смещение и размытие в em, значит масштабируются вместе с кеглем: 92px -> 8/22, 38px -> 3,4/9,2. */
.hero .h-display{ text-shadow: 0 1px 0 rgba(255,255,255,.35), 0 .07em .14em rgba(0,0,0,.75); }
/* Витрина «Их берут не глядя»: фон меняется под товар (--sc ставит скрипт при переключении
   вкладок). Чёрная тень тянет цветной фон в серость, поэтому подмешиваем цвет товара.
   Первая строка — запасная для браузеров без color-mix. */
#scName{ text-shadow: 0 1px 0 rgba(255,255,255,.35), 0 .07em .14em rgba(0,0,0,.7); }
@supports (color: color-mix(in srgb, red 50%, black)) {
  #scName{ text-shadow: 0 1px 0 rgba(255,255,255,.35),
           0 .07em .14em color-mix(in srgb, var(--sc, #000) 25%, rgba(0,0,0,.75)); }
}

/* ===== НАЗВАНИЯ ТОВАРОВ: ТРЕКИНГ ПОД НОВЫЙ ШРИФТ (19.08) =====
   Замер: у Wix латиница на 2,9% уже, чем у Gotham, при этом прописная выше на 11,5% —
   отсюда ощущение «узковато», о котором сказал владелец. Кегль поднимать нельзя (буквы
   и так выше), поэтому возвращаем ширину разрядкой: +0,02em на имя из 10 знаков даёт
   те же ~3%. Трогаем только названия товаров — там, где претензия и была. */
#scName{ letter-spacing: .02em; }
