/* =========================================================
   ZIPTEH — единая ширина модулей по сетке новой шапки.
   Шапка использует .zt-shell: max-width 2048px и адаптивные
   боковые отступы 28 / 20 / 14 px.
   ========================================================= */

:root {
    --zt-site-shell-max: 2048px;
    --zt-site-shell-gutter: 28px;
}

/* Все секции главной выходят из старого узкого .container/.block. */
:where(
    .zip-home-hero,
    .zip-category-strip,
    .zip-brands,
    #ztSaleProducts,
    #ztCompanyAdvantages,
    .home-media,
    #ziptehLeadModule,
    #ziptehSiteFooter
) {
    position: relative !important;
    left: 50% !important;
    width: 100vw !important;
    width: 100dvw !important;
    max-width: none !important;
    margin-right: 0 !important;
    margin-left: 0 !important;
    transform: translateX(-50%) !important;
}

/* Внутренние контейнеры получают ровно ту же сетку, что шапка. */
:where(
    .zip-home-hero__shell,
    .zip-category-strip__shell,
    .zip-brands__shell,
    #ztSaleProducts > .zt-sale-products__shell,
    #ztCompanyAdvantages > .zt-company-advantages__shell,
    .home-media > .container,
    #ziptehLeadModule > .zl-shell,
    #ziptehSiteFooter > .footer-2__inner,
    #ziptehSiteFooter .footer-2__copyright-inner
) {
    width: 100% !important;
    max-width: var(--zt-site-shell-max) !important;
    margin-right: auto !important;
    margin-left: auto !important;
    padding-right: var(--zt-site-shell-gutter) !important;
    padding-left: var(--zt-site-shell-gutter) !important;
}

/* Старый блок новостей использует .container — убираем его узкое ограничение. */
.home-media > .container {
    min-width: 0 !important;
}

/* Не даём старым классам .block/.container снова сузить футер и секции. */
#ziptehSiteFooter.block,
.home-media.block {
    max-width: none !important;
}

@media (max-width: 1480px) {
    :root {
        --zt-site-shell-gutter: 20px;
    }
}

@media (max-width: 680px) {
    :root {
        --zt-site-shell-gutter: 14px;
    }
}

/* =========================================================
   Хлебные крошки — единый вид и единый ритм на всех страницах.

   Редакция 07.09.2026 (R-159). Блок сделан САМОДОСТАТОЧНЫМ: он не
   рассчитывает на то, что CSS шаблона компонента
   (/local/templates/zipteh/components/bitrix/breadcrumb/breadcrumbs/style.css)
   будет выложен вместе с ним. Тот файл остался от вёрстки v26 и рисует
   свой разделитель, жёлтую плашку у текущего пункта и поля у ссылок;
   Битрикс подключает его автоматически, поэтому на бою он перебивал всё,
   что задано здесь, а на стенде — нет (стенд статический, компонента там
   нет). Отсюда и бралось расхождение боя со стендом.

   Чтобы этого больше не случилось, все правила ниже заскоплены на
   `.zt-breadcrumbs` — вес 0-2-0 против 0-1-0 у файла компонента. Наши
   выигрывают независимо от порядка подключения. Разбор — «Аудит хлебных
   крошек» §2, §4, §5.

   Оформление — по стенду: кегль 13 px, разделитель «›», ссылки серые
   с жёлтым по наведению, текущий пункт темнее, одна строка на любой ширине.
   ========================================================= */

:root {
    --zt-crumbs-font: clamp(11px, 0.55vw + 8.5px, 13px);

    /* Единый вертикальный ритм крошек. Верхнее значение — расстояние
       от шапки до крошек, нижнее — от крошек до заголовка или контента.
       До правки оба были разными на каждой странице: сверху 50 px на
       внутренних, 18 px в каталоге и 0 на «Контактах» (крошек там не было
       вовсе), снизу 0 / 11 / 20 px — в зависимости от того, чьё правило
       перевесило.

       Числа взяты у каталога. Свой ритм ему задаёт catalog-grid.css
       правилами `html body .content-area.zt-page-content-area--catalog`
       с `!important` — вес 0-2-2, перебить его из этого файла можно было
       бы только повтором класса в селекторе, то есть тем же приёмом, из-за
       которого крошки и разъехались. Поэтому наоборот: остальной сайт
       приведён к каталогу, и catalog-grid.css править не пришлось. */
    --zt-crumbs-space-top: 32px;
    --zt-crumbs-space-bottom: 20px;
}

