/* ==========================================================================
   АвтоВольт — редизайн ("таможенная декларация / аукционный лист")
   Слой поверх существующих main.css / main-project.css / card.css.
   Не переписывает структуру — только переопределяет визуальный язык.
   ========================================================================== */

@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500;600&display=swap');

:root {
    /* Палитра пересобрана под drom.ru (по прямому запросу — самый
       популярный автомобильный сайт в РФ, ориентир по цвету) — точные
       значения сняты с реальной страницы (getComputedStyle/пиксели
       скриншота), не подобраны на глаз: тёмный хедер ~#0F1F27/чёрный,
       фирменный красный #DB001A на кнопках и ценниках, белый фон.
       Имена переменных (--av-navy/--av-orange) оставлены прежними —
       их используют 60+ мест в файле, переименование не требовалось
       для этой задачи и увеличивало бы риск правки без пользы. */
    --av-navy: #14191D;
    --av-navy-light: #20282E;
    --av-paper: #FAFAFA;
    --av-orange: #DB001A;
    --av-orange-dark: #A40014;
    --av-ink: #1A1A1A;
    --av-steel: #6E6E6E;
    --av-line: #E2E2E2;

    --av-font-display: 'Oswald', 'Arial Narrow', sans-serif;
    --av-font-body: 'IBM Plex Sans', 'Segoe UI', sans-serif;
    --av-font-mono: 'IBM Plex Mono', 'Courier New', monospace;
}

body {
    background-color: var(--av-paper);
    color: var(--av-ink);
    font-family: var(--av-font-body);
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}
/* Прижимает футер к низу вьюпорта на страницах с малым количеством
   контента (например contacts.html с коротким текстом) — без этого
   футер оставался сразу под контентом и "плавал" посередине экрана
   на пустых страницах. */
.page-content {
    flex: 1 0 auto;
}

h1, h2, h3, h4, h5, h6,
.main-page-title-text, .card-title {
    font-family: var(--av-font-display);
    letter-spacing: 0.02em;
    text-transform: uppercase;
    color: var(--av-navy);
}

a {
    color: var(--av-navy);
}
a:hover {
    color: var(--av-orange);
}
.link-primary {
    color: var(--av-navy) !important;
}
.link-primary:hover, .link-primary:focus {
    color: var(--av-orange) !important;
}

/* ---------- Кнопки: тёмно-синий вместо чёрного, оранжевый акцент ---------- */
.btn-dark, .btn-outline-dark.active {
    background-color: var(--av-navy) !important;
    border-color: var(--av-navy) !important;
    font-family: var(--av-font-body);
}
.btn-dark:hover {
    background-color: var(--av-orange) !important;
    border-color: var(--av-orange) !important;
}
.btn-outline-dark {
    color: var(--av-navy) !important;
    border-color: var(--av-navy) !important;
}
.btn-outline-dark:hover {
    background-color: var(--av-orange) !important;
    border-color: var(--av-orange) !important;
    color: #fff !important;
}

/* ---------- Навбар ---------- */
/* .z-index-top (main-project.css) — z-index: 9999 — висит и на <nav>,
   и на самих офканвас-панелях (#offcanvasfeedback/#offcanvasfilter),
   это ОДИН класс на разных элементах. Навбар с этим 9999 перекрывал
   модальное окно регистрации/входа (.modal 1055) — но чинить нужно
   ТОЛЬКО навбар: если понизить z-index-top у ВСЕХ элементов класса
   разом (как было сделано раньше — `.z-index-top { z-index: 1030 }`),
   офканвасы тоже проседают до 1030, что НИЖЕ их собственного
   `.offcanvas-backdrop` (1040) — задний фон-подложка начинает
   рендериться ПОВЕРХ офканваса, и панель выглядит затемнённой/погашенной
   (репродуцировано и подтверждено: getComputedStyle показывал
   offcanvas z-index 1030 < backdrop 1040). Поэтому селектор сужен до
   тега `nav` — офканвасы держат свой штатный Bootstrap z-index (1045,
   уже корректно между backdrop 1040 и модалкой 1055), трогать их не
   нужно было вообще. */
nav.z-index-top {
    z-index: 1030 !important;
}
.navbar.bg-dark {
    background-color: var(--av-navy) !important;
    border-bottom: 3px solid var(--av-orange);
}
/* На мобильном (< lg, тот же брейкпоинт, на котором Bootstrap включает
   бургер) заказчик попросил убрать саму тёмную полосу навбара на всю
   ширину экрана — оставить только иконку.
   Первая попытка (просто убрать background у .navbar, оставив его в
   потоке документа) не сработала: `<nav>` — блочный элемент на всю
   ширину, и если у него нет своего фона, сквозь него виден фон body
   (`--av-paper`, почти белый) — получалась белая полоса вместо тёмной,
   а не "просто иконка" (проверено проверкой пикселей на скриншоте:
   ровно в зоне навбара — (250,250,250), а не цвет соседних секций).
   Секции до/после навбара (.hero/.catalog-header/.detail-header) —
   ОТДЕЛЬНЫЕ блоки, их фон не "перетекает" в чужой бокс между ними.
   Рабочее решение — убрать `<nav>` из потока документа вообще
   (`position: fixed`, без `width`) — тогда он схлопывается до размера
   контента (просто кнопка бургера в свёрнутом виде) и плавает поверх
   страницы, тем же приёмом, что уже используют `#backToTop` и
   `.chat-widget-toggle` в этом же проекте — никакого фона сквозь него
   не видно, потому что он больше не занимает отдельную строку в
   раскладке. Сама кнопка (`.navbar-toggler`) уже непрозрачна (свой
   navy/orange стиль ниже) — фон самого `<nav>` не нужен. Десктопный
   навбар (>= lg, полное меню, обычный поток) не трогаем вообще. */
@media (max-width: 991.98px) {
    .navbar.bg-dark {
        position: fixed;
        top: 14px;
        left: 14px;
        width: 240px;
        max-width: calc(100vw - 28px);
        background: transparent !important;
        border-bottom: none;
        padding: 0;
    }
    .navbar .container-fluid { padding: 0; }
    /* Раньше ширина `<nav>` была auto (сжимался до контента) — в
       свёрнутом виде это просто иконка, но при открытии ширина
       СРАЗУ прыгала на ширину текста пунктов меню, пока Bootstrap
       ещё только начинал медленную (0.35s) анимацию высоты — рывок
       ширины + отдельная долгая анимация высоты читались как
       "задержка со смещением". Фиксированная ширина убирает скачок
       ширины; transition: none ниже убирает и саму задержку —
       список открывается/закрывается мгновенно. */
    .navbar-collapse {
        transition: none !important;
    }
    /* Фон/отступы — на ОБА состояния (.collapsing И .show), а не
       только на финальное .show: иначе во время (пусть и мгновенного
       теперь) перехода видна секунда без фона. Когда список скрыт,
       Bootstrap всё равно держит display:none — эти правила ни на что
       не влияют, пока пункт меню не начал открываться. */
    .navbar-collapse.show,
    .navbar-collapse.collapsing {
        background-color: var(--av-navy);
        border-radius: 4px;
        margin-top: 8px;
        padding: 8px 12px 12px;
        max-height: calc(100vh - 80px);
        overflow-y: auto;
    }
}
.navbar-nav {
    font-family: var(--av-font-display) !important;
    font-weight: 500 !important;
    font-size: 16px !important;
    letter-spacing: 0.03em;
    text-transform: uppercase;
}
.navbar .nav-link:hover {
    color: var(--av-orange) !important;
}
#auto_span { color: #fff !important; }
#volt_span { color: var(--av-orange) !important; }
#fav_badge.bg-danger {
    background-color: var(--av-orange) !important;
    font-family: var(--av-font-mono);
}
/* Кнопка-бургер (мобильное меню) — дефолтный Bootstrap `.navbar-dark`
   рисует иконку полупрозрачным белым (55% alpha) и почти невидимую
   рамку — на нашем navy-фоне это читалось как "кнопки почти нет".
   Первая перекраска (тонкая оранжевая обводка + заливка 10% alpha)
   тоже оказалась слишком блёклой, особенно когда кнопка стала
   плавающей поверх разных фонов (см. секцию про мобильный навбар
   выше) — заказчик прямо попросил "выразительнее и непрозрачно".
   Теперь плотная заливка + белая иконка, тот же язык, что уже у
   `.back-to-top`/`.chat-widget-toggle` (сплошной navy, на hover —
   orange/red акцент) — не отдельный стиль, а переиспользование уже
   существующего паттерна "плавающая кнопка-иконка" в этом проекте. */
