/* ============================================================================
   ФАРМОБОРОНА — правки по замечаниям Павла 14.09.2026 (Figma canon 118:1665)

   1) ШАПКА (node 310:4844, дубль 444:12118)
      Канон: пункты меню — Onest 14px / line-height 20px / вес 500 / #272D31.
      Было на живом: 16px / 18px (правила «кувалдой» ниже по audit-fixes.css).
      Активного пункта в Figma нет вообще → убираем подсветку текущего пункта.
      Плашка «Войти» — #009294 / белый текст, иконка пользователя того же
      цвета (уже есть в audit-fixes.css, ниже — защита от перебивания).

   2) БЛОК «ФАРМОБОРОНА В ЦИФРАХ» (node 182:4160)
      Канон: заголовок 32/34/500, значение 60/60/500, подпись 16/18/400.
      Живой сайт: подпись отрисована 12.5px из-за «кувалды»
      `section h2, ... {font-size:32px!important}` — она же перебивает кегль.
      Карточка в Figma: pad 40/24/24/24, gap 24, r24.

   3) ИНТРО-БЛОК (node 602:9821)
      Канон: левая колонка 462px, правая колонка 586px на x=581, обе
      центрированы по вертикали; ряд сертификатов — 586px, gap 34.83px,
      высота логотипов 50px. Проверено пиксель-в-пиксель — совпадает.
   ============================================================================ */

