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

/* Страница никогда не должна ехать вбок (после зума полей на iOS появлялись
   пустые области справа/слева). Обрезаем только на корне: overflow у <html>
   уходит вьюпорту, и боковой прокрутки всё так же нет. На <body> его вешать
   нельзя — тогда body становится прокручиваемым контейнером, и position:sticky
   внутри (панель сортировки на телефоне) прилипает к нему, то есть никуда. */
html { max-width: 100%; overflow-x: hidden; }
body { max-width: 100%; }

/* iOS зумит страницу при фокусе на поле со шрифтом меньше 16px, и после этого
   вёрстку можно двигать вбок. Держим все поля ввода на мобильном ровно 16px —
   зум при фокусе не срабатывает, а визуальный размер сохраняем через transform. */
@media (max-width: 767px) {
	.filter input, .filter select, .filter textarea,
	.dd-input, .r-min, .r-max, .r-text,
	.cost-city input, .ab-modal input, .ab-modal select {
		font-size: 16px !important;
	}
}

/* ------------------------------------------------- ширина контента

   Каталог и панель фильтров выравниваются по ширине шапки (1280px): в исходной
   вёрстке они были уже на 100px, из-за чего колонка характеристик поджимала
   значения и переносила их на две строки. */

/* Одна колонка контента шириной 1280px на всех страницах. У панели фильтров
   боковые отступы даёт hero, поэтому ей хватает ровно 1280. У каталога и карточки
   отступы свои, и к ширине их нужно прибавить — иначе содержимое этих блоков
   оказывается уже панели на 32px с каждой стороны, что и было видно на стыке. */
.catalog-wrap { max-width: 1344px; }
.filter { max-width: 1280px; }
.car-page { max-width: 1344px; }

/* Колонки карточки: фото шире, характеристикам отдано больше места */
.car-card { grid-template-columns: 300px 250px 1fr 300px; }

/* ------------------------------------------- фон панели фильтров

   Панель светло-серая, поля внутри остаются белыми — так поля читаются как
   активные элементы, а не сливаются с подложкой. */

