/* СГЕНЕРИРОВАН build-v11.js из draft-v12/index.html. Руками не править:
   правка живёт в index.html, здесь она будет затёрта следующей сборкой. */

/* ============================================================
   Imperia Dent — дизайн-токены v9
   Источник истины. Все фрагменты используют только эти значения.

   ЧТО ИЗМЕНИЛОСЬ ПРОТИВ v8 И ПОЧЕМУ
   Палитра v8 (--paper:#FDFBF7 холодный белый + --esp:#2E2618 графит)
   строилась до того, как появилась фотосессия 16.08. Замеры съёмки:
   тон стены в светах #FFF0E0, в тенях #ECC9A2 — насыщенный тёплый песок.
   Холодный белый рядом с ним читается как брак цветокоррекции, а графит
   #2E2618 — как чужая вставка. Бронза контура логотипа тоже мягче, чем
   --gold:#C9A268 в v8: замер даёт #9D8776 — розовое золото, не жёлтое.

   Заморозка клиента соблюдена: палитра «слоновая кость + бронза из
   логотипа», чередование светлых и тёмных секций, мягкие скругления.
   Сдвинуты только температура и глубина — внутри той же семьи.
   ============================================================ */

:root{
  /* --- ПОВЕРХНОСТИ (светлые) ------------------------------- */
  --paper:      #FBF5EC;   /* основной фон: теплее v8, светлее стены клиники,
                              чтобы фото читалось как объект, а не сливалось */
  --sand:       #F3E6D5;   /* чередующаяся секция — тон стены в светах */
  --sand-deep:  #E9D5BC;   /* фон карточек и плашек — тон стены в тенях */

  /* --- ПОВЕРХНОСТИ (тёмные) -------------------------------- */
  --umber:      #3E3128;   /* тёмные секции. Тёплая умбра вместо графита:
                              на ней песочное фото не выглядит инородным */
  --umber-deep: #2F251E;   /* футер, глубже на один шаг */

  /* --- ТЕКСТ ------------------------------------------------ */
  --ink:        #33291F;   /* основной. Тёплый графит, не чёрный */
  --ink-soft:   #6B5C4C;   /* вторичный */
  --ink-mute:   #A2907B;   /* подписи, метки */
  --cream:      #F6ECDC;   /* текст на тёмном */
  --cream-soft: rgba(246,236,220,.66);
  --cream-faint:rgba(246,236,220,.40);

  /* --- БРОНЗА (замерена с логотипа IMG_1466) ---------------- */
  --bronze:     #A8845F;   /* акцент, контур логотипа */
  --bronze-lt:  #C9A87E;   /* блик на тёмном фоне */
  --rose:       #B79378;   /* розовый подтон логотипа */
  --bronze-ink: #8A6A49;   /* бронза, читаемая как текст на светлом (AA) */

  /* --- СТЕНА КЛИНИКИ (сэмплы с постера клиента IMG_0242) ----
     Их собственная реклама заметно теплее сайта: у нас почти белый крем,
     у них персиково-бежевая рельефная стена. Вводим её как ЗОНУ, а не как
     общий фон — иначе уходит воздух и всё сливается в один оранжевый лист. */
  --wall-light: #FBDEC7;
  --wall:       #F4CDAE;
  --wall-deep:  #DCAA83;
  /* Стекло на постере — не размытие, а светлая полупрозрачная плашка:
     замер показал осветление и лёгкий холодный сдвиг, фон под ней читается. */
  --glass:      rgba(255,250,244,.52);
  --glass-line: rgba(255,255,255,.66);

  /* --- ЛИНИИ ------------------------------------------------ */
  --line:       rgba(51,41,31,.14);
  --line-soft:  rgba(51,41,31,.07);
  --line-dark:  rgba(246,236,220,.16);

  /* --- ТИПОГРАФИКА ------------------------------------------ */
  /* 18.08: заголовки переведены на гротеск капсом — так набрана ВСЯ
     полиграфия клиники (постер IMG_0242) и сам вордмарк логотипа.
     Пункт анкеты про Playfair отменён владельцем, откат = вернуть строку. */
  --disp:   'Inter', -apple-system, 'Segoe UI', sans-serif;
  --serif:  'Playfair Display', Georgia, serif;      /* остался в одной роли: цитата врача */
  --ff:     'Inter', -apple-system, 'Segoe UI', sans-serif;
  --script: 'Parisienne', cursive;                   /* только подпись основателей */

  /* Шкала. Против v8 масштаб перераспределён: самое крупное на странице —
     ИМЯ ВРАЧА, а не слоган. Структура кодирует концепцию «лечит ваш врач». */
  /* Капс визуально крупнее строчных — кегли уменьшены, иначе заголовки
     давят на макет. Трекинг обязателен: кириллица в капсе без разрядки слипается. */
  --t-hero:   clamp(31px, 4.2vw, 54px);   /* h1 капсом */
  --t-name:   clamp(25px, 3.5vw, 44px);   /* имя врача — доминанта секции */
  --t-h2:     clamp(21px, 2.4vw, 32px);   /* заголовок секции — тише имени */
  --t-h3:     clamp(19px, 1.9vw, 24px);
  --t-lead:   clamp(16px, 1.35vw, 18.5px);
  --t-body:   16.5px;
  --t-small:  14px;
  --t-eyebrow:11px;

  --lh-tight: 1.08;
  --lh-head:  1.16;
  --lh-body:  1.68;
  --ls-eyebrow: .22em;
  --ls-caps:    .09em;   /* капс кириллицы требует больше трекинга, чем латиница */

  /* --- РАЗМЕРЫ ---------------------------------------------- */
  /* Потолок каркаса. 24.08 опущен с 1900 до 1520: на широком мониторе
     карточка врача занимала 580 px, фотография съедала весь экран и цитата
     врача не помещалась в первый взгляд. При 1520 карточка 453 px — вся,
     вместе с цитатой и кнопкой записи.
     🔴 На экранах уже 1520 (ноутбук 1440 и телефоны) НИЧЕГО не меняется:
     там ширину и так задаёт окно. Значение обязано совпадать с :root
     в assets/vrachi.css — у страниц врачей свой каркас. */
  --wrap:     1520px;
  --pad-x:    clamp(20px, 3.4vw, 60px);   /* один отступ от края для всего */
  --sec-y:    clamp(88px, 10vw, 136px);
  --head-mb:  clamp(36px, 5.2vw, 64px);

  --r-btn:   12px;   /* заморожено клиентом */
  --r-card:  16px;
  --r-photo: 18px;

  /* --- ДВИЖЕНИЕ --------------------------------------------- */
  --e:      cubic-bezier(.22,.61,.36,1);   /* единственная кривая на сайте */
  --e-out:  cubic-bezier(.16,.84,.44,1);
  --d-fast: .28s;
  --d-base: .42s;
  --d-slow: .85s;

  /* --- ТЕНИ ------------------------------------------------- */
  --sh-card: 0 18px 46px rgba(51,41,31,.09);
  --sh-lift: 0 26px 60px rgba(51,41,31,.15);
  --sh-btn:  0 10px 26px rgba(168,132,95,.30);
}

/* Тёмный «пол» страницы: без него на iOS при овер-скролле вылезает
   белая полоса (грабля №4 из handoff) */
html{ background: var(--umber-deep); }
/* Reveal-анимации въезжают с боков и на время полёта выходят за край экрана —
   на 390px это давало горизонтальный скролл (было и в v10). overflow-x:clip
   режет вылет, не ломая position:sticky, в отличие от hidden. */
html,body{overflow-x:hidden;overflow-x:clip}

/* Старостильные цифры Playfair проваливаются под базовую линию —
   «43 этаж» и цены обязаны быть с lining-nums (грабля №5) */
.num, .price, .eyebrow, time{
  font-variant-numeric: lining-nums tabular-nums;
  font-feature-settings: "lnum" 1;
}


/* Inter у нас self-host в трёх начертаниях: 400, 500, 600. Файла 700 нет,
   а <b>/<strong> просят у браузера именно его — тот рисует синтетический жирный
   (механически растянутые штрихи, грязный контур). Восемь таких мест: дисклеймер
   о противопоказаниях, контакты в футере, подпись «Карина». Приводим к 600. */
b, strong{ font-weight:600 }

:focus-visible{
  outline: 2px solid var(--bronze);
  outline-offset: 3px;
  border-radius: 4px;
}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important;
  }
}



/* ============================================================
   Imperia Dent — главная v10
   Токены — tokens.css. Шрифты — assets/fonts.css.

   ЧТО ИЗМЕНИЛОСЬ ПРОТИВ v9
   1. Hero: фотография больше не лежит под текстом. Групповой кадр за
      градиентом закрывал половину людей — на снимке команды это худший
      возможный дефект. Текст ушёл на чистый фон, фото стало широкой
      полосой под ним: видны все, читаемость абсолютная.
   2. Плотность снижена. На референсе клиента главная — это шесть крупных
      высказываний, каждое с кнопкой на отдельную страницу; команда там
      вообще вынесена со главной. У нас порядок секций заморожен, поэтому
      разрежены сами секции: направления и технологии стали лентами
      с прокруткой, FAQ показывает пять вопросов, до/после — один блок.
   3. Сигнатура: линии рельефа стены клиники продолжаются с фотографии
      на страницу и прорисовываются при появлении.
   4. Медиа въезжает с боков, текст всплывает снизу.
   5. Перенесён патч сборки от 16.08: пункт списка с инлайн-элементом
      внутри текста не может быть flex или grid — маркер выводится
      в absolute. Иначе <span class="num"> становится отдельным боксом
      и уезжает на свою строку.
   ============================================================ */

*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;
  scroll-padding-top:calc(var(--hdr-h) + 44px)}
section[id]{scroll-margin-top:calc(var(--hdr-h) + 44px)}
/* ЗОНА СТЕНЫ — тёплая секция на фактуре, как на постере. Ритм страницы:
   фото → тёплая стена → светлое → тёмное → светлое → тёплое → светлое → тёмное.
   Именно чередование не даёт странице слиться в один тон. */
.sec--wall{
  background:
    radial-gradient(120% 90% at 78% 12%, var(--wall-light), transparent 62%),
    radial-gradient(90% 70% at 12% 88%, rgba(220,170,131,.55), transparent 60%),
    linear-gradient(158deg, var(--wall) 0%, var(--wall-light) 46%, var(--wall) 100%);
  position:relative;
}
/* Волны рельефной стены — с постера клиники. В v10 разметку «вен» удалили,
   поэтому одного CSS было мало: элемент добавлен заново, только в эту секцию.
   Линии тонкие и приглушённые: это фактура под контентом, а не декор поверх. */
.sec--wall .veins--wall{display:block;top:0;bottom:0;height:auto;color:var(--bronze);opacity:.46}
.sec--wall .veins--wall svg{height:100%}
.sec--wall .veins--wall path{stroke-width:1.35;stroke-dasharray:none;stroke-dashoffset:0}
.sec--wall .wrap{position:relative;z-index:2}
.sec--wall .sec-head h2 em{color:var(--bronze-ink)}

body{background:var(--paper);color:var(--ink);font:400 var(--t-body)/1.68 var(--ff);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}
body.locked{overflow:hidden}
img,video,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button,input,select{font:inherit;color:inherit;background:none;border:0}
button{cursor:pointer}
ul,ol{list-style:none}
::selection{background:var(--sand-deep);color:var(--ink)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:root{--hdr-h:88px;--strip-h:clamp(300px,46vh,520px)}

.wrap{width:min(var(--wrap),100%);margin-inline:auto;padding-inline:var(--pad-x)}
.sec{padding-block:var(--sec-y);position:relative}
.sec--sand{background:var(--sand)}
.sec--dark{background:var(--umber);color:var(--cream)}
.sec--dark p{color:var(--cream-soft)}

/* ---------- заголовки секций ---------- */
.eyebrow{font-size:var(--t-eyebrow);font-weight:600;letter-spacing:var(--ls-eyebrow);
  text-transform:uppercase;color:var(--bronze-ink);display:block}
.sec--dark .eyebrow{color:var(--bronze-lt)}
/* 02.09 п.4 заказчика: «границы между цветами меньше» — стыки тёмных
   секций со светлыми соседями растворяются градиентом ~100px вместо
   резкой линии. Градиент лежит поверх фона секции, поэтому контенту
   этих секций нужен свой слой (правило ниже). */
#tech{position:relative}
#tech::before{content:'';position:absolute;left:0;right:0;top:0;height:100px;
  background:linear-gradient(180deg,var(--sand),transparent);pointer-events:none}
#tech::after{content:'';position:absolute;left:0;right:0;bottom:0;height:100px;
  background:linear-gradient(0deg,var(--paper),transparent);pointer-events:none}
