/* ============================================================
   zt-redesign.css — канонический слой редизайна ZIPTEH
   Создан 2026-08-04. Подключается ПОСЛЕДНИМ, после всех
   header-new / header-polish / header-nav-v28 / site-shell.

   ПРАВИЛО: все новые правки внешнего вида идут сюда.
   Старые слои постепенно опустошаются в их пользу, а не
   дополняются. Иначе к header-nav-v29 мы придём за месяц.

   Разделы:
     1. Горизонтальное переполнение
     2. Кнопки шапки — текст перестаёт обрезаться
     3. Корзина и избранное — выравнивание и группировка
     4. Отступ между меню и блоком иконок
     5. Нижняя панель навигации (≤1024px)
     6. Шапка на узких экранах — разгрузка
   ============================================================ */

/* ------------------------------------------------------------
   0. ФОН СТРАНИЦЫ — ЕДИНСТВЕННОЕ МЕСТО

   Указание заказчика 06.08.2026: секции главной прозрачные,
   фон задаётся один раз здесь, а не в каждом модуле свой.
   Прежние локальные фоны (#F7F7F5 у товаров, #f5f6f4 у
   «О компании», #f7f7f5 у новостей) сведены к transparent
   в их файлах. Менять фон всего сайта — только эта строка.
   ------------------------------------------------------------ */
body {
    background-color: #ffffff;
}

/* ------------------------------------------------------------
   1. ГОРИЗОНТАЛЬНОЕ ПЕРЕПОЛНЕНИЕ 8 px

   Причина: секции главной выводятся на всю ширину окна приёмом
     position: relative; left: 50%; width: 100vw; transform: translateX(-50%)
   (company-advantages.css:12, home-media-v2.css:13 и др.)

   100vw включает ширину полосы прокрутки, а body — нет. Разница
   ~15 px, половина вылезает справа. Отсюда ровно 8 px лишней
   ширины на ЛЮБОЙ ширине экрана, включая 360.

   overflow-x: clip, в отличие от hidden, не создаёт контейнер
   прокрутки и не ломает position: sticky у шапки.
   ------------------------------------------------------------ */
/* Первопричина: секции выводятся на всю ширину окна через 100vw.
   Они и так прямые потомки body, который уже во всю ширину, —
   значит вся эта конструкция лишняя. Возвращаем обычные 100%. */
.zip-home-hero,
.zip-category-strip,
.zip-brands,
#ztSaleProducts.zt-sale-products,
#ztCompanyAdvantages.zt-company-advantages,
#ztHomeMediaV2.zt-home-media-v2,
#ziptehLeadModule,
.footer-2 {
    left: auto !important;
    right: auto !important;
    width: 100% !important;
    max-width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    transform: none !important;
}

/* Подстраховка на случай, если где-то остался ещё один 100vw,
   который я не нашёл. clip, в отличие от hidden, не создаёт
   контейнер прокрутки и не ломает position: sticky. */
html,
body {
    overflow-x: clip;
}

@supports not (overflow-x: clip) {
    html,
    body {
        overflow-x: hidden;
    }
}

/* Ни один элемент не должен уметь распирать страницу вбок */
img,
video,
iframe,
table {
    max-width: 100%;
}

/* Длинные артикулы вида 17M.22.47810 не должны рвать раскладку */
.zt-product-card__name,
.zt-product-card__article,
.zt-product-card__article-mobile {
    overflow-wrap: anywhere;
}

/* ------------------------------------------------------------
   2. КНОПКИ ШАПКИ — ТЕКСТ ПЕРЕСТАЁТ ОБРЕЗАТЬСЯ

   Замер 2026-08-04: у кнопки каталога содержимое шире кнопки
   на 13 px даже при 1920, а при 1600 — уже на 32 px.
   Причина — фиксированная ширина. Ширину задаёт содержимое.
   ------------------------------------------------------------ */
/* !important здесь вынужденно: header-new.css задаёт кнопке
   width: 100%, и без него ширину продолжает диктовать контейнер,
   а не текст. Уйдёт вместе со сведением слоёв (этап 8). */
.zt-header .zt-catalog-button,
.zt-header .zt-callback-button {
    width: auto !important;
    min-width: 0;
    flex: 0 0 auto;
    white-space: nowrap;
}

.zt-header .zt-catalog-button__label,
.zt-header .zt-callback-button {
    overflow: visible;
    text-overflow: clip;
}

/* Между 1400 и 1700 места мало — сокращаем горизонтальные поля,
   а не текст. Читаемость важнее геометрии. */
@media (max-width: 1700px) and (min-width: 1400px) {
    .zt-header .zt-catalog-button {
        padding-left: 16px;
        padding-right: 16px;
        gap: 8px;
    }

    .zt-header .zt-callback-button {
        padding-left: 14px;
        padding-right: 14px;
    }
}

/* ------------------------------------------------------------
   3. КОРЗИНА И ИЗБРАННОЕ — ОДНА ГРУППА, ОДНА ОСЬ

   Было: на 1400 избранное уезжало на x=21 (левее логотипа),
   корзина оставалась справа на x=1311 — разные углы шапки.
   На 1024 они расходились по вертикали на 9 px.
   ------------------------------------------------------------ */
.zt-header .zt-header-favorite,
.zt-header .zt-header-cart {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    align-self: center;
    position: relative;
    box-sizing: border-box;
    min-width: 44px;
    min-height: 44px;
    margin: 0;
}

/* Счётчики — одинаковые у обеих иконок */
.zt-header .zt-header-favorite .zt-header-action-count,
.zt-header .zt-header-cart .zt-header-action-count {
    position: absolute;
    top: 2px;
    right: 2px;
    transform: translate(35%, -35%);
    line-height: 1;
}

/* На 1025–1400 избранное больше не выпадает из строки.

   !important и селектор с тем же родителем — потому что
   header-commerce.css:  @media (max-width:1080px)
     .zt-nav > .zt-shell > .zt-header-favorite { position: absolute !important }
   именно это правило и выбрасывало иконку в левый угол. */
@media (max-width: 1399px) and (min-width: 1025px) {
    .zt-header .zt-header-favorite,
    .zt-nav > .zt-shell > .zt-header-favorite {
        position: relative !important;
        top: auto !important;
        left: auto !important;
        right: auto !important;
        bottom: auto !important;
        order: 0;
        margin-left: 4px;
    }
}

/* Ниже 1024 иконки уходят в нижнюю панель — снимаем и абсолют,
   чтобы ничего не осталось висеть в углу. */
@media (max-width: 1399px) {
    .zt-nav > .zt-shell > .zt-header-favorite {
        position: static !important;
    }
}

/* ------------------------------------------------------------
   4. ОТСТУП МЕЖДУ МЕНЮ И БЛОКОМ ИКОНОК

   Было: зазор 14 px оставался «остаточным» — список меню
   растягивался вплотную к избранному. На 1747 пункты слипались.
   ------------------------------------------------------------ */
@media (min-width: 1400px) {
    .zt-header .zt-nav__list {
        margin-right: 32px;
        min-width: 0;
    }

    .zt-header .zt-nav__link {
        white-space: nowrap;
    }
}