.navbar-toggler {
    background-color: var(--av-navy) !important;
    border: none !important;
    border-radius: 2px;
    width: 44px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .35);
    transition: background-color .15s ease;
}
.navbar-toggler:hover {
    background-color: var(--av-orange) !important;
}
.navbar-toggler:focus {
    box-shadow: 0 0 0 .2rem rgba(219, 0, 26, .35) !important;
}
.navbar-toggler-icon {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23FFFFFF' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2.5' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") !important;
}

/* ---------- Хиро-секция ---------- */
.main-header {
    background: linear-gradient(180deg, rgba(21,33,59,.55), rgba(21,33,59,.85)),
                url("/static/images/header-1.jpg");
    background-size: cover;
    background-position: center;
}
.main-header-title {
    font-family: var(--av-font-display);
    letter-spacing: 0.04em;
    text-transform: uppercase;
}
.main-header-postscrept {
    font-family: var(--av-font-mono) !important;
    letter-spacing: 0.02em;
}
.main-header-link {
    font-family: var(--av-font-display) !important;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    border-bottom: 2px solid var(--av-orange) !important;
}
.main-header-link:hover {
    background-color: var(--av-orange) !important;
    color: var(--av-navy) !important;
    border-color: var(--av-orange) !important;
}

/* ---------- Маршрутная схема (сигнатурный элемент) ---------- */
.route-map {
    background-color: var(--av-navy);
    padding: 64px 24px 56px;
}
.route-map-intro { margin-bottom: 36px; }
.route-map .section-title { color: #fff; }
.route-map-sub {
    color: #C9D2E3;
    font-size: 16px;
    line-height: 1.6;
    max-width: 56ch;
    margin: 0 0 24px;
}
/* "Глобус" — карта подана как выпуклый иллюминатор на поверхность
   планеты, а не плоский плакат: сильно скруглённые (но не до полного
   овала — иначе обрезались бы подписи в углах, "Китай"/"Ваш город"
   стоят близко к краю) углы + два радиальных градиента поверх SVG
   (тёплый блик сверху-слева — имитация света, тёмное затемнение к
   краям — имитация кривизны/лимба сферы) + тень, приподнимающая блок
   над фоном секции. Сама карта (SVG/пути) не тронута — это чисто
   верхний слой на контейнере. */
.route-globe {
    position: relative;
    max-width: 640px;
    margin: 0 auto;
    border-radius: 90px / 70px;
    overflow: hidden;
    box-shadow:
        0 30px 70px rgba(0, 0, 0, .5),
        inset 0 0 0 1px rgba(255, 255, 255, .1),
        inset 0 -30px 60px rgba(0, 0, 0, .35);
}
.route-globe::after {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    background:
        radial-gradient(circle at 26% 20%, rgba(255, 255, 255, .16), transparent 42%),
        radial-gradient(circle at 50% 50%, transparent 58%, rgba(0, 0, 0, .4) 100%);
}
.route-map svg { width: 100%; height: auto; display: block; }
.route-map .route-label {
    font-family: var(--av-font-mono);
    font-size: 13px;
    fill: #C9D2E3;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}
.route-map .route-city {
    font-family: var(--av-font-display);
    font-size: 20px;
    fill: #fff;
    text-transform: uppercase;
}
.route-map .route-line {
    stroke: var(--av-paper);
    stroke-width: 2;
    stroke-linecap: round;
    stroke-dasharray: 1 8;
    opacity: .85;
    fill: none;
}
.route-map .route-line-final {
    stroke: var(--av-paper);
    stroke-width: 2.5;
    stroke-linecap: round;
    fill: none;
}
.route-map .route-node circle {
    fill: var(--av-navy);
    stroke: var(--av-orange);
    stroke-width: 2;
}
.route-map .route-node-num {
    font-family: var(--av-font-mono);
    font-size: 12px;
    font-weight: 600;
    fill: #fff;
    text-anchor: middle;
    dominant-baseline: central;
}
.route-map .route-end-dot {
    fill: var(--av-orange);
}
.route-map .route-end-pulse {
    fill: none;
    stroke: var(--av-orange);
    stroke-width: 1.5;
    opacity: .6;
    animation: route-pulse 2.2s ease-out infinite;
}
.route-map .route-end-icon {
    font-family: "bootstrap-icons";
    font-size: 15px;
    fill: var(--av-navy);
    text-anchor: middle;
    dominant-baseline: central;
}
@keyframes route-pulse {
    0%   { r: 13px; opacity: .6; }
    100% { r: 26px; opacity: 0; }
}
/* Упрощённая, сглаженная (2 прохода Chaikin corner-cutting в скрипте
   подготовки данных) береговая линия региона — один сплошной цвет на
   весь массив суши (заказчик отменил предыдущую раскраску по странам,
   мешала маршрутной линии/автомобилю). Заливка едва отличима от
   navy-фона блока — читается силуэт по контуру, а не по пятну цвета;
   маршрутная линия и автомобиль остаются единственным ярким акцентом. */
.route-map .route-coastline {
    fill: rgba(255, 255, 255, .05);
    stroke: rgba(255, 255, 255, .3);
    stroke-width: 1.3;
    stroke-linejoin: round;
}
/* Автомобиль, медленно едущий по маршруту — та же bootstrap-icons глиф-техника,
   что и у конечной pin-иконки (route-end-icon). Едет без поворота по касательной
   к кривой: сам глиф "car-front" — фронтальный вид, наклон по пути смотрелся бы
   как автомобиль "заваливается" на бок, а не как поворот. */
.route-map .route-car-icon {
    font-family: "bootstrap-icons";
    font-size: 20px;
    fill: var(--av-orange);
    text-anchor: middle;
    dominant-baseline: central;
}

/* ---------- Карточки авто как "аукционный лот" ---------- */
.card.shadow-lg {
    border-radius: 2px !important;
    border-top: 3px solid var(--av-navy) !important;
    box-shadow: 0 1px 3px rgba(21,33,59,.15) !important;
    position: relative;
}
.card.shadow-lg::before {
    content: "АВТО";
    position: absolute;
    top: 10px;
    right: 10px;
    font-family: var(--av-font-mono);
    font-size: 11px;
    letter-spacing: 0.1em;
    color: var(--av-steel);
    border: 1px solid var(--av-line);
    padding: 2px 8px;
    background: var(--av-paper);
    z-index: 2;
}
.card.shadow-lg .card-title {
    font-size: 19px;
}
.card.shadow-lg .table-condensed {
    font-family: var(--av-font-mono);
    font-size: 13px;
}
.card.shadow-lg .table-condensed th {
    color: var(--av-steel);
    font-weight: 500;
    text-transform: uppercase;
    font-size: 11px;
}

/* Плашка с номером лота (car_detail / car_list) */
.lot-tag {
    display: inline-block;
    font-family: var(--av-font-mono);
    font-size: 13px;
    letter-spacing: 0.06em;
    color: var(--av-steel);
    border: 1px solid var(--av-line);
    padding: 3px 10px;
    background: #fff;
}

/* ---------- Стрелки слайдера фото (перекрывают убогие PNG-стрелки) ---------- */
.my-cool-arrow-prev, .my-cool-arrow-next {
    background-image: none !important;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: rgba(21, 33, 59, .8) !important;
    border: 1px solid rgba(255,255,255,.3);
    border-radius: 2px;
    opacity: 1 !important;
    transition: background-color .2s ease, border-color .2s ease;
}
.my-cool-arrow-prev { left: 14px; }
.my-cool-arrow-next { right: 14px; }
.my-cool-arrow-prev::before, .my-cool-arrow-next::before {
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    font-size: 20px;
    line-height: 1;
    color: #fff;
}
.my-cool-arrow-prev::before { content: "\f284"; }
.my-cool-arrow-next::before { content: "\f285"; }
.my-cool-arrow-prev:hover, .my-cool-arrow-next:hover {
    background-color: var(--av-orange) !important;
    border-color: var(--av-orange);
}
.my-cool-arrow-prev:hover::before, .my-cool-arrow-next:hover::before {
    color: var(--av-navy);
}
@media (max-width: 500px) {
    .my-cool-arrow-prev, .my-cool-arrow-next {
        width: 36px;
        height: 36px;
    }
    .my-cool-arrow-prev::before, .my-cool-arrow-next::before {
        font-size: 16px;
    }
}

/* ---------- Реакции / комментарии в стиле "штампа" ---------- */
.reaction-widget .reaction-btn {
    font-family: var(--av-font-mono);
    border-radius: 2px;
}
.comment-item strong {
    color: var(--av-navy);
    font-family: var(--av-font-display);
    font-size: 15px;
}
.comment-text.is-clamped {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.comment-char-counter {
    font-family: var(--av-font-mono);
    font-size: 11px;
    color: var(--av-steel);
    text-align: right;
    margin-top: 4px;
}

/* ---------- Пагинация ---------- */
.pagination > .active > a {
    background-color: var(--av-orange) !important;
    border-color: var(--av-orange) !important;
}
.pagination > li > a:hover {
    border-color: var(--av-navy) !important;
}

/* ---------- Футер ---------- */
footer, .footer {
    background-color: var(--av-navy) !important;
    color: #C9D2E3 !important;
}
#footer_label {
    font-family: var(--av-font-display) !important;
    letter-spacing: 0.05em;
}

.site-footer {
    background: var(--av-navy) !important;
    border-top: 3px solid var(--av-orange);
    color: #C9D2E3 !important;
    margin-top: 56px;
    flex-shrink: 0;
}
.footer-top {
    max-width: 1240px;
    margin: 0 auto;
    padding: 56px 32px 40px;
    display: grid;
    grid-template-columns: 1.4fr 1fr 1fr 1fr;
    gap: 40px;
}
.footer-logo {
    font-family: var(--av-font-display);
    font-size: 22px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    margin-bottom: 12px;
}
.footer-logo #auto_span { color: #fff !important; }
.footer-logo #volt_span { color: var(--av-orange) !important; }
.footer-tagline {
    font-size: 14px;
    line-height: 1.6;
    color: #9FB0C9;
    max-width: 32ch;
    margin: 0 0 20px;
}
.footer-social { display: flex; gap: 10px; }
.footer-social-icon {
    width: 38px;
    height: 38px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid rgba(255,255,255,.25);
    border-radius: 2px;
    color: #fff !important;
    font-size: 16px;
    text-decoration: none;
    transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}
.footer-social-icon:hover {
    background: var(--av-orange);
    border-color: var(--av-orange);
    color: var(--av-navy) !important;
}
.footer-col-title {
    display: block;
    font-family: var(--av-font-mono);
    font-size: 12px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--av-orange);
    margin-bottom: 16px;
}
.footer-links {
    list-style: none;
    margin: 0;
    padding: 0;
}
.footer-links li { margin-bottom: 12px; font-size: 14px; }
.footer-links a {
    color: #C9D2E3 !important;
    text-decoration: none;
}
.footer-links a:hover { color: var(--av-orange) !important; }
.footer-address {
    color: #9FB0C9;
    font-family: var(--av-font-mono);
    font-size: 13px;
}
.footer-contacts a { font-family: var(--av-font-mono); }
.footer-bottom {
    border-top: 1px dashed rgba(255,255,255,.15);
    padding: 20px 32px;
    max-width: 1240px;
    margin: 0 auto;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 8px;
    font-family: var(--av-font-mono);
    font-size: 12px;
    color: #8697B0;
}
.footer-bottom #footer_label { color: #fff !important; }
@media (max-width: 900px) {
    .footer-top { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 560px) {
    .footer-top { grid-template-columns: 1fr; padding: 40px 24px 32px; }
    .footer-bottom { flex-direction: column; padding: 16px 24px; }
}

/* ==========================================================================
   Хиро-секция — асимметричная сетка вместо full-bleed текста поверх фото
   ========================================================================== */
.hero {
    background: var(--av-navy);
    overflow: hidden;
    padding: 64px 0 56px;
}
.hero-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
    gap: 48px;
    align-items: center;
    max-width: 1240px;
    margin: 0 auto;
    padding: 0 32px;
}
.hero-eyebrow {
    display: inline-block;
    font-family: var(--av-font-mono);
    font-size: 13px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--av-orange);
    border: 1px solid rgba(217,113,31,.5);
    padding: 4px 10px;
    margin-bottom: 20px;
}
.hero-title {
    font-family: var(--av-font-display);
    color: #fff;
    font-size: clamp(38px, 5vw, 64px);
    line-height: 1.05;
    text-transform: uppercase;
    letter-spacing: 0.01em;
    margin: 0 0 20px;
}
.hero-title-accent { color: var(--av-orange); }
.hero-sub {
    color: #C9D2E3;
    font-size: 17px;
    max-width: 46ch;
    margin-bottom: 28px;
}
.hero-actions { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 40px; }
.btn-hero-primary, .btn-hero-secondary {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 15px;
    padding: 13px 26px;
    text-decoration: none;
    display: inline-block;
}
.btn-hero-primary {
    background: var(--av-orange);
    color: var(--av-navy);
}
.btn-hero-primary:hover { background: #fff; color: var(--av-navy); }
.btn-hero-secondary {
    border: 1px solid rgba(255,255,255,.4);
    color: #fff;
}
.btn-hero-secondary:hover { border-color: var(--av-orange); color: var(--av-orange); }

.hero-stats {
    display: flex;
    gap: 36px;
    margin: 0;
    padding-top: 24px;
    border-top: 1px solid rgba(255,255,255,.15);
}
.hero-stats dt {
    font-family: var(--av-font-mono);
    color: var(--av-orange);
    font-size: 26px;
    font-weight: 600;
}
.hero-stats dd {
    margin: 0;
    color: #9FB0C9;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

.hero-photo-frame {
    position: relative;
    border: 1px solid rgba(255,255,255,.25);
    padding: 10px;
    transform: rotate(1.2deg);
}
.hero-photo-frame img {
    width: 100%;
    height: 360px;
    object-fit: cover;
    display: block;
    filter: grayscale(15%) contrast(1.05);
}
/* Swiper.css задаёт .swiper-wrapper/.swiper-slide высотой в % от
   родителя — без явной высоты на самом .swiper контейнер схлопывается
   в 0 и слайды не видны (картинка внутри уже задаёт свои 360px, но
   слою swiper это не наследуется автоматически). */
.heroPhotoSwiper { height: 360px; }
.hero-photo-tag {
    position: absolute;
    bottom: -14px;
    left: 24px;
    background: var(--av-orange);
    color: var(--av-navy);
    font-family: var(--av-font-mono);
    font-size: 12px;
    letter-spacing: 0.04em;
    padding: 5px 12px;
    text-transform: uppercase;
}

@media (max-width: 900px) {
    /* minmax(0, 1fr), не голый 1fr: grid-элементы по умолчанию имеют
       min-width:auto — без этого блочный контент (например Swiper,
       который меряет ширину слайда через JS ДО того, как CSS её
       ограничит) раздувал колонку до "естественной" ширины картинки
       (наблюдалось как .hero-photo шириной в десятки миллионов px). */
    .hero-grid { grid-template-columns: minmax(0, 1fr); }
    .hero-photo { order: -1; }
    .hero-photo-frame { transform: none; }
    .hero-stats { flex-wrap: wrap; row-gap: 16px; }
}

/* ==========================================================================
   Секция процесса — реальная нумерованная последовательность
   ========================================================================== */
.section-eyebrow {
    display: block;
    font-family: var(--av-font-mono);
    font-size: 13px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--av-orange);
    margin-bottom: 8px;
}
.section-title {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    color: var(--av-navy);
    font-size: clamp(26px, 3vw, 36px);
    margin-bottom: 32px;
}
.process-section { padding: 72px 0; }
.process-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 32px;
    margin-bottom: 40px;
}
.process-step {
    border-top: 3px solid var(--av-orange);
    padding-top: 16px;
}
.process-step-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 14px;
}
.process-icon {
    width: 46px;
    height: 46px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--av-navy);
    border: 1.5px solid var(--av-orange);
    color: var(--av-orange);
    font-size: 20px;
}
.process-num {
    display: block;
    font-family: var(--av-font-mono);
    font-size: 14px;
    color: var(--av-steel);
}
.process-step h3 {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    font-size: 18px;
    color: var(--av-navy);
    margin-bottom: 10px;
}
.process-step p {
    color: #4A5468;
    font-size: 15px;
    line-height: 1.55;
    margin: 0;
}
.process-footnote {
    font-family: var(--av-font-mono);
    font-size: 13px;
    color: var(--av-steel);
    border-top: 1px dashed var(--av-line);
    padding-top: 20px;
    line-height: 1.8;
}
.process-footnote a { color: var(--av-navy); font-weight: 600; }