#book{position:relative}
#book::before{content:'';position:absolute;left:0;right:0;top:0;height:100px;
  background:linear-gradient(180deg,var(--paper),transparent);pointer-events:none}
#tech>.wrap,#book>.wrap{position:relative;z-index:1}
/* Ярлык-капсула (п.6 заказчика, 30.08). Только для надзаголовка секции
   акций: остальные два десятка надзаголовков на сайте остаются строкой. */
.eyebrow--label{display:inline-block;padding:10px 22px 9px;border-radius:100px;
  border:1px solid rgba(168,132,95,.45);background:rgba(255,250,244,.55);
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);
  /* 02.09 п.5 заказчика: капсула крупнее */
  font-size:15px;letter-spacing:.2em;color:var(--bronze-ink)}
.sec-head{margin-bottom:var(--head-mb);max-width:820px}
.sec-head h2{font:500 var(--t-h2)/var(--lh-head) var(--disp);margin-top:16px;max-width:19ch}
.sec-head h2 em{font-style:italic;color:var(--bronze-ink)}
.sec--dark .sec-head h2 em{color:var(--bronze-lt)}
.sec-head .lead{margin-top:18px;font-size:var(--t-lead);color:var(--ink-soft);max-width:54ch}

/* ---------- кнопки ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:15px 28px;border-radius:var(--r-btn);font-size:15.4px;font-weight:500;line-height:1.3;
  transition:background var(--d-base) var(--e),color var(--d-base) var(--e),
    border-color var(--d-base) var(--e),transform var(--d-fast) var(--e),box-shadow var(--d-base) var(--e)}
.btn .arr{transition:transform var(--d-base) var(--e)}
.btn:hover .arr{transform:translateX(4px)}
.btn-solid{background:var(--umber);color:var(--cream)}
.btn-solid:hover{background:var(--bronze-ink);transform:translateY(-2px);box-shadow:0 14px 32px rgba(138,106,73,.3)}
.btn-cream{background:var(--cream);color:var(--umber)}
.btn-cream:hover{background:#fff;transform:translateY(-2px);box-shadow:0 16px 34px rgba(0,0,0,.24)}
.btn-ghost{border:1px solid rgba(51,41,31,.3);color:var(--ink)}
.btn-ghost:hover{background:var(--umber);border-color:var(--umber);color:var(--cream);transform:translateY(-2px)}
.btn[disabled]{opacity:.55;pointer-events:none}

/* ================= ПРЕЛОАДЕР ================= */
#pre{position:fixed;inset:0;z-index:200;
  background:
    radial-gradient(900px 700px at 50% 32%, rgba(168,132,95,.10), transparent 65%),
    linear-gradient(180deg, var(--paper), var(--sand));
  display:grid;place-items:center;align-content:center;
  /* 0,6 с давали заметный момент, когда сквозь гаснущий слой видно
     и логотип заставки по центру, и логотип в шапке. */
  transition:opacity .32s var(--e),visibility .32s}
#pre.done{opacity:0;visibility:hidden;pointer-events:none}
#pre .box{display:grid;justify-items:center;gap:6px;width:100%;max-width:620px;padding-inline:24px}
/* 02.09 владелец: «прорисовка как раньше, но зуб с лого — линии как
   прорисовывались». Canvas сам рисует знак (imperiaMark, data-animate),
   слой появляется мгновенно — иначе фейд съедает начало прорисовки. */
#pre .pmark{width:min(560px,88vw);height:auto;aspect-ratio:900/600;opacity:0;
  margin:-30px 0 -34px;animation:preIn .45s var(--e) .05s forwards}
#pre .word{font-family:var(--disp);font-weight:500;font-size:clamp(22px,4.4vw,34px);line-height:1.25;
  letter-spacing:.34em;text-indent:.34em;text-transform:uppercase;color:var(--bronze-ink);
  opacity:0;white-space:nowrap;animation:preWord 1.1s var(--e) 1.05s forwards}
#pre .by{font-family:var(--script);font-size:clamp(17px,3vw,23px);line-height:1.3;color:var(--rose);
  opacity:0;margin-top:-4px;white-space:nowrap;animation:preIn 1s var(--e) 1.6s forwards}
@keyframes preIn{to{opacity:1}}
@keyframes preWord{from{opacity:0;letter-spacing:.62em;text-indent:.62em}to{opacity:1;letter-spacing:.34em;text-indent:.34em}}
/* На телефоне надпись шире канваса: анимация разрядки меняла ширину колонки
   и знак дёргался — там только проявление. */
@media (max-width:640px){
  #pre .box{width:100%}
  #pre .word{font-size:5.6vw;letter-spacing:.3em;text-indent:.3em;animation:preIn .9s var(--e) 1.05s forwards}
}

/* ================= ШАПКА ================= */
/* 08.09: лента прототипа снята при публикации сайта. Она стояла над шапкой
   и держала её на top:34px — вместе с лентой ушёл и этот сдвиг. Правило
   body.scrolled .hdr{top:0} ниже оставлено намеренно: оно перекрывает
   возможные переопределения и не мешает, когда сдвига уже нет. */
.hdr{position:fixed;top:0;left:0;right:0;z-index:50;
  transition:top var(--d-base) var(--e),background var(--d-base) var(--e),
    box-shadow var(--d-base) var(--e),border-color var(--d-base) var(--e)}
.hdr{background:transparent;border-bottom:1px solid transparent}
.hdr::before{content:"";position:absolute;inset:0 0 -76px 0;z-index:-1;pointer-events:none;
  /* Кадр хроники бывает почти белым (халаты, окно), и тонкий кремовый знак
     на нём пропадал — видно на снимке владельца 23.08. Вуаль под шапкой
     сделана плотнее и длиннее; на внутренних страницах она ложится на тёмную
     полосу и не заметна. */
  background:linear-gradient(180deg,rgba(47,37,30,.76),rgba(47,37,30,.42) 58%,transparent);
  transition:opacity var(--d-base) var(--e)}
body.scrolled .hdr{top:0;background:rgba(246,231,214,.42);
  -webkit-backdrop-filter:blur(26px) saturate(1.25);backdrop-filter:blur(26px) saturate(1.25);
  border-bottom-color:rgba(51,41,31,.07);box-shadow:0 6px 28px rgba(51,41,31,.05)}
body.scrolled .hdr::before{opacity:0}

/* Пока шапка прозрачная — знак и текст кремовые, иначе бронза тонет в кадре.
   При прокрутке возвращается обычный знак на песочной плашке. */
/* Знак кремовый и тонкий; кадр хроники бывает почти белым, и на нём линии
   пропадали — видно на снимке владельца 23.08. Плотная короткая тень идёт
   вплотную к штриху и работает как обводка: держит знак и на белом халате,
   и на тёмной стене. Дальние тени оставлены — они дают объём. */
.hdr .logo.on-dark{display:block;
  filter:drop-shadow(0 0 1.2px rgba(20,14,10,.92)) drop-shadow(0 1px 2px rgba(20,14,10,.62))
         drop-shadow(0 6px 18px rgba(20,14,10,.42))}
.hdr .tel,.hdr .lang a,.hdr .burger{text-shadow:0 1px 8px rgba(20,14,10,.5)}
body.scrolled .hdr .tel,body.scrolled .hdr .lang a{text-shadow:none}
.hdr .logo.on-light{display:none}
body.scrolled .hdr .logo.on-dark{display:none}
body.scrolled .hdr .logo.on-light{display:block}
.hdr .tel,.hdr .lang a{color:var(--cream)}
.hdr .lang a[aria-current]{color:var(--cream);background:rgba(246,236,220,.18)}
.hdr .burger i{background:var(--cream)}
body.scrolled .hdr .tel{color:var(--ink)}
body.scrolled .hdr .lang a{color:var(--ink-mute)}
body.scrolled .hdr .lang a[aria-current]{color:var(--ink);background:rgba(51,41,31,.07)}
body.scrolled .hdr .burger i{background:var(--ink)}
/* 01.09 владелец: лого и бургер ближе к углам. Шапка больше не сидит в
   контейнере .wrap — растянута на всё окно с тем же боковым отступом, что
   у открытого меню (#menu .inner): бургер не прыгает по X при открытии. */
.hdr .wrap{display:flex;align-items:center;gap:clamp(12px,2.4vw,26px);min-height:var(--hdr-h);padding-block:8px;
  width:100%;max-width:none;padding-inline:clamp(20px,4.4vw,72px)}
#menu .inner{max-width:none;padding-inline:clamp(20px,4.4vw,72px)}
.hdr .brand{flex:0 0 auto;display:block;line-height:0}
.hdr .logo{height:clamp(64px,6.8vw,98px);width:auto;max-width:none;
  transition:height var(--d-base) var(--e)}
body.compact .hdr .logo{height:clamp(56px,5.2vw,78px)}
.hdr .sp{flex:1}
.hdr .tel{font-size:15.4px;font-weight:500;white-space:nowrap;transition:color var(--d-base) var(--e)}
.hdr .tel:hover{color:var(--bronze-ink)}
.lang{display:flex;gap:2px;font-size:12.5px;font-weight:500;letter-spacing:.06em}
.lang a{padding:5px 7px;border-radius:6px;color:var(--ink-mute);
  transition:color var(--d-fast) var(--e),background var(--d-fast) var(--e)}
.lang a[aria-current]{color:var(--ink);background:rgba(51,41,31,.07)}
#menu .lang{display:none;margin-top:22px}
@media (max-width:560px){
  .hdr .lang{display:none}
  #menu .lang{display:flex}
}
.lang a:hover{color:var(--bronze-ink)}
.burger{width:46px;height:46px;display:grid;place-items:center;gap:5px;border-radius:10px;
  transition:background var(--d-fast) var(--e)}
.burger:hover{background:rgba(51,41,31,.06)}
.burger i{display:block;width:21px;height:1.5px;background:var(--ink);border-radius:2px;
  transition:transform var(--d-base) var(--e),opacity var(--d-fast) var(--e)}
body.menu .burger i:nth-child(1){transform:translateY(6.5px) rotate(45deg)}
body.menu .burger i:nth-child(2){opacity:0}
body.menu .burger i:nth-child(3){transform:translateY(-6.5px) rotate(-45deg)}

/* ================= МЕНЮ ================= */
/* п.23 заказчика: прозрачный экран, акцент справа.
   🔴 Первая версия была светлой и полупрозрачной — получилось серое на
   сером, пункты меню тонули. Скил ui-ux-pro-max (Contrast Readability,
   severity High) про это же. Тёмная подложка: прозрачность сохранена,
   страница под ней просвечивает, а текст читается. */
/* 31.08 владелец: «сделать прозрачнее», 01.09 — «ещё прозрачнее, фон не
   видно». Подложка .90→.72→.60, блюр 16→9→6: страница под меню читается
   как картинка, а не как муть. Ниже уже нельзя: на светлых секциях
   кремовые пункты начнут тонуть — грабля первой, светлой версии меню;
   читаемость держат тени на пунктах. */
#menu{position:fixed;inset:0;z-index:45;opacity:0;visibility:hidden;
  background:linear-gradient(105deg,rgba(47,37,30,.62) 0%,rgba(47,37,30,.52) 55%,rgba(62,49,40,.58) 100%);
  -webkit-backdrop-filter:blur(6px) saturate(112%);backdrop-filter:blur(6px) saturate(112%);
  transition:opacity var(--d-base) var(--e),visibility var(--d-base)}
/* 🔴 Это правило я стёр 30.08, перенося блок стилей меню: срезал кусок
   от комментария до «#menu .inner», а между ними жило единственное место,
   которое меню ПОКАЗЫВАЕТ. Клик работал, класс на body ставился, оверлей
   оставался прозрачным — со стороны «меню не открывается». */
body.menu #menu{opacity:1;visibility:visible}
/* Тень — страховка читаемости: подложка с 31.08 прозрачнее, и на светлом
   кадре видео бронзовые подписи («CHECK-UP — БЕСПЛАТНО») начинали тонуть. */
#menu nav a{color:var(--cream);text-shadow:0 1px 16px rgba(28,20,11,.5)}
#menu nav a:hover{color:var(--bronze-lt)}
#menu nav a small{color:var(--bronze-lt);text-shadow:0 1px 10px rgba(28,20,11,.6)}
/* Правая сторона — светлая плашка на тёмном: контраст даёт акцент сам,
   без рамок и подсветок. */
#menu .side{color:var(--ink)}
#menu .side .big{color:var(--ink)}
/* 01.09 владелец: на телефоне меню было глухим — прозрачность теперь и там
   (базовые правила выше работают на всех ширинах). Глухая заливка осталась
   только для тех, кто сам попросил систему убрать прозрачность. */