/* ------------------------------------------------------------
   5. НИЖНЯЯ ПАНЕЛЬ НАВИГАЦИИ

   Включается на ≤1024 — там же, где шапка отдаёт навигацию
   бургеру. Пять кнопок: каталог, поиск, корзина, избранное,
   связаться.
   ------------------------------------------------------------ */
.zt-bottombar {
    display: none;
}

@media (max-width: 1399px) {
    .zt-bottombar {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 9990;
        display: grid;
        grid-template-columns: repeat(5, 1fr);
        background: #fff;
        border-top: 1px solid #e6e6e6;
        box-shadow: 0 -2px 12px rgba(0, 0, 0, .06);
        padding-bottom: env(safe-area-inset-bottom, 0px);
        font-family: inherit;
    }

    .zt-bottombar__item {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 3px;
        min-height: 56px;
        padding: 7px 2px 8px;
        background: none;
        border: 0;
        cursor: pointer;
        text-decoration: none;
        color: #4a4a4a;
        font: inherit;
        font-size: 12px;
        line-height: 1.2;
        -webkit-tap-highlight-color: transparent;
        transition: color .15s ease;
        font-weight: 500;
}

    .zt-bottombar__item:hover,
    .zt-bottombar__item:focus-visible {
        color: #111;
    }

    /* Активный раздел: фирменный жёлтый как акцент — полоска сверху
       и подкрашенная иконка. Текст остаётся тёмным.

       Белый по жёлтому здесь сознательно НЕ используется: контраст
       такой пары 1,50:1 при норме 4,5:1 (см. [[Цветовая палитра]]).
       Тёмный текст на белом даёт 16:1. */
    .zt-bottombar__item.is-active {
        color: #111;
        font-weight: 600;
    }

    .zt-bottombar__item.is-active::before {
        content: "";
        position: absolute;
        top: 0;
        left: 22%;
        right: 22%;
        height: 3px;
        border-radius: 0 0 3px 3px;
        background: var(--yellow, #f2c94c);
    }

    .zt-bottombar__item {
        position: relative;
    }

    .zt-bottombar__item.is-active .zt-bottombar__icon svg {
        stroke: #b8860b;
    }

    .zt-bottombar__icon {
        position: relative;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 24px;
        height: 24px;
    }

    .zt-bottombar__icon svg {
        width: 23px;
        height: 23px;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.7;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .zt-bottombar__label {
        display: block;
        max-width: 100%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    /* Счётчики корзины и избранного */
    .zt-bottombar__count {
        position: absolute;
        top: -4px;
        right: -8px;
        min-width: 16px;
        height: 16px;
        padding: 0 4px;
        border-radius: 8px;
        background: #d8a300;
        color: #fff;
        font-size: 10px;
        font-weight: 600;
        line-height: 16px;
        text-align: center;
    }

    .zt-bottombar__count[hidden] {
        display: none;
    }

    .zt-bottombar__item--cart .zt-bottombar__count {
        background: #c0392b;
    }

    /* Контент не должен прятаться под панелью */
    body {
        padding-bottom: calc(56px + env(safe-area-inset-bottom, 0px));
    }

    /* Всплывашки, которые сами липнут к низу, поднимаем над панелью */
    .zt-commerce-toasts {
        bottom: calc(68px + env(safe-area-inset-bottom, 0px));
    }
}

/* Шторка «Связаться» */
.zt-contact-sheet {
    position: fixed;
    inset: 0;
    z-index: 9995;
    display: none;
    align-items: flex-end;
    background: rgba(0, 0, 0, .45);
}

.zt-contact-sheet.is-open {
    display: flex;
}

.zt-contact-sheet__panel {
    width: 100%;
    background: #fff;
    border-radius: 16px 16px 0 0;
    padding: 18px 16px calc(18px + env(safe-area-inset-bottom, 0px));
}

.zt-contact-sheet__title {
    margin: 0 0 4px;
    font-size: 16px;
    font-weight: 600;
    color: #111;
}

.zt-contact-sheet__note {
    margin: 0 0 14px;
    font-size: 13px;
    color: #6b6b6b;
}

.zt-contact-sheet__list {
    display: grid;
    gap: 8px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.zt-contact-sheet__link {
    display: flex;
    align-items: center;
    gap: 12px;
    min-height: 48px;
    padding: 10px 14px;
    border: 1px solid #e6e6e6;
    border-radius: 10px;
    color: #111;
    font-size: 15px;
    text-decoration: none;
    background: none;
    width: 100%;
    cursor: pointer;
    text-align: left;
}

.zt-contact-sheet__link:hover {
    background: #fafafa;
}

.zt-contact-sheet__link svg {
    width: 21px;
    height: 21px;
    flex: 0 0 auto;
    stroke: currentColor;
    fill: none;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.zt-contact-sheet__close {
    display: block;
    width: 100%;
    margin-top: 12px;
    min-height: 46px;
    border: 0;
    border-radius: 10px;
    background: #f2f2f2;
    color: #444;
    font: inherit;
    font-size: 15px;
    cursor: pointer;
}

/* ------------------------------------------------------------
   0a. ЕДИНЫЙ ФИРМЕННЫЙ ЖЁЛТЫЙ

   Разбор стилей нашёл СЕМЬ разных токенов жёлтого в шести файлах,
   и это четыре разных оттенка на кнопках вдоль пути
   «главная → каталог → карточка → контакты»:

     --yellow            #FFCD20   reset.css:15          старые кнопки
     --zt-header-accent  #FFB800   header-new.css:3      шапка
     --zt-brand          #ffb800   poisk-results.css:2   каталог и поиск
     --zt-detail-yellow  #ffb900   product-detail.css:3  карточка товара
     --ztc-yellow        #ffbd00   contacts-redesign:3   контакты
     --zas-yellow        #f7b900   search-advanced:2     форма поиска
     --zt404-yellow      #FFB800   404.css:21            страница 404

   Плюс пять разных оттенков для hover.

   Лечится без единого !important: это CSS-переменные, и достаточно
   переопределить их на :root. Каждый файл, который читает var(--…),
   немедленно получает общее значение. Специфичность ни при чём.

   Канонический выбран #FFB800 — он уже самый частый (3 из 7).
   ------------------------------------------------------------ */
:root {
    --zt-yellow: #FFB800;
    --zt-yellow-hover: #E8A600;
    --zt-yellow-dark: #B8860B;   /* для текста и иконок на светлом */

    --yellow: var(--zt-yellow);
    --zt-header-accent: var(--zt-yellow);
    --zt-brand: var(--zt-yellow);
    --zt-detail-yellow: var(--zt-yellow);
    --ztc-yellow: var(--zt-yellow);
    --zas-yellow: var(--zt-yellow);
    --zt404-yellow: var(--zt-yellow);

    --yellow-hover: var(--zt-yellow-hover);
    --zt-brand-hover: var(--zt-yellow-hover);
    --zt-detail-yellow-dark: var(--zt-yellow-hover);
    --zas-yellow-hover: var(--zt-yellow-hover);
    --ztc-yellow-dark: var(--zt-yellow-hover);
}

/* ------------------------------------------------------------
   0b. ЧИТАЕМЫЙ ТЕКСТ НА ЖЁЛТОМ

   Белый на #FFB800 даёт 1,74:1 при норме 4,5:1. Тёмный — 10,9:1.
   Правило общее, потому что «белым по жёлтому» встречается
   не только в кнопке каталога.
   ------------------------------------------------------------ */
.zt-catalog-button,
.yellow-button,
.zt-callback-button,
[class*="--yellow"],
[class*="btn-yellow"] {
    color: #1a1a1a;
}

/* ------------------------------------------------------------
   0. ПРИМЕНЕНИЕ ЕДИНОГО ШРИФТА

   @font-face и токены живут в zt-fonts.css, который подключается
   первым. Но САМО применение font-family обязано идти последним:
   иначе его перебивают 20 файлов стилей, где шрифт задан явно.
   Отсюда !important — он уйдёт вместе со сведением слоёв (этап 8).

   Замер до правки: 51 элемент из 268 отрисовывался Arial'ом.
   ------------------------------------------------------------ */
body,
body *:not(i):not([class*="swiper-icon"]):not([class^="ti-"]) {
    font-family: var(--zt-font, 'Inter', 'PT Sans Caption', Arial, sans-serif) !important;
}

/* Иконочные шрифты трогать нельзя — иначе вместо иконок квадраты */
[class*="swiper-button"],
[class*="swiper-icon"],
.swiper-button-next,
.swiper-button-prev {
    font-family: swiper-icons !important;
}

/* ------------------------------------------------------------
   2b. КНОПКА КАТАЛОГА — КОНТРАСТ И ОБРЕЗКА

   header-polish.css:2545-2555 принудительно красит подпись
   в #fff !important поверх жёлтого фона. Контраст белого на
   жёлтом — 1,50:1 при норме WCAG 4,5:1. Это главная кнопка
   сайта, и её текст читается хуже всего на странице.

   Тёмный текст на том же жёлтом даёт около 11:1.
   ------------------------------------------------------------ */
.zt-header a.zt-catalog-button > .zt-catalog-button__label,
.zt-header a.zt-catalog-button:hover > .zt-catalog-button__label,
.zt-header a.zt-catalog-button:focus-visible > .zt-catalog-button__label,
.zt-header a.zt-catalog-button:active > .zt-catalog-button__label {
    color: #1a1a1a !important;
    display: inline-block;
    /* 0 0 auto, а не 0 1 auto: подпись не должна сжиматься —
       именно сжатие и давало обрезку текста */
    flex: 0 0 auto !important;
    width: auto !important;
    max-width: none !important;
    min-width: max-content;
    overflow: visible !important;
    text-overflow: clip !important;
    white-space: nowrap;
}

.zt-header .zt-catalog-button {
    color: #1a1a1a;
    justify-content: center;
}

/* Иконки не должны отбирать место у подписи */
.zt-header .zt-catalog-button__icons {
    flex: 0 0 auto;
}

/* ------------------------------------------------------------
   3b. СТРОКА НАВИГАЦИИ НЕ ПЕРЕНОСИТСЯ

   .zt-nav__inner — flex, а .zt-nav__list имеет margin-left: 260px
   (header-new.css:329), который на средних ширинах съедает всё
   место, и избранное с корзиной вылетают на вторую строку.
   ------------------------------------------------------------ */
@media (min-width: 1400px) {
    .zt-header .zt-nav__inner {
        flex-wrap: nowrap;
    }

    .zt-header .zt-nav__list {
        min-width: 0;
        flex: 1 1 auto;
    }

    /* Иконки всегда прижаты вправо и стоят рядом */
    .zt-header .zt-nav__inner > .zt-header-favorite {
        margin-left: auto;
    }

    .zt-header .zt-nav__inner > .zt-header-favorite + .zt-header-cart {
        margin-left: 8px;
    }
}

/* Между 1025 и 1480 отступ под кнопку каталога уменьшаем,
   иначе меню нечем дышать */
@media (max-width: 1480px) and (min-width: 1400px) {
    .zt-header .zt-nav__list {
        margin-left: 150px;
    }
}

/* ------------------------------------------------------------
   6. ШАПКА НА УЗКИХ ЭКРАНАХ — РАЗГРУЗКА

   Корзина и избранное переехали вниз, значит из шапки их можно
   убрать. Освободившееся место отдаём поиску и телефону.
   ------------------------------------------------------------ */
@media (max-width: 1399px) {
    .zt-header .zt-header-favorite,
    .zt-header .zt-header-cart {
        display: none !important;
    }

    /* Телефон возвращается на узкие экраны — сейчас он скрыт
       ниже 1400 и не появляется больше нигде. Для B2B-продаж
       запчастей это важнее любой косметики. */
    .zt-header .zt-header-callphone {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 44px;
        min-height: 44px;
        color: #f2c94c;
    }

    .zt-header .zt-header-callphone svg {
        width: 22px;
        height: 22px;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.8;
    }
}

@media (min-width: 1400px) {
    .zt-header .zt-header-callphone {
        display: none;
    }
}

/* ------------------------------------------------------------
   Печать: панель не нужна
   ------------------------------------------------------------ */
@media print {
    .zt-bottombar,
    .zt-contact-sheet {
        display: none !important;
    }

    body {
        padding-bottom: 0 !important;
    }
}

/* ------------------------------------------------------------
   8. НИЖНЯЯ ГРАНИЦА ЧИТАЕМОСТИ — 12px

   В живых файлах стилей 119 правил с кеглем меньше 12px:
   contacts-redesign.css — 32, poisk-results.css — 29,
   product-detail.css — 17, style.css — 10, 404.css — 8.
   Встречаются 7,4px, 8px, 8,5px, 9px, 9,5px, 9,8px, 10,2px.

   Это следы подхода «уменьшаем, пока не влезет». Хуже всего то,
   что больше всего таких мест на страницах контактов и результатов
   поиска — ровно там, где клиент читает детали: наличие, цену,
   артикул, адрес склада.

   Список собран автоматически из 15 живых файлов стилей.
   06.08.2026: селекторы #ztHomeMediaV2 исключены — модуль
   переверстан и держит кегли ≥12 сам (П-2 аудита типографики).
   ------------------------------------------------------------ */.home-certificate-card__placeholder,
.home-media-module__all,
.home-news-card__date,
.home-news-card__more,
.home-news-card__title,
.main-menu .cart .items-count,
.poisk-filters__eyebrow,
.poisk-filters__more,
.poisk-filters__option,
.poisk-filters__option-count,
.poisk-filters__price input,
.poisk-filters__price label > span,
.poisk-filters__reset,
.poisk-filters__search input,
.poisk-product__added,
.poisk-product__brand,
.poisk-product__client-price-label,
.poisk-product__image-label,
.poisk-product__property-label,
.poisk-product__stock,
.poisk-results .poisk-filter-links__item,
.poisk-results .poisk-filter-links__item small,
.poisk-results__batch-missing-list span,
.poisk-results__export-button,
.poisk-results__export-label,
.poisk-results__filter-toggle,
.poisk-results__filter-toggle-count,
.poisk-results__page-size-wrap > span,
.poisk-results__sort,
.poisk-results__sort-wrap > span,
.poisk-results__toolbar-badge,
.top-header .button .cart-button .items-count,
.zt-404__badge,
.zt-404__eyebrow,
.zt-404__links,
.zt-404__scene-note,
.zt-advanced-search__batch p,
.zt-advanced-search__batch-bar,
.zt-advanced-search__batch-bar button,
.zt-advanced-search__drop-copy small,
.zt-advanced-search__examples button,
.zt-advanced-search__missing span,
.zt-commerce-toast__close,
.zt-commerce-toast__eyebrow,
.zt-commerce-toast__message,
.zt-contact-card__badge,
.zt-contact-card__details a,
.zt-contact-card__route,
.zt-contact-region__head > div > span,
.zt-contact-region__toggle,
.zt-contacts-help button,
.zt-contacts-help li,
.zt-contacts-help p,
.zt-contacts-map__head a,
.zt-contacts-map__head span,
.zt-contacts-map__legend li,
.zt-contacts__breadcrumbs,
.zt-contacts__eyebrow,
.zt-detail-cart__status,
.zt-detail-more-specs summary,
.zt-detail-panel__body,
.zt-detail-panel__count,
.zt-detail-panel__empty,
.zt-detail-panel__eyebrow,
.zt-detail-replacements a,
.zt-detail-spec span,
.zt-detail-spec strong,
.zt-favorite-card__basket-status,
.zt-favorite-card__manufacturer,
.zt-favorite-card__price-label,
.zt-favorite-card__unit-price,
.zt-header .zt-company-menu__eyebrow,
.zt-header .zt-header-action-count,
.zt-header .zt-header-cart .basket-count,
.zt-header .zt-header-cart .zt-header-action-count,
.zt-product-detail .badge.in-stock,
.zt-product-detail .store .items-headers,
.zt-product-detail .store .zt-detail-store-row span,
.zt-product-detail .store .zt-detail-store-row strong,
.zt-product-detail .tech-table .item > div:first-child,
.zt-product-detail__eyebrow,
.zt-product-detail__price-value > span,
.zt-product-related__eyebrow,
.zt-region-tab,
.zt-region-tabs__label,
.zt-region-tabs__quick span,
.zt-region-tabs__quick strong,
.zt-search-catalog.poisk-results .poisk-product__cart-button--added {
    font-size: var(--zt-fs-xs, 12px) !important;
}

/* ------------------------------------------------------------
   2c. КНОПКА КАТАЛОГА — ПОДГОНКА ПОД КОЛОНКУ СЕТКИ

   Настоящая причина обрезки найдена в разборе стилей:
   .zt-header__top-inner — это CSS Grid, и кнопка сидит во второй
   колонке фиксированной ширины. Само свойство grid-template-columns
   задано ШЕСТНАДЦАТЬ раз в двух файлах, из них половина мертва.

   Воевать с шестнадцатью объявлениями сетки дороже и опаснее,
   чем ужать содержимое кнопки под колонку. Экономим ~60px:
   поля 28→14, отступ 20→8, кегль 18→15.
   ------------------------------------------------------------ */
.zt-header .zt-catalog-button {
    padding-left: 14px !important;
    padding-right: 14px !important;
    gap: 8px !important;
    font-size: 15px !important;
    letter-spacing: 0 !important;
}

@media (max-width: 1500px) {
    .zt-header .zt-catalog-button {
        font-size: 14px !important;
        padding-left: 10px !important;
        padding-right: 10px !important;
        gap: 6px !important;
    }
}
/* Корзина и избранное ниже 1400 живут только в нижней панели.
   Селекторы с тем же родителем, что в header-new.css:597 —
   иначе он выигрывает по специфичности и корзина остаётся в шапке. */
@media (max-width: 1399px) {
    .zt-header .zt-header-favorite,
    .zt-header .zt-header-cart,
    .zt-nav > .zt-shell > .zt-header-favorite,
    .zt-nav > .zt-shell > .zt-header-cart {
        display: none !important;
    }
}

/* Корзину ниже 1400 держит header-polish.css правилом
     @media (max-width:1399px)
     .zt-header .zt-nav > .zt-shell > .zt-header-cart { display: flex !important }
   Это четыре класса — специфичность (0,4,0). Повторяем ровно её:
   при равной специфичности выигрывает файл, подключённый позже. */
@media (max-width: 1399px) {
    .zt-header .zt-nav > .zt-shell > .zt-header-cart,
    .zt-header .zt-nav > .zt-shell > .zt-header-favorite {
        display: none !important;
    }
}

/* ------------------------------------------------------------
   9. ПОЛОСА 1080–1399: МЕНЮ НАЛЕЗАЛО НА ШАПКУ

   Замер 2026-08-04: в этом диапазоне .zt-header__top-inner и .zt-nav
   занимают ОДНУ И ТУ ЖЕ полосу — обе y=0..84. Навигация рисуется
   поверх верхней строки: логотипа, поиска, кнопки каталога.

   При этом пункты меню не масштабируются вообще — координаты
   «Главная» 20-120 и «Запчасти» 122-238 одинаковы и на 1383,
   и на 1074. За правый край вылезают от одного до трёх пунктов.

   Решение согласовано с общей логикой: ниже 1400 сайт и так
   переключается на бургер, а корзина с избранным ушли в нижнюю
   панель. Значит горизонтальному меню здесь делать нечего —
   его роль берут бургер и нижняя панель.
   ------------------------------------------------------------ */
@media (max-width: 1399px) {
    .zt-header .zt-nav {
        display: none !important;
    }

    .zt-header .zt-nav__list,
    .zt-header .zt-mega,
    .zt-header .zt-company-menu {
        display: none !important;
    }

    /* Бургер и поиск живут в верхней строке — они остаются */
    .zt-header .zt-mobile-trigger,
    .zt-header .zt-mobile-menu-button {
        display: inline-flex !important;
    }
}

/* ------------------------------------------------------------
   9b. МАСШТАБИРОВАНИЕ ПУНКТОВ МЕНЮ НА ДЕСКТОПЕ

   Выше 1400 меню остаётся, но при сужении пункты сохраняли
   фиксированные отступы и вылезали за край. Теперь они плавно
   ужимаются, а список умеет сжиматься целиком.
   ------------------------------------------------------------ */
@media (min-width: 1400px) {
    .zt-header .zt-nav__list {
        display: flex;
        flex-wrap: nowrap;
        min-width: 0;
        overflow: hidden;
    }

    .zt-header .zt-nav__item {
        flex: 0 1 auto;
        min-width: 0;
    }

    .zt-header .zt-nav__link,
    .zt-header .zt-nav__trigger {
        white-space: nowrap;
        min-width: 0;
    }
}

@media (min-width: 1400px) and (max-width: 1700px) {
    .zt-header .zt-nav__link,
    .zt-header .zt-nav__trigger {
        font-size: 15px !important;
        padding-left: 8px !important;
        padding-right: 8px !important;
        gap: 7px !important;
    }

    .zt-header .zt-nav__icon {
        width: 21px !important;
        height: 21px !important;
    }
}

@media (min-width: 1701px) and (max-width: 1880px) {
    .zt-header .zt-nav__link,
    .zt-header .zt-nav__trigger {
        font-size: 16px !important;
        padding-left: 11px !important;
        padding-right: 11px !important;
    }
}

/* ------------------------------------------------------------
   10. МОБИЛЬНАЯ ШАПКА: БУРГЕР СЛЕВА, ЛОГОТИП СПРАВА,
       СЖАТИЕ ДО ПОИСКА ПРИ ПРОКРУТКЕ ВНИЗ

   Было: grid 52px | 1fr | 52px — бургер слева, логотип по центру,
   третья колонка пустая (там жила корзина, теперь она в нижней
   панели). Поиск занимал вторую строку.

   Стало: две колонки, логотип прижат вправо. При прокрутке вниз
   строка с бургером и логотипом схлопывается, наверху остаётся
   только поиск. При прокрутке вверх возвращается.
   ------------------------------------------------------------ */
@media (max-width: 767px) {
    .zt-header .zt-header__top-inner {
        grid-template-columns: minmax(0, 1fr) 52px !important;
        align-items: center;
    }

    /* Логотип слева */
    .zt-header .zt-header__logo {
        grid-column: 1 !important;
        justify-self: start !important;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    /* Бургер справа — под большой палец правой руки */
    .zt-header .zt-mobile-trigger {
        grid-column: 2 !important;
        justify-self: end !important;
        margin-left: 0 !important;
    }

    .zt-header .zt-search {
        grid-column: 1 / -1 !important;
    }
}

/* Сжатие при прокрутке вниз — до 1023, то есть и на небольших планшетах */
@media (max-width: 1023px) {
    .zt-header .zt-mobile-trigger,
    .zt-header .zt-header__logo {
        transition: opacity .14s ease;
        will-change: opacity, max-height;
    }

    .zt-header.zt-header--compact .zt-mobile-trigger,
    .zt-header.zt-header--compact .zt-header__logo {
        opacity: 0;
        max-height: 0;
        margin-top: 0 !important;
        margin-bottom: 0 !important;
        padding-top: 0 !important;
        padding-bottom: 0 !important;
        overflow: hidden;
        pointer-events: none;
        transform: translateY(-8px);
    }

    .zt-header.zt-header--compact .zt-header__top-inner {
        row-gap: 0 !important;
        padding-top: 6px !important;
        padding-bottom: 6px !important;
    }

    /* Поиск в сжатом состоянии — единственный элемент, даём ему всё место */
    .zt-header.zt-header--compact .zt-search {
        grid-column: 1 / -1 !important;
        margin-top: 0 !important;
    }
}

/* Уважаем системную настройку «уменьшить движение» */
@media (prefers-reduced-motion: reduce) {
    .zt-header .zt-mobile-trigger,
    .zt-header .zt-header__logo {
        transition: none !important;
    }
}

/* ------------------------------------------------------------
   11. НИЖНЯЯ ПАНЕЛЬ: ПОДПИСИ НЕ ВЛЕЗАЛИ В ЯЧЕЙКУ

   Замер на 360px: ячейка 66px, а подпись «Избранное» требует 85px,
   «Связаться» — 81px. Кегль наследовался от body (16px) вместо
   заданных 11px — правило .zt-bottombar__item задавало размер
   самой кнопке, но подпись перебивалась общим правилом типографики.

   Задаём размер прямо подписи и добавляем ступени для узких
   экранов. Нижняя граница читаемости здесь снижена осознанно:
   это подпись под иконкой, а не текст для чтения, и рядом
   всегда есть понятная иконка.
   ------------------------------------------------------------ */
@media (max-width: 1399px) {
    .zt-header ~ .zt-bottombar .zt-bottombar__label,
    .zt-bottombar .zt-bottombar__label {
        /* П-6: 12 — нижняя граница шкалы; это главная навигация телефона.
           Вес напрямую: reset задаёт 400 каждому элементу, наследование
           от кнопки не срабатывает. */
        font-size: 12px !important;
        font-weight: 500 !important;
        line-height: 1.15 !important;
        letter-spacing: -0.01em;
        max-width: 100%;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .zt-bottombar .zt-bottombar__item {
        padding-left: 1px;
        padding-right: 1px;
        min-width: 0;
    }
}

/* Узкие телефоны: 360–390 */
@media (max-width: 400px) {
    .zt-bottombar .zt-bottombar__label {
        font-size: 11px !important;
        letter-spacing: -0.02em;
    }

    .zt-bottombar .zt-bottombar__icon svg {
        width: 21px;
        height: 21px;
    }
}

/* N-400/N-401: на 360/414 остаются только увеличенные иконки.
   Пять равных grid-ячеек дают одинаковый шаг по всей ширине шейпа. */
@media (max-width: 430px) {
    .zt-bottombar {
        grid-template-columns: repeat(5, minmax(0, 1fr));
        align-items: stretch;
    }

    .zt-bottombar .zt-bottombar__item {
        width: 100%;
        min-width: 0;
        min-height: 56px;
        gap: 0;
        padding: 0;
        justify-content: center;
    }

    .zt-bottombar .zt-bottombar__label {
        display: none !important;
    }

    .zt-bottombar .zt-bottombar__icon {
        width: 30px;
        height: 30px;
        flex: 0 0 30px;
    }

    .zt-bottombar .zt-bottombar__icon svg {
        width: 28px;
        height: 28px;
    }
}

/* Совсем узкие: 320–360 — подписи прячем, остаются иконки.
   Тач-цель и смысл сохраняются: у каждой кнопки есть aria-label. */
@media (max-width: 340px) {
    .zt-bottombar .zt-bottombar__label {
        display: none;
    }

    .zt-bottombar .zt-bottombar__item {
        min-height: 52px;
    }
}

/* Схлопываем саму строку сетки, а не только её содержимое.
   Без этого max-height: 0 у бургера и логотипа убирает их с глаз,
   но строка grid продолжает держать высоту: замер давал 125px
   вместо ожидаемых ~70. */
@media (max-width: 1023px) {
    .zt-header.zt-header--compact .zt-header__top-inner {
        grid-template-rows: 0px auto !important;
        /* Именно min-height держал высоту: строка бургера схлопывалась
           в 0px, но блок оставался 124px, и поиск разъезжался в пустоте.
           Замер до правки: 125px вместо ожидаемых ~60. */
        min-height: 0 !important;
        height: auto !important;
    }

    .zt-header.zt-header--compact .zt-header__top {
        min-height: 0 !important;
    }
}

/* ------------------------------------------------------------
   12. 1400–1600: ПУНКТЫ МЕНЮ ЗАЛЕЗАЛИ ПОД ИЗБРАННОЕ

   Замер: на 1400 списку нужно 1408px, доступно 1242 — дефицит
   166px, последний пункт заходил на избранное на 156px.
   На 1450 — 129px, на 1500 — 98px, на 1550 — 50px.
   Чисто становилось только с 1583.

   Основной пожиратель места — margin-left у списка: 260px
   в header-new.css:329, 210px и 160px в медиазапросах. Этот
   отступ расчищал место под кнопку каталога, но кнопка стала
   заметно уже после раздела 2c. Возвращаем себе эти пиксели
   и дополнительно ужимаем сами пункты.
   ------------------------------------------------------------ */
@media (min-width: 1400px) and (max-width: 1600px) {
    .zt-header .zt-nav__list {
        margin-left: 40px !important;
        margin-right: 16px !important;
        gap: 0 !important;
        column-gap: 6px !important;
    }

    .zt-header .zt-nav__link,
    .zt-header .zt-nav__trigger {
        font-size: 14px !important;
        padding-left: 5px !important;
        padding-right: 5px !important;
        gap: 5px !important;
        letter-spacing: -0.01em !important;
    }

    .zt-header .zt-nav__icon {
        width: 18px !important;
        height: 18px !important;
        flex: 0 0 18px !important;
    }

    .zt-header .zt-nav__chevron {
        width: 12px !important;
        height: 12px !important;
    }
}

@media (min-width: 1601px) and (max-width: 1780px) {
    .zt-header .zt-nav__list {
        margin-left: 90px !important;
        column-gap: 12px !important;
    }

    .zt-header .zt-nav__link,
    .zt-header .zt-nav__trigger {
        font-size: 15px !important;
        padding-left: 6px !important;
        padding-right: 6px !important;
    }
}

@media (min-width: 1781px) {
    /* На широких экранах места хватает — отступ и зазор крупнее */
    .zt-header .zt-nav__list {
        margin-left: 0 !important;
        column-gap: 16px !important;
    }
}

/* Страховка: если где-то всё равно не хватит места, пункты
   ужмутся, а не наедут на иконки справа. */
@media (min-width: 1400px) {
    .zt-header .zt-nav__inner {
        flex-wrap: nowrap !important;
    }

    .zt-header .zt-nav__list {
        flex: 1 1 auto !important;
        min-width: 0 !important;
    }

    .zt-header .zt-nav__item {
        flex: 0 1 auto !important;
        min-width: 0 !important;
    }

    .zt-header .zt-header-favorite,
    .zt-header .zt-header-cart {
        flex: 0 0 auto !important;
        position: relative !important;
        z-index: 2;
    }
}

/* Схлопывание строки — без анимации высоты.
   Анимировать max-height и grid-template-rows нельзя: пока идёт
   переход, высота шапки меняется каждый кадр, браузер подправляет
   позицию прокрутки, и обработчик видит это как движение в другую
   сторону. Отсюда мерцание. Плавно гасим только прозрачность. */
@media (max-width: 1023px) {
    .zt-header .zt-header__top-inner,
    .zt-header.zt-header--compact .zt-header__top-inner {
        transition: none !important;
    }

    .zt-header .zt-mobile-trigger,
    .zt-header .zt-header__logo {
        transition: opacity .14s ease !important;
    }

    /* Шапка не должна прыгать по высоте во время самой прокрутки */
    .zt-header {
        will-change: auto;
    }
}

/* Никаких переходов на схлопывании шапки.
   Затухание прозрачности при переключении глаз читает как мигание,
   особенно если состояние меняется на границе порога. Состояние
   теперь переключается по позиции прокрутки с мёртвой зоной 80px,
   так что переключение происходит один раз и резко — это правильно. */
@media (max-width: 1023px) {
    .zt-header,
    .zt-header *,
    .zt-header .zt-mobile-trigger,
    .zt-header .zt-header__logo,
    .zt-header .zt-header__top-inner,
    .zt-header .zt-search {
        transition: none !important;
        animation: none !important;
    }
}

/* ------------------------------------------------------------
   7. ПРАВКИ ЗАКАЗЧИКА СО СТЕНДА — 06.08.2026
   Источник: Стенд/правки/notes.json, N-001…N-009.
   ------------------------------------------------------------ */

/* N-001: «Сервис» и «О компании» — кнопки .zt-nav__trigger шли
   весом 400 против 700 у соседних ссылок меню */
.zt-nav__trigger {
    font-weight: 700 !important;
}

/* N-001: иконки пунктов меню — правится в zt-home-unify.css
   (там жила экономия 15px; теперь она ограничена полосой
   1400–1780, на широких экранах иконки 18px) */

/* N-002, N-003: счётчики корзины и избранного опущены к иконке —
   висели заметно выше неё. Селектор двойным классом: правила
   header-nav-v28/header-commerce держат top с !important
   на специфичности (0,3,0) */
.zt-header .zt-header-cart .zt-header-action-count.zt-header-action-count,
.zt-header .zt-header-favorite .zt-header-action-count.zt-header-action-count {
    top: 20px !important;
}

/* N-004: подпись кнопки «Каталог» — белая по указанию заказчика.
   ⚠ Контраст белого на жёлтом 1,50:1 при норме WCAG 4,5:1 —
   риск читаемости зафиксирован, решение заказчика (N-004). */
.zt-header .zt-catalog-button > span,
.zt-header a.zt-catalog-button > span,
.zt-mobile-actions__catalog > span,
.zt-catalog-button .zt-catalog-button__label {
    color: #ffffff !important;
    -webkit-text-fill-color: #ffffff !important;
}

/* N-005: лого меньше (было 264×52; размером управляет width,
   height у слоёв шапки задан как auto) */
.zt-header a.zt-header__logo img,
.zt-header .zt-header__logo img {
    width: 213px !important;
    height: auto !important;
}

/* N-006: кнопка MAX — квадрат высотой с кнопку «Заказ» (48px,
   радиус 8, как у неё), вместо вытянутой 35×70 */
.zt-header a.zt-max-button,
.zt-header .zt-max-button,
.zt-max-button {
    width: 48px !important;
    min-width: 48px !important;
    max-width: 48px !important;
    height: 48px !important;
    min-height: 48px !important;
    align-self: center !important;
    border-radius: 8px !important;
}

/* N-007: панель поиска героя — содержимое было прижато кверху,
   снизу оставалась пустота ~90px. Распределяем по вертикали */
.zip-home-hero .zip-home-search {
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
}

/* N-009: «Получить скидку» 15/700 — правится в блоке П-3
   zt-home-unify.css (перенесена в роль главной кнопки) */

/* ------------------------------------------------------------
   8. ПРАВКИ ЗАКАЗЧИКА СО СТЕНДА — ВТОРАЯ ПОРЦИЯ (06.08.2026)
   Источник: Стенд/правки/notes.json, N-021…N-040.
   ------------------------------------------------------------ */

/* N-021: пункты меню — «наоборот не жирными» (уточнение к N-001:
   вместо выравнивания всех на 700 — все на 500) */
.zt-header .zt-nav__link,
.zt-header .zt-nav__trigger,
.zt-nav__trigger {
    font-weight: 500 !important;
}

/* N-021: «Главная» начинается на одной вертикали с логотипом —
   меню было сдвинуто вправо на 90px */
.zt-header .zt-nav__list {
    margin-left: 0 !important;
    padding-left: 0 !important;
}

.zt-header .zt-nav__list > li:first-child > a {
    padding-left: 0 !important;
}

/* N-023: строка поиска по высоте равна кнопке «Каталог» (была 70) */
.zt-header [id^="zt-live-search"],
.zt-header .zt-header-search input[type="text"],
.zt-header .zt-header-search input[type="search"] {
    height: 48px !important;
    min-height: 48px !important;
}

/* N-024: блок телефона и почты — по высоте кнопки «Каталог» (был 62) */
.zt-header .zt-contact {
    height: 48px !important;
    min-height: 48px !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    gap: 4px !important;
    align-self: center !important;
}

/* N-025: значки в шапке крупнее (контактные 21 → 24, мелкие 15 → 18;
   иконки меню правит zt-home-unify по брейкпоинтам) */
.zt-header .zt-contact svg,
.zt-header .zt-header-favorite svg,
.zt-header .zt-header-cart svg,
.zt-header .cart-area svg {
    width: 24px !important;
    height: 24px !important;
}

/* N-026: панель поиска героя потеряла левый паддинг
   (26 26 26 0) — контент прижимался к краю карточки */
.zip-home-hero .zip-home-search {
    padding: 26px !important;
}

/* N-027…N-035: единый стиль стрелок каруселей — квадрат
   со скруглением вместо кругов, размер как у баннера (44) */
.zip-home-hero .swiper-button-prev,
.zip-home-hero .swiper-button-next,
.zip-brands__arrow,
.zt-sale-products__arrow,
#ztHomeMediaV2 .zt-home-cert-v2__prev,
#ztHomeMediaV2 .zt-home-cert-v2__next {
    width: 44px !important;
    height: 44px !important;
    min-width: 44px !important;
    border-radius: 10px !important;
}

/* N-039, N-040: «Все новости» / «Все документы» — скругление
   как у остальных кнопок, а не пилюля */
#ztHomeMediaV2 .zt-home-media-v2__all {
    border-radius: 8px !important;
}

/* N-038: чекбокс согласия — квадратный (радиус был 8 при 16px) */
#ziptehLeadModule input[type="checkbox"] {
    border-radius: 3px !important;
}

/* ------------------------------------------------------------
   9. ПРАВКИ ЗАКАЗЧИКА СО СТЕНДА — ТРЕТЬЯ ПОРЦИЯ (06.08.2026)
   Источник: Стенд/правки/notes.json, N-042…N-055.
   Иконки меню 22px — в zt-home-unify (N-043…N-052).
   ------------------------------------------------------------ */

/* N-042: строка поиска немного короче */
.zt-header [id^="zt-live-search"] {
    max-width: 700px !important;
}

/* N-053: сердце избранного того же размера, что иконка корзины (34) */
.zt-header .zt-header-favorite svg {
    width: 34px !important;
    height: 34px !important;
}

/* N-054: «Все бренды» — в стиле ссылки «Смотреть все» из товаров:
   без жёлтой заливки, охристый текст 14/600 со стрелкой */
.zip-brands .zip-brands__all.zip-brands__all {
    min-height: 0 !important;
    padding: 0 !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    color: #e8a600 !important;
    font-size: 14px !important;
    font-weight: 600 !important;
    gap: 7px !important;
    text-decoration: none !important;
}

.zip-brands .zip-brands__all.zip-brands__all span {
    color: inherit !important;
}

.zip-brands .zip-brands__all .zip-brands__all-chevron {
    width: 16px;
    height: 16px;
    flex: 0 0 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    transition: transform .18s ease;
}

.zip-brands .zip-brands__all:hover .zip-brands__all-chevron {
    transform: translateX(3px);
}

/* N-057, N-058: маркер надзаголовка — оптическое выравнивание
   по центру капс-текста (заглавные без нижних выносных сидят
   выше геометрического центра строки) */
#ztHomeMediaV2 .zt-home-media-v2__eyebrow-dot {
    margin-top: -1px !important;
}

/* N-059: «В корзину» — во всю ширину карточки, отступы от краёв —
   паддинги тела карточки (как справа). Селектор усилен: инлайн-слой
   модуля товаров стоит в каскаде позже этого файла */
#ztSaleProducts.zt-sale-products .zt-product-card__cart,
#ztSaleProducts.zt-sale-products .zt-product-card__buttons .zt-product-card__cart {
    width: 100% !important;
    flex: 1 1 auto !important;
}

#ztSaleProducts.zt-sale-products .zt-product-card__buttons {
    width: 100% !important;
    display: flex !important;
}

/* N-060: слайдер товаров не режет карточку при hover-подъёме
   (translateY(-3px)) и её тень */
#ztSaleProducts.zt-sale-products .zt-sale-products__slider {
    padding-top: 8px !important;
    margin-top: -7px !important;
}

