/* ============================================================================
   okna-mobile.css — ГЛОБАЛЬНЫЙ МОБИЛЬНЫЙ ФУНДАМЕНТ (фаза MOBILE-M1)
   ----------------------------------------------------------------------------
   Источник правил: 08_DOCS/MOBILE_PRAVILA.md (разделы 1,2,3,4,7) +
   OTCHET_mobile_m0_audit.md. Применяем «продуманные один раз» правила глобально.

   ⚠️ КАПКАН TT1: родительская тема Twenty Twenty-One грузится ПОСЛЕ наших CSS и
   перебивает базовые правила ПОРЯДКОМ. Поэтому все оверрайды здесь заданы
   СПЕЦИФИЧНОСТЬЮ (селектор с классом тела/секции) и `!important` где нужно —
   НЕ рассчитываем на порядок загрузки.

   ▐ РЕЕСТР БРЕЙКПОИНТОВ — ЕДИНСТВЕННЫЙ ИСТОЧНИК ИСТИНЫ (CSS-переменные в @media
     не работают → договорённость + grep-аудит). НОВЫЕ значения ЗАПРЕЩЕНЫ.
       LG = max-width:1024  — десктоп→планшет (гриды 3→2 колонки)
       MD = max-width:768   — ⭐ ГЛАВНЫЙ мобайл-рубеж (1 колонка, шапка/типографика)
       SM = max-width:600   — телефон (боковой padding 16px)
       XS = max-width:480   — мелкие телефоны (донастройка кеглей)

   СТРУКТУРА ФАЙЛА:
     [A] :root — аддитивные 8-pt токены --sp-* (вне @media; десктоп НЕ меняют)
     [B] Анти-overflow — ЕДИНСТВЕННОЕ не-@media layout-правило (десктоп-безопасное:
         max-width:100% только ограничивает переполнение, ничего не растягивает)
     [C] @media (max-width:1024)
     [D] @media (max-width:768)  — основной блок M1
     [E] @media (max-width:600)
     [F] @media (max-width:480)
   ============================================================================ */

/* [A] 8-POINT ТОКЕНЫ — ПЕРЕНЕСЕНЫ в ok-tokens.css (УБОРКА §2.5, единый корень токенов). Здесь их больше нет. */

/* [B] ГЛОБАЛЬНЫЙ АНТИ-OVERFLOW (вне @media — десктоп-безопасно) --------------
   max-width:100% только ЗАПРЕЩАЕТ выпирать за контейнер, не меняет нормальный
   десктоп-рендер. Помечено как единственное не-media правило (см. run-report). */
img, iframe, video, table{ max-width:100%; }
/* svg.map карты уже width:100%; ограничиваем прочие svg, не ломая иконки с явными w/h */
svg{ max-width:100%; }

/* [B2] БУРГЕР — базовое состояние: СКРЫТ на десктопе (вне @media, десктоп-безопасно;
   элемент добавляется скриптом okna-mobile.js и виден только ≤768, см. блок [D]). */
.okna-burger{ display:none; }

/* [C] ===== @media (max-width:1024) — планшет ============================== */
@media (max-width:1024px){
  /* Задел под коллапс гридов 3→2; конкретика — в постраничных фазах M5. */
}