@media (max-width: 680px) {
    :root {
        /* В каталоге на этой же границе стоит 20 px — совпадает. */
        --zt-crumbs-space-top: 20px;
        --zt-crumbs-space-bottom: 14px;
    }
}

/* ---------------------------------------------------------
   Кегль крошек.

   В файле всегда было написано 13 px, но на экране крошки шли
   16-м: reset.css:19 задаёт `* { font-size: var(--font-size-default) }`,
   то есть 16 px каждому элементу напрямую, и наследование от <nav>
   до <li> и <span> не доходило. Поэтому кегль задаётся элементам
   крошек напрямую и плавно уменьшается на узких экранах:
   13 px от 1024 px и выше, ~12,7 px на планшете, 11 px на телефоне.
   --------------------------------------------------------- */

.breadcrumbs,
.zt-breadcrumbs,
.bx-breadcrumb,
.breadcrumbs *,
.zt-breadcrumbs *,
.bx-breadcrumb * {
    font-size: var(--zt-crumbs-font);
}

/* Отступ снизу — с `!important`, иначе его перебивают сразу трое:
   `margin: 0 !important` из CSS компонента, `.content-area .breadcrumbs
   { margin-bottom: 50px }` (style.css:951, вес 0-2-0) и
   `margin-bottom: 20px !important` ниже 768 px (assets/styles/mobile.css:84).
   Ни один из этих файлов мы не трогаем: в наших копиях style.css
   и mobile.css лежат ещё не выложенные правки, и их выкладка потянула
   бы за собой постороннее. */
.breadcrumbs,
.zt-breadcrumbs,
.bx-breadcrumb {
    line-height: 1.3;
}

/* Селекторы намеренно составные: вес 0-2-0. Простого `.zt-breadcrumbs`
   с `!important` не хватало — `mobile.css:84` объявляет
   `.content-area .breadcrumbs { margin-bottom: 20px !important }`,
   и при равном `!important` побеждает более весомый селектор.
   Проверено на стенде: до правки на 375 px выходило 20 px вместо 12. */
.content-area .breadcrumbs,
.content-area .zt-breadcrumbs,
.zt-breadcrumbs.breadcrumbs,
.bx-breadcrumb.bx-breadcrumb {
    margin: 0 0 var(--zt-crumbs-space-bottom) !important;
}

.breadcrumbs ol,
.zt-breadcrumbs ol {
    display: flex;
    flex-wrap: nowrap;
    gap: 10px;
    align-items: center;
    min-width: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    list-style: none;
}

/* Обнуляем поля и маркеры, которые прилетают элементам списка от общих
   правил темы. На «Сертификатах» и «Вакансиях» шапка кладёт страницу
   в `section.content-area-white`, а style.css:1658 задаёт всем `li`
   внутри такой обёртки `margin-left: 50px; padding-left: 20px` —
   правило для маркированных списков в текстах. Крошкам оно добавляло
   по 70 px на пункт, и на телефоне последний пункт уезжал за экран. */
.zt-breadcrumbs ol > li,
.breadcrumbs ol > li {
    margin: 0 !important;
    padding: 0 !important;
    list-style: none;
}

.zt-breadcrumbs ol > li::marker,
.breadcrumbs ol > li::marker {
    content: none;
}