/* ------------------------------------------------------------
   10. ПРАВКИ ЗАКАЗЧИКА СО СТЕНДА — ЧЕТВЁРТАЯ ПОРЦИЯ (06.08.2026)
   Источник: Стенд/правки/notes.json, N-061…N-070.
   ------------------------------------------------------------ */

/* N-061: строка поиска занимает всё доступное место строки
   (отменяет ограничение 700px из N-042 — уточнение заказчика);
   расположение соседних кнопок задаёт грид шапки и не меняется */
.zt-header [id^="zt-live-search"],
.zt-header .zt-header-search input[type="text"],
.zt-header .zt-header-search input[type="search"] {
    max-width: none !important;
    width: 100% !important;
}

.zt-header .zt-search.zt-live-search {
    flex: 1 1 auto !important;
    width: 100% !important;
}

/* N-062: панель «О компании» — та же ширина, что у панели «Сервис»
   (у компании не было max-width, на широких мониторах она
   растягивалась на всё окно) */
.zt-mega.zt-mega--company {
    max-width: 1992px !important;
}

/* N-063: «Все бренды» стоит ПЕРЕД стрелками (как «Смотреть все»
   в товарах) */
.zip-brands__controls {
    display: flex !important;
    align-items: center !important;
}

.zip-brands__controls .zip-brands__all {
    order: -1 !important;
    margin-right: 10px !important;
}