@media (prefers-reduced-transparency:reduce){
  #menu{background:var(--umber);-webkit-backdrop-filter:none;backdrop-filter:none}
}
#menu .inner{height:100%;display:grid;grid-template-columns:1.35fr .95fr;gap:clamp(24px,5vw,80px);
  align-items:center;padding-top:calc(var(--hdr-real, var(--hdr-h)) + 20px);padding-bottom:40px;overflow-y:auto}
#menu nav ul{display:grid;gap:clamp(4px,1vw,12px)}
#menu nav a{display:inline-flex;align-items:baseline;gap:14px;
  font:400 clamp(28px,4.2vw,50px)/1.22 var(--disp);
  transition:color var(--d-base) var(--e),transform var(--d-base) var(--e)}
#menu nav a:hover{color:var(--bronze-ink);transform:translateX(9px)}
#menu nav a small{font:500 11px/1 var(--ff);letter-spacing:.16em;text-transform:uppercase;
  color:var(--bronze-ink);white-space:nowrap}
#menu .side{border:1px solid rgba(255,255,255,.5);border-radius:var(--r-card);
  background:rgba(251,247,241,.94);box-shadow:0 24px 60px rgba(20,14,10,.35);
  padding:clamp(22px,2.6vw,34px);
  display:grid;gap:18px;align-content:center;font-size:15px;color:var(--ink-soft)}
#menu .side a{transition:color var(--d-fast) var(--e)}
#menu .side a:hover{color:var(--bronze-ink)}
#menu .side .big{font-size:19px;font-weight:500;color:var(--ink)}

/* ================= HERO ================= */
/* Текст на чистом фоне, фото — полосой под ним. На снимке команды никого
   не должно быть закрыто текстом; градиент поверх группового кадра — дефект,
   а не приём. */
.hero{position:relative;min-height:100vh;min-height:100svh;display:flex;align-items:flex-end;padding-top:calc(var(--hdr-h) + 40px);padding-bottom:clamp(64px,11vh,132px);overflow:hidden;isolation:isolate}
.hero-col{max-width:680px;margin:0 auto 0 0;padding-inline:clamp(24px,5vw,72px) 20px;position:relative;z-index:2}
.hero h1{font:400 var(--t-hero)/var(--lh-tight) var(--disp);letter-spacing:-.006em;
  max-width:14ch;margin-top:16px}
.hero h1 em{font-style:italic;color:var(--bronze-ink)}
.sign{font-family:var(--script);font-size:clamp(22px,2.5vw,32px);color:var(--rose);
  margin-top:12px;line-height:1.3}
.hero .lead{margin-top:clamp(20px,2.4vw,26px);font-size:var(--t-lead);color:var(--ink-soft);max-width:46ch}
.hero .cta{margin-top:clamp(26px,3.2vw,34px);display:flex;flex-wrap:wrap;gap:12px}

/* Полоса фотографий: ротация кроссфейдом, два слоя A/B */
.strip{position:absolute;inset:0;z-index:0;margin:0;height:100%;overflow:hidden;background:var(--sand-deep)}
.strip::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(180deg,rgba(251,245,236,.24),transparent 8%),linear-gradient(98deg,rgba(251,245,236,.95) 0%,rgba(251,245,236,.90) 22%,rgba(251,245,236,.66) 38%,rgba(251,245,236,.28) 52%,rgba(251,245,236,.06) 63%,rgba(251,245,236,0) 71%),linear-gradient(0deg,rgba(47,37,30,.22),transparent 24%)}
.strip-layer{position:absolute;inset:0;opacity:0;transition:opacity 1.4s var(--e);will-change:opacity}
.strip-layer.on{opacity:1}
/* Кадры пересобраны из оригиналов (2400x1350) с запасом над головами.
   Фокус поднят с 42% к 28%: на широких мониторах кроп идёт по вертикали,
   и при 42% срезало макушки стоящим в заднем ряду. */
.strip-media{width:100%;height:100%;object-fit:cover;object-position:50% 28%}
.strip-layer.on .strip-media{animation:kbIn 10.4s ease-out forwards;will-change:transform}
.strip-layer.on.alt .strip-media{animation-name:kbOut}
@keyframes kbIn{from{transform:scale(1.015)}to{transform:scale(1.075)}}
@keyframes kbOut{from{transform:scale(1.075)}to{transform:scale(1.015)}}
/* Бейдж «43 этаж» — на полосе, а не в тексте: смысловой актив клиники,
   но он не должен спорить с заголовком за внимание */
.strip .floor{position:absolute;z-index:2;right:clamp(16px,3vw,34px);bottom:clamp(88px,12vh,106px);
  display:flex;align-items:baseline;gap:10px;padding:12px 18px;border-radius:14px;
  background:rgba(62,49,40,.78);color:var(--cream);backdrop-filter:blur(8px)}
/* На 390px бейдж ложился прямо на кнопку «Выбрать врача» — перекрытие 220×44
   (дефект приехал из v10). Клики не воровал (pointer-events:none), но закрывал
   текст. На узких экранах уводим его к нижней кромке, под кнопки. */
@media (max-width:640px){
  .strip .floor{bottom:14px;right:auto;left:clamp(16px,4vw,20px);padding:9px 14px;border-radius:12px}
  .strip .floor b{font-size:22px}
  .strip .floor span{font-size:9.5px;letter-spacing:.14em}
}
.strip .floor b{font:400 clamp(26px,3vw,38px)/1 var(--disp)}
.strip .floor span{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--cream-soft)}

/* Сигнатура: рельеф стены клиники продолжается с фотографии на страницу */
/* 🔴 08.09.2026 — СЛОЙ ОТКЛЮЧЁН ЦЕЛИКОМ, решение владельца.
   Рельеф рисовался размытием `filter: blur()` на отдельных <path> внутри
   SVG. Chromium это размывает, и складка читалась как еле заметная
   поверхность. WebKit (движок Safari, то есть весь iPhone и Mac) размытие
   к внутренним элементам SVG НЕ применяет — и вместо мягкой складки
   показывал голые штрихи шириной 64 и 44 пикселя: широкие жёсткие полосы
   поперёк экрана, одна из которых проходила прямо за заголовком
   «Выберите своего врача» и выедала его. Проверено снимками одного и того
   же адреса в обоих движках (отчёты/veins-webkit.png и veins-chromium.png).
   В Chrome слой почти ничего не давал, в Safari — портил вид, поэтому
   убран везде. Вернуть — удалить строку display:none ниже; но тогда
   сначала переделать рельеф на настоящий SVG-фильтр <feGaussianBlur>,
   его Safari исполняет. Разметка и скрипт оставлены нетронутыми.

   🔴 Почему тут !important, хотя обычно он в этом проекте запрещён: ниже
   по файлу стоят `.veins--top{display:block}` и `.sec--wall .veins--wall
   {display:block}`. У первого тот же вес, что у `.veins`, и он лежит
   НИЖЕ — то есть молча перебил бы выключатель; у второго вес заведомо
   выше. Это ровно грабля номер один проекта. Выключатель обязан быть
   сильнее всех троих, иначе «убрал» окажется неправдой. */
.veins,
.veins--top,
.veins--wall{display:none !important}
.veins{position:absolute;left:0;right:0;pointer-events:none;color:var(--rose);z-index:1}
.veins svg{width:100%;height:100%}
.veins path{fill:none;stroke:currentColor;stroke-width:1;vector-effect:non-scaling-stroke;
  stroke-dasharray:var(--len,2400);stroke-dashoffset:var(--len,2400);opacity:.42;
  transition:stroke-dashoffset 2.4s var(--e-out),opacity .8s var(--e)}
.veins.in path{stroke-dashoffset:0}
.hero .veins{display:none}
.sec--dark .veins{color:var(--bronze-lt);opacity:.26}
/* Складкам нужна высота: в узком поясе они накладывались друг на друга
   и читались как одно размытое пятно поперёк экрана. */
.sec .veins--top{top:0;height:clamp(240px,30vw,420px)}
/* Линии есть и в разметке светлых секций — в v10 их просто скрыли.
   Возвращаем как продолжение рельефа стены: та же геометрия, тише по тону,
   чтобы поддерживали ритм, а не спорили с фотографиями врачей. */
.veins--top{display:block;opacity:.55}
.sec--sand .veins--top{color:var(--bronze);opacity:.62}   /* умножается на .42 у самой линии */
.sec--dark .veins--top{color:var(--bronze-lt);opacity:.34}

/* ================= ПЕРЕХОД К ОСНОВАТЕЛЯМ =================
   Первый экран и приветствие основателей — два полноэкранных ролика подряд.
   Встык они читались как один сплошной кусок: глазу негде отдохнуть.
   🔴 Полоса между ними была СВЕТЛОЙ — и это читалось как дырка в плёнке:
   два жёстких стыка «кадр / бумага» и белое поле посередине. Теперь полоса
   тёмная, той же умбры, что и тёмные секции: киноплёнка не рвётся, стык
   виден только по смене плотности, а по краям кадр угасает в фон.
   Playfair тут по праву — в токенах он зарезервирован под цитату-кредо. */
.creed{position:relative;overflow:hidden;background:var(--umber);color:var(--cream);
  padding-block:clamp(78px,12vh,140px)}
/* стык с роликом сверху и снизу — не линия, а угасание */
.creed::before,.creed::after{content:"";position:absolute;left:0;right:0;height:110px;
  z-index:1;pointer-events:none}
.creed::before{top:0;background:linear-gradient(to bottom,rgba(24,17,12,.62),transparent)}
.creed::after{bottom:0;background:linear-gradient(to top,rgba(24,17,12,.62),transparent)}
.creed .wrap{position:relative;z-index:2}
.creed-line{margin-top:0;font-family:var(--serif);font-style:italic;
  font-weight:400;font-size:clamp(26px,3.4vw,46px);line-height:1.24;color:var(--cream);
  max-width:22ch;text-wrap:balance}
.creed-line em{font-style:italic;color:var(--bronze-lt)}
.creed-sub{margin-top:clamp(16px,2vw,22px);font-size:var(--t-lead);
  line-height:1.62;color:var(--cream-soft);max-width:46ch;text-wrap:balance}
/* п.3 заказчика (30.08): подпись «Приветствие основателей» равняется по той
   строке, что стояла под кредо, — тот же кегль и цвет, без капса и разрядки.
   Отдельный класс, а не правка .eyebrow: разрядка в капсе нужна остальным
   двадцати с лишним надзаголовкам на сайте. */
.eyebrow--as-lead{font-size:var(--t-lead);line-height:1.62;font-weight:400;
  letter-spacing:normal;text-transform:none;color:var(--cream-soft)}
@media (max-width:640px){
  .creed{padding-block:clamp(52px,9vh,84px)}
  .creed::before,.creed::after{height:70px}
  .creed-line{max-width:none}
}

/* ================= ЛЕНТЫ (направления, технологии) ================= */
/* Скролл-снап вместо сетки: на референсе клиента направления идут слайдером,
   и на тач-устройстве свайп честнее стрелок */
.rail{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(268px,1fr);
  gap:clamp(14px,1.8vw,20px);overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none;padding-bottom:6px;
  margin-inline:calc(var(--pad-x) * -1);padding-inline:var(--pad-x)}
.rail::-webkit-scrollbar{display:none}
.rail > *{scroll-snap-align:start}
@media (min-width:1100px){
  .rail{grid-auto-flow:row;grid-template-columns:repeat(3,1fr);overflow:visible;
    margin-inline:0;padding-inline:0}
}
.rail-note{margin-top:16px;font-size:12.6px;color:var(--ink-mute);letter-spacing:.04em}
@media (min-width:1100px){.rail-note{display:none}}

/* ---------- карточка направления ---------- */
.dir{display:flex;flex-direction:column;padding:clamp(22px,2.4vw,30px);
  background:var(--glass);border:1px solid var(--glass-line);border-radius:var(--r-card);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  transition:background var(--d-base) var(--e),color var(--d-base) var(--e),
    transform var(--d-base) var(--e),box-shadow var(--d-base) var(--e),border-color var(--d-base) var(--e)}
.dir:hover{background:var(--umber);border-color:var(--umber);color:var(--cream);
  transform:translateY(-5px);box-shadow:var(--sh-lift)}
.dir h3{font:400 clamp(19px,1.85vw,23px)/1.26 var(--disp)}
.dir p{margin-top:12px;font-size:14.6px;line-height:1.6;color:var(--ink-soft);flex:1}
.dir:hover p{color:var(--cream-soft)}
.dir .price{margin-top:18px;padding-top:15px;border-top:1px solid var(--line-soft);
  font-size:14.4px;font-weight:500;color:var(--bronze-ink)}