/* [D] ===== @media (max-width:768) — ГЛАВНЫЙ МОБАЙЛ-РУБЕЖ ================== */
@media (max-width:768px){

  /* --- D1. Базовая мобильная типографика (перебиваем TT1 специфичностью+!important) --- */
  html body{ font-size:16px; } /* D0-2: было body{} (0,0,1) — TT1 перебивал ПОРЯДКОМ (замер live: 20px на 375); html body (0,0,2) > TT1 */
  /* MOBM-12: снят чужой !important (ступень 1 правила разрешения каскада). Значения канона сохранены;
     страничные поверхности пиннятся к макету специфичностью ниже (блок MOBM-12), без !important. */
  body h1, body .okna-h1, body .page-title, body .entry-title{ font-size:30px; line-height:1.15; }
  body h2{ font-size:23px !important; line-height:1.2; }  /* MOBM-12: !important ВОЗВРАЩЁН — несущий глоб. кап H2 (любой класс 0,1,0 бьёт body h2 0,0,2; чистое снятие = масс-пиннинг = запрет). Макет-понижение H2 = позиция (B3-01) */
  body h3{ font-size:19px !important; line-height:1.25; } /* MOBM-12: !important ВОЗВРАЩЁН — та же причина, что h2 */

  /* --- D2. АНТИ-ЗУМ iOS: поля ввода строго 16px (иначе Safari зумит при фокусе → горизонт-скролл) --- */
  body input, body select, body textarea,
  .okna-karta .psearch, .psearch{ font-size:16px !important; }

  /* --- D3. Кнопки: комфорт 48px + full-width; перебить серый TT1 button{#28303d} --- */
  a.okna-btn, button.okna-btn, .okna-btn{
    min-height:48px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
  }
  /* full-width на телефоне/планшете-рубеже; исключаем компактный телефон-иконку и хедер-CTA,
     чтобы не раздувать строку шапки (шапка — фаза M2) */
  .okna-btn:not(.okna-hdr-cta):not(.okna-hdr-phone--compact){
    width:100%;
    box-sizing:border-box;
  }

  /* --- D4. Тач-минимум 44px для сегмент-табов --- */
  .okna-karta .seg__btn, .seg__btn{ min-height:44px; }

  /* --- D5. ТОПБАР без горизонт-скролла (§7; главный сквозной баг 375px=521px) ---
     Прячем длинный текст номера/почты, оставляем tel-иконку 44×44 hit-area. */
  .okna-header .okna-topbar,
  .okna-header{ overflow-x:clip; }                 /* страховка (не hidden — не ломать sticky) */

  .okna-header .okna-topbar-inner{ gap:8px; }
  .okna-header .okna-topbar-contacts{ gap:8px; }
  .okna-header .okna-topbar-contacts .okna-header-phones{ gap:8px; }

  /* скрыть длинный текст телефона (номер+подпись) — остаётся только иконка */
  .okna-header .okna-topbar-contacts .okna-hdr-phone-text{ display:none !important; }
  /* почта в топбаре на мобайле не нужна (дублируется в футере/контактах) — убираем ширину */
  .okna-header .okna-topbar-contacts .okna-hdr-email{ display:none !important; }

  /* tel-иконка = 44×44 hit-area */
  .okna-header .okna-topbar-contacts .okna-hdr-phone{
    min-width:44px;
    min-height:44px;
    justify-content:center;
    padding:0;
  }

  /* город слева не должен распирать строку */
  .okna-header .okna-city{ min-width:0; overflow:hidden; text-overflow:ellipsis; }

  /* ======================================================================
     M2 · ШАПКА: бургер + выезжающее меню (§7). JS помечает шапку .okna-mob
     и меню .okna-mnav → повышенная специфичность перебивает glavnaya.css.
     ====================================================================== */

  /* Компактная строка шапки 48–56px (перебить glavnaya min-height:92px !important;
     спец. 0,3,0 > 0,2,0). */
  .okna-header.okna-mob > .okna-header-inner{
    min-height:56px !important;
    padding-top:6px !important;
    padding-bottom:6px !important;
    gap:10px !important;
    flex-wrap:nowrap !important;
  }
  /* лого не раздувает строку; знак компактный */
  .okna-header.okna-mob .okna-brand-mark{ height:40px !important; }

  /* Бургер справа 44×44 (тач) */
  .okna-header.okna-mob .okna-burger{
    display:inline-flex; align-items:center; justify-content:center;
    width:44px; height:44px; min-width:44px; flex:0 0 auto;
    margin-left:4px; padding:0; border:0; border-radius:8px;
    background:transparent; color:#1C2433; cursor:pointer;
    -webkit-tap-highlight-color:transparent;
  }
  .okna-header.okna-mob .okna-burger:active{ background:var(--blue-soft,#eef3fc); }
  .okna-header.okna-mob .okna-burger:focus-visible{ outline:2px solid var(--blue,#1c5bd6); outline-offset:2px; }
  /* иконка: три линии через ::before/::after + центральная .b (крест при открытии) */
  .okna-header.okna-mob .okna-burger .okna-burger__b,
  .okna-header.okna-mob .okna-burger .okna-burger__b::before,
  .okna-header.okna-mob .okna-burger .okna-burger__b::after{
    content:""; display:block; position:relative;
    width:24px; height:2px; border-radius:2px; background:currentColor;
    transition:transform .2s ease, opacity .2s ease;
  }
  .okna-header.okna-mob .okna-burger .okna-burger__b::before{ position:absolute; top:-7px; }
  .okna-header.okna-mob .okna-burger .okna-burger__b::after{ position:absolute; top:7px; }
  .okna-header.okna-mob.okna-nav-open .okna-burger .okna-burger__b{ background:transparent; }
  .okna-header.okna-mob.okna-nav-open .okna-burger .okna-burger__b::before{ top:0; transform:rotate(45deg); }
  .okna-header.okna-mob.okna-nav-open .okna-burger .okna-burger__b::after{ top:0; transform:rotate(-45deg); }

  /* Меню по умолчанию скрыто; открывается как панель под шапкой.
     Спец. 0,4,0 (.okna-header.okna-mob .okna-nav.okna-mnav) > glavnaya 0,2,0 !important. */
  .okna-header.okna-mob .okna-nav.okna-mnav{ display:none !important; }
  .okna-header.okna-mob.okna-nav-open .okna-nav.okna-mnav{
    display:block !important;
    position:absolute !important; top:100% !important; left:0 !important; right:0 !important;
    flex:none !important;
    background:#fff; border-top:1px solid var(--line,#e6e9ef);
    box-shadow:var(--shadow-lg,0 12px 34px rgba(16,24,40,.14));
    max-height:calc(100dvh - 56px); overflow-y:auto;
    z-index:120; padding:6px 16px 14px;
  }
  /* пункты — вертикальный стек, тач ≥44px (спец. 0,5,0 перебивает glavnaya 0,4,0) */
  .okna-header.okna-mob.okna-nav-open .okna-nav.okna-mnav .okna-menu{
    flex-direction:column !important; flex-wrap:nowrap !important;
    align-items:stretch !important; justify-content:flex-start !important;
    width:100% !important; gap:2px !important;
  }
  .okna-header.okna-mob.okna-nav-open .okna-nav.okna-mnav .okna-menu > li{ width:100%; }
  .okna-header.okna-mob.okna-nav-open .okna-nav.okna-mnav .okna-menu > li.okna-mega{ margin-right:0 !important; }
  .okna-header.okna-mob.okna-nav-open .okna-nav.okna-mnav .okna-menu > li > a{
    display:flex !important; align-items:center !important; justify-content:flex-start !important;
    width:100% !important; box-sizing:border-box !important;
    min-height:48px; padding:12px 12px !important; font-size:16px !important;
    white-space:normal !important;
  }
  /* выпадашки/мега-панель на мобайле не всплывают: верхний пункт-ссылка ведёт на страницу
     (Каталог → /katalog/). Панели скрыты, но остаются в DOM (контент-паритет). */
  .okna-header.okna-mob .okna-mega-panel,
  .okna-header.okna-mob .okna-has-drop .okna-drop{ display:none !important; }

  /* Действия шапки на мобайле: сжать зазор, убрать дубль-элементы.
     Компактный телефон дублирует tel-иконку топбара — прячем. */
  .okna-header.okna-mob .okna-header-actions{ gap:8px !important; }
  .okna-header.okna-mob .okna-hdr-phone--compact{ display:none !important; }

  /* ======================================================================
     M2 · ФУТЕР: 1 колонка + аккордеон (§8). JS помечает колонки со списком
     .okna-acc, контактную .okna-acc--contacts, раскрытую — .is-open.
     ====================================================================== */
  .okna-footer .okna-footer-inner{
    grid-template-columns:1fr !important;
    gap:0 !important;
    padding:24px 16px 18px !important;
  }
  .okna-footer .okna-footer-col{ padding:0; }
  /* контактная колонка (телефон/каталог) — приоритет наверх */
  .okna-footer .okna-footer-col.okna-acc--contacts{ order:-1; }
  /* разделители-ритм между группами 24px */
  .okna-footer .okna-footer-col.okna-acc{ border-top:1px solid var(--line-d,#2b3648); }
  .okna-footer .okna-footer-col.okna-acc--contacts{ border-top:0; }

  /* h4 → тоггл 48px, тач-зона на всю ширину */
  .okna-footer .okna-footer-col.okna-acc > h4.okna-acc__h{
    margin:0 !important; min-height:48px;
    display:flex; align-items:center; justify-content:space-between;
    gap:12px; padding:12px 0; cursor:pointer; user-select:none;
  }
  .okna-footer .okna-footer-col.okna-acc > h4.okna-acc__h:focus-visible{
    outline:2px solid var(--blue,#1c5bd6); outline-offset:2px;
  }
  /* шеврон */
  .okna-footer .okna-acc__ic{
    flex:0 0 auto; width:12px; height:12px; position:relative; transition:transform .2s ease;
  }
  .okna-footer .okna-acc__ic::before,
  .okna-footer .okna-acc__ic::after{
    content:""; position:absolute; top:5px; width:8px; height:2px; border-radius:2px; background:#9aa4b6;
  }
  .okna-footer .okna-acc__ic::before{ left:0; transform:rotate(45deg); }
  .okna-footer .okna-acc__ic::after{ right:0; transform:rotate(-45deg); }
  .okna-footer .okna-footer-col.okna-acc.is-open > h4.okna-acc__h .okna-acc__ic{ transform:rotate(180deg); }

  /* свёрнутый список скрыт (display:none — Google рендерит и индексирует табы/аккордеоны) */
  .okna-footer .okna-footer-col.okna-acc:not(.is-open) > ul{ display:none; }
  .okna-footer .okna-footer-col.okna-acc > ul{ padding-bottom:8px; }
  /* тач-зона ссылок ≥44px, внутренний ритм 12–16px */
  .okna-footer .okna-footer-col li{ margin:0 !important; }
  .okna-footer .okna-footer-col li a{ display:block; min-height:44px; padding:11px 0; }
  /* телефоны/telegram/часы (вне <ul>) — крупная тач-зона, всегда видны */
  .okna-footer .okna-footer-col p{ margin:8px 0 !important; }
  .okna-footer .okna-footer-col .okna-footer-phone,
  .okna-footer .okna-footer-col .okna-footer-tg{ display:inline-flex; align-items:center; min-height:44px; }
}

/* [E] ===== @media (max-width:600) — телефон =============================== */
@media (max-width:600px){
  /* боковой padding контейнера-рубеж 16px — точечные контейнеры донастраиваются в M5 */

  /* M2 · на узком телефоне строка шапки = лого + корзина + бургер. CTA «Запросить цену»
     убираем из строки (иначе теснит на 360px); связь доступна через меню и топбар-tel. */
  .okna-header.okna-mob .okna-hdr-cta{ display:none !important; }
}

/* [F] ===== @media (max-width:480) — мелкие телефоны ====================== */
@media (max-width:480px){
  body h1, body .okna-h1, body .page-title, body .entry-title{ font-size:28px; } /* MOBM-12: !important снят */
  body h2{ font-size:22px !important; } /* MOBM-12: !important ВОЗВРАЩЁН (несущий кап H2, см. @768) */
}

/* ============================================================================
   [G] M5-CORE · КАТАЛОГ (листинг + фильтр + бренд-навигация) — постранично
   ----------------------------------------------------------------------------
   Макеты: table/card/filter/selector/topblock_mobile.png (02_ARCHITECTURE).
   ⚠ КАРТОЧКА (single-steklo) мобильную раскладку УЖЕ несёт single.css (@900/@640):
   contents-reorder фото→покупка→данные→табы, стек топблока, скролл-табы, static-цена.
   Здесь — ТОЛЬКО пробелы листинга каталога, которые glavnaya.css (залочен) не закрыл.

   ⚠ ПОРЯДОК ЗАГРУЗКИ: okna-mobile.css подключается РАНЬШЕ glavnaya.css/single.css
   (functions.php: mobile ~стр.47, glavnaya ~69, single ~197) → при равной спецификности
   те файлы выигрывают ПОРЯДКОМ. Поэтому оверрайды здесь заданы `!important` (как и
   капкан TT1) — НЕ рассчитываем на порядок. Брейкпоинты строго {768/600/480}.
   ============================================================================ */

/* [G1] ===== @media (max-width:768) — фильтр-панель каталога стекается ===== */
@media (max-width:768px){
  /* .okna-filters: десктоп flex-wrap + select{min-width:148} рвётся на узком → вертикальный
     стек, поля/сортировка/наличие во всю ширину, тач-высота 48px (input-зум уже снят D2). */
  .okna-filters{ flex-direction:column !important; flex-wrap:nowrap !important; align-items:stretch !important; gap:12px !important; padding:16px !important; }
  .okna-filters .okna-filter{ width:100% !important; }
  .okna-filters .okna-filter select{ width:100% !important; min-width:0 !important; min-height:48px; }
  /* строка действий: submit во всю ширину, сбросы-текстоссылки под ним по центру */
  .okna-filters .okna-filter-actions{ width:100%; margin-left:0 !important; margin-top:2px; }
  .okna-filters .okna-filter-actions .okna-btn{ width:100% !important; box-sizing:border-box; min-height:48px; }
}

/* [G2] ===== @media (max-width:600) — листинг-грид и бренд-плитки ========= */
@media (max-width:600px){
  /* ★ 2026-08-02 · МАКЕТ 06: листинг товаров на мобиле — ДВЕ колонки
     (grid 1fr 1fr, gap 10, макет строки 446-476), а не коллапс в 1 колонку.
     Покрывает и «Другие стёкла <марка>» на карточке (тот же .okna-catalog-grid).
     minmax(0,1fr): длинное название не распирает колонку (нет горизонтального overflow). */
  .okna-catalog-grid{ grid-template-columns:repeat(2,minmax(0,1fr)) !important; gap:10px !important; }

  /* Бренд-навигация «Каталог по марке» (filter_mobile): комфортная тач-цель плиток.
     Только свободно-переносимые верхние теги (.okna-top-tags) — collapse-плитки
     .okna-catalog-nav (max-height ряда) не трогаем, чтобы не ломать «Показать ещё». */
  .okna-top-tags .okna-tag{ min-height:40px; }
}

/* ============================================================================
   [H] M4 · /kontakty/ — КАРТА-СТРАНИЦА (canon §5 + §9). Волна MOBILE-W09.
   ----------------------------------------------------------------------------
   Что уже несёт kontakty.css @760 (НЕ дублируем): свёрнутая превью-карта
   .mapbox.is-collapsed + кнопка-тогл «Открыть карту» (создаёт kontakty.js),
   табы .seg full-width, одноколоночные citywrap/allsum, .okna-kc-quick.
   Здесь — НЕДОСТАЮЩИЕ canon-правила, которых в kontakty.css нет:
     §5.1/§9 — СПИСОК ПВЗ/центров ПЕРВЫМ, карта ниже;
     §4      — hit-area маркеров r≈22;
     §5.2    — pointer-events off на свёрнутой карте.

   ⚠ ПОРЯДОК ЗАГРУЗКИ: kontakty.css грузится ПОЗЖЕ okna-mobile.css
   (functions.php: mobile dep=okna-design ~стр.48; kontakty dep=okna-glavnaya ~стр.164).
   При равной спецификности kontakty выигрывает порядком → все оверрайды здесь
   подняты спецификностью префиксом `.okna-kontakty` (0,3,0 > kontakty 0,2,0),
   чтобы победить БЕЗ гонки !important. Брейкпоинт — canon 768 (kontakty §5.4).
   ============================================================================ */
@media (max-width:768px){
  /* ★ БЛОК КАРТЫ=МАКЕТ (19.08): порядок по мобильному макету 14 — заголовок → КАРТА-ПРЕВЬЮ + «Открыть карту»
     + легенда → центры → сводка. Внутри .grid два потомка: обёртка карты (.mapbox + kontakty.js-кнопка + легенда)
     и панель .side (центры/сводка). РАНЬШЕ было «список первым, карта ниже» (.side order:-1) — макет требует
     ОБРАТНОГО: карта ВЫШЕ центров. Убираем order у .side (карта — первый потомок в DOM, идёт сверху). */
  .okna-kontakty .okna-karta .grid{ display:flex !important; flex-direction:column; }
  .okna-kontakty .okna-karta .grid > .side{ order:1; }

  /* [H2] HIT-AREA МАРКЕРОВ (§4). Прозрачный `.hit` r=9 SVG-ед. при масштабе карты
     ~0.32 на 375px даёт ≈3px — не поймать пальцем. `r` — геометрическое CSS-свойство
     SVG (Chrome/FF/Safari), перебивает presentation-атрибут. r=22 → комфортнее тап.
     Скоуп @768 + .okna-kontakty → десктоп и другие карты не затронуты. */
  .okna-kontakty .okna-karta .mk .hit{ r:22px; }

  /* [H3] СВЁРНУТАЯ ПРЕВЬЮ-КАРТА — pointer-events off (§5.2): свайп страницы не панит
     SVG. Разворачивает kontakty.js (снимает .is-collapsed → события возвращаются).
     Боковые гаттеры 16px уже даёт .okna-kontakty__wrap (kontakty.css @760). */
  .okna-kontakty .okna-karta .mapbox.is-collapsed{ pointer-events:none; }
}

/* [I] ХЛЕБНЫЕ КРОШКИ — без переноса в 3 строки (canon §2/§5): на узком телефоне
   nowrap + горизонт-скролл вместо переноса. Глобально (единый okna_breadcrumbs).
   okna-mobile.css грузится после design.css → перебиваем .okna-crumbs ol порядком;
   !important — страховка от возможных правил glavnaya.css (грузится позже). */
@media (max-width:480px){
  .okna-crumbs ol{ flex-wrap:nowrap !important; overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .okna-crumbs ol::-webkit-scrollbar{ display:none; }
  .okna-crumbs li{ white-space:nowrap; flex:0 0 auto; }
}

/* ============================================================================
   [J] M5 · БЛОК ПОДБОРА (okna-podbor) — сквозной CTA «Не нашли стекло?».
   ----------------------------------------------------------------------------
   Макеты: cta_mobile / podbor_fin_mobile / podbor_design_mobile (02_ARCHITECTURE).
   Раскладку мобайла УЖЕ несёт инлайновый <style id="okna-podbor-css"> в inc/podbor.php,
   но на НЕ-canon брейкпоинте @760 → полоса 761–768 остаётся в десктоп-строке.
   Переносим стек на canon 768 (§1), зеркаля инлайн @760 1-в-1 (идемпотентно при ≤760).
   !important — инлайн-<style> печатается в DOM ПОЗЖЕ подключённых файлов и при равной
   спецификности (0,1,0) выигрывает порядком; !important это перебивает.
   Остальные макеты M5 уже canon и не требуют правок: услуги (design.css @768),
   верхний блок карточки «Поставка со склада» (single.css @640 → ≤600 стек). */
@media (max-width:768px){
  .okna-podbor__card{ flex-direction:column !important; }
  .okna-podbor__bg{ display:none !important; }
  .okna-podbor__main{ padding:20px !important; gap:16px !important; }
  .okna-podbor__btns{ width:100% !important; flex-direction:column !important; }
  .okna-podbor__btns .okna-podbor__btn{ width:100% !important; }
}

/* ============================================================================
   [MOBM-12] СТУПЕНЬ 3 — ПИННИНГ ОСИ H1 К МАКЕТУ БЕЗ !important
   Снят !important ТОЛЬКО с H1 (D1/F) — для H1 глоб. кап не нужен: `body h1` (0,0,2)
   и так бьёт родительскую TT1 (0,0,1); страничные hero-классы пиннятся ниже.
   ★ H2/H3 !important СОХРАНЁН (несущий кап): любой классовый селектор (0,1,0) бьёт
   `body h2` (0,0,2), поэтому глоб. ограничить H2/H3 можно ТОЛЬКО флагом; чистое снятие
   потребовало бы пиннинга КАЖДОЙ секции = масс-рефактор (запрещён) → макет-понижение
   H2/H3 = позиция (ветвь B3-01). Подтверждено критиком: снятие H2/H3 раздувало /ceny/,
   /dlya-organizaciy/, статьи. Изолированный блок = откат снятием блока.
   ============================================================================ */
@media (max-width:768px){
  /* --- H1 hero по поверхностям (макет В); `body .class` (0,1,1) бьёт классовое (0,1,0) --- */
  body .ok-hero .ok-hero__h1{ font-size:28px; }    /* главная/гео · макет 02/22 = 28 (было 38; бьём .ok-hero .ok-hero__h1 0,2,0) */
  body .okna-uhero__h1{ font-size:23px; }          /* услуга=23 (usluga-view). ★ ХАБ /uslugi/ = 26, держит ЧУЖОЙ !important `.okna-usluga h1{clamp(26)!important}` glavnaya.css — НЕ в Allowed, новый !important запрещён → хаб h1=23 ПОЗИЦИЯ (не регрессия: 26 был и до правки) */
  body .okna-org-hero__h1{ font-size:26px; }       /* Волна 4 §7.1: B2B (раздел) 22→26 (норма §1.1 раздел 390=26; макет 22 схлопывался с кап-h2 23/22 — иерархия ★★★★ обязательна) */
  body .okna-bl-hero__h1{ font-size:24px; }        /* Волна 4 §7.1: блог-лента 23→24 (норма лента 23 = кап-h2 23 схлоп; 24 = min над h2 для иерархии) */
  body .okna-blog-hero__h1{ font-size:24px; }      /* Волна 4 §7.1: блог-статья 22→24 (норма статья 22 < кап-h2 23 инверсия; 24 = min над h2) */
  body .okna-nhero__h1{ font-size:24px; }          /* Волна 4 §7.1: новость 22→24 (то же, min над h2) */
  body .okna-kontakty__h1{ font-size:26px; }       /* контакты · макет 14 = 26 (было 28) */
  body .okna-cart-header__title{ font-size:26px; } /* корзина · макет 17 = 26 (было 32) */
  html body.page-template-tpl-ceny .ok-ceny-hero__title{ font-size:26px; } /* Волна 4 §7.1: цены (раздел) 21→26 (над кап-h2, иерархия) */
  body .ok-page__title{ font-size:26px; }          /* Волна 4 §7.1: поиск (раздел) 22→26 (норма раздел 390=26; макет 22 схлопывался с h2) */
  body .okna-404-card h1{ font-size:24px; }         /* 404 · макет 21 = 24 (было 40) */
  /* о-компании ok-about-hero__title 28, каталог/товар/посадочная 21 — уже = макет, пин не нужен */
  /* H2/H3 пины НЕ ставим: глоб. !important-кап (@768/@480) держит канон 23/19; макет-понижение H2/H3 = позиция B3-01 */
}