/* N-064: точки слайдера товаров ниже — карточки их перекрывали */
#ztSaleProducts.zt-sale-products .zt-sale-products__slider {
    padding-bottom: 42px !important;
}

/* N-065: верхняя полоса шапки компактнее (кнопки стали 48,
   полоса держала min-height 126) — меню поднимается выше */
.zt-header .zt-header__top-inner {
    min-height: 96px !important;
}

/* N-068, N-069: фото новостей с лёгким постоянным зумом —
   у части исходников белые поля внутри самого файла, зум
   обрезает их и картинка заполняет карточку, как в третьей */
#ztHomeMediaV2 .zt-home-news-v2__image img {
    transform: scale(1.12) !important;
}

/* N-070: подпись «* — обязательные поля» — в строке согласия,
   справа (разметкой перенесена внутрь form-area) */
#ziptehLeadModule .zlc-form .zl-consent-label {
    flex: 1 1 auto !important;
    width: auto !important;
}

#ziptehLeadModule .zlc-form .zl-required-note {
    order: 3 !important;
    align-self: center !important;
    margin-top: 0 !important;
    margin-left: auto !important;
    white-space: nowrap !important;
}

/* N-070 (доводка): строку делит контейнер согласия .form-item,
   а не label внутри него — ужимаем контейнер, подпись справа */