.zt-breadcrumbs .zt-breadcrumbs__item {
    display: flex;
    flex: 0 1 auto;
    gap: 10px;
    align-items: center;
    min-width: 0;
    color: var(--gray-dark, #909090);
    font-weight: 400;
    white-space: nowrap;
}

/* Разделитель — один, символом «›». Уголок из CSS компонента гасим:
   он рисуется другим псевдоэлементом и сам собой не исчезает, отчего
   между пунктами шли два знака подряд. */
.zt-breadcrumbs .zt-breadcrumbs__item::after {
    content: none;
}

.zt-breadcrumbs .zt-breadcrumbs__item + .zt-breadcrumbs__item::before {
    flex: none;
    color: #c2c8ce;
    content: "›";
}

.zt-breadcrumbs .zt-breadcrumbs__link {
    display: inline-flex;
    min-width: 0;
    min-height: 0;
    gap: 6px;
    align-items: center;
    padding: 0;
    overflow: hidden;
    color: var(--gray-dark, #909090);
    background: none;
    border: 0;
    border-radius: 0;
    text-decoration: none;
    transition: color 160ms ease;
}

.zt-breadcrumbs .zt-breadcrumbs__link:hover,
.zt-breadcrumbs .zt-breadcrumbs__link:focus-visible {
    color: var(--yellow, #ffb800);
    background: none;
    border-color: transparent;
}

/* Иконка дома снята из разметки 07.09.2026 по указанию заказчика.
   Правило оставлено на случай, если где-то попадётся старая разметка
   компонента, ещё с иконкой. */
.zt-breadcrumbs .zt-breadcrumbs__home-icon {
    width: 14px;
    height: 14px;
    flex: none;
}

/* Текущий пункт — обычный текст, а не жёлтая плашка. Плашку с рамкой
   и жирным начертанием рисовал CSS компонента; из-за неё же строка
   крошек была вдвое выше задуманного (30 px вместо 14). */
.zt-breadcrumbs .zt-breadcrumbs__current,
.zt-breadcrumbs [aria-current="page"] {
    display: inline;
    max-width: none;
    padding: 0;
    overflow: hidden;
    color: #555f69;
    background: none;
    border: 0;
    border-radius: 0;
    font-weight: 400;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.zt-breadcrumbs meta {
    display: none;
}

/* ---------------------------------------------------------
   Одна строка на любой ширине.

   Перенос запрещён, нехватка ширины гасится многоточием. Ужимается
   прежде всего текущий пункт: он длиннее всех, и его название
   дублируется в заголовке страницы под крошками. Ссылки-предки уступают
   ширину только после того, как у текущего останется ~4 символа.
   Разделители «›» и «Главная» не сжимаются. Список с overflow: hidden —
   страховка от горизонтальной прокрутки страницы.
   --------------------------------------------------------- */

.zt-breadcrumbs__item--current,
.zt-breadcrumbs ol > li:last-child {
    flex: 0 200 auto;
    min-width: 4em;
}

/* Ссылки-предки уступают ширину только вторыми и не короче самого
   длинного слова: «Каталог» никогда не превращается в «Катал…»,
   а «Запчасти для спецтехники» ужимается максимум до «спецтехники». */
.zt-breadcrumbs ol > li:not(:last-child) {
    min-width: min-content;
}

/* Текст ссылки внутри inline-flex обрезаем на самом span:
   у .zt-breadcrumbs__link многоточие не сработает — он flex-контейнер. */
.zt-breadcrumbs__link > span {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* «Главная» не сжимается: она короткая и это самая полезная ссылка. */
.zt-breadcrumbs__item--home {
    flex: none;
}

/* Старая разметка компонента (ul вместо ol) и штатные крошки Битрикса —
   на случай страниц, куда новый шаблон ещё не заведён. */
.breadcrumbs ul,
.bx-breadcrumb {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Крошки собственных модулей приводим к тому же виду. Сами блоки из
   модулей «Сертификаты» и «Доставка» сняты (R-156, R-158) — правила
   оставлены на случай, если модуль вернут или он попадётся в другом месте. */
.ztdp__breadcrumbs,
.zcp-crumbs,
.znh-breadcrumbs,
.ztdp__breadcrumbs *,
.zcp-crumbs *,
.znh-breadcrumbs * {
    font-size: var(--zt-crumbs-font);
    line-height: 1.3;
}

/* На телефоне цепочка из двух-трёх ступеней помещается целиком:
   «Главная › Каталог › Шланг 5417141» занимает 226 px из 332 на экране
   360 px. Прячем середину только у длинных цепочек, от четырёх пунктов.

   07.09.2026: «Главная» больше не прячется. Прежняя редакция гасила и первый
   пункт тоже — правило писалось, когда цепочек длиннее трёх на сайте
   не было. После R-160 карточка товара стала четырёхзвенной
   («Главная › Каталог › Раздел › Товар»), и на телефоне из неё пропадала
   бы ссылка на главную — самая полезная. Теперь скрывается только
   середина, а на её месте разделитель показывает многоточие. */
@media (max-width: 560px) {
    .zt-breadcrumbs ol > li:first-child:nth-last-child(n+4) ~ li:not(:nth-last-child(-n+2)) {
        display: none;
    }

    .zt-breadcrumbs ol > li:first-child:nth-last-child(n+4) ~ li:nth-last-child(2)::before {
        content: "…";
    }
}

/* Пустая обёртка от секций, где кроме крошек ничего не было. */
.zt-breadcrumb-area:empty,
.content-area.zt-breadcrumb-area:empty {
    display: none;
}

/* ---------------------------------------------------------
   Единый отступ от шапки до крошек (R-159).

   Значение приходило из общего правила `.content-area { padding: 50px 0 }`
   (style.css:945), а у каталога перебивалось на 18 px правилом из CSS
   компонента крошек. Сводим к одному значению на всех внутренних
   страницах, включая каталог: селектор с двумя классами весит 0-2-0
   и выигрывает у обоих источников.

   Нижнее поле секции не трогаем — там прежние 50 px.
   --------------------------------------------------------- */

.content-area.zt-page-content-area {
    padding-top: var(--zt-crumbs-space-top) !important;
}

/* «Контакты»: страница идёт без общей обёртки — у её модуля своя
   раскладка. Крошки выводятся отдельной секцией, которая тут же
   закрывается (header.php), поэтому нижнее поле ей не нужно. */
.content-area.zt-page-content-area--crumbs-only {
    padding-bottom: 0 !important;
}

/* =========================================================
   Внутренние страницы: колонка контента по сетке шапки и белый фон.
   Правки со стенда 31.08.2026 — N-502 (404), N-503 (корзина),
   N-504 (избранное). Переменные те же, что у модулей выше, поэтому
   отступы 28 / 20 / 14 px совпадают с шапкой автоматически.
   ========================================================= */

.content-area.zt-page-content-area {
    background: #fff !important;
}

.zt-page-content-area > .container {
    width: 100% !important;
    max-width: var(--zt-site-shell-max) !important;
    margin-right: auto !important;
    margin-left: auto !important;
    padding-right: var(--zt-site-shell-gutter) !important;
    padding-left: var(--zt-site-shell-gutter) !important;
}

/* На странице 404 контейнер намеренно обнулён её критическим CSS, чтобы
   модуль ошибки шёл во всю ширину. Поэтому сетку шапки получает только
   старый заголовок над модулем, а не весь контейнер. */
/* На 404 крошкам нужен свой верхний отступ: критический CSS страницы
   обнуляет поля секции, чтобы модуль ошибки шёл во всю ширину, и общее
   правило `.content-area.zt-page-content-area { padding-top }` до крошек
   не доходит — они прилипали к шапке вплотную. */
body.zt-error-page--404 .zt-page-content-area > .container > .zt-breadcrumbs {
    margin-top: var(--zt-crumbs-space-top) !important;
}

body.zt-error-page--404 .zt-page-content-area > .container > .zt-page-heading,
body.zt-error-page--404 .zt-page-content-area > .container > .zt-breadcrumbs {
    width: 100%;
    max-width: var(--zt-site-shell-max);
    /* Боковые `auto` — с `!important`, иначе крошки не центрируются.
       Выше в этом же файле стоит `.content-area .breadcrumbs { margin: 0 0
       var(--zt-crumbs-space-bottom) !important }` — это сокращённая запись,
       она задаёт с `!important` все четыре поля сразу, боковые нулём.
       Заголовок то правило не задевает, поэтому он центрировался, а крошки
       прижимались к левому краю окна: на 2560 px ряд начинался с 28 px,
       тогда как шапка, модуль ошибки, CTA и подвал — с 277 px.
       На страницах, где контейнер не обнулён, этого не видно: там крошки
       центрирует сам `.container`. */
    margin-right: auto !important;
    margin-left: auto !important;
    padding-right: var(--zt-site-shell-gutter);
    padding-left: var(--zt-site-shell-gutter);
}