/* ==========================================================================
   Секция рекомендаций / новостей — единый ритм отступов
   ========================================================================== */
.recommend-section, .news-section {
    padding: 56px 0;
    border-top: 1px solid var(--av-line);
}
.recommend-card { align-items: center; }

@media (max-width: 500px) {
    .process-section, .recommend-section, .news-section { padding: 40px 0; }
}

/* ==========================================================================
   Карточка авто в каталоге — формат "аукционного лота"
   ========================================================================== */
.lot-card {
    background: #fff;
    border: 1px solid var(--av-line);
    border-top: 3px solid var(--av-navy);
    display: flex;
    flex-direction: column;
}
.lot-card-media {
    position: relative;
    aspect-ratio: 16 / 10;
    overflow: hidden;
    background: var(--av-paper);
}
.lot-card-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.lot-card-badge {
    position: absolute;
    top: 10px;
    left: 10px;
    background: var(--av-navy);
    color: #fff;
    font-family: var(--av-font-mono);
    font-size: 11px;
    letter-spacing: 0.06em;
    padding: 4px 9px;
}
.lot-card-body { padding: 16px 18px; flex-grow: 1; }
.lot-card-title-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 10px;
    border-bottom: 1px dashed var(--av-line);
    padding-bottom: 10px;
}
.lot-card-title {
    font-family: var(--av-font-display);
    font-size: 18px;
    text-transform: uppercase;
    color: var(--av-navy);
    margin: 0;
}
.lot-card-year {
    font-family: var(--av-font-mono);
    font-size: 13px;
    color: var(--av-steel);
    white-space: nowrap;
}
.lot-card-specs { margin: 0; font-size: 13px; }
.lot-card-specs > div {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: baseline;
    gap: 3px 10px;
    padding: 6px 0;
    border-bottom: 1px dashed var(--av-line);
}
.lot-card-specs > div:last-child { border-bottom: none; }
.lot-card-specs dt {
    font-weight: 600;
    color: var(--av-navy);
    flex-shrink: 0;
}
.lot-card-specs dd {
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    align-items: baseline;
    gap: 3px 8px;
    font-family: var(--av-font-mono);
    color: var(--av-steel);
    flex: 1 1 auto;
    min-width: 0;
}
.lot-spec-item { white-space: nowrap; }
.lot-card-actions {
    display: flex;
    align-items: center;
    justify-content: space-between;
    border-top: 1px solid var(--av-line);
    padding: 10px 18px;
}
.lot-card-action-link {
    font-family: var(--av-font-mono);
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--av-navy);
    text-decoration: none;
    flex-shrink: 0;
}
.lot-card-action-link:hover { color: var(--av-orange); }
.lot-card-action-icons {
    display: flex;
    align-items: center;
    gap: 14px;
}
.lot-card-action-icon {
    color: var(--av-navy);
    font-size: 16px;
    cursor: pointer;
}
.lot-card-action-icon:hover { color: var(--av-orange); }

