/* ПОСАДОЧНЫЕ /ceny В РЕДИЗАЙНЕ 10.2026 (WP-C, скил vinpasi-design). Грузится последним в
   `seo/base.html`: app.css → seo.css → design_base.css → board.css → этот файл. seo.css — файл
   main, его не трогаем: всё, что здесь, перекрывает его по месту.

   Два слоя.
   1. ОБЩИЙ, под `.seo` — для всей оболочки, в том числе /banki, /ganbajeba, /proverki, /taxi
      (пакет G): чернила вместо синего акцента старого сайта, заголовки без капса (грузинский
      капсом не набирается вовсе — typography.md), кнопки и плашки одной системы с главной.
      Сетку этот слой не трогает.
   2. РАСКЛАДКА, под `.lp` — только у шаблонов, которые сами назвали класс в блоке `main_class`
      (`lp-price` модель/полоса/год, `lp-agg` марка/город/кузов/топливо, `lp-gen` поколение,
      `lp-hub` каталог /ceny). Перестановка блоков только CSS-ом (grid + order): разметка,
      порядок в документе, тексты, ссылки и JSON-LD — как в main.

   Цвет и радиусы — токены design_base.css. Свои переменные заведены ниже на :root. */

:root {
  /* Ширина липкой панели ответа на десктопе и зазор до неё. */
  --lp-side: 340px;
  --lp-gap: 40px;
  /* Стекло — только у плавающей панели внизу телефона (design-system.md: Liquid Glass —
     слой управления, не содержимое). Без backdrop-filter остаётся почти непрозрачный лист. */
  --lp-glass: rgba(255, 255, 255, .9);
  --lp-glass-solid: rgba(255, 255, 255, .97);
  /* Штриховка «мало данных» на графике лет: общий --hatch (#e3e6eb/#f4f5f7) на серой дорожке
     панели не видна вовсе; здесь та же штриховка на тон темнее. */
  --lp-hatch: repeating-linear-gradient(135deg, var(--line-strong) 0 3px, var(--panel) 3px 6px);
  /* Значок помощника — Solar chat-round-dots-linear (из web/frontend/node_modules/@iconify-json/solar),
     маской: цвет берёт от текста кнопки. Разговор, а не «волшебная звезда» (anti-patterns.md). */
  /* Solar arrow-right-linear / arrow-down-linear — «выдача там»: к панели ответа справа на
     десктопе, к машинам ниже на телефоне (r6). */
  --lp-ico-right: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M4 12H20M14 18L20 12L14 6'/%3E%3C/svg%3E");
  --lp-ico-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M12 4L12 20M6 14L12 20L18 14'/%3E%3C/svg%3E");
  --lp-ico-chat: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='%23000' stroke-linecap='round' stroke-width='1.5'%3E%3Cpath d='M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 13.5997 2.37562 15.1116 3.04346 16.4525C3.22094 16.8088 3.28001 17.2161 3.17712 17.6006L2.58151 19.8267C2.32295 20.793 3.20701 21.677 4.17335 21.4185L6.39939 20.8229C6.78393 20.72 7.19121 20.7791 7.54753 20.9565C8.88837 21.6244 10.4003 22 12 22Z'/%3E%3Cpath stroke-linejoin='round' d='M8 12H8.009M11.991 12H12M15.991 12H16'/%3E%3C/g%3E%3C/svg%3E");
}

/* ================================================================ 1. ОБЩИЙ СЛОЙ (.seo) */

/* Заголовки. h1 — ответ на запрос, поэтому крупно, но не «стартап-герой» (anti-patterns.md):
   36px потолок на десктопе, 26 на телефоне. Грузинский длиннее — на ступень меньше. */
.seo h1 {
  font-size: clamp(26px, 1.4vw + 16px, 36px);
  line-height: 1.15;
  font-weight: 700;
  letter-spacing: -.02em;
  margin: 18px 0 12px;
  text-wrap: balance;
}
html[lang="ka"] .seo h1 { font-size: clamp(22px, 1.1vw + 14px, 30px); letter-spacing: 0; }
.seo h2 { font-size: 20px; line-height: 1.25; font-weight: 600; letter-spacing: -.012em; color: var(--ink); }
.seo .col-side h2 { font-size: 16px; }
html[lang="ka"] .seo h2 { letter-spacing: 0; }
.seo h3 { font-weight: 600; }

/* Капс снят везде: кикеры, подписи цифр, шапки таблиц. Капс-подписи «кричат» (RUBRIC K3), а
   грузинский text-transform не переносит вовсе. Вес и цвет держат иерархию вместо регистра. */
.seo .fg-kicker, .seo .fig-k, .seo .fig-kicker, .seo .seo-action-kicker,
.seo table.grid thead th, .seo .cuts table.cities th, .cuts table.cities th {
  text-transform: none;
  letter-spacing: 0;
}

/* Текст. Лид — ответ прозой, чернилами; вступление и оговорки — тише. */
.seo .lead { font-size: 17px; line-height: 1.55; color: var(--ink); }
.seo .why { font-size: 13.5px; line-height: 1.5; color: var(--ink-dim); }
.seo .intro p { font-size: 16px; line-height: 1.6; color: var(--ink-dim); }
.seo .outro p { font-size: 15px; line-height: 1.6; color: var(--ink-dim); }
.seo .stamp { font-size: 12.5px; color: var(--ink-faint); line-height: 1.5; }
.seo .muted { color: var(--ink-faint); }
.seo a.link { color: var(--ink); font-weight: 600; text-decoration: underline; text-decoration-color: var(--line-strong); text-underline-offset: 3px; }
.seo a.link:hover { text-decoration-color: var(--ink); }

/* Крошки — тихая строка навигации. */
.seo .crumbs { font-size: 13px; color: var(--ink-faint); margin: 16px 0 0; }
.seo .crumbs a { color: var(--ink-dim); }
.seo .crumbs b { color: var(--ink); font-weight: 600; }

/* Секции: тонкая линия сверху и ровный шаг 32/28 вместо 26-с-двойной-чертой. */
.seo .block { border-top: 1px solid var(--line); padding-top: 28px; margin-top: 32px; }

/* Кнопки — чернила, как «Открыть карточку» на доске. Синий #1a63c4/#14509f старого сайта
   уходит целиком: синий здесь был четвёртым цветом рядом с вердиктами карточки. */