.dir:hover .price{color:var(--bronze-lt);border-color:var(--line-dark)}
.dir .price small{display:block;font-weight:400;font-size:12.6px;color:var(--ink-mute);margin-top:4px}
/* Прежняя цена. 30.08 у виниров и элайнеров вместо диапазона одна сумма,
   а прежняя зачёркнута. Она тише и мельче действующей: зачёркнутое число
   не должно спорить с тем, которое человек должен запомнить. */
/* Прежняя цена. По образцу, который прислал владелец: тускло-серая,
   перечёркнута ПРЯМОЙ линией, ниже по весу. Контраст держится не цветом,
   а разницей тона и веса — спокойнее сигнального красного и уместнее
   для клиники (ТЗ прямо запрещает «кричащие баннеры»).
   Пишем блоком над новой ценой, а не в строку: так пара «было — стало»
   читается сразу, как в примере. */
s.was{display:block;margin:0 0 2px;text-decoration:line-through;
  text-decoration-thickness:1.5px;text-decoration-color:rgba(107,92,76,.6);
  color:var(--ink-mute);font-weight:400;white-space:nowrap}
s.was .num{font-size:.86em;letter-spacing:.01em}
.sec--dark s.was,.cine s.was,.book s.was,.phero s.was{color:var(--cream-faint);
  text-decoration-color:rgba(246,236,220,.45)}
/* Новая цена должна выигрывать по весу, иначе зачёркивание не читается
   как выгода. */
.price s.was + .num,.pkg .price s.was + .num,.price-main s.was + .num{font-weight:600}
.dir:hover .price small{color:var(--cream-faint)}
.dir .go{margin-top:16px;display:flex;align-items:center;gap:8px;font-size:13.8px;
  font-weight:500;color:var(--bronze-ink)}
.dir:hover .go{color:var(--bronze-lt)}
.dir .go .arr{transition:transform var(--d-base) var(--e)}
.dir:hover .go .arr{transform:translateX(5px)}
.dir--flat:hover{transform:none}

/* ================= АКЦИИ ================= */
.offers{display:grid;grid-template-columns:1fr;gap:clamp(18px,2.2vw,26px);
  margin-bottom:clamp(44px,5.4vw,64px)}
/* Блок специального предложения должен читаться как отдельная вещь,
   а не как ещё одна тёмная плашка: волосяная бронзовая рамка, мягкое
   свечение из левого верхнего угла и более глубокая тень. */
.offer-main{background:
    radial-gradient(120% 90% at 12% 0%, rgba(201,168,126,.16), transparent 58%),
    var(--umber);
  color:var(--cream);border-radius:var(--r-card);
  border:1px solid rgba(201,168,126,.34);
  box-shadow:0 26px 64px rgba(51,41,31,.22);
  padding:clamp(28px,3.4vw,44px);display:flex;flex-direction:column}
/* 30.08 лояльность уехала вниз, и Check-up остался в ряду один. Во всю
   ширину карточка выглядела полупустой, поэтому внутри — две колонки:
   слева состав, справа кнопка и условия. */
/* Обратный отсчёт до конца акции.
   Воздух держится сеткой и тишиной подписей, а не рамками: крупные цифры
   лёгкого начертания, между ячейками волосяные линии, подписи мелким капсом.
   Цифры табличные — ширина не скачет на смене 59 → 8.
   🔴 Правила лежат СНАРУЖИ медиазапроса: один раз я вставил их внутрь
   @media (min-width:900px), и на телефоне отсчёт остался без стилей. */
.cd{display:grid;gap:clamp(12px,1.4vw,16px);margin-top:22px}
.cd-lab{font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--bronze-lt)}
.cd-grid{display:flex;align-items:flex-start;gap:0}
.cd-cell{display:grid;justify-items:center;gap:7px;
  padding-inline:clamp(12px,1.5vw,22px);position:relative}
.cd-cell:first-child{padding-left:0}
.cd-cell + .cd-cell::before{content:'';position:absolute;left:0;top:6%;bottom:34%;
  width:1px;background:rgba(201,168,126,.28)}
/* 02.09 п.6 заказчика: цифры отсчёта крупнее и заметнее. */
.cd-cell b{font:400 clamp(38px,4.4vw,58px)/1 var(--ff);color:var(--cream);
  font-variant-numeric:tabular-nums;letter-spacing:.005em;min-width:1.9ch;text-align:center}
.cd-cell i{font-style:normal;font-size:11px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--cream-soft);white-space:nowrap}
/* Секунды — единственное, что движется, поэтому им бронзовый акцент:
   глаз цепляется за движение, а не за размер. */
.cd-cell:last-child b{color:var(--bronze-lt)}
/* Ставка. Собственно то, ради чего человек торопится: сейчас ноль, после
   срока — деньги. Никакой выдуманной срочности, только факт из прайса. */
.cd-stake{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;
  font-size:13.6px;color:var(--cream-soft);line-height:1.4}
.cd-stake b{font-weight:600;color:var(--bronze-lt);font-size:15px;
  font-variant-numeric:tabular-nums}
.cd-stake s{color:var(--cream-faint);text-decoration:none;position:relative}
/* Последние трое суток — счётчик «горит»: цифры крупнее, секунды ярче,
   подпись меняется. Давление растёт по мере приближения срока, как в жизни,
   а не орёт одинаково три месяца подряд. */