/* ==========================================================================
   Карточка авто — страница деталей ("декларация")
   ========================================================================== */
.detail-header {
    background: var(--av-navy);
    padding: 28px 0 32px;
}
.detail-header .lot-tag {
    background: transparent;
    border-color: rgba(255,255,255,.35);
    color: #C9D2E3;
}
.detail-title {
    color: #fff;
    font-size: clamp(26px, 3.4vw, 38px);
    margin: 14px 0 6px;
}
.detail-year {
    font-family: var(--av-font-mono);
    color: var(--av-orange);
    font-size: 16px;
    letter-spacing: 0.04em;
}

.declaration {
    background: #fff;
    border: 1px solid var(--av-line);
    border-top: 3px solid var(--av-navy);
    padding: 22px 24px;
}
.declaration-label {
    display: block;
    font-family: var(--av-font-mono);
    font-size: 12px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--av-steel);
    border-bottom: 1px dashed var(--av-line);
    padding-bottom: 14px;
    margin-bottom: 14px;
}
/* Единый стиль ВСЕХ кнопок-действий на странице: "Отправить" (форма
   комментария), "Читать далее"/"Скрыть" (описание/новость/комментарий),
   "Ответить" — было 3 разных вида (Bootstrap btn-dark, подчёркнутая
   text-кнопка .comment-action-btn, absolute-пилюля только у описания).
   Теперь один класс, один визуальный язык везде. */