.seo .btn, .seo a.button, .seo form.watch button {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 0 18px;
  border: 1px solid var(--ink); border-radius: var(--radius);
  background: var(--ink); color: #fff;
  font-size: 14.5px; font-weight: 600; line-height: 1.2; text-decoration: none;
  filter: none;
}
.seo .btn:hover, .seo a.button:hover, .seo form.watch button:hover { background: #000; color: #fff; text-decoration: none; filter: none; }
.seo .btn-wide { display: flex; width: 100%; }

/* Ступени ослабления (марка · модель · год) — пилюли-ссылки. Текущая — тёмная, без ссылки. */
.seo-relax a, .seo-relax span { height: 32px; padding: 0 12px; border-radius: 999px; font-size: 13.5px; font-weight: 500; }
.seo-relax a { color: var(--ink); border-color: var(--line-strong); background: var(--bg); }
.seo-relax a:hover { border-color: var(--ink); text-decoration: none; }
/* Текущая ступень — не ссылка и не кнопка: серая подложка, а не чернильная заливка (r1). */
.seo-relax span { color: var(--ink); background: var(--panel-2); border-color: var(--panel-2); font-weight: 600; }
@media (max-width: 1023px) { .seo-relax a, .seo-relax span { height: 44px; padding: 0 14px; font-size: 14px; } }

/* Таблицы: числа табличные, шапка тихая, строки по линии. */
.seo table.grid thead th { font-size: 12.5px; font-weight: 500; color: var(--ink-faint); }
.seo table.grid td a { color: var(--ink); font-weight: 500; }
/* Геометрия таблиц (числа вправо, строка 44px) — только на своих страницах: у таблиц /banki и
   /ganbajeba третья колонка бывает пояснением, а не числом, это решает пакет G. */
.seo.lp table.grid th, .seo.lp table.grid td { padding: 10px 12px 10px 0; border-bottom: 1px solid var(--line); font-variant-numeric: tabular-nums; }
.seo.lp table.grid tbody td:not(:first-child), .seo.lp table.grid thead th:not(:first-child) { text-align: right; }

/* Плитки детей (модели марки, варианты, соседние годы): полоса — форма, не украшение,
   поэтому тонкая и серая; число и медиана — табличные. */
.seo ul.tiles { gap: 0 32px; }
.seo ul.tiles a, .seo ul.tiles .flat { min-height: 44px; padding: 6px 0; border-bottom-color: var(--line); border-radius: 0; }
.seo ul.tiles a:hover { background: var(--panel); text-decoration: none; }
.seo ul.tiles a:focus-visible { outline: 2px solid var(--ink); }
.seo ul.tiles .t { font-weight: 500; text-decoration: underline; text-decoration-color: var(--ink-faint); text-underline-offset: 3px; }
.seo ul.tiles a:hover .t { text-decoration-color: var(--ink); }
.seo ul.tiles .c { color: var(--ink-dim); font-size: 13px; }
.seo ul.tiles .p { color: var(--ink); font-size: 13.5px; font-weight: 600; }
.seo ul.tiles .bar { height: 6px; border-radius: 3px; background: var(--panel-2); }
.seo ul.tiles .bar > span { background: var(--ink-faint); opacity: 1; border-radius: 3px; }

/* Чипы перелинковки внизу страницы. На телефоне цель касания 44px. */
.seo .chips a { min-height: 36px; padding: 0 12px; border-color: var(--line-strong); font-size: 13px; font-weight: 500; }
.seo .chips a:hover { background: var(--panel); border-color: var(--ink); text-decoration: none; }
@media (max-width: 1023px) { .seo .chips a { min-height: 44px; } }

/* Подпись блока машин. */
.seo .cars-block { border-top: 1px solid var(--line); }
.seo .block-head h2 { margin: 0 0 6px; }
.seo .block-note { font-size: 14px; line-height: 1.5; color: var(--ink-dim); }
.seo .cars-cta { margin-top: 16px; }
.seo .cars-count { font-size: 13px; color: var(--ink-faint); }

/* Полоса «сколько времени на площадке»: лист панели без второй рамки сверху. */
.seo .block.liq { background: var(--panel); border: 0; border-radius: var(--r); padding: 20px 22px; }
.seo .liq h2 { font-size: 17px; margin: 0 0 12px; }
.seo .liq .fig-k { font-size: 13px; font-weight: 500; color: var(--ink-dim); }
.seo .liq .fig-v { font-size: 26px; font-weight: 700; letter-spacing: -.02em; }
.seo .liq .fig-n { font-size: 12.5px; color: var(--ink-dim); }
.seo .liq-half + .liq-half, .seo .liq-src { border-color: var(--line-strong); }
/* Половина бывает одна (ушедших за 30 дней ноль): тогда она во всю ширину, а не пустая правая
   колонка в 360px внутри листа (замер r4, марка). */
.seo .liq-halves { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
.seo .liq-src { font-size: 12.5px; }

/* Панель «что делать дальше» (помощник): лист, не окно с градиентом и тенью. Кикер — тихая
   подпись, синий уходит. Звёздочка ✦ у кнопки — значок «ИИ» из anti-patterns.md (sparkle как
   стенография интеллекта); она aria-hidden и декоративна, поэтому скрыта, текст кнопки тот же. */
.seo .seo-action-panel { border: 1px solid var(--line); border-radius: var(--r); background: var(--panel); box-shadow: none; padding: 18px 20px; }
/* На посадочных /ceny (`.lp`) блок тише ответа: без листа и рамки, заголовок не крупнее
   строки. Его заголовок обещает выдачу, а кнопка в нём — помощник; главная кнопка страницы
   одна, «Смотреть N» (r1, UX P1). */
.seo.lp .seo-action-panel { background: none; border: 0; border-top: 1px solid var(--line); border-radius: 0; padding: 16px 0 0; }
.seo.lp .seo-action-panel h2 { font-size: 16px; font-weight: 600; color: var(--ink); margin: 0 0 2px; }
.seo .seo-action-kicker { color: var(--ink-faint); font-size: 12.5px; font-weight: 500; margin-bottom: 4px; }
.seo .seo-action-panel h2 { font-size: 17px; font-weight: 600; letter-spacing: -.01em; margin: 0 0 4px; }
.seo .seo-action-panel > p { font-size: 13.5px; color: var(--ink-dim); margin: 0; }
.seo .seo-action-ai {
  min-height: 44px; border: 1px solid var(--line-strong); border-radius: var(--radius);
  background: var(--bg); color: var(--ink); font-weight: 600; font-size: 14px;
}
.seo .seo-action-ai:hover { background: var(--bg); border-color: var(--ink); }
.seo .seo-action-ai > span[aria-hidden="true"] { display: none; }
/* r2: контурная кнопка помощника без значка выглядела как «На myauto.ge». */
.seo .seo-action-ai::before { content: ""; width: 18px; height: 18px; flex: none; background: currentColor; -webkit-mask: var(--lp-ico-chat) center / contain no-repeat; mask: var(--lp-ico-chat) center / contain no-repeat; }

/* Панель ответа на модели (кикер, число, полоса половины рынка, плитки, кнопка). */
.seo .figures { background: var(--bg); border: 1px solid var(--line); border-radius: var(--r); padding: 20px; }
.seo .fg-kicker { font-size: 13px; font-weight: 500; color: var(--ink-dim); }
.seo .fg-price { font-size: 44px; font-weight: 700; letter-spacing: -.03em; line-height: 1.02; margin: 4px 0 14px; }
.seo .fg-ends { font-size: 12.5px; color: var(--ink-dim); }
/* Вся полоса — это и есть половина рынка (p25…p75), метка — медиана. Пустая серая дорожка
   читалась как незаполненный прогресс (r1); залита чернилами на 18%. */
.seo .fg-bar { height: 8px; border-radius: 4px; background: color-mix(in srgb, var(--ink) 28%, var(--bg)); margin: 6px 0 8px; }
/* Риска медианы — узкая чернильная черта с белым зазором: капсула читалась как ползунок (r3). */
.seo .fg-bar i { width: 2px; height: 18px; top: -5px; margin-left: -1px; background: var(--ink); box-shadow: 0 0 0 2px var(--bg); border-radius: 1px; }
.seo .fg-half { font-size: 13px; color: var(--ink-dim); margin: 0 0 16px; }
.seo .fg-tiles { gap: 8px; margin-bottom: 16px; }
/* Плитки без заливки: серые коробки в рамке панели были «карточкой в карточке» (r1).
   Факты разделены линиями — так же, как на марке и в городе. */
.seo .fg-tiles { column-gap: 16px; row-gap: 0; }
.seo .fg-tile { background: none; border: 0; border-top: 1px solid var(--line); border-radius: 0; padding: 10px 0 12px; }
.seo .fg-tile b { font-size: 20px; font-weight: 700; letter-spacing: -.01em; }
.seo .fg-tile span { font-size: 12px; color: var(--ink-dim); }
.seo .figures .btn-wide { margin-top: 0; min-height: 48px; font-size: 15px; }
.seo .fg-doors { gap: 8px; margin-top: 8px; }
.seo .fg-doors a { min-height: 40px; display: inline-flex; align-items: center; justify-content: center; border-color: var(--line-strong); border-radius: var(--radius); color: var(--ink); font-weight: 500; }
.seo .fg-doors a:hover { border-color: var(--ink); text-decoration: none; }
.seo .fg-note { font-size: 12px; color: var(--ink-faint); }

/* Панель цифр на марке/городе/поколении (список «подпись — число — пояснение»). */
.seo .fig-k { font-size: 12.5px; font-weight: 500; color: var(--ink-dim); }
/* app.css красит `.fig span` в ink-dim 12px — число серело. Цвета названы явно. */
.seo .fig-v { font-size: 22px; font-weight: 700; letter-spacing: -.015em; color: var(--ink); line-height: 1.2; }
.seo .fig-n { font-size: 12.5px; color: var(--ink-dim); }
.seo .fig-lead .fig-v { font-size: 40px; letter-spacing: -.03em; }

/* Город как ссылка: синий ховер и тень уходят. */
.seo ul.seo-city-grid a, .seo ul.seo-city-grid .flat { border-color: var(--line); border-radius: var(--radius); min-height: 64px; }
.seo ul.seo-city-grid a:hover { border-color: var(--ink); background: var(--bg); box-shadow: none; text-decoration: none; }
.seo .seo-city-bar > span { background: var(--ink-faint); opacity: 1; }
.seo .seo-city-name { font-weight: 600; }
.seo .seo-city-head h2 { font-size: 20px; }

/* Разрезы (растаможка, пробег, город). board.css задаёт глобальное `.cut { 12.5px }` для
   строки скидки на карточке — здесь кегль разреза возвращается. Сетка `auto-fit`: разрезов
   бывает два (у модели без городов), и третья пустая колонка была дырой в 360px. */
.seo .cuts .cut-grid { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); border-color: var(--line); }
.seo .cuts .cut { font-size: 14px; border-color: var(--line); padding: 18px 20px; }
.seo .cuts .cut > h3 { font-size: 15px; }
.seo .cuts .cut p { font-size: 13.5px; }
.seo .cuts .br { height: 8px; border-radius: 4px; }
.seo .cuts .br i { border-radius: 4px; }
.seo .cuts .rg-bar { border-radius: 4px; }
@media (max-width: 900px) {
  /* Одна колонка: разрезы друг под другом через линию, без зазора внутри общей рамки. */
  .seo .cuts .cut-grid { gap: 0; }
  .seo .cuts .cut { border-right: 0; border-bottom: 1px solid var(--line); }
  .seo .cuts .cut:last-child { border-bottom: 0; }
}

/* Находки проверок и карточка VIN. Янтарь у полос — смысл «внимание», он остаётся. */
.seo .checks-wide .findings li { min-height: 40px; font-size: 13.5px; }
.seo .checks-wide .cw-side { border-color: var(--line); padding: 18px 20px; }
.seo .checks-wide .vin-bar { background: var(--hatch); border-radius: 4px; }
.seo .checks-wide .vin-bar i { border-radius: 4px; }

/* График цены по годам: полоса цены — серые чернила (было чёрное .82 — самый тяжёлый
   элемент страницы при второстепенной роли), полоса числа объявлений — тоньше и светлее. */
.seo .seo-year-row a, .seo .seo-year-row .flat { min-height: 40px; }
.seo .seo-year-row a:hover { background: var(--panel); text-decoration: none; }
.seo .seo-year-row a:focus-visible { outline: 2px solid var(--ink); }
.seo .seo-year-row .yr { color: var(--ink); font-weight: 500; }
.seo .seo-year-row .bar { height: 8px; border-radius: 4px; }
.seo .seo-year-row .bar > i { background: var(--ink-dim); opacity: 1; border-radius: 4px; }
.seo .seo-year-row .nbar > i { background: var(--ink-faint); opacity: .6; }
.seo .seo-year-row.is-thin .bar > i, .seo .seo-year-legend .hatch { background: var(--lp-hatch); }
.seo .seo-years-more { border-color: var(--line-strong); border-radius: var(--radius); }

/* app.css держит ГЛОБАЛЬНОЕ `.bar` — липкую полосу счёта подбора (sticky, min-height 40px,
   белый фон, линия снизу). Полосы графика лет и плиток детей носят то же имя и наследовали
   её целиком: в main это и были чёрные «кирпичи» высотой 40px. Здесь полоса снова полоса. */
.seo .seo-year-row .bar, .seo ul.tiles .bar {
  position: static; z-index: auto; display: block; min-height: 0; margin: 0; padding: 0;
  border: 0; background: var(--panel-2); flex-wrap: nowrap;
}

/* Кнопка «Проверить VIN» в карточке VIN: seo.css ставит ей display:block, и подпись
   прилипала к верху 44-пиксельной кнопки. */
.seo .checks-wide .cw-side .btn-wide { display: flex; }

/* Находки и карточка VIN в пропорции 3:2, а не «всё − 340px»: при узкой правой карточке её
   текст вырастал выше списка находок, и под списком оставалось ~270px пустого (замер r1). */
@media (min-width: 1100px) { .seo .checks-wide { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 40px; } }

/* Таблицы годов на марке/городе — три колонки, им не нужна минимальная ширина 34rem из
   seo.css (она для семиколоночных таблиц /banki): на телефоне таблица ехала вбок. */
.seo.lp .scroll-x > table.grid { min-width: 0; }

/* Свёрнутая просьба «следить» (follow-box): тихий лист, не синяя рамка с тенью. */
.seo .block.follow-box, .seo .follow-box { border: 1px solid var(--line); border-radius: var(--r); background: var(--panel); box-shadow: none; padding: 20px 22px; }
/* На телефоне кнопка внизу листа — та же, что в плавающей панели (адрес, подпись): дубль
   скрыт, две одинаковые «Смотреть N» стояли одна под другой (r1, r2). Абзац с ней — только
   обёртка кнопки, текст листа остаётся. */
@media (max-width: 640px) {
  /* Не на поколении: там у листа свой заголовок «Смотреть <поколение>», и без кнопки он
     остался бы призывом без действия. */
  .seo.lp-agg .follow-box p:has(> .btn) { display: none; }
  /* Без кнопки серый лист выглядел недоделанной кнопкой (r3): просто текст под линией. */
  .seo.lp-agg .follow-box { background: none; border: 0; border-top: 1px solid var(--line); border-radius: 0; padding: 20px 0 0; }
}
/* Полосой: фраза слева, кнопка справа, пояснение под фразой — короткий текст в широком листе
   не оставляет пустую правую половину. */
@media (min-width: 900px) {
  .seo.lp .follow-box { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 32px; align-items: center; }
  .seo.lp .follow-box > * { grid-column: 1; margin: 0; }
  .seo.lp .follow-box > p:has(> .btn) { grid-column: 2; grid-row: 1 / span 3; }
  /* Главная чернильная кнопка — в панели ответа; эта внизу — контуром (r2: две чернильные). */
  .seo.lp .follow-box .btn { background: var(--bg); color: var(--ink); border-color: var(--line-strong); }
  .seo.lp .follow-box .btn:hover { background: var(--bg); color: var(--ink); border-color: var(--ink); }
  .seo.lp .follow-box > h2 + .lead { margin-top: 6px; }
  .seo.lp .follow-box > .why { margin-top: 8px; }
}

/* Ссылки на машины по VIN — те же пилюли, что чипы. */
.seo .vin-links ul a:hover { text-decoration: none; }

/* ---------------------------------------------------------------- телефон: панель внизу
   Плавающая панель «Смотреть N объявлений» — единственная дверь в каталог на телефоне.
   Стекло слоя управления, чернильная главная кнопка, двери-контуры. */
@media (max-width: 640px) {
  .seo .seo-mobile-actions {
    left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom, 0px));
    padding: 8px; gap: 8px;
    border: 1px solid var(--line); border-radius: 16px;
    background: var(--lp-glass-solid);
    box-shadow: var(--shadow-pop);
  }
  @supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .seo .seo-mobile-actions { background: var(--lp-glass); -webkit-backdrop-filter: blur(18px) saturate(140%); backdrop-filter: blur(18px) saturate(140%); }
  }
  @media (prefers-reduced-transparency: reduce) {
    .seo .seo-mobile-actions { background: var(--lp-glass-solid); -webkit-backdrop-filter: none; backdrop-filter: none; }
  }
  .seo .seo-mobile-primary {
    display: flex; align-items: center; justify-content: center; min-height: 48px;
    border: 0; border-radius: 11px; background: var(--ink); color: #fff; font-size: 15px; font-weight: 600;
  }
  .seo .seo-mobile-secondary a {
    display: flex; align-items: center; justify-content: center; min-height: 44px;
    border: 1px solid var(--line-strong); border-radius: 11px; background: var(--bg); color: var(--ink); font-weight: 500;
  }
  /* Панель плавает над подвалом: последние строки подвала поднимаются из-под неё. */
  .seo:has(.seo-mobile-actions) ~ .foot-site { padding-bottom: 96px; }
}