#ziptehLeadModule .form-area > .form-item:has(.zl-consent-label) {
    flex: 0 1 auto !important;
    width: auto !important;
    min-width: 0 !important;
}

#ziptehLeadModule .form-area > .zl-required-note {
    flex: 0 0 auto !important;
    width: auto !important;
    margin-left: auto !important;
}

/* N-064 (доводка): пагинация товаров стоит в потоке (не абсолют) —
   отступ от карточек задаётся margin-top */
#ztSaleProducts.zt-sale-products .zt-sale-products__pagination {
    margin-top: 14px !important;
}

/* ------------------------------------------------------------
   11. ПРАВКИ ЗАКАЗЧИКА СО СТЕНДА — ПЯТАЯ ПОРЦИЯ (06.08.2026)
   Источник: Стенд/правки/notes.json, N-071…N-072 (планшет ~905).
   ------------------------------------------------------------ */

/* N-071 + доводка «шапка в один ряд» (06.08.2026): на планшетной
   ширине верхняя полоса — ОДНА строка: лого | поиск | контакты |
   бургер. Контакты стоят после формы поиска (N-071), ничего
   не переносится на вторую строку */
@media (max-width: 1080px) and (min-width: 768px) {
    .zt-header .zt-header__top-inner {
        display: flex !important;
        flex-wrap: nowrap !important;
        align-items: center !important;
        gap: 14px !important;
        min-height: 72px !important;
    }

    .zt-header .zt-header__top-inner .zt-header__logo {
        order: 0 !important;
        flex: 0 0 auto !important;
    }

    .zt-header .zt-header__top-inner .zt-search.zt-live-search {
        order: 1 !important;
        flex: 1 1 auto !important;
        width: auto !important;
        min-width: 0 !important;
    }

    .zt-header .zt-header__top-inner .zt-contact {
        order: 2 !important;
        width: auto !important;
        height: auto !important;
        min-height: 0 !important;
        flex: 0 0 auto !important;
        flex-direction: column !important;
        justify-content: center !important;
        align-items: flex-start !important;
        gap: 2px !important;
    }

    .zt-header .zt-header__top-inner .zt-mobile-trigger,
    .zt-header .zt-header__top-inner #open-mobile-menu {
        order: 3 !important;
        flex: 0 0 auto !important;
        align-self: center !important;
    }
}