.pill-btn {
    display: inline-block;
    font-family: var(--av-font-mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: #fff;
    background: var(--av-navy);
    border: none;
    border-radius: 999px;
    padding: 8px 18px;
    cursor: pointer;
    white-space: nowrap;
    box-shadow: 0 4px 14px rgba(21, 33, 59, 0.28);
    transition: background-color .15s ease, transform .15s ease;
}
.pill-btn:hover { background: var(--av-orange); transform: translateY(-1px); }
/* Disabled-состояние (кнопка заблокирована на время отправки, или
   форма чат-виджета до отметки согласия) — без этого кнопка выглядела
   бы точно так же, как активная (свой background перебивает дефолтный
   стиль браузера для disabled), и было не понятно, началась ли
   отправка. */
.pill-btn:disabled {
    opacity: .5;
    cursor: not-allowed;
    transform: none;
}
.pill-btn:disabled:hover { background: var(--av-navy); }
/* Компактная icon-only модификация — для "Ответить"/"Читать далее"/
   "Скрыть"/"Отправить" внутри описания/новости/комментариев: рядом
   несколько таких кнопок сразу, текстовые пилюли перегружали ряд.
   Круглая кнопка с одной иконкой вместо текста, тот же цвет/hover/тень
   от .pill-btn. НЕ трогает .chat-widget-submit (кнопка отправки формы
   виджета обратной связи) — та одна в своей форме, не в ряду с
   другими, остаётся текстовой. Текст кнопки не убран из разметки, а
   доступен через aria-label/title — только визуально скрыт. */
.pill-btn-icon {
    width: 36px;
    height: 36px;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 15px;
    line-height: 1;
}
/* Ряд кнопок внутри ОДНОГО комментария ("Читать далее"/"Скрыть" +
   "Ответить") — в обычном потоке по умолчанию: комментарий свёрнут в
   3 строки, sticky там нечего "ловить". Становится sticky ТОЛЬКО
   когда комментарий реально развёрнут (класс .is-expanded, ставит JS
   в comments.html по клику на "Читать далее" — и снимает обратно при
   повторном "Скрыть") — до этого клика ряд просто едет вместе с
   текстом как обычный блок.
   В развёрнутом виде — В ОДНУ ЛИНИЮ с круглой иконкой виджета
   обратной связи: `bottom: 32px` центрирует пилюлю по вертикали
   относительно кружка виджета (кружок 20-76px от низа экрана, центр
   на 48px; пилюля высотой ~32px с низом на 32px даёт центр на
   ~48px — совпадает). `padding-right: 88px` резервирует место СПРАВА
   под сам кружок виджета (20px его отступ + 56px ширина + 12px
   зазор) — без этого на узких экранах, где колонка контента почти
   вплотную к краю, кнопка оказалась бы под кружком по горизонтали. */
.comment-pill-row {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 8px;
}
/* .news-text-toggle-wrap — тот же принцип для описания авто
   (car_detail.html) и текста новости (news_detail.html): по
   умолчанию обычный поток (текст свёрнут, sticky ловить нечего),
   sticky + линия с виджетом только когда реально развёрнут
   (.is-expanded, ставит clamp-toggle.js). Раньше car_detail был на
   отдельном классе .pill-sticky-wrap (безусловный sticky, отдельной
   строкой НАД виджетом) — по прямому запросу приведено к единому
   виду с новостями. */
.news-text-toggle-wrap {
    display: flex;
    justify-content: flex-end;
    margin-top: 10px;
}
.comment-pill-row.is-expanded,
.news-text-toggle-wrap.is-expanded {
    position: sticky;
    bottom: 32px;
    pointer-events: none;
    z-index: 2;
}
.comment-pill-row .pill-btn,
.news-text-toggle-wrap .pill-btn { pointer-events: auto; }
/* padding-right резервирует место под кружок виджета ТОЛЬКО на узких
   экранах, где колонка контента почти вплотную к правому краю
   вьюпорта (см. описание сценария выше по файлу). На широком экране
   контент и так заканчивается заметно левее виджета — резервировать
   там нечего, а padding-right без надобности сдвигал ряд кнопок влево
   от края колонки. */
@media (max-width: 900px) {
    .comment-pill-row.is-expanded,
    .news-text-toggle-wrap.is-expanded {
        padding-right: 88px;
    }
}
.declaration-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 16px;
    padding: 8px 0;
    border-bottom: 1px dashed var(--av-line);
}
.declaration-row:last-child { border-bottom: none; }
.declaration-row dt {
    font-family: var(--av-font-body);
    font-weight: 500;
    color: var(--av-navy);
    flex-shrink: 0;
}
.declaration-row dd {
    margin: 0;
    font-family: var(--av-font-mono);
    color: var(--av-steel);
    text-align: right;
}
.declaration-price {
    font-family: var(--av-font-mono) !important;
    font-weight: 600;
    font-size: 17px;
    color: var(--av-orange) !important;
}
.declaration .description {
    font-family: var(--av-font-body);
    font-size: 15px;
    line-height: 1.6;
    color: var(--av-ink);
}
.declaration .description p { margin: 0 0 10px; }
.declaration .description p:last-child { margin-bottom: 0; }
/* Описание теперь может прийти как HTML в несколько абзацев (Quill в
   дашборде) — однострочный Bootstrap .text-truncate тут не работает
   (white-space:nowrap не сворачивает блочные <p>). Многострочный clamp
   вместо него — сворачивает по строкам независимо от разметки внутри. */
.description-clamp {
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ---------- Поля форм в стиле декларации ---------- */
.form-select, .form-control {
    border-radius: 2px !important;
    border-color: var(--av-line) !important;
    font-family: var(--av-font-body);
    color: var(--av-ink) !important;
}
.form-select:focus, .form-control:focus {
    border-color: var(--av-navy) !important;
    box-shadow: 0 0 0 .2rem rgba(21,33,59,.1) !important;
}
/* Поле комментария — стартует с высоты по атрибуту rows, дальше JS
   (autoGrowTextarea в includes/comments.html) растягивает по мере
   ввода текста до потолка, после которого появляется свой скролл —
   поэтому свой resize-хендл отключаем, он бы конфликтовал с JS. */
#comments-root textarea.form-control {
    resize: none;
    overflow-y: hidden;
    transition: height .1s ease;
}

/* ---------- Контакты: карта / виджет ---------- */
.contacts-map-frame {
    border: 1px solid var(--av-line);
    border-top: 3px solid var(--av-navy);
    background: #fff;
    padding: 16px;
    max-width: 100%;
    overflow-x: auto;
}
.contacts-map-frame .dg-widget-link { font-family: var(--av-font-mono); font-size: 13px; }