/* ================================================================ 2. РАСКЛАДКА (.lp) */

/* Обёртки без смысла (`div.seo-hero`, `div.cols`, `div.col-main`) растворяются, их дети
   становятся ячейками одной сетки страницы. `display: contents` — только у голых div:
   aside, nav и section в Safari теряют с ним роль. `col-side` остаётся коробкой: в ней липкая
   панель, и ей нужна высота, вдоль которой липнуть. */
.seo.lp { display: grid; grid-template-columns: minmax(0, 1fr); row-gap: 0; align-items: start; }
.seo.lp > *, .seo.lp .seo-hero > *, .seo.lp .col-main > * { min-width: 0; }
.seo.lp .seo-hero, .seo.lp .cols, .seo.lp .col-main { display: contents; }
.seo.lp .col-side { position: static; min-width: 0; }
/* Пустые неявные строки сетки получили бы row-gap, поэтому шаг держат поля блоков. */
.seo.lp .seo-hero-copy { max-width: none; }
.seo.lp .seo-hero-copy > .lead, .seo.lp .seo-hero-copy > .why, .seo.lp .seo-hero-copy .intro p { max-width: 68ch; }
.seo.lp .seo-action-panel { margin: 24px 0 0; max-width: none; }
.seo.lp .figures { margin: 0; }
.seo.lp .col-main > .block:first-child { margin-top: 32px; }
/* Ссылка на свод проверок под каталогом марки — отдельной строкой, а не подписью к таблице. */
.seo.lp > p.why { margin-top: 24px; }

/* ---------------------------------------------------------------- телефон и планшет
   Порядок задачи (page-patterns.md, «сначала ответ»): заголовок → ступени → ПАНЕЛЬ ОТВЕТА →
   лид → «что дальше» (помощник, компактно) → машины → вступление → остальное как в документе.
   Панель ответа стояла после десяти карточек — на 390 это ~8 000px прокрутки до медианы.
   Помощник остаётся над машинами, как в main: на телефоне это его единственный вход (пузырь
   помощника скрыт, пока есть плавающая панель — `_assistant.html`), и в r1 обе персоны его
   не нашли под машинами. Чтобы машины не уехали вниз, под машины уходит вступление — проза,
   повторяющая числа панели ответа (решение r2, записано в PROGRESS). */