/* N-072: бургер — без жёлтого фона, три ровные одинаковые линии */
#open-mobile-menu,
.zt-mobile-menu-button {
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
}

#open-mobile-menu span,
.zt-mobile-menu-button span {
    position: relative !important;
    display: block !important;
    width: 22px !important;
    height: 2px !important;
    background: #333a43 !important;
    border-radius: 2px !important;
}

#open-mobile-menu span::before,
#open-mobile-menu span::after,
.zt-mobile-menu-button span::before,
.zt-mobile-menu-button span::after {
    content: "" !important;
    position: absolute !important;
    left: 0 !important;
    width: 22px !important;
    height: 2px !important;
    background: #333a43 !important;
    border-radius: 2px !important;
    transform: none !important;
}

#open-mobile-menu span::before,
.zt-mobile-menu-button span::before {
    top: -7px !important;
}

#open-mobile-menu span::after,
.zt-mobile-menu-button span::after {
    top: 7px !important;
}

/* N-074: мобильная шапка — только логотип, бургер и строка поиска.
   Телефон и почта скрыты: они есть в нижней панели («Связаться»)
   и в подвале */
@media (max-width: 767px) {
    .zt-header .zt-header__top-inner .zt-contact {
        display: none !important;
    }
}

/* N-075: при прокрутке на мобильном от шапки остаётся только
   строка поиска. Класс zt-msearch вешает скрипт шапки */