/* ---------- Каталог: шапка и дисклеймер ---------- */
.catalog-header {
    background: var(--av-navy);
    padding: 32px 0;
}
.catalog-header h1 {
    color: #fff;
    margin: 0;
}
/* Бургер-иконка на мобильном теперь плавающая (position: fixed, см.
   секцию навбара выше) — top:14px, высота 40px, нижний край на 54px.
   Без запаса шапка страницы перекрывалась бы иконкой (проверено
   реальным пересечением rect'ов иконки и <h1>, не на глаз). Это
   правило намеренно НЕ в блоке медиа-запроса навбара выше — там оно
   проигрывало бы каскаду этому же безусловному .catalog-header, т.к.
   оба правила одной специфичности, а этот файл ниже по каскаду. */
@media (max-width: 991.98px) {
    .catalog-header, .detail-header {
        padding-top: 72px;
    }
}
.catalog-header-row {
    max-width: 1240px;
    margin: 0 auto;
    padding: 0 32px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 16px;
}
.btn-catalog-filter {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 14px;
    color: #fff;
    border: 1px solid rgba(255,255,255,.4);
    padding: 10px 18px;
    text-decoration: none;
    white-space: nowrap;
    flex-shrink: 0;
    transition: border-color .2s ease, color .2s ease;
}
.btn-catalog-filter:hover {
    border-color: var(--av-orange);
    color: var(--av-orange);
}
.catalog-note {
    font-family: var(--av-font-mono);
    font-size: 13px;
    color: var(--av-steel);
    border: 1px dashed var(--av-line);
    background: #fff;
    padding: 14px 18px;
}
.catalog-note .alert-heading {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    font-size: 15px;
    color: var(--av-navy);
}


/* ==========================================================================
   Модальные окна, офканвасы, аккордеон фильтров — единый язык
   ========================================================================== */
.modal-content {
    border-radius: 2px;
    border: none;
    border-top: 3px solid var(--av-navy);
}
.modal-header {
    border-bottom: 1px solid var(--av-line);
    align-items: center;
    padding: 20px 24px 0;
}
#authModalTabs {
    border-bottom: none;
    gap: 24px;
}
#authModalTabs .nav-link {
    border: none !important;
    background: none !important;
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 15px;
    color: var(--av-steel) !important;
    padding: 0 0 16px;
    border-bottom: 2px solid transparent !important;
    border-radius: 0 !important;
}
#authModalTabs .nav-link.active {
    color: var(--av-navy) !important;
    border-bottom-color: var(--av-orange) !important;
}
.modal-body { padding: 24px; }
.modal-body .form-label {
    font-family: var(--av-font-mono);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--av-steel);
}
/* Поле пароля регистрации — кнопка "показать пароль" поверх инпута,
   без Bootstrap .input-group (тот подмешивает свои границы между
   полем и кнопкой не в тон общему стилю полей формы). */
.password-input-group { position: relative; }
.password-input-group .form-control { padding-right: 44px; }
.password-toggle-btn {
    position: absolute;
    top: 0;
    right: 0;
    height: 100%;
    width: 42px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    color: var(--av-steel);
    cursor: pointer;
}
.password-toggle-btn:hover { color: var(--av-navy); }
.modal-body .form-text {
    font-size: 12px;
    color: var(--av-steel);
}

.offcanvas {
    background: var(--av-paper) !important;
}
.offcanvas-header {
    background: var(--av-navy);
    padding: 20px 24px;
}
.offcanvas-title {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #fff;
    font-size: 18px;
}
.offcanvas-header .btn-close {
    filter: invert(1) grayscale(100%) brightness(2);
}
.offcanvas-body { padding: 24px; }
.offcanvas-body label.py-2 {
    font-family: var(--av-font-mono);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--av-steel);
    display: block;
}
.offcanvas-body .checkboxlabel {
    font-size: 13px;
    color: var(--av-ink);
}

/* ---------- Аккордеон фильтров ---------- */
.accordion-item {
    background: transparent;
    border: none;
    border-bottom: 1px dashed var(--av-line);
}
.accordion-button {
    --bs-accordion-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2315213B'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");
    --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23D9711F'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");
    background: transparent !important;
    font-family: var(--av-font-body);
    font-weight: 500;
    font-size: 15px;
    color: var(--av-navy) !important;
    padding: 16px 0;
    box-shadow: none !important;
}
.accordion-button:not(.collapsed) {
    color: var(--av-orange) !important;
}
.accordion-body { padding: 0 0 18px; }
.accordion-body .form-check { margin-bottom: 8px; }

input[type="checkbox"], input[type="radio"] {
    accent-color: var(--av-navy);
}
.form-check-input {
    border-color: var(--av-line);
}
.form-check-input:checked {
    background-color: var(--av-navy) !important;
    border-color: var(--av-navy) !important;
}
.form-check-input:focus {
    box-shadow: 0 0 0 .2rem rgba(21,33,59,.15) !important;
    border-color: var(--av-navy) !important;
}

.form-range::-webkit-slider-thumb { background: var(--av-orange); }
.form-range::-moz-range-thumb { background: var(--av-orange); border: none; }
.form-range::-webkit-slider-runnable-track { background: var(--av-line); }
.form-range::-moz-range-track { background: var(--av-line); }
.form-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 .2rem rgba(217,113,31,.25); }
.cur-value-clearance, .cur-value-price {
    font-family: var(--av-font-mono);
    color: var(--av-orange);
    font-weight: 600;
}

/* ==========================================================================
   Панель фильтров каталога — чипы вместо аккордеона с чекбоксами
   ========================================================================== */
.filter-panel { display: flex; flex-direction: column; }
.filter-panel-body { padding: 20px 24px; }
.filter-group { margin-bottom: 28px; }
.filter-group-title {
    display: block;
    font-family: var(--av-font-mono);
    font-size: 12px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--av-steel);
    margin-bottom: 12px;
}
.filter-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}
.filter-chip {
    position: relative;
    cursor: pointer;
    margin: 0;
}
.filter-chip input {
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
}
.filter-chip span {
    display: inline-block;
    padding: 7px 14px;
    border: 1px solid var(--av-line);
    border-radius: 2px;
    font-family: var(--av-font-body);
    font-size: 13px;
    color: var(--av-ink);
    background: #fff;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.filter-chip:hover span { border-color: var(--av-navy); }
.filter-chip input:checked + span {
    background: var(--av-navy);
    border-color: var(--av-navy);
    color: #fff;
}
.filter-chip input:focus-visible + span {
    outline: 2px solid var(--av-orange);
    outline-offset: 1px;
}
.filter-range {
    display: flex;
    align-items: center;
    gap: 14px;
}
.filter-range input[type="range"] { flex: 1; }
.filter-range-value {
    font-family: var(--av-font-mono);
    font-size: 13px;
    font-weight: 600;
    color: var(--av-orange);
    white-space: nowrap;
    min-width: 64px;
    text-align: right;
}
.filter-panel-footer {
    display: flex;
    align-items: center;
    gap: 20px;
    padding: 16px 24px;
    border-top: 1px solid var(--av-line);
    background: var(--av-paper);
}
.filter-submit {
    flex: 1;
    text-align: center;
    border: none;
    cursor: pointer;
}
.filter-reset-link {
    font-family: var(--av-font-mono);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--av-steel);
    background: none;
    border: none;
    cursor: pointer;
    white-space: nowrap;
}
.filter-reset-link:hover { color: var(--av-orange); }