.filter { background: #f5f6f7; }
.filter .dd-trigger,
.filter .pf { background: #fff; }
.filter .pair-box { background: transparent; }

/* Марка — главное поле панели, с неё начинается любой подбор. Поэтому она всегда
   обведена так же, как активное поле, только серым: взгляд цепляется за неё
   раньше остальных. Наведение и открытие перекрашивают обводку в красный —
   ровно то же поведение, что и у прочих полей. */
.filter .dd[data-field="brand"] .dd-trigger {
	border-color: #a9aeb6;
	box-shadow: 0 0 0 3px rgba(23, 24, 26, .09);
}
.filter .dd[data-field="brand"]:hover .dd-trigger,
.filter .dd[data-field="brand"].is-open .dd-trigger {
	border-color: var(--red, #f00);
	box-shadow: 0 0 0 3px rgba(255, 0, 0, .12);
}

/* Строки чекбоксов получают собственную подложку, как отдельная группа */
.filter .check-track {
	background: #eeeff1;
	border-radius: 12px;
	padding: 6px 8px;
}

/* -------------------------------------------------- список сортировки

   Раньше это был системный <select> с оформлением операционной системы —
   на фоне остальных полей он выглядел чужеродным. Теперь та же механика
   выпадающего списка, что и в фильтрах, а пункты остаются ссылками,
   поэтому сортировка работает и без JavaScript. */

/* ------------------------------------------- текст поверх фона страницы

   Всё, что лежит не в белой карточке, а прямо на градиенте, — светлое:
   исходные серые оттенки были рассчитаны на белый фон и по тёмному не читаются. */

.sort-label { font-size: 12px; color: rgba(255, 255, 255, .65); white-space: nowrap; }
.catalog-count { color: rgba(255, 255, 255, .7); }
.catalog-count strong { color: #fff; }
.catalog-empty { color: rgba(255, 255, 255, .75); }
.pager-dots { color: rgba(255, 255, 255, .6); }

.dd-sort { min-width: 190px; }
.dd-sort .dd-trigger {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	height: 38px; padding: 0 12px;
	border: 1px solid #d3d2d0; border-radius: 10px;
	background: #fff; font-size: 13px; cursor: pointer;
}
.dd-sort .dd-trigger:hover { border-color: var(--red, #f00); }
.dd-sort.is-open .dd-trigger { border-color: var(--red, #f00); }
/* стрелка — обычный flex-элемент (центрируется align-items), а не absolute из
   базового .dd-arrow: иначе rotate при открытии сбрасывал бы translateY-центровку
   и стрелка прыгала вниз */
.dd-sort .dd-arrow { position: static; transform: none; width: 11px; height: 7px; flex: none; color: #6b6d72; transition: transform .15s ease; }
.dd-sort.is-open .dd-arrow { transform: rotate(180deg); }
.dd-sort-value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.dd-sort .dd-panel { min-width: 100%; left: auto; right: 0; padding: 8px; }
.dd-sort .dd-opt {
	display: block; width: 100%; padding: 9px 12px; border-radius: 8px;
	color: inherit; text-decoration: none; font-size: 13px; white-space: nowrap;
}
.dd-sort .dd-opt:hover { background: rgba(0, 0, 0, .05); }
.dd-sort .dd-opt.is-selected { background: rgba(255, 0, 0, .08); color: var(--red, #f00); font-weight: 600; }

/* ------------------------------------------------ выпадающие списки */

.dd { position: relative; }
.dd-panel { display: none; }
.dd.is-open .dd-panel { display: block; }

/* Списки года и объёма живут внутри половинок пары «от/до»: базовый
   min-width:220px делал бы их шире самого поля и вылезающими за его край. */
.dd-pf .dd-panel { min-width: 0; padding: 8px; }
.dd-pf .dd-opts { max-height: 260px; }
.dd-pf .dd-opt { padding: 7px 10px; }

/* Поле, которое пока нельзя заполнить (не выбран родитель), гасим фоном,
   а не прозрачностью: прозрачное поле на серой панели выглядит поломанным. */
.dd.is-disabled { pointer-events: none; }
.filter .dd.is-disabled .dd-trigger {
	background: #eceef0;
	border-color: #e0e2e5;
	box-shadow: none;
}
.dd.is-disabled .dd-trigger label,
.dd.is-disabled .dd-input::placeholder { color: #a8acb2; }
.dd.is-disabled .dd-arrow { color: #b9bdc2; }

.dd-opts { max-height: 280px; overflow-y: auto; padding: 4px; }

.dd-opt {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	width: 100%; padding: 8px 10px; border: 0; border-radius: 8px;
	background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer;
}
.dd-opt:hover { background: rgba(0, 0, 0, .05); }
.dd-opt.is-selected { background: rgba(255, 0, 0, .08); font-weight: 600; }
.dd-count { color: #8a8f98; font-size: 12px; font-variant-numeric: tabular-nums; }

.dd-tags { display: flex; flex-wrap: wrap; gap: 4px; }

/* Высота поля не должна зависеть от длины выбранного значения. Раз .dd-tags —
   отдельный флекс-элемент, строка поиска рядом с ним живёт по остаточному
   принципу: при широком теге («Передний», «Бензин») она не помещалась и уезжала
   на третью строку, при узком («Робот», «Седан») оставалась на второй — поля с
   одним выбранным значением получались разной высоты. Разрешаем строке поиска
   сжиматься до нуля: перенос пропадает, высота одинаковая. */
.dd-trigger-tags.has-tags .dd-input { flex: 1 1 0; min-width: 0; }
/* Горизонтальный зазор между блоком тегов и строкой поиска обнулён: даже сжатая
   в ноль строка вместе с зазором в 6px переставала помещаться и уносила себя на
   отдельный ряд. Отступы между самими тегами задаются внутри .dd-tags. */
.dd-trigger-tags.has-tags { column-gap: 0; }
.dd-tag {
	display: inline-flex; align-items: center; gap: 4px;
	padding: 2px 6px 2px 8px; border-radius: 6px;
	background: rgba(255, 0, 0, .1); color: #111; font-size: 12px; line-height: 18px;
}
.dd-tag-x { border: 0; background: none; color: #888; cursor: pointer; font-size: 14px; line-height: 1; padding: 0 2px; }
.dd-tag-x:hover { color: var(--red, #f00); }

.range-hint { margin-top: 4px; color: #9aa0a8; font-size: 11px; }

/* Столбики гистограммы вне выбранного диапазона гасим — так выбор виден на распределении */
.histogram span { transition: background-color .12s ease; }
.histogram span.is-dim { background: #eceef1; }

/* ----------------------------------------- ползунок диапазона цены

   Круг ползунка имеет рамку 3px, и без border-box его фактический размер
   становится 24px вместо 18 — из-за этого он не попадал на линию. Здесь
   размеры и центры считаются явно: трек 20px, линия по центру, круг 18px. */

.range-panel { min-width: 280px; }
.range-panel-scale span { white-space: nowrap; font-variant-numeric: tabular-nums; }

.slider-track { height: 20px; }
.slider-track::before,
.slider-fill { top: 8px; height: 4px; border-radius: 2px; }

.slider-track input[type="range"] { height: 20px; }

.slider-track input[type="range"]::-webkit-slider-runnable-track {
	height: 20px;
	background: transparent;
	border: 0;
}
.slider-track input[type="range"]::-webkit-slider-thumb {
	box-sizing: border-box;
	width: 18px;
	height: 18px;
	margin-top: 1px;          /* (20 − 18) / 2 — центр круга совпадает с центром линии */
	border: 3px solid var(--red, #f00);
	background: #fff;
	box-shadow: 0 1px 4px rgba(0, 0, 0, .22);
}
.slider-track input[type="range"]::-moz-range-track {
	height: 20px;
	background: transparent;
	border: 0;
}
.slider-track input[type="range"]::-moz-range-thumb {
	box-sizing: border-box;
	width: 18px;
	height: 18px;
	border: 3px solid var(--red, #f00);
	background: #fff;
	box-shadow: 0 1px 4px rgba(0, 0, 0, .22);
}
.slider-track input[type="range"]:focus { outline: none; }
.slider-track input[type="range"]:focus::-webkit-slider-thumb { box-shadow: 0 0 0 4px rgba(255, 0, 0, .15); }

/* Подписи границ выравниваются по краям линии, а не по краям панели */
.range-panel-scale { padding: 0 2px; }
.histogram { padding: 0 9px; }   /* столбики совпадают с рабочей зоной ползунка */

/* Скрытие «расширенных» полей живёт в style.css и только в мобильном медиа-запросе
   (.f-extra + .filter.is-expanded). На десктопе видны все поля — здесь ничего не прячем. */

/* ------------------------------------------------------- карточки */

.car-nophoto {
	display: flex; align-items: center; justify-content: center;
	min-height: 180px; background: #eef0f3; color: #9aa0a8; font-size: 13px;
}

.type-tab { text-decoration: none; }

/* --------------------------------------------- детальная страница */

.car-page { max-width: 1344px; margin: 0 auto; padding: 24px 32px 60px; }

/* хлебные крошки и заголовок лежат прямо на градиенте страницы, а не в карточке */
.breadcrumbs { color: rgba(255, 255, 255, .6); font-size: 13px; margin-bottom: 12px; }
.breadcrumbs a { color: rgba(255, 255, 255, .6); text-decoration: none; }
.breadcrumbs a:hover { color: var(--red, #f00); }
.breadcrumbs span { color: rgba(255, 255, 255, .9); }

.car-page-title { font-size: 30px; margin: 0 0 20px; color: #fff; }

.car-page-grid { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 28px; align-items: start; }

.car-gallery img { width: 100%; border-radius: 12px; display: block; cursor: zoom-in; }
.car-gallery-thumbs { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.car-thumb { width: 92px; height: 68px; padding: 0; border: 2px solid transparent; border-radius: 8px; overflow: hidden; background: none; cursor: pointer; }
.car-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.car-thumb.is-active { border-color: var(--red, #f00); }

.car-page-side { position: sticky; top: 20px; display: flex; flex-direction: column; gap: 16px; }
.car-page-price { padding: 20px; border: 1px solid #e6e8ec; border-radius: 12px; }
.car-page-price-native { color: #8a8f98; font-size: 14px; }
.car-page-price-rub { font-size: 28px; font-weight: 800; margin: 4px 0 6px; }

.car-breakdown { padding: 18px 20px; border: 1px solid #e6e8ec; border-radius: 12px; }
.car-breakdown h3 { margin: 0 0 10px; font-size: 15px; }
.car-breakdown table { width: 100%; border-collapse: collapse; font-size: 13px; }
.car-breakdown td { padding: 5px 0; border-bottom: 1px solid #f0f1f4; }
.car-breakdown td:last-child { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.car-breakdown tr.is-total td { font-weight: 700; border-bottom: 0; padding-top: 9px; }
.car-breakdown-note { margin: 10px 0 0; color: #9aa0a8; font-size: 11px; line-height: 1.45; }

.car-page-specs { margin-top: 36px; }
.car-page-specs h2 { font-size: 20px; margin: 0 0 14px; }
.car-specs-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 0 28px; }
.car-specs-grid .spec-row { display: flex; justify-content: space-between; gap: 12px; padding: 9px 0; border-bottom: 1px solid #f0f1f4; }
.car-specs-grid .spec-label { color: #8a8f98; font-size: 13px; }
.car-specs-grid .spec-value { font-size: 13px; font-weight: 500; text-align: right; }

.car-specs-card { padding: 18px 20px; border: 1px solid #e6e8ec; border-radius: 12px; }
.car-specs-card h3 { margin: 0 0 10px; font-size: 15px; }
.car-specs-card .spec-row { display: flex; justify-content: space-between; gap: 12px; padding: 7px 0; border-bottom: 1px solid #f0f1f4; }
.car-specs-card .spec-row:last-child { border-bottom: 0; }
.car-specs-card .spec-label { color: #8a8f98; font-size: 13px; }
.car-specs-card .spec-value { font-size: 13px; font-weight: 500; text-align: right; }

/* ------------------------------------ из чего складывается стоимость */

.cost-block { margin-top: 40px; padding: 28px 30px 24px; border: 1px solid #e6e8ec; border-radius: 16px; background: #fff; }
.cost-block h2 { margin: 0 0 20px; font-size: 22px; }

.cost-total-line {
	display: flex; align-items: center; justify-content: space-between; gap: 20px;
	padding: 18px 20px; border-radius: 12px; background: #f5f6f7;
}
.cost-total-line > span { color: #4a5058; max-width: 62%; line-height: 1.45; }
.cost-city-name { color: #1b2430; }
.cost-total-sum { color: var(--red, #f00); font-size: 26px; font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }

/* Выбор города доставки — кастомный список в стиле остальных полей сайта */
.cost-city { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 14px; margin: 18px 0 4px; }
.cost-city-label { font-size: 13px; color: #6b6d72; }
.cost-city-hint { font-size: 12px; color: #9aa0a8; }

.dd-city { position: relative; min-width: 280px; }
.dd-city .dd-trigger {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	height: 42px; padding: 0 14px;
	border: 1px solid #d3d2d0; border-radius: 10px; background: #fff; font-size: 14px; cursor: pointer;
}
.dd-city .dd-trigger:hover,
.dd-city.is-open .dd-trigger { border-color: var(--red, #f00); }
.dd-city .dd-arrow { position: static; transform: none; width: 11px; height: 7px; flex: none; color: #6b6d72; transition: transform .15s ease; }
.dd-city.is-open .dd-arrow { transform: rotate(180deg); }
.dd-city-value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }

.dd-city .dd-panel { min-width: 100%; left: 0; right: auto; max-height: 340px; overflow-y: auto; padding: 8px; }
.dd-city .dd-opt {
	display: flex; align-items: center; justify-content: space-between; gap: 16px;
	width: 100%; padding: 9px 12px; border-radius: 8px;
	color: inherit; text-decoration: none; font-size: 13px;
}
.dd-city .dd-opt:hover { background: rgba(0, 0, 0, .05); }
.dd-city .dd-opt.is-selected { background: rgba(255, 0, 0, .08); color: var(--red, #f00); font-weight: 600; }
.dd-city-price { color: #9aa0a8; font-size: 12px; white-space: nowrap; }
.dd-city .dd-opt.is-selected .dd-city-price { color: var(--red, #f00); }

/* Шапка таблицы: слева статья, затем валюта источника, рубли — последняя колонка */
.cost-table-head {
	display: grid; grid-template-columns: 1fr 120px 150px; gap: 12px 20px;
	margin-top: 18px; padding-bottom: 10px; border-bottom: 1px solid #e6e8ec;
	font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: #9aa0a8;
}
.cost-col-native, .cost-col-rub { text-align: right; }

.cost-row { padding: 15px 0; border-bottom: 1px solid #f0f1f4; }
.cost-row:last-child { border-bottom: 0; }

/* Порядок колонок задаётся здесь, а не в разметке: рубли всегда крайние справа,
   валюта источника — перед ними. */
.cost-row-head { display: grid; grid-template-columns: 1fr 120px 150px; gap: 6px 20px; align-items: baseline; }
.cost-name { font-weight: 600; order: 1; }
.cost-native { order: 2; color: #8a8f98; font-size: 14px; white-space: nowrap; text-align: right; font-variant-numeric: tabular-nums; }
.cost-value { order: 3; font-weight: 700; font-size: 16px; white-space: nowrap; text-align: right; font-variant-numeric: tabular-nums; }
.cost-sub { display: block; font-weight: 400; color: #9aa0a8; font-size: 12px; margin-top: 2px; }

/* Подпункты статьи — компактные капсулы с галочкой: читаются как набор
   включённых услуг и аккуратно переносятся, не разъезжаясь колонками. */
.cost-list {
	margin: 12px 0 0; padding: 0; list-style: none;
	display: flex; flex-wrap: wrap; gap: 8px;
}
.cost-list li {
	display: inline-flex; align-items: center; gap: 6px;
	padding: 6px 12px 6px 10px; border-radius: 999px;
	background: #f2f4f6; color: #4a5058; font-size: 12.5px; line-height: 1.3;
}
.cost-list li::before {
	content: ''; flex: none; width: 14px; height: 14px; border-radius: 50%;
	background: #dfe3e8 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2l2.2 2.2 4.8-5' stroke='%23697079' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/11px no-repeat;
}
.cost-note { margin: 8px 0 0; color: #9aa0a8; font-size: 12px; line-height: 1.5; max-width: 720px; }
.cost-warn { margin: 10px 0 0; padding: 10px 12px; border-radius: 8px; background: rgba(255, 0, 0, .06); color: #b02020; font-size: 12px; line-height: 1.5; }
.cost-age {
	display: inline-flex; align-items: baseline; gap: 8px; margin-top: 10px;
	padding: 8px 14px; border: 1px solid #e6e8ec; border-radius: 8px; font-size: 13px; font-weight: 600;
}
.cost-age span { color: #9aa0a8; font-weight: 400; font-size: 12px; }

.cost-footer { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; padding-top: 18px; border-top: 1px solid #e6e8ec; margin-top: 4px; }
.cost-final { font-size: 17px; }
.cost-final strong { font-size: 24px; }
.cost-disclaimer { margin: 14px 0 0; color: #9aa0a8; font-size: 11px; line-height: 1.55; }

/* ------------------------------------------------- аукционный лист */

.sheet-block { margin-top: 40px; }
.sheet-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px; align-items: start; }
.sheet-block h2 { margin: 0 0 16px; font-size: 22px; }
.sheet-block h3 { margin: 22px 0 10px; font-size: 14px; color: #4a5058; }
.sheet-block h3:first-of-type { margin-top: 0; }
.sheet-image img { width: 100%; border: 1px solid #e6e8ec; border-radius: 12px; cursor: zoom-in; }
.sheet-placeholder { padding: 26px; border: 1px dashed #d5d8dd; border-radius: 12px; color: #8a8f98; font-size: 14px; }
.sheet-placeholder p { margin: 0 0 10px; }
.sheet-rating strong, .sheet-auction strong { color: #1b2430; }
.sheet-rating span { color: #9aa0a8; font-size: 13px; }

.legend-group { margin-bottom: 16px; }
.legend-group-title { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .4px; color: #9aa0a8; margin-bottom: 6px; }
.legend-list { margin: 0; }
.legend-row { display: grid; grid-template-columns: 46px 1fr; gap: 12px; padding: 6px 0; border-bottom: 1px dotted #e6e8ec; }
.legend-row dt { margin: 0; font-weight: 700; font-size: 13px; }
.legend-row dd { margin: 0; font-size: 13px; color: #4a5058; }
.legend-row.is-current { background: rgba(255, 0, 0, .05); border-radius: 6px; padding-left: 8px; margin-left: -8px; }
.legend-row.is-current dt { color: var(--red, #f00); }

/* Часть расшифровки (схема кузова + салон) свёрнута под «Показать все» */
.legend-more { display: none; }
.legend-more.is-open { display: block; }
.legend-toggle {
	display: inline-flex; align-items: center; gap: 8px; margin-top: 14px;
	padding: 0; border: 0; background: none; cursor: pointer;
	color: var(--red, #f00); font: inherit; font-size: 14px; font-weight: 600;
}
.legend-toggle svg { width: 11px; height: 7px; transition: transform .15s ease; }
.legend-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }

/* ---------------------------------------------------- комплектация */

.equip-block { margin-top: 40px; }
.equip-block h2 { margin: 0 0 18px; font-size: 22px; }
.equip-grid { columns: 2; column-gap: 32px; }
.equip-section { break-inside: avoid; margin-bottom: 14px; border: 1px solid #e6e8ec; border-radius: 12px; overflow: hidden; }
.equip-head {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	width: 100%; padding: 14px 16px; border: 0; background: #fafbfc;
	font: inherit; font-weight: 600; text-align: left; cursor: pointer;
}
.equip-head svg { width: 11px; height: 7px; flex: none; transition: transform .15s ease; }
.equip-section.is-open .equip-head svg { transform: rotate(180deg); }
.equip-body { display: none; padding: 4px 16px 12px; }
.equip-section.is-open .equip-body { display: block; }
.equip-row { display: flex; justify-content: space-between; gap: 16px; padding: 8px 0; border-bottom: 1px solid #f4f5f7; }
.equip-row:last-child { border-bottom: 0; }
.equip-key { color: #8a8f98; font-size: 13px; flex: 1 1 55%; }
.equip-val { font-size: 13px; text-align: right; flex: 1 1 45%; }

/* Характеристики из одного значения не прячем в аккордеон: они выкладываются
   плитками «подпись сверху — значение снизу», перечисления показываем тегами. */
.equip-facts-title {
	margin: 26px 0 12px; font-size: 12px; font-weight: 700;
	text-transform: uppercase; letter-spacing: .4px; color: #9aa0a8;
}
/* колонки, а не grid: значения разной длины укладываются без пустот */
.equip-facts { columns: 258px; column-gap: 10px; }
.equip-fact {
	break-inside: avoid; margin-bottom: 10px; padding: 12px 14px;
	border: 1px solid #eef0f3; border-radius: 12px; background: #fafbfc;
}
.equip-fact-key { display: block; margin-bottom: 6px; color: #8a8f98; font-size: 12px; line-height: 1.35; }
.equip-fact-val { display: block; font-size: 13px; line-height: 1.5; }
.equip-fact-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.equip-tag {
	padding: 3px 9px; border: 1px solid #e6e8ec; border-radius: 999px;
	background: #fff; font-size: 12px; line-height: 1.4; color: #4a5058;
}

/* ------------------------------------ белая подложка блоков карточки

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

.car-page-price,
.car-breakdown,
.car-specs-card,
.car-page-specs,
.sheet-block,
.equip-block {
	background: #fff;
	border: 1px solid #e6e8ec;
	border-radius: 16px;
}
.car-page-specs,
.sheet-block,
.equip-block { padding: 24px 28px; }

/* Внутренние карточки на белой секции обходятся без второй рамки — её роль
   берут на себя отступы и разделители строк. */
.car-page-specs .car-specs-card { border: 0; padding: 0; }
.car-specs-grid { gap: 28px; }

.sheet-placeholder { background: #fbfbfc; }

@media (max-width: 767px) {
	.car-page-specs,
	.sheet-block,
	.equip-block { padding: 16px 14px; }
}

/* ----------------------------------------------- лайтбокс и модалка */

/* Свой лайтбокс (класс .ab-lb, чтобы не конфликтовать со старым .ab-lightbox) */
.ab-lb {
	position: fixed; inset: 0; z-index: 9000;
	display: none; align-items: center; justify-content: center;
	padding: 24px; background: rgba(10, 12, 16, .92); cursor: zoom-out;
}
.ab-lb.is-open { display: flex; }
.ab-lb-img { max-width: 94vw; max-height: 94vh; object-fit: contain; border-radius: 6px; }

.ab-modal {
	position: fixed; inset: 0; z-index: 9100;
	display: flex; align-items: center; justify-content: center; padding: 20px;
	background: rgba(10, 12, 16, .6);
}
.ab-modal-box {
	position: relative; width: min(460px, 100%); max-height: 86vh; overflow-y: auto;
	padding: 26px 28px; border-radius: 14px; background: #fff;
}
.ab-modal-box h3 { margin: 0 0 4px; font-size: 20px; }
.ab-modal-native { margin: 0 0 14px; color: #8a8f98; font-size: 13px; }
.ab-modal-close { position: absolute; top: 10px; right: 14px; border: 0; background: none; font-size: 26px; line-height: 1; color: #9aa0a8; cursor: pointer; z-index: 2; }
.ab-modal-loading { margin: 0; padding: 20px 0; color: #8a8f98; text-align: center; }

/* Широкая модалка ценообразования */
.ab-modal-wide { width: min(760px, 100%); padding: 36px 40px 32px; }
.ab-modal-head {
	display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; flex-wrap: wrap;
	padding-bottom: 18px; border-bottom: 1px solid #e6e8ec;
}
.ab-modal-car { margin: 0; color: #6b6d72; font-size: 14px; }
.ab-modal-car span { color: #9aa0a8; }
.ab-modal-sum { text-align: right; }
.ab-modal-total-value { font-size: 28px; font-weight: 800; color: var(--red, #f00); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ab-modal-total-note { margin-top: 2px; color: #8a8f98; font-size: 12px; max-width: 260px; }

.ab-modal-city { display: flex; align-items: center; gap: 12px; margin: 18px 0 6px; flex-wrap: wrap; }
.ab-modal-city-label { font-size: 13px; color: #6b6d72; }
.ab-modal-city .dd-city { min-width: 240px; }

.ab-modal-table { width: 100%; border-collapse: collapse; font-size: 14px; margin-top: 10px; }
.ab-modal-table th {
	padding: 8px 0; border-bottom: 1px solid #e6e8ec;
	font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .4px; color: #9aa0a8; text-align: left;
}
/* заголовки колонок валют — по правому краю, чтобы знаки ¥/₽ стояли над числами */
.ab-modal-table th.ab-modal-native-col,
.ab-modal-table th.ab-modal-rub { text-align: right; }
.ab-modal-table td { padding: 11px 0; border-bottom: 1px solid #f4f5f7; vertical-align: baseline; }
.ab-modal-table tr:last-child td { border-bottom: 0; }
.ab-modal-name { padding-right: 14px; }
.ab-modal-native-col { width: 120px; text-align: right; color: #8a8f98; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ab-modal-rub { width: 140px; text-align: right; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }

/* Подсказка со знаком вопроса рядом со статьёй */
.ab-modal-q {
	display: inline-flex; align-items: center; justify-content: center;
	width: 16px; height: 16px; margin-left: 6px; vertical-align: 1px;
	border: 1px solid #d3d2d0; border-radius: 50%;
	font-size: 10px; color: #9aa0a8; cursor: help; user-select: none;
}
.ab-modal-q:hover, .ab-modal-q:focus { border-color: var(--red, #f00); color: var(--red, #f00); outline: none; }

.ab-modal-rates {
	display: flex; flex-wrap: wrap; gap: 6px 24px;
	margin-top: 16px; padding: 12px 14px; border-radius: 10px; background: #f5f6f7;
	font-size: 12px; color: #6b6d72;
}
.ab-modal-rates strong { color: #1b2430; font-variant-numeric: tabular-nums; }

.ab-modal-warn { margin: 12px 0 0; padding: 10px 12px; border-radius: 8px; background: rgba(255, 0, 0, .06); color: #b02020; font-size: 12px; line-height: 1.5; }
.ab-modal-total { margin-top: 14px; font-size: 15px; }
.ab-modal-total strong { font-size: 20px; }
.ab-modal-note { margin: 12px 0 0; color: #9aa0a8; font-size: 11px; line-height: 1.45; }

@media (max-width: 640px) {
	.ab-modal-wide { padding: 26px 18px 22px; }
	.ab-modal-head { flex-direction: column; gap: 12px; }
	.ab-modal-sum { text-align: left; }
	.ab-modal-native-col { width: 90px; }
	.ab-modal-rub { width: 110px; }
	.ab-modal-city select { min-width: 0; width: 100%; }
}

/* -------------------------------------------------- главная страница */

.front-catalogs { max-width: 1240px; margin: 0 auto; padding: 40px 20px 60px; }
.front-catalogs h1 { font-size: 32px; margin: 0 0 8px; }
.front-catalogs > p { color: #8a8f98; margin: 0 0 28px; }
.front-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; }
.front-card {
	display: block; padding: 26px; border: 1px solid #e6e8ec; border-radius: 14px;
	text-decoration: none; color: inherit; transition: border-color .15s, transform .15s;
}
.front-card:hover { border-color: var(--red, #f00); transform: translateY(-2px); }
.front-card h2 { margin: 0 0 6px; font-size: 20px; }
.front-card-count { color: var(--red, #f00); font-weight: 700; font-size: 15px; }
.front-card-sub { color: #8a8f98; font-size: 13px; margin-top: 6px; }

@media (max-width: 1100px) {
	.car-card { grid-template-columns: 260px 210px 1fr 260px; }
}

@media (max-width: 900px) {
	.car-page-grid { grid-template-columns: 1fr; }
	.car-page-side { position: static; }
	.sheet-grid { grid-template-columns: 1fr; gap: 24px; }
	.equip-grid { columns: 1; }
	.cost-row-head { grid-template-columns: 1fr auto; }
	.cost-native { grid-column: 2; text-align: right; }
}

/* Знак характеристики и полоса прокрутки фото — только мобильная карточка.
   На десктопе характеристики идут таблицей с подписями, а фото листается
   наведением, поэтому по умолчанию оба элемента выключены. */
.spec-ico { display: none; width: 15px; height: 15px; flex: none; color: #9aa0a8; }
.car-scroll { display: none; }

/* ------------------------------------------- мобильный список карточек

   Карточка разворачивается в одну колонку: фотография во всю ширину,
   под ней название с ценой источника, характеристики строками «подпись —
   значение», внизу итоговая цена и кнопки на всю ширину. */

@media (max-width: 767px) {

	/* --- hero и панель фильтров: боковые отступы задаёт hero, панель и вкладки
	   над ней тянутся на всю его ширину и выравниваются друг с другом --- */
	/* верхний отступ поднят вслед за десктопом: вкладки не липнут к шапке */
	.hero { padding: 30px 14px 28px; }
	.filter { margin: 0; padding: 16px 14px 14px; border-radius: 16px; }

	/* все поля в одну колонку. flex-column вместо grid — надёжнее переопределяет
	   базовую desktop-сетку repeat(6,1fr) и даёт всем полям одинаковую ширину. */
	/* Перенос, а не колонка: почти все поля идут по одному в строку, но паре
	   «год + до 160 л.с.» нужно уместиться вдвоём, а в колонке это невозможно.
	   Доли десктопной раскладки снимаем явно — иначе они достаются полям как есть. */
	.filter .filter-grid { display: flex !important; flex-wrap: wrap; gap: 12px; }
	.filter .filter-grid > .f-item,
	.filter .filter-grid > .f-half,
	.filter .filter-grid > .f-sm,
	.filter .filter-grid > .f-row { flex: 0 0 100%; width: auto; min-width: 0; }
	.filter .filter-grid > .f-m-half { flex: 0 0 calc(50% - 6px); }

	/* В половинном поле на 154px подписи «Год от» и «до 160 л.с.» в обычном
	   кегле не помещаются и обрезаются многоточием. Уменьшаем шрифт и поджимаем
	   переключатель — текст встаёт целиком. */
	/* Кегль подписи не переопределяем: у полей со списком всегда стоит значение
	   («Любой год»), поэтому подпись у них в поднятом состоянии — 9,5px, ровно
	   как у «Цена от» и «Объем от», где значение тоже проставлено. Прежний жёсткий
	   12,5px делал «Год от» и «до» крупнее соседей. */
	.filter .f-m-half .toggle-label { font-size: 14px; }

	/* Значение в полях со списком («Любой год», «2 000») рядом с подписью в 12,5px
	   выглядело крупным. Уменьшаем масштабом, а не шрифтом: вычисленный кегль
	   обязан остаться 16px, иначе iOS зумит страницу при фокусе и её потом можно
	   двигать вбок. Ширину возвращаем обратной долей, чтобы поле не сузилось. */
	.filter .dd-pf .dd-input {
		transform: scale(.875);
		transform-origin: left center;
		width: 114.3%;
	}
	/* у .dd-pf стрелка скрыта, а место под неё резервировалось — здесь оно лишнее,
	   как и запас под многоточие: подпись и так уже уменьшена */
	.filter .f-m-half .dd-pf .dd-trigger { padding: 0 8px 0 10px; }
	.filter .f-m-half .dd-trigger label { max-width: calc(100% - 12px); }
	.filter .f-m-half .toggle-field { padding: 0 6px 0 10px; gap: 6px; }
	.filter .f-m-half .toggle-switch { width: 40px; height: 23px; }
	.filter .f-m-half .toggle-switch::after { width: 17px; height: 17px; }
	.filter .f-m-half input:checked ~ .toggle-switch::after { transform: translateX(17px); }
	.filter .f-row.f-full { display: flex; flex-direction: column; gap: 12px; }
	/* Строка на всю ширину, помеченная как «расширенная» (у Японии это оценки),
	   до нажатия «Расширенный» должна быть скрыта. Правило выше перебивало общее
	   .f-extra{display:none} по весу селектора, и строка висела всегда. */
	.filter .f-row.f-full.f-extra { display: none; }
	.filter.is-expanded .f-row.f-full.f-extra { display: flex; }
	.filter .pair-box { display: flex; gap: 0; }
	.filter .pair-box .pf { flex: 1 1 50%; min-width: 0; }
	.dd-pf .dd-panel { min-width: 0; }
	.f-checkrow { flex-direction: column; align-items: stretch; gap: 12px; }
	.check-track { flex-wrap: wrap; }

	.filter-footer { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
	.btn-submit { grid-column: 1 / -1; }

	/* --- список карточек в стиле tokito: фото листается вбок свайпом,
	   компоновка компактная по высоте --- */
	.catalog-wrap { padding: 18px 12px 50px; }
	.catalog-list { gap: 14px; }

	/* Рамки у карточки нет: фото лежит вплотную к её краю, и светлая линия
	   читалась бы именно как рамка вокруг снимка. Белую карточку на тёмном
	   градиенте страницы и без обводки видно. */
	.car-card {
		display: block; padding: 0; overflow: hidden;
		background: #fff; border: 0; border-radius: 24px;
	}

	/* медиа: горизонтальный скролл-снап вместо hover-слайдера. Фотополоса идёт от
	   края до края карточки — никакой белой рамки вокруг снимков; верхние углы
	   первого фото обрезает сама карточка (overflow:hidden + её скругление).
	   В экран телефона входят два фото целиком: слайд — половина ширины минус
	   половина зазора между ними. Базовый слайдер position:absolute (слои друг
	   на друге) возвращаем в поток, иначе .car-media схлопывается. */
	.car-media { width: 100%; height: auto; border-radius: 0; position: relative; }
	.car-card-slider {
		position: relative; inset: auto;
		display: flex; gap: 5px; padding: 0;
		overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding: 0;
		-webkit-overflow-scrolling: touch; scrollbar-width: none;
	}
	.car-card-slider::-webkit-scrollbar { display: none; }
	.car-card-slide {
		position: static; flex: 0 0 calc(50% - 2.5px); width: calc(50% - 2.5px); aspect-ratio: 4 / 3;
		scroll-snap-align: start; opacity: 1; border-radius: 0; overflow: hidden;
	}
	.car-card-slide:first-child { margin-left: 0; }
	.car-card-slide .car-photo { width: 100%; height: 100%; object-fit: cover; display: block; }
	.car-card-hover-zones { display: none; }             /* hover-навигация не нужна на тач-экране */

	/* Полоски под слайдером, а не поверх фото.
	   Ширину здесь не задаём: базовое .car-dots span из style.css растягивает
	   полоски (flex:1 1 0), width всё равно не сработает — а border-radius:50%
	   на растянутой полоске превращал её в вытянутую каплю. Поэтому только
	   форма и цвет: одинаковые полоски со скруглёнными торцами, активная красная.
	   Тень тоже снимаем — она была нужна поверх фото, на белой карточке грязнит. */
	.car-dots {
		position: static; margin: 8px 0 0; z-index: 2;
		display: flex; gap: 5px; padding: 0 10px; pointer-events: none;
	}
	.car-dots span { height: 4px; border-radius: 999px; background: #dfe3e8; box-shadow: none; }
	.car-dots span.active { background: var(--red, #f00); }

	/* В горизонтальной карточке фото видно сразу два, и «загорелись две полоски из
	   шести» читается как загадка. Вместо полосок — полоса прокрутки: серая дорожка
	   во всю ширину и красный ползунок, ширина которого равна видимой части ленты,
	   а положение — прогрессу листания. Сразу видно, сколько осталось. */
	.car-dots > span:not(.car-scroll) { display: none; }
	.car-scroll { display: block; position: relative; flex: 1 1 auto; overflow: hidden; }
	.car-scroll i {
		position: absolute; top: 0; bottom: 0; left: 0; width: 100%;
		border-radius: 999px;
		/* ползунок на тон темнее дорожки: он служебный указатель, а не акцент —
		   красный на нём перетягивал внимание с самой карточки */
		background: #b9c0c9;
	}
	.car-badge { top: 18px; left: 18px; z-index: 3; }
	.car-nophoto { aspect-ratio: 4 / 3; margin: 0 10px; border-radius: 12px; }

	/* название сразу под фото */
	.car-info { padding: 10px 14px 6px; border: 0; }
	.car-title { font-size: 16px; font-weight: 700; }
	.car-year { color: #8a8f98; font-size: 12px; margin-top: 1px; }
	/* Цену в валюте страны покупки на телефоне не показываем ни в одном из видов:
	   рядом с рублёвой ценой «за растаможенный со всеми расходами» она путает,
	   а места в карточке мало. На десктопе блок остаётся. */
	.car-auction-price { display: none; }
	.car-lot-link { font-size: 12px; }

	/* Характеристики — сетка «знак + значение» в две колонки.
	   Подписей нет: «10 000 км» и «151 л.с.» называют себя единицами сами, а знак
	   слева считывается быстрее слова и держит колонки выровненными. Исключение —
	   номер кузова: «KSP130» без подписи не прочитать. */
	.car-specs { padding: 8px 14px 10px; border: 0; }
	.car-specs-table {
		display: grid; grid-template-columns: 1fr 1fr; gap: 7px 12px;
		font-size: 12.5px; line-height: 1.3; color: #3a4048;
	}
	.car-specs .spec-row {
		display: flex; align-items: center; gap: 7px; min-width: 0;
		padding: 0; border: 0; white-space: nowrap;
	}
	.car-specs .spec-ico { display: block; }
	.car-specs .spec-label { display: none; color: #8a8f98; font-size: 12.5px; font-weight: 400; }
	.car-specs .spec-frame_code .spec-label { display: inline; }
	/* «Номер кузова KSP130» в половину ширины не встаёт и обрезался многоточием —
	   единственная строка с подписью занимает обе колонки */
	.car-specs .spec-frame_code { grid-column: 1 / -1; }
	.car-specs .spec-label::after { content: ' '; }
	.car-specs .spec-value {
		color: #1b2430; font-size: 12.5px; font-weight: 600; text-align: left;
		overflow: hidden; text-overflow: ellipsis;
	}
	/* запятые нужны были сплошной строке, в сетке они лишние */
	.car-specs .spec-row .spec-value::after { content: none; }
	.spec-rate { margin-top: 6px; display: inline-flex; }

	/* цена под ключ + компактные кнопки */
	.car-price-box { padding: 8px 14px 14px; border: 0; text-align: left; }
	.car-price-value { font-size: 21px; font-weight: 800; line-height: 1.1; }
	.car-price-note { font-size: 11px; color: #8a8f98; margin-top: 2px; }
	.car-price-actions { display: grid; grid-template-columns: 1fr; gap: 6px; margin-top: 10px; }
	.car-price-actions .btn-outline,
	.car-price-actions .btn-solid { width: 100%; text-align: center; padding: 9px 12px; font-size: 13px; }
	/* «Заказать автомобиль» — целевое действие карточки, у него запас по высоте */
	.car-price-actions .btn-solid { padding: 14px 12px; }

	/* детальная страница */
	.car-page { padding: 16px 12px 48px; }
	.car-page-title { font-size: 22px; }
	.cost-block { padding: 18px 14px; }
	.cost-block h2, .sheet-block h2, .equip-block h2 { font-size: 18px; }
	.cost-total-line { flex-direction: column; align-items: flex-start; gap: 6px; }
	.cost-total-line > span { max-width: 100%; }
	.cost-table-head { grid-template-columns: 1fr auto; }
	.cost-table-head .cost-col-native { display: none; }
	.cost-row-head { grid-template-columns: 1fr auto; gap: 2px 12px; }
	.cost-native { grid-column: 1; grid-row: 2; text-align: left; }
	.cost-footer { flex-direction: column; align-items: stretch; }
	.cost-footer .btn-solid { text-align: center; padding: 14px; }
	.car-thumb { width: 68px; height: 52px; }
	.legend-row { grid-template-columns: 40px 1fr; }
}

/* ============================================ вид выдачи: список / плитка

   Выдача показывается двумя способами: «списком» — широкая горизонтальная
   карточка (базовая вёрстка, ниже её не трогаем) и «плиткой» — вертикальная
   карточка товара. Способ хранится в data-view на <html> и выставляется до
   первой отрисовки, поэтому раскладка не мигает. Правила плитки перебивают и
   десктопную базу, и мобильный блок за счёт лишнего атрибута в селекторе —
   на порядок объявлений здесь ничего не завязано. */

.catalog-tools { display: flex; align-items: center; gap: 12px; }

.view-switch {
	display: flex; gap: 2px; padding: 3px;
	border: 1px solid rgba(255, 255, 255, .18); border-radius: 12px;
	background: rgba(255, 255, 255, .12);
}
.view-btn {
	display: flex; align-items: center; justify-content: center;
	width: 32px; height: 32px; padding: 0;
	border: 0; border-radius: 9px; background: none; cursor: pointer;
	color: rgba(255, 255, 255, .72); transition: background .15s ease, color .15s ease;
}
.view-btn svg { width: 15px; height: 15px; fill: currentColor; }
.view-btn:hover { color: #fff; }
.view-btn.is-on { background: #fff; color: #17181a; }

/* --- плитка --- */

[data-view="grid"] .catalog-list {
	display: grid; grid-template-columns: repeat(auto-fill, minmax(258px, 1fr));
	gap: 18px; align-items: stretch;
}
[data-view="grid"] .car-card {
	display: flex; flex-direction: column; padding: 0; overflow: hidden;
	border: 0; border-radius: 18px; background: #fff;   /* см. выше: обводка = рамка вокруг фото */
}
/* «ничего не найдено» — сообщение, а не карточка: занимает всю строку сетки */
[data-view="grid"] .catalog-empty { grid-column: 1 / -1; }

/* фото на всю ширину карточки, полоски листания — поверх снимка */
[data-view="grid"] .car-media { width: 100%; height: auto; aspect-ratio: 4 / 3; padding: 0; border-radius: 0; }
[data-view="grid"] .car-card-slider { padding: 0; gap: 0; }
[data-view="grid"] .car-card-slide { flex: 0 0 100%; width: 100%; border-radius: 0; }
[data-view="grid"] .car-nophoto { height: auto; aspect-ratio: 4 / 3; margin: 0; border-radius: 0; }
[data-view="grid"] .car-badge { top: 10px; left: 10px; }
[data-view="grid"] .car-dots { position: absolute; left: 8px; right: 8px; bottom: 8px; margin: 0; padding: 0; }
[data-view="grid"] .car-dots span { height: 3px; background: rgba(255, 255, 255, .6); box-shadow: 0 0 2px rgba(0, 0, 0, .35); }
[data-view="grid"] .car-dots span.active { background: var(--red, #f00); }

/* название, год и цена в стране покупки */
[data-view="grid"] .car-info { display: block; padding: 12px 14px 0; border: 0; }
[data-view="grid"] .car-title { font-size: 15px; line-height: 1.2; }
[data-view="grid"] .car-year { font-size: 11.5px; margin-top: 2px; }
/* цена в стране покупки на плитке не нужна — карточка показывает итог под ключ */
[data-view="grid"] .car-auction-price { display: none; }
[data-view="grid"] .car-lot-link { max-width: 100%; margin-top: 8px; padding: 0; border: 0; font-size: 11.5px; line-height: 1.35; }

/* Характеристики — сетка «знак + значение» в две колонки, как в мобильной
   горизонтальной карточке: подписи не нужны (пробег, объём, мощность и коробка
   называют себя единицами), а знак слева считывается быстрее слова. На узкой
   плитке телефона знаки не помещаются — там ниже возвращается сплошная строка. */
[data-view="grid"] .car-specs { display: block; padding: 10px 14px 0; border: 0; }
[data-view="grid"] .car-specs-table {
	display: grid; grid-template-columns: 1fr 1fr; gap: 7px 10px;
	font-size: 12px; line-height: 1.3; color: #3a4048;
}
[data-view="grid"] .car-specs .spec-row {
	display: flex; align-items: center; gap: 6px; min-width: 0;
	padding: 0; border: 0; white-space: nowrap; font-size: 12px;
}
[data-view="grid"] .car-specs .spec-ico { display: block; width: 14px; height: 14px; }
[data-view="grid"] .car-specs .spec-label { display: none; color: #8a8f98; font-size: 12px; font-weight: 400; }
[data-view="grid"] .car-specs .spec-label::after { content: ' '; }
/* номер кузова («ZRE212» у японского каталога) сам себя не называет — ему подпись
   оставляем, и строка с ней занимает обе колонки: в половину ширины не встаёт */
[data-view="grid"] .car-specs .spec-frame_code .spec-label { display: inline; }
[data-view="grid"] .car-specs .spec-frame_code { grid-column: 1 / -1; }
[data-view="grid"] .car-specs .spec-value {
	color: #1b2430; font-size: 12px; font-weight: 600; text-align: left;
	overflow: hidden; text-overflow: ellipsis;
}
/* запятые нужны были сплошной строке, в сетке они лишние */
[data-view="grid"] .car-specs .spec-row .spec-value::after { content: none; }
/* год уже стоит под названием — в характеристиках плитки он лишний */
[data-view="grid"] .car-specs .spec-year { display: none; }
[data-view="grid"] .spec-rate { margin-top: 8px; padding: 4px 8px; font-size: 11px; }

/* цена под ключ прижата к низу — у карточек в ряду кнопки на одной линии */
[data-view="grid"] .car-price-box { margin-top: auto; padding: 10px 14px 14px; border: 0; text-align: left; }
[data-view="grid"] .car-price-value { font-size: 20px; }
/* Пояснение к цене на плитке скрыто. Прячем только ту подпись, что идёт следом
   за суммой: у машин без рублёвой цены в этом же блоке лежит «Стоимость уточните
   у менеджера» — она без соседа сверху и остаётся видимой. */
[data-view="grid"] .car-price-value + .car-price-note { display: none; }
[data-view="grid"] .car-price-actions { display: grid; grid-template-columns: 1fr; gap: 6px; margin-top: 10px; }
[data-view="grid"] .car-price-actions .btn-outline,
[data-view="grid"] .car-price-actions .btn-solid {
	width: 100%; align-self: stretch; padding: 10px 12px; font-size: 12px; text-align: center;
}

@media (max-width: 767px) {
	/* счётчик и панель инструментов встают в две строки — переключатель слева,
	   сортировка справа, обе на всю ширину экрана */
	/* Панель управления выдачей липнет к верху экрана. Липким контейнером для неё
	   должна быть вся колонка каталога, а не короткая строка шапки, — поэтому
	   обёртка .catalog-header своего бокса не создаёт (display:contents), и счётчик
	   с панелью становятся прямыми детьми .catalog-wrap. Подложка — тон верха
	   страничного градиента: под ней проезжают карточки. */
	.catalog-header { display: contents; }
	.catalog-count { margin: 0 0 10px; }
	.catalog-tools {
		position: sticky; top: 0; z-index: 6;
		width: auto; margin: 0 -12px 14px; padding: 8px 12px;
		justify-content: space-between; gap: 10px;
		background: rgba(46, 45, 50, .92);
		-webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
	}
	.dd-sort { min-width: 0; flex: 1 1 auto; max-width: 240px; }
	.view-btn { width: 36px; height: 36px; }   /* палец, а не курсор */

	/* плитка на телефоне — по две в ряд */
	[data-view="grid"] .catalog-list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
	/* В плитке фото показывается по одному — там полоски понятнее полосы прокрутки,
	   а знаки характеристик в 150px ширины не помещаются рядом со значениями */
	[data-view="grid"] .car-dots > span:not(.car-scroll) { display: block; }
	[data-view="grid"] .car-scroll { display: none; }
	[data-view="grid"] .car-specs .spec-ico { display: none; }
	[data-view="grid"] .car-card { border-radius: 14px; }
	[data-view="grid"] .car-info { padding: 9px 10px 0; }
	[data-view="grid"] .car-title { font-size: 12.5px; }
	[data-view="grid"] .car-year { font-size: 10.5px; }
	[data-view="grid"] .car-lot-link { display: none; }        /* комплектация в такую ширину не встаёт */
	/* На плитке в пол-экрана сетка «знак + значение» не встаёт — характеристики
	   возвращаются сплошной строкой через запятую, как было. */
	[data-view="grid"] .car-specs { padding: 6px 10px 0; }
	[data-view="grid"] .car-specs-table { display: block; line-height: 1.5; }
	[data-view="grid"] .car-specs .spec-row { display: inline; white-space: nowrap; }
	/* правило выше вернуло бы в строку и год — а он уже стоит под названием */
	[data-view="grid"] .car-specs .spec-year { display: none; }
	[data-view="grid"] .car-specs-table,
	[data-view="grid"] .car-specs .spec-row,
	[data-view="grid"] .car-specs .spec-value { font-size: 11px; }
	[data-view="grid"] .car-specs .spec-row:not(:last-child) .spec-value::after { content: ','; color: #b9bdc2; font-weight: 400; }
	/* На узкой плитке остаются четыре значения — остальное не помещается.
	   Счёт идёт со второй строки: первая — год, он скрыт во всех плитках. */
	[data-view="grid"] .car-specs .spec-row:nth-child(n+6) { display: none; }
	[data-view="grid"] .car-specs .spec-row:nth-child(5) .spec-value::after { content: none; }
	[data-view="grid"] .spec-rate { margin-top: 6px; padding: 3px 7px; font-size: 10px; }
	[data-view="grid"] .car-price-box { padding: 8px 10px 10px; }
	[data-view="grid"] .car-price-value { font-size: 16px; }
	[data-view="grid"] .car-price-note { font-size: 10px; }
	/* второе действие на плитке шириной в пол-экрана лишнее: расчёт открывается
	   с карточки автомобиля, а здесь важнее целевая кнопка */
	[data-view="grid"] .car-price-actions .btn-outline { display: none; }
	[data-view="grid"] .car-price-actions .btn-solid { padding: 9px 8px; font-size: 11.5px; }
}