@media (max-width: 767px) {
    html.zt-msearch .zt-header__top-inner .zt-header__logo,
    html.zt-msearch .zt-header__top-inner .zt-mobile-trigger {
        display: none !important;
    }

    html.zt-msearch .zt-header__top-inner {
        min-height: 0 !important;
        padding-top: 6px !important;
        padding-bottom: 6px !important;
    }
}

/* ------------------------------------------------------------
   12. ПРАВКИ ЗАКАЗЧИКА СО СТЕНДА — ШЕСТАЯ ПОРЦИЯ (06.08.2026)
   N-078…N-081 (форма заявки).
   ------------------------------------------------------------ */

/* N-078/N-079: первая строка — заголовок, вторая — подзаголовок */
#ziptehLeadModule .zlc-title .zlc-title__line--accent {
    font-size: 17px !important;
    font-weight: 600 !important;
    letter-spacing: 0 !important;
    margin-top: 6px !important;
}

/* N-081: поля ввода длиннее — делят ширину формы, кнопка фиксированная */
#ziptehLeadModule .zlc-form .form-area > .form-item.zl-field-cell {
    flex: 1 1 170px !important;
    min-width: 150px !important;
}

/* ------------------------------------------------------------
   13. ШРИФТЫ ПО РОЛЯМ — ВЫБОР ЗАКАЗЧИКА (06.08.2026)

   Подобрано конструктором на стенде: заголовки Russo One,
   текст Tektur (задан токеном --zt-font в zt-fonts.css),
   кнопки и бейджи Manrope. Токены ролей — тоже в zt-fonts.css.
   Селекторы с :not(#zt_) — чтобы перебить глобальное правило
   семейства (body * … !important, раздел про Arial) без правки
   старых слоёв. Иконочные шрифты не задеты.
   ------------------------------------------------------------ */