/* ==========================================================================
   Детальная страница новости
   ========================================================================== */
.article-content {
    max-width: 800px;
    margin: 0 auto;
    padding-top: 32px;
    padding-bottom: 24px;
}
.article-image {
    width: 100%;
    display: block;
    border: 1px solid var(--av-line);
}
.article-content .news-text {
    font-size: 16px;
    line-height: 1.7;
    color: var(--av-ink);
}
.article-content .news-text p { margin-bottom: 14px; }

/* ==========================================================================
   Юридические страницы (политика конфиденциальности)
   ========================================================================== */
.legal-content {
    max-width: 760px;
    margin: 0 auto;
    padding-top: 40px;
    padding-bottom: 56px;
}
.legal-content p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--av-ink);
    margin-bottom: 14px;
}
.legal-content h4 {
    font-size: 20px;
    margin-top: 44px;
    margin-bottom: 16px;
    padding-top: 24px;
    border-top: 1px dashed var(--av-line);
}
.legal-content h4:first-of-type {
    margin-top: 0;
    padding-top: 0;
    border-top: none;
}

/* ==========================================================================
   Избранное
   ========================================================================== */
.favorites-empty { padding: 40px 0; }
.favorites-empty-text {
    font-size: 16px;
    color: var(--av-ink);
    max-width: 60ch;
    line-height: 1.6;
    margin-bottom: 20px;
}
.favorites-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding: 16px 0;
    border-bottom: 1px solid var(--av-line);
    margin-bottom: 8px;
}
.favorites-toolbar-bottom {
    border-bottom: none;
    border-top: 1px dashed var(--av-line);
    justify-content: flex-end;
    margin-top: 8px;
}
.favorites-count {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--av-navy);
    font-size: 16px;
}
.favorite-row {
    display: flex;
    align-items: center;
    gap: 20px;
    padding: 16px 0;
    border-bottom: 1px dashed var(--av-line);
    flex-wrap: wrap;
}
.favorite-row-media {
    width: 140px;
    height: 100px;
    flex-shrink: 0;
    overflow: hidden;
    border: 1px solid var(--av-line);
}
.favorite-row-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.favorite-row-body { flex-grow: 1; min-width: 200px; }
.favorite-row-title {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    color: var(--av-navy);
    font-size: 18px;
    margin-bottom: 8px;
}
.favorite-row-specs { display: flex; gap: 24px; margin: 0; }
.favorite-row-specs > div { display: flex; flex-direction: column; }
.favorite-row-specs dt {
    font-family: var(--av-font-mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--av-steel);
}
.favorite-row-specs dd {
    margin: 0;
    font-family: var(--av-font-mono);
    font-weight: 600;
    color: var(--av-ink);
}
.favorite-row-actions {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-shrink: 0;
    margin-left: auto;
}
.favorite-row-link {
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    font-size: 13px;
    color: var(--av-navy);
    border: 1px solid var(--av-navy);
    padding: 8px 16px;
    text-decoration: none;
    cursor: pointer;
    display: inline-block;
}
.favorite-row-link:hover { background: var(--av-navy); color: #fff; }
.favorite-row-remove {
    font-family: var(--av-font-mono);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--av-steel);
    text-decoration: underline;
    cursor: pointer;
}
.favorite-row-remove:hover { color: var(--av-orange); }
@media (max-width: 560px) {
    .favorite-row { gap: 12px; }
    .favorite-row-media { width: 100px; height: 72px; }
    .favorite-row-actions { margin-left: 0; width: 100%; justify-content: space-between; }
}

/* ==========================================================================
   Единый вид фотографий — фикс. пропорции + кадрирование + общий тон.
   Фото сейчас разномастные плейсхолдеры (нет реальных от заказчика,
   см. README-заметку в CLAUDE.md), но рамка/тон должны выглядеть одним
   набором уже сейчас, а не "кашей" — единый filter снижает разброс по
   цвету/контрасту у случайно разных картинок.
   ========================================================================== */
.lot-card-media img,
.detailsMainSwiper .swiper-slide img,
.detailThumbSwiper .swiper-slide img,
.card-image,
.news_card_image {
    filter: grayscale(8%) saturate(.92) contrast(1.04);
}

/* Было: .sw-container высота фикс. 750px, .detailsMainSwiper margin
   100px сверху/снизу — рассчитано на другие пропорции фото. С
   object-fit: cover реальные/тестовые фото стали заметно ниже этого
   бюджета высоты — между фото и миниатюрами оставалась "мёртвая"
   navy-пустота, из-за которой лайк/дизлайк уезжали далеко вниз.
   Фикс: у слайда фиксированное aspect-ratio (единая рамка для всех
   фото, кроме их содержимого) — контейнер сам считает высоту от
   содержимого, никакой лишней пустоты. */
.sw-container {
    background-color: var(--av-navy) !important;
    height: auto !important;
    max-height: none !important;
    padding: 16px !important;
    /* Bootstrap .row по умолчанию растягивает колонки до высоты самой
       высокой (align-items:stretch) — при разворачивании длинного
       описания соседняя колонка вырастает и тянет за собой navy-фон
       слайдера, снова создавая пустоту снизу. Отключаем растяжение
       именно для этой колонки, высота — только по своему контенту. */
    align-self: flex-start !important;
}
.detailsMainSwiper { margin: 0 0 16px !important; }
.detailsMainSwiper .swiper-slide { aspect-ratio: 16 / 10; }
.detailThumbSwiper { margin: 0 !important; }
.detailsMainSwiper .swiper-slide img {
    object-fit: cover;
    object-position: center;
}
.detailThumbSwiper .swiper-slide img {
    border: 1px solid rgba(255,255,255,.25) !important;
}

.card-image-container {
    aspect-ratio: 4 / 3;
    background: var(--av-paper);
}
.card-image {
    width: 100%;
    height: 100%;
    max-height: none;
    object-fit: cover;
    object-position: center;
    display: block;
}

.new_card_image_wrapper {
    aspect-ratio: 16 / 9;
    background: var(--av-paper);
    border: 1px solid var(--av-line);
}
.news_card_image {
    width: 100%;
    height: 100%;
    max-height: none;
    object-fit: cover;
    object-position: center;
    display: block;
}

/* Виджет обратной связи (нижний правый угол) — иконка-кружок уже была
   перекрашена в оранжевый, но само окно оставалось дефолтным
   Bootstrap-попапом (скруглённые 8px углы, чёрный "generic" хедер,
   плоская чёрная кнопка) — не в языке остального сайта (острые 2px
   углы у .modal-content/.offcanvas, navy-хедер с моно-заголовком,
   единая пилюля-кнопка .pill-btn у всех форм). Стили окна перенесены
   сюда из инлайн <style> в chat_widget.html и приведены к тому же
   языку. */
