/* ==========================================================================
   ПЕРЕХОДЫ МЕЖДУ СТРАНИЦАМИ (01.09.2026)
   ==========================================================================
   Сайт — обычный многостраничник: каждая вкладка (Главная/Каталог/Блог) это
   полная загрузка страницы с сервера, а не переключение внутри одного
   JS-приложения. Так лучше для поисковика (готовый HTML сразу, без разбора
   JS), но у человека при этом экран на время загрузки просто "замирает" —
   ни одного сигнала, что касание вообще сработало. Отсюда жалоба
   "переходы по вкладкам кажутся тормознутыми: сначала грузится страница, а
   потом переходит на нужный таб".

   Два фикса ниже — оба ЧИСТО визуальные (полоска добавляется и убирается
   скриптом, переход — декларативный CSS), поисковый робот их не видит и
   индексации не касаются:

   1. Полоска загрузки сверху экрана — script в site.js показывает её сразу
      по касанию ссылки, ещё до ответа сервера: разница "мгновенно" vs
      "через секунду-две" ощущается сильнее самого времени загрузки.
   2. @view-transition — новая возможность браузера: Chrome/Edge 126+,
      Safari 18.2+ (на 01.09.2026 это подавляющее большинство мобильных
      посетителей) сами плавно перетекают со старой страницы на новую,
      вместо жёсткой смены кадра. Ни одной строчки JS не нужно, в
      неподдерживающих браузерах (Firefox) просто ничего не меняется —
      переход как раньше, ничего не ломается. */
@view-transition {
  navigation: auto;
}

#navProgress{
  position:fixed;top:0;left:0;right:0;height:3px;z-index:9999;
  background:linear-gradient(90deg,var(--amber),var(--amber-deep));
  width:0;opacity:0;pointer-events:none;
  transition:width .25s ease-out,opacity .2s ease-out;
}
#navProgress.is-active{opacity:1}
/* Полоска — не источник анимации сама по себе (её двигает JS через ширину в %),
   а reduced-motion людям вообще незачем её видеть двигающейся — но появление/
   исчезание, раз оно уже почти мгновенное, для них не проблема, поэтому
   выключаем только сам "разгон", а не саму полоску. */
@media (prefers-reduced-motion:reduce){
  #navProgress{transition:opacity .2s ease-out}
}

/* ==========================================================================
   ШРИФТЫ — свои, со своего домена
   ==========================================================================
   Раньше три семейства приезжали с fonts.googleapis.com одной ссылкой
   <link rel="stylesheet"> в <head>. У такой ссылки два изъяна.

   Первый: она блокирует первую отрисовку. Браузер не покажет ни строчки,
   пока не сходит на чужой домен, не скачает там CSS, не разберёт его и не
   скачает сами шрифты. Это два лишних соединения (DNS, TLS) и лишний обход
   до того, как человек увидит хоть что-то.

   Второй, важнее: fonts.gstatic.com в России отвечает через раз. Когда он
   не отвечает, страница висит белой до таймаута — при том, что весь наш
   сервер жив и отдал разметку мгновенно.

   Теперь файлы лежат рядом с site.css и отдаются с месячным кэшем.

   ---------------------------------------------------------------- РАЗБИВКА

   Файлов много (13), и это не небрежность, а ровно то же, что делал Google:
   каждый файл — свой кусок алфавита, а unicode-range говорит браузеру, за
   каким куском идти. На русской странице он возьмёт кириллицу и латиницу и
   не тронет остальное.

   Отдельный файл на рубль. В юникоде знак ₽ живёт не с латиницей, а в
   «расширенной латинице» — а это целый набор из чешских, венгерских и
   вьетнамских букв весом до 83 килобайт. Из всего набора сайту нужен ровно
   один символ, и цена стоит на каждой карточке. Поэтому набор урезан до
   единственного знака: 83 КБ превратились в 1,2.

   ------------------------------------------------------------- НАЧЕРТАНИЯ

   Inter — вариативный: один файл на все толщины от 100 до 900. Он ЛЕГЧЕ,
   чем четыре отдельных (18 КБ против 31 для кириллицы), и лишнего веса в
   разметке уже не получится — какой ни попроси, он есть.

   Space Grotesk и IBM Plex Mono — обычные, по два начертания. У Grotesk
   раньше приезжало три (500, 600, 700), но 500 на сайте не встречается ни
   разу — проверено обходом всех страниц. У Mono приезжали 500 и 600, их и
   оставили.

   ---------------------------------------------------- ЧЕГО ЗДЕСЬ НЕ ХВАТАЕТ

   У Space Grotesk НЕТ КИРИЛЛИЦЫ — ни одной буквы, только латиница и цифры.
   Значит все русские заголовки сайта (h1–h4, название в шапке) рисуются не
   им, а системным шрифтом: на айфоне одним, на андроиде другим, на Windows
   третьим. Так было и раньше, с Google, — просто это не бросалось в глаза.
   Space Grotesk у нас реально рисует цены, цифры и латинские названия
   машин. Что с этим делать — решать отдельно, см. docs/МОБИЛЬНАЯ-ВЕРСИЯ.md.

   font-display:swap — текст показывается сразу системным шрифтом и
   переключается на наш, когда тот доедет. Молчаливая пустая страница хуже,
   чем страница, у которой на долю секунды другой шрифт.
   ========================================================================== */

/* Диапазоны те же, что использует Google, — чтобы разбивка совпадала с
   файлами, которые мы у него и взяли. */

/* --- Inter (основной текст), вариативный 100–900 --- */
@font-face{
  font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/fonts/inter-cyrillic.woff2') format('woff2');
  unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/fonts/inter-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
                U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/fonts/inter-ruble.woff2') format('woff2');
  unicode-range:U+20BD;
}