.cd--hot .cd-lab{color:#E0A88A}
.cd--hot .cd-cell b{font-size:clamp(42px,4.8vw,64px)}
.cd--hot .cd-cell:last-child b{color:#E8B27E}
.cd--hot .cd-stake b{color:#E8B27E}
.cd--over .cd-grid{display:none}
.cd--over .cd-stake{display:none}
.cd--over .cd-lab{color:var(--cream-soft);letter-spacing:.14em}
@media (max-width:520px){
  .cd-cell{padding-inline:clamp(9px,3vw,16px)}
  .cd-cell b{font-size:clamp(26px,8vw,34px)}
  .cd-cell i{font-size:9px;letter-spacing:.12em}
}

@media (min-width:900px){
  .offers{grid-template-columns:1fr}
  /* align-content:start — иначе строки грида растягиваются по высоте блока,
     и между заголовком, списком и кнопкой зияет пустое поле. Именно это
     владелец назвал «некрасиво». */
  .offer-main{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(250px,.7fr);
    column-gap:clamp(32px,4vw,72px);align-content:start;
    padding-block:clamp(26px,2.8vw,36px)}
  /* align-self:flex-start работал во flex; в grid ширину держит justify-self,
     иначе плашка «Бесплатно» растягивается во всю колонку. */
  .offer-main .badge{grid-column:1;justify-self:start}
  .offer-main h3{grid-column:1;margin-top:16px;max-width:20ch}
  .offer-main ul{grid-column:1;margin-top:18px}
  .offer-main .btn{grid-column:2;grid-row:1 / span 2;justify-self:stretch;align-self:start;margin-top:0}
  .offer-main .cd{grid-column:2;grid-row:3;margin-top:20px}
  .offer-main .term{grid-column:2;grid-row:4;margin-top:12px}
}
.offer-main .badge{align-self:flex-start;padding:7px 15px;border-radius:100px;background:var(--bronze);
  color:#fff;font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase}
.offer-main h3{font:400 clamp(24px,2.5vw,32px)/1.22 var(--disp);margin-top:20px;max-width:17ch}
.offer-main ul{margin-top:22px;display:grid;gap:11px}
/* Патч 16.08: маркер в absolute, пункт остаётся обычной строкой */
.offer-main li{display:block;position:relative;padding-left:16px;font-size:15.2px;color:var(--cream-soft)}
.offer-main li::before{content:'';position:absolute;left:0;top:.66em;width:5px;height:5px;
  border-radius:50%;background:var(--bronze-lt)}
.offer-main .btn{margin-top:26px;align-self:flex-start}
.offer-main .term{margin-top:16px;font-size:12.8px;color:var(--cream-faint);line-height:1.5}
/* 02.09 п.7 заказчика: лояльность на ТЁМНОМ фоне (было стекло) и заметным
   шрифтом — и на главной, и на странице акций. */
.offer-loyal{background:
    radial-gradient(120% 130% at 12% 0%, rgba(168,132,95,.28), transparent 60%),
    var(--umber);
  border:1px solid var(--line-dark);color:var(--cream-soft);
  border-radius:var(--r-card);padding:clamp(26px,3vw,40px)}
.offer-loyal h3{color:var(--cream)}
.offer-loyal li small{display:block;margin-top:4px;font-size:.78em;
  color:var(--cream-faint);letter-spacing:.02em}
/* Полоса программы лояльности (п.9). Она не акция: у неё нет срока
   и она не про конкретную услугу. Поэтому уехала под ленту акций,
   отбита линией и растянута во всю ширину — читается как отдельная
   вещь, а не как четвёртое предложение в ряду. */
/* Телефон в лояльности (01.09 владелец: «в акциях нет телефона»).
   Базовый вид для вертикальной карточки на /akcii/; правила стоят ДО
   блока .loyal--strip, чтобы на главной побеждала строчная раскладка. */
.offer-loyal .loyal-more{display:block;margin-top:16px;text-decoration:none;color:var(--ink-soft)}
.offer-loyal .loyal-more .lbl{display:block;font-size:12.6px;letter-spacing:.04em}
.offer-loyal .loyal-more .tel{display:block;margin-top:3px;font-weight:600;
  font-size:17px;color:var(--bronze-ink)}
.offer-loyal .loyal-more:hover .tel{color:var(--bronze)}
/* 31.08 владелец: «улучшить». Полоса пересобрана в одну строку:
   шапка · пункт · пункт · телефон, между ячейками волосяные вертикальные
   линии с растушёванными концами, телефон стал живой ссылкой с номером —
   раньше «Подробности по телефону» выглядело кнопкой, но не было ею.
   🔴 Прошлая рамка вокруг средней ячейки: border-top из .offer-loyal li
   ниже по файлу побеждал при равной специфичности. Поэтому здесь всё,
   что спорит с базовыми стилями, написано составным селектором
   .offer-loyal.loyal--strip — он сильнее в любом порядке. */
.loyal--strip{margin-top:clamp(34px,4vw,52px);border-radius:var(--r-card);
  padding-block:clamp(24px,2.6vw,34px);
  display:grid;grid-template-columns:minmax(200px,.9fr) 2.3fr;
  gap:clamp(18px,2.8vw,46px);align-items:center}
.loyal--strip .loyal-head{display:block}
.loyal--strip .loyal-head .sub{margin-top:6px}
.loyal--strip .loyal-body{margin-top:0;display:grid;
  grid-template-columns:1fr 1fr auto;gap:clamp(14px,1.8vw,26px);align-items:center}
.loyal--strip ul{display:contents;margin-top:0}
.offer-loyal.loyal--strip li,.offer-loyal.loyal--strip .loyal-more{border:0;margin:0;
  padding:4px 0 4px clamp(16px,1.7vw,26px);position:relative;
  /* 02.09 п.7: шрифт заметнее */
  font-size:clamp(16.5px,1.1vw,19px);line-height:1.5;font-weight:500}
.offer-loyal.loyal--strip li::before,.offer-loyal.loyal--strip .loyal-more::before{content:'';
  position:absolute;left:0;top:50%;transform:translateY(-50%);width:1px;height:48px;
  background:linear-gradient(180deg,transparent,rgba(154,116,64,.5),transparent)}
.loyal--strip .loyal-more{display:block;text-decoration:none;color:var(--ink-soft);white-space:nowrap}
.loyal--strip .loyal-more .lbl{display:block;font-size:12.6px;letter-spacing:.04em}
.loyal--strip .loyal-more .tel{display:block;margin-top:3px;font-weight:600;
  font-size:17px;color:var(--bronze-ink)}
.loyal--strip .loyal-more:hover .tel{color:var(--bronze)}
@media (max-width:900px){
  .loyal--strip{grid-template-columns:1fr;gap:16px}
  .loyal--strip .loyal-body{grid-template-columns:1fr;gap:10px}
  .offer-loyal.loyal--strip li,.offer-loyal.loyal--strip .loyal-more{padding:0}
  .offer-loyal.loyal--strip li::before,.offer-loyal.loyal--strip .loyal-more::before{display:none}
  .loyal--strip .loyal-more{margin-top:6px;white-space:normal}
}
.loyal-head h3{margin:0}
.loyal-body ul{margin-top:0}
.offer-loyal h3{font:400 clamp(23px,2.3vw,29px)/1.24 var(--disp)}
.offer-loyal .sub{margin-top:8px;font-size:13.6px;color:var(--cream-faint)}
.offer-loyal ul{margin-top:20px}
/* границы под тёмный фон */
.offer-loyal li{display:block;padding:13px 0;border-top:1px solid rgba(246,236,220,.14);font-size:16px}
.offer-loyal li:first-child{border-top:0}
.offer-loyal li b{font-weight:600;color:var(--bronze-lt)}
.note-legal{margin-top:26px;font-size:13px;color:var(--ink-mute);line-height:1.6;max-width:78ch}
.note-legal a{text-decoration:underline;text-underline-offset:2px}

/* ================= ВРАЧИ ================= */
.founder{display:grid;grid-template-columns:minmax(0,.86fr) minmax(0,1.14fr);
  gap:clamp(26px,4.2vw,68px);align-items:center;margin-bottom:clamp(52px,6.6vw,96px)}
.founder.rev .fig{order:2}
.fig{position:relative;border-radius:var(--r-photo);overflow:hidden;background:var(--sand-deep)}
.fig img{width:100%;height:auto;aspect-ratio:3/4;object-fit:cover;transition:transform 1.1s var(--e)}
.founder:hover .fig img{transform:scale(1.028)}
.fig .role{position:absolute;left:16px;bottom:16px;padding:7px 14px;border-radius:100px;
  background:rgba(62,49,40,.82);color:var(--cream);font-size:10.5px;font-weight:600;
  letter-spacing:.16em;text-transform:uppercase;pointer-events:none}
.f-name{font:400 var(--t-name)/1.06 var(--disp);letter-spacing:-.004em}
.f-name .first{display:block;font-size:.62em;color:var(--ink-soft);margin-top:.18em}
.f-spec{margin-top:20px;font-size:var(--t-small);font-weight:500;color:var(--bronze-ink);
  letter-spacing:var(--ls-caps);text-transform:uppercase}
.f-exp{margin-top:6px;font-size:var(--t-small);color:var(--ink-mute)}
.credo{margin-top:24px;padding-left:22px;border-left:1px solid var(--rose);
  font:400 clamp(18px,1.75vw,23px)/1.46 var(--disp);max-width:34ch}
.f-about{margin-top:20px;color:var(--ink-soft);max-width:50ch;font-size:15.4px}
.regalia{margin-top:22px;border-top:1px solid var(--line-soft);padding-top:14px}
.regalia summary{list-style:none;cursor:pointer;font-size:var(--t-small);font-weight:500;
  color:var(--bronze-ink);display:flex;align-items:center;gap:9px}
.regalia summary::-webkit-details-marker{display:none}
.regalia summary::after{content:'';width:7px;height:7px;border-right:1px solid currentColor;
  border-bottom:1px solid currentColor;transform:rotate(45deg) translateY(-2px);
  transition:transform var(--d-fast) var(--e)}
.regalia[open] summary::after{transform:rotate(225deg) translateY(-2px)}
.regalia ul{margin-top:14px;display:grid;gap:9px}
.regalia li{font-size:14.4px;color:var(--ink-soft);padding-left:16px;position:relative;line-height:1.55}
.regalia li::before{content:'';position:absolute;left:0;top:.72em;width:6px;height:1px;background:var(--rose)}
.acts{margin-top:28px;display:flex;flex-wrap:wrap;gap:12px}
.rest-head{display:flex;align-items:baseline;gap:16px;margin-bottom:30px}
.rest-head h3{font:500 var(--t-h3)/1.2 var(--disp)}
.rest-head span{font-size:var(--t-small);color:var(--ink-mute)}
.rest-head::after{content:'';flex:1;height:1px;background:var(--line)}
.doc{position:relative;border-radius:var(--r-card);overflow:hidden;background:var(--paper);
  border:1px solid var(--line-soft);display:flex;flex-direction:column;
  transition:background var(--d-base) var(--e),color var(--d-base) var(--e),
    transform var(--d-base) var(--e),box-shadow var(--d-base) var(--e),border-color var(--d-base) var(--e)}
.doc:hover{background:var(--umber);border-color:var(--umber);color:var(--cream);
  transform:translateY(-6px);box-shadow:var(--sh-lift)}
.doc .ph{overflow:hidden;background:var(--sand-deep)}
.doc .ph img{width:100%;height:auto;aspect-ratio:3/4;object-fit:cover;transition:transform 1s var(--e)}
.doc:hover .ph img{transform:scale(1.035)}
.doc-link{display:flex;flex-direction:column;flex:1}
.doc-b{padding:22px;display:flex;flex-direction:column;flex:1}
.doc h4{font:400 clamp(21px,2vw,26px)/1.15 var(--disp)}
.doc h4 small{display:block;font:400 .64em/1.3 var(--ff);color:var(--ink-soft);margin-top:5px}
.doc:hover h4 small{color:var(--cream-soft)}
.doc .spec{margin-top:13px;font-size:12.4px;font-weight:500;letter-spacing:var(--ls-caps);
  text-transform:uppercase;color:var(--bronze-ink)}
.doc:hover .spec{color:var(--bronze-lt)}
.doc .cr{margin-top:13px;font:400 15.6px/1.46 var(--disp);color:var(--ink-soft)}
.doc:hover .cr{color:var(--cream-soft)}
/* Подпись под цитатой — тем же рукописным, что «by Dr. Marina & Dr. Djey»
   в логотипе (п.15 заказчика, 30.08). Кавычки-ёлочки из цитат убраны:
   начертание и отбивка уже говорят, что это прямая речь, а кавычки
   утяжеляли ровно то место, которое должно дышать.
   🔴 Рукописным набрана ПОДПИСЬ, а не цитата: Parisienne читается
   в двух-трёх словах, а цитата хирурга — 78 знаков. */
.cr-sign{margin-top:9px;font-family:var(--script);font-size:clamp(15px,1.4vw,19px);
  color:var(--bronze-ink);line-height:1.25}
.doc:hover .cr-sign{color:var(--bronze-lt)}
.cr-sign--big{margin-top:13px;font-size:clamp(20px,2vw,27px);color:var(--rose)}
.doc .go{margin-top:auto;padding-top:18px;display:flex;align-items:center;gap:8px;
  font-size:13.8px;font-weight:500;color:var(--bronze-ink)}
.doc:hover .go{color:var(--bronze-lt)}
.doc .go .arr{transition:transform var(--d-base) var(--e)}
.doc:hover .go .arr{transform:translateX(5px)}
.doc .book{margin:0 22px 22px;padding-top:14px;border-top:1px solid var(--line-soft);
  font-size:13.4px;color:var(--ink-mute);text-align:left;width:calc(100% - 44px);
  transition:color var(--d-base) var(--e),border-color var(--d-base) var(--e)}
.doc .book:hover{color:var(--bronze-ink)}
.doc:hover .book{border-color:var(--line-dark);color:var(--cream-soft)}

/* ================= ТЕХНОЛОГИИ =================
   🔵 Было: три больших кадра сверху и шесть карточек с иконками. Кадры
   дублировали три карточки из шести (3D-план, сканер, микроскоп), а иконка
   рядом с текстом про оборудование не говорит ничего. Теперь одна лента из
   шести карточек, и у каждой — свой кадр из съёмки клиники. */
.tech{background:var(--umber-deep);border:1px solid var(--line-dark);border-radius:var(--r-card);
  overflow:hidden;transition:background var(--d-base) var(--e)}
.tech:hover{background:#251D17}
.tech .ph{display:block;aspect-ratio:8/5;overflow:hidden;background:#1E1712}
.tech .ph img{width:100%;height:100%;object-fit:cover;display:block;
  transition:transform var(--d-slow) var(--e)}
.tech:hover .ph img{transform:scale(1.045)}
.tech .tx{padding:clamp(20px,2.4vw,28px)}
.tech h3{font:400 clamp(18px,1.75vw,21px)/1.28 var(--disp);color:var(--cream)}
.tech p{margin-top:11px;font-size:14.4px;line-height:1.6}

/* ================= ДО / ПОСЛЕ ================= */
/* Было: заголовок слева, шторки справа — при двух парах левая колонка
   оставалась почти пустой. Стало: заголовок над блоком, пары рядом. */
.ba-wrap{display:block}
.ba-wrap .sec-head{margin-bottom:clamp(28px,3.4vw,44px)!important;max-width:56ch}
.ba-lock{aspect-ratio:4/3;border-radius:var(--r-card);background:var(--sand-deep);
  border:1px solid var(--line-soft);display:grid;place-content:center;justify-items:center;gap:16px;
  padding:32px;text-align:center;position:relative;overflow:hidden}
.ba-lock::before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.5;
  background:radial-gradient(120% 80% at 22% 0%,rgba(255,255,255,.5),transparent 60%),
    repeating-linear-gradient(112deg,transparent 0 30px,rgba(51,41,31,.04) 30px 31px)}
.ba-lock .ic{width:32px;height:32px;color:var(--bronze);position:relative}
.ba-lock .ic svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.3}
.ba-lock p{font-size:14.4px;color:var(--ink-soft);max-width:30ch;line-height:1.55;position:relative}
.ba-slider{position:relative;aspect-ratio:4/3;border-radius:var(--r-card);overflow:hidden;background:var(--sand-deep);
  background:var(--sand-deep);touch-action:pan-y;cursor:ew-resize;user-select:none}
/* Картинки не должны ловить указатель: иначе pointerdown уходит в них, браузер
   запускает своё перетаскивание изображения и ползунок перестаёт тянуться
   (ловится только клик). touch-action тут НЕ трогаем: ниже стоит pan-y, и это
   правильно — иначе пальцем нельзя будет прокрутить страницу через шторку. */
/* 🔴 contain, а не cover: заказчик просит, чтобы кадр попадал в рамку
   ЦЕЛИКОМ, без обрезков. Пустое поле по краям закрывает песочная подложка
   самой рамки. */
.ba-slider img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;
  pointer-events:none;-webkit-user-drag:none;user-select:none}
.ba-slider .after{clip-path:inset(0 0 0 var(--x,50%))}
.ba-slider .bar{position:absolute;top:0;bottom:0;left:var(--x,50%);width:1px;background:var(--bronze-lt);
  pointer-events:none;box-shadow:0 0 0 1px rgba(62,49,40,.18)}
.ba-slider .knob{position:absolute;top:50%;left:var(--x,50%);width:44px;height:44px;
  transform:translate(-50%,-50%);border-radius:50%;background:var(--cream);display:grid;place-items:center;
  box-shadow:0 6px 20px rgba(51,41,31,.28);pointer-events:none;color:var(--umber);font-size:13px}
.ba-slider .tag{position:absolute;bottom:14px;padding:6px 12px;border-radius:100px;
  background:rgba(62,49,40,.8);color:var(--cream);font-size:10.5px;font-weight:600;
  letter-spacing:.14em;text-transform:uppercase;pointer-events:none}
.ba-slider .tag.l{left:14px}.ba-slider .tag.r{right:14px}

/* ================= МАРШРУТ ================= */
.route{display:grid;grid-template-columns:1.02fr .98fr;gap:clamp(32px,4.6vw,68px);align-items:start}
.route-facts{margin-bottom:28px}
.route-facts div{display:grid;grid-template-columns:minmax(108px,auto) 1fr;gap:18px;
  padding:14px 0;border-top:1px solid var(--line);font-size:15.2px}
.route-facts div:first-child{border-top:0;padding-top:0}
.route-facts dt{font-size:12.4px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;
  color:var(--ink-mute);padding-top:3px}
.route-steps{counter-reset:rs}
/* Патч 16.08: счётчик в absolute — иначе <span class="num"> внутри текста
   становится колонкой грида и уезжает на свою строку */
.route-steps li{counter-increment:rs;display:block;position:relative;padding:15px 0 15px 44px;
  border-top:1px solid var(--line-soft);font-size:15px;line-height:1.6;color:var(--ink-soft)}
.route-steps li::before{content:counter(rs);position:absolute;left:0;top:15px;
  font:400 17px/1 var(--disp);color:var(--bronze);width:28px;height:28px;border:1px solid var(--rose);
  border-radius:50%;display:grid;place-items:center;font-variant-numeric:lining-nums}
.route-photo{position:relative;border-radius:var(--r-photo);overflow:hidden;background:var(--sand-deep)}
.route-photo img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.route .btn{margin-top:24px}

/* ================= FAQ ================= */
.faq{columns:2;column-gap:clamp(28px,4vw,56px)}
.faq details{break-inside:avoid;margin-bottom:2px;border-bottom:1px solid var(--line-soft)}
.faq summary{list-style:none;cursor:pointer;display:flex;gap:16px;align-items:baseline;
  padding:17px 0;font-size:16px;font-weight:500;line-height:1.5;transition:color var(--d-fast) var(--e)}
.faq summary:hover{color:var(--bronze-ink)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:'';flex:none;margin-left:auto;width:9px;height:9px;
  border-right:1.2px solid var(--bronze);border-bottom:1.2px solid var(--bronze);
  transform:rotate(45deg) translateY(-3px);transition:transform var(--d-base) var(--e)}
.faq details[open] summary::after{transform:rotate(225deg) translateY(-1px)}
.faq .a{padding:0 0 18px;font-size:15.2px;line-height:1.66;color:var(--ink-soft);max-width:56ch}
.faq .hid{display:none}
.faq-more{margin-top:28px;display:flex;justify-content:center}

/* ================= ЗАПИСЬ ================= */
.book-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,5vw,72px);align-items:start}
.book-grid h2{font:500 var(--t-h2)/var(--lh-head) var(--disp);margin-top:16px;max-width:16ch}
/* 02.09 п.17 заказчика: «врач вас ждёт» обычным шрифтом — акцент остаётся
   цветом, курсив убран именно в блоке записи. */
.book-grid h2 em{font-style:normal;color:var(--bronze-lt)}
.contacts{margin-top:26px}
.contacts a,.contacts p{padding:14px 0;border-top:1px solid var(--line-dark);font-size:15.4px;
  color:var(--cream-soft);display:flex;gap:14px;align-items:baseline}
.contacts a:first-child{border-top:0}
.contacts a{transition:color var(--d-fast) var(--e)}
.contacts a:hover{color:var(--cream)}
.contacts b{font-size:11.4px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
  color:var(--bronze-lt);min-width:76px;flex:none}

/* ================= ФОРМЫ ================= */
.form{display:grid;gap:14px}
.field{display:grid;gap:7px}
.field label{font-size:12.4px;font-weight:500;letter-spacing:var(--ls-caps);
  text-transform:uppercase;color:var(--ink-mute)}
.field input,.field select{width:100%;padding:14px 16px;border-radius:var(--r-btn);
  border:1px solid var(--line);background:#fff;font-size:15.6px;
  transition:border-color var(--d-fast) var(--e),box-shadow var(--d-fast) var(--e)}
.field input:focus,.field select:focus{outline:0;border-color:var(--bronze);
  box-shadow:0 0 0 3px rgba(168,132,95,.16)}
.field input::placeholder{color:var(--ink-mute)}
.field select{appearance:none;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' fill='none' stroke='%238A6A49' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 16px center;padding-right:42px}
.sec--dark .field label{color:var(--cream-faint)}
.sec--dark .field input,.sec--dark .field select{background:rgba(246,236,220,.07);
  border-color:var(--line-dark);color:var(--cream)}
.sec--dark .field input::placeholder{color:var(--cream-faint)}
.sec--dark .field input:focus,.sec--dark .field select:focus{border-color:var(--bronze-lt);
  box-shadow:0 0 0 3px rgba(201,168,126,.18)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.consent{display:flex;gap:11px;align-items:flex-start;font-size:13.2px;line-height:1.55;
  color:var(--ink-soft);cursor:pointer}
.sec--dark .consent{color:var(--cream-soft)}
.consent input{flex:none;width:17px;height:17px;margin-top:2px;accent-color:var(--bronze);cursor:pointer}
.consent a{text-decoration:underline;text-underline-offset:2px}
.form-note{font-size:12.6px;line-height:1.55;color:var(--ink-mute)}
.sec--dark .form-note{color:var(--cream-faint)}
.hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-ok{display:grid;gap:10px;padding:26px;border-radius:var(--r-card);
  background:rgba(168,132,95,.12);border:1px solid var(--rose)}
.form-ok h4{font:400 22px/1.25 var(--disp)}
.form-ok p{font-size:15px;color:var(--ink-soft)}
.sec--dark .form-ok p{color:var(--cream-soft)}
.form-err{font-size:13.6px;color:#A33;padding:11px 14px;border-radius:10px;background:rgba(170,51,51,.09)}
.sec--dark .form-err{color:#F0B4A8;background:rgba(240,180,168,.12)}

/* ================= ФУТЕР ================= */
footer{background:var(--umber-deep);color:var(--cream-soft);font-size:14.4px}
.foot-top{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.2fr;gap:clamp(24px,3.4vw,44px);
  padding-block:clamp(52px,6.4vw,80px) 44px}
.foot-brand img{height:86px;width:auto;margin-bottom:18px}
.foot-brand p{max-width:34ch;line-height:1.62}
.foot-col h4{font-size:11.4px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--bronze-lt);margin-bottom:16px}
.foot-col li{margin-bottom:10px}
.foot-col a{transition:color var(--d-fast) var(--e)}
.foot-col a:hover{color:var(--cream)}
.foot-bot{border-top:1px solid var(--line-dark);padding-block:24px 34px;font-size:12.6px;
  line-height:1.65;color:var(--cream-faint);display:grid;gap:9px}
.foot-bot a{text-decoration:underline;text-underline-offset:2px}

/* ================= МОДАЛКИ ================= */
.modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;
  opacity:0;visibility:hidden;transition:opacity .35s var(--e),visibility .35s}
.modal.open{opacity:1;visibility:visible}
.modal .veil{position:absolute;inset:0;background:rgba(47,37,30,.62);backdrop-filter:blur(4px)}
.modal .box{position:relative;width:min(560px,100%);max-height:calc(100svh - 40px);overflow-y:auto;
  background:var(--paper);border-radius:var(--r-card);padding:clamp(26px,4vw,42px);
  box-shadow:0 40px 90px rgba(0,0,0,.3);transform:scale(.96) translateY(10px);
  transition:transform .35s var(--e)}
.modal.open .box{transform:none}
.modal .x{position:absolute;top:14px;right:14px;width:38px;height:38px;border-radius:10px;
  display:grid;place-items:center;color:var(--ink-soft);font-size:22px;line-height:1;
  transition:background var(--d-fast) var(--e)}
.modal .x:hover{background:rgba(51,41,31,.07)}
.modal h3{font:400 clamp(23px,2.8vw,29px)/1.24 var(--disp);margin-top:16px;max-width:20ch}
.modal h3 em{font-style:italic;color:var(--bronze-ink)}
.modal .sub{margin-top:10px;font-size:14.6px;color:var(--ink-soft);margin-bottom:22px}
.exit-list{margin:18px 0 20px;display:grid;gap:10px}
.exit-list li{display:block;position:relative;padding-left:16px;font-size:14.8px;color:var(--ink-soft)}
.exit-list li::before{content:'';position:absolute;left:0;top:.62em;width:5px;height:5px;
  border-radius:50%;background:var(--bronze)}

/* ================= ЧАТ ================= */
/* CHAT:НАЧАЛО — build-v11.js вырезает всё до CHAT:КОНЕЦ в assets/chat.css.
   Страницы врачей живут на своём лёгком каркасе (vrachi.css) и подключают
   только этот кусок: второй копии стилей чата в проекте нет и быть не должно.
   Поэтому и мобильные правила чата стоят ЗДЕСЬ, а не в общем @media внизу. */
/* 🔴 Своего сброса форм на странице врача нет (в site.css он общий, в
   vrachi.css его не было ни разу). Без этих двух строк крестик в шапке чата
   приезжает белым системным прямоугольником — на главной этого не видно. */
.fab,.chat button,.chat input{font:inherit;color:inherit;background:none;border:0}
.fab,.chat button{cursor:pointer}
.fab{position:fixed;right:20px;bottom:20px;z-index:70;width:60px;height:60px;border-radius:50%;
  background:var(--cream);color:var(--bronze-ink);display:grid;place-items:center;border:1.5px solid rgba(168,132,95,.55);
  box-shadow:0 14px 34px rgba(51,41,31,.3);
  transition:transform var(--d-base) var(--e),background var(--d-base) var(--e)}
.fab:hover{transform:translateY(-3px) scale(1.04);border-color:var(--bronze);box-shadow:0 18px 40px rgba(51,41,31,.34)}
.fab .tooth-img{width:34px;height:auto}
.fab .dot{position:absolute;top:4px;right:4px;width:11px;height:11px;border-radius:50%;
  background:var(--bronze-lt);border:2px solid var(--paper)}
.chat{position:fixed;right:20px;bottom:92px;z-index:71;width:min(370px,calc(100vw - 40px));
  max-height:min(560px,calc(100svh - 130px));background:var(--paper);border-radius:var(--r-card);
  box-shadow:0 30px 70px rgba(51,41,31,.28);border:1px solid var(--line);
  display:flex;flex-direction:column;overflow:hidden;opacity:0;visibility:hidden;
  transform:translateY(12px) scale(.98);
  transition:opacity var(--d-base) var(--e),visibility var(--d-base),transform var(--d-base) var(--e)}
.chat.open{opacity:1;visibility:visible;transform:none}
/* 01.09 владелец: «сделать красивее». Шапка в языке сайта: имя дисплейным
   серифом, зуб в тонком бронзовом кольце (мотив арок врачей), бронзовая
   растушёванная линия вместо резкого стыка, точка «онлайн». */
.chat-hd{display:flex;gap:12px;align-items:center;padding:15px 18px;background:var(--umber);color:var(--cream);position:relative}
.chat-hd::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(199,158,98,.7),transparent)}
/* 🔴 08.09.2026. Знак в шапке чата выглядел обрезанным. Обрезан он не был:
   рамка задавалась как 26px ширины + 6px полей при height:auto, то есть
   26×31,5 — прямоугольник. `border-radius:50%` на прямоугольнике даёт не
   круг, а ЭЛЛИПС, и высокий знак (233×282, плюс расходящиеся лучи по
   краям) упирался в него боками. Теперь коробка квадратная, знак вписан
   внутрь целиком через object-fit:contain — кольцо круглое, лучи знака в
   него не бьются, ничего не режется. */
.chat-hd img{width:38px;height:38px;box-sizing:border-box;padding:7px;
  object-fit:contain;flex:0 0 auto;
  border:1px solid rgba(199,158,98,.55);border-radius:50%}
.chat-hd .t{flex:1;min-width:0}
.chat-hd b{display:block;font-family:var(--disp);font-weight:500;font-size:18.5px;
  letter-spacing:.03em;line-height:1.2}
.chat-hd span{font-size:11.6px;color:var(--cream-faint)}
.chat-hd .on{display:inline-block;width:7px;height:7px;border-radius:50%;
  background:var(--bronze-lt);margin-right:6px;vertical-align:0}
.chat-hd .x{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;
  color:var(--cream-soft);font-size:20px;line-height:1}
.chat-body{flex:1;overflow-y:auto;padding:18px;display:grid;gap:12px;align-content:start}
.msg{max-width:86%;padding:12px 15px;border-radius:14px;font-size:14.8px;line-height:1.55}
.msg.bot{background:var(--sand-deep);border-bottom-left-radius:5px;justify-self:start}
.msg.usr{background:var(--umber);color:var(--cream);border-bottom-right-radius:5px;justify-self:end}
.chat-legal{padding:11px 18px;border-top:1px solid var(--line-soft);font-size:11.6px;
  line-height:1.5;color:var(--ink-mute)}
.chat-legal a{text-decoration:underline}
.chat-in{display:flex;gap:9px;padding:12px 14px;border-top:1px solid var(--line-soft)}
.chat-in input{flex:1;padding:11px 14px;border-radius:100px;border:1px solid var(--line);
  background:#fff;font-size:15px}
.chat-in button{width:42px;height:42px;border-radius:50%;color:var(--cream);
  background:linear-gradient(135deg,var(--bronze-ink),var(--bronze));
  display:grid;place-items:center;flex:none;transition:filter var(--d-fast) var(--e)}
.chat-in button:hover{filter:brightness(1.12)}
.chat-in button[disabled]{opacity:.45}
/* Ассистент отвечает не мгновенно: без индикатора пауза читается как поломка. */
.msg.typing{display:flex;gap:5px;align-items:center;padding:15px}
.msg.typing i{width:6px;height:6px;border-radius:50%;background:var(--bronze);opacity:.35;
  animation:kdot 1.25s var(--e) infinite}
.msg.typing i:nth-child(2){animation-delay:.16s}
.msg.typing i:nth-child(3){animation-delay:.32s}
@keyframes kdot{0%,60%,100%{opacity:.28;transform:translateY(0)}30%{opacity:.9;transform:translateY(-3px)}}
.msg.err{background:#F6E7DF;color:#7A3B22}
.msg a{text-decoration:underline}
@media (prefers-reduced-motion:reduce){.msg.typing i{animation:none}}
@media (max-width:640px){
  .fab{right:16px;bottom:16px;width:54px;height:54px}
  .chat{right:12px;left:12px;bottom:80px;width:auto}
}
/* CHAT:КОНЕЦ */

/* ================= ПОЯВЛЕНИЕ ================= */
/* Текст всплывает снизу (выбор клиента), медиа въезжает с боков.
   Разное поведение для разного содержимого — иначе страница «дышит»
   одинаково и эффект перестаёт читаться. */
[data-rv]{opacity:0;transform:translateY(30px);
  transition:opacity var(--d-slow) var(--e),transform var(--d-slow) var(--e);
  transition-delay:calc(var(--rvd,0) * 85ms)}
[data-rv="l"]{transform:translateX(-56px)}
[data-rv="r"]{transform:translateX(56px)}
[data-rv].in{opacity:1;transform:none}
.hload{opacity:0;transform:translateY(24px);animation:up .9s var(--e) forwards}
@keyframes up{to{opacity:1;transform:none}}
.d1{animation-delay:.08s}.d2{animation-delay:.18s}.d3{animation-delay:.28s}
.d4{animation-delay:.38s}.d5{animation-delay:.5s}

/* ================= АДАПТИВ ================= */
@media (max-width:1080px){
  .offers{grid-template-columns:1fr}
  #menu .inner{grid-template-columns:1fr;align-content:safe center;gap:34px}
  /* 31.08: здесь жило #menu .side{padding-left:0;border-top:...} от старой
     светлой версии меню, где правая часть была колонкой, а не карточкой.
     На карточке оно прижимало текст к самому краю на ≤1080px. */
  .ba-wrap{grid-template-columns:1fr}
}
@media (max-width:900px){
  .founder,.route,.book-grid{grid-template-columns:1fr}
  .founder.rev .fig{order:0}
  .fig{max-width:430px}
  .credo{max-width:none}
  .faq{columns:1}
  .foot-top{grid-template-columns:1fr 1fr}
  .foot-brand{grid-column:1/-1}
  .hide-sm{display:none}
}
/* 02.09 заказчик: на телефоне ролик первого экрана «сжимался — лиц не
   видно». Причина: горизонтальный кадр 16:9 лежал фоном на весь портретный
   экран, и браузер отрезал по три четверти ширины. Ниже 900px ролик уходит
   из фона и встаёт ПОЛОСОЙ 16:9 под текстом — кадр целиком, без вуали. */
@media (max-width:640px){
  :root{--hdr-h:72px}
  .two,.foot-top{grid-template-columns:1fr}
  .fig{max-width:none}
  .hero .cta .btn,.acts .btn{flex:1 1 100%}
  .hero h1{max-width:none}
  .sec-head h2{max-width:none}
  :root{--strip-h:clamp(250px,40vh,330px)}
  .route-facts div{grid-template-columns:1fr;gap:5px}
  /* мобильные правила чата переехали в блок CHAT:НАЧАЛО…CHAT:КОНЕЦ —
     он целиком уходит в assets/chat.css для страниц врачей */
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important}
  [data-rv],.hload{opacity:1!important;transform:none!important}
  .strip-layer.on .strip-media{animation:none}
  .veins path{stroke-dashoffset:0}
}


/* ВНИМАНИЕ: правило стоит последним не случайно. Сокращённое свойство font:
   (например .dir h3{font:400 23px/1.26 var(--disp)}) сбрасывает font-variant-numeric
   и font-feature-settings к начальным значениям. Стояло выше — не работало. */
/* Правило выше закрывало только служебные классы, а цифры живут и в заголовках:
   «43» в полосе героя, «All‑on‑4/6», «3D-диагностика», «×25». Playfair по умолчанию
   отдаёт старостильные — четвёрка и тройка проваливаются под базовую линию.
   Поэтому цифры выравниваются везде, где работает дисплейная гарнитура. */
h1, h2, h3, h4,
.hero h1, .sec-head h2, .f-name, .dir h3, .offer-main h3, .offer-loyal h3,
.rest-head h3, .doc h4, .doc .cr, .tech h3, .book-grid h2, .form-ok h4,
.modal h3, .strip .floor b, #pre .word{
  font-variant-numeric: lining-nums;
  font-feature-settings: "lnum" 1;
}

/* ============================================================
   ЗАГОЛОВКИ КАПСОМ — направление с полиграфии клиники.
   Стоит последним блоком осознанно: сокращённое свойство font:
   в правилах выше сбрасывает letter-spacing? — нет, но сбрасывает
   font-variant/feature. Держим весь типографический слой рядом. */
.hero h1, .sec-head h2, .f-name, .dir h3, .offer-main h3, .offer-loyal h3,
.rest-head h3, .tech h3, .book-grid h2, .modal h3, .form-ok h4{
  font-family:var(--ff);
  text-transform:uppercase;
  font-weight:600;
  letter-spacing:var(--ls-caps);
  line-height:1.18;
}
.hero h1{letter-spacing:.055em;line-height:1.14}
.f-name{letter-spacing:.05em}
/* Курсивный акцент серифом больше не работает в капсе — акцент даёт бронза */
.hero h1 em, .sec-head h2 em{font-style:normal;color:var(--bronze-ink)}
.sec--dark .sec-head h2 em{color:var(--bronze-lt)}
/* Playfair остался ровно в одной роли: цитата-кредо врача — голос человека
   посреди набранного капсом интерфейса. Это и есть контраст, а не разнобой. */
.credo, .doc .cr, blockquote{font-family:var(--serif);font-style:italic;text-transform:none;
  letter-spacing:0;font-weight:400}

/* ---------- Акции с фотографиями клиники (материалы 18.08) ---------- */
.dir--photo{padding:0;overflow:hidden}
.dir--photo .ph{display:block;aspect-ratio:9/11;overflow:hidden;background:var(--sand-deep)}
/* Кадры съёмки — в полный рост. При кропе 9:11 по центру срезало головы,
   поэтому точка фокуса поднята к верхней трети — там лица. */
.dir--photo .ph img{width:100%;height:100%;object-fit:cover;object-position:50% 16%;
  transition:transform var(--d-slow) var(--e)}
.dir--photo:hover .ph img{transform:scale(1.035)}
/* У кадра Матосян другая компоновка: фигура ниже в кадре, при общей точке 16%
   срезало темя. Точка фокуса задана персонально по снимку. */
.dir--photo .ph img[src*="veneers"]{object-position:50% 6%}
.dir--photo>*:not(.ph){margin-inline:clamp(22px,2.4vw,30px)}
.dir--photo>h3{margin-top:clamp(20px,2vw,26px)}
.dir--photo .go{margin-bottom:clamp(22px,2.4vw,30px)}
/* Слоган клиники — не заголовок и не абзац, отдельная роль: курсив серифом,
   единственное место в карточке, где звучит их собственный голос */
.dir--photo .claim{font-family:var(--serif);font-style:italic;font-size:clamp(16px,1.5vw,19px);
  line-height:1.34;color:var(--bronze-ink);margin-top:8px}

/* ---------- Шторки до/после ----------
   02.09 владелец: подписи убраны (заказчик не дал описаний случаев), ряды
   выровнены. Шесть пар ложатся ровно 3×2 на широком экране; auto-fit убран
   намеренно — он давал 4+2 с «дыркой» во втором ряду. Все карточки одной
   пропорции 4:3, поэтому ряд читается линейкой, а не лесенкой. */
.ba-two{display:grid;gap:clamp(18px,2.2vw,28px);align-items:start;
  grid-template-columns:repeat(3,minmax(0,1fr))}
.ba-fig{margin:0;display:grid;gap:10px}
.ba-fig figcaption{font-size:13.5px;color:var(--ink-mute);letter-spacing:.01em}
/* 🔴 08.09.2026. Потолок высоты стоял ТОЛЬКО на двух первых рамках
   (--tall и --wide). На высоком окне он срабатывал именно у них: высота
   упиралась в потолок, а вместе с ней — из-за aspect-ratio — ужималась и
   ШИРИНА. Соседние рамки потолка не имели и оставались во всю колонку.
   Замерено на экране 900: 624 против 839, разница 215 пикселей — ровно то
   «верхние уже нижних», что заметил владелец при сужении окна.
   Потолок нужен (иначе на высоком экране рамка вырастает во весь экран),
   поэтому он не убран, а распространён на ВСЕ рамки: ужимаются все разом
   и ряд остаётся ровным. justify-self центрует ужатую рамку в колонке,
   иначе она прижималась бы к левому краю и ряд снова выглядел бы кривым.
   Ограничение перенесено с рамки на КАРТОЧКУ и выражено шириной, а не
   высотой: потолок высоты при aspect-ratio ужимает ширину задним числом,
   и подпись под рамкой оставалась бы шире самой рамки. Ширина 4/3 от той
   же высоты даёт тот же предел, но предсказуемо — и рамка, и подпись
   одной ширины, карточка центрована в колонке.
   Селектор `.ba-two .ba-fig` намеренно тяжелее одиночных классов —
   иначе правило ниже по файлу перебило бы его молча. */
.ba-two .ba-fig{width:100%;max-width:calc(min(46vh, 420px) * 4 / 3);margin-inline:auto}
.ba-two .ba-slider{aspect-ratio:4/3}
@media(max-width:1180px){.ba-two{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:900px){
  .ba-two .ba-fig{max-width:calc(52vh * 4 / 3)}
  .ba-two{grid-template-columns:1fr}
}

/* ---------- Ток по линиям ----------
   По контуру бежит короткий светлый сегмент — линия читается как живая.
   Держим редко и медленно: 9 секунд на проход, задержки у соседних линий
   разные, чтобы не мигало в такт. Клон контура рисует JS, чтобы базовая
   линия оставалась на месте. При prefers-reduced-motion клоны не создаются. */
/* РЕЛЬЕФ. На стене клиники волна — это не нитка, а перепад поверхности:
   снизу мягкая тень, сверху световая грань. Повторяем ту же физику: под
   каждым контуром идут две размытые полосы, смещённые в разные стороны,
   и только поверх них — тонкая линия. */
/* На фотографиях стены нет ни одной «линии»: там широкие мягкие складки
   с плавной светотенью — как слои дюн. Поэтому сам контур мы прячем,
   а рисуем только пару полос: тень снизу и световая грань сверху.
   Полосы ВТРОЕ шире прежних и сильнее размыты — это поверхность, не чертёж. */
.veins path{stroke:transparent}          /* контур-«нитка» больше не рисуется */
.veins path.relief-dark{
  stroke:rgba(150,105,62,.34); stroke-width:64; opacity:1;
  transform:translateY(17px); filter:blur(22px);
  stroke-dasharray:none; stroke-dashoffset:0; transition:none;
}
.veins path.relief-light{
  stroke:rgba(255,251,244,.95); stroke-width:44; opacity:1;
  transform:translateY(-19px); filter:blur(18px);
  stroke-dasharray:none; stroke-dashoffset:0; transition:none;
}
.sec--dark .veins path.relief-dark{stroke:rgba(20,14,8,.45)}
.sec--dark .veins path.relief-light{stroke:rgba(201,168,126,.22)}

/* СВЕТ ПО ВОЛНЕ. Прежний короткий штрих читался как обрывок линии.
   Теперь это длинный мягкий блик: он не рвёт контур, а скользит по нему. */
/* Свет скользит по гребню складки: широкий и сильно размытый,
   поэтому читается как блик на поверхности, а не как линия. */
.veins path.spark{
  stroke:rgba(255,252,246,.95);
  stroke-width:34;
  stroke-dasharray:300 3000;
  stroke-dashoffset:3300;
  opacity:0;
  transition:none;
  transform:translateY(-15px);
  animation:vspark 13s linear infinite;
  filter:blur(16px);
}
@keyframes vspark{
  0%   {stroke-dashoffset:3260; opacity:0}
  16%  {opacity:.75}
  84%  {opacity:.75}
  100% {stroke-dashoffset:0; opacity:0}
}
@media (prefers-reduced-motion:reduce){ .veins path.spark{display:none} }

/* ================= ВИДЕО =================
   Постер + кнопка. Сам файл не грузится, пока не нажали: пять роликов
   по 6 МБ в preload убили бы первую загрузку. Ветку 720p/1080p выбирает
   скрипт по ширине окна. Сокращённое font: здесь намеренно не используется —
   оно сбрасывает font-variant-numeric у вложенных .num (грабля 16.08). */
.vbox{position:relative;border-radius:var(--r-photo);overflow:hidden;
  background:var(--sand-deep);aspect-ratio:16/9}
.vbox img,.vbox video{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block}
.vbtn{position:absolute;inset:0;width:100%;height:100%;border:0;padding:0;
  background:none;cursor:pointer;display:grid;place-items:center}
.vbtn::before{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(47,37,30,.05),rgba(47,37,30,.34));
  transition:background var(--d-base) var(--e)}
.vbtn:hover::before,.vbtn:focus-visible::before{
  background:linear-gradient(180deg,rgba(47,37,30,.02),rgba(47,37,30,.22))}
.vbtn i{position:relative;width:clamp(62px,7vw,86px);aspect-ratio:1;border-radius:50%;
  background:rgba(246,236,220,.95);display:grid;place-items:center;
  box-shadow:0 10px 34px rgba(47,37,30,.34);
  transition:transform var(--d-base) var(--e)}
.vbtn:hover i,.vbtn:focus-visible i{transform:scale(1.06)}
.vbtn i::after{content:"";width:0;height:0;margin-left:6px;
  border-left:18px solid var(--bronze-ink);
  border-top:12px solid transparent;border-bottom:12px solid transparent}
/* Подпись сверху, а не снизу: ролик субтитрован целиком, низ кадра занят
   вшитым текстом при любом выбранном постере. */
.vcap{position:absolute;left:0;right:0;top:0;z-index:2;pointer-events:none;
  padding:15px 22px 38px;color:var(--cream);
  font-size:12.6px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;
  text-shadow:0 1px 6px rgba(47,37,30,.5);
  background:linear-gradient(180deg,rgba(47,37,30,.58),transparent)}
@media (max-width:640px){.vcap{padding:12px 16px 30px;font-size:11.6px}}

/* ================= ХРОНИКА И ЖИВОЕ ВИДЕО =================
   Сокращённое font: здесь не используем — оно сбрасывает
   font-variant-numeric у вложенных .num (грабля 16.08). */

/* Первый экран. Кадры смонтированы с обрезкой верхней и нижней полосы,
   поэтому лица не уходят под шапку и не спорят с вшитыми субтитрами. */
.strip video.strip-media{object-position:50% 46%}

/* Секция основателей */
.founders{display:grid;grid-template-columns:1.02fr .98fr;gap:clamp(32px,4.6vw,68px);align-items:center}
.credo--big{margin-top:clamp(22px,2.6vw,30px);font-family:var(--serif);font-style:italic;
  font-size:clamp(20px,2.1vw,27px);line-height:1.5;color:var(--cream);max-width:34ch;
  border-left:1px solid var(--bronze-lt);padding-left:clamp(18px,2vw,26px)}
.sign--dark{margin-top:clamp(18px,2vw,24px);color:var(--bronze-lt)}
@media (max-width:860px){.founders{grid-template-columns:1fr}}

/* «Как добраться»: ролик идёт сам, без звука и без рамки проигрывателя —
   читается как вшитое в страницу видео, а не как вставленный плеер.
   Субтитры в него вшиты, поэтому смысл не теряется и с выключенным звуком. */
.vbox--live video.vlive{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
/* Ползунок перемотки (п.5 заказчика, 30.08). Живёт только там, где звучит
   речь: приветствие основателей и визитки врачей.
   Высота полосы маленькая, но область нажатия — 44 px по вертикали за счёт
   прозрачных полей: правило «тач-цель не меньше 44×44» из чек-листа. */
.vseek{position:absolute;left:0;right:0;bottom:0;z-index:4;width:100%;
  height:44px;margin:0;padding:0;cursor:pointer;
  /* Затемнение под полосой: на светлом кадре тонкая линия иначе теряется. */
  background:linear-gradient(to top,rgba(20,14,10,.42),rgba(20,14,10,0));
  -webkit-appearance:none;appearance:none}
.vseek:focus-visible{outline:2px solid var(--bronze-lt);outline-offset:-4px}
.vseek::-webkit-slider-runnable-track{height:3px;margin-top:20px;border-radius:2px;
  background:linear-gradient(to right,var(--bronze-lt) var(--p,0%),rgba(246,236,220,.28) var(--p,0%))}
.vseek::-moz-range-track{height:3px;border-radius:2px;background:rgba(246,236,220,.28)}
.vseek::-moz-range-progress{height:3px;border-radius:2px;background:var(--bronze-lt)}
.vseek::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;
  width:12px;height:12px;margin-top:-4.5px;border-radius:50%;background:var(--cream);
  box-shadow:0 1px 6px rgba(20,14,10,.5);transition:transform var(--d-fast) var(--e)}
.vseek::-moz-range-thumb{width:12px;height:12px;border:0;border-radius:50%;background:var(--cream)}
.vseek:hover::-webkit-slider-thumb,.vseek:focus-visible::-webkit-slider-thumb{transform:scale(1.25)}
@media (prefers-reduced-motion:reduce){.vseek::-webkit-slider-thumb{transition:none}}
.vsound{position:absolute;z-index:3;right:14px;bottom:14px;
  padding:8px 15px;border-radius:999px;cursor:pointer;
  border:1px solid rgba(246,236,220,.4);background:rgba(47,37,30,.5);color:var(--cream);
  font-size:11.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  transition:background var(--d-fast) var(--e),border-color var(--d-fast) var(--e)}
.vsound:hover,.vsound:focus-visible{background:rgba(47,37,30,.72);border-color:var(--bronze-lt)}
.vsound[aria-pressed="true"]{background:var(--bronze-ink);border-color:var(--bronze-ink)}

/* ================= СЕКЦИИ ВО ВЕСЬ ЭКРАН =================
   Видео здесь не вставка внутрь блока, а сам блок: рамки плеера нет,
   текст лежит на кадре. Так секция читается одним целым, а не «плеер
   в коробке рядом с текстом». */
/* Высота от экрана, а не фиксированная: содержимое длиннее — секция растёт.
   Верхний отступ равен шапке, иначе она срезает заголовок слайда. */
/* 🔴 Высота секции идёт за КАДРОМ, а не только за экраном. object-fit:cover
   режет ту сторону, что не влезла: на широком коротком экране (2:1 и шире)
   резался ВЕРХ и НИЗ — а внизу у роликов клиники вшито название «Imperia Dent»,
   и оно показывалось наполовину. Владелец заметил это на своём мониторе.
   56.25vw — это ровно 16:9 от ширины; max() оставляет секцию не ниже экрана
   на обычных пропорциях, где режутся безопасные бока. */
.cine{position:relative;min-height:max(100svh,56.25vw);display:flex;align-items:flex-end;
  padding-top:calc(var(--hdr-h) + clamp(16px,3vh,40px));
  overflow:hidden;isolation:isolate;background:var(--umber-deep)}
.cine-media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.cine-veil{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(0deg,rgba(47,37,30,.86),rgba(47,37,30,.24) 52%,rgba(47,37,30,.46))}
.cine-veil--left{background:
  linear-gradient(100deg,rgba(47,37,30,.95) 0%,rgba(47,37,30,.9) 32%,rgba(47,37,30,.56) 54%,rgba(47,37,30,.22) 72%,rgba(47,37,30,.3)),
  linear-gradient(0deg,rgba(47,37,30,.5),transparent 40%)}
.cine-body{position:relative;z-index:2;color:var(--cream);
  width:min(var(--wrap),100%);margin-inline:auto;padding:clamp(44px,7vh,96px) var(--pad-x)}
.cine-body--wide{padding-block:clamp(64px,10vh,124px)}
.cine-body--wide > *{max-width:min(620px,58%)}
/* Ролик направления (.cine--top). 🔴 В «процессах» водяной знак IMPERIA DENT
   вшит СЛЕВА ВНИЗУ — ровно там, где у секции подпись: они наезжали друг на
   друга и читались как грязь. Поэтому здесь подпись уходит ВВЕРХ, вуаль
   темнеет сверху, а кнопка звука переезжает в правый верхний угол —
   внизу справа живёт кнопка чата, и они перекрывались. */
.cine--top{align-items:flex-start}
.cine--top .cine-veil{background:
  linear-gradient(180deg,rgba(47,37,30,.9),rgba(47,37,30,.3) 46%,rgba(47,37,30,.52))}
/* Селектор двойной намеренно: ниже стоит .cine .vsound с таким же весом,
   и при равном весе побеждает то правило, что идёт последним. */
.cine.cine--top .vsound{top:calc(var(--hdr-h) + clamp(14px,2vh,26px));bottom:auto;
  right:clamp(16px,3vw,34px)}
.cine .eyebrow{color:var(--bronze-lt)}
.cine h2{margin-top:14px;font-family:var(--disp);font-weight:500;
  font-size:var(--t-h2);line-height:var(--lh-head);letter-spacing:var(--ls-caps);
  text-transform:uppercase;color:var(--cream)}
.cine h2 em{font-style:normal;color:var(--bronze-lt)}
.cine .sign--dark{margin-top:10px;color:var(--bronze-lt)}
.cine .route-facts{margin-top:clamp(26px,3vw,36px);margin-bottom:0}
.cine .route-facts div{border-top-color:var(--line-dark)}
.cine .route-facts dt{color:var(--cream-faint)}
.cine .route-facts dd{color:var(--cream)}
.cine .route-steps{margin-top:clamp(20px,2.4vw,28px)}
.cine .route-steps li{color:var(--cream-soft);border-top-color:var(--line-dark)}
.cine .route-steps li::before{color:var(--bronze-lt);border-color:rgba(201,168,126,.5)}
.cine .btn-cream{margin-top:clamp(24px,2.8vw,32px)}
.cine .vsound{right:clamp(16px,3vw,34px);bottom:clamp(16px,3vw,34px)}
@media (max-width:860px){
  .cine{min-height:76vh}
  .cine-body--wide > *{max-width:none}
  .cine-veil--left{background:linear-gradient(0deg,rgba(47,37,30,.94),rgba(47,37,30,.62) 55%,rgba(47,37,30,.5))}
}

/* .techshots убран вместе с блоком: кадры переехали в карточки оснащения.
   🔴 Вместе с правилами тогда уехало и открывающее @media, а закрывающая
   скобка осталась — лишняя «}» на верхнем уровне. Браузер считает это ошибкой
   разбора и глотает следующие правила: на телефоне перестал действовать
   @media (max-width:760px), и складки стены вылезли поверх текста в акциях.
   Владелец увидел это раньше любой проверки. Вывод: вырезая блок стилей,
   сверять баланс скобок, а не только начало и конец куска. */

/* ================= ШИРИНА, СТЕНА, ШАПКА =================
   Сокращённое font: не используем — оно сбрасывает font-variant-numeric
   у вложенных .num (грабля 16.08). */

/* Секции с фотографиями раскрываем шире: рядом с полноэкранными видео
   узкая колонка смотрелась зажатой. Текст внутри при этом не растягивается —
   у абзацев свои ограничения по длине строки. */


/* Складки стены на телефоне вытягиваются в мутные пятна: SVG растянут
   по ширине без сохранения пропорций. На узком экране их не рисуем,
   тёплый фон секции остаётся. */
@media (max-width:760px){
  .sec--wall .veins--wall{display:none}
  .veins--top{display:none}
}

/* Приветствие основателей на телефоне: людей нельзя резать по бокам,
   поэтому кадр показываем целиком, подпись уходит под него.
   Секцию «Как добраться» это не касается — там видео работает фоном,
   а содержимое — текст поверх него. */
@media (max-width:760px){
  .cine--top{min-height:0;padding-top:0;display:block;background:var(--umber-deep)}
  .cine--top .cine-media{position:relative;inset:auto;width:100%;height:auto;aspect-ratio:16/9}
  .cine--top .cine-veil{display:none}
  .cine--top .cine-body{width:auto;margin:0;padding:22px clamp(20px,4vw,28px) 30px}
  .cine--top .vsound{bottom:auto;top:calc(56.25vw - 50px);right:14px}
}

/* ================= ШАПКА ПОДСТРАИВАЕТСЯ ПОД ФОН =================
   Вид шапки зависит не от прокрутки, а от того, что под ней. Над кадром
   светлая плашка читается как чужая наклейка, поэтому там шапка
   растворяется, а знак и текст становятся кремовыми. */
body.scrolled.on-media .hdr{background:transparent;border-bottom-color:transparent;
  -webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}
body.scrolled.on-media .hdr::before{opacity:1;
  /* кадр может быть светлым — тонкий кремовый знак иначе тонет */
  background:linear-gradient(180deg,rgba(47,37,30,.78),rgba(47,37,30,.44) 58%,transparent)}
body.scrolled.on-media .hdr .logo.on-dark{display:block}
body.scrolled.on-media .hdr .logo.on-light{display:none}
body.scrolled.on-media .hdr .tel{color:var(--cream)}
body.scrolled.on-media .hdr .burger i{background:var(--cream)}