.chat-widget-toggle {
    position: fixed;
    bottom: 20px;
    right: 20px;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    cursor: pointer;
    z-index: 1050;
    background: var(--av-orange) !important;
    box-shadow: 0 4px 14px rgba(21, 33, 59, .4);
}
.chat-widget-box {
    position: fixed;
    bottom: 88px;
    right: 20px;
    width: 300px;
    background: #fff;
    border-radius: 2px;
    border-top: 3px solid var(--av-navy);
    box-shadow: 0 8px 24px rgba(21, 33, 59, .35);
    z-index: 1050;
    overflow: hidden;
}
.chat-widget-header {
    background: var(--av-navy) !important;
    color: #fff;
    padding: 14px 16px;
    font-family: var(--av-font-display);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    font-size: 14px;
}
.chat-widget-submit {
    border-radius: 2px;
    margin-top: 4px;
}
/* Согласие на обработку персональных данных — тот же паттерн, что и в
   offcanvasfeedback (чекбокс блокирует "Отправить" до отметки), не
   было в чат-виджете вообще. */
.chat-widget-consent-row {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-bottom: 10px;
}
.chat-widget-consent-row input[type="checkbox"] {
    margin-top: 3px;
    flex-shrink: 0;
}
.chat-widget-consent-row .checkboxlabel {
    font-size: 12px;
    line-height: 1.4;
    color: var(--av-ink);
}

/* ==========================================================================
   Карусель рекомендаций на главной — карточка в формате "лота"
   ========================================================================== */
.recommend-carousel { position: relative; }
.recommend-card {
    background: #fff;
    border: 1px solid var(--av-line);
    border-top: 3px solid var(--av-navy);
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
}
.recommend-card-media {
    position: relative;
    display: block;
    aspect-ratio: 16 / 11;
    overflow: hidden;
}
.recommend-card-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.recommend-card-body {
    padding: 28px 32px;
    display: flex;
    flex-direction: column;
}
.recommend-card-body .lot-card-title-row { padding-bottom: 14px; margin-bottom: 14px; }
.recommend-card-body .lot-card-title { font-size: 24px; }
.recommend-card-body .lot-card-specs { flex-grow: 1; font-size: 14px; }
.recommend-card-cta {
    align-self: flex-start;
    margin-top: 20px;
    border: none;
    cursor: pointer;
}
/* Место под правую стрелку — иначе она перекрывает значения справа */
.recommend-card-body { padding-right: 64px; }
.recommend-carousel-control {
    top: 50%;
    transform: translateY(-50%);
    width: 44px;
    height: 44px;
    opacity: 1;
}
.recommend-carousel-control.carousel-control-prev { left: 12px; }
.recommend-carousel-control.carousel-control-next { right: 12px; }
@media (max-width: 900px) {
    .recommend-card { grid-template-columns: 1fr; }
    .recommend-card-media { aspect-ratio: 16 / 10; }
    .recommend-card-body { padding: 22px 20px; }
    /* Раньше стрелки на мобильном просто скрывались (были по центру
       ВСЕЙ карточки — попадали бы поверх текста под фото), в расчёте
       на автопрокрутку + свайп как единственный способ пролистать.
       На практике это ненадёжно: Bootstrap Carousel останавливает
       автопрокрутку при наведении/касании (`pause: 'hover'`) и на
       тач-устройствах не всегда получает обратное событие
       "убрал палец" — карусель могла зависнуть остановленной навсегда
       после первой же попытки свайпа (воспроизведено: программный
       drag действительно останавливает автопрокрутку насовсем, ни
       свайп, ни таймер её больше не сдвигают). Поэтому на мобильном
       возвращаем видимые стрелки — но не по центру всей карточки, а
       по центру ИМЕННО ФОТО (аспект 16:10 сверху), чтобы не залезать
       на текст снизу.
       Центр фото зависит от реальной ширины экрана, а `.recommend-carousel`
       — это Bootstrap `.container` (не `.container-fluid`), у которого
       на 768-900px появляется собственный фиксированный max-width —
       поэтому центр фото нельзя надёжно посчитать чистым CSS через vw
       (пробовали: формула на основе 100vw верна только до 768px, дальше
       уезжает). 100px — стартовое значение по умолчанию, реальное
       значение подставляет JS (main.html) через --recommend-arrow-top
       по факту измеренной высоты фото. */
    .recommend-carousel-control {
        display: flex;
        top: var(--recommend-arrow-top, 100px);
        width: 40px;
        height: 40px;
    }
}

/* ==========================================================================
   Новости на главной — грид карточек вместо голых Bootstrap card
   ========================================================================== */
.news-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 380px));
    gap: 28px;
    margin-top: 8px;
}
/* На узких экранах колонка всегда одна (280-380px карточка в контейнере
   уже слева пусто не остаётся вместе с заголовком, как на десктопе с
   несколькими карточками) — здесь наоборот, слева пустует хвост
   строки, и карточка выглядит "прилипшей" к левому краю. Центрируем
   именно в этом диапазоне; на десктопе (может быть много карточек в
   ряд) поведение не трогаем. */
@media (max-width: 900px) {
    .news-grid { justify-content: center; }
}
.news-card {
    background: #fff;
    border: 1px solid var(--av-line);
    border-top: 3px solid var(--av-navy);
    display: flex;
    flex-direction: column;
}
.news-card-media { display: block; }
.news-card-body {
    padding: 18px 20px 22px;
    display: flex;
    flex-direction: column;
    flex-grow: 1;
}
.news-card-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}
.news-card-date {
    font-family: var(--av-font-mono);
    font-size: 12px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--av-steel);
}
.news-card-title {
    font-size: 19px;
    margin: 8px 0 10px;
}
.news-card-title a {
    color: var(--av-navy);
    text-decoration: none;
}
.news-card-title a:hover { color: var(--av-orange); }
.news-card-excerpt {
    font-size: 14px;
    line-height: 1.6;
    color: var(--av-ink);
    flex-grow: 1;
    margin-bottom: 18px;
}
.news-card-excerpt p:last-child { margin-bottom: 0; }
.news-more { text-align: center; margin-top: 36px; }
.news-more .endless_more {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: auto !important;
    padding: 12px 28px;
    font-family: var(--av-font-display) !important;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: 14px;
    font-weight: 500 !important;
    color: var(--av-navy) !important;
    border: 1px solid var(--av-navy);
    text-decoration: none !important;
    transition: background-color .15s ease, color .15s ease;
}
.news-more .endless_more:hover {
    background: var(--av-navy);
    color: #fff !important;
}
.news-more .endless_loading {
    font-family: var(--av-font-mono);
    font-size: 13px;
    color: var(--av-steel);
    margin-top: 8px;
}

/* ==========================================================================
   Кнопка "наверх" — глобально, появляется после прокрутки
   ========================================================================== */
.back-to-top {
    position: fixed;
    left: 20px;
    bottom: 20px;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--av-navy);
    color: #fff;
    border: none;
    border-radius: 2px;
    font-size: 20px;
    line-height: 1;
    cursor: pointer;
    z-index: 1040;
    opacity: 0;
    visibility: hidden;
    transform: translateY(8px);
    transition: opacity .2s ease, transform .2s ease, background-color .15s ease;
}
.back-to-top.is-visible {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}
.back-to-top:hover { background: var(--av-orange); }

/* ==========================================================================
   Мини-счётчик лайков/дизлайков на карточках (каталог/рекомендации/
   новости) — только просмотр, сама реакция ставится на детальной
   странице через .reaction-widget
   ========================================================================== */
.mini-reactions {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: -4px 0 12px;
}
.mini-reactions-item {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-family: var(--av-font-mono);
    font-size: 12px;
    color: var(--av-steel);
}
.mini-reactions-item i { font-size: 13px; }
.mini-reactions-views { margin-left: auto; }