/* --- Space Grotesk (заголовки, цены) --- */
@font-face{
  font-family:'Space Grotesk';font-style:normal;font-weight:600;font-display:swap;
  src:url('/fonts/grotesk-600-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
                U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Space Grotesk';font-style:normal;font-weight:600;font-display:swap;
  src:url('/fonts/grotesk-600-ruble.woff2') format('woff2');
  unicode-range:U+20BD;
}
@font-face{
  font-family:'Space Grotesk';font-style:normal;font-weight:700;font-display:swap;
  src:url('/fonts/grotesk-700-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
                U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Space Grotesk';font-style:normal;font-weight:700;font-display:swap;
  src:url('/fonts/grotesk-700-ruble.woff2') format('woff2');
  unicode-range:U+20BD;
}

/* --- IBM Plex Mono (подписи, телефон, ярлыки) --- */
@font-face{
  font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url('/fonts/mono-500-cyrillic.woff2') format('woff2');
  unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face{
  font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url('/fonts/mono-500-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
                U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url('/fonts/mono-500-ruble.woff2') format('woff2');
  unicode-range:U+20BD;
}
@font-face{
  font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;
  src:url('/fonts/mono-600-cyrillic.woff2') format('woff2');
  unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face{
  font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;
  src:url('/fonts/mono-600-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
                U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;
  src:url('/fonts/mono-600-ruble.woff2') format('woff2');
  unicode-range:U+20BD;
}

/* ==========================================================================
   АВТО ТЕРРИТОРИЯ — единая дизайн-система сайта
   Один файл на весь сайт: шапка, лендинг, каталог, карточка авто, блог.
   ========================================================================== */

:root{
  /* Цвета */
  --ink:#0A1523;          /* тёмный фон шапки/футера */
  --ink-2:#122036;
  --ink-3:#1B2E48;
  --paper:#F4F6F8;        /* фон страницы */
  --card:#FFFFFF;
  --line:#E2E7ED;
  --line-soft:#EDF1F5;
  --text:#0F1720;
  --muted:#5C6B7A;
  --muted-2:#8B99A7;
  --amber:#2E9BF0;        /* фирменный акцент: подсветки, иконки, текст на тёмном */
  --amber-btn:#1478CE;    /* заливка кнопок — темнее, чтобы белый текст читался (4.6:1) */
  --amber-btn-hover:#0F63B0;
  --amber-deep:#1272C4;   /* акцентный текст и ссылки на белом (5:1) */
  --amber-soft:#E9F4FE;   /* мягкая подложка под акцент */
  --green:#12A150;
  --green-soft:#E9F8EF;
  --blue:#2563EB;
  --blue-soft:#EEF3FF;
  --red:#DC2626;

  --radius:14px;
  --radius-lg:20px;
  --radius-sm:10px;
  --maxw:1220px;
  --gut:20px;          /* боковой отступ страницы, см. .container */

  --font-display:'Space Grotesk', system-ui, sans-serif;
  --font-body:'Inter', system-ui, -apple-system, sans-serif;
  --font-mono:'IBM Plex Mono', ui-monospace, monospace;

  --shadow-sm:0 1px 2px rgba(16,24,40,.06), 0 1px 3px rgba(16,24,40,.08);
  --shadow-md:0 4px 8px -2px rgba(16,24,40,.08), 0 12px 24px -6px rgba(16,24,40,.10);
  --shadow-lg:0 12px 28px -8px rgba(16,24,40,.16), 0 32px 64px -12px rgba(16,24,40,.14);
  --header-h:68px;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth; -webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *{animation-duration:.001ms!important;transition-duration:.001ms!important}
}
body{
  margin:0;
  font-family:var(--font-body);
  color:var(--text);
  background:var(--paper);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{font-family:var(--font-display);line-height:1.15;margin:0;letter-spacing:-.02em;font-weight:700}
h1{font-size:clamp(1.75rem,3.6vw,2.9rem)}
h2{font-size:clamp(1.45rem,2.6vw,2.1rem)}
h3{font-size:clamp(1.1rem,1.6vw,1.3rem)}
p{margin:0}
a{color:inherit;text-decoration:none}
ul,ol{margin:0;padding:0;list-style:none}
img,svg{display:block;max-width:100%}
button,input,select,textarea{font-family:inherit;font-size:inherit}

/* Боковой отступ страницы держим в переменной: от него зависят «ленты»,
   которые выезжают за края контейнера (карточки авто, быстрые кнопки).
   Разъедутся значения — страница поедет вбок на разницу. */
.container{max-width:var(--maxw);margin:0 auto;padding:0 var(--gut)}
.container-narrow{max-width:800px;margin:0 auto;padding:0 20px}

.skip-link{position:absolute;left:-9999px;top:0;background:var(--amber-btn);color:#fff;padding:12px 20px;z-index:2000;border-radius:0 0 8px 0;font-weight:600}
.skip-link:focus{left:0}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid var(--amber);outline-offset:2px;border-radius:4px}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.eyebrow{font-family:var(--font-mono);font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);font-weight:600}

/* ---------------------------------------------------------------- КНОПКИ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:13px 22px;border-radius:999px;font-weight:600;font-size:.95rem;
  border:1px solid transparent;cursor:pointer;white-space:nowrap;
  transition:transform .15s,background .15s,box-shadow .15s,border-color .15s;
  text-align:center;
}
.btn:active{transform:translateY(1px)}
.btn-primary{background:var(--amber-btn);color:#fff}
.btn-primary:hover{background:var(--amber-btn-hover);color:#fff}
.btn-dark{background:var(--ink);color:#fff}
.btn-dark:hover{background:var(--ink-3)}
.btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.32)}
.btn-ghost:hover{border-color:#fff;background:rgba(255,255,255,.08)}
.btn-outline{background:#fff;color:var(--text);border-color:var(--line)}
.btn-outline:hover{border-color:var(--ink);background:var(--paper)}
.btn-tg{background:#fff;color:#12658A;border-color:#B9DCEC}
.btn-tg:hover{background:#F0F8FC;border-color:#12658A}
.btn-sm{padding:9px 16px;font-size:.87rem}
.btn-lg{padding:16px 30px;font-size:1.02rem}
.btn-block{width:100%}
.btn[disabled]{opacity:.55;cursor:not-allowed}

/* ---------------------------------------------------------------- ШАПКА */
/* backdrop-filter снят 01.09.2026 по той же причине, что у .filter-strip,
   .tabbar и .mobile-buy (см. их комментарии ниже) — только здесь эффект был
   САМЫЙ ощутимый на Android: шапка липкая (position:sticky) и видна при
   прокрутке АБСОЛЮТНО любой страницы, в отличие от тех трёх элементов,
   которые показываются не всегда. Именно поэтому "лагает прокрутка... наверное
   в местах где есть слайдеры" (жалоба от 01.09.2026) — под шапкой на главной
   сразу лента .hero-chips, а в каталоге — лента .fchips: смотря на них,
   человек прокручивает мимо шапки, а браузер на КАЖДЫЙ кадр пересчитывает
   размытие фона под ней. Фон и так непрозрачен на 96% — потеря стекла
   незаметна глазу. */
.site-header{position:sticky;top:0;z-index:200;background:rgba(10,21,35,.96);border-bottom:1px solid rgba(255,255,255,.08)}
.header-inner{display:flex;align-items:center;gap:18px;height:var(--header-h)}
.logo{display:flex;align-items:center;gap:10px;flex-shrink:0}
.logo-mark{width:36px;height:36px;flex-shrink:0}
.logo-text{display:flex;flex-direction:column;line-height:1.05}
.logo-name{font-family:var(--font-display);font-weight:700;font-size:1.06rem;color:#fff;letter-spacing:-.02em}
.logo-name .l2{color:var(--amber)}
.logo-sub{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.5)}

.city-picker{position:relative;flex-shrink:0}
.city-btn{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);color:#fff;border-radius:999px;padding:7px 13px;font-size:.86rem;font-weight:500;cursor:pointer;transition:background .15s}
.city-btn:hover{background:rgba(255,255,255,.13)}
.city-btn .caret{font-size:.62rem;opacity:.65}
.city-menu{position:absolute;top:calc(100% + 8px);left:0;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:8px;min-width:250px;z-index:300;display:none;max-height:min(70vh,440px);overflow:auto}
.city-menu[data-open="true"]{display:block}
.city-menu-title{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted-2);padding:6px 12px 8px;font-weight:600}
.city-menu a{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 12px;border-radius:9px;font-size:.92rem;transition:background .12s}
.city-menu a:hover{background:var(--paper)}
.city-menu a[aria-current="true"]{background:var(--amber-soft);color:var(--amber-deep);font-weight:600}
.city-menu a span{font-size:.78rem;color:var(--muted-2)}
/* Подзаголовки групп в быстром списке (столицы Поволжья/ЦФО, задача от
   03.09.2026) — тот же стиль, что и .city-menu-title, но внутри списка. */
.city-group-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted-2);padding:12px 12px 4px;font-weight:600}
/* Поиск по всем городам России (не только 11 обслуживаемых) — задача от
   03.09.2026, «как в авто ру». */
.city-search{padding:2px 4px 8px}
.city-search-input{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:9px;padding:9px 12px;font-size:.92rem;font-family:inherit;background:var(--paper);color:var(--text)}
.city-search-input:focus{outline:2px solid var(--amber);outline-offset:1px}
.city-search-results a{cursor:pointer}
.city-search-empty{padding:10px 12px;font-size:.85rem;color:var(--muted-2)}

/* Модалка «Ваш город Х?» по образцу fresh auto — задача от 03.09.2026.
   Тот же паттерн центрированного окна, что и .modal-backdrop у заявки, но
   ниже по z-index (500 < 900): заявка, если вдруг открыта одновременно,
   всегда главнее. */
.city-confirm-backdrop{
  position:fixed;inset:0;background:rgba(10,21,35,.5);
  z-index:500;display:none;align-items:flex-start;justify-content:center;
  padding:20px;overflow-y:auto;
}
.city-confirm-backdrop[data-open="true"]{display:flex}
.city-confirm-modal{
  margin-top:min(18vh,140px);width:100%;max-width:360px;
  background:#fff;border-radius:20px;box-shadow:var(--shadow-lg);
  padding:26px 24px 24px;text-align:center;
}
.city-confirm-q{margin:0 0 18px;font-size:1.15rem;font-weight:600;color:var(--text)}
.city-confirm-actions{display:flex;flex-direction:column;gap:10px}
@media (max-width:480px){
  .city-confirm-modal{margin-top:12vh}
}
/* На десктопе — не окно по центру экрана, а карточка под кнопкой города
   в шапке (задача от 03.09.2026): вопрос про город логичнее показать там
   же, где человек и так меняет город, а не отдельным окном посреди
   страницы. Подложка остаётся на весь экран (клик мимо — закрыть), но
   прозрачная и без центрирования: саму карточку двигает JS (top/left по
   getBoundingClientRect кнопки — см. site.js), здесь только на что она
   похожа и что теряет — фон, центрирование, отступ сверху. */
@media (min-width:821px){
  .city-confirm-backdrop{background:transparent;align-items:flex-start;justify-content:flex-start;padding:0}
  .city-confirm-modal{
    position:fixed;margin:0;width:320px;max-width:320px;text-align:left;
    border-radius:var(--radius-lg);
    /* Чуть ниже кнопки (не впритык — отступ считает JS, см. site.js,
       positionUnderCityBtn) и заметная, но лёгкая тень по краю карточки —
       не такая тяжёлая, как у окна заявки, чтобы не выглядеть отдельным
       "окном поверх сайта", а как обычная выпадашка (задача от 03.09.2026). */
    box-shadow:0 4px 12px rgba(16,24,40,.08),0 12px 32px rgba(16,24,40,.16);
    border:1px solid var(--line);
  }
}

/* Большое окно выбора города — «Выбрать другой» из city-confirm выше
   (задача от 03.09.2026, по мотивам присланного скриншота: у референса
   центрированная карточка на весь список городов в две колонки — здесь
   то же самое плюс поле поиска, которого у референса не было). В отличие
   от .city-menu (узкая выпадашка/шторка под кнопкой шапки) — это окно
   не привязано к кнопке, всегда по центру экрана, на любом устройстве. */
.city-pick-backdrop{
  position:fixed;inset:0;background:rgba(10,21,35,.55);
  z-index:520;display:none;align-items:flex-start;justify-content:center;
  padding:20px;overflow-y:auto;
}
.city-pick-backdrop[data-open="true"]{display:flex}
.city-pick-card{
  position:relative;margin-top:min(6vh,60px);width:100%;max-width:600px;
  background:#fff;border-radius:24px;box-shadow:var(--shadow-lg);
  padding:30px 26px 22px;max-height:88vh;max-height:88dvh;
  display:flex;flex-direction:column;
}
.city-pick-close{
  position:absolute;top:16px;right:16px;width:38px;height:38px;
  border:0;border-radius:50%;background:var(--paper);color:var(--muted);
  cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;
  flex-shrink:0;
}
.city-pick-close:hover{background:var(--line);color:var(--text)}
.city-pick-title{
  margin:0 40px 18px 0;font-size:1.2rem;line-height:1.35;text-align:center;
  font-family:var(--font-display);
}
.city-pick-card .city-search{flex-shrink:0;margin-bottom:6px}
.city-pick-list{
  list-style:none;margin:0;padding:4px 0 0;overflow-y:auto;
  display:grid;grid-template-columns:1fr 1fr;gap:0 12px;
  -webkit-overflow-scrolling:touch;overscroll-behavior:contain;
}
.city-pick-list:empty{display:none}
.city-pick-list[hidden]{display:none}
.city-pick-list .city-group-label{grid-column:1 / -1}
.city-pick-list a{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:10px 10px;border-radius:9px;font-size:.92rem;transition:background .12s;
}
.city-pick-list a:hover{background:var(--paper)}
.city-pick-list a[aria-current="true"]{background:var(--amber-soft);color:var(--amber-deep);font-weight:600}
.city-pick-list a span{font-size:.78rem;color:var(--muted-2)}
@media (max-width:480px){
  .city-pick-card{margin-top:0;border-radius:20px;padding:24px 18px 18px}
  .city-pick-list{grid-template-columns:1fr}
  .city-pick-title{font-size:1.08rem}
}

.main-nav{margin-left:auto;min-width:0}
.main-nav ul{display:flex;gap:20px;flex-wrap:nowrap}
.main-nav a{color:rgba(255,255,255,.8);font-size:.92rem;font-weight:500;transition:color .15s;white-space:nowrap}
.main-nav a:hover,.main-nav a[aria-current="page"]{color:#fff}
.header-cta{display:flex;align-items:center;gap:12px;flex-shrink:0}
.header-phone{color:#fff;font-family:var(--font-mono);font-weight:600;font-size:.92rem;white-space:nowrap}
.nav-toggle{display:none;background:none;border:none;color:#fff;padding:6px;cursor:pointer}
.nav-toggle svg{width:26px;height:26px}

/* Шапка плотная: при нехватке ширины сначала ужимаем отступы, потом
   прячем телефон (кнопка «Подобрать авто» остаётся), и только потом
   сворачиваем меню в бургер. */
@media (max-width:1500px){
  .header-inner{gap:14px}
  .main-nav ul{gap:16px}
  .main-nav a{font-size:.88rem}
  /* Раньше здесь пряталась строчка под логотипом: в ней был длинный слоган
     «Авто из Китая и Кореи под ключ», который не помещался. Теперь там
     короткий адрес сайта — он влезает вплоть до 620px, а адрес полезнее
     слогана: человек запоминает, как вернуться. */
}
@media (max-width:1340px){
  .header-phone{display:none}
}
@media (max-width:1140px){
  .main-nav{position:fixed;inset:var(--header-h) 0 auto 0;background:var(--ink);padding:12px 20px 24px;border-bottom:1px solid rgba(255,255,255,.1);display:none}
  .main-nav[data-open="true"]{display:block}
  .main-nav ul{flex-direction:column;gap:0}
  .main-nav a{display:block;padding:13px 0;border-bottom:1px solid rgba(255,255,255,.07);font-size:1rem}
  /* 44 пикселя — минимум, ниже которого палец промахивается примерно
     через раз. Сама иконка прежняя (26px), растёт только область
     нажатия. flex вместо block — чтобы иконка осталась по центру. */
  .nav-toggle{display:flex;align-items:center;justify-content:center;
              width:44px;height:44px;padding:0;order:9;margin-left:auto}
  .header-phone{display:none}
  .header-cta .btn{display:none}
}
@media (max-width:620px){
  .header-inner{gap:9px}
  .logo{min-width:0}
  .logo-sub{display:none}
  .logo-name{font-size:.96rem;white-space:nowrap}
  .logo-mark{width:32px;height:32px}
  .city-btn{padding:7px 9px;font-size:.8rem;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .nav-toggle{flex-shrink:0;margin-left:auto}
  .header-cta{display:none}
}
/* Самые узкие телефоны (360px и уже). Шапка на них не помещалась: логотип,
   выбор города и бургер вместе оказывались шире экрана на 9 пикселей —
   и вбок уезжала вся страница, а не только шапка. */
@media (max-width:400px){
  :root{--gut:16px}
  .header-inner{gap:7px}
  .logo-name{font-size:.88rem}
  .logo-mark{width:29px;height:29px}
  .city-btn{max-width:104px;padding:7px 8px;font-size:.76rem}
}
/* Совсем старые телефоны (iPhone SE первого поколения — 320px). Их мало,
   но пусть сайт на них хотя бы не разъезжается. */
@media (max-width:340px){
  :root{--gut:12px}
  .city-btn{max-width:78px}
  .logo-name{font-size:.82rem}
  .btn-lg{padding:13px 18px;font-size:.94rem}
  .hero-actions .btn,.cta-actions .btn{width:100%}
}

/* ---------------------------------------------------------------- ГЕРОЙ */
.hero{
  background:radial-gradient(ellipse 900px 520px at 82% -12%, rgba(46,155,240,.20), transparent 62%), var(--ink);
  color:#fff;position:relative;overflow:hidden;
}
.hero-grid{display:grid;grid-template-columns:1.06fr .94fr;gap:52px;align-items:center;padding:60px 0 56px}
.hero h1{margin-top:14px}
.hero h1 .accent{color:var(--amber)}
.hero-sub{margin-top:20px;font-size:1.06rem;color:rgba(255,255,255,.78);max-width:54ch}
.hero-actions{display:flex;gap:12px;margin-top:30px;flex-wrap:wrap}
.hero-chips{display:flex;gap:9px;flex-wrap:wrap;margin-top:30px}
.chip{font-family:var(--font-mono);font-size:.76rem;border:1px solid rgba(255,255,255,.18);border-radius:999px;padding:6px 13px;color:rgba(255,255,255,.75)}
.chip b{color:#fff;font-weight:600}

/* компактный герой для внутренних страниц */
.hero-slim{padding:44px 0 40px;background:radial-gradient(ellipse 700px 380px at 88% -30%, rgba(46,155,240,.18), transparent 60%), var(--ink);color:#fff}
.hero-slim h1{max-width:22ch}
.hero-slim .hero-sub{margin-top:14px;font-size:1rem;max-width:66ch}
.hero-slim .hero-chips{margin-top:22px}

/* карточка маршрута в герое */
.route-card{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.11);border-radius:var(--radius-lg);padding:26px 24px 22px}
/* Панель на светлой секции (напр. «Порядок платежей») */
.route-card-panel{background:var(--ink);border-color:rgba(255,255,255,.11);color:#fff}
.route-card-panel h3{color:#fff}
.route-card h3{font-size:.98rem;color:#fff;margin-bottom:18px}
.route-line{display:flex;align-items:flex-start;gap:14px;padding:12px 0;border-bottom:1px dashed rgba(255,255,255,.12)}
.route-line:last-child{border-bottom:none}
.route-num{width:28px;height:28px;border-radius:50%;background:var(--amber-btn-hover);color:#fff;-webkit-font-smoothing:auto;font-family:var(--font-body);font-size:.92rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}
.route-line strong{display:block;font-size:.95rem;color:#fff;font-weight:600}
.route-line > div span{font-size:.85rem;color:rgba(255,255,255,.62)}

@media (max-width:900px){
  .hero-grid{grid-template-columns:1fr;gap:34px;padding:44px 0 44px}
}

/* ---------------------------------------------------------------- СЕКЦИИ */
.section{padding:64px 0}
.section-alt{background:#fff}
.section-tight{padding:44px 0}
.section-head{max-width:64ch;margin-bottom:36px}
.section-head h2{margin-top:10px}
.section-head p{margin-top:14px;color:var(--muted);font-size:1.03rem}
.section-head.center{margin-left:auto;margin-right:auto;text-align:center}

.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
@media (max-width:980px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}
/* Без этого колонка сетки раздувается под самое широкое содержимое
   (телефон в моноширинном шрифте, кнопка, длинное слово) и вылезает
   за край экрана. Та же болячка, что была на странице автомобиля. */
.grid-2 > *,.grid-3 > *,.grid-4 > *{min-width:0}

.feature{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:24px;transition:box-shadow .18s,transform .18s}
.feature:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.section-alt .feature{background:var(--paper);border-color:transparent}
.feature-icon{width:42px;height:42px;border-radius:11px;background:var(--amber-soft);color:var(--amber-deep);display:flex;align-items:center;justify-content:center;font-size:1.2rem;margin-bottom:14px}
.feature-icon svg{width:22px;height:22px}
.feature h3{font-size:1.05rem;margin-bottom:8px}
.feature p{color:var(--muted);font-size:.94rem}

.stats-band{background:var(--ink);color:#fff;padding:38px 0}
.stats-band .grid-4{gap:24px}
.stat{text-align:center}
.stat b{display:block;font-family:var(--font-display);font-size:clamp(1.5rem,3vw,2.1rem);color:var(--amber)}
.stat span{font-size:.88rem;color:rgba(255,255,255,.65)}

/* --------------------------------------------------- КАРТОЧКИ АВТОМОБИЛЕЙ */
/* Три карточки в ряд, а не четыре. Ширина контейнера прежняя (1220px), так
   что каждая карточка стала шире примерно на треть: фотография крупнее,
   название машины перестало переноситься на три строки.
   Число карточек на странице (15 = пять рядов по три) задано в
   site_pages.py, CATALOG_PER_PAGE — эти два числа связаны. */
.cars-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
@media (max-width:1000px){.cars-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}}
@media (max-width:640px){.cars-grid{grid-template-columns:minmax(0,1fr)}}
.car-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .2s,transform .2s,border-color .2s;position:relative}
.car-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);border-color:#D3DAE2}
.car-photo{position:relative;aspect-ratio:4/3;background:linear-gradient(135deg,#E8ECF1,#F5F7F9);overflow:hidden}
.car-photo img{width:100%;height:100%;object-fit:cover;transition:transform .35s}
.car-card:hover .car-photo img{transform:scale(1.035)}
.car-photo-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--muted-2);font-size:.85rem}
.spec-sub{color:var(--muted-2);font-size:.85em}
.car-badges{position:absolute;top:10px;left:10px;display:flex;flex-wrap:wrap;gap:6px;max-width:calc(100% - 60px)}
.badge{font-family:var(--font-mono);font-size:.68rem;font-weight:600;padding:4px 9px;border-radius:999px;background:rgba(10,21,35,.82);color:#fff;backdrop-filter:blur(4px);letter-spacing:.02em}
.badge-china{background:rgba(220,38,38,.9)}
.badge-korea{background:rgba(91,79,214,.92)}
.badge-hot{background:var(--amber-btn);color:#fff}
.badge-fresh{background:rgba(18,161,80,.92)}
/* Льготный утильсбор — самый денежный факт в карточке: разница с
   коммерческой ставкой измеряется сотнями тысяч. Поэтому отдельный,
   более заметный цвет, а не общий серый. */
.badge-util{background:rgba(11,76,130,.94);font-weight:600}
.car-fav{position:absolute;top:10px;right:10px;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.94);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1rem;color:var(--muted);box-shadow:var(--shadow-sm);transition:transform .15s,color .15s}
.car-fav:hover{transform:scale(1.1)}
.car-fav[aria-pressed="true"]{color:var(--amber);}
.car-body{padding:16px 16px 18px;display:flex;flex-direction:column;flex:1;gap:10px}
.car-title{font-family:var(--font-display);font-size:1.04rem;font-weight:600;letter-spacing:-.01em;line-height:1.25}
.car-title a:hover{color:var(--amber-deep)}
.car-specs{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:.85rem;color:var(--muted)}
.car-specs span{display:inline-flex;align-items:center;gap:5px}
.car-price-row{margin-top:auto;padding-top:10px;border-top:1px solid var(--line-soft)}
.car-price{font-family:var(--font-display);font-size:1.32rem;font-weight:700;letter-spacing:-.02em}
.car-price-note{font-size:.78rem;color:var(--muted);margin-top:1px;line-height:1.3;min-height:2.6em}
/* Только слова "цена в Кыргызстане" красным — не вся подпись целиком.
   Задача от 03.09.2026, уточнена дважды: сперва красили саму цену,
   потом всю подпись "цена в Кыргызстане · без доставки...", в итоге
   осталось только само предупреждение "цена в Кыргызстане", а "без
   доставки и растаможки" — обычный поясняющий текст. */
.car-price-note-kg{color:var(--red);font-weight:600}
/* Подпись под ценой у Кыргызстана короче ("без доставки в РФ и
   растаможки"), чем у Китая/Кореи ("с растаможкой и доставкой в
   <город> · ориентир на сегодня" — у длинных названий городов вроде
   "Нижний Новгород" не умещается в одну строку). Одна умещалась в
   одну строку, другая — в две, и цена с кнопками съезжали друг
   относительно друга в одном ряду карточек (отчёт 31.08.2026:
   "в карточках кыргызских и китайских авто цена не на одной линии").
   min-height резервирует место под две строки всегда — задача не
   "впихнуть в одну строку" (для длинных городов это невозможно без
   потери смысла текста), а "одинаковая высота у всех карточек". */
.car-price-note b{color:var(--green);font-weight:600}
.car-actions{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.car-actions .btn{width:100%}

/* ------------------------------------------------------------ ФИЛЬТРЫ */
.filters-bar{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:var(--header-h);z-index:150}
.filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:12px;padding:16px 0}
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field label{font-size:.74rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted-2);font-weight:600}
.field select,.field input{padding:10px 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--text);font-size:.92rem;width:100%;min-width:0}
.field select:hover,.field input:hover{border-color:#C9D2DC}
/* Стрелки-счётчики у number-полей (Цена/Пробег) съедают ~20px ширины ради
   кликов "+1"/"-1", которые для семизначной цены никто не использует —
   убираем, отдаём это место цифрам (01.09.2026, отчёт пользователя "не
   видно, что вводишь, если цифра 3000000"). font-variant-numeric:
   tabular-nums — цифры моноширинные, число не "гуляет" по полю при вводе. */
.field input[type="number"]{appearance:textfield;-moz-appearance:textfield;font-variant-numeric:tabular-nums}
.field input[type="number"]::-webkit-outer-spin-button,
.field input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
/* Цена/Пробег переведены на type="text" с живым форматированием разрядов
   (01.09.2026, аудит фильтров, находка №2 — "3000000" не читается на
   глаз так же быстро, как "3 000 000" везде в остальном интерфейсе) —
   тот же tabular-nums, чтобы цифры не "гуляли" по ширине поля при вводе. */
.field input[type="text"]{font-variant-numeric:tabular-nums}
/* Короткая подсветка при автоматической перестановке перепутанных
   "от"/"до" (см. site.js, guardRange) — видно, что поле поменялось само,
   а не просто исчезло значение. */
.field input.field-swapped{
  animation:field-swap-pulse .9s ease-out;
}
@keyframes field-swap-pulse{
  0%{background:var(--amber-soft, #eaf4fd);border-color:var(--accent, #1272c4)}
  100%{background:#fff;border-color:var(--line)}
}
/* Цена и пробег — единственные поля с ДВУМЯ инпутами внутри одной ячейки
   сетки (см. .range ниже) — в обычной колонке auto-fit(155px) на каждое
   число оставалось ~65-70px, семизначная цена не помещалась не обрезаясь
   (тот же отчёт). :has(.range) отличает именно эти два поля от обычных
   одиночных (Марка/Страна/Возраст) — им сетка отдаёт вдвое больше места. */
.filters .field:has(.range){grid-column:span 2}
/* Ниже 820px .filters и так становится одноколоночной (см. медиа-запрос
   ниже) — там span:2 уже ничего не меняет, отдельного отката не нужно. */

/* ---------- одинаковая стрелка у всех выпадающих полей ----------
   У поля «Модель» стрелка своя — это не <select>, а кнопка, и символ «▾»
   лежит в разметке. У обычных <select> стрелку рисует браузер, и выглядит
   она по-своему в каждой системе: на macOS одна, на Windows другая.
   Рядом в одной строке фильтров это бросалось в глаза.

   Убираем браузерную и рисуем ту же «▾» на обёртке. Именно тем же
   символом, а не похожей картинкой: тогда размер, цвет и толщина совпадают
   сами собой, потому что это один и тот же шрифт.

   Псевдоэлемент вешается на обёртку, а не на сам <select> — у select
   псевдоэлементов не бывает. */
.select-wrap{position:relative}
.select-wrap select{
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  padding-right:30px;                 /* место под стрелку */
}
.select-wrap select::-ms-expand{display:none}
.select-wrap::after{
  content:"▾";
  position:absolute;right:11px;top:50%;transform:translateY(-50%);
  font-size:.92rem;line-height:1;color:var(--text);
  pointer-events:none;                /* клик проходит на сам select */
}
/* Выключенное поле «Модель» бледнеет вместе со стрелкой — здесь то же
   самое, чтобы состояния совпадали. */
.select-wrap select[disabled] + *,
.select-wrap:has(select[disabled])::after{color:var(--muted-2)}
.field .range{display:flex;align-items:center;gap:6px}
.field .range input{flex:1 1 0;min-width:0}
.field .range span{color:var(--muted-2)}
/* ---------- панель над каталогом: порядок показа ----------
   Раньше сортировка стояла внутри формы фильтров и применялась только по
   кнопке «Показать» в другом углу. Теперь это самостоятельный переключатель
   над сеткой, справа, и клик срабатывает сразу.
   Внутри — ссылки, а не кнопки: порядок виден в адресе, его можно
   отправить и сохранить в закладки. */
.catalog-bar{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}

/* ---------- кнопка «Льготный утильсбор» ----------
   Отдельная кнопка, а не поле в ряду фильтров: это самый дорогой фильтр на
   сайте — разница между льготной ставкой и полной больше, чем разница между
   двумя разными машинами в каталоге.
   Выключенная — спокойная, с монетой в акцентном цвете, чтобы её заметили.
   Включённая — зелёная и залитая: видно, что выдача сужена, и видно, чем.
   Состояние помечено не только цветом: у включённой появляется крестик
   «выключить», у выключенной его нет. */
.util-filter{
  display:inline-flex;align-items:center;gap:9px;
  padding:9px 16px;border-radius:999px;cursor:pointer;
  background:#fff;border:1.5px solid var(--line);
  font-size:.9rem;font-weight:600;color:var(--text);
  transition:border-color .15s,background .15s,color .15s,box-shadow .15s;
}
.util-filter svg{width:19px;height:19px;color:var(--amber-btn);flex-shrink:0;transition:color .15s}
.util-filter:hover{border-color:#0B7A3B;box-shadow:var(--shadow-sm)}
.util-filter .util-off{display:none;font-size:.95rem;line-height:1;opacity:.75}
/* Зелёный здесь темнее фирменного (--green #12A150): белый текст на нём
   давал контраст 3.4:1, а для мелкого жирного шрифта нужно 4.5:1.
   #0B7A3B — 5.4:1, читается и на солнце, и на дешёвом экране. */
.util-filter[aria-pressed="true"]{
  background:#0B7A3B;border-color:#0B7A3B;color:#fff;
}
.util-filter[aria-pressed="true"] svg{color:#fff}
.util-filter[aria-pressed="true"] .util-off{display:inline}
.util-filter[aria-pressed="true"]:hover{background:#096832;border-color:#096832}
/* ---------- кнопка «Выгрузить фильтры» (только для своих) ----------
   Намеренно неяркая и нейтральная: это служебный инструмент редактора, а
   не действие для посетителя, и в ряду с «Льготным утильсбором» она не
   должна перетягивать внимание. */
.catalog-bar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.export-filters{
  display:inline-flex;align-items:center;gap:7px;
  padding:9px 15px;border-radius:999px;cursor:pointer;
  background:var(--paper);border:1px dashed var(--line);
  font-size:.84rem;font-weight:600;color:var(--muted);
  font-family:var(--font-mono);
  transition:border-color .15s,color .15s,background .15s;
}
.export-filters:hover{border-color:var(--amber);color:var(--text)}
/* display:inline-flex перебивает атрибут hidden — та же ловушка, что была
   у .fav-link ниже. Кнопка приходит от сервера только своим, но сообщение
   рядом с ней прячется именно атрибутом. */
.export-filters[hidden],.export-msg[hidden]{display:none}
.export-filters[data-state="ok"]{border-style:solid;border-color:#0B7A3B;color:#0B7A3B;background:var(--green-soft)}
.export-filters[data-state="err"]{border-style:solid;border-color:var(--red);color:var(--red)}
/* Сообщение занимает всю ширину панели и встаёт СВОЕЙ строкой под ней.
   Так было: оно стояло рядом с кнопкой, и в момент появления левая часть
   панели становилась шире — сортировка уезжала вниз, будто страница
   сломалась. flex-basis:100% в панели с flex-wrap заставляет элемент
   перенестись целиком, ничего не сжимая. */
.export-msg{flex:0 0 100%;font-size:.82rem;color:var(--muted);line-height:1.45;margin-top:-4px}
.export-msg[data-state="ok"]{color:#0B7A3B}
.export-msg[data-state="err"]{color:var(--red)}
.sort-switch{display:flex;align-items:center;gap:10px}
.sort-label{font-size:.86rem;color:var(--muted);white-space:nowrap}
.sort-opts{
  display:flex;background:#EEF1F5;border:1px solid var(--line);
  border-radius:999px;padding:3px;gap:2px;
}
.sort-opts a{
  display:block;padding:7px 15px;border-radius:999px;
  font-size:.87rem;font-weight:500;color:var(--muted);
  text-decoration:none;white-space:nowrap;transition:background .15s,color .15s;
}
.sort-opts a:hover{color:var(--text)}
.sort-short{display:none}
.h2-short{display:none}
/* Текущий порядок — белой «таблеткой». Это не только цвет: у активного
   пункта есть тень и он единственный на белом фоне, поэтому он читается
   и в чёрно-белой печати, и при выключенных цветах. */
.sort-opts a[aria-current="true"]{
  background:#fff;color:var(--text);font-weight:600;box-shadow:var(--shadow-sm);
}

/* ---------- поле марки с подсказками ----------
   Заменило выпадающий список: марок под сорок, листать их неудобно.
   Список подсказок висит поверх страницы (position:absolute), поэтому у
   родителя обязателен position:relative — иначе он «уедет» к краю экрана. */
.ac{position:relative}
.ac-input{
  width:100%;padding:11px 34px 11px 12px;border-radius:var(--radius-sm);
  border:1px solid var(--line);background:#fff;font-size:.94rem;font-family:inherit;
}
.ac-input:focus{outline:2px solid var(--amber);outline-offset:-1px;border-color:var(--amber)}
.ac-clear{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:24px;height:24px;border:none;background:none;cursor:pointer;
  color:var(--muted-2);font-size:.85rem;line-height:1;border-radius:50%;
}
.ac-clear:hover{color:var(--text);background:var(--paper)}
.ac-clear[hidden]{display:none}
.ac-list{
  position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:60;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-md);max-height:280px;overflow-y:auto;padding:4px;
}
.ac-list[hidden]{display:none}
.ac-option{padding:9px 11px;border-radius:6px;font-size:.92rem;cursor:pointer}
.ac-option:hover{background:var(--paper)}
/* Подсветка с клавиатуры — не только фоном: рядом полоса слева, иначе на
   плохом экране активная строка неотличима от той, что под курсором. */
.ac-option[aria-selected="true"]{background:#EAF0FA;box-shadow:inset 3px 0 0 var(--amber)}
.ac-empty{padding:11px;font-size:.9rem;color:var(--muted)}

.filters-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding-bottom:16px}
.filters-summary{font-size:.9rem;color:var(--muted);margin-right:auto}
.filters-summary b{color:var(--text)}
/* «Сбросить» — своё отдельное поле сетки СРАЗУ ПОСЛЕ «Показать» (см.
   render_filters: .field-reset идёт следующим элементом формы), а не
   общий ряд с ним внутри одной ячейки — той версией 02.09.2026 текст
   «Сбросить» и кнопка «Показать» не помещались в одну узкую колонку
   (155px) и наезжали на соседнее поле слева (отчёт пользователя со
   скриншотом). Отдельное поле — часть той же сетки auto-fit, поэтому
   всегда получает своё место, а «Показать» при этом остаётся ровно там
   же, где было (тот же html, что и до всех правок этого раунда) —
   пользователь отдельно попросил его не трогать. Видно оно только когда
   выбран хоть один фильтр — html-атрибут hidden выставляется на сервере
   (см. has_active_filters). */
/* Поле выше (Показать) заметно выше — у кнопки padding 13px сверху/снизу
   плюс рамка, у текстовой ссылки такого нет. Оба поля — одинаковые по
   структуре flex-колонки (label + контент) и растянуты сеткой на высоту
   строки, поэтому без justify-content ссылка просто прижималась бы к
   label сверху, а не к середине кнопки рядом (отчёт пользователя
   02.09.2026 — «выровни по высоте, пусть будет по центру»). */
.filters .field-reset{justify-content:center}
.filters-reset-link{background:none;border:0;padding:0;color:var(--muted);font-size:.87rem;cursor:pointer;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.filters-reset-link:hover{color:var(--text);text-decoration:underline}
.filters-reset-link span{font-size:.8em}
/* .filters-reset-link задаёт display:inline-flex явно — без этой строки
   атрибут hidden не срабатывает (тот же перебой, что и у .btn ниже, и у
   .fav-link — см. соответствующий комментарий там). Именно это и было в
   отчёте: кнопка «Сбросить» была видна даже без единого выбранного
   фильтра — атрибут hidden стоял в html, но CSS его перебивал. */
.filters-reset-link[hidden]{display:none}
/* Та же история у кнопки «Сбросить» в подвале мобильной шторки —
   класс .btn тоже задаёт display:inline-flex. */
[data-filters-reset][hidden]{display:none}
/* Строки .filters-toggle / .filters-head здесь больше нет. Раньше на
   телефоне фильтры разворачивались прямо в потоке страницы, и над ними
   стоял ряд из двух кнопок. Теперь фильтры выезжают шторкой снизу, а
   открывает их кнопка из липкой полоски над сеткой — см. блоки «ШТОРКИ
   СНИЗУ» и «ПОЛОСКА ФИЛЬТРОВ НАД СЕТКОЙ» в конце файла. */

.model-filter{position:relative}
/* color задан явно: у <button> цвет текста берётся из системного стиля
   браузера (чёрный), а у соседних полей — из var(--text). Стрелки и подписи
   рядом получались разного оттенка. */
.model-filter-trigger{width:100%;display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--text);cursor:pointer;font-size:.92rem;text-align:left}
.model-filter-trigger[disabled]{background:var(--paper);color:var(--muted-2);cursor:not-allowed}
.model-filter-panel{position:absolute;top:calc(100% + 6px);left:0;right:0;min-width:260px;background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:160;max-height:340px;overflow:auto;padding:8px}
.model-group{border-bottom:1px solid var(--line-soft);padding:4px 0}
.model-group:last-child{border-bottom:none}
.model-row{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:8px;cursor:pointer;font-size:.9rem}
.model-row:hover{background:var(--paper)}
.model-row input{width:auto;flex-shrink:0}
.model-row.sub{padding-left:30px;font-size:.86rem;color:var(--muted)}

/* --------------------------------------------- СТРАНИЦА ОДНОГО АВТОМОБИЛЯ */
.car-page{display:grid;grid-template-columns:1.35fr .65fr;gap:34px;align-items:start;padding:34px 0 56px}
/* Без min-width:0 колонка раздувается под ширину самого широкого содержимого
   (полоски миниатюр), и блок с ценой уезжает за правый край экрана. */
.car-page > *{min-width:0}
@media (max-width:960px){.car-page{grid-template-columns:1fr;gap:24px}}

/* ------------------------------------------------------------- ГАЛЕРЕЯ */
.gallery{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden}
.gallery-main{position:relative;aspect-ratio:16/10;background:#0E1A28}
/* --- лента фотографий ---
   Фотографии лежат в ряд, а лента листается как обычная прокрутка: с
   инерцией, следом за пальцем, с «прилипанием» к кадру.

   Так было: слайды прятались и показывались по одному, а свайп ловился
   вручную — по началу и концу касания. Палец вёл, а картинка стояла, и
   только когда он отрывался, кадр менялся рывком. Понять, засчитался жест
   или нет, можно было только по результату.

   Теперь этим занимается сам браузер, и делает он это лучше: у него есть
   и инерция, и отмена жеста на полпути, и правильное поведение при быстром
   пролистывании подряд. Заодно из site.js ушёл рукописный обработчик
   свайпа.

   overscroll-behavior-x:contain — чтобы, долистав до последнего кадра,
   палец не потянул за собой страницу (а в Safari — не сработал жест
   «назад»). */
.gallery-track{
  display:flex;height:100%;
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;
  overscroll-behavior-x:contain;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
}
.gallery-track::-webkit-scrollbar{display:none}
.gallery-slide{
  margin:0;flex:0 0 100%;width:100%;height:100%;
  position:relative;overflow:hidden;scroll-snap-align:center;
}
/* Подложка — та же фотография, размытая и притемнённая. Нужна из-за того,
   что снимки приходят в разных пропорциях: без неё вертикальный кадр
   обрамляли бы две чёрные плиты во всю высоту. */
.gallery-slide::before{
  content:"";position:absolute;inset:0;z-index:0;
  background:var(--ph) center/cover no-repeat;
  filter:blur(28px) saturate(.75) brightness(.5);
  transform:scale(1.12);
}
.gallery-slide img{position:relative;z-index:1}
/* Стрелки и счётчик — ВЫШЕ фотографии.
   Фотография лежит на слое 1 (это нужно, чтобы она была над размытой
   подложкой). У кнопок своего слоя не было, и они оказывались под ней:
   когда снимок заполнял рамку целиком, стрелки пропадали совсем — и не
   просто визуально, они переставали нажиматься. Заметно это было не
   всегда: у фотографий с другими пропорциями по бокам оставались тёмные
   поля, и кнопки на них выглядывали. */
.gallery-arrow,.gallery-count{z-index:3}
/* contain, а не cover: фотографии объявлений приходят в разных пропорциях —
   и вертикальные, и панорамные. При cover у части машин обрезался то капот,
   то крыша. Пустые поля по бокам закрашены тёмным фоном галереи и выглядят
   как рамка, а не как дефект. */
.gallery-main img{width:100%;height:100%;object-fit:contain;display:block}
.gallery-main.is-zoomable img{cursor:zoom-in}

/* --- стрелки перелистывания ---
   Матовое стекло: кнопка размывает то, что под ней, поэтому одинаково
   читается и на светлом капоте, и на тёмном асфальте — без жирной тени,
   которая выглядит наклейкой поверх фотографии. Там, где размытие не
   поддерживается, остаётся просто полупрозрачная заливка. */
.gallery-arrow{
  position:absolute;top:50%;
  width:48px;height:48px;border-radius:50%;border:0;padding:0;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  /* Прозрачность .52, а не меньше: на белом капоте или на снегу белая
     стрелка на более светлом стекле переставала читаться. При .52 контраст
     3,6:1 даже в худшем случае — выше минимума для элементов управления. */
  color:#fff;background:rgba(16,26,38,.52);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);
  backdrop-filter:blur(14px) saturate(1.4);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22),0 6px 22px rgba(6,12,20,.30);
  opacity:0;transform:translateY(-50%) scale(.9);
  transition:opacity .22s cubic-bezier(.2,.7,.3,1),
             transform .22s cubic-bezier(.2,.7,.3,1),
             background .18s, box-shadow .18s;
}
.gallery-arrow svg{width:22px;height:22px;transition:transform .18s cubic-bezier(.2,.7,.3,1)}
.gallery-prev{left:16px}
.gallery-next{right:16px}
.gallery-main:hover .gallery-arrow,
.gallery-arrow:focus-visible{opacity:1;transform:translateY(-50%) scale(1)}
.gallery-arrow:hover{
  background:rgba(16,26,38,.68);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.36),0 8px 26px rgba(6,12,20,.38);
}
/* Стрелка чуть подаётся в свою сторону — маленькое движение,
   которое подсказывает направление */
.gallery-arrow.gallery-prev:hover svg{transform:translateX(-2px)}
.gallery-arrow.gallery-next:hover svg{transform:translateX(2px)}
.gallery-arrow:active{transform:translateY(-50%) scale(.94)}
.gallery-arrow:focus-visible{outline:2px solid #fff;outline-offset:3px}
.gallery-arrow[disabled]{opacity:0!important;pointer-events:none}
/* На тач-устройствах наведения нет — стрелки видно всегда */
@media (hover:none){
  .gallery-arrow{opacity:1;transform:translateY(-50%) scale(1);width:44px;height:44px}
}
@media (prefers-reduced-motion:reduce){
  .gallery-arrow,.gallery-arrow svg{transition:opacity .15s}
  .gallery-arrow{transform:translateY(-50%) scale(1)}
}

.gallery-count{
  position:absolute;right:14px;bottom:14px;
  background:rgba(10,21,35,.72);color:#fff;
  border-radius:999px;padding:5px 13px;font-size:.85rem;font-variant-numeric:tabular-nums;
  pointer-events:none;
}
.gallery-count b{font-weight:700}

.gallery-thumbs{
  display:flex;gap:8px;padding:10px;
  overflow-x:auto;overflow-y:hidden;
  scroll-behavior:smooth;scrollbar-width:thin;
}
.gallery-thumbs button{
  width:82px;height:60px;border-radius:8px;overflow:hidden;
  border:2px solid transparent;padding:0;background:#EDF0F3;cursor:pointer;flex:0 0 auto;
  transition:border-color .15s,opacity .15s;opacity:.72;
}
.gallery-thumbs button:hover{opacity:1}
.gallery-thumbs button[aria-current="true"]{border-color:var(--amber);opacity:1}
.gallery-thumbs img{width:100%;height:100%;object-fit:cover;display:block}
@media (max-width:560px){
  .gallery-thumbs{padding:8px}
  .gallery-thumbs button{width:64px;height:48px}
}

/* Просмотр фото во весь экран */
.gallery-box{
  /* Выше шапки (200), плавающих кнопок (400) и всплывашки (420),
     но ниже модального окна заявки (900) — заявка всегда главнее. */
  position:fixed;inset:0;z-index:800;background:rgba(8,15,25,.94);
  display:flex;align-items:center;justify-content:center;padding:26px;
}
.gallery-box[hidden]{display:none}
/* Размеры фотографии задаются в .gbox-stage ниже: она теперь лежит на
   отдельной подложке, которая ловит щипок и двойное касание. */
.gallery-box .gallery-arrow{opacity:1}
.gallery-box .gallery-count{right:auto;left:50%;transform:translateX(-50%);bottom:22px}
/* --- крестик закрытия ---
   Того же семейства, что и стрелки: то же матовое стекло, тот же радиус.
   Крестик нарисован линиями, а не символом «×» — символ в разных шрифтах
   выглядит по-разному и почти всегда сидит не по центру. */
.gallery-box-close{
  /* Слой 3 — над подложкой для щипка (.gbox-stage, слой 1). Она лежит на
     весь экран, и без этой строки крестик оказывался под ней: видно, а
     нажать нельзя. Стрелки и счётчик свой слой уже имеют. */
  position:absolute;top:18px;right:20px;z-index:3;
  width:44px;height:44px;border-radius:50%;border:0;padding:0;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  color:#fff;background:rgba(255,255,255,.10);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);
  backdrop-filter:blur(14px) saturate(1.4);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.20);
  transition:background .18s,box-shadow .18s,transform .22s cubic-bezier(.2,.7,.3,1);
}
.gallery-box-close svg{width:19px;height:19px;transition:transform .25s cubic-bezier(.2,.7,.3,1)}
.gallery-box-close:hover{
  background:rgba(255,255,255,.20);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.36);
}
.gallery-box-close:hover svg{transform:rotate(90deg)}
.gallery-box-close:active{transform:scale(.94)}
.gallery-box-close:focus-visible{outline:2px solid #fff;outline-offset:3px}
@media (max-width:560px){.gallery-box-close{top:12px;right:12px;width:40px;height:40px}}
@media (prefers-reduced-motion:reduce){
  .gallery-box-close svg{transition:none}
  .gallery-box-close:hover svg{transform:none}
}

/* Счётчик — из того же набора: стекло, а не плашка */
.gallery-count{
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);
}

.buy-box{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-sm);position:sticky;top:calc(var(--header-h) + 18px)}
@media (max-width:960px){.buy-box{position:static}}
.buy-price{font-family:var(--font-display);font-size:2rem;font-weight:700;letter-spacing:-.03em}
.buy-price-note{font-size:.86rem;color:var(--muted);margin-top:2px}
.buy-actions{display:flex;flex-direction:column;gap:9px;margin-top:18px}
.buy-trust{margin-top:18px;padding-top:16px;border-top:1px solid var(--line-soft);display:flex;flex-direction:column;gap:9px}
.buy-trust li{display:flex;gap:9px;font-size:.87rem;color:var(--muted);align-items:flex-start}
.buy-trust li b{color:var(--text);font-weight:600}
.buy-trust .ok{color:var(--green);flex-shrink:0}

.spec-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.spec-table th,.spec-table td{text-align:left;padding:12px 16px;font-size:.93rem;border-bottom:1px solid var(--line-soft)}
.spec-table tr:last-child th,.spec-table tr:last-child td{border-bottom:none}
.spec-table th{color:var(--muted);font-weight:500;width:47%}
.spec-table td{font-weight:600}

/* Таблица cookie в политике конфиденциальности (152-ФЗ-аудит, п.11).
   Отдельный класс, а не .spec-table: там ширина первой колонки жёстко
   47% под пару "характеристика/значение", здесь три равные по смыслу
   колонки — имя cookie, зачем, срок. */
.cookie-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;font-size:.9rem}
.cookie-table th,.cookie-table td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--line-soft);vertical-align:top}
.cookie-table tr:last-child td{border-bottom:none}
.cookie-table th{color:var(--muted);font-weight:600;background:var(--paper)}
.cookie-table td:first-child{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;white-space:nowrap}
@media (max-width:600px){
  .cookie-table{font-size:.82rem}
  .cookie-table th,.cookie-table td{padding:8px 10px}
}

/* Строка про льготный утильсбор. Это самая денежная строка в таблице:
   разница между льготой и её отсутствием — сотни тысяч рублей. Поэтому она
   выделена цветом, а не растворена среди пробега и года выпуска.
   Цвет — не единственный признак: рядом стоит знак ✔ / ✕ / ?, иначе строку
   не прочитает тот, кто не различает цвета, и любой, кто печатает страницу. */
.spec-util td{font-weight:600}
.spec-util td b{display:inline-block;width:1.2em;font-size:1.05rem;line-height:1}
.spec-util-ok{background:var(--green-soft)}
.spec-util-ok td{color:#0B6B36}
.spec-util-ok td b{color:var(--green)}
.spec-util-no{background:#FDECEC}
.spec-util-no td{color:#8A1F1F}
.spec-util-no td b{color:#C62828}
.spec-util-unknown{background:#FFF8E6}
.spec-util-unknown td{color:#6B4A05}

/* Оснащение: строк тут может быть много, поэтому шрифт мельче, а строки
   плотнее — иначе список опций выдавливает всё остальное за экран. */
.equip-table th,.equip-table td{padding:10px 16px;font-size:.9rem}

/* Опции без значения («камера заднего вида») — плашками, а не строками
   таблицы с пустой правой колонкой. Их бывает два десятка, и списком они
   читаются быстрее, чем таблицей. */
.equip-opts{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.equip-opts span{
  padding:7px 12px;background:#fff;border:1px solid var(--line);
  border-radius:999px;font-size:.87rem;color:var(--ink);
}

/* Ссылка на оригинал объявления на площадке в стране продажи. */
.origin-note{
  margin-top:34px;padding:18px 20px;
  background:#F4F1FD;border:1px solid #DDD3F7;border-radius:var(--radius);
}
.origin-head{font-weight:700;color:#3B2478;margin-bottom:8px}
.origin-note p{margin:0 0 9px;color:#4A3A72;font-size:.94rem;line-height:1.6}
.origin-link{
  display:inline-block;margin-top:4px;font-weight:600;color:#4A2E96;
  text-decoration:underline;text-underline-offset:3px;
}
.origin-link:hover{color:#2F1C66}

.price-break{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-top:16px}
.price-break-row{display:flex;justify-content:space-between;gap:16px;padding:11px 16px;font-size:.92rem;border-bottom:1px solid var(--line-soft)}
.price-break-row:last-child{border-bottom:none}
.price-break-row.head{background:var(--paper);font-weight:600;font-family:var(--font-display)}
.price-break-row.total{background:var(--amber-soft);color:#0B4C82;font-weight:700;font-family:var(--font-display);font-size:1.02rem;border-left:3px solid var(--amber)}
.price-break-row span:first-child{color:var(--muted)}
.price-break-row.head span,.price-break-row.total span{color:inherit}

/* ------------------------------------------------------------ SEO-ТЕКСТ */
.seo-text{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);padding:32px}
.seo-text h2{font-size:1.4rem;margin-bottom:14px}
.seo-text h3{font-size:1.08rem;margin:24px 0 10px}
.seo-text p{color:var(--muted);margin-bottom:12px}
.seo-text ul{margin:0 0 14px;padding-left:20px;list-style:disc;color:var(--muted)}
.seo-text li{margin-bottom:6px}
.seo-text a{color:var(--amber-deep);text-decoration:underline;text-underline-offset:2px}
.seo-text strong{color:var(--text)}

/* перелинковка — плитки ссылок */
.linkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:9px}
.linkgrid a{display:flex;justify-content:space-between;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);padding:11px 14px;font-size:.9rem;transition:border-color .15s,box-shadow .15s,color .15s}
.linkgrid a:hover{border-color:var(--amber);color:var(--amber-deep);box-shadow:var(--shadow-sm)}
.linkgrid a i{font-style:normal;font-size:.78rem;color:var(--muted-2)}
.section-alt .linkgrid a{background:var(--paper);border-color:transparent}

/* -------------------------------------------------------------- FAQ */
.faq{display:flex;flex-direction:column;gap:10px}
.faq details{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.faq summary{padding:16px 20px;cursor:pointer;font-weight:600;font-family:var(--font-display);font-size:1rem;list-style:none;display:flex;justify-content:space-between;gap:14px;align-items:center}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-size:1.3rem;color:var(--amber);font-weight:400;flex-shrink:0}
.faq details[open] summary::after{content:"−"}
.faq .faq-body{padding:0 20px 18px;color:var(--muted);font-size:.95rem}
.faq .faq-body p+p{margin-top:10px}

/* ------------------------------------------------------------ ХЛЕБНЫЕ КРОШКИ */
/* padding-top/bottom, а не шорхенд padding — иначе он бы обнулял
   padding-left/right, которые .container ставит тем же элементом
   (у .breadcrumbs два класса: "breadcrumbs container"). Баг найден
   03.09.2026: на /franshiza/ крошки прижимались к самому краю экрана,
   а не к левому краю контента ниже — на белых hero-slim страницах то
   же смещение было, просто менее заметно на глаз. */
.breadcrumbs{padding-top:14px;padding-bottom:14px;font-size:.83rem;color:var(--muted-2)}
.breadcrumbs ol{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.breadcrumbs li::after{content:"/";margin-left:6px;color:var(--line)}
.breadcrumbs li:last-child::after{display:none}
.breadcrumbs a:hover{color:var(--amber-deep)}
.breadcrumbs [aria-current="page"]{color:var(--muted)}

/* ------------------------------------------------------------ БЛОГ */
.post-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:22px}
.post-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:24px;display:flex;flex-direction:column;gap:10px;transition:box-shadow .18s,transform .18s}
.post-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.post-card .meta{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--amber)}
.post-card h3{font-size:1.12rem}
.post-card p{color:var(--muted);font-size:.93rem;flex:1}
.post-card .more{color:var(--amber-deep);font-weight:600;font-size:.9rem}

.article{background:#fff;border-radius:var(--radius-lg);padding:clamp(24px,4vw,54px);margin:24px auto 56px;max-width:820px;box-shadow:var(--shadow-sm)}
.article h1{font-size:clamp(1.6rem,3.2vw,2.4rem);margin-bottom:14px}
.article .meta{font-family:var(--font-mono);font-size:.76rem;color:var(--muted-2);text-transform:uppercase;letter-spacing:.08em;margin-bottom:26px}
.article h2{font-size:1.42rem;margin:34px 0 12px}
.article h3{font-size:1.12rem;margin:26px 0 10px}
.article p{margin-bottom:14px;font-size:1.02rem;color:#2A3644;line-height:1.72}
.article ul,.article ol{margin:0 0 18px;padding-left:22px;list-style:disc;color:#2A3644}
.article ol{list-style:decimal}
.article li{margin-bottom:8px;line-height:1.65}
.article a{color:var(--amber-deep);text-decoration:underline;text-underline-offset:2px}
/* Обёртка вокруг таблицы: на телефоне широкая таблица прокручивается
   внутри себя, а не растягивает всю страницу вбок. Без этого одна таблица
   ломает вёрстку всей статьи — а больше половины читателей с телефонов. */
.article .table-wrap{overflow-x:auto;margin:0 0 20px;-webkit-overflow-scrolling:touch}
.article .table-wrap table{margin-bottom:0;min-width:min(100%,420px)}
.article table{width:100%;border-collapse:collapse;margin:0 0 20px;font-size:.94rem}
.article th,.article td{border:1px solid var(--line);padding:10px 13px;text-align:left}
.article th{background:var(--paper);font-family:var(--font-display);font-weight:600}
.article blockquote{border-left:3px solid var(--amber);padding:4px 0 4px 18px;margin:0 0 18px;color:var(--muted);font-style:italic}
.article .callout{background:var(--amber-soft);border:1px solid #C4E2FA;border-left:3px solid var(--amber);border-radius:var(--radius);padding:18px 20px;margin:0 0 20px}
.article .callout p{margin-bottom:0;color:#0B4C82}

/* --- предупреждение: то, что клиент должен прочитать до расчёта --- */
.warn-note{
  background:#FFF8E8;border:1px solid #F0DCA8;border-left:3px solid #C98A12;
  border-radius:var(--radius);padding:16px 20px;margin:18px 0 20px;
}
.warn-note b{
  display:block;font-family:var(--font-display);font-size:1.02rem;
  color:#6B4A05;margin-bottom:7px;
}
.warn-note p{margin:0 0 9px;color:#5C4207;font-size:.96rem;line-height:1.6}
.warn-note p:last-child{margin-bottom:0}
.warn-note a{color:#6B4A05;text-decoration:underline}

/* --- статья, у которой снизу каталог ---
   Текст и каталог должны читаться одной страницей, а не двумя склеенными.
   Карточка с тенью и скруглением этому мешала: она заканчивалась, и сразу
   под ней начиналось что-то другое. Здесь текст лежит на сплошном белом
   поле, которое без шва переходит в полосу фильтров — она тоже белая.

   Ширина колонки намеренно осталась прежней (.container-narrow): каталог
   ниже шире, и это правильно. Строка в полтораста знаков не читается, а
   именно столько получается, если растянуть текст на всю ширину каталога. */
.post-white{background:#fff}
.article-flat{
  background:none;box-shadow:none;border-radius:0;
  margin:0 auto;padding-top:clamp(18px,3vw,34px);padding-bottom:clamp(18px,3vw,34px);
}

/* --- фильтры подборки: показ, а не панель ---
   Полей ввода здесь нет намеренно (см. render_collection_filters):
   фильтры заданы статьёй и есть её смысл. Выглядит полоса как настоящая
   панель фильтров каталога — белая и липкая, — чтобы страница читалась
   единым целым. */
.filters-bar-static{position:static}
.applied-filters{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:14px 0}
.af-label{
  font-size:.74rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted-2);font-weight:600;margin-right:2px;
}
.af{
  display:inline-flex;align-items:center;
  padding:7px 13px;border-radius:999px;
  background:var(--paper);border:1px solid var(--line);
  font-size:.86rem;font-weight:600;color:var(--text);
}
.af-open{
  margin-left:auto;display:inline-flex;align-items:center;gap:5px;
  font-size:.86rem;font-weight:600;color:var(--amber-deep);text-decoration:none;
  white-space:nowrap;
}
.af-open:hover{text-decoration:underline}
.af-open i{font-style:normal;transition:transform .15s}
.af-open:hover i{transform:translateX(3px)}
@media (max-width:720px){
  .af-open{margin-left:0;width:100%;padding-top:2px}
}

/* --- плашка-якорь «Смотреть подбор авто» ---
   Стоит внутри статьи, сразу после обложки. Ведёт к каталогу внизу
   страницы. Заметная, но не кнопка: это навигация по этой же странице, а
   не действие, и путать её с «Оставить заявку» нельзя. */
.collection-anchor{
  display:block;text-align:center;text-decoration:none;
  background:var(--amber-soft);border:1px solid #C4E2FA;
  border-radius:var(--radius);padding:15px 20px;margin:0 0 24px;
  transition:border-color .15s,background .15s;
}
.collection-anchor:hover{border-color:var(--amber);background:#E8F3FD}
.collection-anchor b{display:block;color:var(--amber-deep);font-size:1rem;font-weight:600}
.collection-anchor span{display:block;margin-top:4px;font-size:.85rem;color:var(--muted)}
/* .article a красит ссылки в тексте и подчёркивает их — плашке это не нужно */
.article .collection-anchor{text-decoration:none;color:inherit}

/* --- каталог под статьёй ---
   Своей верхней границы не нужно: её рисует полоса фильтров над ним
   (.filters-bar), как и в обычном каталоге. */
.post-catalog .section-sub{color:var(--muted);margin-top:6px;font-size:.98rem}

/* ------------------------------------------------------------ ФОРМА */
.lead-form{display:flex;flex-direction:column;gap:14px}
.lead-form .row{display:flex;flex-direction:column;gap:6px}
.lead-form label{font-size:.85rem;font-weight:600}
.lead-form input,.lead-form textarea,.lead-form select{padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;font-size:.95rem;width:100%}
.lead-form textarea{min-height:92px;resize:vertical}
.lead-form .consent{display:flex;gap:9px;align-items:flex-start;font-size:.8rem;color:var(--muted);font-weight:400}
.lead-form .consent input{width:auto;margin-top:3px;flex-shrink:0}
.lead-form .consent a{text-decoration:underline}
.form-status{font-size:.9rem;padding:11px 14px;border-radius:var(--radius-sm);display:none}
.form-status[data-state="ok"]{display:block;background:var(--green-soft);color:#0A6E38}
.form-status[data-state="err"]{display:block;background:#FDECEC;color:var(--red)}
.form-status[data-state="loading"]{display:block;background:var(--paper);color:var(--muted)}

.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:34px;align-items:start}
/* Как и у остальных сеток: без этого колонка растягивается под самое
   широкое содержимое (телефон моноширинным) и уезжает за экран. */
.contact-grid > *{min-width:0}
@media (max-width:840px){.contact-grid{grid-template-columns:1fr}}
.contact-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);padding:28px}
.section-alt .contact-card{background:var(--paper);border-color:transparent}
.contact-list{display:flex;flex-direction:column;gap:16px;margin-top:20px}
.contact-list li{display:flex;gap:13px;align-items:flex-start}
.contact-list .ico{width:38px;height:38px;border-radius:10px;background:var(--amber-soft);color:var(--amber-deep);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.contact-list b{display:block;font-size:.98rem}
.contact-list span{font-size:.87rem;color:var(--muted)}

/* ------------------------------------------------------------ МОДАЛКА */
.modal-backdrop{position:fixed;inset:0;background:rgba(10,21,35,.66);backdrop-filter:blur(3px);z-index:900;display:none;align-items:center;justify-content:center;padding:20px;overflow-y:auto}

/* Баннер согласия на cookie/аналитику (152-ФЗ-аудит, п.9). Прижат книзу,
   не перекрывает нижнюю панель на телефоне (.tabbar) — см. отступ снизу
   в медиа-запросе ниже. z-index выше .tabbar, но ниже .modal-backdrop:
   баннер не должен мешать открытой форме заявки, если она уже открыта. */
.cookie-banner{position:fixed;left:0;right:0;bottom:0;z-index:850;background:var(--ink);color:#fff;padding:16px var(--gut);display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px 20px;box-shadow:0 -6px 24px rgba(10,21,35,.24)}
/* Баг 03.09.2026: .cookie-banner{display:flex} — авторское правило, оно
   перебивает даже дефолтное [hidden]{display:none} браузера (авторские
   стили всегда сильнее UA-стилей, вне зависимости от специфичности).
   Без строки ниже баннер не прятался ни при первой загрузке, ни после
   "Принять"/"Отклонить" — el.hidden=true в site.js менялся, а на экране
   ничего не происходило. Селектор с [hidden] специфичнее голого класса
   (0,2,0 против 0,1,0) — поэтому побеждает и снова прячет. */
.cookie-banner[hidden]{display:none}
.cookie-banner__text{margin:0;font-size:.88rem;line-height:1.45;color:#D7E0EA;max-width:640px;flex:1 1 320px}
.cookie-banner__text a{color:#fff;text-decoration:underline}
.cookie-banner__actions{display:flex;gap:10px;flex:0 0 auto}
.cookie-banner .btn-outline{background:transparent;color:#fff;border-color:rgba(255,255,255,.4)}
@media (max-width:760px){
  .cookie-banner{padding-bottom:calc(16px + env(safe-area-inset-bottom));bottom:var(--tabbar-h,0)}
  .cookie-banner__actions{width:100%}
  .cookie-banner__actions .btn{flex:1 1 auto}
}
.modal-backdrop[data-open="true"]{display:flex}
.modal{background:#fff;border-radius:var(--radius-lg);width:100%;max-width:460px;padding:28px;box-shadow:var(--shadow-lg);position:relative;margin:auto}
.modal-wide{max-width:900px;padding:0;overflow:hidden}
.modal-close{position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:50%;border:none;background:var(--paper);cursor:pointer;font-size:1.1rem;color:var(--muted);display:flex;align-items:center;justify-content:center;z-index:2}
.modal-close:hover{background:var(--line)}
.modal h2{font-size:1.28rem;margin-bottom:6px}
.modal .modal-sub{color:var(--muted);font-size:.9rem;margin-bottom:18px}
.modal .lead-car{background:var(--paper);border-radius:var(--radius-sm);padding:11px 14px;font-size:.88rem;margin-bottom:16px;display:flex;justify-content:space-between;gap:12px;align-items:center}
.modal .lead-car b{font-family:var(--font-display)}

/* ------------------------------------------------------------ ПОДВАЛ */
.site-footer{background:var(--ink);color:rgba(255,255,255,.68);padding:52px 0 26px;font-size:.9rem}
.footer-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.2fr;gap:34px;padding-bottom:34px;border-bottom:1px solid rgba(255,255,255,.09)}
@media (max-width:900px){.footer-grid{grid-template-columns:1fr 1fr;gap:28px}}
/* На телефоне столбцы ссылок ставим по два: в одну колонку подвал
   вытягивался почти на полтора экрана. Первый блок (логотип и описание)
   остаётся на всю ширину — он текстовый. */
@media (max-width:560px){
  .footer-grid{grid-template-columns:1fr 1fr;gap:22px}
  .footer-about{grid-column:1 / -1}
}
@media (max-width:380px){.footer-grid{grid-template-columns:1fr}}
.site-footer h4{color:#fff;font-size:.94rem;margin-bottom:14px}
.site-footer a:hover{color:#fff}
.footer-links li{margin-bottom:9px}
.footer-about p{margin-top:14px;line-height:1.6;max-width:38ch}
.footer-contacts li{margin-bottom:11px}
.footer-contacts b{color:#fff;display:block;font-family:var(--font-mono);font-size:1.02rem}
.footer-social{display:flex;gap:9px;margin-top:16px}
.footer-social a{width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;color:#fff;transition:background .15s}
.footer-social a:hover{background:var(--amber-btn);color:#fff}
.footer-social svg{width:18px;height:18px}
.footer-bottom{padding-top:22px;display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;font-size:.8rem;color:rgba(255,255,255,.45)}
.footer-legal{max-width:70ch;line-height:1.55}

/* ------------------------------------------------------------ ПРОЧЕЕ */
.pagination{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:34px}
.pagination a,.pagination span{min-width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);border:1px solid var(--line);background:#fff;font-size:.92rem;padding:0 12px}
.pagination a:hover{border-color:var(--amber);color:var(--amber-deep)}
.pagination [aria-current="page"]{background:var(--ink);color:#fff;border-color:var(--ink);font-weight:600}

.empty-state{text-align:center;padding:56px 20px;background:#fff;border:1px dashed var(--line);border-radius:var(--radius-lg);color:var(--muted)}
.empty-state h3{margin-bottom:8px;color:var(--text)}
.skeleton{background:linear-gradient(90deg,#EEF1F4 25%,#F7F9FA 50%,#EEF1F4 75%);background-size:400% 100%;animation:shimmer 1.4s infinite;border-radius:var(--radius)}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
.skeleton-card{height:352px}

.cta-band{background:linear-gradient(135deg,var(--ink) 0%,var(--ink-3) 100%);color:#fff;border-radius:var(--radius-lg);padding:clamp(28px,4vw,46px);display:flex;justify-content:space-between;align-items:center;gap:28px;flex-wrap:wrap;position:relative;overflow:hidden}
.cta-band::after{content:"";position:absolute;width:340px;height:340px;border-radius:50%;background:radial-gradient(circle,rgba(46,155,240,.30),transparent 68%);right:-80px;top:-120px}
.cta-band > *{position:relative;z-index:1}
.cta-band h2{max-width:20ch}
.cta-band p{color:rgba(255,255,255,.72);margin-top:10px;max-width:46ch}
.cta-actions{display:flex;gap:11px;flex-wrap:wrap}

/* Плавающих кнопок связи здесь больше нет. Их работу делает нижняя
   таб-панель: «Подбор» открывает то же окно заявки, телефон и Telegram
   переехали в шторку «Ещё». Два кружка поверх карточек закрывали как раз
   цену и кнопку — то, ради чего человек и листает каталог. */
/* Панель с ценой внизу страницы авто: на телефоне блок с ценой уезжает под
   фото и характеристики, и человек может пролистать полстраницы, не увидев
   кнопку заказа. Стоит НАД таб-панелью — см. блок «ТАБ-ПАНЕЛЬ». */
/* backdrop-filter снят по той же причине, что у .tabbar выше (жалоба
   "подлагивает прокрутка на мобилке", 01.09.2026) — эта панель тоже
   fixed и видна на каждом кадре прокрутки страницы объявления. */
.mobile-buy{position:fixed;left:0;right:0;bottom:0;z-index:400;background:rgba(255,255,255,.97);border-top:1px solid var(--line);padding:10px 16px calc(10px + env(safe-area-inset-bottom));display:none;align-items:center;gap:12px;box-shadow:0 -4px 16px rgba(16,24,40,.10)}
.mobile-buy .mb-price{font-family:var(--font-display);font-weight:700;font-size:1.08rem;line-height:1.15}
.mobile-buy .mb-note{font-size:.68rem;color:var(--muted)}
.mobile-buy .mb-actions{margin-left:auto;display:flex;gap:8px;align-items:center}
@media (max-width:820px){
  .mobile-buy{display:flex}
  body.page-car{padding-bottom:74px}
}

/* ==========================================================================
   СВЕТЛАЯ ТЕМА
   Включается классом .theme-light на <body> (переключается в config.py →
   THEME = "light"). Тёмными остаются только подвал и акцентные блоки —
   они работают как якоря и не утомляют, потому что их мало.
   ========================================================================== */
.theme-light{background:#F6F8FB}

/* --- шапка --- */
.theme-light .site-header{background:#fff;backdrop-filter:none;border-bottom:1px solid var(--line);box-shadow:0 1px 3px rgba(16,24,40,.05)}
.theme-light .site-header .logo-name{color:var(--text)}
.theme-light .site-header .logo-sub{color:var(--muted-2)}
.theme-light .city-btn{background:#fff;border-color:var(--line);color:var(--text)}
.theme-light .city-btn:hover{background:var(--paper);border-color:#C9D2DC}
.theme-light .main-nav a{color:var(--muted)}
.theme-light .main-nav a:hover,.theme-light .main-nav a[aria-current="page"]{color:var(--text)}
.theme-light .header-phone{color:var(--text)}
.theme-light .nav-toggle{color:var(--text)}
@media (max-width:1140px){
  .theme-light .main-nav{background:#fff;border-bottom:1px solid var(--line)}
  .theme-light .main-nav a{border-bottom:1px solid var(--line-soft)}
}

/* --- герой --- */
.theme-light .hero,
.theme-light .hero-slim{
  background:
    radial-gradient(ellipse 820px 460px at 84% -18%, rgba(46,155,240,.14), transparent 62%),
    linear-gradient(180deg,#EAF2FA 0%, #F6F8FB 100%);
  color:var(--text);
  border-bottom:1px solid var(--line);
}
.theme-light .hero h1,.theme-light .hero-slim h1{color:var(--text)}
.theme-light .hero h1 .accent{color:var(--amber-deep)}
.theme-light .hero-sub{color:var(--muted)}
.theme-light .eyebrow{color:var(--amber-btn-hover)}
.theme-light .chip{border-color:#CBD9E6;color:var(--muted);background:rgba(255,255,255,.7)}
.theme-light .chip b{color:var(--text)}
/* «призрачная» кнопка на светлом фоне должна быть контурной тёмной */
.theme-light .hero .btn-ghost,.theme-light .hero-slim .btn-ghost{color:var(--text);border-color:#BCCBD9;background:#fff}
.theme-light .hero .btn-ghost:hover,.theme-light .hero-slim .btn-ghost:hover{border-color:var(--ink);background:var(--paper)}

/* --- карточка «Как проходит сделка» в герое --- */
.theme-light .hero .route-card{background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-md)}
.theme-light .hero .route-card h3{color:var(--text)}
.theme-light .hero .route-line{border-bottom-color:var(--line-soft)}
.theme-light .hero .route-line strong{color:var(--text)}
.theme-light .hero .route-line > div span{color:var(--muted)}

/* --- полоса с цифрами --- */
.theme-light .stats-band{background:#fff;color:var(--text);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.theme-light .stats-band .stat b{color:var(--amber-deep)}
.theme-light .stats-band .stat span{color:var(--muted)}

/* Чередование секций: на светлой теме «alt» делаем белым, а обычную —
   серой, иначе всё сливается в одно бесконечное белое полотно. */
.theme-light .section{background:transparent}
.theme-light .section-alt{background:#fff}
.theme-light .feature{background:#fff;border-color:var(--line)}
.theme-light .section-alt .feature{background:var(--paper);border-color:transparent}


/* --- светлая тема: подвал --- */
.theme-light .site-footer{background:#E9EFF6;color:var(--muted);border-top:1px solid #D7E1EC}
.theme-light .site-footer h4{color:var(--text)}
.theme-light .site-footer a:hover{color:var(--amber-deep)}
.theme-light .footer-grid{border-bottom-color:#D3DDE8}
.theme-light .footer-contacts b{color:var(--text)}
.theme-light .footer-social a{background:#fff;border:1px solid var(--line);color:var(--amber-deep)}
.theme-light .footer-social a:hover{background:var(--amber-btn);border-color:var(--amber-btn);color:#fff}
.theme-light .footer-bottom{color:#5F6E7D;border-top:1px solid #D7E1EC}
.theme-light .site-footer .logo-name{color:var(--text)}
.theme-light .site-footer .logo-sub{color:var(--muted-2)}

/* --- светлая тема: акцентная полоса «Не нашли нужную машину» ---
   Средний тон: заметно светлее тёмной версии, но глубже, чем шапка героя,
   иначе блок перестанет выделяться на белом фоне секции. */
.theme-light .cta-band{
  background:linear-gradient(135deg,#D3E6F8 0%, #E7F1FB 100%);
  color:var(--text);
  border:1px solid #C0D9EF;
}
.theme-light .cta-band::after{background:radial-gradient(circle,rgba(46,155,240,.30),transparent 68%)}
.theme-light .cta-band h2{color:var(--text)}
.theme-light .cta-band p{color:#3E5468}
.theme-light .cta-band .btn-ghost{color:var(--text);border-color:#A9C7E4;background:rgba(255,255,255,.75)}
.theme-light .cta-band .btn-ghost:hover{border-color:var(--amber-deep);background:#fff}

/* --- светлая тема: панель «Порядок платежей» --- */
.theme-light .route-card-panel{
  background:linear-gradient(160deg,#DEEBF9 0%, #EEF5FC 100%);
  border:1px solid #C4DBF1;
  color:var(--text);
}
.theme-light .route-card-panel h3{color:var(--text)}
.theme-light .route-card-panel .route-line{border-bottom-color:rgba(15,23,32,.10)}
.theme-light .route-card-panel .route-line strong{color:var(--text)}
.theme-light .route-card-panel .route-line > div span{color:#41586D}

/* --- светлая тема: тёмная кнопка («Открыть весь каталог») --- */
.theme-light .btn-dark{background:var(--amber-btn);color:#fff}
.theme-light .btn-dark:hover{background:var(--amber-btn-hover)}

/* ==========================================================================
   ГЛАВНАЯ СТРАНИЦА — «витринная» раскладка
   Меньше текста, больше карточек и плиток. Порядок блоков построен по
   принципу автомобильных маркетплейсов: сначала дать выбрать машину,
   и только в самом низу — текст для поисковиков.
   ========================================================================== */

/* --- первый экран --- */
/* Герой не обрезает содержимое: карточка быстрого подбора намеренно
   «свешивается» вниз, за границу первого экрана. */
.hero-fresh{padding:52px 0 0;overflow:visible}
.hero-fresh-grid{display:grid;grid-template-columns:1.12fr .88fr;gap:44px;align-items:center}
@media (max-width:980px){.hero-fresh-grid{grid-template-columns:1fr;gap:28px}}
.hero-fresh .hero-top{max-width:640px}
.hero-fresh h1{margin-top:12px;font-size:clamp(1.9rem,4vw,3.1rem)}
.hero-fresh .hero-sub{margin-top:14px;font-size:1.05rem;max-width:60ch}
.hero-fresh .hero-actions{margin-top:26px}

.hero-fresh + .section{padding-top:70px}

/* Карточка-пример автомобиля в первом экране */
.hero-feature{
  background:#fff;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg);
  display:block;transition:transform .2s;
}
.hero-feature:hover{transform:translateY(-3px)}
.hero-feature-photo{position:relative;aspect-ratio:16/10;background:#E8ECF1}
.hero-feature-photo img{width:100%;height:100%;object-fit:cover}
.hero-feature-tag{position:absolute;top:12px;left:12px;background:rgba(10,21,35,.82);color:#fff;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.04em;padding:5px 10px;border-radius:999px;backdrop-filter:blur(4px)}
.hero-feature-body{padding:16px 18px 18px;display:flex;align-items:flex-end;justify-content:space-between;gap:14px}
.hero-feature-body strong{display:block;font-family:var(--font-display);font-size:1.05rem;color:var(--text)}
.hero-feature-body span{font-size:.82rem;color:var(--muted)}
.hero-feature-price{font-family:var(--font-display);font-size:1.22rem;font-weight:700;color:var(--text);white-space:nowrap}
@media (max-width:980px){.hero-feature{max-width:460px}}

/* --- переключатели-табы --- */
.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:22px}
.tabs a,.tabs button{
  padding:9px 17px;border-radius:999px;border:1px solid var(--line);background:#fff;
  font-size:.9rem;font-weight:500;color:var(--muted);cursor:pointer;transition:all .15s;white-space:nowrap;
}
.tabs a:hover,.tabs button:hover{border-color:var(--amber);color:var(--amber-deep)}
.tabs [aria-selected="true"],.tabs .is-active{background:var(--ink);border-color:var(--ink);color:#fff}
.tabs [aria-selected="true"]:hover,.tabs .is-active:hover{color:#fff}

/* Заголовок секции в одну строку с ссылкой «смотреть все» */
.section-bar{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:20px;flex-wrap:wrap}
.section-bar h2{font-size:clamp(1.3rem,2.2vw,1.85rem)}
.section-bar .more{font-size:.92rem;font-weight:600;color:var(--amber-deep);white-space:nowrap}
.section-bar .more:hover{text-decoration:underline}

/* --- плитки марок --- */
.brand-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(172px,1fr));gap:10px}
.brand-tiles a{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:13px 16px;font-weight:600;font-size:.94rem;line-height:1.25;
  min-height:52px;transition:all .15s;
}
.brand-tiles a:hover{border-color:var(--amber);color:var(--amber-deep);box-shadow:var(--shadow-sm);transform:translateY(-1px)}
.brand-tiles a i{font-style:normal;font-size:.72rem;font-weight:500;color:var(--muted-2);white-space:nowrap}
.brand-tiles a[hidden]{display:none}
/* min-width:0 обязателен: без него длинное название («Volkswagen») не даёт
   себя сузить и наезжает на подпись страны справа. */
.brand-tiles .bt-name{min-width:0}
.brand-tiles a i{flex-shrink:0}

/* ---------- отметка «популярна в России» ----------
   Флажок нарисован тремя полосами через градиент, без картинки: он чёткий
   при любом масштабе и не даёт лишнего запроса.
   У белой полосы обязательна рамка — иначе на белой плитке верхняя треть
   флага просто исчезает, и триколор читается как двуцветный. */
/* Сам флаг — SVG (см. RF_FLAG_SVG в site_pages.py). Здесь только то, как
   он стоит в строке. Цвета и рамка живут в самой картинке: CSS-градиент с
   рамкой давал красную полоску сверху вместо белой. */
.rf-flag{display:block;flex-shrink:0;border-radius:2px}

/* Плитка популярной марки: слева триколорная полоса, название чуть темнее
   и жирнее. Отличие не только в цвете — у такой плитки есть флаг, который
   виден и в чёрно-белой печати, и тем, кто не различает цвета. */
/* Плитка популярной марки: триколорная полоса слева во всю высоту.
   Полосой, а не значком внутри плитки: значок съедал бы ширину, и длинные
   названия («Volkswagen», «Mercedes-Benz») наезжали бы на подпись страны.
   Полоса не стоит ни пикселя ширины и при этом видна первой.
   Отличие не только в цвете: у такой плитки название заметно жирнее —
   значит, она читается и в чёрно-белой печати, и без различения цветов. */
.brand-tiles a.is-top{
  position:relative;overflow:hidden;
  border-color:#D3DAE2;background:#fff;
  padding-left:20px;
}
.brand-tiles a.is-top .bt-name{font-weight:700}

/* Насыщенная полоса слева — она есть всегда. */
.brand-tiles a.is-top::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
  background:linear-gradient(180deg,#fff 0 33.33%,#0D47A1 33.33% 66.66%,#D32F2F 66.66% 100%);
  z-index:0;
}

/* ---------- заливка триколором при наведении ----------
   При наведении цвет «растекается» от полосы вправо на всю плитку.
   Заливка БЛЕДНАЯ, а не в полную силу, и это не компромисс, а условие:
   на насыщенном триколоре тёмный текст пропадает на синей и красной
   полосе, а белый — на белой. Любой из двух вариантов делает название
   марки нечитаемым на трети плитки. Бледные оттенки того же триколора
   узнаются мгновенно (тем более рядом с насыщенной полосой слева), а
   текст остаётся чёрным по светлому — 14:1 на всех трёх полосах.

   Ширина, а не opacity: рост ширины читается как движение слева направо,
   от полосы, — как будто она и разливается. Появление по прозрачности
   выглядело бы просто как подсветка. */
.brand-tiles a.is-top::after{
  content:"";position:absolute;left:5px;top:0;bottom:0;width:0;
  background:linear-gradient(180deg,
    #FFFFFF 0 33.33%, #D3E1F6 33.33% 66.66%, #F8D5D5 66.66% 100%);
  transition:width .34s cubic-bezier(.22,.61,.36,1);
  z-index:0;
}
.brand-tiles a.is-top:hover::after,
.brand-tiles a.is-top:focus-visible::after{width:calc(100% - 5px)}
/* Полоса при наведении чуть шире — «источник» заливки становится заметнее. */
.brand-tiles a.is-top::before{transition:width .34s cubic-bezier(.22,.61,.36,1)}
.brand-tiles a.is-top:hover::before,
.brand-tiles a.is-top:focus-visible::before{width:8px}

/* Текст и подпись страны — поверх заливки. */
.brand-tiles a.is-top .bt-name,
.brand-tiles a.is-top i{position:relative;z-index:1}
/* Наведение не перекрашивает название в янтарный, как у обычных плиток:
   на триколоре это был бы четвёртый цвет в одной маленькой плитке. */
.brand-tiles a.is-top:hover{border-color:#B9C6DA;color:var(--text)}
/* Подпись страны на залитой плитке темнеет: серый --muted-2 давал на
   синей и красной полосе 2.2:1 — нечитаемо. Этот оттенок даёт 5.2:1 на
   худшей из трёх полос. */
.brand-tiles a.is-top:hover i,
.brand-tiles a.is-top:focus-visible i{color:#4E5A69}

@media (prefers-reduced-motion:reduce){
  .brand-tiles a.is-top::after,
  .brand-tiles a.is-top::before{transition:none}
}

/* Вкладка «Топ в России» — с флажком, чтобы её нашли глазом раньше
   остальных: это самая полезная вкладка для того, кто впервые видит
   китайские названия и не знает, за что зацепиться. */
#brandTabs .tab-top{display:inline-flex;align-items:center;gap:7px}

.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* --- плитки по бюджету --- */
.price-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
@media (max-width:900px){.price-tiles{grid-template-columns:repeat(2,1fr)}}
.price-tile{
  position:relative;overflow:hidden;border-radius:var(--radius-lg);padding:24px 22px 22px;
  min-height:150px;display:flex;flex-direction:column;justify-content:flex-end;
  color:#fff;transition:transform .2s,box-shadow .2s;
}
.price-tile:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}
.price-tile b{font-family:var(--font-display);font-size:1.32rem;letter-spacing:-.02em;position:relative;z-index:1}
.price-tile span{font-size:.87rem;opacity:.82;margin-top:4px;position:relative;z-index:1}
.price-tile::after{
  content:"";position:absolute;right:-30px;top:-40px;width:170px;height:170px;border-radius:50%;
  background:rgba(255,255,255,.13);
}
.price-tile-1{background:linear-gradient(135deg,#1B84DA,#0F63B0)}
.price-tile-2{background:linear-gradient(135deg,#2E9BF0,#1478CE)}
.price-tile-3{background:linear-gradient(135deg,#1B2E48,#0A1523)}
.price-tile-4{background:linear-gradient(135deg,#5B4FD6,#3B32A5)}

/* Те же плитки, но с фотографией машины под цветной вуалью */
.price-tile.has-photo{background-size:cover;background-position:center;min-height:186px}
.price-tile-1.has-photo{background-image:linear-gradient(200deg,rgba(27,132,218,.55) 0%,rgba(20,110,190,.88) 55%,rgba(15,99,176,.96) 100%),var(--tile-photo)}
.price-tile-2.has-photo{background-image:linear-gradient(200deg,rgba(46,155,240,.52) 0%,rgba(32,135,222,.86) 55%,rgba(20,120,206,.96) 100%),var(--tile-photo)}
.price-tile-3.has-photo{background-image:linear-gradient(200deg,rgba(27,46,72,.52) 0%,rgba(18,33,54,.86) 55%,rgba(10,21,35,.96) 100%),var(--tile-photo)}
.price-tile-4.has-photo{background-image:linear-gradient(200deg,rgba(91,79,214,.52) 0%,rgba(74,63,190,.86) 55%,rgba(59,50,165,.96) 100%),var(--tile-photo)}
.price-tile.has-photo::after{display:none}

/* --- баннеры услуг --- */
.promo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
@media (max-width:900px){.promo-grid{grid-template-columns:1fr}}
.promo{
  text-align:left;font:inherit;color:inherit;cursor:pointer;
  position:relative;overflow:hidden;background:#fff;border:1px solid var(--line);
  border-radius:var(--radius-lg);padding:26px 24px 24px;display:flex;flex-direction:column;gap:10px;
  transition:box-shadow .2s,transform .2s;min-height:216px;
}
.promo:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.promo-art{position:absolute;right:-18px;bottom:-18px;width:132px;height:132px;opacity:.10;pointer-events:none}
.promo-art svg{width:100%;height:100%}
.promo-tag{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--amber-deep);font-weight:600}
.promo h3{font-size:1.14rem}
.promo p{color:var(--muted);font-size:.93rem;flex:1}
.promo .promo-link{font-weight:600;font-size:.92rem;color:var(--amber-deep);text-decoration:none}
.promo:hover .promo-link{text-decoration:underline}

/* --- компактный ряд преимуществ --- */
.perks{display:grid;grid-template-columns:repeat(6,1fr);gap:18px}
@media (max-width:1000px){.perks{grid-template-columns:repeat(3,1fr)}}
@media (max-width:620px){.perks{grid-template-columns:repeat(2,1fr)}}
.perk{text-align:center}
.perk-ico{width:48px;height:48px;margin:0 auto 12px;border-radius:14px;background:var(--amber-soft);color:var(--amber-deep);display:flex;align-items:center;justify-content:center}
.perk-ico svg{width:24px;height:24px}
.perk b{display:block;font-family:var(--font-display);font-size:.97rem;margin-bottom:4px}
.perk span{font-size:.84rem;color:var(--muted);line-height:1.45}

/* --- полоса с быстрым расчётом --- */
.calc-band{
  background:linear-gradient(135deg,var(--ink) 0%,var(--ink-3) 100%);
  border-radius:var(--radius-lg);padding:clamp(26px,4vw,42px);color:#fff;
  display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:center;position:relative;overflow:hidden;
}
.calc-band::after{content:"";position:absolute;width:330px;height:330px;border-radius:50%;background:radial-gradient(circle,rgba(46,155,240,.30),transparent 68%);right:-70px;top:-110px}
.calc-band > *{position:relative;z-index:1}
@media (max-width:840px){.calc-band{grid-template-columns:1fr;gap:22px}}
.calc-band h2{max-width:18ch}
.calc-band p{color:rgba(255,255,255,.75);margin-top:10px;max-width:44ch}
.calc-form{display:flex;gap:10px;flex-wrap:wrap}
.calc-form input{
  flex:1 1 190px;min-width:0;padding:14px 16px;border-radius:999px;border:1px solid rgba(255,255,255,.22);
  background:rgba(255,255,255,.10);color:#fff;font-size:.95rem;
}
.calc-form input::placeholder{color:rgba(255,255,255,.55)}
.calc-form input:focus{background:rgba(255,255,255,.16);outline-color:#fff}
.calc-form .btn{flex:0 0 auto}
.calc-note{font-size:.78rem;color:rgba(255,255,255,.55);margin-top:12px;flex-basis:100%}
.calc-note a{text-decoration:underline}

/* --- полоса «бизнес с территорией» (партнёрство/франшиза) ---
   Та же конструкция, что у .calc-band (тёмный градиент, размытый круг-акцент,
   двухколоночная сетка), но зеркально и в зелёном, а не в синем — чтобы две
   полосы на одной странице не читались как одна и та же с разным текстом.
   Справа вместо формы — три довода, потому что здесь принципиально нет
   формы обратной связи (см. решение от 31.08.2026): это узкая аудитория
   предпринимателей, для которых естественнее сразу написать лично, а не
   заполнять анкету и ждать звонка. */
.franchise-band{
  background:linear-gradient(135deg,var(--ink-3) 0%,var(--ink) 100%);
  border-radius:var(--radius-lg);padding:clamp(26px,4vw,42px);color:#fff;
  display:grid;grid-template-columns:1.15fr 1fr;gap:36px;align-items:center;position:relative;overflow:hidden;
}
.franchise-band::after{content:"";position:absolute;width:340px;height:340px;border-radius:50%;background:radial-gradient(circle,rgba(18,161,80,.32),transparent 68%);left:-90px;bottom:-130px}
.franchise-band > *{position:relative;z-index:1}
@media (max-width:840px){.franchise-band{grid-template-columns:1fr;gap:28px}}
.franchise-tag{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:#8FE0B4;font-weight:600;display:inline-block;margin-bottom:10px}
.franchise-band h2{max-width:16ch;margin-bottom:12px}
.franchise-lead{color:rgba(255,255,255,.75);max-width:46ch;margin-bottom:24px}
.franchise-actions{display:flex;flex-wrap:wrap;gap:10px}
.franchise-actions .btn{flex:0 0 auto}
.franchise-note{font-size:.78rem;color:rgba(255,255,255,.5);margin-top:14px;max-width:40ch}
.franchise-points{display:flex;flex-direction:column;gap:18px}
.franchise-point{display:flex;gap:14px;align-items:flex-start}
.franchise-point-ico{flex:0 0 auto;width:40px;height:40px;border-radius:12px;background:rgba(255,255,255,.10);display:flex;align-items:center;justify-content:center;font-size:1.1rem}
.franchise-point b{display:block;font-family:var(--font-display);font-size:.96rem;margin-bottom:3px}
.franchise-point span{font-size:.85rem;color:rgba(255,255,255,.68);line-height:1.45}
@media (max-width:840px){.franchise-points{flex-direction:row;flex-wrap:wrap;gap:20px 28px}
  .franchise-point{flex:1 1 240px}}

/* --- плитки городов --- */
.city-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.city-tiles a{background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);padding:13px 16px;display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:.93rem;font-weight:500;transition:all .15s}
.city-tiles a:hover{border-color:var(--amber);color:var(--amber-deep)}
.city-tiles a i{font-style:normal;font-size:.75rem;color:var(--muted-2)}

/* --- свёрнутый текст для поисковиков внизу --- */
.seo-fold{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden}
.seo-fold > summary{padding:20px 26px;cursor:pointer;font-family:var(--font-display);font-weight:600;font-size:1.05rem;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px}
.seo-fold > summary::-webkit-details-marker{display:none}
.seo-fold > summary::after{content:"Развернуть";font-family:var(--font-body);font-size:.85rem;font-weight:500;color:var(--amber-deep);white-space:nowrap}
.seo-fold[open] > summary::after{content:"Свернуть"}
.seo-fold .seo-text{border:none;border-radius:0;padding:0 26px 26px}

/* Карусель карточек на узких экранах — горизонтальная прокрутка вместо сетки */
@media (max-width:620px){
  .cars-grid.scroller{display:flex;overflow-x:auto;gap:14px;scroll-snap-type:x mandatory;padding-bottom:6px;margin:0 calc(-1 * var(--gut));padding-left:var(--gut);padding-right:var(--gut)}
  .cars-grid.scroller .car-card{flex:0 0 78%;scroll-snap-align:start}
}

/* Плитки на белых секциях — светлая подложка вместо белой */
.section-alt .brand-tiles a,
.section-alt .city-tiles a{background:var(--paper);border-color:transparent}
.section-alt .brand-tiles a:hover,
.section-alt .city-tiles a:hover{background:#fff;border-color:var(--amber)}
/* Блок марок стоит на сером фоне (section-alt), и правило выше перекрывало
   триколорную полосу обычным фоном — оно идёт ниже по файлу при той же
   специфичности. Повторяем полосу с этим же префиксом, чтобы она выиграла. */
.section-alt .brand-tiles a.is-top{background:#fff;border-color:#D3DAE2}
.section-alt .brand-tiles a.is-top:hover{background:#fff;border-color:#B9C6DA}

/* Обещания на каждой карточке: гарантия и страхование груза в пути */
.car-guarantee{display:flex;flex-wrap:wrap;gap:6px}
/* Светло-фиолетовый — намеренно не зелёный и не синий: зелёный на сайте
   означает цену и выгоду, синий — действие. Отдельный цвет для «что мы
   гарантируем» не путается ни с тем, ни с другим.
   Контраст текста #4A2E96 на фоне #E9E0FC — 7.8:1, читается и на солнце,
   а сама плашка заметна на белой карточке. */
.car-guarantee .cg{
  display:inline-flex;align-items:center;gap:5px;
  background:#E9E0FC;color:#4A2E96;border-radius:999px;
  padding:3px 9px;font-size:.71rem;font-weight:600;white-space:nowrap;
}
.car-guarantee .cg svg{width:12px;height:12px;flex-shrink:0}

/* ==========================================================================
   ГЛАВНАЯ: два плаката в первом экране
   ========================================================================== */
.billboards{display:grid;grid-template-columns:1.42fr 1fr;gap:20px;align-items:stretch}
@media (max-width:980px){.billboards{grid-template-columns:1fr}}

.bb{
  position:relative;overflow:hidden;border-radius:var(--radius-lg);
  padding:clamp(26px,3.4vw,44px);display:flex;flex-direction:column;justify-content:center;
  min-height:330px;color:#fff;isolation:isolate;
}
.bb::after{
  content:"";position:absolute;inset:auto -60px -90px auto;width:380px;height:380px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.16),transparent 66%);z-index:-1;
}
.bb-main{background:linear-gradient(128deg,#0A1523 0%,#123B66 55%,#0F63B0 100%)}
.bb-side{background:linear-gradient(140deg,#1478CE 0%,#2E9BF0 100%)}

/* Плакаты с настоящим фото автомобиля из каталога.
   Фотография уходит под плотную цветную вуаль: она должна работать как
   фактура и сразу говорить «здесь продают машины», но не спорить с
   текстом. Если фото по какой-то причине нет — остаётся чистый градиент
   выше, и блок выглядит нормально. */
.bb-photo{background-size:cover;background-repeat:no-repeat}
/* Вуаль направленная: плотная там, где лежит текст, и почти прозрачная
   там, где должен читаться автомобиль. Иначе либо не видно машину, либо
   не читается заголовок. */
.bb-main.bb-photo{
  background-position:right center;
  background-image:
    linear-gradient(92deg,
      rgba(7,16,28,.975) 0%,
      rgba(8,20,36,.95) 38%,
      rgba(10,32,58,.66) 58%,
      rgba(12,48,86,.24) 80%,
      rgba(14,58,102,.12) 100%),
    var(--bb-photo);
}
.bb-side.bb-photo{
  background-position:center bottom;
  background-image:
    linear-gradient(178deg,
      rgba(13,92,166,.975) 0%,
      rgba(16,108,190,.93) 46%,
      rgba(30,140,225,.62) 78%,
      rgba(46,155,240,.34) 100%),
    var(--bb-photo);
}
/* Когда есть фото, декоративный знак в углу лишний — он спорит с картинкой */
.bb-photo .bb-art{display:none}
.bb-photo::after{background:radial-gradient(circle,rgba(255,255,255,.10),transparent 68%)}
.bb .eyebrow{color:rgba(255,255,255,.72)}
.bb h1,.bb h2{margin-top:12px;color:#fff}
/* Плакаты всегда тёмные — перебиваем правило светлой темы для героя,
   иначе заголовок станет тёмным на тёмном фоне. */
.theme-light .hero .bb h1,
.theme-light .hero .bb h2{color:#fff}
.theme-light .hero .bb p{color:rgba(255,255,255,.82)}
.bb-main h1{font-size:clamp(1.8rem,3.3vw,2.7rem);max-width:16ch}
.bb-side h2{font-size:clamp(1.25rem,1.85vw,1.6rem);max-width:19ch}
.bb p{margin-top:14px;color:rgba(255,255,255,.82);font-size:1rem;max-width:44ch}
.bb-side p{font-size:.95rem}
.bb-actions{display:flex;gap:11px;flex-wrap:wrap;margin-top:26px}
.bb-marks{display:flex;gap:9px;flex-wrap:wrap;margin-top:22px}
.bb-mark{
  display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,.13);
  border:1px solid rgba(255,255,255,.20);border-radius:999px;padding:7px 14px;
  font-size:.83rem;font-weight:500;
}
.bb-mark svg{width:15px;height:15px;flex-shrink:0}
/* Крупный полупрозрачный знак в углу плаката */
.bb-art{position:absolute;right:-26px;bottom:-26px;width:190px;height:190px;opacity:.13;z-index:-1}
.bb-art svg{width:100%;height:100%}

/* Единый блок-баннер (замена двух плакатов bb-main/bb-side, 02.09.2026) —
   одна постоянная фотография (hero-main.jpg, статика) вместо подбора из
   каталога, текст слева, короткая пометка про страхование справа. Градиент
   — тот же принцип, что был у bb-main: плотная вуаль там, где текст, почти
   прозрачная там, где должна читаться машина (на этом фото — правая часть
   кадра). max-width у заголовка/подводки держит текст в левой части блока,
   чтобы он не наезжал на пометку справа. */
.bb-hero{min-height:400px}
.bb-hero.bb-photo{
  background-position:right center;
  background-image:
    linear-gradient(92deg,
      rgba(7,16,28,.975) 0%,
      rgba(8,20,36,.95) 38%,
      rgba(10,32,58,.66) 58%,
      rgba(12,48,86,.24) 80%,
      rgba(14,58,102,.12) 100%),
    var(--bb-photo);
}
.bb-hero h1{font-size:clamp(1.9rem,3.4vw,2.8rem);max-width:20ch}
.bb-hero p{max-width:46ch}
/* Пометка про страхование — раньше была тонкой пилюлей-бейджем (тот же
   .bb-mark, что у старых значков «На гарантии»/«Доставка застрахована»):
   на фоне фотографии, а не сплошного градиента, тонкая рамка и слабая
   заливка терялись и выглядели как случайная затычка (отчёт пользователя
   02.09.2026 — «выглядит дёшево и на отшибе»). Теперь это отдельная
   карточка: круглая иконка на своей плашке + текст, плотный
   полупрозрачный фон с лёгким размытием (стекло), тень — чтобы держаться
   как самостоятельный элемент баннера, а не декоративная нашлёпка.
   Стоит в верхнем правом углу, над небом на фото (там ровнее фон под
   тёмную карточку, чем над самой машиной внизу). */
.bb-hero-badge{
  position:absolute;top:clamp(20px,3vw,32px);right:clamp(20px,3vw,32px);
  display:flex;align-items:center;gap:13px;max-width:230px;
  background:rgba(8,17,30,.58);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border:1px solid rgba(255,255,255,.18);
  border-radius:16px;padding:13px 18px 13px 13px;
  box-shadow:0 10px 30px rgba(0,0,0,.28);
}
.bb-hero-badge-icon{
  flex-shrink:0;width:40px;height:40px;border-radius:50%;
  background:rgba(255,255,255,.16);color:#fff;
  display:flex;align-items:center;justify-content:center;
}
.bb-hero-badge-icon svg{width:19px;height:19px}
.bb-hero-badge-text{font-size:.9rem;font-weight:600;line-height:1.38;color:#fff}
@media (max-width:760px){
  .bb-hero-badge{position:static;margin-top:22px;max-width:none;box-shadow:none}
}
/* Герой на телефоне — короче: не произвольная высота (min-height:400px
   тянула блок с текстом на весь экран, до каталога приходилось
   долистывать), а высота, посчитанная от ширины по пропорциям самой
   фотографии (hero-main.webp, 1619×972) — ровно как у обычного фото-баннера.
   Решение от 03.09.2026: чтобы текст уместился в такой невысокой полосе,
   подпись про страхование и вводный абзац на телефоне убраны — они не
   теряются, а просто больше не дублируются: то же самое человек читает
   строкой ниже, в разделе с каталогом. Остаются заголовок и кнопки —
   ровно то, что нужно, чтобы отсюда сразу перейти в подбор. */
@media (max-width:760px){
  /* Третий заход на эту же задачу (03.09.2026) — первые два не сработали,
     проверено вживую через Chrome (окно 356×740, как у Galaxy S8):
     1) aspect-ratio на обычном блоке — жёсткая высота; .bb{overflow:hidden}
        (общее правило для всех фото-плакатов) обрезает всё, что не влезло.
     2) Обёртку сделали flex-контейнером в надежде, что .bb-hero как
        flex-элемент получит автоматический content-based минимум высоты —
        но у flex-элемента С aspect-ratio браузер считает автоминимум
        иначе: он остаётся привязан к размеру, «унаследованному» от
        aspect-ratio, и контент всё равно обрезался. Проверено через
        getComputedStyle в реальном окне 356px: height оставался ровно
        356/1619*972≈213px, actions.bottom вылезал на ~8px ниже — и
        именно эти 8px обрезались.
     Настоящий фикс — ОТКАЗАТЬСЯ от aspect-ratio как источника высоты и
     использовать min-height, посчитанный по той же пропорции (100vw —
     блок теперь во всю ширину экрана, см. блок ниже). У обычного блочного
     min-height нет спецэффектов с flexbox: итоговая высота = max(высота
     от пропорции, реальная высота контента) — блок никогда не обрежет
     свой же текст, при этом на типичных экранах выглядит точно так же,
     как раньше (высота = ширина по пропорции фото). Обёртку обратно в
     display:flex переводить не нужно. */
  .bb-hero{aspect-ratio:auto;height:auto;min-height:calc(100vw * 972 / 1619);padding:clamp(18px,5vw,26px);justify-content:center}
  .bb-hero .eyebrow{font-size:.68rem}
  .bb-hero h1{font-size:clamp(1.3rem,5.4vw,1.7rem);line-height:1.16;max-width:100%}
  .bb-hero p{display:none}
  .bb-hero-badge{display:none}
  .bb-hero .bb-actions{margin-top:14px;gap:8px}
  .bb-hero .bb-actions .btn{padding:10px 16px;font-size:.85rem}
  /* На телефоне в героя главной оставляем только «Смотреть каталог» —
     решение пользователя 03.09.2026: второй кнопке («Подобрать под
     бюджет») и так есть куда вести — тот же сценарий доступен чуть ниже
     на странице (форма расчёта, полоска бюджетных категорий). Класс
     специфичный (.hero-budget-btn), а не общий .btn-ghost — чтобы это не
     задело точно такую же по разметке, но другую по смыслу кнопку в
     герое страницы /franshiza/ («Обсудить свой город»), которую убирать
     не просили. */
  .hero-budget-btn{display:none}
}

/* Герой на телефоне — во всю ширину экрана (решение от 03.09.2026, второй
   заход): без отступа от шапки сверху, без боковых полей контейнера и без
   скругления углов — фотография работает как настоящий полноэкранный фон,
   а не карточка с рамкой. Затрагивает только .hero-fresh (главная и герой
   страницы франшизы) — остальные .bb-плакаты (на других страницах) не
   меняются. */
@media (max-width:760px){
  .hero-fresh{padding-top:0}
  .hero-fresh .container{padding-left:0;padding-right:0}
  .hero-fresh .bb-hero{border-radius:0}

  /* Между героем и заголовком «Автомобили в каталоге» было 70px
     (.hero-fresh + .section{padding-top:70px}, рассчитано под просторный
     десктоп) — на телефоне это читалось как подозрительно большой разрыв.
     Решение 03.09.2026. */
  .hero-fresh + .section{padding-top:28px}
}

/* --- полоска быстрых кнопок --- */
.quick-keys{display:flex;gap:9px;flex-wrap:wrap}
.quick-keys a{
  display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);
  border-radius:999px;padding:10px 17px;font-size:.9rem;font-weight:600;color:var(--text);
  transition:all .15s;white-space:nowrap;
}
.quick-keys a:hover{border-color:var(--amber);color:var(--amber-deep);box-shadow:var(--shadow-sm);transform:translateY(-1px)}
.quick-keys a.is-hot{background:var(--amber-soft);border-color:#BEDDF8;color:var(--amber-deep)}
.section-alt .quick-keys a{background:var(--paper);border-color:transparent}
.section-alt .quick-keys a:hover{background:#fff;border-color:var(--amber)}
/* воздух между полоской кнопок и тем, что идёт следом (карточки авто) */
/* Раньше .cars-grid/.empty-state шли сразу за .quick-keys — потом их
   на главной обернули в .cars-scroll-wrap (лента машин на телефоне), и
   этот отступ (селектор смежных соседей, +) перестал попадать: реальный
   сосед — .cars-scroll-wrap, а не .cars-grid/.empty-state внутри него.
   На мобильном это было не видно (там своя раскладка ленты), а на
   десктопе отступ между чипсами и карточками пропал — баг найден
   03.09.2026 по отчёту пользователя. */
.quick-keys + .cars-scroll-wrap,
.quick-keys + .cars-grid,
.quick-keys + .empty-state{margin-top:26px}

.lead-line{font-size:1.06rem;color:var(--muted);max-width:56ch;margin-bottom:18px}
.lead-line b{color:var(--text);font-weight:600}

/* --- всплывающая подсказка про кредит и продлённую гарантию --- */
.popcard{
  position:fixed;left:20px;bottom:20px;z-index:420;width:min(370px,calc(100vw - 40px));
  background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);padding:20px 22px 18px;
  transform:translateY(24px);opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;
}
.popcard[data-open="true"]{transform:translateY(0);opacity:1;pointer-events:auto}
.popcard-close{position:absolute;top:10px;right:10px;width:28px;height:28px;border:none;border-radius:50%;background:var(--paper);color:var(--muted);cursor:pointer;font-size:.95rem;display:flex;align-items:center;justify-content:center}
.popcard-close:hover{background:var(--line)}
.popcard .tag{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--amber-deep);font-weight:600}
.popcard h3{font-size:1.06rem;margin:6px 0 8px}
.popcard p{font-size:.9rem;color:var(--muted);margin-bottom:14px}
.popcard .popcard-actions{display:flex;gap:9px;flex-wrap:wrap}
@media (max-width:820px){
  .popcard{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));width:auto;padding:18px}
  /* чтобы не перекрывать плавающие кнопки связи */
}


/* ==========================================================================
   ТАЧ-ЭКРАНЫ
   ==========================================================================
   Здесь собрано то, что нужно не из-за узкого экрана, а из-за того, что по
   сайту тыкают пальцем и держат телефон в руке — с вырезом сверху и
   жестовой полосой снизу. Ширина тут ни при чём: те же правила нужны
   планшету в 800 пикселей.

   Граница 820px взята не с потолка: на ней уже сворачиваются фильтры и
   появляются плавающие кнопки связи.
   ========================================================================== */
@media (max-width:820px){

  /* ---------- поля ввода: ровно 16 пикселей ----------
     Safari на iPhone сам увеличивает масштаб страницы, когда палец попадает
     в поле со шрифтом меньше 16px. Обратно он не уменьшает — так и
     оставляет страницу шире экрана.

     Так было: человек нажимал «Узнать о наличии», открывалось окно заявки,
     он тыкал в «Телефон» — страница прыгала, окно расползалось за края, а
     кнопку «Отправить» приходилось искать боковой прокруткой. На форме,
     ради которой сайт и существует.

     Именно 16px, а не 1rem. rem считается от размера шрифта в настройках
     браузера, и у человека, который сделал шрифт мельче, 1rem окажется
     меньше шестнадцати — то есть ровно тот случай, который мы чиним.

     Ниже перечислены ВСЕ поля ввода сайта: фильтры каталога, поиск марки,
     быстрый расчёт на главной и обе формы заявки. Появится новое поле —
     впишите его сюда же, иначе зум вернётся именно на нём.

     Запретить зум целиком (user-scalable=no в мета-теге viewport) нельзя:
     тогда человек не сможет разглядеть ни фотографию машины, ни мелкий
     текст в расчёте. Лечим причину, а не симптом. */
  .field select,
  .field input,
  .ac-input,
  .calc-form input,
  .lead-form input,
  .lead-form select,
  .lead-form textarea{font-size:16px}
  /* Кнопка «Модель» — не поле ввода, зума не вызывает. Но стоит в одном
     ряду с полями, и если её не поднять, она окажется заметно мельче
     соседей: ряд фильтров будет выглядеть неровным. */
  .model-filter-trigger{font-size:16px}

  /* ---------- нижний край экрана ----------
     На iPhone нижние ~34 пикселя занимает жестовая полоса «домой». Всё, что
     лежит там, оказывается наполовину под ней, и свайп вверх с этого места
     уводит из браузера вместо нажатия на кнопку.

     env(safe-area-inset-bottom) на телефонах без выреза и на Android равен
     нулю — отступ там остаётся прежним, ничего не разъезжается. Работает
     это только вместе с viewport-fit=cover в мета-теге viewport; он уже
     стоит, см. site_pages.page. */
  /* У .popcard отступ снизу правится там же, где задаётся её мобильный вид
     (см. выше по файлу) — иначе получилось бы два места с одним и тем же
     числом, и однажды они разъедутся. */
  /* Панель с ценой на странице авто свой отступ уже учитывает (см.
     .mobile-buy), а вот место под неё в конце страницы — нет. Подвал
     уезжал под панель ровно на высоту жестовой полосы. */
  body.page-car{padding-bottom:calc(74px + env(safe-area-inset-bottom))}

  /* ---------- размер под палец ----------
     Минимум по рекомендациям Apple — 44 пикселя, по Material — 48. Ниже
     сорока четырёх палец промахивается примерно через раз.

     Где кнопка маленькая по замыслу (крестики, звёздочка на фотографии),
     саму кнопку не раздуваем — расширяем невидимую область нажатия
     псевдоэлементом. Выглядит всё точно так же, а попадать становится
     легко. Псевдоэлемент absolute, поэтому во flex-раскладку кнопки он не
     попадает и ничего внутри не сдвигает. */
  .car-fav::after{content:"";position:absolute;inset:-6px}      /* 40 → 52 */
  .ac-clear::after{content:"";position:absolute;inset:-10px}    /* 24 → 44 */
  .popcard-close::after{content:"";position:absolute;inset:-8px}/* 28 → 44 */
  /* min-height, а не padding: у этих двух отступы переопределяются ниже, в
     блоке «ТЕЛЕФОН», и padding отсюда просто не дожил бы до телефона. */
  .city-btn{min-height:44px}
  .sort-opts a{display:flex;align-items:center;justify-content:center;min-height:44px}
  .footer-social a{width:44px;height:44px}
  .pagination a,.pagination span{min-width:44px;height:44px}
  /* Маленькая кнопка — это про плотность на большом экране, а не про
     то, что по ней реже нажимают. На телефоне именно .btn-sm стоит
     главной кнопкой в каждой карточке автомобиля («Узнать о
     наличии») и открывает фильтры. Ширину и шрифт не трогаем —
     только высоту. */
  .btn-sm{min-height:44px}
  .util-filter{min-height:44px}
  /* Быстрые кнопки под героем («До 3 млн», «Гибриды») и переключатель
     стран у плитки марок — были 42 и 37. */
  .quick-keys a{min-height:44px}
  .tabs a,.tabs button{min-height:44px}
  /* Текстовые ссылки. Высоту им не задаём — от этого поехала бы строка, в
     которой они стоят («Свежие поступления ——— Смотреть каталог →»).
     Растим невидимую область нажатия: на вид ничего не меняется. */
  .logo,.more{position:relative}
  .logo::after{content:"";position:absolute;inset:-8px -6px}
  .more::after{content:"";position:absolute;inset:-12px -8px}
  .modal-close{width:44px;height:44px}
  .gallery-box-close{width:44px;height:44px}
}

/* ==========================================================================
   ТЕЛЕФОН
   ==========================================================================
   Всё, что касается экранов до 560px, собрано здесь одним блоком — чтобы
   не искать мобильные правки по десятку медиазапросов в остальном файле.
   Правило простое: на телефоне человек листает большим пальцем и смотрит
   на экран 6 на 13 сантиметров. Значит — меньше воздуха, меньше слов,
   ничего лишнего в кадре и никаких горизонтальных «уездов».

   Границу берём 560px: это ширина, ниже которой две колонки чего угодно
   перестают читаться.
   ========================================================================== */
@media (max-width:560px){

  /* ---------- карточка автомобиля ----------
     Была почти на два экрана: фото 4:3, три строки подписей и две кнопки
     подряд. Теперь одна кнопка (вся карточка и так открывается по нажатию),
     фото пониже, подписи короче. Двадцать машин перестали быть двадцатью
     пятью экранами прокрутки. */
  .car-photo{aspect-ratio:16/10}
  .car-body{padding:13px 13px 15px;gap:8px}
  .car-title{font-size:1rem}
  .car-specs{gap:4px 12px;font-size:.82rem}
  .car-price{font-size:1.24rem}
  .car-price-row{padding-top:8px}
  .car-price-note{line-height:1.35}
  .car-actions{margin-top:10px}
  /* «Подробнее» убираем: по карточке и так можно нажать. Две одинаковые
     по весу кнопки подряд только заставляют выбирать на пустом месте. */
  .car-actions .btn-outline{display:none}
  .car-guarantee{gap:6px}
  .car-guarantee .cg{font-size:.75rem;padding:4px 9px}
  .cars-grid{gap:14px}

  /* Порядок показа на телефоне: подпись «Сортировка» съедает ширину,
     которой и так нет, а три пункта в ряд без неё помещаются. */
  /* На телефоне кнопка льготы встаёт над сортировкой во всю ширину:
     рядом они не помещаются, а перенос вправо выглядел бы как ошибка. */
  .catalog-bar{flex-direction:column;align-items:stretch;gap:10px;margin-bottom:14px}
  .catalog-bar-left{flex-direction:column;align-items:stretch;gap:10px}
  .export-filters{width:100%;justify-content:center}
  .util-filter{width:100%;justify-content:center;padding:11px 14px}
  .sort-switch{width:100%}
  .sort-label{display:none}
  .sort-opts{width:100%}
  /* Три пункта в ряд на 360px помещаются впритык, поэтому шрифт и поля
     ужимаются. min-width:0 обязателен: без него flex-элемент не даёт себя
     сузить ниже длины текста, и панель вылезает за край экрана. */
  .sort-opts a{flex:1 1 0;min-width:0;text-align:center;padding:8px 4px;font-size:.82rem}
  /* Короткие названия вместо полных: «Дешевле» вместо «Сначала дешевле».
     Оба варианта есть в разметке, скрытый не читается диктором. */
  .sort-full{display:none}
  .sort-short{display:inline}

  /* ---------- полоска быстрых кнопок ----------
     Восемь кнопок в столбик занимали семь строк — больше экрана. Теперь
     это одна прокручиваемая лента, как в мобильных маркетплейсах. */
  .quick-keys{
    flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
    margin:0 calc(-1 * var(--gut));padding:2px var(--gut) 6px;scroll-padding-left:var(--gut);
  }
  .quick-keys::-webkit-scrollbar{display:none}
  .quick-keys a{flex:0 0 auto;padding:9px 15px;font-size:.87rem}

  /* ---------- заголовок блока «Автомобили в каталоге» на телефоне ----------
     По просьбе пользователя 03.09.2026: на мобилке вместо «Автомобили в
     каталоге» показываем «Покупка автомобиля без сложностей» — тот же
     приём, что у .sort-full/.sort-short: оба варианта в разметке, скрытый
     не читается диктором, десктоп и поисковик видят полный заголовок. */
  .h2-full{display:none}
  .h2-short{display:inline}

  /* ---------- вводный абзац под заголовком «Автомобили в каталоге» ----------
     На телефоне это четыре строки текста ДО того, как человек увидит хоть
     одну машину или кнопку бюджета — жалоба пользователя 03.09.2026:
     «большую часть экрана занимает текст». Заголовок и ссылка «Смотреть
     каталог →» уже сообщают, что это за блок, а сам абзац — уточняющее
     маркетинговое пояснение, не обязательное для навигации. Прячем его на
     телефоне, чтобы сразу после заголовка шли кнопки бюджета и карточки
     машин; в разметке текст остаётся (виден на десктопе, читается
     поисковиком). */
  .lead-line{display:none}

  /* ---------- плитки по бюджету ----------
     «До 2 млн ₽» переносилось на две строки, и знак рубля уезжал вниз
     отдельной строчкой. */
  .price-tiles{grid-template-columns:repeat(2,1fr);gap:10px}
  .price-tile{padding:16px 14px;min-height:120px}
  .price-tile b{font-size:1.1rem;white-space:nowrap}
  .price-tile span{font-size:.78rem;line-height:1.35}

  /* ---------- плашки-факты в шапке страниц ----------
     Три штуки столбиком съедали пол-экрана до того, как человек увидит
     хоть одну машину. */
  .hero-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 calc(-1 * var(--gut));padding:0 var(--gut) 4px}
  .hero-chips::-webkit-scrollbar{display:none}
  .hero-chips > *{flex:0 0 auto}

  /* ---------- характеристики автомобиля ----------
     Длинные значения ломались на три строки, потому что колонка названий
     забирала половину ширины. Ставим название сверху, значение снизу —
     каждому достаётся вся ширина экрана. */
  .spec-table tr{display:block;padding:9px 13px;border-bottom:1px solid var(--line-soft)}
  .spec-table tr:last-child{border-bottom:none}
  .spec-table th,.spec-table td{display:block;width:auto;padding:0;border:0}
  .spec-table th{font-size:.78rem;color:var(--muted);font-weight:500;margin-bottom:2px}
  .spec-table td{font-weight:600}

  /* ---------- таблицы в статьях ----------
     Таблица со ставками утильсбора не влезает ни в какой телефон.
     Пусть прокручивается вбок внутри себя, а не растягивает страницу. */
  .article table{display:block;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}
  .article th,.article td{padding:8px 11px;font-size:.86rem}

  /* ---------- длинные тексты для поисковиков ----------
     Эти блоки написаны для Яндекса и Google, а не для чтения с телефона.
     Прячем под кнопку: в разметке текст остаётся целиком, поисковик
     видит его как раньше, а человек — короткую выжимку. */
  /* Свёрнутое состояние — одна пометка .is-open, и для текста, и для марок.
     Внизу мягкое затухание, чтобы было видно: текст продолжается. */
  .seo-cut:not(.is-open){position:relative;max-height:230px;overflow:hidden}
  .seo-cut:not(.is-open)::after{
    content:"";position:absolute;left:0;right:0;bottom:0;height:96px;
    background:linear-gradient(to bottom,rgba(255,255,255,0),#fff 78%);
    pointer-events:none;
  }
  .seo-more{
    display:block;width:100%;margin-top:12px;padding:11px;
    background:none;border:1px solid var(--line);border-radius:999px;
    color:var(--amber-deep);font:inherit;font-size:.92rem;font-weight:600;cursor:pointer;
  }

  /* ---------- марки и перелинковка ----------
     Тридцать шесть плиток в две колонки — восемнадцать рядов подряд.
     Внизу каталога такой же ковёр из ссылок на марки, подборки и города:
     он нужен поисковику, но на телефоне это три с половиной тысячи
     пикселей прокрутки. Показываем начало, остальное по кнопке. */
  .brand-tiles{gap:8px}
  .brand-tiles.is-folded:not(.is-open) a:nth-child(n+13){display:none}
  /* После фильтра плиток может остаться меньше двенадцати — тогда
     сворачивать нечего (класс ставит site.js). */
  /* :not([hidden]) — иначе марки другой страны, отфильтрованные
     вкладкой (см. site.js), эта же строка возвращала на экран: она
     побеждала по специфичности правило .brand-tiles a[hidden], пока
     считала позицию по ВСЕМ плиткам в DOM, а не по видимым. Баг
     01.09.2026: на телефоне вкладка «Кыргызстан» показывала вместе со
     своими марками ещё Китай и Корею — ровно те плитки, что стояли на
     тринадцатой позиции и дальше среди всех марок в разметке. */
  .brand-tiles.few.is-folded:not(.is-open) a:not([hidden]):nth-child(n+13){display:flex}
  .brand-tiles a.is-top{padding-left:16px}
  .brand-tiles a{padding:11px 12px;font-size:.92rem}
  .linkgrid{gap:7px}
  .linkgrid a{padding:10px 13px;font-size:.87rem}
  .linkgrid.is-folded:not(.is-open) a:nth-child(n+9){display:none}

  /* ---------- цели нажатия и мелкий шрифт ----------
     Палец — не курсор: всё, по чему нажимают, должно быть не меньше
     примерно 40px, иначе человек промахивается. И ничего мельче 12px:
     на телефоне такое просто не читается. */
  .car-fav{width:40px;height:40px;font-size:1.12rem}
  .section-bar .more{padding:6px 0;font-size:.95rem}
  .badge{font-size:.75rem;padding:5px 10px}
  .eyebrow{font-size:.78rem}
  .car-price-note{font-size:.77rem}
  .field label{font-size:.78rem}
  .promo-tag,.popcard .tag,.linkgrid a i{font-size:.76rem}
  /* Подпись под логотипом в шапке — 10px, прочитать невозможно, а место
     занимает. В подвале она остаётся: там есть куда её положить. */
  .site-header .logo-sub{display:none}

  /* ---------- мелочи ---------- */
  .section{padding:34px 0}
  .section-bar{margin-bottom:14px;gap:8px}
  .seo-text h2{font-size:1.18rem}
  .seo-text h3{font-size:1.04rem}
  .warn-note{padding:14px 15px}
  .contact-card{padding:18px 16px}
  .seo-text{padding:20px 17px}
  /* bottom с запасом на жестовую полосу — иначе правило отсюда перебило
     бы safe-area из блока «ТАЧ-ЭКРАНЫ» выше: оно ниже по файлу. */
}

/* Очень узкие экраны (iPhone SE и подобные) */
@media (max-width:380px){
  .price-tiles{grid-template-columns:1fr}
  .car-price{font-size:1.16rem}
  .brand-tiles{grid-template-columns:1fr}
  /* Чуть плотнее — чтобы «На гарантии» и «Страховка доставки» встали
     в одну строку и на 360-пиксельных телефонах, а не в две. */
  .car-guarantee{gap:5px}
  .car-guarantee .cg{padding:4px 8px;font-size:.73rem;gap:4px}
}


/* ==========================================================================
   ИЗБРАННОЕ
   ========================================================================== */
/* Звёздочка в шапке появляется, только когда в избранном что-то есть —
   пустая иконка ничего не сообщает и просто занимает место. */
.fav-link{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:40px;height:40px;border-radius:50%;color:var(--text);flex-shrink:0;
  transition:background .15s,color .15s;
}
.fav-link[hidden]{display:none}   /* иначе display:inline-flex перебивает атрибут hidden */
.fav-link svg{width:21px;height:21px}
/* Под палец — 44px (см. блок «ТАЧ-ЭКРАНЫ» выше). Правило стоит здесь, а не
   там, потому что сам .fav-link описан ниже по файлу и перебил бы его. */
@media (max-width:820px){.fav-link{width:44px;height:44px}}
.fav-link:hover{background:var(--paper);color:var(--amber-deep)}
.fav-count{
  position:absolute;top:1px;right:-1px;min-width:18px;height:18px;padding:0 5px;
  border-radius:999px;background:var(--amber-btn);color:#fff;
  font-size:.68rem;font-weight:700;line-height:18px;text-align:center;
}
.theme-light .site-header .fav-link{color:var(--text)}
.fav-note{
  margin-top:22px;font-size:.9rem;color:var(--muted);
  max-width:62ch;line-height:1.6;
}
/* Короткий отклик на нажатие звёздочки: без него непонятно, сработало или нет */
.car-fav.just-added{animation:favPop .34s ease-out}
@keyframes favPop{
  0%{transform:scale(1)}
  45%{transform:scale(1.42)}
  100%{transform:scale(1)}
}
@media (prefers-reduced-motion:reduce){.car-fav.just-added{animation:none}}


/* ==========================================================================
   ПРИЁМЫ ВОВЛЕЧЕНИЯ
   ==========================================================================
   Тонкая грань: анимация должна подсказывать, а не навязываться. Правила,
   которых держимся здесь:
     · пульсирует не всё подряд, а две-три кнопки, и по очереди
     · как только человек нажал хоть одну — пульсация выключается навсегда
       (см. site.js, ключ at_poked). Дальше она была бы просто мельтешением
     · при системной настройке «уменьшить движение» не включается вовсе
   ========================================================================== */
.quick-keys a.pulse{position:relative}
.quick-keys a.pulse::before{
  content:"";position:absolute;inset:-2px;border-radius:inherit;
  border:2px solid var(--amber);opacity:0;pointer-events:none;
  animation:keyPulse 3.3s var(--pulse-delay,0s) ease-out infinite;
}
@keyframes keyPulse{
  0%   {transform:scale(1);   opacity:.55}
  22%  {transform:scale(1.14); opacity:0}
  100% {transform:scale(1.14); opacity:0}
}
/* Человек уже нажимал — подсказка больше не нужна */
body.poked .quick-keys a.pulse::before{animation:none}

/* Плитки бюджета: приподнимаются под курсором и слегка подсвечиваются —
   становится видно, что это кнопки, а не картинки */
.price-tile{transition:transform .18s,box-shadow .18s}
.price-tile:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.price-tile:active{transform:translateY(-1px)}

/* То же для плиток марок и ссылок перелинковки */
.brand-tiles a:active,.linkgrid a:active{transform:scale(.985)}

@media (prefers-reduced-motion:reduce){
  .quick-keys a.pulse::before{animation:none}
  .price-tile:hover{transform:none}
}

/* Пометка о том, что расчёт не сегодняшний. Появляется, когда страницу
   открыли по старой ссылке и данные пришли из долговременного кэша. */
.stale-note{
  margin-top:12px;padding:11px 13px;border-radius:var(--radius-sm);
  background:#FFF8E8;border:1px solid #F0DCA8;
  color:#5C4207;font-size:.84rem;line-height:1.5;
}

/* ---------- СТАТЬЯ БЛОГА ----------
   Оглавление и вводный абзац появились вместе с переездом блога в базу. */
.article-lead{
  font-size:1.12rem;line-height:1.6;color:var(--muted);
  margin:0 0 22px;padding-bottom:20px;border-bottom:1px solid var(--line-soft);
}
.article-cover{
  width:100%;height:auto;border-radius:var(--radius);margin:0 0 26px;
  background:var(--paper);
}
/* Оглавление показывается только у длинных статей (от трёх разделов):
   у короткой заметки оно занимает экран и ничего не экономит. */
.toc{
  background:var(--paper);border:1px solid var(--line);
  border-radius:var(--radius);padding:16px 20px;margin:0 0 28px;
}
.toc b{display:block;font-size:.82rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted);margin-bottom:10px}
.toc ol{margin:0;padding-left:20px}
.toc li{margin-bottom:6px;font-size:.95rem}
.toc li:last-child{margin-bottom:0}
.toc a{color:var(--text);text-decoration:none}
.toc a:hover{color:var(--amber-deep);text-decoration:underline}
/* Плавная прокрутка к разделу и отступ под липкой шапкой: без него
   заголовок раздела уезжает под шапку и человек видит середину абзаца. */
.article :is(h2,h3)[id]{scroll-margin-top:90px}

/* Ловушка для роботов. Поле должно быть невидимым, но НЕ display:none:
   часть автозаполнителей пропускает скрытые через display поля, а такие —
   заполняет. Для читалок экрана поле закрыто через aria-hidden и tabindex,
   поэтому живой человек до него не доберётся никаким способом. */
.lead-form .hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ==========================================================================
   ГЛАВНАЯ: ГИБРИДЫ И ЭЛЕКТРОМОБИЛИ
   ==========================================================================
   Блок построен на контрасте с остальной главной: холодный градиент вместо
   белого. Он не кричит цветом — просто выделен фоном, потому что это сейчас
   самая ходовая тема, а не потому что мы что-то распродаём.

   Правая карточка с предупреждением про утильсбор стоит НЕ под лентой, а
   рядом с заголовком. Причина простая: под лентой её никто не увидит —
   человек уйдёт по карточке машины раньше. А предупреждение здесь стоит
   сотни тысяч рублей, и прочитать его лучше до выбора, а не после. */
.hybrid-section{
  background:linear-gradient(180deg,#F2F8FF 0%,#EAF3FC 100%);
  border-top:1px solid #DBE9F7;border-bottom:1px solid #DBE9F7;
}
.hybrid-head{display:grid;grid-template-columns:1.35fr .85fr;gap:26px;align-items:start;margin-bottom:22px}
.hybrid-head h2{font-size:clamp(1.5rem,2.6vw,2rem);margin:6px 0 10px}
.hybrid-head > div > p{color:var(--muted);line-height:1.65;max-width:62ch;margin:0}
.hybrid-head .eyebrow{display:inline-flex;align-items:center;gap:7px;color:var(--amber-deep)}
.hybrid-head .eyebrow svg{width:15px;height:15px}
.hybrid-note{
  background:#fff;border:1px solid #D5E5F5;border-left:3px solid var(--amber);
  border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow-sm);
}
.hybrid-note > b{display:block;font-family:var(--font-display);font-size:.98rem;margin-bottom:6px}
/* Внутри текста <b> остаётся обычным выделением в строке: без этого
   «30-минутной» вставало отдельной строкой и читалось как заголовок. */
.hybrid-note p b{display:inline;color:var(--ink)}
.hybrid-note p{font-size:.88rem;line-height:1.6;color:var(--muted);margin:0 0 10px}
.hybrid-note a{font-size:.88rem;font-weight:600;color:var(--amber-deep);text-decoration:none;white-space:nowrap}
.hybrid-note a:hover{text-decoration:underline}
.hybrid-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}

@media (max-width:900px){
  .hybrid-head{grid-template-columns:1fr;gap:18px}
  /* На телефоне предупреждение уезжает под текст, но всё равно остаётся
     ВЫШЕ ленты машин — порядок важнее места. */
  .hybrid-actions .btn{flex:1 1 auto;text-align:center}
}


/* ==========================================================================
   ПЛАШКА «САЙТ ОБНОВИЛСЯ»
   ==========================================================================
   Показывается, когда service worker скачал новую версию и ждёт разрешения
   её включить (см. showUpdateBar в site.js). Строит её скрипт, в разметке
   страниц её нет.

   Слой 450: выше плавающих кнопок связи и панели с ценой (400), но ниже
   окна заявки (900) — заявка всегда главнее любого объявления.
   ========================================================================== */
.sw-update{
  position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom));
  transform:translate(-50%,140%);
  z-index:450;display:flex;align-items:center;gap:12px;
  max-width:calc(100vw - 24px);
  padding:11px 12px 11px 20px;border-radius:999px;
  background:var(--ink);color:#fff;box-shadow:var(--shadow-lg);
  font-size:.92rem;
  opacity:0;transition:transform .32s cubic-bezier(.2,.7,.3,1),opacity .32s;
}
.sw-update[data-open="true"]{transform:translate(-50%,0);opacity:1}
.sw-update span{white-space:nowrap}
.sw-update .btn{flex-shrink:0}
.sw-update-close{
  width:32px;height:32px;flex-shrink:0;border:0;border-radius:50%;cursor:pointer;
  background:rgba(255,255,255,.10);color:rgba(255,255,255,.75);font-size:.85rem;
  display:flex;align-items:center;justify-content:center;
}
.sw-update-close:hover{background:rgba(255,255,255,.18);color:#fff}
@media (prefers-reduced-motion:reduce){
  .sw-update{transition:opacity .2s}
  .sw-update[data-open="true"]{transform:translate(-50%,0)}
}

/* .install-prompt — третий заход на эту же плашку (03.09.2026), по
   замечанию пользователя «не красиво» — фон/тень/анимация появления
   по-прежнему общие с .sw-update, но позиция и раскладка теперь свои:

   1) Не узкая "пилюля" по центру, а во всю ширину экрана с небольшими
      полями по бокам — left/right вместо left:50%+transform по X.
   2) Слева текст, справа — колонка из двух кнопок: закрыть сверху (визуально
      меньше — это не главное действие, но зона нажатия увеличена невидимым
      ::after, чтобы не промахивались), «Установить» снизу. justify-content:
      space-between в колонке разносит их к краям текста — сверху и снизу. */
.install-prompt{
  left:12px;right:12px;transform:translateY(140%);
  max-width:none;padding:16px 18px;border-radius:18px;
  align-items:stretch;text-align:left;
}
.install-prompt[data-open="true"]{transform:translateY(0)}
.install-prompt span{flex:1;min-width:0;white-space:normal;line-height:1.42}
.install-prompt span b{color:#fff}
.install-actions{
  display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;
  flex-shrink:0;
}
.install-actions .sw-update-close{
  width:24px;height:24px;font-size:.68rem;position:relative;
}
/* Невидимая зона нажатия шире самого кружка — тот же приём, что и для
   остальных мелких целей на телефоне (см. mobile_pwa.md, "тап-цели"). */
.install-actions .sw-update-close::after{content:"";position:absolute;inset:-12px}
/* На странице автомобиля внизу уже стоит панель с ценой — плашка встаёт
   над ней, а не поверх. 74px — её высота, см. body.page-car. */
@media (max-width:820px){
  body.page-car .sw-update{bottom:calc(86px + env(safe-area-inset-bottom))}
  .sw-update-close{width:44px;height:44px}
}


/* ==========================================================================
   ШТОРКИ СНИЗУ
   ==========================================================================
   Один механизм на три места: фильтры каталога, выбор города и меню «Ещё».
   Разметки у шторки своей нет — элемент с классом .sheet просто становится
   ею на телефоне, а на большом экране остаётся тем, чем был. Поэтому
   содержимое не дублируется, и скрипты, которые с ним работают, ничего не
   замечают (см. showSheet в site.js).

   Почему снизу, а не выпадашкой сверху: телефон держат одной рукой, до
   верха экрана большой палец не достаёт. Список из сорока марок, выехавший
   из-под пальца, листается тем же пальцем; тот же список, вывалившийся из
   шапки, требует перехватить телефон второй рукой.

   Слои: затемнение 690, шторка 700. Выше шапки (200), таб-панели (400) и
   плашки обновления (450), но НИЖЕ полноэкранного фото (800) и окна заявки
   (900) — заявка всегда главнее.
   ========================================================================== */
.sheet-veil{
  position:fixed;inset:0;z-index:690;background:rgba(8,15,25,.5);
  opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s;
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
}
.sheet-veil[data-open="true"]{opacity:1;visibility:visible}

@media (max-width:820px){
  .sheet{
    position:fixed;left:0;right:0;bottom:0;top:auto;z-index:700;
    display:flex;flex-direction:column;
    /* 88vh, а не 100: полоска страницы сверху остаётся видна, и по ней
       сразу понятно, что это не новая страница, а слой поверх. dvh — на
       случай, когда адресная строка браузера то прячется, то появляется:
       с vh шторка при этом прыгает. */
    max-height:88vh;max-height:88dvh;
    margin:0;padding:0;width:auto;min-width:0;
    background:#fff;border:0;border-radius:22px 22px 0 0;
    box-shadow:0 -12px 40px rgba(8,15,25,.28);
    transform:translateY(100%);visibility:hidden;
    transition:transform .32s cubic-bezier(.2,.7,.3,1),visibility .32s;
    overscroll-behavior:contain;
  }
  .sheet[data-sheet="open"]{transform:translateY(0);visibility:visible}

  /* Шапка шторки: полоска-«ручка», название и крестик. Не прокручивается
     вместе с содержимым — иначе, пролистав список городов, человек теряет
     кнопку закрытия и выходит только кнопкой «назад». */
  .sheet-head{
    flex-shrink:0;position:relative;padding:18px 16px 12px;
    border-bottom:1px solid var(--line-soft);
  }
  .sheet-head::before{
    content:"";position:absolute;top:7px;left:50%;transform:translateX(-50%);
    width:38px;height:4px;border-radius:2px;background:var(--line);
  }
  .sheet-head h2{font-size:1.12rem}
  .sheet-close{
    position:absolute;top:12px;right:12px;width:44px;height:44px;
    border:0;border-radius:50%;background:var(--paper);color:var(--muted);
    cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;
  }
  .sheet-close:hover{background:var(--line);color:var(--text)}

  /* Прокручивается только тело. overscroll-behavior не даёт «протащить»
     прокрутку на страницу под шторкой, когда список кончился. */
  .sheet-body{
    flex:1 1 auto;overflow-y:auto;overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;padding:0 16px;
  }
  /* Подвал шторки — кнопка «Показать». Липнет ко дну: при семи полях
     фильтров она иначе уезжает вниз, и человек её просто не находит. */
  .sheet-foot{
    flex-shrink:0;padding:12px 16px calc(12px + env(safe-area-inset-bottom));
    border-top:1px solid var(--line-soft);background:#fff;
    display:flex;gap:10px;
  }
  .sheet-foot .btn{flex:1 1 auto}
}
/* На большом экране всей этой машинерии нет: части шторки просто не
   существуют, а сам элемент остаётся выпадающим списком или строкой. */
@media (min-width:821px){
  .sheet-head,.sheet-foot{display:none}
}

@media (prefers-reduced-motion:reduce){
  .sheet,.sheet-veil{transition:visibility .2s,opacity .2s}
}


/* --- выбор города шторкой -------------------------------------------------
   Список городов на телефоне выезжает снизу. Строки крупные: город меняет
   цену доставки во всех карточках, промахнуться по нему обидно. */
@media (max-width:820px){
  /* Заголовок выпадашки на телефоне не нужен — он есть в шапке шторки. */
  .city-menu-title{display:none}
  .city-menu{
    max-height:70vh;max-height:70dvh;
    padding:0;box-shadow:0 -12px 40px rgba(8,15,25,.28);
  }
  .city-menu .sheet-body{padding-bottom:calc(12px + env(safe-area-inset-bottom))}
  .city-menu a{
    padding:14px 12px;min-height:52px;font-size:1rem;border-radius:12px;
  }
  .city-menu a span{font-size:.85rem}
}


/* ==========================================================================
   ПОЛОСКА ФИЛЬТРОВ НАД СЕТКОЙ (только телефон)
   ==========================================================================
   Кнопка «Фильтры» с числом применённых и сами фильтры чипсами. Липнет под
   шапкой, поэтому доступна на любой высоте прокрутки: раньше, долистав до
   пятнадцатой машины, человек возвращался наверх, чтобы сузить выдачу.

   Чипсы — ссылки, а не кнопки: крестик снимает ровно один фильтр, работает
   без скрипта, остаётся в истории браузера (кнопка «назад» возвращает
   снятый фильтр) и виден в адресной строке.
   ========================================================================== */
.filter-strip{display:none}

@media (max-width:820px){
  .filter-strip{
    display:block;position:sticky;top:var(--header-h);z-index:150;
    /* Липкая полоска не имеет права утащить страницу вбок ни при каких
       чипсах: длинные подписи вроде «1 500 000 — 3 000 000 ₽» бывают. */
    overflow-x:hidden;
    /* Фон почти непрозрачный (.97) — blur() под ним был едва заметен
       глазу, а по нагрузке это самое дорогое, что можно навесить на
       ПРИЛИПШИЙ элемент: браузер пересчитывает размытие фона на КАЖДЫЙ
       кадр прокрутки. На слабом телефоне это и есть "подлагивает
       прокрутка" (см. жалобу пользователя от 01.09.2026) — тот же приём
       ниже применён к .tabbar и .mobile-buy, у них ровно та же причина. */
    background:rgba(255,255,255,.97);
    border-bottom:1px solid var(--line);
  }
  /* padding:9px 0 (шорткат) обнулял ЛЕВЫЙ/ПРАВЫЙ отступ, унаследованный от
     .container (у .filter-strip-in оба класса сразу) — то же самое
     правило, но раздельными свойствами, чтобы боковой отступ .container
     не затирался. Это и была причина жалобы "фильтры прижаты к левому
     краю" (01.09.2026): кнопка «Фильтры» и лента чипсов стояли впритык
     к самому краю экрана на телефоне. */
  .filter-strip-in{display:flex;align-items:center;gap:10px;padding-top:9px;padding-bottom:9px;min-width:0}

  .filter-open{
    flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;
    min-height:44px;padding:0 16px;border-radius:999px;cursor:pointer;
    background:var(--ink);color:#fff;border:0;
    font-size:.92rem;font-weight:600;font-family:inherit;
  }
  .filter-open svg{width:18px;height:18px}
  .filter-count{
    display:inline-flex;align-items:center;justify-content:center;
    min-width:21px;height:21px;padding:0 6px;border-radius:999px;
    background:var(--amber);color:var(--ink);font-size:.78rem;font-weight:700;
    font-variant-numeric:tabular-nums;
  }

  /* Лента чипсов уезжает за правый край и листается пальцем — так же, как
     миниатюры в галерее. Прятать лишние под «ещё +2» нельзя: смысл полоски
     в том, чтобы ВИДЕТЬ, что выбрано.

     Отрицательных полей здесь намеренно нет. Сначала лента «вылезала» ими
     под самый край экрана, чтобы не выглядеть обрезанной, — и давала
     странице лишние 16 пикселей вбок. В обычном блоке такой приём работает,
     а внутри flex-строки отрицательное поле увеличивает сам блок, и он
     перестаёт помещаться. Страница ехала вбок, а вместе с ней — все шторки:
     у position:fixed опора становится шире экрана. */
  .fchips-wrap{position:relative;min-width:0;flex:1 1 auto;display:flex}
  /* Полупрозрачная маска у правого края — намёк "здесь можно листать
     дальше", когда лента чипсов не помещается целиком (аудит фильтров от
     01.09.2026, находка №5). pointer-events:none — палец должен долистать
     ленту, а не упереться в невидимую кнопку. Ширина/цвет подобраны так,
     чтобы не откусывать заметный кусок у последнего видимого чипа. */
  .fchips-wrap::after{
    content:"";position:absolute;top:0;right:0;bottom:0;width:28px;
    background:linear-gradient(to right, rgba(255,255,255,0), rgba(255,255,255,.94));
    pointer-events:none;
  }
  .fchips{
    display:flex;gap:7px;min-width:0;flex:1 1 auto;
    overflow-x:auto;overflow-y:hidden;scrollbar-width:none;
    scroll-snap-type:x proximity;
    padding-right:2px;
  }
  .fchips::-webkit-scrollbar{display:none}
  .fchip{
    flex:0 0 auto;scroll-snap-align:start;
    display:inline-flex;align-items:center;gap:7px;min-height:44px;
    padding:0 8px 0 14px;border-radius:999px;
    background:var(--amber-soft);border:1px solid #BEDDF8;color:var(--amber-deep);
    font-size:.88rem;font-weight:600;white-space:nowrap;
  }
  .fchip-x{
    display:inline-flex;align-items:center;justify-content:center;
    width:24px;height:24px;border-radius:50%;
    background:rgba(18,114,196,.14);font-size:.72rem;
  }
  .fchip:active{background:#D8EBFC}
  .fchip-reset{
    background:transparent;border-color:var(--line);color:var(--muted);
    padding:0 14px;font-weight:500;
  }
}

/* --- фильтры внутри шторки ------------------------------------------------
   Одна колонка вместо двух. Два поля по 160 пикселей на экране 360 — это
   «Цена от» и «до» шириной по 65 пикселей каждое; попасть пальцем в такое
   можно, набрать в нём число — уже нет. */
@media (max-width:820px){
  .filters-bar{background:#fff;border-bottom:0}
  .container.sheet-body{padding-left:16px;padding-right:16px;max-width:none}
  /* Форма внутри шторки видна всегда: прячет её сама шторка, а не CSS формы.
     Раньше тут был display:none с переключением через data-open. */
  .filters,.filters[data-open="true"]{display:grid;grid-template-columns:1fr;gap:16px;padding:16px 0}
  .field label{font-size:.8rem}
  /* Ряд «Показать» из формы на телефоне не нужен — кнопка живёт в подвале
     шторки, где липнет ко дну. */
  .filters .field:last-child{display:none}
  /* Нижний ряд с подписью «какие фильтры применены» тоже: то же самое
     теперь написано чипсами в полоске над сеткой, и написано всегда. */
  .filters-actions{display:none}
  /* Диапазоны — два поля в строку, каждое во всю доступную половину.
     flex:1 1 0/min-width:0 теперь в базовом правиле (см. выше) — здесь
     только увеличенный отступ между полями под палец. */
  .field .range{gap:10px}
  /* Список моделей и подсказки марок внутри шторки: у шторки своя
     прокрутка, и панель на 340px её переполняла. */
  .model-filter-panel{max-height:min(46vh,320px)}
  .ac-list{max-height:min(46vh,300px)}
}


/* ==========================================================================
   ТАБ-ПАНЕЛЬ ВНИЗУ (только телефон)
   ==========================================================================
   Каталог · Подбор · Избранное · Ещё. Заменила собой и плавающие кружки
   связи, и бургер в шапке: на телефоне вся навигация теперь внизу, под
   большим пальцем, а не в правом верхнем углу.

   Высота вынесена в переменную: от неё зависит место, которое страница
   оставляет себе снизу, и положение панели с ценой, плашки обновления и
   всплывашки про кредит. Разъедутся значения — что-нибудь одно перекроет
   другое.
   ========================================================================== */
:root{--tabbar-h:58px}

.tabbar{display:none}

@media (max-width:820px){
  .tabbar{
    display:grid;grid-template-columns:repeat(4,1fr);
    position:fixed;left:0;right:0;bottom:0;z-index:400;
    height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
    padding-bottom:env(safe-area-inset-bottom);
    /* Фон почти непрозрачный (.97) — blur() под постоянно видимой
       нижней панелью на КАЖДОМ мобильном экране был главным подозреваемым
       в жалобе "подлагивает прокрутка на мобилке" (01.09.2026): это
       fixed-элемент во весь экран по ширине, и на каждый кадр прокрутки
       браузер пересчитывал размытие того, что под ним проезжает. Убрано —
       на глаз почти не отличить, доскроллить страницу стало заметно легче. */
    background:rgba(255,255,255,.97);
    border-top:1px solid var(--line);
    box-shadow:0 -2px 14px rgba(16,24,40,.06);
  }
  .tab{
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    position:relative;min-width:0;padding:0 2px;
    border:0;background:none;cursor:pointer;font-family:inherit;
    color:var(--muted);font-size:.68rem;font-weight:600;line-height:1.1;
    -webkit-tap-highlight-color:transparent;
  }
  .tab svg{width:23px;height:23px;flex-shrink:0}
  .tab span{
    max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  .tab:active{color:var(--amber-deep)}
  /* Текущий раздел — не только цветом: сверху появляется полоска. Цвет один
     на всех дальтоников не рассчитан, а полоска видна всегда. */
  .tab[aria-current="page"]{color:var(--amber-deep)}
  .tab[aria-current="page"]::before{
    content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);
    width:34px;height:3px;border-radius:0 0 3px 3px;background:var(--amber-btn);
  }
  /* --- место под панель --------------------------------------------------
     Страница обязана оставить себе внизу столько же, сколько занимает
     панель, иначе последняя строка подвала оказывается под ней навсегда:
     докрутить дальше некуда. */
  body{padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom))}
  /* На странице авто внизу стоят ДВЕ полосы: панель с ценой поверх
     таб-панели. Значит и места нужно на обе. */
  .mobile-buy{bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
              padding-bottom:10px;z-index:405}
  body.page-car{padding-bottom:calc(var(--tabbar-h) + 64px + env(safe-area-inset-bottom))}
  /* Всплывашка про кредит и плашка обновления — над панелями, не под ними. */
  .popcard{bottom:calc(var(--tabbar-h) + 12px + env(safe-area-inset-bottom))}
  .sw-update{bottom:calc(var(--tabbar-h) + 12px + env(safe-area-inset-bottom))}
  body.page-car .popcard,
  body.page-car .sw-update{bottom:calc(var(--tabbar-h) + 76px + env(safe-area-inset-bottom))}

  /* --- бургера на телефоне больше нет ------------------------------------
     Его меню открывает пункт «Ещё» в таб-панели. Две кнопки для одного и
     того же меню только заставляют выбирать на пустом месте, а место в
     шапке дороже: там город и логотип. */
  .nav-toggle{display:none}
  /* Звёздочка избранного остаётся в шапке: в панели внизу четыре места, и
     все заняты разделами сайта. Место в шапке как раз освободилось — там
     больше нет бургера. Появляется она, только когда в списке что-то есть
     (см. syncFavs в site.js), так что пустой иконки там не будет.

     margin-left:auto раньше был только у .nav-toggle (см. блок 1140) — он
     и прижимал всё, что после логотипа и города, к правому краю. Тут
     бургер выключен, его отступ пропал вместе с ним, и звёздочка съезжала
     влево, встык к кнопке города, а не к правому краю шапки, где её и
     ищут глазами. Баг найден 03.09.2026 (жалоба «не могу найти
     избранное»). Переносим отступ на саму звёздочку. */
  .fav-link{margin-left:auto}
}

/* --- меню сайта шторкой ---------------------------------------------------
   То же самое #mainNav, что на большом экране стоит строкой в шапке. */
.nav-extra{display:none}
@media (max-width:820px){
  .main-nav{
    /* Правила «панель из-под шапки» (см. блок 1140) здесь отменяются:
       на телефоне это шторка снизу, и inset от них ей мешает. */
    inset:auto 0 0 0;padding:0;border-bottom:0;
    max-height:80vh;max-height:80dvh;
  }
  .main-nav .sheet-body{padding-bottom:calc(16px + env(safe-area-inset-bottom))}
  .main-nav ul{flex-direction:column;gap:0}
  .main-nav a{
    display:flex;align-items:center;min-height:54px;padding:0 4px;
    border-bottom:1px solid var(--line-soft);font-size:1.02rem;color:var(--text);
  }
  .main-nav a[aria-current="page"]{color:var(--amber-deep);font-weight:600}
  .nav-extra{display:flex;flex-direction:column;gap:10px;padding:18px 0 4px}
  .nav-extra-note{font-size:.85rem;color:var(--muted);text-align:center;margin-top:2px}
}


/* --- «Показать ещё» -------------------------------------------------------
   Кнопку показывает скрипт (см. site.js): без него она бы висела мёртвой,
   а номера страниц под ней работают всегда. */
.more-wrap{margin-top:22px;text-align:center}
.more-wrap[hidden]{display:none}
.more-note{margin-top:10px;font-size:.85rem;color:var(--muted)}
@media (max-width:820px){
  /* Цифры прячем только когда кнопка реально работает — класс на <body>
     ставит скрипт. Из разметки они никуда не деваются: их читает поисковик. */
  body.more-on .pagination{display:none}
}


/* --- приближение фотографии в полноэкранном просмотре ---------------------
   Щипок двумя пальцами, двойное касание, колесо с Ctrl. Масштаб и сдвиг
   ставит скрипт через transform (см. bindZoom в site.js).

   touch-action:none на подложке обязателен: без него браузер сам решает,
   что делать с двумя пальцами, и до наших обработчиков жест не доходит. */
.gbox-stage{
  position:absolute;inset:0;z-index:1;
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;touch-action:none;
}
.gbox-stage img{
  max-width:100%;max-height:100%;object-fit:contain;border-radius:6px;
  transform-origin:center center;
  will-change:transform;cursor:zoom-in;
  /* Без плавности: при щипке картинка обязана идти ровно за пальцами, а
     анимация превращает это в вязкое запаздывание. */
  transition:none;
  -webkit-user-select:none;user-select:none;-webkit-user-drag:none;
}
/* Пока приближено — стрелки и крестик мешают меньше, чем нужны: приглушаем,
   но не прячем, иначе выйти можно только кнопкой «назад». */
.gallery-box.is-zoomed .gallery-arrow{opacity:.35}
.gallery-box.is-zoomed .gallery-arrow:hover{opacity:1}

/* ==========================================================================
   СТРАНИЦА ФРАНШИЗЫ — появление при прокрутке, таймлайн, сравнение
   ========================================================================== */
/* .reveal — общая утилита «появления» карточек/секций при прокрутке.
   Сама пометка ничего не запускает: класс is-visible ставит IntersectionObserver
   в site.js, один раз на элемент (unobserve сразу после появления — далее
   элемент просто виден, повторно проигрывать анимацию не нужно). Без JS
   или если IntersectionObserver не поддерживается, site.js сразу ставит
   is-visible всем — контент не должен зависеть от анимации. */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .55s ease,transform .55s ease;transition-delay:calc(var(--i,0) * 70ms)}
.reveal.is-visible{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  .reveal{opacity:1;transform:none;transition:none}

/* .reveal-m — то же самое появление при прокрутке, но ТОЛЬКО на телефоне
   (решение 03.09.2026, блок «Автомобили в каталоге» на главной: пользователь
   попросил больше интерактива и вовлечения именно в мобильной версии — не
   трогая десктоп). На широких экранах элемент виден сразу, без анимации:
   там всё и так помещается в первый экран, всплытие там не нужно и просто
   отвлекает. */
.reveal-m{opacity:1;transform:none}
@media (max-width:820px){
  .reveal-m{opacity:0;transform:translateY(16px);transition:opacity .5s ease,transform .5s ease;transition-delay:calc(var(--i,0) * 70ms)}
  .reveal-m.is-visible{opacity:1;transform:none}
}
@media (prefers-reduced-motion: reduce){
  .reveal-m{transition:none}
}

/* Точки-индикатор под горизонтальной лентой машин на телефоне (.cars-grid
   .scroller) — свайп без подсказки не очевиден, а точки одновременно
   показывают «здесь можно листать» и дают отклик на само действие (какая
   карточка сейчас в фокусе). Строит и обновляет site.js; без JS блок
   пустой и просто не занимает места. */
.cars-scroll-wrap{position:relative}
.scroll-dots{display:none}
@media (max-width:620px){
  .scroll-dots{display:flex;justify-content:center;gap:6px;margin-top:14px}
  .scroll-dots span{width:6px;height:6px;border-radius:50%;background:var(--line);transition:background .2s ease,transform .2s ease;flex:0 0 auto}
  .scroll-dots span.is-active{background:var(--amber-deep);transform:scale(1.4)}
}
}

/* --- тёмная полоса с таймлайном шагов запуска (франшиза) --- */
.steps-band{
  background:linear-gradient(135deg,var(--ink) 0%,var(--ink-3) 100%);
  border-radius:var(--radius-lg);padding:clamp(28px,4vw,48px);color:#fff;
  position:relative;overflow:hidden;
}
.steps-band::after{content:"";position:absolute;width:360px;height:360px;border-radius:50%;
  background:radial-gradient(circle,rgba(18,161,80,.28),transparent 68%);right:-90px;bottom:-130px}
.steps-band>*{position:relative;z-index:1}
.steps-band .section-head h2{color:#fff}
.steps-band .section-head p{color:rgba(255,255,255,.68)}

.timeline{display:flex;flex-direction:column;margin-top:8px}
.timeline-step{display:flex;gap:18px;padding:16px 0;border-bottom:1px dashed rgba(255,255,255,.14)}
.timeline-step:last-child{border-bottom:none;padding-bottom:0}
.timeline-step:first-child{padding-top:0}
.timeline-num{
  width:36px;height:36px;border-radius:50%;flex-shrink:0;
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.28);color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-weight:700;font-size:1rem;
}
.timeline-step b{display:block;font-family:var(--font-display);font-size:1.02rem;margin-bottom:4px;color:#fff}
.timeline-step span{font-size:.9rem;color:rgba(255,255,255,.72);line-height:1.5}

/* --- «один в поле» vs «с Территорией» --- */
.compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
@media (max-width:760px){.compare-grid{grid-template-columns:1fr}}
.compare-card{border-radius:var(--radius-lg);padding:26px;border:1px solid var(--line)}
.compare-card.bad{background:var(--paper)}
.compare-card.good{
  background:linear-gradient(160deg,rgba(18,161,80,.07),rgba(18,161,80,.015));
  border-color:rgba(18,161,80,.35);
}
.compare-card h3{font-family:var(--font-display);font-size:1.08rem;margin-bottom:16px}
.compare-list{display:flex;flex-direction:column;gap:13px}
.compare-item{display:flex;gap:11px;align-items:flex-start;font-size:.92rem;line-height:1.5;color:var(--muted)}
.compare-item .ico{
  flex-shrink:0;width:21px;height:21px;border-radius:50%;margin-top:1px;
  display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;
}
.compare-card.bad .ico{background:rgba(220,38,38,.12);color:#DC2626}
.compare-card.good .ico{background:rgba(18,161,80,.16);color:#0F7A30}
.compare-card.good .compare-item{color:var(--text)}

/* --- мини-график «рынок, на который вы делаете ставку» (франшиза) --- */
.chart-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);padding:26px 28px}
.section-alt .chart-card{background:#fff}
.chart-row{margin-bottom:20px}
.chart-row:last-child{margin-bottom:0}
.chart-row-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;font-size:.92rem}
.chart-row-head b{font-family:var(--font-display);font-weight:600}
.chart-row-head span{font-family:var(--font-mono);color:var(--muted)}
.bar-track{height:14px;border-radius:999px;background:var(--paper);overflow:hidden}
.bar-fill{
  height:100%;border-radius:999px;width:0;display:block;
  transition:width 1.2s cubic-bezier(.22,.61,.36,1) .1s;
}
/* Ширина реальная — CSS-переменная --w в разметке; сама анимация от 0
   стартует, когда карточка (у неё тот же .reveal, что и на появлении
   секций) получает is-visible от IntersectionObserver в site.js. Без JS
   класс is-visible ставится сразу всем .reveal — столбик будет заполнен
   без анимации, но не пустым. */
.chart-card.is-visible .bar-fill{width:var(--w)}
.bar-fill.accent{background:linear-gradient(90deg,#0F7A30,#1FAE4C)}
.bar-fill.muted{background:linear-gradient(90deg,#8A93A3,#AEB6C2)}
.chart-source{margin-top:16px;font-size:.76rem;color:var(--muted-2);line-height:1.5}
.chart-source a{text-decoration:underline}
.big-stat{text-align:center;display:flex;flex-direction:column;justify-content:center;height:100%}
.big-stat-num{font-family:var(--font-display);font-weight:800;font-size:clamp(2.4rem,5vw,3.2rem);color:var(--amber-deep);line-height:1}
.big-stat p{margin-top:10px;font-size:.9rem;color:var(--muted);line-height:1.55}
.big-stat .chart-source{margin-top:14px}

/* ==========================================================================
   ФРАНШИЗА — новые компоненты после обновления по презентации (03.09.2026)
   ========================================================================== */
.grid-5{display:grid;grid-template-columns:repeat(5,1fr);gap:18px}
@media (max-width:980px){.grid-5{grid-template-columns:repeat(3,1fr)}}
@media (max-width:620px){.grid-5{grid-template-columns:repeat(2,1fr)}}
.grid-5 > *{min-width:0}

/* --- нумерованные карточки (модель, автокредит, конвейер, доход, модули) --- */
.num-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:22px}
.section-alt .num-card{background:#fff}
.num-badge{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:26px;padding:0 8px;border-radius:8px;background:var(--amber-soft);color:var(--amber-deep);font-family:var(--font-display);font-weight:700;font-size:.86rem;margin-bottom:12px}
.num-card h3{font-size:1rem;margin-bottom:6px}
.num-card p{font-size:.88rem;color:var(--muted);line-height:1.5;margin:0}

/* --- компактная сетка без карточек (гарантия сделки: 12 шагов) --- */
.mini-steps{display:grid;grid-template-columns:repeat(6,1fr);gap:22px 16px}
@media (max-width:980px){.mini-steps{grid-template-columns:repeat(3,1fr)}}
@media (max-width:560px){.mini-steps{grid-template-columns:repeat(2,1fr)}}
.mini-step{display:flex;flex-direction:column;gap:8px}
.mini-step-num{width:30px;height:30px;border-radius:50%;background:var(--amber-btn);color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:.86rem;flex-shrink:0}
.mini-step span{font-size:.86rem;color:var(--text);line-height:1.4}

/* --- гарантия сделки: 4 стадии по 3 шага, премиальный степпер вместо
   плоской сетки кружков (правка по фидбэку — старый вид «сыро, дёшево»,
   03.09.2026) --- */
.guarantee-flow{display:flex;align-items:stretch;gap:14px;flex-wrap:wrap}
.guarantee-stage{flex:1;min-width:220px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);padding:22px 22px 20px;box-shadow:var(--shadow-sm)}
.guarantee-stage-head{display:flex;align-items:center;gap:11px;margin-bottom:16px;padding-bottom:13px;border-bottom:1px solid var(--line-soft)}
.guarantee-stage-num{width:30px;height:30px;border-radius:50%;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:.82rem;flex-shrink:0}
.guarantee-stage-head h4{margin:0;font-family:var(--font-display);font-size:.92rem;line-height:1.3;color:var(--ink)}
.guarantee-stage-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.guarantee-stage-list li{display:flex;align-items:flex-start;gap:10px;font-size:.86rem;color:var(--text);line-height:1.45}
.guarantee-stage-list b{flex-shrink:0;width:22px;height:22px;margin-top:1px;border-radius:50%;background:var(--amber-soft);color:var(--amber-deep);display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:700;font-family:var(--font-display)}
.guarantee-arrow{display:flex;align-items:center;justify-content:center;color:var(--amber-deep);font-size:1.3rem;flex-shrink:0;padding:0 2px;opacity:.6}
@media (max-width:900px){.guarantee-flow{flex-direction:column}.guarantee-arrow{transform:rotate(90deg);padding:4px 0;align-self:center}}

/* --- горизонтальная схема логистики --- */
.flow-row{display:flex;align-items:stretch;gap:10px;flex-wrap:wrap}
.flow-step{flex:1;min-width:150px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px;text-align:center}
.flow-step.accent{background:var(--ink);border-color:var(--ink);color:#fff}
.flow-step b{display:block;font-family:var(--font-display);font-size:.94rem;margin-bottom:3px}
.flow-step span{font-size:.8rem;color:var(--muted)}
.flow-step.accent span{color:rgba(255,255,255,.68)}
.flow-arrow{display:flex;align-items:center;justify-content:center;color:var(--amber-deep);font-size:1.2rem;flex-shrink:0}
@media (max-width:760px){.flow-row{flex-direction:column}.flow-arrow{transform:rotate(90deg);padding:2px 0}}

/* --- таблица тарифов франшизы (Новичок/Офис/Центр) --- */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.pricing-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;min-width:640px}
.pricing-table th,.pricing-table td{text-align:left;padding:13px 16px;font-size:.9rem;border-bottom:1px solid var(--line-soft);white-space:nowrap}
.pricing-table thead th{background:var(--ink);color:#fff;font-weight:600;font-size:.82rem}
.pricing-table tbody tr:last-child td{border-bottom:none}
.pricing-table td:first-child{font-weight:700;font-family:var(--font-display)}
.pricing-table td.num{text-align:right;font-variant-numeric:tabular-nums}

/* --- USP-карточка (гарантия импорта) --- */
.usp-card{background:linear-gradient(160deg,rgba(46,155,240,.07),rgba(46,155,240,.015));border:1px solid rgba(46,155,240,.3);border-radius:var(--radius-lg);padding:clamp(22px,3vw,32px)}
.usp-card-head{display:flex;align-items:center;gap:16px;margin-bottom:16px}
.usp-card-icon{width:52px;height:52px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:var(--shadow-sm);color:var(--amber-deep)}
.usp-card-icon svg{width:26px;height:26px}
.usp-tag{display:inline-block;background:var(--amber-soft);color:var(--amber-deep);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:4px 10px;border-radius:999px}
.usp-card p{color:var(--text);line-height:1.6;margin:0 0 10px}
.usp-card-note{margin-top:14px;font-size:.86rem;color:var(--amber-deep);font-weight:600}

/* --- callout-плашка (Founding Franchise и подобное вне статьи блога —
   .article .callout уже занят под контекст блога, здесь общий вариант) --- */
.callout-box{background:var(--amber-soft);border:1px solid #C4E2FA;border-left:3px solid var(--amber);border-radius:var(--radius);padding:18px 22px}
.callout-box p{margin:0;color:#0B4C82;font-size:.92rem;line-height:1.6}
.callout-box p + p{margin-top:8px}
.callout-box b{color:#0B4C82}
.callout-box .callout-note{font-size:.8rem;color:#3C7CB0;opacity:.85}

/* --- тёмная панель с крупным числом (экономика франшизы) --- */
.dark-stat-panel{background:var(--ink);color:#fff;border-radius:var(--radius-lg);padding:26px 24px;display:flex;flex-direction:column;justify-content:center}
.dark-stat-panel .eyebrow{color:rgba(255,255,255,.6)}
.dark-stat-panel .big-num{font-family:var(--font-display);font-size:2.4rem;font-weight:700;margin:10px 0}
.dark-stat-panel p{color:rgba(255,255,255,.72);font-size:.88rem;line-height:1.55;margin:0}

/* --- территориальная модель (карта городов-партнёров) --- */
.territory-hero-row{background:var(--amber-btn);color:#fff;border-radius:var(--radius);padding:16px 20px;display:flex;align-items:baseline;gap:10px;margin-bottom:14px}
.territory-hero-row b{font-family:var(--font-display);font-size:1.05rem}
.territory-hero-row span{font-size:.85rem;opacity:.85}
.territory-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
@media (max-width:980px){.territory-grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:620px){.territory-grid{grid-template-columns:repeat(2,1fr)}}
.territory-item{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px}
.territory-item b{display:block;font-family:var(--font-display);font-size:.94rem;margin-bottom:2px}
.territory-item span{font-size:.8rem;color:var(--muted)}
/* Свободные регионы — идея с карты fresh auto (белые точки — своя сеть,
   оранжевые — франчайзи), только вместо геокарты — цвет карточек в сетке.
   Задача от 03.09.2026. */
.territory-legend{display:flex;gap:20px;flex-wrap:wrap;margin-bottom:14px;font-size:.85rem;color:var(--muted)}
.territory-legend span{display:inline-flex;align-items:center;gap:7px}
.territory-legend .dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
.territory-legend .dot-own{background:var(--muted-2)}
.territory-legend .dot-free{background:var(--amber-btn)}
.territory-free-title{font-family:var(--font-display);font-size:1rem;margin:28px 0 12px}
.territory-item.free{background:var(--amber-soft);border-color:#BEDDF8;text-decoration:none;transition:transform .15s,box-shadow .15s}
.territory-item.free:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}
.territory-item.free b{color:var(--amber-deep)}
.territory-item.free span{color:var(--amber-btn);font-weight:600}

/* --- чек-лист требований к партнёру (обязательно/желательно) — переиспользует
   .compare-grid/.compare-card, но это не «плохо/хорошо», а «нужно/приятно
   иметь», поэтому свои модификаторы вместо .bad/.good --- */
.compare-card.neutral{background:linear-gradient(160deg,rgba(46,155,240,.07),rgba(46,155,240,.015));border-color:rgba(46,155,240,.3)}
.compare-card.neutral .ico{background:rgba(46,155,240,.16);color:var(--amber-deep)}
.compare-card.neutral .compare-item{color:var(--text)}
.compare-card.optional .ico{background:var(--paper);color:var(--muted-2);font-weight:700}