@media (max-width: 1099px) {
  .seo.lp .seo-hero-copy { display: contents; }
  .seo.lp > *, .seo.lp .seo-hero > *, .seo.lp .seo-hero-copy > *, .seo.lp .col-main > * { order: 30; }
  .seo.lp > .crumbs { order: 1; }
  .seo.lp .seo-hero-copy > h1 { order: 2; }
  .seo.lp .seo-hero-copy > .seo-relax { order: 3; }
  .seo.lp .col-side { order: 4; }
  /* Лид и оговорка повторяют числа панели ответа прозой («читаю одно и то же дважды», r2,
     обе персоны) — на телефоне они идут под машинами, вместе со вступлением. */
  .seo.lp .seo-hero-copy > .lead { order: 11; }
  .seo.lp .seo-hero-copy > .why { order: 11; }
  .seo.lp .seo-hero > .seo-action-panel { order: 8; }
  .seo.lp > .cars-block { order: 10; }
  .seo.lp .seo-hero-copy > .intro { order: 11; }
  .seo.lp > .vin-links { order: 12; }
  .seo.lp > .liq { order: 13; }
  .seo.lp .col-main > * { order: 14; }
  .seo.lp > .chips { order: 15; }
  /* На марке и городе каталог детей — работа страницы: идёт раньше полосы сроков. */
  .seo.lp-agg .col-main > *, .seo.lp-gen .col-main > * { order: 12; }
  .seo.lp-agg > .liq, .seo.lp-gen > .liq { order: 13; }
  /* Марка (каталог детей, машин нет): сначала модели, потом «что дальше» — список на первом
     экране. Город с машинами оставляет помощника над машинами. */
  .seo.lp-agg:has(.col-main > *):not(:has(> .cars-block)) .seo-hero > .seo-action-panel { order: 13; }
  /* Марка: каталог моделей сразу под панелью ответа, лид-повтор — под каталогом (r3, P1). */
  .seo.lp-agg:not(:has(> .cars-block)) .col-main > * { order: 9; }
  .seo.lp .seo-hero-copy > h1 { margin-bottom: 10px; }
  .seo.lp .col-side { margin: 4px 0 12px; }
  /* Лид стоит под машинами (или каталогом) — отдельной секцией через линию. */
  .seo.lp .seo-hero-copy > .lead { margin-top: 32px; padding-top: 24px; border-top: 1px solid var(--line); }
  .seo.lp .seo-hero-copy > .intro { margin: 28px 0 0; }
  /* Помощник на телефоне — компактный лист: подпись, заголовок, строка, кнопка. */
  .seo.lp .seo-action-panel { margin-top: 4px; padding: 12px 0 0; }
  .seo.lp .seo-action-panel > p { font-size: 13px; margin-bottom: 8px; }
  .seo.lp .seo-action-controls { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .seo.lp .figures { padding: 16px; }
  .seo.lp .fg-price { margin-bottom: 10px; }
  .seo.lp .fg-half { margin-bottom: 10px; }
  /* Подпись блока машин тише и мельче: 4 строки над первой машиной. */
  .seo.lp .block-note { font-size: 13px; color: var(--ink-faint); }
  /* Лид повторяет числа панели прозой: на телефоне он тише и мельче, машины ближе (r1). */
  .seo.lp .seo-hero-copy > .lead { font-size: 15px; line-height: 1.5; color: var(--ink-dim); }
  .seo.lp .seo-hero-copy > .why { font-size: 13px; }
  .seo.lp .seo-hero-copy .intro p { font-size: 15px; }
  .seo .fg-price { font-size: 40px; }
  /* Дубль: «Смотреть N объявлений» стоит в плавающей панели внизу (тот же адрес, та же
     подпись) — третья копия одной кнопки на экране не нужна. Ниже 641px панель есть всегда. */
  .seo.lp .figures .btn-wide { display: none; }
  .seo.lp .fg-tiles { margin-bottom: 0; }
  /* Сноска панели («Фильтр … уже собран, смотрите машины в каталоге. Обновлено …») на
     телефоне — дубль: первая фраза — та же строка `seo_action_copy` в блоке помощника двумя
     абзацами ниже, вторая — та же `p_updated` в штампе внизу страницы. Над машинами это
     служебный текст (r2, UX P1). Скрыта ниже 641px; в документе остаётся. */
  .seo.lp .fg-note { display: none; }
}
/* Планшет: панель ответа в две колонки — число и полоса слева, плитки справа. */
@media (min-width: 641px) and (max-width: 1099px) {
  .seo.lp-price .figures {
    display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 24px;
    grid-template-areas: "k t" "p t" "e t" "b t" "h t" "w w" "d d" "n n";
  }
  .seo.lp-price .fg-kicker { grid-area: k; }
  .seo.lp-price .fg-price { grid-area: p; }
  .seo.lp-price .fg-ends { grid-area: e; }
  .seo.lp-price .fg-bar { grid-area: b; }
  .seo.lp-price .fg-half { grid-area: h; }
  .seo.lp-price .fg-tiles { grid-area: t; align-self: start; }
  .seo.lp-price .figures .btn-wide { grid-area: w; }
  .seo.lp-price .fg-doors { grid-area: d; }
  .seo.lp-price .fg-note { grid-area: n; }
  .seo.lp-agg .figures, .seo.lp-gen .figures { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); column-gap: 20px; }
  .seo.lp-agg .figures .btn-wide, .seo.lp-gen .figures .btn-wide,
  .seo.lp-agg .fg-doors, .seo.lp-gen .fg-doors { grid-column: 1 / -1; }
}

/* ---------------------------------------------------------------- десктоп
   Две колонки: слева текст, машины, график и каталог; справа ЛИПКАЯ панель ответа от уровня
   заголовка до конца машин и графика. Ниже — широкие секции (разрезы, проверки, перелинковка)
   во всю ширину. Панель ответа на первом экране, а не после десяти карточек. */