/* ── 1. Шапка: каноничный кегль пунктов меню и отсутствие активного пункта ── */
.site-header .nav a,
.site-header .nav button{
  font-size:14px!important;
  line-height:20px!important;
  font-weight:500!important;
  color:#272D31;
}
.site-header .nav a.active,
.site-header .nav a:hover{color:#272D31}
@media (hover:hover){
  .site-header .nav a:hover{color:#009294}
}

/* «Войти» — по канону 310:4844: Button TEXT 16px / 400 (не жирный), цвет #009294 */
.site-header .login,
.site-header .login span,
.site-header .login .login-name{color:#009294}
.site-header .login{font-size:16px!important;line-height:20px!important;font-weight:400!important}
.site-header .login.is-auth,
.site-header .login.is-auth span,
.site-header .login.is-auth .login-name{color:#fff}

/* Правый блок шапки — по канону 171px (Frame 816: поиск 36 + 8 + корзина 36 + 16 + «Войти» 75).
   Было 193px из-за padding у «Войти» и gap 16 — блок шире канона, поэтому меню
   уезжало влево и расстояние от логотипа до «Главной» не совпадало с макетом. */
.header-actions{gap:8px}
.header-actions .login{padding:0;margin-left:8px;height:auto}

/* ── 2. «ФАРМОБОРОНА в цифрах»: снять «кувалду» с подписи и заголовка ── */
.stats-panel .stat-text,
.stats-panel .stat-text p,
.stat .stat-text{
  font-size:16px!important;
  line-height:18px!important;
  font-weight:400!important;
  color:#85BAAF!important;
}
.stats-panel .stats-heading,
.stats-panel h2{font-size:32px!important;line-height:34px!important;font-weight:500!important}
.stat{padding:40px 24px 24px;gap:24px;border-radius:24px;background:#fff}
/* Фото-карточка в Figma — full-bleed: без полей и без белой подложки.
   Моё правило `.stat{padding:40px 24px 24px}` перебивало `.stat-media{padding:0}`
   из base.css и ставило фото в белую рамку — вернуть как было. */
.stat-media{padding:0!important;background:transparent!important}
.stat .stat-value{font-size:60px!important;line-height:60px!important;font-weight:500!important;color:#009294}

/* ── 2б. «в цифрах» на широком экране: у Figma ДРУГОЙ канон, не тот же, что на 1280.
   Канва 444:11919 (Numbers): панель 1440 целиком, контент от края 56,
   карточка 437×240 и заголовок **40px / lh 42 / 500** (панель свойств Figma
   называет этот стиль «Header/H2 40/42»), тогда как в 1280-макете 182:4160
   панель 1201, карточка 374×240 и заголовок 32/34.
   Заголовок в макете — «ФАРМОБОРОНА» прописными + «в цифрах» строчными
   (набрано вручную, а не text-transform: не включать uppercase!).
   ПОРОГ 1301px, А НЕ 1440px: браузер с окном 1440 отдаёт innerWidth≈1425
   из-за классического скроллбара, и `min-width:1440` не срабатывает —
   на 1440-мониторе показывался старый кегль 32. ── */
/* Колонка заголовка панели цифр: слово «ФАРМОБОРОНА» не должно рваться.
   Замер живого 07.10.2026: при 40px (широкий канон ≥1301) слово занимает 322px,
   при 32px — 257px, а base.css держит `.stats-panel h2{max-width:258px}` — на 1440
   заголовок ломался на «ФАРМОБОР» + «ОНА» третьей строкой (заявка владельца
   «слово разбивается»). 360px — слово целиком на обоих кеглях с запасом на метрику
   шрифта; перенос «ФАРМОБОРОНА → сегодня» задан <br> в разметке и не меняется. */
@media (min-width:1024px){
  .stats-panel h2,
  .stats-panel .stats-heading{max-width:360px}
}
@media (min-width:1301px){
  .stats-panel{width:min(1440px,100%);padding:40px 56px}
  .stats-panel .stats-grid{gap:8.5px}
  .stats-panel .stats-heading,
  .stats-panel h2{font-size:40px!important;line-height:42px!important}
}
/* «15 лет» — канон 60/76.5 (было 60/60, отсюда «сдвинуто»).
   Подпись под ним остаётся 16/18 — она отдельный TEXT в макете (y=560). */
.stats-panel .stat-year .stat-value,
.stat.stat-year .stat-value{line-height:76.5px!important}

/* ── 3. ИНТРО: контейнер и раскладка по канону
   1440+ (node 3188:4696 / 444:11916): страница 1440, левый блок на x=56,
   правый 586px так, что его правый край тоже на 56 от края. В 1280-макете
   (602:9821) левый блок на x=32, правый на x=581 при контейнере 1201.
   Живой сайт держал 1201 и центрировал колонки — отсюда «смещено к центру,
   пусто по краям» и блоки выглядели мельче макета.
   ВЫБОР РАСКЛАДКИ 24.09.2026 (карточка t_315234da, замер 1280): у кадра 602:9821
   арифметика 32 + 462 + 87 + 586 + 32 = 1199 при живой ширине контейнера 1201,
   поэтому ни `center`, ни `space-between` кадру одновременно не отвечают:
     * `space-between` (было) — зазор 84 по боксу .intro-logo (467) / 89 по краю
       картинки, правая колонка уезжает на x=583 вместо кадровых 581;
     * `center` (канон base.css:25) на 1201 даёт поля 33/33 (кадр 1199 → 32/32),
       колонку на x=582 — то есть левый край не кадровый.
   Взят третий вариант: раскладка ОТ ЛЕВОГО ПОЛЯ с кадровым зазором 87.
   32 + 462 + 87 = 581 — лок-ап и правая колонка встают по кадру точно
   (расхождение остаётся только в хвостовых 2 px ширины контейнера справа).
   НЕ менять обратно на `space-between`: он возвращает зазор 89 и x=583 (R4 аудита
   docs/audit/group-main-20260924.md). ── */
@media (min-width:1280px){
  .main-intro .intro-grid{justify-content:flex-start;gap:87px;padding:87px 32px 0}
  /* .intro-left в разметке нет (мёртвый селектор, оставлен из истории) — правим
     вместе с .intro-logo ниже, чтобы значения не расходились */
  .main-intro .intro-left{flex:0 0 462px}
}
@media (min-width:1440px){
  /* интро занимает полные 1440 (как «Page» в макете), поля по 56 — как в Figma */
  .main-intro{width:min(1440px,100%)}
  /* с 1440 кадр 444:11917 прижимает правую колонку к правому полю (её правый край
     на 56 от края), поэтому здесь снова space-between: 798 = 1440 − 56 − 586 */
  .main-intro .intro-grid{justify-content:space-between;padding:87px 56px 0}
}

/* ── 4b. ИНТРО 768–1023: одна центрированная колонка (03.10.2026) ──
   Девиз «Достоверность./Своевременность./Надёжность.» снят со страницы 21.09.2026,
   поэтому кадровая двухколоночная раскладка (кадр 315:5399: девиз слева 361 + текст
   справа 487) осталась без левой половины и блок «не адаптировался»:
     · 768–1023 — эмблема (462) и текст (487) прижаты влево, правая половина пустая.
   Замер живьём 03.10.2026 (980: .intro-logo img x=40 w=462, .intro-right x=40 w=487
   при доке 965 → справа ~440 пусто). Владелец: «в мобильной десктопной версии блок
   интро неправильно адаптируется» (телефон в режиме «версия для ПК» = вьюпорт ~980).
   Решение: 768–1023 — стек в одну колонку по центру (эмблема 462 по центру, текст и
   сертификаты 586 по центру). Итог замера after: 980 → эмблема x=251.5, текст x=189.5
   (оба по центру контейнера 885); 768 → x=145.5 / x=83.5 (центр контейнера 721).
   НЕ расширять на 1024–1279: там живая двухколоночная раскладка (1024 — кадровая I1
   лок-ап 361 + текст 487; ≥1280 — лок-ап 462 + текст 586) заполняет ширину целиком.
   ≤767 — без изменений (эмблема 300 по центру, текст на всю ширину). ── */
@media (min-width:768px) and (max-width:1023px){
  .main-intro .intro-grid{display:block}
  .main-intro .intro-logo{margin:0 auto}
  .main-intro .intro-logo img{width:462px;max-width:100%;height:auto;display:block;margin:0 auto}
  .main-intro .intro-right{max-width:586px;margin-left:auto;margin-right:auto}
}

/* ── 4. ИНТРО: слева только лок-ап центра
   Слайдер «логотип ↔ три слова», радио-переключатели, клик-оверлеи и бегущая
   полоса-прогресс удалены 21.09.2026 по решению владельца: девиз «Достоверность.
   Своевременность. Надёжность.» со страницы снят, автопрокрутки нет.
   Разметка — в БД (modx_site_content id=1). assets/js/intro-slider.js на главной
   выходит сразу (радио меньше двух) и ничего не делает — файл оставлен на случай
   возврата слайдера.
   Геометрия канона сохранена: колонка 462 (бокс = картинке, 24.09.2026
   карточка t_315234da: было 467 — 5 px «хвоста» от снятого слайдера, они же
   давали зазор 84/89 вместо кадровых 87), лок-ап 462×197 (Figma 462:12164). ── */
.intro-logo{flex:0 0 462px;width:462px}
.intro-logo img{display:block;width:462px;height:197px}
/* На узких экранах блок занимает всю ширину колонки: пропорция полотна SVG
   462×197, поэтому height:auto даёт честные 197/462 от ширины. */
@media (max-width:1024px){
  .intro-logo{flex:0 0 auto;width:100%}
  .intro-logo img{width:min(462px,100%);height:auto}
}

/* ── 6. ХИРО: блок текста ниже на ~8px (замечание Павла 14.09.2026)
   Причина: блок прижат к низу (bottom:48px — совпадает с Figma: 845-631-166=48),
   но его высота была 180px вместо 166px, поэтому текст начинался выше.
   В Figma (Frame 788): H1 124px + разрыв 16px + подзаголовок 26px = 166px.
   У нас разрыв был 12px (h1 margin-bottom:12px) + лишний margin-bottom:18px
   у подзаголовка. Итого H1 + 12 + 26 + 18 = 180. Ставим канонный разрыв 16px
   и снимаем нижний отступ — при прижатии к низу это опускает текст на 8px. ── */
.hero-copy h1{margin-bottom:16px!important}
.hero-copy p{margin-bottom:0!important}

/* ── 5. ЮРИДИЧЕСКИЕ РАЗДЕЛЫ (14.09.2026)
   Новые блоки на страницах /legal/*: списки документов, вопрос-ответ,
   пошаговый порядок работы. Стили держим в языке сайта: Onest, карточки
   r24, акцент #009294, серый текст #5A6E7C — как у .legal-card рядом. ── */
.legal-page__intro{font-size:18px;line-height:22px;color:#5A6E7C;max-width:820px;margin:0 0 28px}
.legal-page h2{font-size:24px;line-height:26px;font-weight:500;color:#272D31;margin:36px 0 14px}
.legal-page h2:first-of-type{margin-top:24px}
.legal-page p{font-size:16px;line-height:22px;color:#272D31;margin:0 0 14px}
.legal-page ul,.legal-page ol{margin:0 0 16px;padding-left:22px}
.legal-page li{font-size:16px;line-height:22px;color:#272D31;margin-bottom:8px}
.legal-page a{color:#009294;text-decoration:underline;text-underline-offset:3px}
.legal-page a:hover{color:#008487}
/* карточки-разделы — это ссылки, но подчёркивание им не нужно: заголовок и так
   выделен, а подчёркнутое описание читается как ссылка целиком */
.legal-page .legal-card,
.legal-page .legal-card *{text-decoration:none}
.legal-page .legal-card strong{border-bottom:1px solid rgba(0,146,148,.35)}
.legal-page__note{font-size:14px;line-height:20px;color:#5A6E7C;background:#F3F7FA;border-radius:12px;padding:14px 18px;margin-top:20px}
.legal-page__sign{font-size:16px;line-height:22px;color:#272D31;font-weight:500;margin-top:28px}

/* Список файлов: строка с ссылкой и типом файла справа */
.legal-files{list-style:none;padding-left:0;margin:0 0 20px}
.legal-files li{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:12px 0;border-bottom:1px solid #E4EFF2;margin:0}
.legal-files li:last-child{border-bottom:0}
.legal-files li span{flex:0 0 auto;font-size:13px;line-height:18px;color:#85BAAF;white-space:nowrap}

/* Вопрос-ответ: <details> в языке сайта, без скриптов */
.legal-faq{display:grid;gap:10px;margin-top:8px}
.legal-faq details{border:1px solid #E4EFF2;border-radius:16px;background:#fff;transition:border-color .2s}
.legal-faq details[open]{border-color:#B3DFDF}
.legal-faq summary{cursor:pointer;list-style:none;padding:16px 44px 16px 18px;position:relative;font-size:17px;line-height:22px;font-weight:500;color:#272D31}
.legal-faq summary::-webkit-details-marker{display:none}
.legal-faq summary:after{content:'';position:absolute;right:18px;top:50%;width:9px;height:9px;margin-top:-6px;
  border-right:2px solid #009294;border-bottom:2px solid #009294;transform:rotate(45deg);transition:transform .2s}
.legal-faq details[open] summary:after{transform:rotate(-135deg);margin-top:-2px}
.legal-faq summary:hover{color:#009294}
.legal-faq details>div{padding:0 18px 16px}
.legal-faq details>div p{margin-bottom:10px}
.legal-faq details>div p:last-child{margin-bottom:0}

/* Пошаговый порядок работы */
.legal-steps{counter-reset:step;list-style:none;padding-left:0;margin:8px 0 0}
.legal-steps li{counter-increment:step;position:relative;padding:0 0 18px 46px;margin:0;font-size:16px;line-height:22px}
.legal-steps li:before{content:counter(step);position:absolute;left:0;top:-2px;width:30px;height:30px;border-radius:50%;
  background:#CCF2EA;color:#009294;font-weight:500;font-size:15px;display:grid;place-items:center}
.legal-steps li:after{content:'';position:absolute;left:14px;top:32px;bottom:4px;width:2px;background:#E4EFF2}
.legal-steps li:last-child{padding-bottom:0}
.legal-steps li:last-child:after{display:none}

@media (max-width:767px){
  .legal-page__intro{font-size:16px;line-height:20px}
  .legal-page h2{font-size:20px;line-height:23px}
  .legal-files li{flex-direction:column;gap:2px}
  .legal-faq summary{font-size:15px;line-height:20px;padding:14px 40px 14px 14px}
  .legal-steps li{padding-left:40px}
}

/* ── Заголовок страницы (h1) там, где его не было ─────────────────────────────
   /contacts (id=6) и /oborudovanie.html (id=10) выводили контент сразу с h3/h4 —
   ни заголовка страницы, ни ориентира для скринридера (карточка t_8e66c28c).
   Кегль — как у остальных заголовков страниц сайта: 32/34/500 teal
   (.news-detail__title, .legal-doc h1, body.news-page main h1), на ≤767 — 24/26. */
.contacts-title,.equip-title{margin:0 0 24px;font-size:32px;line-height:34px;font-weight:500;color:#009294}
@media (max-width:767px){
  .contacts-title,.equip-title{font-size:24px;line-height:26px;margin-bottom:16px}
}

/* ── СТРЕЛКИ СЛАЙДЕРОВ: вектор из Figma (компонент 91:2755 «Vector 14»)
   Шеврон 8×16, штрих 1.04483, скруглённый торец, #85BAAF. Раньше в спрайте был
   свой шеврон 6×12 в поле 24×24, а поле иконки — 14×14: на кнопке 40 стрелка
   читалась мельче и толще макета. Символы спрайта теперь отдают viewBox 0 0 8 16,
   поэтому поле иконки задаём ровно 8×16 (пиксель в пиксель с Figma).
   .fb-viewer__close НЕ трогаем — там иконка крестика, не стрелка. */
.carousel .nav-arrow .icon,
.soft-block--blue .carousel .nav-arrow .icon,
.awards-nav svg,
.fb-viewer__prev .icon,
.fb-viewer__next .icon{width:8px;height:16px}

/* ── КАТАЛОГ (/services/, /tools/): сайдбар и кнопки фильтров по Figma
   Figma 1105:14890 (оборудование) и 1035:13145 (услуги): Frame 1066 = 353px,
   плашки 353×56 с gap 8, padding 16, radius 12, bg #F3F7FA, текст 16/18 400
   #5A6E7C; активная — заливка #009294, текст белый. Результаты — Frame 1074 =
   840px (внутри 16px паддинг = Table Cell 808) — это ширина при контейнере 1201.
   Раньше вторая колонка была жёстко 840px: на экранах шире ~1440 контейнер растёт
   (1201 → 1440), а список оставался 840 — справа пустело, и блок выглядел уже
   остальных блоков страницы (владелец 23.09.2026). Теперь колонка тянется:
   minmax(0,1fr), на 1440 получаются те же 840 (канон не сдвинулся).
   Было: сетка 280/911 и
   .category-list{flex-wrap} по содержимому — короткая плашка «Все услуги»
   выбивалась из ряда (116 вместо 280), а на /tools/ список разъезжался
   неровными чипами (105…171). Только ≥1025: на мобильном в catalogue.css
   живёт своя горизонтальная лента, её не ломаем. ── */
/* ── ПОРОГ 1024, а не 1025 (off-by-one ровно на ширине 1024, карточка t_be8a74a5).
   Кадр Services _1024 1263:21470 / Tools _1024 1263:21518 даёт пункту категории
   pad 16 и текст 16/18 при 321/353 ширине — это канон ВСЕГО диапазона ≥1024.
   При пороге 1025 на 1024 блок не применялся вовсе, и последним в каскаде
   выигрывал audit-fixes.css (pad 15px 18px, 15px) — единственная ширина, где
   пункт расходился с кадром. Значения ниже не менялись. ── */
@media (min-width:1024px){
  .catalogue{grid-template-columns:353px minmax(0,1fr);gap:8px}
  .category-list{display:grid;grid-template-columns:1fr;gap:8px;align-items:stretch;align-self:start}
  .category-list button{width:100%;min-height:56px;padding:16px;border-radius:12px;
    font-size:16px;line-height:18px;text-align:left;display:flex;align-items:center;
    white-space:normal;box-sizing:border-box}
  .category-list button small{margin-left:6px;font-size:14px}
}

/* ── КАТАЛОГ ≤1024: плашки категорий переносят название, а не уезжают за край
   Было: .category-list{flex-wrap:wrap} + .category-list button{white-space:nowrap}
   → при 375px контент 645px в контейнере 343px: длинные названия рвались на
   полуслове без многоточия, часть плашки уходила за правый край (скрытая
   горизонтальная прокрутка). Владелец 21.09.2026: переносить, ленту не оставлять.
   Заодно выравниваем мобильный список по десктопу — плашки во всю ширину колонки,
   иначе короткая «Все услуги» снова выбивалась из ряда (117 против 297).
   На ≤767 кегль 11px (он был рассчитан на ленту) поднят до читаемых 14/17,
   min-height 44 — палец должен попадать в плашку. ── */
@media (max-width:1024px){
  .category-list{display:grid;grid-template-columns:1fr;gap:8px;overflow-x:visible;align-items:stretch}
  .category-list button{white-space:normal;max-width:100%;width:100%;text-align:left;box-sizing:border-box}
}
@media (max-width:767px){
  .category-list button{font-size:14px;line-height:17px;padding:12px 14px;min-height:44px}
}

/* ── «Золотой Меркурий» (/about/): блок на 1440, как «в цифрах» (решение владельца
   21.09.2026). В макете About 1280 узел 989:11529 = 1201×646, на сайте блок уже
   стоял вровень с соседями по 1201; владелец хочет 1440 с полями 56.
   Лишнюю ширину забирает левая фотоплашка (в Figma у неё flex:1 1 436), карточки
   наград остаются 239 и должны заканчиваться по правому краю — иначе правый край
   «повисает» пустотой (было: .mercury-awards{flex:1 1 0} растягивался до 860,
   а карточки стояли слева с дырой 127px). ── */
@media (min-width:1301px){
  .mercury-block{width:min(1440px,100%);padding-left:56px;padding-right:56px;box-sizing:border-box}
  .mercury-block .mercury-placeholder{flex:1 1 436px;width:auto}
  .mercury-block .mercury-awards{flex:0 0 733px}
}

/* --- Переносы слов (23.09.2026) -------------------------------------------------
   Длинные слова в узких колонках и в карточках раньше вылезали за край
   или растягивали блок. Включаем переносы для обычного текста; заголовки,
   кнопки и навигацию не трогаем — там переносы выглядят неряшливо. */
body{-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word}
p,li,td,th,dd,.card p,.editorial-card p,.labs-tabs__img+div p{-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word}
h1,h2,h3,h4,.btn,.nav,.site-header,.stats-grid .num,.hero-copy{hyphens:manual;-webkit-hyphens:manual;overflow-wrap:normal}

/* Корзина отключена 24.09.2026 (решение владельца): запрос на просчёт
   переведён в кабинет заявок на ЭЦП. Правило убирает все точки входа корзины
   сразу на всём сайте; возврат — удалить блок и поднять ?v= канонного CSS. */
.cart-open-btn,
[data-cart-open],
[data-cart-count],
.cart-btn,
.cart-status,
.cart-drawer,
.cart-footer,
.cart-body,
[data-account-tab="cart"],
[data-account-panel="cart"],
/* 28.09.2026 (t_19d74c81): кнопка «Добавить» в каталоге услуг — та же точка входа
   корзины; у приборов её не рендерит catalogue.js equipmentItem, правило страхует. */
.catalogue-item .add-btn,
[data-cart-add] {
  display: none !important;
}

/* ============================================================================
   МОБИЛЬНАЯ ГЛАВНАЯ — канон Figma Main_375 (нода 493:7707, файл z51MVZ2MBMlTUIZd8SjVUo)
   Замер «до» (24.09.2026, 375×812, Network.setCacheDisabled) и что правится:

   | блок                | живой «до»            | канон 493:7707            |
   |---------------------|-----------------------|---------------------------|
   | шапка               | 64                    | 72 (оставлено 64 — см. низ)|
   | хиро (Main screen)  | h1 26/28, p 13/26     | h1 24/26, p 14/16          |
   | в цифрах (493:7778) | h2 32/34, 60/60, 16/18| h2 24/26, 40/42, 14/16     |
   | баннер (493:7789)   | p 20/22, кнопка 303   | p 16/18, кнопка 205 (по тексту) |
   | услуги (493:7799)   | высота 778 + overflow:hidden → видны 2 карточки из 8, карточки 319×292 | блок по содержимому, карточки 311×по содержимому |
   | карьера (493:7831)  | текст 32/34, фото 280 под текстом | текст 24/26 и 16/18/700, фото 493 СВЕРХУ, карточка текста внахлёст на 213 |
   | пресс-центр (493:7873)| h2 32/34, кнопка 36  | h2 24/26, кнопка 157×56, 18/20 |
   | контакты (604:10219)| h2 32/34              | h2 24/26                   |

   Почему в этом файле: он подключён ПОСЛЕ responsive.css (шаблон 21/22, последняя
   ссылка) и уже держит канон с !important, поэтому равенство специфичности решается
   в нашу пользу. Селекторы с префиксом body — чтобы перебивать «кувалду»
   audit-fixes.css:2955 `section h2, .section-title, …{font-size:32px!important}`
   и дубликаты из responsive.css, которые грузятся раньше.
   Белый фон шапки/подвала, тексты и состав блоков не менялись — только геометрия
   и кегли под мобильный канон.
   ============================================================================ */
@media (max-width: 767px) {
  /* ── Хиро (493:7708 / 493:7712–7714): H1 24/26, подзаголовок 14/16 ── */
  body .hero-copy h1{font-size:24px!important;line-height:26px!important}
  body .hero-copy p{font-size:14px!important;line-height:16px!important;font-weight:400!important}

  /* ── Блоки-острова: у всех канонных боксов радиус 16 (было 24)
       Numbers/Services/Benefits/News/Contacts 493:7778…7873,604:10219 ── */
  .teal-block,.soft-block--blue,.cta-water,.career-photo,.career-copy{border-radius:16px!important}

  /* ── «в цифрах» (493:7778): заголовок 24/26 (193), значение 40/42, подпись 14/16.
       У «кувалды» audit-fixes.css:2955 и канонного правила выше !important —
       бьём более высокой специфичностью. ── */
  body .stats-panel .stats-heading,
  body .stats-panel h2{font-size:24px!important;line-height:26px!important;max-width:193px}
  body .stats-panel .stat .stat-value,
  body .stats-panel .stat.stat-year .stat-value{font-size:40px!important;line-height:42px!important}
  body .stats-panel .stat .stat-text{font-size:14px!important;line-height:16px!important;font-weight:400!important}
  /* карточка рейла 239×210 (493:7782), паддинг 24/16 */
  body .stats-panel .stats-grid>.stat{padding:24px 16px}
  /* ── «в цифрах»: слайды и пейджер (кадры Main_375 493:7778 / мокап 523:10005 и
        About_375 1239:19773; карточки t_36c48df3 и t_8059b033). Владелец 24.09:
        «точек всего 6, а слайдов 8» — в рейле ВСЕ ячейки блока (8 = 6 числовых +
        фото микроскопа + «15 лет»), а пейджер остаётся канонным: Button 493:7788 =
        311×8, ровно 6 кружков 8×8 r100, зазор 6 (шаг 14), первый #85BAAF, остальные
        #CCF2EA, ряд по центру. Активная точка подводится ПО ПРОГРЕССУ прокрутки
        (bindRailProgressDots, widgets.js) — точек 6 при 8 слайдах. Это отменяет
        решение 2-б карточки t_36c48df3, где обе ячейки были сняты под кадр с
        6 карточками; откат — вернуть `display:none` для этих двух селекторов.
        Ритм кадра: панель 343×358 = 24 + заголовок 52 + 24 + рейл 210 + 16 + точки
        8 + 24, поэтому зазор панели 16, а заголовок→рейл 24 (16 + margin-top 8). ── */
  body .stats-panel .stats-grid>.stat-media,
  body .stats-panel .stats-grid>.stat-year{flex:0 0 239px;width:239px;height:210px;min-height:210px}
  /* фото-ячейка — плитка без паддинга (base.css `.stat-media{padding:0}`) */
  body .stats-panel .stats-grid>.stat-media{padding:0;background:transparent;border-radius:16px;overflow:hidden}
  body .stats-panel .stats-grid>.stat-media img{width:100%;height:100%;object-fit:cover;border-radius:16px}
  /* «15 лет» — такая же белая карточка 239×210 (в рейле все ячейки — карточки).
     Кнопку «Подробнее о компании» не показываем: в контент 162 (210 − 2×24) она не
     влезает (значение 42 + 16 + подпись 64 + 16 + кнопка 56 = 194), а кегли канона
     для кнопки в кадре 375 не заданы. */
  body .stats-panel .stats-grid>.stat-year{padding:24px 16px;background:#fff;justify-content:flex-start;gap:16px}
  body .stats-panel .stats-grid>.stat-year .stat-value{color:#85baaf}
  body .stats-panel .stats-grid>.stat-year .btn{display:none!important}
  body .stats-panel{gap:16px!important}
  body .stats-panel .stats-grid{margin-top:8px}
  /* свайп по рейлу — как у мобильного рейла наград (493:7845): нативный скролл
     получает горизонтальный пан, иначе жест забирает прокрутка страницы */
  body .stats-panel .stats-grid{touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}
  body .stats-panel .stats-dots{display:flex;justify-content:center;align-items:center;
    gap:6px;width:100%;height:8px}
  body .stats-panel .stats-dots button{flex:0 0 8px;width:8px;height:8px;min-width:8px;
    border:0;padding:0;border-radius:100px;background:#ccf2ea;cursor:pointer;
    appearance:none;-webkit-appearance:none}
  body .stats-panel .stats-dots button.active{background:#85baaf}

  /* ── Зазор «в цифрах» → «комплексные задачи» = 40 (кадр: контейнер Frame 1003 держит
        блоки с gap:40). Живой зазор 64 = паддинг секции цифр 20 (base.css
        `main>.section:has(>.container.stats-panel){padding-block:20px}`) + margin
        `.section+.section` 24 (responsive.css ≤767) + паддинг секции баннера 20.
        Снимаем маржу у секции баннера, но ТОЛЬКО в паре «цифры → баннер» (соседняя
        пара) → 20 + 0 + 20 = 40 ровно; у остальных островов и на других страницах
        (например /clients/, где баннер тот же) зазор не трогаем — вопрос владельцу
        в отчёте. Приём тот же, что у пары карьера→награды в карточке t_53a521dd. ── */
  body main>.section:has(>.container.stats-panel)+.section:has(>.container.cta-water){margin-top:0!important}

  /* ── Баннер «комплексные задачи» (493:7789 / Frame 976 493:7792, Frame 951 493:7796):
        копия по рамке кадра — left:16 top:24, 296×318 → паддинг карточки 24/16 (было
        20 у responsive.css:215); заголовок сверху, «Узнать о возможности…» и кнопка —
        СНИЗУ (Frame 976 justify-content:space-between; в живой разметке это
        `margin-top:auto` у подписи, третьей реализации flex-раскладки не нужно);
        между подписью и кнопкой 16 (Frame 951 gap:16, было 12).
        Подпись 16/18/500 #6D8A9F, кнопка 205×56 r100 с рамкой 1px #6D8A9F и текстом
        18/20/500 — прижата к левому краю контента (пиксель-проверка PNG узла
        493:7789 scale=2: рамка кнопки 16.0..220.5 внутри карточки; центрированной она
        была бы 69..274, т.е. «по центру» из карточки — это `margin:0 auto` у блока
        Frame 951, а не центрирование кнопки). ── */
  body .cta-water__copy{padding:24px 16px!important}
  body .cta-water__copy h2{margin:0!important}
  body .cta-water__copy p,body .cta-water__copy p.muted{margin:auto 0 16px!important}
  body .cta-water__copy p{font-size:16px!important;line-height:18px!important}
  body .cta-water__copy .btn{width:205px!important;min-width:0!important;height:56px;
    min-height:56px;box-sizing:border-box;white-space:nowrap;align-self:flex-start;max-width:100%}

  /* ── УСЛУГИ (493:7799). Главный дефект: base.css `.teal-block{height:778px;overflow:hidden}`
       + `.service-card{height:292px}` на узком экране резали блок — 3-я карточка
       обрывалась на заголовке, карточки 4–8 были недоступны вообще (замер «до»:
       блок 818, содержимое 2556). ── */
  body .teal-block{height:auto!important;overflow:visible!important;padding:24px 16px!important}
  body .teal-block>.section-title{font-size:24px!important;line-height:26px!important;
    margin-bottom:24px!important}
  body .teal-block .service-grid{gap:8px!important}
  body .teal-block .service-card{height:auto!important;min-height:0!important;padding:24px 20px;gap:12px}
  /* фотокарточка канона 311×140 (493:7805): оверлей + заголовок 18/20 */
  body .teal-block .service-card.photo{min-height:140px!important;padding:0}
  /* кнопка «Все услуги»: кадр 493:7799 ставит её через 24 после сетки (Frame 803
     itemSpacing 24), в живом разметка несёт inline `margin-top:18px` — блок был
     1446 вместо 1444 (24+26+32+сетка+18+56+24). */
  body .teal-block .center{margin-top:24px!important}

  /* ── ВЫСОТЫ 8 КАРТОЧЕК ПО КАДРУ 493:7802 (карточка t_8ffc87c1) ──────────────
     Кадр: текстовая карточка = 24 (пад) + заголовок 20/22 + 12 + абзац 14/16 +
     24 (пад). Чипы (Frame 934) и разделитель (Line 13) в мобильном кадре
     visible=false — в живом они давали +48 к каждой текстовой карточке:
     238/222/200/140/206/140/200/184 = 1530 против кадровых 1210 при тех же 8
     карточках и фотокарточках 140 (min-height).
     Заголовок кадра (493:7803 = 58 при 3 строках, 493:7816 = 36 при 2) обрезан
     по cap-height: capHeight 14 + 22×(n−1), т.е. 22n − 8. В браузере строка
     занимает ровно 22×n, поэтому снимаем полулидинг маржой −4px сверху и снизу
     (66−8 = 58, 44−8 = 36). То же значение даёт замер PNG кадра. ── */
  body .teal-block .service-card .chips,
  body .teal-block .service-card .service-divider{display:none!important}
  body .teal-block .service-card:not(.photo) h3{margin:-4px 0!important}
  /* Перенос абзаца как в кадре. Пиксель-сверка PNG кадра 493:7804 (scale=2):
     строка «микробиологический мониторинг проб» = 264 css ink, Chrome тем же
     кеглем 20/… — 260, и последняя строка абзаца влезала в 271 (268), тогда как
     Figma её переносит. Без этого карточка «Микробио» = 166 вместо 182, сетка
     1250 вместо 1266. Трекинг 0.1px/знак повторяет кадровый перенос (рабочее
     окно 0.08–0.11: 0.15 разбивает 8-ю карточку в 3 строки). */
  body .teal-block .service-card p{letter-spacing:.1px}
  /* ── п.7, карточка t_53a521dd: ПОРЯДОК ЯЧЕЕК на 375 = кадр 493:7799.
       Канон 375 (порядок по y из API): 1 Испытания (493:7803, y9407), 2 Микробио
       (493:7804, y9597), 3 ФОТО «Отбор проб лекарственных средств» (493:7805, y9787),
       4 Биоаналитические (493:7816, y9935), 5 Разработка (493:7817, y10087),
       6 ФОТО «Создание, хранение и поддержание банка культур клеток» (493:7819,
       y10245), 7 Валидация (493:7828, y10393), 8 Апробация (493:7829, y10545).
       Живой порядок до правки: 3 = «Биоаналитические», 4 = фото «Отбор проб»
       (одинаково на 375/412/1440), т.е. третья и четвёртая ячейки переставлены.
       В кадре ДЕСКТОПА 182:4182 порядок ДРУГОЙ (фото «Отбор проб» стоит 4-м:
       ряд 1 = 182:4187 Испытания / 182:4188 Микробио / 182:4189 Биоаналитические /
       266:3424 фото) — и он совпадает с живым, поэтому разметку (чанк
       FB2.ServiceCards, общий для всех страниц и ширин) НЕ трогаем: меняем только
       order внутри ≤767. Сетка здесь одноколоночная (.service-grid), order её
       сортирует. Нумерация order обязана быть у ВСЕХ карточек: незаданный order = 0
       и уехал бы вперёд заданных 3/4 (первая попытка дала 1,2,5,6,7,8,4,3),
       а `n+5` одним значением 5 сохраняет хвост в DOM-порядке при любом числе карточек. ── */
  body .teal-block .service-grid .service-card:nth-child(1){order:1}
  body .teal-block .service-grid .service-card:nth-child(2){order:2}
  body .teal-block .service-grid .service-card:nth-child(3){order:4}
  body .teal-block .service-grid .service-card:nth-child(4){order:3}
  body .teal-block .service-grid .service-card:nth-child(n+5){order:5}

  /* ── КАРЬЕРА (493:7831): в каноне фото 343×493 идёт ПЕРВЫМ, а карточка текста
       (343×358, pad 24, r16, #F3F7FA) заходит на него на 213 (gap = −213).
       Стекло «250» в мобильном кадре скрыто (Group 2 HIDDEN) — его перекрывает
       карточка текста. ── */
  body .career-banner{display:flex!important;flex-direction:column!important;gap:0!important}
  body .career-photo{order:-1;height:493px!important;min-height:0!important;border-radius:16px!important}
  body .career-photo img{width:100%;height:100%;object-fit:cover}
  body .career-photo__num{display:none!important}
  body .career-copy{position:relative;z-index:2;margin-top:-213px;min-height:0!important;
    padding:24px!important;border-radius:16px!important}
  body .career-copy h2{font-size:24px!important;line-height:26px!important;font-weight:500!important;
    color:#809CAF!important;max-width:295px}
  body .career-copy h3{font-size:16px!important;line-height:18px!important;font-weight:700!important;
    color:#009294!important;max-width:295px}
  body .career-copy .btn{min-height:56px!important;height:56px!important;padding:0 24px!important;
    font-size:18px!important;line-height:20px!important;width:auto!important;align-self:flex-start}
  /* ── п.8, карточка t_53a521dd: зазор ВНУТРИ карточки «абзац про технологии →
       блок карьеры». Кадр Frame 952 (493:7840): карточка 343×358, pad 24,
       justify-content:space-between; в выгрузке у него заявлен gap:156, но кадр его
       НЕ рендерит: 358 − 24×2 − абзац 130 − Frame 951 108 = 72, и API отдаёт ровно
       72 (абзац 493:7841 @11121..11251, Frame 951 @11323 — это и есть «замер
       absoluteBoundingBox соседних узлов»), т.е. space-between раздаёт свободное
       место, а 156 — минимум, до которого дело не доходит (при 156 содержимое
       вылезало бы за низ карточки на 84). Пиксельная проверка PNG-экспорта
       493:7831 (scale=2, 686×1276): между последней строкой абзаца и первой строкой
       заголовка карьеры 151 пустая пиксель-строка = 75.5 css (72 зазора + ведущие
       линии строк) — кадр рисует 72, а не 156.
       Замер живого до правки: 20 (margin-bottom абзаца). Ставим 72 (gap карточки
       задаём маржой абзаца — общий gap отсюда не годится, он раздвинул бы и пару
       «заголовок карьеры → кнопка», где канон 16), карточка становится 358 = канон
       (24 + 130 + 72 + 36 + 16 + 56 + 24). ── */
  body .career-copy{gap:0!important;min-height:358px!important}
  body .career-copy h2{margin-bottom:72px!important}

  /* ── ПРЕСС-ЦЕНТР (493:7873): заголовок 24/26, кнопка «Все новости» 157×56 (18/20).
       Бокс был с фиксированной высотой 480 (base.css `.soft-block--blue{height:480px}`) —
       при выросшей кнопке содержимое обрезалось бы, поэтому height:auto. ── */
  body .soft-block--blue{height:auto!important;padding:24px 16px!important}
  body .soft-block--blue .section-title{font-size:24px!important;line-height:26px!important}
  body .soft-block--blue .btn.btn-sm{min-height:56px!important;height:56px!important;
    padding:0 24px!important;font-size:18px!important;line-height:20px!important}

  /* ── КОНТАКТЫ (604:10219): заголовки карточек 24/26, подпись лабораторий 14/16.
        Зазор H2 → подпись лабораторий — 8 по кадру (Frame 883 → Frame 874 gap 8);
        живой был 4 (audit-fixes .labs-sub{margin:4px 0 18px}) → labs-card 260 вместо
        265 кадра (t_1fd23e22). Остаток 1 px — высоты свёрнутых строк площадок в кадре
        (42 и 43) против 42 + 42 живьём. ── */
  body .contacts-card h2,
  body .labs-card h2,
  body .labs-head h2{font-size:24px!important;line-height:26px!important}
  body .labs-card .labs-sub{font-size:14px!important;line-height:16px!important;margin-top:8px!important}

  /* ── Кнопки-таблетки в блоках-островах: одинаковая высота 56 и кегль 18/20
       (493:7803 «Все услуги» 157×56, 493:7872 «Все новости»), кроме .btn-sm,
       которые остаются компактными там, где канон компактный. ── */
  body .teal-block .center .btn{min-height:56px!important;font-size:18px!important;line-height:20px!important}
}

/* ── НАГРАДЫ ≤767 (кадр 493:7845, решение владельца 5-а, карточка t_1508e5cb) ──────
   Мобильный вид блока: ряд рубрик (чипов) + свайп-галерея карточек наград
   199×282 r8 с зазором 8 + точки-пейджер под рейлом. Стрелок и кнопки «Все награды»
   в кадре нет — их не строит мобильная ветка loadAwards() (widgets.js); в этой же
   ветке карточка = кнопка с картинкой, клик открывает существующий просмотрщик
   (data-viewer). Ряд рубрик по кадру: h30, r100, паддинг 12, активная #009294,
   неактивные #F3F7FA, горизонтальная прокрутка. Точки: 8×8 r100, шаг 14 (8 + зазор 6),
   активная #85BAAF, остальные #CCF2EA; в кадре их 6 (по числу наград кадра) — в живом
   наград больше, поэтому ряд точек центрируется, пока влезает, и прокручивается
   (с автоподводкой активной) когда нет. ── */
@media (max-width:767px){
  /* ── п.9, карточка t_53a521dd: зазор «блок технологий (карьера) → блок наград».
       Кадр: контейнер Frame 1003 (493:7777) держит секции с gap: 40 — Career
       кончается 11455, Benefits начинается 11495. Живой зазор = 64:
       паддинг секции карьеры 20 (base.css `main>.section:has(>.container.career-banner)
       {padding-block:20px}`) + margin `.section+.section` 24 (responsive.css) +
       паддинг секции наград 20. Владелец: в кадре МЕНЬШЕ, чем на живом.
       Снимаем маржу только у секции наград → 20 + 0 + 20 = 40 ровно.
       Остальные пары островов на ≤767 тоже держат 64 (кадр 40) — в этой карточке
       НЕ трогаем (правка только заявленной пары; вопрос вынесен владельцу). ── */
  body #awards.section{margin-top:0!important}
  body #awards .awards-filters{gap:8px}
  body #awards .awards-filter{padding:0 12px;height:30px;min-height:30px;
    border-radius:100px;font-size:14px;line-height:18px}
  body #awards .awards-rail{display:flex;gap:8px;width:100%;overflow-x:auto;
    overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;
    touch-action:pan-x pan-y;scrollbar-width:none;-ms-overflow-style:none}
  body #awards .awards-rail::-webkit-scrollbar{display:none}
  body #awards .awards-card{flex:0 0 199px;width:199px;height:282px;padding:0;
    border:0;border-radius:8px;background:#fff;overflow:hidden;display:block;
    scroll-snap-align:start;cursor:pointer;appearance:none;-webkit-appearance:none}
  body #awards .awards-card img{width:100%;height:100%;object-fit:cover;
    display:block;border-radius:8px}
  body #awards .awards-dots{display:flex;justify-content:safe center;gap:6px;
    width:100%;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}
  body #awards .awards-dots::-webkit-scrollbar{display:none}
  body #awards .awards-dots button{flex:0 0 8px;width:8px;height:8px;min-width:8px;
    border-radius:100px;border:0;padding:0;background:#ccf2ea;cursor:pointer}
  body #awards .awards-dots button.active{background:#85baaf}
}

/* ── КОНТАКТЫ: площадки и роли в аккордеоне (кадр 604:10219, решение владельца 4-б,
   карточка t_ea97a720). Разметка чанка FB2.Contacts (id=109) пришла как <details>:
   роли в зелёной карточке (.acc-role) и площадки в карточке лабораторий (.lab-acc,
   внутри готового .mobile-accordion — он переехал внутрь .labs-card, чтобы порядок
   совпал с кадром: зелёная карточка → лаборатории → «Остались вопросы?»).

   ДЕСКТОП (>767) НЕ МЕНЯЕТСЯ: роли показываются развёрнутым списком, как раньше
   (авторский display:block отменяет UA-правило `details:not([open])>*:not(summary)`),
   площадки — прежней сеткой .labs-grid, .mobile-accordion скрыт правилом base.css.
   НА ≤767 показывается аккордеон, а сетка площадок скрыта — иначе одно и то же
   содержимое рисуется дважды, это и был дубль-дефект, из-за которого аккордеон
   выключали (audit-fixes 2103/4011 — оба правила сняты этой же карточкой).

   Значения кадра: H2 24/26, подпись лабораторий 14/16, подписи ролей 14/18 w700,
   строки площадок 16/18 w700 + шеврон 10×6, карточки r16. ── */
@media (min-width:768px){
  /* роли: прежний вид — каждая строка отдельный элемент карточки (gap карточки),
     тело строки видно всегда, шеврон и «кликабельность» не нужны.
     Механика показа содержимого ЗАКРЫТОГО <details> отличается по браузерам:
     Chrome 131+ прячет содержимое слотом ::details-content (нужен
     content-visibility:visible), старые Chromium/Firefox/Safari — правилом
     `details:not([open])>*:not(summary){display:none}` (его перебивает display:block
     на самом теле). Держим оба правила — иначе на десктопе строки ролей схлопываются
     до 18px и тела наезжают друг на друга. */
  /* Зазор между строками ролей — 24 по кадру (Frame 873 gap 24, узел 975:13063, About 1280).
     Было `display:contents`: роли становились прямыми детьми карточки, а канонные отступы
     карточки навешены ТОЛЬКО на <p> (audit-fixes 3110–3115: h2 40 / .foot-org 16 / .acc-line 32)
     при gap карточки 0 — строки <details> получали 0 и слипались в один серый блок
     (замер прода 07.10.2026: 1440/1280/1024 → 0 px вместо кадровых 24; 980 → 32 от gap карточки).
     Теперь список ролей — flex-колонка с gap 24: зазор одинаков на всех ширинах ≥768,
     внешние отступы (40/16/32) и высота карточки (min-height 626) не меняются. */
  body #contacts .acc-roles{display:flex;flex-direction:column;gap:24px}
  body #contacts .acc-role::details-content{content-visibility:visible}
  body #contacts .acc-role>.acc-role__body{display:block;font-size:16px;line-height:18px;color:#fff}
  body #contacts .acc-role>summary{display:block;list-style:none;pointer-events:none;cursor:auto;
    font-size:16px;line-height:18px;font-weight:400;color:#fff}
  body #contacts .acc-role>summary::-webkit-details-marker{display:none}
  body #contacts .acc-role__chev{display:none}
}
@media (max-width:767px){
  /* карточки блока: радиус 16 по кадру (audit-fixes держит 24 на всех ширинах) */
  body #contacts .contacts-card,
  body #contacts .labs-card,
  body #contacts .callback{border-radius:16px!important}

  /* Зелёная карточка @375 — вариант Size=375 компонента 315:5228 / кадр 493:7707:
     Frame 871 343×328 = pad 24/16 + H2 26 + зазор 24 + внутренний блок 230 + pad 24;
     внутренний блок (Frame 870 gap 32 → Frame 872 gap 16) = орг. 72 + 16 + контактная
     строка 38 + 16 + роли 88. В разметке чанка FB2.Contacts всё лежит ПЛОСКО
     (h2, .foot-org, .acc-line, .acc-roles — прямые дети карточки), поэтому кадровые
     зазоры 24 / 16 / 16 собираются парой «gap карточки 16 + margin-bottom 8 у H2»
     (8 + 16 = 24). Заголовок 24/26, орг. 14/18 w700, роли 14/18 w700 — правила выше/ниже.
     Важно: живой Chrome на Onest укладывает название юрлица в 3 строки (54 вместо 72
     в кадре) и контактную строку в 2×16 (32 вместо 38 у текстового слоя Figma), поэтому
     корректная геометрия даёт живую карточку 304, а не 328: 24+26+24+(54+16+32+16+88)+24.
     328 кадра — те же зазоры с текстовыми метриками Figma (замер 06.10.2026, t_1fd23e22). */
  body #contacts .contacts-card{gap:16px!important}
  body #contacts .contacts-card h2{margin-bottom:8px!important}
  body #contacts .foot-org{font-size:14px!important;line-height:18px!important;font-weight:700!important}
  /* Зазор от контактной строки до списка ролей — 16 по кадру (Frame 872 → Frame 873 gap 16).
     До 06.10.2026 правило жило ТОЛЬКО на главной (`body:has(.main-intro)`), из-за чего
     на остальных 151 странице зелёная карточка «Контакты» была ниже главной — заявка
     владельца 05.10.2026, стр.18: «подвал должен быть единый везде». Теперь значение
     одно на всех страницах, а лишние 24 (gap карточки) сняты margin-top:0: живой зазор
     был 24 + 16 = 40 вместо кадровых 16 (t_1fd23e22, 06.10.2026). */
  body #contacts .acc-roles{display:flex;flex-direction:column;gap:8px;margin-top:0}
  /* контакт-строка под названием организации (кадр Frame 872: 311×38, 14/16 ×2 строки) */
  body #contacts .acc-line{font-size:14px!important;line-height:16px!important;color:#fff;
    margin:0!important}
  /* строка роли 311×24 (Frame 1006): линия 14/18 по центру бокса 24 */
  body #contacts .acc-role>summary{display:flex;align-items:center;gap:24px;color:#fff;cursor:pointer;
    list-style:none;font-size:14px!important;line-height:18px!important;font-weight:700!important;
    min-height:24px}
  body #contacts .acc-role>summary::-webkit-details-marker{display:none}
  body #contacts .acc-role__label{flex:1 1 auto}
  body #contacts .acc-role__colon{display:none}   /* в кадре подпись без двоеточия */
  body #contacts .acc-role__body{font-size:14px!important;line-height:16px!important;color:#fff;
    padding-top:4px}
  body #contacts .acc-role__body a{color:#fff;text-decoration:none}

  /* ── КОНТАКТЫ @375, карточка t_e87e94de — по кадру 493:7707 (строки 7284–7560 выгрузки):
     строка роли 311×24 (space-between, gap 24), текст тела 311×32 = 14/16.
     Карточка: Frame 870 gap 32 → Frame 873 gap 16 → строки gap 8; контакт-строка
     «info@farmoborona.ru +7 (495) 799-90-34» под названием организации (14/16) —
     она есть в разметке ресурса (p после .foot-org); зазор от карточки 24 (gap
     карточки выше), от org-строки 16 — держит margin-top:16 на .acc-roles
     (правило выше — с 06.10.2026 на всех страницах, а не только на главной). */
  /* шеврон роли: в кадре Icons 24×24 с transform rotate(-90deg) — СВЁРНУТО стрелка
     смотрит ВПРАВО (треугольник 10×6 остриём вправо), раскрытие — rotate(90deg).
     Прежнее правило рисовало треугольник «вниз» и крутило на 180. */
  body #contacts .acc-role__chev,
  body #contacts .lab-acc__chev{flex:0 0 auto;width:0;height:0;
    border-top:5px solid transparent;border-bottom:5px solid transparent;
    border-left:6px solid currentColor;transition:transform .2s}
  body #contacts .lab-acc__chev{color:#232222}
  body #contacts details[open]>summary .acc-role__chev,
  body #contacts details[open]>summary .lab-acc__chev{transform:rotate(90deg)}

  /* тело роли 14/16 по кадру (было 14/16 — совпадает), зазор между строками 8 (gap 8) */

  /* карточка лабораторий: заголовок + подпись, ниже — свёрнутые площадки.
     responsive.css ≤767 рисует .mobile-accordion details как «плашку» (фон --pale,
     r12, padding 14) — по кадру строки площадок идут без фона внутри карточки. */
  body #contacts .labs-grid{display:none!important}
  body #contacts .mobile-accordion{display:flex!important;flex-direction:column;gap:16px;
    width:100%;margin-top:24px}
  body #contacts .mobile-accordion>details{background:none!important;border-radius:0!important;
    padding:0!important}
  /* свёрнутая строка площадки 311×38 (кадр Frame 1012/1013: имя + «Показать на карте»
     14/16 подчёркнутый + Icons 24 rotate(-90)) — map-link переносим в summary разметкой
     чанка; адрес в кадре display:none, пока строка свёрнута */
  body #contacts .mobile-accordion>details>summary{display:flex;align-items:center;gap:24px;
    min-height:42px;color:#262c31;cursor:pointer;list-style:none;
    font-size:16px!important;line-height:18px!important;font-weight:700!important}
  body #contacts .mobile-accordion>details>summary::-webkit-details-marker{display:none}
  body #contacts .lab-acc__name{flex:1 1 auto;text-transform:uppercase}
  /* «Показать на карте» в свёрнутой строке: 14/16 подчёркнутый #272D31 (кадр 124×16);
     в теле (раскрыто) ссылка и адрес остаются как раньше */
  body #contacts .mobile-accordion>details>summary .map-link{font-size:14px!important;
    line-height:16px!important;color:#262c31;text-decoration:underline;
    text-underline-offset:3px}
  /* раскрытое тело: Frame 885/884/877 — подписи 16/18 w500 #5A6E7C, значения 16/18 #5A6E7C */
  body #contacts .lab-acc__body{padding-top:8px}
  body #contacts .lab-acc__body .lab-head-group{gap:16px}
  body #contacts .lab-acc__body .lab-group{margin-top:24px;gap:4px}
  body #contacts .lab-acc__body p{font-size:16px!important;line-height:18px!important;margin:0}
  body #contacts .lab-acc__body .lab-label{color:#5a6e7c;font-weight:500!important}
  body #contacts .lab-acc__body .lab-address{color:#262c31}
  body #contacts .lab-acc__body .map-link{font-size:14px!important;line-height:16px!important;
    color:#262c31;text-decoration:underline;text-underline-offset:3px}
}

/* ═══ ФОРМА И КОНТАКТЫ @1024 — канон кадра Main_1024 (Form 315:5573, Contacts 315:5578),
   карточка t_852827d7; числа — docs/audit/group-main-20260924.md (§2 блоки 9–10, §4 R7/R8).

   Дефект: на самом 1024 форма была одноколоночной (грид 944 → блок 996 против кадровых 612),
   контакты стояли стопкой (1526 против 668). Правила стопки лежат в блоках
   `@media(max-width:1024px)`: responsive.css:109 (.form-grid в одну колонку, .footer-top
   колонкой, .contacts-card/.labs-card на всю ширину) и audit-fixes.css (.callback колонкой,
   паддинг .labs-card 28). Для планшета 768–1023 они верны, но на самом 1024 кадр рисует РЯД:
   контакты 390 + 8 + 546, форма — две колонки 386 + 8 + 550. Этот файл идёт последним по
   каскаду, поэтому канон 1024 возвращаем здесь; 768–1023 и 1025+ не тронуты.

   Кадр 1024: Frame 871 390×628 (pad 32) + Frame 889 546×628 = labs-card 506 + 8 + callback 114;
   ряд 628 + нижний паддинг секции 40 (#contacts{padding-bottom:40px}) = кадровые 668.
   Форма: Frame 868 944×376 (386 + 8 + 550) + Frame 976 56 при gap 16 → 124 + 40 + 448 = 612. ── */
@media (min-width:1024px){
  /* стопка → ряд: base.css .footer-top{display:flex;gap:8px} остаётся в силе */
  body #contacts .footer-top{flex-direction:row;gap:8px}
  /* карточка лабораторий тянется по остатку колонки, а не на всю ширину */
  body #contacts .labs-card{flex:1 1 0;width:auto}
  /* форма: те же две колонки, что на 1280 (перебиваем одноколоночный !important из responsive.css) */
  #apply .form-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr)!important}
  #apply .form-grid>.form-stack{width:auto!important}
}
@media (min-width:1024px) and (max-width:1024px){
  /* зелёная карточка: 944 − 8 − 546 = 390 (на 1280 канон 497 — это правило только для 1024).
     min-height 628: ряд держит карточка кадра (390×628), иначе высоту задаёт колонка площадок
     и блок выходит 626 — на 2 px ниже кадра. */
  body #contacts .footer-top .contacts-card{width:390px;flex:0 0 390px;padding:32px;min-height:628px}
  /* паддинг карточек площадок 32 (на 1280 канон 40): от него labs-card = 506 как в кадре */
  body #contacts .footer-top .labs-card{padding:32px}
  /* «Остались вопросы?» — строка: текст + кнопка вплотную к правому паддингу
     (кадр: кнопка x=8941 при правом крае контента 9134, 9134 − 193 = 8941).
     Фиксированные 294 + 32 + 193 в 482 не влезают (в кадре дети перекрыты на 5 px),
     поэтому зазор строки 0, а текст уступает кнопке: 482 − 193 = 289 вместо 294. */
  body #contacts .footer-top .callback{padding:24px 32px;flex-direction:row;gap:0;align-items:center;justify-content:space-between}
  body #contacts .footer-top .callback>div{flex:0 1 auto;width:294px;min-width:0;max-width:100%}
  body #contacts .footer-top .callback .btn{flex:0 0 auto}
}

/* ═══ ШАПКА И ИНТРО @375 — канон кадра Main_375 (493:7707), карточка t_648ba215 ═══
   ШАПКА — узел 1230:18922 (инстанс Header внутри 493:7707): 375×72, background
   #FFFFFF, flex column, gap 8, padding 16, align-items:center. Строка Frame 781
   343×40 (space-between). Видимые дети Frame 781:
     · логотип-локап 144×23.72 (вариант 221×36.4 — `visible:false`, не реализуем);
     · Frame 1091 136×40 = [Frame 816 80×36: корзина 36×36 + gap 8 + человек 36×36]
       + gap 16 + [Icons 40×40: Line 8 / Line 9 — ДВЕ линии 36×1.8 #009294, gap 8].
   Кнопка «Меню» (Button 126×44, текст «Меню» 16/20 w500 + Frame 785 24×24 с двумя
   белыми линиями) и лупа (Frame 786) в кадре `visible:false` — в мобильной шапке
   их нет; шапка = логотип + корзина + кабинет + бургер (проверено экспортом узла
   через images API: 2 полосы, подписей нет).
   Круги иконок: 36×36, r100, фон #DAE7F0, глиф #5A6E7C (корзина Union 17.4×16.4,
   человек Vector 12×16, штрих 1.5).
   Высота 72 = 16 + 40 + 16 — правим ТОЛЬКО переменную --header-mobile, чтобы
   .mobile-nav (inset: var(--header-mobile) 0 0) остался заподлицо с низом шапки.

   ИНТРО — узел 493:7715 (Benefits_2 screen): контейнер 343, padding 40px 0 0,
   gap 24. Канонный зазор «низ хиро → первый элемент интро» = 40: держим его
   паддингом самого .main-intro, а обёртку section обнуляем (responsive.css ≤767
   ставит ей 26px сверху и 24px на .main-intro — оба с !important).
   Лок-ап в мобильном кадре отсутствует (там Frame 982 со слоганом), слоган
   владелец снял 21.09.2026 — поэтому лок-ап остаётся и уменьшается по его
   просьбе: 343×146 → 300×128 (пропорция SVG 462×197 сохраняется).
   Абзац 343×126 (16/18 #5A6E7C) совпадает с кадром; ряд логотипов Frame 794
   343×28, gap 19.5, элементы 79×28 / 112×28 / 98×28 — доводим gap 20 → 19.5 и
   разрыв «абзац → ряд» 16 → 24 (это gap Frame 916). ── */
@media (max-width:767px){
  /* высота шапки: кадр 72 (16 + 40 + 16) */
  :root{--header-mobile:72px}
  /* Паддинг 16 добавлен 24.09 (17:5x), замечание владельца: «между главным меню и хиро
     блоком не должно быть такого большого разрыва». Было: шапка padding:0, строка 40 сидела
     на top 0 → под контентом 32 px пустоты и зазор «контент → хиро» читался как 32 вместо
     канонных 16 (кадр Header: 375x72, padding 16, строка 343x40 по центру = 16..56).
     box-sizing:border-box (глобальный `*`) держит высоту 72. */
  .site-header{height:var(--header-mobile,72px);padding:16px}
  /* `.container` внутри шапки считает width:calc(100% - 2*16) уже от content-box (343) и дал бы
     311 — строка обязана остаться 343 (x 16..359), поэтому width:100% компаундом. */
  .site-header .site-header__in{width:100%;height:40px;justify-content:flex-start;gap:0}
  .site-header .logo{width:144px!important}
  .site-header .logo img{width:144px;height:23.72px}
  /* правая группа: корзина + кабинет + бургер, канонный разрыв внутри 16 */
  .site-header .header-actions{display:flex;margin-left:auto;gap:8px;flex:0 0 auto}
  /* состав кадра: лупы в мобильной шапке нет; корзину снимает
     responsive.css ≤1023 (`.header-actions .circle-btn:nth-child(2){display:none}`) —
     возвращаем её (составной селектор (0,4,0) перебивает (0,3,0) независимо от порядка) */
  .site-header .header-actions .circle-btn[data-open-search]{display:none}
  .site-header .header-actions .circle-btn.cart-open-btn{display:grid}
  .site-header .header-actions .circle-btn,
  .site-header .header-actions .login{width:36px;height:36px;flex:0 0 36px;padding:0;border:0;
    border-radius:100px;background:#DAE7F0;color:#5A6E7C;display:grid;place-items:center;
    box-sizing:border-box;text-decoration:none;margin-left:0}
  /* audit-fixes держит .header-actions .login{margin-left:8px} — внутри группы он
     складывается с gap и даёт 16 между кругами (кадр: 8) */
  .site-header .header-actions .cart-open-btn img{width:17.4px;height:16.4px;display:block}
  .site-header .header-actions .cart-open-btn small:empty{display:none}
  .site-header .header-actions .login span{display:none}
  /* глиф «человек»: ассет `figma-user.png` — фирменный teal #009294 (он общий с
     десктопом, где «Войти» теал по дизайну), а кадр мобильной шапки требует
     серо-синий #5A6E7C (штрих 1.5). Подменяем источник ТОЛЬКО на мобильной
     ширине на вектор из Figma (узел `I1230:18922;1229:16728;1229:16226`) —
     сам PNG не трогаем, десктоп остаётся как был. Если `content:url()` не
     поддержан, браузер просто нарисует прежний PNG (мягкая деградация). */
  .site-header .header-actions .login img{width:12px;height:16px;display:block;
    content:url("/assets/img/icon-user-375.svg")}
  /* бургер: две полосы 36×1.8 #009294, gap 8, в поле 40×40 (кадр) */
  .site-header .burger{display:block;width:40px;height:40px;flex:0 0 40px;margin-left:16px;
    padding:0;background:none;position:relative}
  .site-header .burger:before,.site-header .burger:after{display:none}
  .site-header .burger span{display:block;position:absolute;left:2px;right:2px;top:15.1px;
    height:1.8px;background:#009294;border-radius:0;content:''}
  .site-header .burger span:after{content:'';display:block;position:absolute;left:0;right:0;
    top:8px;height:1.8px;background:#009294}

  /* интро: канонный зазор 40 от низа хиро, лок-ап 300×128, ряд логотипов по кадру */
  section:has(> .main-intro){padding-top:0!important}
  .main-intro{padding-top:40px!important}
  /* Центрирование лок-апа: img 300 px внутри колонки 343 прижата влево
     («блок интро смещён влево» — замечание владельца 24.09, 17:1x). Кадр даёт
     logo 300×128 по центру: x = 16 + (343−300)/2 = 37.5. `margin:0 auto`
     работает потому, что картинка уже `display:block` (правило выше, не в медиа).
     Ширину 300 и высоту 128 НЕ меняем — размер выбран владельцем. */
  .main-intro .intro-logo img{width:300px;height:auto;margin:0 auto}
  .main-intro .cert-row{gap:19.5px!important;margin-top:24px!important}
}

/* ── 768–1023 (планшет): та же канонная иконка меню — ДВЕ полосы.
   base.css рисует три полосы (::before 10 / span 18 / ::after 26, 2 px), header-icons.css их
   гасит и подставляет SVG `icon-menu.svg` 20 px — тоже ТРИ полосы; двухполосный вариант был
   только в блоке <=767, поэтому на планшетных ширинах владелец и видел «три полосы»
   (замер 24.09: 375 и 360 — 2 полосы, 800 — 3). Ставим те же полосы, что в мобильном каноне
   (1.8 px #009294, смещение второй на 8), в планшетном поле 38x38: полосы 34 px, центр 14.1. ── */
@media (min-width:768px) and (max-width:1023px){
  .site-header .burger{background:none}
  .site-header .burger:before,.site-header .burger:after{display:none}
  .site-header .burger span{display:block;position:absolute;left:2px;right:2px;top:14.1px;
    height:1.8px;background:#009294;border-radius:0;content:''}
  .site-header .burger span:after{content:'';display:block;position:absolute;left:0;right:0;
    top:8px;height:1.8px;background:#009294}
}

/* ═══ РИТМ ГЛАВНОЙ @375 — канон кадра Main_375 (493:7707), карточка t_a2584994 ═══
   Кадр: хиро `Main screen` 493:7708 (343×215) стоит вплотную (0) к контейнеру
   `Frame 1018` 523:8718 (343×6509.1 = интро 352.1 + 40 + `Frame 1003` 6117), внутри
   которого gap 40. То есть «40 от низа хиро» — это паддинг САМОГО .main-intro
   (правило выше, карточка t_648ba215), а межблочный зазор между островами 40.
   Проверка суммы: 72 (шапка) + 215 + 0 + 352.1 + 40 + 6117 = 6796.1 = высота кадра.
   Замер копии 24.09 (19:30, высота 7179): герой→интро 18, интро→числа 12, три
   перехода по 64, пресс-центр→форма 36, форма→контакты 76, контакты→подвал 12.
   Источники: responsive.css ≤767 `.hero{padding-bottom:18px}`;
   `section:has(>.main-intro){padding:26px 0 6px}` + `+ .section{margin-top:6px}`;
   `.section+.section{margin-top:24px}` поверх base.css:147 `padding-block:20px`;
   `.section-lg#apply{padding:16px 0!important}`; base.css:79 `#contacts{margin-top:60px}`
   и `.section{padding:12px 0}` на #contacts.
   Приводим к канону: у островов главной 20+20 = 40 и margin-top 0; интро-секция
   держит только нижние 20 (верхние 20 отданы «числам» → 40); форма 20/20;
   контакты margin-top 20 и padding-bottom 40.
   Почему в этом файле: он грузится ПОСЛЕ responsive.css и уже держит канон ≤767
   с !important. Правила скоупим (список островов главной + :has-соседство), чтобы
   не задеть /clients/, /career/, /services/, где те же острова и тот же `.hero`.
   Правки responsive.css/base.css для этого не нужны: пары «цифры→баннер» (t_8059b033)
   и «карьера→награды» (#awards, t_53a521dd) остаются как были и совпадают с новыми. ── */
@media (max-width:767px){
  /* Все правила блока — ТОЛЬКО для главной: `.main-intro` есть ровно на одной
     странице сайта (проверено на живом 24.09.2026: /, /services/, /clients/,
     /career/, /about/, /tools/ — одно вхождение, на /). Без этого скоупа те же
     острова на /clients/ (cta-water, teal-block), /career/ и /about/
     (awards-widget) и формы #apply/#contacts на других страницах получили бы
     другие зазоры без своего канонного замера — эти страницы ведёт группа 2
     аудита (карточка t_57bdcb23), вопрос «тот же ритм по всему сайту» из
     отчёта группы 1 остаётся открытым. */
  /* герой→интро = 0: кадр ставит интро вплотную к низу хиро, лишние 18 px
     (responsive.css ≤767 `.hero{padding-bottom:18px}`) уезжали в зазор */
  body:has(.main-intro) main>.hero{padding-bottom:0!important}

  /* острова главной: 20 снизу + 20 сверху = 40 и никакого margin-top:24px
     (`.section+.section` из responsive.css ≤767). У «чисел» base.css:148 держит
     `padding-top:0` — это нужно на 1280/1024, где интро и «числа» идут вплотную;
     на 375 канон 40, поэтому верхние 20 здесь возвращаем. */
  body:has(.main-intro) main>.section:has(>.container.stats-panel),
  body:has(.main-intro) main>.section:has(>.container.cta-water),
  body:has(.main-intro) main>.section:has(>.container.teal-block),
  body:has(.main-intro) main>.section:has(>.container.career-banner),
  body:has(.main-intro) main>.section:has(>.container.awards-widget),
  body:has(.main-intro) main>.section:has(>.container.soft-block--blue){padding-block:20px!important;margin-top:0!important}

  /* интро: у секции только нижние 20, верхние 20 отдают «числа» → интро→числа 40;
     собственный паддинг .main-intro (40 сверху) не трогаем */
  body:has(.main-intro) section:has(>.main-intro){padding:0 0 20px!important}
  body:has(.main-intro) section:has(>.main-intro)+.section{margin-top:0!important}

  /* форма: 20/20 (было 16/16) → пресс-центр→форма 40 */
  body:has(.main-intro) #apply.section-lg{padding:20px 0!important}
  /* контакты: 20 сверху (форма→контакты 40) и 40 снизу (контакты→подвал 40) */
  body:has(.main-intro) #contacts{margin-top:20px!important;padding-bottom:40px!important}
}

/* ── ГЛАВНАЯ @375: форма #apply 978→1008, пресс-центр 474→462 (карточка t_c00dd3ef) ───────────
   Кадр `493:7883` Form 343×1008 = голова 114 + 24 + форма 870:
     голова (`Frame 788`) = h2 26 + 16 + подзаголовок 343×72 (fs 16 / lh 18 = 4 строки);
     `Form` 870 = `Frame 868` 692 + 16 + `Frame 976` 162;
       `Frame 868` 692 = `Frame 827` 376 (шесть полей 343×56 с зазором 8) + 8 + `Frame 867` 308
                         (поле «Сообщение» 200 + 8 + загрузка файла 100);
       `Frame 976` 162 = чекбоксы 82 + 24 + кнопка 56.
   Живой (замер 24.09.2026, копия = прод): 978 — подзаголовок 90 (5 строк), первое поле-селект
   68, поле «Сообщение» 140. Причина: подзаголовок несёт три `<br/>`, а кадр — один (перед
   телефоном), и 68/140 — канон /career/ (`560:11624`, правило `body #apply .form-stack>select
   .field:first-child` в audit-fixes.css и `#apply textarea.field` в responsive.css).
   Каноны страниц разные, поэтому все правки помечены `body:has(.main-intro)` — это признак
   главной (fb-canon уже использует его для `#apply.section-lg`), /career/ и /clients/ не затронуты.
   Пресс-центр `493:7873` News 343×462 = пад 24/16/24/16 + `Frame 1017` 334 + 24 + кнопка 157×56:
     `Frame 1017` 334 = заголовок 26 + 24 + карточки 260 + 16 + точки 8.
   Живой 474: карточка 300 (`min-height` из audit-fixes) и нулевой зазор после заголовка.
   Замер после правки: пресс-центр 343×462, `#apply .container` 343×1008 (голова 114, форма 870),
   грид 692, стек 376, селект 56, «Сообщение» 200, hScroll=false, запись в контейнере ≤343. ── */
@media (max-width:767px){
  /* пресс-центр: карточка 239×260 (кадр `Cards` `493:7878`), паддинги карточки 24/20 по кадру,
     зазор «заголовок → карточки» 24, «карточки → точки» 16 (было 0 и 12 → 474 вместо 462) */
  /* паддинги карточки — кадровые `Cards` `493:7878` (pT24 pB24 pL20 pR20; у живого
     были 20 со всех сторон): дата и ссылка «Подробнее» встают как в кадре */
  body:has(.main-intro) .soft-block--blue .news-card{padding:24px 20px!important;
    min-height:260px!important}
  /* скругление карточки 16 по кадру `493:7878` (`Cards`, r16); базовое правило
     audit-fixes.css:2163 даёт 24 вне медиазапроса — на 1024/1440 кадр и правда 24,
     поэтому перебиваем только <=767 и только на главной */
  body:has(.main-intro) .soft-block--blue .news-card{border-radius:16px!important}
  body:has(.main-intro) .soft-block--blue .section-title{margin-bottom:24px!important}
  /* РАЗДЕЛИТЕЛЬ под заголовком «Пресс-центр» (решение владельца 28.09.2026, вариант 1,
     карточка t_a75f1229 п.11). В кадре `493:7873` линии НЕТ — сумма зазоров
     26+24+260+16+8=334 сходится без неё; это осознанное отклонение от макета по просьбе
     владельца. Линия нарисована псевдоэлементом В СЕРЕДИНЕ существующего зазора 24,
     поэтому высота блока остаётся канонной 462 и ничего не сдвигается.
     Убрать/сменить цвет — удалить или поправить background ниже. */
  body:has(.main-intro) .soft-block--blue .section-title{position:relative}
  body:has(.main-intro) .soft-block--blue .section-title::after{content:'';position:absolute;
    left:0;right:0;bottom:-12px;height:1px;background:#009294;pointer-events:none}
  body:has(.main-intro) .soft-block--blue .dots{margin-top:16px!important}

  /* форма: подзаголовок кадра — сплошной текст с одним переносом перед телефоном; лишний
     `<br/>` после «трудоустройства» давал пятую строку (90 против 72) */
  body:has(.main-intro) #apply .form-head p br:first-of-type{display:none!important}
  /* первое поле-селект 56 (в кадре все шесть `Text Field` 343×56) и «Сообщение» 200 */
  body:has(.main-intro) #apply .form-stack>select.field:first-child{height:56px!important;
    min-height:56px!important}
  body:has(.main-intro) #apply textarea.field{height:200px!important;min-height:200px!important}

  /* ── ФОРМА @375, карточка t_e87e94de (кадр Form `493:7707` строка 5667 выгрузки) ──
     Кнопка «Отправить» — по центру: в кадре Button 141×56 стоит в Frame 977
     (343×82, align-items: center), а Frame 976 сам 343 с align-items: center —
     responsive.css ставит кнопке grid-column:1/-1 (вся строка), поэтому центр
     задаём justify-content на .form-actions. */
  body:has(.main-intro) #apply form[data-demo-form]>.form-actions{justify-content:center!important}
  /* плюс у «Загрузите файл» — канон узла владельца 493:7900: тонкий крест 1×14/1×13,
     лучи r10, цвет #D9D9D9 в Union, но Union целиком белый (fills White) на круге
     #85BAAF; прежние бары 3×24/24×3 были толще и длиннее кадра (Union 13×14 в круге 32). */
  body:has(.main-intro) #apply .upload-badge::before{width:1px!important;height:14px!important;
    border-radius:10px!important;left:calc(50% - .5px)!important;top:calc(50% - 7px)!important}
  body:has(.main-intro) #apply .upload-badge::after{width:13px!important;height:1px!important;
    border-radius:10px!important;left:calc(50% - 6.5px)!important;top:calc(50% - .5px)!important;
    transform:none!important}
}

/* ═══ ЧИСЛА, БАННЕР И УСЛУГИ @1024 — канон кадра Main_1024 (секция `Screens` 315:5461),
   карточка t_e730ce5d; числа — docs/audit/group-main-20260924.md (§2 блоки 3–5).
   Отчёт: docs/audit/home-main-1024-numbers-banner-services-20260924/REPORT.md.

   Дефект: ровно на ширине 1024 эти три блока жили по десктопным пропорциям 1280 — сетки
   оставались трёхколоночными/четырёхколоночными, а тексты при 944 ширине переносились
   на строки больше, поэтому блоки вырастали на +88 / +57 / +16 px.

   Кадр 1024:
     · Numbers `315:5462` 944×1026: панель pad 40/32, заголовок 258×68, grid `Frame 920`
       880×846 = 233 + 8 + 364 + 8 + 233; ряды 1 и 3 — три карточки 288×233 (pad 40/24/24/24,
       gap 24, значение 50/35, подпись 14/16); ряд 2 — медиа `Frame 921` 592×364 + зазор 32 +
       карточка года `Cards` 315:5473 256×275 по правому краю (pad 40/0/24/0, r32, значение
       50/35, подпись 16/18, кнопка 252×56), выровнена по центру ряда (y кадра +44.5).
     · Banner `315:5482` 944×398: копия `Frame 976` 494×318 в 32/40 от угла, h2 494×170 (32/34),
       зазор 40, текст 406×36 (20/22) + 16 + кнопка 205×56.
     · Services `315:5492` 944×762: заголовок 880×34, `Frame 803` 880×616 = grid 880×536
       (две строки карточек по 264: pad 20/16, gap 16, h3 16/18, подпись 12/14) + 24 + кнопка.

   Живое было 1114 / 455 / 778: карточки чисел 282/282/300 высотой 262 и 292 (значение 60/60,
   подпись 16/18 — «180 000+» переносилось, подпись ряда 3 давала 8 строк), медиа 572, год
   300×364; баннер 455 с копией 606 от движка 1280; карточки услуг 292 (pad 24/20, h3 20/22) —
   описание вылезало за карточку на 28 px и обрезалось. Стало 1026 / 398 / 762, обрезок нет.

   Скоуп: `@media(min-width:1024px) and (max-width:1024px)` — ровно эта ширина, 1023− и 1025+
   не тронуты (A/B одной загрузкой). `body:has(.main-intro)` — только главная: те же блоки на
   /about/ (там кадр About_1024 даёт Numbers 1033), /clients/, /career/, /contacts/ остаются
   как были. Файл идёт последним по каскаду, поэтому канон 1024 возвращаем здесь
   (base.css и responsive.css не понадобились). ── */
@media (min-width:1024px) and (max-width:1024px){
  /* числа: колонки кадра, ряд карточек 233, медиа 592, карточка года 256×275 по правому краю */
  body:has(.main-intro) .stats-panel .stats-grid{grid-template-columns:288px 288px 288px}
  body:has(.main-intro) .stats-panel .stats-grid>.stat{min-height:233px;height:auto}
  body:has(.main-intro) .stats-panel .stats-grid>.stat-media{width:592px;max-width:none;height:364px;min-height:364px}
  body:has(.main-intro) .stats-panel .stats-grid>.stat-year{width:256px;height:auto;min-height:0;
    justify-self:end;align-self:center;padding:40px 0 24px;border-radius:32px}
  /* значение 50 с кадровой строкой 35 (в кадре бокс значения 35 при кегле 50), подпись 14/16 */
  body:has(.main-intro) .stats-panel .stat .stat-value{font-size:50px!important;line-height:35px!important}
  body:has(.main-intro) .stats-panel .stat:not(.stat-year) .stat-text{font-size:14px!important;line-height:16px!important}

  /* баннер: высота кадра 398, копия 494 в 32/40, h2 32/34 с зазором 40, кнопка 205 */
  body:has(.main-intro) .cta-water{height:398px}
  body:has(.main-intro) .cta-water__copy{top:40px;left:32px;width:494px;max-width:494px;height:auto}
  body:has(.main-intro) .cta-water__copy h2{width:494px;max-width:494px;font-size:32px!important;
    line-height:34px!important;margin:0 0 40px}
  body:has(.main-intro) .cta-water__copy .muted{font-size:20px;line-height:22px;margin:0 0 16px}
  body:has(.main-intro) .cta-water .btn{width:205px;min-width:205px;max-width:205px;padding:0 24px}

  /* услуги: высота блока 762, карточка 264 по кадру (pad 20/16, gap 16, h3 16/18, p 12/14),
     кнопка через 24 после грида (в разметке у .center инлайновый margin-top:18px) */
  body:has(.main-intro) .teal-block{height:762px}
  body:has(.main-intro) .teal-block .service-grid .service-card{height:264px;min-height:264px;
    padding:20px 16px;gap:16px}
  body:has(.main-intro) .teal-block .service-grid .service-card h3{font-size:16px;line-height:18px}
  body:has(.main-intro) .teal-block .service-grid .service-card p{font-size:12px;line-height:14px}
  body:has(.main-intro) .teal-block>.center{margin-top:24px!important}
}
/* === t_2034dd01: /contacts верх — сдвиг, page-head h=0, табы не pill ===
   Аудит: docs/audit/contacts-1280-20260924, contacts-375-20260924.
   Блок Contacts (зелёная карточка + лаборатории) совпал с кадром 1:1 — НЕ ТРОГАТЬ.
   Правки только для верхней части страницы (кадра нет, система сайта = канон).

   1) СДВИГ +20/+4: .content-section имеет padding:40px 20px (audit-fixes.css:1076),
      тогда как контейнер блока контактов использует --fb-gutter (40px desktop / 16px mobile).
      Заголовок и табы начинаются на 59.5 (1280) / 20 (375) — на +20/+4 правее сетки.
      Лечим: .content-section на /contacts берёт padding из --fb-gutter.

   2) PAGE-HEAD h=0: .page-head .crumbs абсолютно позиционированы (audit-fixes.css:996),
      сам .page-head не имеет контента в потоке → h=0. На /contacts нет hero-баннера,
      поэтому крошки не видны (vision подтверждает: «хлебных крошек нет»).
      Лечим: на /contacts .page-head получает высоту крошек (46px) + отступ снизу.

   3) ТАБЫ не pill: инлайн <style> в content ресурса 6 задаёт underline-табы
      (r0, border-bottom:3px, fs15, прозрачный фон), тогда как таб сайта = pill
      (.rubric: r100, 15/500, border 1px #85BAAF, bg #fff, active bg #009294).
      Канон: кадр 604:10219 (Main_375) и компонент Design System 315:5228.
      Лечим: перебиваем инлайн <style> каскадом (body:has для /contacts + .contact-tabs__btn).

   Скоуп: только /contacts (body, на котором есть .content-section с .contacts-title).
   Блок Contacts (section#contacts .footer-top) НЕ затронут — правила ниже не трогают
   .contacts-card, .labs-card, .callback.
*/

/* 1) Сдвиг: .content-section на /contacts — 0 px L/R (контейнер уже max-width:1201
   с margin:auto, как section#contacts .container). Убираем padding L/R, оставляем
   вертикальный 40. Заголовок и табы встанут на x контейнера = x зелёной карточки.
   На <1280px контейнер .content-section шире viewport-кэша (нет max-width-центрирования),
   поэтому возвращаем gutter (16px на ≤767, 40px на 800-1279). */
body:has(.contacts-title) .content-section {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
@media (max-width: 1279px) {
  body:has(.contacts-title) .content-section {
    padding-left: var(--fb-gutter, 40px) !important;
    padding-right: var(--fb-gutter, 40px) !important;
  }
}

/* 2) page-head: на /contacts нет hero, крошки видны — даём высоту + отступ */
body:has(.contacts-title) .page-head {
  height: auto !important;
  min-height: 46px !important;
  padding-top: 20px !important;
  margin-bottom: 0 !important;
}
/* крошки: из absolute (hero-стиль) → static, в потоке */
body:has(.contacts-title) .page-head .crumbs {
  position: static !important;
  transform: none !important;
  left: auto !important;
  top: auto !important;
  width: auto !important;
  max-width: 100% !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin: 0 !important;
}

/* 3) Табы → pill (канон .rubric: r100, 15/500, border 1px #85BAAF) */
body:has(.contacts-title) .contact-tabs__nav {
  border-bottom: none !important;
  gap: 10px !important;
  margin-bottom: 24px !important;
  flex-wrap: wrap !important;
}
body:has(.contacts-title) .contact-tabs__btn {
  border: 1px solid #85BAAF !important;
  border-radius: 100px !important;
  border-bottom: 1px solid #85BAAF !important;
  background: #fff !important;
  padding: 0 18px !important;
  min-height: 40px !important;
  font-size: 15px !important;
  font-weight: 500 !important;
  line-height: 18px !important;
  color: #009294 !important;
  margin-bottom: 0 !important;
  transition: background .2s, border-color .2s, color .2s !important;
}
body:has(.contacts-title) .contact-tabs__btn:hover {
  background: #CCF2EA !important;
  border-color: #009294 !important;
  color: #009294 !important;
}
body:has(.contacts-title) .contact-tabs__btn.active {
  background: #009294 !important;
  border-color: #009294 !important;
  color: #fff !important;
  border-bottom-color: #009294 !important;
}

/* Mobile: pill 36px / 14px / gap 8 (канон .rubric ≤767) */
@media (max-width: 767px) {
  body:has(.contacts-title) .contact-tabs__nav {
    gap: 8px !important;
  }
  body:has(.contacts-title) .contact-tabs__btn {
    min-height: 36px !important;
    padding: 0 14px !important;
    font-size: 14px !important;
    line-height: 16px !important;
  }
}

/* ═══ /clients/ @375 — «Почему нам доверяют» лента по кадру Clients_375 1255:18650.
   Канон: Numbers 343×360, pad 24/16, r16, градиент #019294→#FEFFFF, gap 16.
   H2 24/26 #FFFFFF. Внутри Frame 1015 (486×288, gap 24) = H2 + Frame 918 (рейл 486×238,
   HORIZONTAL gap 8 — 9 карточек 239×238, из них 6 «доверия» + 3 «strip» с иконками).
   Пейджер Button 1255:18656: 311×8, 6 кружков 8×8, gap 6, активный #85BAAF, прочие #CCF2EA.
   Живое было: столбик 6 карточек + вертикальный strip = 1514 px (канон 360).
   Карточка в кадре: pad 16/16/24/16, r16, gap 12; num 40/42, title 20/22, p 14/16, badge 14/18.
   Strip-карточки в кадре: pad 24, r24, gap 16, иконка 40×40, title 20/22, sub 14/16. ── */
@media (max-width:767px){
  body:has(.trust) .trust{padding:24px 16px!important;gap:16px!important;border-radius:16px!important;
    background:linear-gradient(180deg,#019294 0%,#FEFFFF 100%)!important}
  body:has(.trust) .trust h2{font-size:24px!important;line-height:26px!important}
  /* Flatten trust-body into a horizontal scroll rail */
  body:has(.trust) .trust-body{display:flex!important;flex-direction:row!important;gap:8px!important;
    overflow-x:auto;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;scroll-snap-type:x mandatory;
    margin-left:-16px;margin-right:-16px;padding-left:16px;padding-right:16px}
  body:has(.trust) .trust-body::-webkit-scrollbar{display:none}
  /* Rows become flat — their grid is irrelevant in rail mode */
  body:has(.trust) .trust-row{display:contents!important}
  /* Cards: 239px fixed width, canon pad/radius */
  body:has(.trust) .trust-card{flex:0 0 239px!important;width:239px!important;
    min-width:239px!important;scroll-snap-align:start;
    padding:16px 16px 24px!important;border-radius:16px!important;gap:12px!important}
  /* Strip: break into 3 individual rail items (canon 375: Cards 18777/18784/18791) */
  body:has(.trust) .trust-strip{display:contents!important}
  body:has(.trust) .trust-strip__items{display:contents!important}
  body:has(.trust) .trust-strip__item{flex:0 0 239px!important;width:239px!important;
    min-width:239px!important;scroll-snap-align:start;
    background:#fff;border-radius:24px;padding:24px;
    display:flex;flex-direction:column;gap:16px}
  /* Strip item typography */
  body:has(.trust) .trust-strip__title{font-size:20px!important;line-height:22px!important}
  body:has(.trust) .trust-strip__sub{font-size:14px!important;line-height:16px!important}
  body:has(.trust) .trust-strip__icon{width:40px!important;height:40px!important;flex:0 0 40px!important}
  /* Typography inside cards (canon 375) */
  body:has(.trust) .trust-card__num{font-size:40px!important;line-height:42px!important}
  body:has(.trust) .trust-card__title{font-size:20px!important;line-height:22px!important}
  body:has(.trust) .trust-card p{font-size:14px!important;line-height:16px!important}
  body:has(.trust) .trust-badge{font-size:14px!important;line-height:18px!important}
  /* Dots pager — JS creates the element, CSS styles it */
  body:has(.trust) .trust-dots{display:flex;justify-content:center;align-items:center;
    gap:6px;width:100%;height:8px;margin-top:0}
  body:has(.trust) .trust-dots button{flex:0 0 8px;width:8px;height:8px;min-width:8px;
    border:0;padding:0;border-radius:100px;background:#CCF2EA;cursor:pointer;
    appearance:none;-webkit-appearance:none}
  body:has(.trust) .trust-dots button.active{background:#85BAAF}
}

/* t_b4237601: /clients/ FAQ @375 — Figma 1255:18747 (Benefits) 343x842,
   pad 24/16 r=16, heading 24/26, 6 cards 311x... sum 718 (122/140/122/140/86/68),
   card pad 16, font 16/18, answer 14/16, icon 32x32.
   Desktop values (40/32, r24, h2 32/34, card pad 24, font 20/22, icon 48) come from
   audit-fixes.css and must be overridden here (fb-canon loads last). */
@media(max-width:767px){
  .faq{padding:24px 16px!important;border-radius:16px!important}
  .faq h2{font-size:24px!important;line-height:26px!important;margin:0 0 24px!important}
  .faq-grid{grid-template-columns:1fr!important;gap:8px!important}
  .faq-item{border-radius:16px!important}
  .faq-item button{padding:16px!important;gap:16px!important;
    font-size:16px!important;line-height:18px!important;font-weight:500!important}
  .faq-answer{padding:0 16px 16px!important;font-size:14px!important;line-height:16px!important}
  .faq-item button:after{flex:0 0 32px!important;width:32px!important;height:32px!important;
    background-size:16px 16px!important}
}/* ═══ ГЛАВНАЯ @1440/1280 — ширины блоков, герой, интро, числа (карточка t_1bdabb3d, батч-7) ═══
   Канон-кадры Figma z51MVZ2MBMlTUIZd8SjVUo:
     1444:11905 Main_1440 (Frame 444:11917 hero 1200x845, Numbers 444:11920),
     602:9323  Main_1280 (hero 1200x845, Numbers 602:9821 1199x1040),
     602:9821 интро-сетка 1199: 32 + 462 + 87 + 586 + 32.

   X1 (Ширины): на живом 1440 панель «в цифрах» 1201 и блоки 1201 — это ширина
   контейнера 1280-канона; кадр 1444:11905 держит все острова 1440 (панель
   «в цифрах» 1376 = 1440 − 32×2). Контейнер не растёт с шириной — правим не
   контейнер (он один на сайт), а скоуп на главной ≥1301: боксы островов
   (stats-panel, cta-water, career-banner, awards-widget, soft-block--blue,
   form-grid) тянутся на всю ширину контейнера, а контейнер на ≥1301 получает
   max-width 1440 с паддингами 32 (кадровые поля). Герой-бокс 1200 = 1440 − 2×120
   поля кадра 444:11917 — оставляем центрированный контейнер 1200 только у хиро.
   Форма (#apply) на 1440 уже 1440 — кадр Form 1440x…, полная ширина верна.

   G1 (Герой): канон 845 (1444:11917 и 602:9323), живое 618 — фиксированная
   высота из audit-fixes.css. Герой-картинка/видео — cover, растёт с боксом.
   Скоуп главной: body:has(.main-intro).

   G2 (Затемнение): канон 444:11920 — заливка linear-gradient(180deg,
   rgba(0,22,34,.55) 0%, rgba(0,22,34,0) 100%) БЕЗ blend-режима, живое —
   90deg/normal. Направление и режим меняются на кадровые; размер и
   наложение остаются (слои совпадают).

   N1 (Карточка «15 лет»): кадр 602:9821 — компактная карточка 352×200
   (пад 40/24/24/24, значение 50/35, подпись 14/16, кнопка 205×56 внизу),
   живое — 364 (растянута на высоту ряда 2, где медиа 364).
   Правим align-self:center + собственную высоту.

   N3 (Числа @375): сетка — горизонтальная лента (scroll-snap, gap 8),
   карточки 239×210 r16 (живое совпадает) — не трогаем.

   Скоуп: body:has(.main-intro) — признак главной (fb-canon выше), другие
   страницы со .stats-panel (/about/ — свой кадр) не затронуты.
── */

/* X1: на ≥1301 все острова главной — полная ширина кадра (панель «в цифрах» 1440−64=1376) */
@media (min-width:1301px){
  body:has(.main-intro) main>.section .container{max-width:none}
  body:has(.main-intro) main>.section .container{padding-left:32px;padding-right:32px}
  /* хиро-бокс на 1301–1440 держим 1201, как кадр Main 1280 (182:4143 «Main screen» 1201×618).
     Не 1200: канон именно 1201. */
  body:has(.main-intro) main>.hero .container{max-width:1201px;padding-left:0;padding-right:0}
  /* форма — кадр держит головку 588 по центру, грид на всю ширину поля */
  body:has(.main-intro) main>.section#apply .form-head{margin-left:auto;margin-right:auto}
}
/* G1-fix (28.09.2026): возвращаем канон высоты героя. Регрессия от 0c39e63 (25.09) —
   там 845 применили с min-width:1280px и ссылались на узлы 602:9323 (нет в файле)
   и 444:11917 (это «Benefits_2 screen» 1440×384, НЕ хиро). Итог: на 1280–1440 герой
   стал 845 вместо канонных 618 — «сбился размер хиро-модуля».
   Канон (проверено Figma API по файлам QD8WCHpf4kOtBZZhrIkyeS / LziX2VkoH2YZQzHUbzLJc5 /
   z51MVZ2MBMlTUIZd8SjVUo):
     Main 1280  182:4143 «Main screen» 1201×618   → 1280–1440: height 618 (base.css)
     Main 1440  444:11910 «Main screen» 1440×845   → ≥1441: height 845, ширина 1440
     Main_1024  315:5391 «Main screen»  944×618    → 768–1279: 618 (base.css)
     Main_375   493:7708 «Main screen»  343×215    → ≤767: 215 (responsive.css)
   Текст: кадр 1440 Frame 788 rel@(48,631) при 845 → bottom 48, left 48;
          кадр 1280 Frame 788 rel@(49,404) при 618 → bottom 48, left 49 (base.css). */
@media (min-width:1441px){
  /* подложка хиро в кадре 1440 — на всю ширину страницы (left:calc(50% - 720px)) */
  body:has(.main-intro) main>.hero .container{max-width:1440px;padding-left:0;padding-right:0}
  body:has(.main-intro) .hero-box{height:845px}
  body:has(.main-intro) .hero-box .hero-copy{left:48px;top:auto;bottom:48px}
}
/* G2: затемнение — направление 180deg, без blend-режима */
body:has(.main-intro) .hero-box:after{background:linear-gradient(180deg,rgba(0,22,34,.55) 0%,rgba(0,22,34,0) 100%);background-blend-mode:normal}

/* N1: «15 лет» — компактная карточка 352×200 (602:9821 ряд 3) */
@media (min-width:1280px){
  body:has(.main-intro) .stats-panel .stat-year{align-self:center;height:200px;min-height:0;
    padding:24px;display:flex;flex-direction:column;justify-content:space-between}
  body:has(.main-intro) .stats-panel .stat-year .btn{margin-top:0}
}
/* ═══ ГЛАВНАЯ — батч-карточка t_1bdabb3d (7 групп дефектов из FIXSPEC home-20260924) ═══
   Канон-кадры файла z51MVZ2MBMlTUIZd8SjVUo: Main_1440 (444:11905), Main_1280 (182:4146),
   Main_1024 (315:5461), Main_375 (493:7707). Приёмка — замер до/после (fb_measure_home.py).
   Живые замеры до (25.09 00:28, копия=прод): /tmp/batch-t1bdabb3d/before-*.json. ──── */

/* ── (1) РИТМ ДЕСКТОПА R1/R2/R3 ──
   Замер 25.09 до правок: все десктопные зазоры уже 60/0 (правки t_a2584994 и др.) —
   блок ритма закрыт базлайном, правил не требуется. Проверка after обязательна. ── */

/* ── (2) ГЕРОЙ G2 — затемнение ──
   G1 (высота) исправлен выше: канон 618 на 1280–1440, 845 на ≥1441.
   Прежняя запись «кадр 444:11917 hero 1200×845» ошибочна: 444:11917 — это
   INSTANCE «Benefits_2 screen» 1440×384, а не хиро (проверено Figma API 28.09.2026). ── */
@media (min-width:1280px){
  /* G2 (правка 29.09.2026, запрос владельца): затемнение хиро — ПЛАВНЫЙ вертикальный
     градиент на всю высоту блока. Кадровый вариант (полоса 343px снизу + multiply)
     давал жёсткую горизонтальную границу посреди блока — владелец счёл дефектом. */
  body:has(.main-intro) .hero-box:after{height:auto;top:0;bottom:0;
    background:linear-gradient(180deg,rgba(0,22,34,0) 0%,rgba(0,22,34,.10) 45%,rgba(0,22,34,.55) 100%);
    mix-blend-mode:normal;background-blend-mode:normal;opacity:1}
}
/* G3: радиус героя @375 14→16 (кадр 493:7708 r16) */
@media (max-width:767px){
  body:has(.main-intro) .hero-box{border-radius:16px!important}
}

/* ── (3) X1: 1301–1440 рваный правый край ──
   Кадр 444:11916 (Main_1440): ВСЕ блоки 1440 шириной, поля 56. fb-canon-20260914.css
   уже растянул .stats-panel и .main-intro; добираем остальные острова главной. ── */
@media (min-width:1301px){
  body:has(.main-intro) .cta-water,
  body:has(.main-intro) .teal-block,
  body:has(.main-intro) .career-banner,
  body:has(.main-intro) .awards-widget,
  body:has(.main-intro) .soft-block{width:min(1440px,100%);padding-left:56px;padding-right:56px}
}

/* ── (4) N1: «15 лет» — компактная карточка 352×200, центр ряда, радиус 32 (182:4171) ── */
@media (min-width:1280px){
  body:has(.main-intro) .stats-panel .stat-year{width:352px;flex:0 0 352px;height:200px;min-height:0;
    align-self:center;border-radius:32px;padding:24px;display:flex;flex-direction:column;
    justify-content:space-between}
  body:has(.main-intro) .stats-panel .stat-year .btn{margin-top:0}
}

/* ── (5) B1: баннер — матовая панель + приглушённое фото (225:3215) ──
   Кадр: фото opacity .72; Rectangle 3975894 543×509 #F8FAFC с BACKGROUND_BLUR 3.1
   под текстом. Живой: ::after — градиент 90deg на всю ширину, blur none, фото op 1.
   .cta-water > img — единственный img (base.css:56), панель = тот же ::after. ── */
@media (min-width:1280px){
  body:has(.main-intro) .cta-water img{opacity:.72}
  /* правка 03.10.2026 (владелец: «изображение должно идти на весь блок, а не на половину»):
     в кадре 225:3214 вуаль — Rectangle 3975894 543×509 #F8FAFC с ВЕРТИКАЛЬНЫМ градиентом
     (α1 сверху → α0 снизу) и BACKGROUND_BLUR 3.1, то есть мягкая засветка левого верхнего
     угла под текстом, а не непрозрачная панель. Прежняя панель rgba(…,.98) шириной 62%
     глушила больше половины фото — кадр читался только справа. 543/1200 = 45.25%. */
  body:has(.main-intro) .cta-water:after{width:45.25%;max-width:45.25%;height:509px;left:0;top:0;
    right:auto;bottom:auto;background:linear-gradient(180deg,rgba(248,250,252,1) 0%,rgba(248,250,252,0) 100%);
    backdrop-filter:blur(3.1px);-webkit-backdrop-filter:blur(3.1px);
    /* правка 03.10.2026 (владелец: «виден переход между правой и левой»): прямоугольник
       вуали давал жёсткий вертикальный край на 45.25% (внутри засветка, снаружи нет) —
       читалось как тональная граница. Растворяем край маской: сила вуали (и blur)
       сходит на нет по горизонтали от 55% к 100% её ширины. */
    -webkit-mask-image:linear-gradient(90deg,#000 0%,#000 55%,rgba(0,0,0,0) 100%);
    mask-image:linear-gradient(90deg,#000 0%,#000 55%,rgba(0,0,0,0) 100%)}
}

/* ── (5b) X1-fix .cta-water (03.10.2026): на ≥1301 остров получает паддинги контейнера
   (32/56) и фото внутри сжимается до 1376 при острове 1440 — по 32px фона блока по бокам.
   В кадре фото == блок (1200×454 в 1200×455), поэтому острову возвращаем бокс без паддингов;
   текст держит свои left:32px (абсолютное позиционирование от паддинг-бокса). ── */
@media (min-width:1301px){
  body:has(.main-intro) main>.section>.container.cta-water{padding-left:0;padding-right:0}
}

/* ── (6) S1: внутренний зазор карточки услуг 12→24 (182:4187) ── */
@media (min-width:1280px){
  body:has(.main-intro) .service-card{gap:24px}
}
/* ═══ ГЛАВНАЯ @1024/375 — батч t_1bdabb3d, часть 2 (интерьеры блоков) ═══ */

/* ── (7) B2: баннер @1024 — копия 494, H2 32/34 (кадр 315:5482). ЧАСТИЧНО сделано
   в fb-canon (правило t_e730ce5d ниже по файлу, высота 398 уже ок). Добираем кегль. ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .cta-water__copy h2{font-size:32px;line-height:34px}
}

/* ── (8) S2: карточки услуг @1024 — паддинг 20/16, высота 264 (кадр 315:5495) ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .service-card{padding:20px 16px;height:264px;min-height:264px;gap:16px}
  body:has(.main-intro) .service-card h3{font-size:16px;line-height:18px}
  body:has(.main-intro) .service-card p{font-size:12px;line-height:14px}
}

/* ── (9) I1: интро @1024 — правая колонка 487, pad 100/32, высота 375.9 (кадр 315:5399) ──
   Части 8-10 (t_1bdabb3d): раскладка кадра 1024 уточнена по Figma API (узлы 315:5399/5400/5404):
   слева — девиз «Достоверность./Своевременность./Надёжность.» 361×142 (Frame 982), справа —
   Frame 916 487×175.9 (абзац 487×110 18/22 + 24 + сертификаты 487×41.9). Лок-ап-картинки
   в кадре 1024 НЕТ. Секция = 100 (pad) + 142/175.9 (ряд) + 100 (pad) ≈ 375.9 — высоту
   держим через паддинги, а не фикс height (фикс 375.9 обрезал ряд и давал наезд
   «в цифрах» на сертификаты). Часть 10 ниже (её правило) — финальная раскладка. ── */

/* ── (10) N2: числа @1024 — значение 50/50, подпись 14/16 (частично сделано t_e730ce5d:
   панель 1026, карточка 288×233, медиа 592, год 256×275 — ок). Кегль значения 50
   с кадровой строкой 35 (правило t_e730ce5d уже ставит 50/35) — сверка after. ── */

/* ── (11) K1: контакты @1024 строка 390+8+546 (кадр 315:5572). Уже собран строкой
   (замер after: card 390, блок 668) — добираем правую колонку 546. ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) section#contacts .footer-top{grid-template-columns:390px 546px;gap:8px}
}

/* ── (12) S3: мобильная карточка услуги @375 — r16, высота 182, без чипов (кадр Services_375
   1263:25059 строка 1263:25083 311×227). Живой: r24, h292, чипы есть. Чипы убирает
   разметка каталога (FB2.ServiceCards), здесь — радиус/высота. ── */
@media (max-width:767px){
  body:has(.main-intro) .service-card{border-radius:16px!important;min-height:182px}
  body:has(.main-intro) .service-card .service-card__chips{display:none}
}

/* ── (13) G3+R4 mobile: герой r16 (см. часть 1), интро→числа 0/40 по кадру Main_375
   (правки t_a2584994 уже стоят: замер после = [0, 0.1, 0...]) ── */
/* ═══ ГЛАВНАЯ @1024 — батч t_1bdabb3d, часть 3: интро-правая колонка 487 (кадр 315:5404) ═══
   Часть 2 растянула только .intro-logo (замер: logo 487 ок), но правая колонка .intro-right
   осталась flex 0 1 586 (кадр 1024: 487). Правим колонку. ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro .intro-right{flex:0 0 487px;max-width:487px}
}
/* ═══ ГЛАВНАЯ @≤1024+375 — батч t_1bdabb3d, часть 4: S1-зазор в карточке услуг (живой слой) ═══
   Живая разметка услуг — FB2.ServiceCards (чанк 116): .chips + hr.service-divider + h3 + p.
   Селектор .service-card{gap:24px} из части 1 бил по разметке tpl.home.service.card
   (service-card__chips/service-card__divider) — она на главной НЕ рендерится.
   Фикс: .chips внутри .service-card несёт margin-bottom:12 (base.css) — на сетке 8 это
   даёт видимый зазор «чипы → разделитель» 12. Кадр 182:4187: itemSpacing 24. ── */
@media (min-width:1280px){
  body:has(.main-intro) .service-card .chips{margin-bottom:12px}
  body:has(.main-intro) .service-card{gap:12px}
}
/* ═══ ГЛАВНАЯ @375 — батч t_1bdabb3d, часть 5: S3 (услуги-строки), K4 (контакты) ═══
   S3: мобильные строки услуг (кадр 1263:25059, строка 311×227): пад 8/8/16/8, r16,
   чипы в кадре @375 нет — на живом чип-ряд 295×24 стоит в строке (svc-badges из
   t_f4355327: код+срок+инфо-чип). Сверка с кадром: строка имеет бейджи кода/срока —
   это и есть канон строки, инфо-чип 24 — из кадра Frame 1068. Оставляем как есть.
   Карточка-«остров» услуг (`.teal-block`) на 375 — кадр 493:7877 343×778 (S3-тело):
   строки 311, r16, пад 24/16. Живой замер (375, после части 2): блок 1460, строки
   311×182 r16 pad 24/20 — чипов нет (S3 закрыт ранее, t_287facf5).
   K4: зазоры зелёная карточка→колонка 8, H2→реквизиты 24, кнопка перезвона 193×56.
   С 06.10.2026 (заявка владельца, стр.18 «подвал должен быть единый везде») три значения
   ниже применяются на ВСЕХ страницах, а не только на главной: раньше внутренние страницы
   держали зазор карточка→колонка 16 (вместо 8 по компоненту Contacts 315:5228) и
   растянутую кнопку 311 (вместо 193) — блок визуально отличался от главной.
   gap самой карточки — 16, а не 24: кадр Frame 871 держит 24 только в паре H2→реквизиты
   (её добирает margin-bottom:8 у H2), а между реквизитами, контактной строкой и ролями
   зазор 16 по Frame 872/873 (t_1fd23e22, 06.10.2026). ── */
@media (max-width:767px){
  body #contacts .footer-top{gap:8px}
  body #contacts .contacts-card{gap:16px}
  body #contacts .callback .btn{width:193px;min-width:193px}
}
/* ═══ ГЛАВНАЯ @1024–1440 — батч t_1bdabb3d, часть 6: пресс-центр голова (P1/P2) ═══
   Кадр 266:3465 (Main_1024/1280/1440): строка головы `Frame 979` 1137×36 = h2 + кнопка
   «Все новости» 113×36 справа, itemSpacing 40 до карусели; точки 6 — строкой под каруселью.
   Живая разметка: голый h2, кнопка .center>btn-sm ПОСЛЕ точек (внизу).
   CSS-перевод (разметку home.page не трогаем — она в БД, а кнопка в кадре есть и в строке
   головы): поднимаем кнопку в строку заголовка абсолютом против контейнера 1201, а строке
   задаём высоту 36 и отступ 40; сам блок .center прячем от потока. Точки остаются. ── */
@media (min-width:1024px){
  body:has(.main-intro) .soft-block--blue .section-title{margin-bottom:40px}
  body:has(.main-intro) .soft-block--blue>.container{position:relative}
  body:has(.main-intro) .soft-block--blue .center{position:static}
  body:has(.main-intro) .soft-block--blue .center>.btn{position:absolute;
    top:40px;right:32px;bottom:auto;height:36px;padding:0 24px;display:inline-flex;
    align-items:center;margin:0}
}
/* ═══ ГЛАВНАЯ @1024 — батч t_1bdabb3d, часть 7: наезд интро на «в цифрах» (регресс части 3) ═══
   Замер после части 3 @1024: .intro-right стал flex 0 0 487, но колонка стала блочной
   стопкой (logo 487 сверху, para 1015-1125, certs 1149-1261) и ВЫЛЕЗЛА за секцию интро
   (инсекция 694-1070, а para до 1125, certs до 1261) — наложилась на панель «в цифрах»
   (h2 1110-1178). Причина: .intro-grid @1024 display:block (audit-fixes), логотип и
   колонка идут потоком; фикс колонки flex:0 0 487 без высоты не при чём — вылезают
   ВЫСОТЫ. Кадр 315:5399: блок 944×375.9 = колонки РЯДОМ (grid 2 колонки), а не стопкой.
   Правильно: на 1024 вернуть .intro-grid двухколоночным: 487 + gap 32 + 425? Кадр:
   правая колонка 487, лок-ап 487 (по 315:5404), зазор 32: 487+32+487=1006 > 880 внутр.
   Поэтому кадр 1024 держит обе колонки по 487 при контенте 880? Нет — 487 это ширина
   правой колонки кадра. Лок-ап в кадре 1024: 444:11917… по кадру Main_1024 интро:
   блок 944, pad 100/32, колонки… В отчёте home-1024: «интро правая колонка 487, лок-ап
   рядом». Итог: grid-template-columns: 361px 487px (880-32=848; 361+487=848).
   Лок-ап в кадре 1024 = 361 (логотип масштабируется). Ставим 361/487. ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro .intro-grid{display:grid;grid-template-columns:361px 487px;
    gap:32px;padding:100px 32px 0;justify-content:space-between;align-items:flex-start}
  body:has(.main-intro) .main-intro .intro-logo{flex:none;width:auto}
  body:has(.main-intro) .main-intro .intro-right{flex:none;width:auto;max-width:none}
}
/* ═══ ГЛАВНАЯ @1024 — часть 8: интро-правая колонка по кадру 315:5404 ═══
   Замер части 7: колонка 487, para 18/22×5 строк (110) + certs 112 => колонка 246;
   кадр: блок 944×375.9 = контент 275.9 при pad 100/32: колонка должна уместиться в 276.
   Кадр 1024: абзац 5 строк 16/20 (100) + зазор + сертификаты 112? Канон I1: блок 375.9.
   100(pad) + колонка 246 = 346 > 375.9−100=276 → колонка выше кадра на 70: кадр держит
   para 4 строки (16/20=80) и certs ~112? 80+16+112=208 ✓ помещается.
   Правим: para 16/20 (кадровый кегль 1024), сертификаты — как есть (112). ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro .intro-right .muted{font-size:16px;line-height:20px}
}
/* ═══ ГЛАВНАЯ @1024 — часть 9: интро-грид, ряд 260 → auto ═══
   Причина наезда (финально): в части 7 grid-template-columns:361px 487px дал ОДНУ строку
   260px (след из прежнего правила 260px в каскаде) — дети y 894/918 в этой строке, а
   колонка 236-360 px выше строки → ряды сжались и контент вылез за секцию (certs до 1154
   при низе секции 1070). Ставим grid-auto-rows:auto (и rows:auto). ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro .intro-grid{grid-auto-rows:auto;grid-template-rows:auto}
}
/* ═══ ГЛАВНАЯ @1024 — часть 10: интро по кадру 315:5399 (финал) ═══
   Figma-числа (API, узлы кадра):
     блок 944×375.9; левая колонка = девиз «Достоверность./Своевременность./Надёжность.»
     361×142 (3 строки 42) на +100/+100; правая колонка Frame 916 487×175.9:
       абзац 487×110 (18/22, 5 строк) + 24 + сертификаты 487×41.9.
   То есть в кадре 1024 НЕТ лок-апа — слева девиз (361), справа абзац+сертификаты.
   Части 7–9 (грид 361/487 с лок-апом-картинкой) — неверная раскладка: картинка лок-апа
   на 1024 скрыта (.intro-lockup display:none в base.css ≤1024), вместо неё девиз.
   Чиним: строка auto (снять фикс 260 из parts 7-9), девиз-колонка 361, правая 487;
   сертификаты в один ряд 41.86 (img h 42 — уже есть правило base.css ≤1024). ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro .intro-grid{display:grid;grid-template-columns:361px 487px;
    gap:32px;padding:100px 32px 0;justify-content:space-between;align-items:flex-start;
    grid-auto-rows:auto;grid-template-rows:auto}
  body:has(.main-intro) .main-intro .intro-logo{flex:none;width:auto}
  body:has(.main-intro) .main-intro .intro-right{flex:none;width:auto;max-width:none;margin-top:0}
  body:has(.main-intro) .main-intro .intro-right .muted{font-size:18px;line-height:22px}
}
/* ═══ ГЛАВНАЯ @1024 — часть 11: интро-секция без фикс-высоты (завершение части 10) ═══
   Часть 10 собрала грид кадра (девиз 361 + колонка 487), но фикс height:375.9 на
   .main-intro (правило (9) части 1 батча) обрезал ряд: низ секции 1070 при низе ряда 1140.
   Снял фикс в (9) — секция теперь = pad 100 + ряд + pad 100. Сертификаты — в один ряд
   41.86: базовый .cert-row уже имеет img h 42 (правило base.css ≤1024); зазор кадра
   между абзацем и сертификатами 24 — базовый margin-top:24 у .cert-row подходит. ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro .cert-row{flex-wrap:nowrap}
}
/* ═══ ГЛАВНАЯ @1024 — часть 12: интро-секция = 100+ряд+100 (кадр 375.9) ═══
   Сейчас: .intro-grid держит pad 100 32 0, у секции pad 0 → блок 283 вместо 375.9
   и «в цифрах» прижат вплотную (кадр: между ними нет зазора, но блок выше на 93).
   По кадру 315:5399: 100 сверху + ряд 175.9 + 100 снизу. Переносим паддинг на секцию
   (pad 100px 32px) и убираем с грида — грид чисто раскладка. ── */
@media (min-width:1024px) and (max-width:1024px){
  body:has(.main-intro) .main-intro{padding:100px 32px}
  body:has(.main-intro) .main-intro .intro-grid{padding:0}
}

/* ── ХИРО ПО ВЫСОТЕ ЭКРАНА (просьба владельца 05.10.2026) ────────────────────
   Сейчас высокий кадр Main 1440–1920 (444:11908, хиро 1440×845) применялся с 1441px
   по ширине и на 1920×1080 занимал 845/1080 = 78% вьюпорта («почти весь экран»).
   Правило: 845 — только когда у экрана есть запас по высоте (2K 2560×1440, вьюпорт
   ≈1300), иначе — кадр Main 1280 (182:4143, хиро 1201×618). Порог 1150 снят с
   реального вьюпорта: 2560×1440 ≈ 1300 (845), 1920×1080 ≈ 950 (618), 1920×1200 ≈ 1110 (618).
   Внутренние страницы: 650 → 618 при той же нехватке высоты (base.css 618 — канон 1024/1280). ── */
@media (min-width:1441px) and (max-height:1149px){
  body:has(.main-intro) .hero-box{height:618px}
  .hero-box{height:618px}
}