body h1:not(#zt_):not(#zt_),
body h2:not(#zt_):not(#zt_),
body h3:not(#zt_):not(#zt_),
body h4:not(#zt_):not(#zt_),
body h5:not(#zt_):not(#zt_),
body h6:not(#zt_):not(#zt_),
body [class*="__heading"]:not(#zt_):not(#zt_),
body [class*="__headline"]:not(#zt_):not(#zt_) {
    font-family: var(--zt-font-head, inherit) !important;
}

body button:not([class*="swiper-button"]):not([class*="swiper-pagination"]):not(#zt_):not(#zt_),
body a[class*="button"]:not(#zt_):not(#zt_),
body [class*="button"]:not([class*="swiper-button"]) > span:not(#zt_):not(#zt_),
body input[type="submit"]:not(#zt_):not(#zt_),
body a[class*="__all"]:not(#zt_):not(#zt_),
body a[class*="__more"]:not(#zt_):not(#zt_),
body span[class*="__more"]:not(#zt_):not(#zt_),
body [class*="__tab"]:not(#zt_):not(#zt_) {
    font-family: var(--zt-font-btn, inherit) !important;
}

body [class*="badge"]:not(#zt_):not(#zt_),
body [class*="__tag"]:not(#zt_):not(#zt_),
body [class*="eyebrow"]:not(#zt_):not(#zt_) {
    font-family: var(--zt-font-badge, inherit) !important;
}