@media (min-width: 1100px) {
  .seo.lp { grid-template-columns: minmax(0, 1fr) var(--lp-side); column-gap: var(--lp-gap); }
  .seo.lp > * { grid-column: 1 / -1; }
  .seo.lp .seo-hero > *, .seo.lp .col-main > *, .seo.lp > .cars-block,
  .seo.lp > .vin-links, .seo.lp > .liq { grid-column: 1; }
  /* Панель занимает вторую колонку от строки заголовка вниз на 18 строк — больше, чем
     бывает блоков в левой колонке; лишние строки пусты и нулевой высоты (row-gap 0). */
  .seo.lp .col-side { grid-column: 2; grid-row: 2 / span 18; align-self: stretch; padding-top: 22px; }
  .seo.lp .figures { position: sticky; top: calc(var(--h-top) + 20px); }
  /* «Что делать дальше» — строкой под вступлением: слова слева, кнопка справа. */
  .seo.lp .seo-action-panel { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 24px; align-items: center; padding: 16px 0 0; }
  .seo.lp .seo-action-panel > * { grid-column: 1; }
  .seo.lp .seo-action-controls { grid-column: 2; grid-row: 1 / span 3; min-width: 240px; }
  .seo.lp .cars-block { margin-top: 32px; }
  /* Текст героя — на всю левую колонку: при мере 68ch справа от него до панели стояла пустая
     полоса 220×416px (замер r1). Строка выходит ~85 знаков при 17px — в пределах чтения. */
  .seo.lp .seo-hero-copy > .lead, .seo.lp .seo-hero-copy > .why, .seo.lp .seo-hero-copy .intro p,
  .seo.lp .block-note { max-width: none; }
  /* Лид прозой повторяет панель ответа, стоящую рядом: тише, как строки под ним (r3). */
  .seo.lp-price .seo-hero-copy > .lead { font-size: 17px; color: var(--ink-dim); }
  /* Строка «что дальше» повторяла сноску панели ответа слово в слово (`seo_action_copy`) на
     одном экране — на десктопе копия в строке скрыта, сноска в панели остаётся (r3). */
  .seo.lp:has(.fg-note) .seo-action-panel > p { display: none; }
  /* Перелинковка по годам и городам (`nav.chips`) — в левую колонку сразу под график цены по
     годам: это тот же вопрос «сузить на год или город», и внизу страницы ряд из двух пилюль
     во всю ширину был пустой полосой. Порядок только визуальный (order), документ как был. */
  .seo.lp > .chips { order: 1; grid-column: 1; }
  .seo.lp-agg > .liq, .seo.lp-gen > .liq { order: 1; }
  .seo.lp-agg:has(.col-main > *):not(:has(> .cars-block)) .seo-hero > .seo-action-panel { order: 1; }
  /* Марка без машин — страница короткая, липкой колонке незачем тянуться: панель ответа рядом с
     заголовком и каталогом (строки 2–3), «что делать дальше» — под ней во второй колонке
     стопкой (r3, P1: справа под панелью пустело 400×330px). Полоса сроков остаётся слева. */
  .seo.lp-agg:not(:has(> .cars-block)) .col-side { grid-row: 2 / span 2; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-hero > .seo-action-panel {
    grid-column: 2; grid-row: 4 / span 2; display: block; margin-top: 24px; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel .seo-action-controls { margin-top: 12px; min-width: 0; }
  .seo.lp > .cuts, .seo.lp > .checks-wide, .seo.lp > .outro, .seo.lp > .stamp,
  .seo.lp > .follow-box, .seo.lp > .why { order: 2; }
}
@media (min-width: 1100px) and (max-width: 1279px) { :root { --lp-side: 300px; --lp-gap: 32px; } }

/* Марка/город: медиана (второй `.fig` в разметке) — главное число панели: первой, во всю
   ширину и крупно, как на странице модели (r1: «цена тут не главная»). Порядок — CSS. */
.seo.lp-agg .figures > .fig:nth-child(2) { order: -1; grid-column: 1 / -1; }
.seo.lp-agg .figures > .fig:nth-child(2) .fig-v { font-size: 44px; letter-spacing: -.03em; line-height: 1.05; }
@media (max-width: 640px) { .seo.lp-agg .figures > .fig:nth-child(2) .fig-v { font-size: 40px; } }
/* Медианы нет (у марки медиана в проде считается — 062_seo_page_kinds.sql, — пусто бывает на
   тонком срезе): «нет данных» тихой строкой, а не кеглем цены. Класс ставит шаблон. */
.seo .fig-v.is-empty, .seo.lp-agg .figures > .fig:nth-child(2) .fig-v.is-empty { font-size: 17px; font-weight: 500; letter-spacing: 0; color: var(--ink-faint); line-height: 1.4; }
/* Ряды фактов ровные: app.css даёт `.figures` выравнивание по центру, и в сетке ячейки
   разной высоты съезжали (r1, r2). Растягиваем — линии под фактами на одной высоте. */
.seo.lp-agg .figures, .seo.lp-gen .figures { align-items: stretch; }
/* Марка/город/поколение: панель — список чисел в две колонки, кнопка на всю ширину. */
.seo.lp-agg .figures, .seo.lp-gen .figures { padding: 16px 20px 20px; }
@media (min-width: 1100px) {
  .seo.lp-agg .figures, .seo.lp-gen .figures { display: grid; grid-template-columns: 1fr 1fr; column-gap: 16px; }
  .seo.lp-agg .figures .btn-wide, .seo.lp-gen .figures .btn-wide,
  .seo.lp-agg .fg-doors, .seo.lp-gen .fg-doors, .seo.lp-gen .fig-lead { grid-column: 1 / -1; }
}
.seo.lp .figures .fig { padding: 10px 0; border-bottom: 0; border-top: 1px solid var(--line); }
.seo.lp-agg .figures > .fig:nth-child(2), .seo.lp-gen .figures > .fig-lead { border-top: 0; padding-top: 0; }
.seo.lp .figures .btn-wide { margin-top: 16px; }
@media (max-width: 640px) {
  .seo.lp-agg .figures, .seo.lp-gen .figures { display: grid; grid-template-columns: 1fr 1fr; column-gap: 16px; }
  .seo.lp-gen .fig-lead { grid-column: 1 / -1; }
}

/* ---------------------------------------------------------------- каталог /ceny (lp-hub)
   Семьдесят строк одной таблицей на 1 200px — три узкие колонки чисел, разнесённые на
   полэкрана (66% мёртвой площади в main). На десктопе строки текут в три газетные колонки:
   таблица та же, ячейки те же, меняется только раскладка строк. */
.seo.lp-hub h1 { margin-top: 28px; }
.seo.lp-hub > .lead { font-size: 18px; font-weight: 500; max-width: 62ch; text-wrap: balance; }
.seo.lp-hub table.grid td:last-child, .seo.lp-hub table.grid th:last-child { padding-right: 0; }
.seo.lp-hub > .why { max-width: 72ch; margin-bottom: 20px; }
/* Шапка каталога в две колонки: заголовок и итог слева, оговорка о пороге справа снизу. */
@media (min-width: 900px) {
  .seo.lp-hub { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 48px; }
  .seo.lp-hub > * { grid-column: 1 / -1; }
  .seo.lp-hub > h1, .seo.lp-hub > .lead { grid-column: 1; }
  .seo.lp-hub > .why { grid-column: 2; grid-row: 1 / span 2; align-self: end; margin: 0 0 10px; }
}
.seo.lp-hub table.grid tbody tr:hover td { background: var(--panel); }
.seo.lp-hub table.grid td a { display: inline-flex; align-items: center; min-height: 24px; text-decoration: underline; text-decoration-color: var(--ink-faint); text-underline-offset: 3px; }
.seo.lp-hub table.grid td a:hover { text-decoration-color: var(--ink); }
/* Десктоп (r6): строки текут по рядам слева направо (Camry | Elantra | Jetta — рейтинг читается
   подряд, без прыжка под сгиб к верху следующей колонки, r5 Давид), шапка — над каждой
   колонкой: повторы `.hub-rep` из тех же строк шаблона (aria-hidden). Ширины дорожек шапки
   посчитаны так, чтобы группы совпали с колонками тела: тело — N колонок с зазором 56px,
   внутри строки 1fr · 88 · 84 с зазором 8; шапка — те же группы, разделённые дорожкой 40px. */
.seo.lp-hub table.grid th.hub-rep { display: none; }
@media (min-width: 900px) {
  .seo.lp-hub table.grid { display: block; margin-top: 8px; }
  .seo.lp-hub table.grid thead { display: block; }
  .seo.lp-hub table.grid thead tr { display: grid; column-gap: 8px; border-bottom: 1px solid var(--line-strong);
    grid-template-columns: minmax(0, 1fr) 88px 84px 40px minmax(0, 1fr) 88px 84px; }
  .seo.lp-hub table.grid thead th.hub-rep { display: block; }
  .seo.lp-hub table.grid thead th:nth-child(4) { grid-column: 5; }
  .seo.lp-hub table.grid thead th:nth-child(n+7) { display: none; }
  .seo.lp-hub table.grid tbody { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 56px; }
  /* Ширины колонок фиксированы для всех строк: при max-content стык имени и счёта гулял от
     строки к строке (двух- и трёхзначные счета, r1). */
  .seo.lp-hub table.grid tr { display: grid; grid-template-columns: minmax(0, 1fr) 88px 84px; column-gap: 8px; }
  .seo.lp-hub table.grid thead tr { grid-template-columns: minmax(0, 1fr) 88px 84px 40px minmax(0, 1fr) 88px 84px; }
  /* Линия строки — у строки, а не у ячеек: между ячейками зазор сетки, и линия рвалась. */
  .seo.lp-hub table.grid tbody tr { border-bottom: 1px solid var(--line); }
  .seo.lp-hub table.grid th, .seo.lp-hub table.grid td { padding: 9px 0; border-bottom: 0; }
  .seo.lp-hub table.grid th:nth-child(3n+1), .seo.lp-hub table.grid td:first-child { padding-left: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .seo.lp-hub table.grid th:nth-child(3n+2), .seo.lp-hub table.grid th:nth-child(3n) { text-align: right; }
  .seo.lp-hub table.grid thead th:nth-child(3n+1) { text-align: left; }
}
@media (min-width: 1200px) {
  .seo.lp-hub table.grid tbody { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .seo.lp-hub table.grid thead tr { grid-template-columns: minmax(0, 1fr) 88px 84px 40px minmax(0, 1fr) 88px 84px 40px minmax(0, 1fr) 88px 84px; }
  .seo.lp-hub table.grid thead th:nth-child(n+7) { display: block; }
  .seo.lp-hub table.grid thead th:nth-child(7) { grid-column: 9; }
}
@media (max-width: 899px) {
  /* Строка 40px: плотнее (r1, Давид), ссылка-имя растянута на высоту строки. */
  .seo.lp-hub table.grid td, .seo.lp-hub table.grid th { padding-top: 10px; padding-bottom: 10px; }
  .seo.lp-hub table.grid td a { min-height: 24px; }
  /* Оговорка о пороге — сноской под таблицей: на телефоне она отодвигала список на экран. */
  .seo.lp-hub > h1 { order: 1; }
  .seo.lp-hub > .lead { order: 2; }
  .seo.lp-hub > table.grid { order: 20; }
  .seo.lp-hub > .why { order: 40; margin-top: 16px; }
  /* Шапка колонок «Объявлений / Медиана» липнет под шапкой сайта при прокрутке 70 строк (r3). */
  .seo.lp-hub table.grid thead th { position: sticky; top: var(--h-top); z-index: 2; background: var(--bg); box-shadow: 0 1px 0 var(--line-strong); }
}

/* ---------------------------------------------------------------- карточка машины на посадочной
   Карточка общая с доской (board.css, «карточка v2»), здесь одна поправка раскладки. В колонке
   780px у нерастаможенной машины блок растаможки (~110px) стоял в узкой правой части, и под
   фото оставалось ~250px пустого листа. Блок растаможки уходит во всю ширину под фото и
   описание, кнопки — как были, справа внизу. Только при наличии блока (`:has`). */
@media (min-width: 700px) {
  /* r1 (Давид): «С растаможкой выйдет» уехало от цены. Блок растаможки встаёт в колонку цены
     под «N похожих машин», описание с проверками — в среднюю колонку. Карточка короче
     (~410 против ~470px), итог с растаможкой рядом с ценой, как в main. */
  /* Колонка цены фиксирована: `auto` брала ширину самой длинной строки пояснения растаможки
     и схлопывала описание. Фото 28% — в левой колонке 780px это 220px, описание ~280px. */
  .seo .card { grid-template-columns: clamp(200px, 28%, 260px) minmax(0, 1fr) 220px; }
  /* Плашка «на X% дешевле ожидаемой» по-грузински длиннее 220px: перенос вместо вылезания
     (сама плашка, слова и цвет — как есть). */
  html[lang="ka"] .seo .card .price > .delta.good, html[lang="ka"] .seo .card .price > .delta.dear,
  html[lang="ka"] .seo .card .price > .delta.bait { white-space: normal; max-width: 100%; text-align: right; }
  /* Фото — только рядом с названием, описанием и местом (строки 1–3); строка растаможки,
     полоса проверок и плашки идут под фото, слева от колонки цены. Под фото было пусто
     ~210×220px (замер r2), а описание жалось в 280px. */
  .seo .card > .shots { grid-row: 1 / 4; }
  .seo .card .price > .cut, .seo .card .price > .debt, .seo .card .price > .adv,
  .seo .card .body > .verdict, .seo .card .body > .know, .seo .card .body > .cnt,
  .seo .card .body > .flags, .seo .card .body > .checks { grid-column: 1 / 3; }
  .seo .card .price > .cut:not([data-tour]) { margin-top: 12px; }
  .seo .card .price > .landed { grid-column: 3; grid-row: 4 / span 9; align-self: start; margin-top: 12px; text-align: right; }
}
@media (max-width: 699px) {
  /* Подпись под полосой проверок («19 подтверждено · 2 к сведению · 13 молчат»): доска на
     телефоне её прячет, на посадочной без неё полоса — «бусы без подписи» (r1, обе персоны). */
  .seo .card .body > .cnt { display: block; order: 7; margin-top: 4px; }
  /* «В продаже N дней» — решающая цифра для перекупщика (r1): строка целиком, не «мень…». */
  .seo .card .body > .where { white-space: normal; overflow: visible; text-overflow: clip; }
  /* Порядок под местом: сначала плашки рисков («Пробег ниже медианы…, требует проверки VIN»
     стояла через экран от зелёной «дешевле», r2 Нино), потом растаможка с итогом, потом
     полоса проверок с подписью, потом кнопки. */
  .seo .card .body > .flags { order: 5; margin-top: 10px; }
  .seo .card .price > .cut, .seo .card .price > .debt, .seo .card .price > .adv,
  .seo .card .price > .landed { order: 6; }
  .seo .card .body > .verdict { order: 7; }
  .seo .card .body > .know, .seo .card .body > .cnt, .seo .card .body > .checks { order: 8; }
}

/* ---------------------------------------------------------------- после r4 (без судей)
   Правки по находкам четвёртого раунда; раунды исчерпаны (PLAYBOOK §5), записаны в PROGRESS. */
@media (max-width: 640px) {
  /* Подпись блока машин («Первые десять по выгоде…», 4 строки) — под список: над первой
     машиной на телефоне ничего служебного (r4, P1 model и city). Заголовок блока на месте. */
  .seo.lp .cars-block { display: flex; flex-direction: column; }
  .seo.lp .cars-block > .block-head { display: contents; }
  .seo.lp .cars-block .block-head > h2 { order: 1; margin-bottom: 12px; }
  .seo.lp .cars-block > .cards { order: 2; }
  .seo.lp .cars-block .block-head > .block-note { order: 3; margin-top: 12px; }
  .seo.lp .cars-block > .cars-cta { order: 4; }
  /* Внизу страницы до подвала было ~140px воздуха (r4). */
  .seo.lp { padding-bottom: 24px; }
}
@media (max-width: 1099px) {
  /* Марка: каталог сразу под панелью — без второй черты над ним (r4, двойной разделитель). */
  .seo.lp-agg:not(:has(> .cars-block)) .col-main > .block:first-child { border-top: 0; padding-top: 0; margin-top: 16px; }
}
/* Плитки панели ответа одной высоты в ряду; подписи переносятся ровно (r4). */
/* r5 P2: равная высота строк (1fr) давала лишние 16–31px под первой строкой плиток; строки
   по содержимому, плитки сверху. */
.seo .fg-tiles { grid-auto-rows: auto; align-items: start; }
.seo .fig-n { text-wrap: balance; }
.seo .fg-tile span { text-wrap: balance; }
/* Хаб: нажимается вся строка, а не только имя модели (r4) — ссылка растянута на строку. */
.seo.lp-hub table.grid tbody tr { position: relative; }
.seo.lp-hub table.grid td a::after { content: ""; position: absolute; inset: 0; }
@media (min-width: 1100px) {
  /* Только марка без машин: страница короткая, и кнопка «Смотреть N» внизу стоит на одном
     экране с той же кнопкой панели ответа (r4). На городе/кузове/топливе/поколении панель к
     низу страницы уже уехала — там кнопка внизу нужна и остаётся. */
  .seo.lp-agg:not(:has(> .cars-block)) .follow-box p:has(> .btn) { display: none; }
  .seo.lp-agg:not(:has(> .cars-block)) .follow-box { display: block; }
}

/* Поколение, десктоп: таблицы «по годам» и «по городам» (по три колонки) стояли друг под другом
   на всю левую колонку 780px — цифры разъезжались к правому краю, посередине пусто (r5: 29%
   мёртвой площади). Левая колонка делится на две, таблицы встают рядом; остальное — на обе. */
@media (min-width: 1100px) {
  .seo.lp-gen { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) var(--lp-side); }
  .seo.lp-gen .seo-hero > *, .seo.lp-gen .col-main > *, .seo.lp-gen > .cars-block,
  .seo.lp-gen > .vin-links, .seo.lp-gen > .liq { grid-column: 1 / 3; }
  .seo.lp-gen .col-side { grid-column: 3; }
  .seo.lp-gen .col-main > section:has(> table.grid) { grid-column: auto; }
}

/* r5 P2 (поколение): колонка медиан в таблицах до правого края, как цены в списке моделей. */
.seo.lp table.grid td:last-child, .seo.lp table.grid th:last-child { padding-right: 0; }

/* ================================================================ r6 (оркестратор, после r5) */

/* 1. «ЧТО ДЕЛАТЬ ДАЛЬШЕ»: строка «Открыть выдачу с этим фильтром» стояла над кнопкой помощника и
   читалась её подписью (r5, обе персоны). Внутри листа кнопка помощника — первой, отдельной
   строкой; ниже, через черту, — подпись про выдачу со стрелкой туда, где выдача: на десктопе
   вправо, к «Смотреть N» в панели ответа (текст прижат к правому краю колонки, к панели), на
   телефоне вниз, к машинам — первой странице этой выдачи. Тексты и порядок в документе те же. */
.seo.lp .seo-action-panel { display: flex; flex-direction: column; }
.seo.lp .seo-action-panel > .seo-action-controls { order: -1; margin: 0 0 14px; }
.seo.lp .seo-action-panel > .seo-action-kicker { padding-top: 12px; border-top: 1px solid var(--line); }
.seo.lp .seo-action-panel > h2 { display: flex; align-items: center; gap: 8px; }
.seo.lp .seo-action-panel > h2::after {
  content: ""; width: 18px; height: 18px; flex: none; background: currentColor;
  -webkit-mask: var(--lp-ico-down) center / contain no-repeat; mask: var(--lp-ico-down) center / contain no-repeat; }
@media (min-width: 1100px) {
  .seo.lp .seo-action-panel {
    display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 32px; align-items: center; }
  .seo.lp .seo-action-panel > * { grid-column: 2; text-align: right; }
  .seo.lp .seo-action-panel > .seo-action-controls { grid-column: 1; grid-row: 1 / span 3; margin: 0; min-width: 0; }
  .seo.lp .seo-action-panel > .seo-action-kicker { padding-top: 0; border-top: 0; }
  .seo.lp .seo-action-panel > h2 { justify-content: flex-end; }
  .seo.lp .seo-action-panel > h2::after { -webkit-mask-image: var(--lp-ico-right); mask-image: var(--lp-ico-right); }
  /* Марка: блок стоит под панелью ответа в правой колонке — там подпись вверх не нужна, стопкой. */
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel { display: flex; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel > * { text-align: left; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel > .seo-action-controls { margin: 0 0 14px; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel > .seo-action-kicker { padding-top: 12px; border-top: 1px solid var(--line); }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel > h2 { justify-content: flex-start; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-action-panel > h2::after { display: none; }
}

/* 2. ГОРОД / КУЗОВ / ТОПЛИВО, ДЕСКТОП: машины выше прозы, как на телефоне (r5 Давид: пять абзацев
   над первой машиной). Заголовок → «что дальше» → машины → лид, оговорка, вступление → остальное. */
@media (min-width: 1100px) {
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy { display: contents; }
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy > * { grid-column: 1; min-width: 0; }
  .seo.lp-agg:has(> .cars-block) > *, .seo.lp-agg:has(> .cars-block) .seo-hero > *,
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy > *, .seo.lp-agg:has(> .cars-block) .col-main > * { order: 10; }
  .seo.lp-agg:has(> .cars-block) > .crumbs { order: 0; }
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy > h1 { order: 1; }
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy > .seo-relax { order: 2; }
  .seo.lp-agg:has(> .cars-block) .seo-hero > .seo-action-panel { order: 3; margin-top: 8px; }
  .seo.lp-agg:has(> .cars-block) > .cars-block { order: 4; }
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy > .lead { order: 5; margin-top: 32px; padding-top: 24px; border-top: 1px solid var(--line); }
  .seo.lp-agg:has(> .cars-block) .seo-hero-copy > .why, .seo.lp-agg:has(> .cars-block) .seo-hero-copy > .intro { order: 5; }
  .seo.lp-agg:has(> .cars-block) > .vin-links { order: 6; }
  .seo.lp-agg:has(> .cars-block) .col-main > * { order: 7; }
  .seo.lp-agg:has(> .cars-block) > .liq { order: 8; }
  .seo.lp-agg:has(> .cars-block) > .cuts, .seo.lp-agg:has(> .cars-block) > .checks-wide,
  .seo.lp-agg:has(> .cars-block) > .outro, .seo.lp-agg:has(> .cars-block) > .stamp,
  .seo.lp-agg:has(> .cars-block) > .follow-box, .seo.lp-agg:has(> .cars-block) > .why { order: 20; }
}

/* 3. ПОКОЛЕНИЕ: цены по годам (и рядом по городам) — сразу после «что дальше», выше «Что
   считается» и состава поколения (r5 Давид). Первая таблица документа — годы, вторая — города. */
.seo.lp-gen .col-main > section:has(> table.grid) { order: 9; }
@media (max-width: 1099px) {
  .seo.lp-gen .col-main > section:has(> table.grid) ~ section:has(> table.grid) { order: 12; }
  .seo.lp-gen .col-main > section:first-child { order: 13; }
  .seo.lp-gen > .liq { order: 14; }
}
@media (min-width: 1100px) {
  .seo.lp-gen .col-main > * { order: 1; }
  .seo.lp-gen .col-main > section:has(> table.grid) { order: 0; }
  .seo.lp-gen > .liq { order: 2; }
  .seo.lp-gen > .follow-box, .seo.lp-gen > .stamp { order: 3; }
}

/* ================================================================ r7 (WP-C2, после судей r6 на Sonnet)
   Только вид: тексты, ссылки, формы и порядок в документе как в main. Каждое скрытие — дубль
   действия или числа, записано в PROGRESS.md (WP-C, r7). */

:root {
  /* Высота плавающей кнопки телефона с её отступом снизу и воздухом над ней: столько же
     поля у низа страницы, чтобы последняя строка вставала над кнопкой, а не под ней. */
  --lp-dock: 72px;
  /* Второй ряд панели (снижена цена / свежие) есть только на проде, где эти числа не ноль. */
  --lp-dock-2: 124px;
  /* Полоса половины рынка: светлые хвосты дорожки по краям чернильного отрезка p25…p75. */
  --lp-stub: 14px;
}

/* 1. ПЛАВАЮЩАЯ ПАНЕЛЬ ТЕЛЕФОНА — ОДИН СЛОЙ. Белая капсула с рамкой и тенью вокруг чернильной
   кнопки была «карточкой в карточке» (r6, UX K5) и закрывала полосу в 78px. Остаётся сама
   кнопка с тенью слоя управления (design-system.md: стекло и тень — только у навигации), под
   ней видно страницу. Низ страницы получает поле высотой с панель: последняя строка, таблица
   или машина встаёт над кнопкой. Прыжок к якорю и фокус с клавиатуры — тоже над ней. */
@media (max-width: 640px) {
  .seo .seo-mobile-actions {
    padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none;
    -webkit-backdrop-filter: none; backdrop-filter: none;
  }
  .seo .seo-mobile-primary { border-radius: var(--radius); box-shadow: var(--shadow-pop); }
  .seo .seo-mobile-secondary a { box-shadow: var(--shadow-pop); }
  .seo.lp { padding-bottom: calc(var(--lp-dock) + env(safe-area-inset-bottom, 0px)); }
  .seo.lp:has(.seo-mobile-secondary) { padding-bottom: calc(var(--lp-dock-2) + env(safe-area-inset-bottom, 0px)); }
  .seo.lp:has(.seo-mobile-secondary) ~ .foot-site { padding-bottom: calc(var(--lp-dock-2) + 24px); }
  html:has(.seo.lp .seo-mobile-actions) { scroll-padding-bottom: var(--lp-dock); }
}

/* 2. ДУБЛИ ДЕЙСТВИЙ.
   Телефон: «Что делать дальше / Открыть выдачу с этим фильтром / Фильтр … уже собран» — то же
   действие, что плавающая «Смотреть N» (тот же адрес выдачи), которая на телефоне есть всегда.
   Видимо скрыты подпись, заголовок и строка блока; кнопка помощника остаётся — на телефоне это
   его единственная дверь (пузырь скрыт, пока есть плавающая панель). Черта над кнопкой тоже
   уходит: она стояла вплотную под рамкой панели ответа. */
@media (max-width: 640px) {
  .seo.lp .seo-action-panel > .seo-action-kicker,
  .seo.lp .seo-action-panel > h2,
  .seo.lp .seo-action-panel > p { display: none; }
  .seo.lp .seo-action-panel { border-top: 0; padding-top: 0; margin-top: 12px; }
  .seo.lp .seo-action-panel > .seo-action-controls { margin: 0; }
}
/* Десктоп, поколение: лист «Смотреть BMW F30 · Смотреть 117 объявлений» внизу — та же кнопка,
   что в липкой панели ответа справа на том же экране. Лист скрыт; штамп даты — в левую часть,
   а липкая колонка тянется до низа содержимого (см. п. 6). */
@media (min-width: 1100px) {
  .seo.lp-gen > .follow-box { display: none; }
  .seo.lp-gen > .stamp { grid-column: 1 / 3; }
}

/* 3. МЕДИАНЫ НЕТ (марка, кузов, топливо на локальной базе). Панель занимала 400–610px телефона
   и трижды говорила «нет данных». Медиана — одной тихой строкой «Медиана цены · нет данных»;
   строка «половина между нет данных и нет данных» скрыта (то же «нет данных» ещё дважды).
   Факты под ней плотнее. Ответа нет — значит панель не ответ: на телефоне она уходит под то,
   ради чего страница есть, — каталог моделей на марке, машины и таблицу лет на кузове/топливе. */
.seo.lp .figures > .fig:has(> .fig-v.is-empty) {
  display: flex; flex-direction: row; flex-wrap: wrap; align-items: baseline; column-gap: 8px; row-gap: 0; padding: 0 0 10px;
}
.seo.lp .figures > .fig:has(> .fig-v.is-empty) > .fig-k { display: inline; }
.seo.lp .figures > .fig:has(> .fig-v.is-empty) > .fig-v.is-empty { display: inline; margin: 0; font-size: 15px; line-height: 1.4; }
.seo.lp .figures > .fig:has(> .fig-v.is-empty) > .fig-n { display: none; }
.seo.lp .figures:has(.fig-v.is-empty) .fig { padding-top: 8px; padding-bottom: 8px; }
.seo.lp .figures:has(.fig-v.is-empty) .fig-v:not(.is-empty) { font-size: 20px; }
@media (max-width: 1099px) {
  /* Марка: каталог моделей (order 9) выше панели. */
  .seo.lp-agg:not(:has(> .cars-block)):has(.fig-v.is-empty) .col-side { order: 10; }
  /* Кузов, топливо, город с машинами: заголовок → помощник → машины → проза → таблицы → панель. */
  .seo.lp-agg:has(> .cars-block):has(.fig-v.is-empty) .col-side { order: 13; }
  .seo.lp-agg:has(> .cars-block):has(.fig-v.is-empty) .col-side { margin-top: 24px; }
}

/* 4. ПОЛОСА «ПОЛОВИНА ОБЪЯВЛЕНИЙ». Серое на сером (r6). Отрезок p25…p75 — чернилами, по краям
   светлые хвосты дорожки (рынок шире половины), подписи краёв — над концами отрезка. Риска
   медианы — уголком над полосой: на чернильном отрезке черта в нём терялась. Положение риски
   из шаблона (`left: N%` от коробки отрезка) не меняется — хвосты нарисованы снаружи коробки. */
.seo.lp .fg-ends { padding: 0 var(--lp-stub); }
.seo.lp .fg-bar {
  height: 6px; margin: 12px var(--lp-stub) 8px; border-radius: 3px; background: var(--ink); overflow: visible;
}
.seo.lp .fg-bar::before, .seo.lp .fg-bar::after {
  content: ""; position: absolute; top: 0; height: 6px; width: calc(var(--lp-stub) - 3px);
  background: var(--line-strong); border-radius: 3px;
}
.seo.lp .fg-bar::before { right: 100%; margin-right: 3px; }
.seo.lp .fg-bar::after { left: 100%; margin-left: 3px; }
.seo.lp .fg-bar i {
  top: -9px; width: 0; height: 0; margin-left: -5px; border-radius: 0; box-shadow: none; background: none;
  border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 6px solid var(--ink);
}

/* 5. КАТАЛОГ /ceny НА ТЕЛЕФОНЕ. Строка 45px → ~32px (r6 Давид: в main 33px; таблица из 70 строк
   читается как список, а не как лента кнопок). Нажимается вся строка (ссылка растянута, r4), и
   это видно: тихий шеврон справа, подчёркивание тише. Шапка «Медиана» — по правому краю чисел:
   видимая третья ячейка шапки не `:last-child` (за ней скрытые повторы `.hub-rep`), поэтому
   поле справа ей не снималось — расхождение 12px. */
@media (max-width: 899px) {
  .seo.lp-hub table.grid td, .seo.lp-hub table.grid th { padding-top: 5px; padding-bottom: 5px; line-height: 1.4; }
  .seo.lp-hub table.grid thead th { padding-top: 8px; padding-bottom: 8px; }
  .seo.lp-hub table.grid td a { min-height: 0; display: inline; text-decoration-color: var(--line-strong); }
  .seo.lp-hub table.grid tbody td:nth-child(3), .seo.lp-hub table.grid thead th:nth-child(3) { padding-right: 18px; }
  .seo.lp-hub table.grid td a::before {
    content: ""; position: absolute; right: 3px; top: 50%; width: 6px; height: 6px; margin-top: -3px;
    border: solid var(--ink-faint); border-width: 1.5px 1.5px 0 0; transform: rotate(45deg);
  }
  .seo.lp-hub table.grid tbody tr:active td { background: var(--panel); }
}

/* 6. ПОКОЛЕНИЕ. Телефон: цены по годам сразу под панелью ответа, помощник — под таблицей
   (вторая таблица, по городам, остаётся ниже, order 12). Десктоп: липкая панель не «срезалась
   отступом» — её колонка кончалась вместе с левым текстом, и у низа страницы панель уезжала под
   шапку на ~80px. Колонка тянется на все строки сетки до штампа, панель встаёт над подвалом. */
@media (max-width: 1099px) {
  .seo.lp-gen .col-main > section:has(> table.grid) { order: 5; }
  .seo.lp-gen .seo-hero > .seo-action-panel { order: 6; }
}
@media (min-width: 1100px) {
  .seo.lp-gen .col-side { grid-row: 2 / span 40; }
}

/* 7. КАРТОЧКА В КОЛОНКЕ ПОСАДОЧНОЙ (десктоп ≥1100, колонка ~780px, уже доски). Общая сетка
   карточки делит строки между колонками: под «N похожих машин» вставала высота описания, и
   справа зияло ~45px, а над растаможкой — ещё столько же. Здесь колонка денег — одна стопка
   сверху вниз: цена → плашка → «N похожих» → строки о цене → растаможка, кнопки — внизу той же
   колонки одна под другой (у всех карточек на одном месте — кнопки не скачут). Слева фото и
   описание, под фото в 12px — вердикт, полоса проверок, плашки. Только под `.lp` (на /banki и
   /taxi пакета G карточка как была); доска и главная не трогаются. */
@media (min-width: 1100px) {
  .seo.lp .card > .price {
    display: flex; flex-direction: column; align-items: stretch; min-width: 0;
    grid-column: 3; grid-row: 1 / -1;
  }
  .seo.lp .card > .price > * { text-align: right; margin: 0; }
  .seo.lp .card > .price > .ask { line-height: 1.1; }
  .seo.lp .card > .price > .delta { align-self: flex-end; margin-top: 8px; }
  .seo.lp .card > .price > .peers { margin-top: 6px; }
  .seo.lp .card > .price > .cut, .seo.lp .card > .price > .debt, .seo.lp .card > .price > .adv { margin-top: 8px; }
  .seo.lp .card > .price > .landed { margin-top: 12px; padding-top: 10px; }
  .seo.lp .card > .price > .foot {
    flex-direction: column; align-self: stretch; justify-content: flex-end; gap: 8px;
    margin-top: auto; padding-top: 14px;
  }
  .seo.lp .card > .price > .foot > a { width: 100%; }
  .seo.lp .card:not(:has(> .body > .verdict)) .body > .know { margin-top: 12px; }
}
/* VIN в строке места — одним куском, без переноса посреди номера. */
.seo.lp .card .where .vin { white-space: nowrap; }

/* 8. «НЕ РАСТАМОЖЕНА» ТРЕТИЙ РАЗ. У нерастаможенной машины это говорит блок растаможки
   («+$1 618 растаможка · С растаможкой выйдет …», янтарём) и строка над полосой проверок; бейдж
   «Не растаможена» среди плашек — третий голос. Бейдж скрыт там, где блок растаможки есть
   (только CSS, по значку бейджа); пустой ряд плашек — тоже. Раскрывашка «▶ Не растаможена» —
   кнопка расшифровки, её не трогаем. Строка над полосой — текст `verdict_note` (общий файл),
   запрос оркестратору в PROGRESS. */
.seo.lp .card:has(.landed) .flags > .flag:has(use[href="#i-customs"]) { display: none; }
.seo.lp .card:has(.landed) .flags:not(:has(> .flag:not(:has(use[href="#i-customs"])))) { display: none; }
/* Марка, десктоп: блок «что дальше» под панелью ответа стоял `display: block` (правило r3 с
   `.seo-hero >` сильнее правила r6), и черта блока шла второй под чертой подписи — двойная
   линия под панелью. Стопкой: кнопка помощника сразу под панелью (черта над ней лишняя — над
   ней рамка панели), ниже через одну черту — подпись и строка. */
@media (min-width: 1100px) {
  .seo.lp-agg:not(:has(> .cars-block)) .seo-hero > .seo-action-panel {
    display: flex; flex-direction: column; align-items: stretch; border-top: 0; padding-top: 0; margin-top: 16px;
  }
}

/* ================================================================ r8 (WP-C3, после финальной комиссии p2)
   Только вид: тексты, ссылки, формы и порядок в документе как в main. */

/* 1. КАРТОЧКА, ДЕСКТОП ≥1100: кнопки — строкой внизу карточки справа, как на доске. В r7 они
   стояли столбиком в колонке денег (две по 44px + зазоры ≈ 110px), колонка выходила выше левой
   стопки, и под полосой проверок слева зияло ~150px рядом с кнопками (комиссия p2: город,
   топливо, P1). Теперь колонка денег — цена, плашка, «N похожих», растаможка (~300px), левая —
   фото, вердикт, полоса, плашки (~300px), строка кнопок под обеими. Кнопки выведены из колонки
   денег абсолютным положением в поле снизу карточки (их порядок в документе и таб — прежние).
   */
@media (min-width: 1100px) {
  .seo.lp .card { position: relative; padding-bottom: calc(14px + 44px + 14px); }
  .seo.lp .card > .price > .foot {
    /* Сетка карточки — блок, содержащий кнопки; `auto` у линий сетки = край поля карточки. */
    position: absolute; grid-column: auto; grid-row: auto; right: 14px; bottom: 14px; left: auto; margin: 0; padding: 0;
    flex-direction: row; justify-content: flex-end; gap: 8px; max-width: calc(100% - 28px);
  }
  .seo.lp .card > .price > .foot > a { width: auto; min-width: 200px; flex: 0 1 auto; }
  /* Растаможенная машина: в колонке денег только цена, плашка и «N похожих» (~100px) — колонка
     встаёт рядом с фото (строки 1–3), а вердикт, полоса проверок и плашки идут под фото во всю
     ширину карточки; кнопки — той же строкой внизу, что у нерастаможенной (судья r8, P1: кнопки
     не прыгают от карточки к карточке). */
  .seo.lp .card:not(:has(> .price > .landed)) > .price { grid-row: 1 / 4; }
  .seo.lp .card:not(:has(> .price > .landed)) .body > .verdict,
  .seo.lp .card:not(:has(> .price > .landed)) .body > .know,
  .seo.lp .card:not(:has(> .price > .landed)) .body > .cnt,
  .seo.lp .card:not(:has(> .price > .landed)) .body > .flags,
  .seo.lp .card:not(:has(> .price > .landed)) .body > .checks { grid-column: 1 / -1; }
}
/* VIN в строке места — плашкой целиком: перенос строки встаёт перед ней, не внутри. */
.seo.lp .card .where .vin { display: inline-block; line-height: 1.5; }

/* 2. КАРТОЧКА, ТЕЛЕФОН: «505 похожих машин» стояло во второй колонке под плашкой «дешевле» и
   читалось центрованным, а «▶ Не растаможена» — сиротой у правого края (комиссия p2, M K4).
   «N похожих» — своей строкой под ценой слева; раскрывашка растаможки — по левому краю, как
   строки над ней. */
@media (max-width: 699px) {
  .seo.lp .card .price > .peers { grid-column: 1 / -1; justify-self: start; text-align: left; margin-top: 4px; }
  .seo.lp .card .landed, .seo.lp .card .landed-more { text-align: left; }
  .seo.lp .card .landed-more > summary { justify-content: flex-start; text-align: left; margin-left: 0; }
}

/* 3. МАРКА, ДЕСКТОП: между панелью ответа и кнопкой помощника было ~75px — панель «что дальше»
   стояла в строке сетки после каталога моделей, а не после панели. Явные строки только для
   марки без машин: заголовок — строка 2, каталог — строки 3–4, сроки — 5; панель ответа —
   строки 2–3 (строка 3 растёт ровно на её остаток, каталог в ней начинается), «что дальше» —
   с 4-й, сразу под панелью, через 16px. */
@media (min-width: 1100px) {
  .seo.lp-agg:not(:has(> .cars-block)) .seo-hero-copy { grid-row: 2; }
  .seo.lp-agg:not(:has(> .cars-block)) .col-main > .block:first-child { grid-row: 3 / span 2; }
  .seo.lp-agg:not(:has(> .cars-block)) > .liq { grid-row: 5 / span 2; }
  .seo.lp-agg:not(:has(> .cars-block)) .col-side { grid-row: 2 / span 2; align-self: start; }
  .seo.lp-agg:not(:has(> .cars-block)) .seo-hero > .seo-action-panel { grid-row: 4 / span 2; align-self: start; margin-top: 16px; }
  /* Судья r8 (P1): под «что дальше» справа пустело ~340×210px рядом со сроками. Лист «Все N
     объявлений этой подборки» (его кнопка на марке скрыта — она в панели ответа) встаёт туда,
     в ту же колонку, что и кнопка, о которой он говорит; ссылка-сноска — слева под сроками. */
  .seo.lp-agg:not(:has(> .cars-block)) > .follow-box { grid-column: 2; grid-row: 6; align-self: start; margin-top: 24px; }
  .seo.lp-agg:not(:has(> .cars-block)) > p.why { grid-column: 1; }
}

/* 4. МАРКА/ГОРОД: полосы в списке моделей и городов начинаются с одного x — колонка имени
   фиксированной ширины (была «по самому длинному имени в строке», и полосы прыгали). */
.seo.lp ul.tiles a, .seo.lp ul.tiles .flat { grid-template-columns: 8rem minmax(36px, 1fr) 44px 64px; }

/* 5. МАРКА, ТЕЛЕФОН, МЕДИАНЫ НЕТ: панель «Медиана нет данных · 806 · 0%» была ~155px в три
   этажа. Одним плотным рядом в три ячейки: подпись, число, сноска. */
@media (max-width: 640px) {
  .seo.lp-agg .figures:has(.fig-v.is-empty) { grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 12px; padding: 12px 16px; }
  .seo.lp-agg .figures:has(.fig-v.is-empty) > .fig { grid-column: auto; border-top: 0; padding: 0; display: flex; flex-direction: column; align-items: flex-start; }
  .seo.lp-agg .figures:has(.fig-v.is-empty) > .fig > .fig-k { font-size: 12.5px; }
  .seo.lp-agg .figures:has(.fig-v.is-empty) > .fig > .fig-v { font-size: 20px; line-height: 1.3; }
  .seo.lp-agg .figures:has(.fig-v.is-empty) > .fig > .fig-v.is-empty { font-size: 15px; line-height: 1.3; margin-top: 3px; }
  .seo.lp-agg .figures:has(.fig-v.is-empty) > .fig > .fig-n { font-size: 12px; line-height: 1.35; }
  /* Ячейка ~95px: длинное грузинское слово («საქართველოში») переносится внутри ячейки. */
  .seo.lp-agg .figures:has(.fig-v.is-empty) > .fig > * { overflow-wrap: anywhere; min-width: 0; }
  /* Низ страницы и подвал не уходят под плавающую кнопку «Смотреть N»: поле высотой с кнопку
     — у подвала, последнего на странице. Поле r7 у самого содержимого перед подвалом давало
     ~145px пустоты между штампом даты и подвалом (содержимое и так уезжает над кнопкой). */
  .seo.lp:has(.seo-mobile-actions) ~ .foot-site { padding-bottom: calc(var(--lp-dock) + 16px); }
  .seo.lp:has(.seo-mobile-actions):has(~ .foot-site) { padding-bottom: 24px; }
  .seo.lp:has(.seo-mobile-secondary) ~ .foot-site { padding-bottom: calc(var(--lp-dock-2) + 24px); }
}

/* 6. КАТАЛОГ /ceny: имена моделей без подчёркивания в покое — нажимается вся строка, это
   говорит шеврон справа; подчёркивание — на наведении и фокусе (комиссия p2, хаб). */
.seo.lp-hub table.grid td a { text-decoration: none; }
.seo.lp-hub table.grid tbody tr:hover td a, .seo.lp-hub table.grid td a:hover,
.seo.lp-hub table.grid td a:focus-visible { text-decoration: underline; text-decoration-color: var(--ink); text-underline-offset: 3px; }
/* Колонка имени фиксирована (п. 4) — длинное имя («Land Cruiser Prado») переносится, а не
   режется многоточием. */
.seo.lp ul.tiles .t { white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; line-height: 1.3; }
/* Марка, телефон: панель без медианы стояла в 10px под списком моделей (судья r8, P2). */
@media (max-width: 1099px) {
  .seo.lp-agg:not(:has(> .cars-block)):has(.fig-v.is-empty) .col-side { margin-top: 20px; }
}

/* Иван 11.10: подписи плиток панели ответа на цене модели (строки a_stat_*) — тихая подпись над
   числом, как `.fig-k` у фасетов; фраза про порог медианы — обычным текстом, не кеглем цены. */
.seo .fg-tile .fg-k { display: block; margin: 0 0 2px; font-size: 12px; line-height: 1.3; color: var(--ink-dim); }
.seo .fg-tile b { display: block; }
.seo.lp .figures .fig-v.is-soon { font-size: 15px; font-weight: 500; line-height: 1.35; letter-spacing: 0; color: var(--ink-dim); }
