/* ============================================================
   SIENA — главная страница
   Баннер: структура и CSS перенесены с enermetall.ru (наш же проект).
   Плитки каталога: структура с stanki.ru (frontCatalog).
   Шрифты: Inter (enermetall) + Montserrat (stanki).
   ============================================================ */

@import url("fonts/shrifty.css");

/* Палитра снята с stanki.ru: синий #0d4fc2, оранжевые кнопки действия,
   голубая и тёплая плитки каталога, серые тексты и линии. */
:root {
  --sin:       #0d4fc2;
  --sin-t:     #0a3c94;
  --golub:     #4ebeee;
  --sin-svet:  #e4edf8;
  --oranzh:    #ee6931;
  --oranzh-t:  #d9531c;
  /* Зелёный кнопок действия. Три остановки градиента + два состояния — держим
     здесь, а не литералами по файлу: цвет стоит на кнопках всех видов и в двух
     таблицах стилей, и подбирать его иначе пришлось бы в шести местах сразу. */
  --kn-zel-1:  #3ec46f;   /* светлый край градиента */
  --kn-zel-2:  #1ea64d;   /* основной */
  --kn-zel-3:  #14773a;   /* тёмный край */
  --kn-zel-1h: #4dd57e;   /* те же три при наведении */
  --kn-zel-2h: #20b355;
  --kn-zel-3h: #0f6330;
  --kn-zel-ten: 30,166,77;   /* для rgba() тени под кнопкой */
  --grafit:    #25282b;
  --grafit-2:  #33373b;
  --zhelt:     #0d4fc2;   /* совместимость со старой разметкой: акцент = синий */
  --zhelt-t:   #0a3c94;
  --tekst:     #25282b;
  --tekst-2:   #4b4f59;
  --tekst-3:   #7e838a;   /* из макета Figma */
  --linia:     #dce1e5;   /* из макета Figma */
  /* серой заливки (#f0f2f4) на сайте нет: фон везде белый, блоки держатся на
     рамках --linia. Холодный тон остался только для наведения мышью. */
  --fon-hol:   #f3f6fc;
  --fon-tepl:  #fff0e0;
  --zelen:     #107c03;
  --radius:    10px;
  --radius-s:  5px;
  --shirina:   1720px;   /* широкий контейнер: на больших экранах сайт не жмётся к центру */
  --t:         .2s ease-in-out;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: Inter, system-ui, Arial, sans-serif;
  font-size: 16px;
  line-height: 1.55;
  color: var(--tekst);
  background: #fff;
  -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; border: 0; background: none; color: inherit; }
:focus-visible { outline: 2px solid var(--sin); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; } }

h1, h2, h3, h4 { font-family: Montserrat, Inter, sans-serif; margin: 0; letter-spacing: -.02em; }
h2 { font-size: clamp(26px, 3vw, 38px); line-height: 1.15; }
h3 { font-size: 19px; line-height: 1.25; }

.obolochka { width: 100%; max-width: var(--shirina); margin: 0 auto; padding: 0 clamp(20px, 2.6vw, 44px); }
/* только вертикальные поля: иначе class="obolochka sekciya" на одном элементе
   затирает горизонтальные поля контейнера и блок вылезает за края экрана */
.sekciya { padding-top: 64px; padding-bottom: 64px; }
/* фон у секций белый: блоки разделяет тонкая линия, а не серая заливка */
.sekciya--fon { background: #fff; border-top: 1px solid var(--linia); }
.sekciya--temnaya { background: var(--sin); color: #eef4fc; }

.shapka-sekcii { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 30px; }
.nadzagolovok {
  display: inline-block; font-family: Montserrat, sans-serif; font-size: 13px; font-weight: 700;
  letter-spacing: .14em; text-transform: uppercase; color: var(--tekst-3); margin-bottom: 10px;
}
.sekciya--temnaya .nadzagolovok { color: #b9d5ff; }
.podpis-sekcii { margin: 10px 0 0; color: var(--tekst-2); max-width: 68ch; }
.ssylka-vse { color: var(--sin); font-weight: 600; white-space: nowrap; border-bottom: 2px solid var(--oranzh); padding-bottom: 2px; }
.ssylka-vse:hover { color: var(--tekst-2); }

/* ---------- кнопки ---------- */
.knopka {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  height: 52px; padding: 0 28px; border-radius: var(--radius-s);
  font-weight: 600; font-size: 15px; transition: background var(--t), color var(--t), border-color var(--t);
}
/* Главная кнопка действия. Была оранжевой «как на stanki.ru» — заказчик решил
   уйти в зелёный, перелив и белый текст оставить. Имя класса `--zhelt` осталось
   от самой первой вёрстки и давно ничего не значит: менять его пришлось бы в
   четырёх сборщиках и 722 местах разметки, а пользы ноль. */
.knopka--zhelt {
  background: linear-gradient(135deg, var(--kn-zel-1) 0%, var(--kn-zel-2) 52%, var(--kn-zel-3) 100%);
  color: #fff; box-shadow: 0 6px 16px rgba(var(--kn-zel-ten), .30);
}
.knopka--zhelt:hover {
  background: linear-gradient(135deg, var(--kn-zel-1h) 0%, var(--kn-zel-2h) 52%, var(--kn-zel-3h) 100%);
  box-shadow: 0 8px 22px rgba(var(--kn-zel-ten), .40);
}
.knopka--zhelt:active { box-shadow: 0 3px 10px rgba(var(--kn-zel-ten), .30); }
.knopka--temn {
  background: linear-gradient(135deg, #1a68e0 0%, var(--sin) 52%, #093a8f 100%);
  color: #fff; box-shadow: 0 6px 16px rgba(13,79,194,.26);
}
.knopka--temn:hover {
  background: linear-gradient(135deg, #2a77ec 0%, #0e56d0 52%, #072f78 100%);
  box-shadow: 0 8px 22px rgba(13,79,194,.34);
}
.knopka--temn:active { box-shadow: 0 3px 10px rgba(13,79,194,.28); }
/* «Позвонить» в баннере — вторичное действие рядом с главной зелёной кнопкой.
   Раньше класс повторял градиент `--zhelt` один в один, и на первом экране
   стояли два одинаковых зелёных пятна без всякой иерархии. Теперь это стекло:
   полупрозрачный белый с размытием читается на фотофоне увереннее, чем чистый
   контур, и не спорит с главной кнопкой. Используется только в слайдах
   баннера (3 места), на светлых секциях этого класса нет. */
.knopka--zelen {
  background: rgba(255,255,255,.10);
  color: #fff;
  border: 1px solid rgba(255,255,255,.40);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}
.knopka--zelen:hover {
  background: rgba(255,255,255,.18);
  border-color: #fff;
}
.knopka--zelen:active { background: rgba(255,255,255,.26); }
.knopka--kontur { border: 1px solid rgba(255,255,255,.28); color: #fff; }
.knopka--kontur:hover { border-color: var(--zhelt); color: var(--zhelt); }
.knopka--kontur-temn { border: 1px solid var(--linia); color: var(--tekst); }
.knopka--kontur-temn:hover { border-color: var(--grafit); }
.knopka--bolshaya { height: 58px; padding: 0 34px; font-size: 16px; }
.knopka--malaya { height: 42px; padding: 0 18px; font-size: 14px; }
.knopka--shirokaya { width: 100%; }

/* ---------- верхняя служебная полоса (макет: #25282b, Inter 12) ---------- */
.verhnyaya { background: var(--grafit); color: rgba(255,255,255,.78); font-size: 12px; }
.verhnyaya__ryad { display: flex; align-items: center; gap: 24px; height: 32px; }
.verhnyaya__levo { display: flex; align-items: center; gap: 24px; }
.verhnyaya__gorod { display: inline-flex; align-items: center; gap: 6px; color: #fff; }
.verhnyaya__gorod svg { width: 14px; height: 14px; }
.verhnyaya__menu { display: flex; gap: 20px; margin-left: auto; }
.verhnyaya__menu a:hover { color: #fff; }
.verhnyaya__pravo { color: rgba(255,255,255,.78); white-space: nowrap; }

/* ---------- шапка ---------- */
.shapka-obertka { position: sticky; top: 0; z-index: 50; }   /* вся шапка с поиском едет за прокруткой */
.shapka { border-bottom: 1px solid var(--linia); background: #fff; }
.shapka__ryad { display: flex; align-items: center; gap: 32px; height: 80px; }

.logo { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.logo__imya {
  font-family: Montserrat, sans-serif; font-size: 32px; font-weight: 800; line-height: 1;
  letter-spacing: .01em; color: var(--sin);
}
.logo__opisanie {
  display: block; padding-left: 12px; border-left: 1px solid var(--linia);
  font-size: 9px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
  line-height: 1.45; color: #3d434a; max-width: 148px;
}

/* auto-поля по бокам: поиск встаёт посередине, а телефон с кнопкой — вплотную
   к правому краю контейнера (иначе остаток flex-строки копится справа) */
/* Ширина поля. Было 560 px, и на 1920 по бокам оставалось по 241 px пустоты
   (замер: логотип кончается на 308, поле начиналось на 549). Подняли до 820 —
   поле растёт в этот запас, но не упирается ни в логотип, ни в блок связи.
   `flex: 1` с `max-width` сам ужимает поле на узких экранах, отдельных
   медиазапросов не нужно. */
.poisk { flex: 1; max-width: 820px; margin: 0 auto; display: flex; align-items: center; min-width: 0; position: relative; }
.poisk__ikonka {
  position: absolute; left: 16px; top: 50%; transform: translateY(-50%);
  color: var(--tekst-3); display: flex; pointer-events: none;
}
.poisk__pole {
  width: 100%; height: 44px; padding: 0 18px 0 46px; border: 1px solid var(--linia); border-radius: 6px;
  background: #fff; font-family: inherit; font-size: 14px; outline: none; color: var(--tekst);
}
.poisk__pole::placeholder { color: var(--tekst-3); }
.poisk__pole:focus { border-color: var(--sin); background: #fff; }
.poisk__knopka { display: none; }   /* только на телефоне, см. блок 768 px */

.shapka__svyaz { display: flex; align-items: center; gap: 16px; flex-shrink: 0; }
.shapka__svyaz .knopka { height: 40px; padding: 0 20px; font-size: 13px; font-family: Montserrat, sans-serif;
  font-weight: 700; border-radius: 6px; }
.kontakt { text-align: right; }
.kontakt__telefon { font-family: Montserrat, sans-serif; font-size: 19px; font-weight: 700; white-space: nowrap; }
.kontakt__telefon:hover { color: var(--sin); }
/* второй номер — тем же шрифтом, но помельче: два одинаково крупных телефона
   рядом дерутся за внимание, и непонятно, по какому звонить */
.kontakt__telefon { display: block; }
.kontakt__telefon--vtoroj { font-size: 15px; color: var(--tekst-2); margin-top: 1px; }
.kontakt__rezhim { font-size: 11px; color: #4b5058; margin-top: 2px; white-space: nowrap; }

/* ---------- полоса меню ---------- */
.navbar { background: var(--sin); }
.navbar__ryad { display: flex; align-items: center; gap: 4px; height: 54px; }
.navbar__katalog {
  display: inline-flex; align-items: center; gap: 10px; height: 54px; padding: 0 22px;
  background: linear-gradient(135deg, #0b47ab 0%, var(--sin-t) 60%, #072f78 100%);
  color: #fff; font-weight: 700; font-size: 15px;
}
.navbar__katalog:hover { background: linear-gradient(135deg, #0d52c6 0%, #0a4099 60%, #06276a 100%); }
.navbar__burger { display: flex; flex-direction: column; gap: 3px; }
.navbar__burger span { display: block; width: 18px; height: 2px; background: #fff; }
.navbar__punkt { padding: 0 15px; height: 54px; display: inline-flex; align-items: center; color: #dfe3e8; font-size: 14px; font-weight: 500; white-space: nowrap; }
.navbar__punkt:hover { background: rgba(255,255,255,.08); color: #fff; }
.navbar__telefon { display: none; margin-left: auto; color: #fff; }

.megamenu { display: none; position: absolute; left: 0; right: 0; z-index: 49; background: #fff; border-bottom: 1px solid var(--linia); box-shadow: 0 18px 40px rgba(21,24,29,.14); }
.megamenu.otkryto { display: block; }
.megamenu__setka { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px 28px; padding: 22px 0 26px; }
.megamenu__punkt { padding: 7px 8px 7px 0; font-size: 14px; display: flex; align-items: center; gap: 12px;
  border-bottom: 1px solid #eef1f4; border-radius: var(--radius-s); transition: background var(--t), color var(--t); }
.megamenu__punkt:hover { color: var(--sin); background: var(--fon-hol); }
.megamenu__kolvo { color: var(--tekst-3); font-size: 12px; }

/* Подразделы в каталоге: на большом экране их нет — сетка из четырёх
   колонок, вложенные списки в ней разъедутся. Гнездо прозрачно для сетки
   (display: contents), поэтому разметка на десктопе выглядит ровно так же,
   как до появления подразделов. */
.megamenu__gnezdo { display: contents; }
.megamenu__razvernut, .megamenu__deti { display: none; }

/* ---------- выезжающее меню телефона ---------- */
/* На десктопе панели нет совсем: бургер показывается только ниже 768 px. */
.navbar__menyu { display: none; }

.panel { position: fixed; inset: 0; z-index: 60; visibility: hidden; pointer-events: none; }
.panel.otkryta { visibility: visible; pointer-events: auto; }
.panel__fon { position: absolute; inset: 0; background: rgba(21,24,29,.5); opacity: 0; transition: opacity var(--t); }
.panel.otkryta .panel__fon { opacity: 1; }
.panel__telo {
  position: absolute; top: 0; right: 0; bottom: 0; width: min(86vw, 350px);
  background: #fff; display: flex; flex-direction: column; overflow-y: auto;
  transform: translateX(100%); transition: transform var(--t);
  box-shadow: -14px 0 34px rgba(21,24,29,.18);
}
.panel.otkryta .panel__telo { transform: translateX(0); }
.panel__verh { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 14px 16px; background: var(--grafit); color: #fff; }
/* Логотип на тёмном: синий на графите не читается, как и в подвале. */
.logo--panel { flex-direction: column; align-items: flex-start; gap: 2px; }
.logo--panel .logo__imya { font-size: 24px; color: #fff; }
.logo--panel .logo__opisanie { padding-left: 0; border-left: 0; font-size: 8px;
  line-height: 1.4; color: rgba(255,255,255,.55); max-width: 190px; }
.panel__gorod { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 10px;
  font-size: 13px; color: var(--tekst-3); }
.panel__gorod svg { width: 15px; height: 15px; }
/* 44 px — размер, в который попадает палец. Меньше делать нельзя: закрытие
   меню промахом по крестику раздражает сильнее, чем само меню. */
.panel__zakryt { width: 44px; height: 44px; margin: -10px -12px -10px 0;
  color: #fff; font-size: 30px; line-height: 1; background: none; }
.panel__menyu, .panel__sluzhebnoe { display: flex; flex-direction: column; }
.panel__punkt { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 12px 16px;
  font-size: 16px; color: var(--tekst); border-bottom: 1px solid var(--linia); }
.panel__punkt--katalog { font-weight: 700; color: var(--sin); }
.panel__punkt--katalog svg { width: 18px; height: 18px; }
.panel__punkt--tut { color: var(--sin); background: var(--fon-hol); }
.panel__sluzhebnoe { margin-top: 10px; }
.panel__sluzhebnoe .panel__punkt { min-height: 42px; padding-top: 9px; padding-bottom: 9px;
  font-size: 14px; color: var(--tekst-2); border-bottom: 0; }
.panel__svyaz { margin-top: auto; padding: 18px 16px 24px; border-top: 1px solid var(--linia); }
.panel__telefon { display: inline-flex; align-items: center; gap: 8px; font-size: 19px; font-weight: 700; color: var(--tekst); }
.panel__telefon svg { width: 18px; height: 18px; color: var(--sin); }
.panel__telefon--vtoroj { font-size: 16px; font-weight: 500; color: var(--tekst-2); margin-top: 4px; }
.panel__rezhim { font-size: 13px; color: var(--tekst-3); margin: 4px 0 14px; }
.panel__knopka { width: 100%; height: 46px; }
.panel__pochta { display: inline-block; margin-top: 12px; font-size: 14px; color: var(--sin); }

/* ---------- нижняя полоса действий (телефон) ---------- */
.nizhnyaya-polosa { display: none; }

/* ============================================================
   ГЛАВНЫЙ БАННЕР — перенесён с enermetall.ru
   ============================================================ */
.geroy {
  position: relative; overflow: hidden; color: #eef1f4;
  background:
    radial-gradient(ellipse at top right, rgba(78,190,238,.20) 0%, transparent 52%),
    linear-gradient(135deg, rgba(8,26,58,.96) 0%, rgba(13,44,94,.86) 100%),
    #0b1c38;
  min-height: clamp(520px, 74vh, 700px);
  display: grid;
}
.geroy__slajdy { position: relative; width: 100%; height: 100%; grid-area: 1 / 1; }
.geroy__slajd {
  position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; visibility: hidden;
  transition: opacity 600ms ease, visibility 0s linear 600ms;
  padding-block: clamp(44px, 7vw, 84px); display: flex; align-items: center;
}
.geroy__slajd.aktiven { opacity: 1; visibility: visible; transition: opacity 600ms ease, visibility 0s linear 0s; position: relative; }
.geroy__fon {
  position: absolute; top: 0; right: 0; bottom: 0; width: 74%; z-index: 0;
  background-size: cover; background-position: center; background-repeat: no-repeat; opacity: .55;
  -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 48%);
  mask-image: linear-gradient(to right, transparent 0%, #000 48%);
}
.geroy__vnutri { position: relative; z-index: 2; }
.geroy__soderzhimoe { max-width: 60ch; min-width: 0; }
.geroy__zagolovok {
  font-family: Montserrat, sans-serif; font-size: clamp(30px, 3.9vw, 52px); line-height: 1.1;
  margin-bottom: 18px; letter-spacing: -.025em; overflow-wrap: normal; word-break: keep-all;
  min-height: 2.2em;   /* две строки: кнопки стоят на одном уровне во всех слайдах */
}
/* Вторая строка заголовка баннера. Была ровно голубой (--golub); заказчик
   попросил синий «как меню» с плавным переходом в белый.
   Синий меню (#0d4fc2) на тёмном фото сам по себе читается плохо, поэтому
   градиент идёт через промежуточный светло-синий: без него переход от синего
   к белому даёт грязную серо-сиреневую середину.
   `color` оставлен первым — это запасной ход, если background-clip не сработает:
   тогда строка просто будет голубой, как раньше, а не прозрачной. */
.geroy__zagolovok em {
  color: var(--golub); font-style: normal;
  background: linear-gradient(95deg, var(--sin) 0%, #2a68df 58%, #6ea1ef 88%, #bcd6fa 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
}
/* @supports не умеет проверять -webkit-text-fill-color, поэтому страхуем так:
   если background-clip:text не поддержан, правило выше не применится целиком */
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
  .geroy__zagolovok em { -webkit-text-fill-color: currentColor; background: none; }
}
.geroy__lid { font-size: 17px; color: #b9c1c9; margin: 0 0 28px; max-width: 52ch; min-height: 2.9em; }
.geroy__knopki { display: flex; flex-wrap: wrap; gap: 12px; }
.geroy__cifry {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 22px; padding: 24px;
  background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.09); border-radius: var(--radius);
}
.geroy__cifra-znachenie { font-family: Montserrat, sans-serif; font-size: 30px; font-weight: 800; color: var(--golub); line-height: 1; margin-bottom: 6px; }
.geroy__cifra-podpis { color: #b9c1c9; font-size: 13px; }

.geroy__strelka {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 5; width: 44px; height: 44px;
  display: none; align-items: center; justify-content: center; color: #fff;
  background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.18); border-radius: 50%;
}
.geroy__strelka:hover { background: rgba(78,190,238,.22); border-color: var(--golub); }
.geroy__strelka--nazad { left: clamp(8px, 2vw, 24px); }
.geroy__strelka--vpered { right: clamp(8px, 2vw, 24px); }
@media (min-width: 768px) { .geroy__strelka { display: inline-flex; } }

.geroy__tochki { position: absolute; left: 50%; bottom: clamp(16px, 3vw, 30px); transform: translateX(-50%); display: flex; gap: 8px; z-index: 5; }
.geroy__tochka { width: 10px; height: 10px; border-radius: 999px; background: rgba(255,255,255,.3); padding: 0; transition: width var(--t), background var(--t); }
.geroy__tochka:hover { background: rgba(255,255,255,.6); }
.geroy__tochka.aktivna { width: 28px; background: var(--oranzh); }

.geroy__progress { position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: rgba(255,255,255,.06); z-index: 4; }
.geroy__progress-polosa { height: 100%; width: 0; background: var(--oranzh); transition: width 100ms linear; box-shadow: 0 0 8px rgba(238,105,49,.5); }



/* ============================================================
   ПЛИТКИ КАТАЛОГА — структура с stanki.ru
   ============================================================ */
.plitki { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
.plitka {
  position: relative; overflow: hidden; border-radius: var(--radius); min-height: 288px;
  display: flex; flex-direction: column; padding: 22px; background: #fff; border: 1px solid var(--linia);
  transition: box-shadow var(--t), transform var(--t);
}
/* чередование белая / тёплая: ритм плиток с stanki.ru сохранён, но без серого */
.plitka--tepl { background: var(--fon-tepl); border-color: #f7e3ca; }
.plitka:hover { box-shadow: 0 16px 34px rgba(21,24,29,.14); transform: translateY(-2px); }
.plitka__zagolovok { position: relative; z-index: 2; font-family: Montserrat, sans-serif; font-size: 19px; font-weight: 700; line-height: 1.2; }
.plitka__zagolovok:hover { color: var(--tekst-2); }
/* Подразделы и цена не должны заезжать на станок в правом нижнем углу.
   Ширины подобраны замером: 44% текста + 52% фото оставляют зазор, а цена
   («8 моделей · от 245 000 ₽» — это 349 px) идёт отдельной строкой понизу,
   поэтому фото поднято над ней. Раньше цена не была ничем ограничена и
   уезжала под станок в 13 плитках из 18, подразделы — ещё в 8. */
/* Список строчками — как в утверждённом макете. Пробовали метки-таблетки,
   заказчик попросил вернуть текст.
   Ограничения по высоте здесь быть не должно: список занимает левые 54 %
   плитки, а фото станка — правые 44 %, они стоят рядом и не пересекаются.
   max-height остался от версии с таблетками (те шли во всю ширину) и резал
   строки посередине. */
.plitka__podrazdely {
  position: relative; z-index: 2; list-style: none; margin: 12px 0 0; padding: 0;
  display: grid; gap: 5px; max-width: 54%;
}
.plitka__podrazdely a { font-size: 13px; color: var(--tekst-2); }
.plitka__podrazdely a:hover { color: var(--sin); text-decoration: underline; }
/* margin-top: auto прижимает цену к низу плитки — тогда её положение
   перестаёт зависеть от числа подразделов, а оно и делало баг «иногда» */
/* без padding-top: он раздувает бокс цены вверх, и тот снова лезет под фото —
   отступ и так даёт margin-top: auto */
.plitka__cena { position: relative; z-index: 2; margin-top: auto; font-size: 13px; font-weight: 700; color: var(--tekst); }
.plitka__foto { position: absolute; right: 0; bottom: 44px; width: 44%; height: 108px; z-index: 1; }
.plitka__foto img { width: 100%; height: 100%; object-fit: contain; object-position: 100% 100%; }
.plitka__strelka {
  position: absolute; right: 18px; top: 18px; z-index: 3; width: 40px; height: 40px; border-radius: var(--radius-s);
  background: #fff; color: var(--tekst); display: flex; align-items: center; justify-content: center;
  opacity: 0; transform: translateX(-6px); transition: opacity var(--t), transform var(--t);
}
.plitka:hover .plitka__strelka { opacity: 1; transform: translateX(0); }

/* ---------- страницы разделов ----------
   Вступление стоит между заголовком страницы и первым блоком. У блока свой
   верхний отступ, поэтому снизу вступлению добавлять нечего — иначе между
   ними получается провал почти в экран. */
/* Отрицательный отступ снизу гасит верхний padding следующей секции.
   Работает только тогда, когда следом действительно идёт .sekciya; если
   после вступления стоит обычный блок (сводка на странице «Видео»), строки
   налезают друг на друга — поэтому правило именно на соседнюю секцию. */
.stranica-vstuplenie { max-width: 62ch; margin: 0; }
.stranica-vstuplenie + .sekciya,
.obolochka:has(> .stranica-vstuplenie) + .sekciya { margin-top: -18px; }
.stranica-vstuplenie--podpis { color: var(--tekst-2); font-size: 17px; line-height: 1.55; }

/* ---------- страница «Видео» ----------
   Сводка лежит НА самой .obolochka, поэтому ни margin, ни max-width ей
   задавать нельзя: `margin: 14px 0 0` затирает `margin: 0 auto` у обёртки,
   а max-width её сужает — обёртка перестаёт центроваться, и блок уезжает
   к левому краю. Отступ задаём только сверху, ширину — тексту внутри. */
.video-svodka { color: var(--tekst-3); font-size: 15px; margin-top: 14px; }

/* Сетка роликов приехала из карточки товара, где она стоит в узкой колонке
   и ограничена 1100 px. На своей странице это ограничение читается как
   «всё съехало влево»: контент занимает 1100 px из 1425 и прижат к краю. */
.video-razdel .tk-video { max-width: none; }
/* Разделы идут подряд, поэтому верхний отступ у каждого следующего лишний —
   иначе между ними провал в полтора экрана. */
.video-razdel { padding-top: 34px; padding-bottom: 6px; }
.video-razdel + .video-razdel { padding-top: 10px; }
.video-rolik__nazvanie { display: block; font-weight: 600; color: var(--tekst); }
.video-rolik__tovar { display: block; margin-top: 4px; font-size: 13px; color: var(--sin); }
.video-rolik__tovar:hover { text-decoration: underline; }

/* Реквизиты — только на странице «Контакты» */
.kontakty__rekvizity {
  margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--linia);
  font-size: 13px; line-height: 1.6; color: var(--tekst-2);
}
.kontakty__rekvizity-zag {
  font-family: Montserrat, sans-serif; font-weight: 700; font-size: 12px;
  text-transform: uppercase; letter-spacing: .06em; color: var(--tekst-3); margin-bottom: 6px;
}

/* ---------- линии под ключ ----------
   Плитки широкие: позиция тут одна крупная и дорогая, ей нужно место под
   название в две строки и две характеристики. В отличие от плиток каталога
   фото лежит сверху во всю ширину, а не в углу. */
.linii { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
.liniya {
  display: flex; flex-direction: column; background: #fff; border: 1px solid var(--linia);
  border-radius: var(--radius); overflow: hidden; transition: box-shadow var(--t), transform var(--t);
}
.liniya:hover { box-shadow: 0 16px 34px rgba(21,24,29,.14); transform: translateY(-2px); }
.liniya__foto {
  display: block; height: 190px; background: #fff; padding: 14px 18px;
  border-bottom: 1px solid var(--linia);
}
.liniya__foto img { width: 100%; height: 100%; object-fit: contain; display: block; }
.liniya__telo { padding: 18px 20px 20px; display: flex; flex-direction: column; flex: 1; }
.liniya__imya {
  font-family: Montserrat, sans-serif; font-weight: 700; font-size: 17px; line-height: 1.25;
  color: var(--tekst);
}
.liniya__imya:hover { color: var(--sin); }
.liniya__hara { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 7px; }
.liniya__hara li {
  display: flex; justify-content: space-between; gap: 14px; align-items: baseline;
  font-size: 13px; color: var(--tekst-2); border-bottom: 1px dashed var(--linia); padding-bottom: 6px;
}
.liniya__hara b { color: var(--tekst); font-weight: 700; white-space: nowrap; }
/* margin-top: auto — низ плитки прижат к основанию, и ряд выглядит ровным
   независимо от длины названия */
.liniya__niz { margin-top: auto; padding-top: 18px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.liniya__cena { font-family: Montserrat, sans-serif; font-weight: 800; font-size: 18px; color: var(--tekst); white-space: nowrap; }

/* ---------- новости ---------- */
.novosti { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
.novost {
  display: flex; flex-direction: column; background: #fff; border: 1px solid var(--linia);
  border-radius: var(--radius); overflow: hidden; transition: box-shadow var(--t), transform var(--t);
}
.novost:hover { box-shadow: 0 16px 34px rgba(21,24,29,.14); transform: translateY(-2px); }
.novost__foto { display: block; height: 180px; overflow: hidden; background: var(--fon-hol); }
.novost__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Заглушка вместо фото: держит ту же высоту, чтобы ряд не съезжал */
.novost__zaglushka {
  display: block; width: 100%; height: 100%;
  background: linear-gradient(135deg, var(--sin-svet), #fff 70%);
}
.novost__telo { padding: 18px 20px 20px; display: flex; flex-direction: column; flex: 1; }
.novost__data { font-size: 12px; color: var(--tekst-3); letter-spacing: .03em; }
.novost__imya { font-family: Montserrat, sans-serif; font-size: 17px; font-weight: 700; line-height: 1.3; margin: 8px 0 0; }
.novost__imya a { color: var(--tekst); }
.novost__imya a:hover { color: var(--sin); }
.novost__anons { font-size: 14px; line-height: 1.5; color: var(--tekst-2); margin: 10px 0 0; }
.novost__dalshe {
  margin-top: auto; padding-top: 16px; display: inline-flex; align-items: center; gap: 8px;
  font-size: 14px; font-weight: 600; color: var(--sin);
}
.novost:hover .novost__dalshe { text-decoration: underline; }

/* Список новостей в разделе: та же плитка, но по четыре в ряд — на
   отдельной странице места больше, чем в блоке главной. */
.novosti--spisok { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: 8px; }

/* Страница одной новости */
.novost-stranica { max-width: 820px; padding-top: 6px; }
.novost-stranica h1 { margin: 8px 0 0; }
.novost-stranica__foto { margin: 22px 0 6px; border-radius: var(--radius); overflow: hidden; border: 1px solid var(--linia); }
.novost-stranica__foto img { width: 100%; height: auto; display: block; }
.novost-stranica__nazad { display: inline-block; margin: 26px 0 8px; font-weight: 600; color: var(--sin); }
.novost-stranica__nazad:hover { text-decoration: underline; }

/* ---------- о нас ---------- */
.o-nas__ryad { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: 48px; align-items: start; }
.o-nas__text p { color: var(--tekst-2); margin: 0 0 14px; }
.o-nas__spisok { list-style: none; margin: 24px 0 28px; padding: 0; display: grid; gap: 12px; }
.o-nas__spisok li { position: relative; padding-left: 30px; }
.o-nas__spisok li::before {
  content: ""; position: absolute; left: 0; top: 3px; width: 20px; height: 20px; border-radius: 5px; background: var(--sin)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M2.5 6.2l2.3 2.3 4.7-5' stroke='%23ffffff' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat;
}
.o-nas__foto { display: grid; gap: 14px; }
.o-nas__foto img { width: 100%; border-radius: var(--radius); }
.o-nas__adresa { border: 1px solid var(--linia); border-radius: var(--radius); padding: 20px 22px; display: grid; gap: 14px; }
.adres { display: flex; gap: 12px; }
.adres__ikonka { width: 34px; height: 34px; flex-shrink: 0; border-radius: 8px; background: var(--sin-svet); color: var(--tekst-2); display: flex; align-items: center; justify-content: center; }
.adres__tip { font-size: 11px; color: var(--tekst-3); text-transform: uppercase; letter-spacing: .06em; }
.adres__text { font-weight: 600; font-size: 14px; margin-top: 2px; }

/* ---------- акции ---------- */
.akcii { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
.akciya {
  border: 1px solid rgba(255,255,255,.14); border-radius: var(--radius); background: rgba(255,255,255,.06);
  backdrop-filter: blur(2px); display: flex; flex-direction: column; color: #eef4fc;
  transition: border-color var(--t), background var(--t), transform var(--t);
}
.akciya:hover { border-color: #fff; background: rgba(255,255,255,.12); transform: translateY(-3px); }
.akciya__metka { align-self: flex-start; background: linear-gradient(135deg, #f78c46 0%, var(--oranzh) 100%); color: #fff; font-size: 12px; font-weight: 700; padding: 5px 11px; border-radius: 4px; letter-spacing: .02em; }
.akciya__zagolovok { font-family: Montserrat, sans-serif; font-size: 18px; font-weight: 700; line-height: 1.25; margin: 14px 0 10px; }
.akciya__text { color: rgba(255,255,255,.8); font-size: 14px; margin: 0 0 16px; }
.akciya__uslovie { margin-top: auto; padding-top: 14px; border-top: 1px solid rgba(255,255,255,.16); color: rgba(255,255,255,.62); font-size: 12px; }

/* ---------- запущенные станки ---------- */
.zapusk { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 40px; align-items: center; border: 1px solid var(--linia); border-radius: var(--radius); overflow: hidden; }
.zapusk__foto { background: #fff; height: 100%; display: flex; align-items: center; justify-content: center; padding: 26px; }
.zapusk__foto img { max-height: 340px; width: auto; object-fit: contain; }
.zapusk__telo { padding: 32px 34px 32px 0; }
.zapusk__gorod { font-family: Montserrat, sans-serif; font-weight: 700; font-size: 20px; }
.zapusk__oborudovanie { margin-top: 8px; color: var(--tekst-2); font-size: 14px; }
.zapusk__text { margin: 16px 0 18px; color: var(--tekst-2); }
.zapusk__itog { display: inline-block; background: var(--fon-tepl); font-weight: 700; padding: 10px 16px; border-radius: var(--radius-s); font-size: 14px; }
.zapusk-mesto {
  margin-top: 18px; border: 1px dashed var(--linia); border-radius: var(--radius); padding: 26px;
  color: var(--tekst-3); font-size: 14px; text-align: center;
}

/* ---------- контакты: фоном живая карта Яндекса ---------- */
.kontakty { position: relative; padding: 0; background: #fff; }
.kontakty__karta { position: absolute; inset: 0; z-index: 0; }
.kontakty__karta iframe { width: 100%; height: 100%; border: 0; display: block; filter: saturate(.92); }
.kontakty__ryad {
  position: relative; z-index: 1; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  gap: 24px; padding-top: 64px; padding-bottom: 64px; pointer-events: none;
}
.kontakty__ryad > * { pointer-events: auto; }
.kontakty__karta-blok {
  background: rgba(255,255,255,.96); border-radius: var(--radius); padding: 30px 32px;
  box-shadow: 0 20px 48px rgba(21,24,29,.18); max-width: 620px; backdrop-filter: blur(2px);
}
.adresa-spisok { display: grid; gap: 8px; margin: 20px 0 12px; }
.adres { display: flex; gap: 12px; align-items: flex-start; text-align: left; }
.adres--knopka {
  width: 100%; padding: 10px 12px; border: 1px solid var(--linia); border-radius: var(--radius-s);
  background: #fff; transition: border-color var(--t), background var(--t);
}
.adres--knopka:hover { border-color: var(--sin); background: var(--fon-hol); }
.adres--knopka[aria-current="true"] { border-color: var(--sin); background: var(--sin-svet); }
.adres__ikonka {
  width: 34px; height: 34px; flex-shrink: 0; border-radius: 8px; background: var(--sin-svet);
  color: var(--sin); display: flex; align-items: center; justify-content: center;
}
.adres__tip { display: block; font-size: 11px; color: var(--tekst-3); text-transform: uppercase; letter-spacing: .06em; }
.adres__text { display: block; font-weight: 600; font-size: 14px; margin-top: 2px; }
.forma { background: #fff; border-radius: var(--radius); padding: 28px; display: grid; gap: 12px; align-self: start;
  box-shadow: 0 20px 48px rgba(21,24,29,.18); }
.pole { height: 52px; padding: 0 16px; border: 1px solid var(--linia); border-radius: var(--radius-s); font-family: inherit; font-size: 15px; width: 100%; outline: none; }
.pole:focus { border-color: var(--sin); }
.primechanie { font-size: 12px; color: var(--tekst-2); }

/* Ответ после отправки заявки. Стоит внутри формы, над полями: человек
   возвращается на ту же страницу с якорем #kontakty и должен увидеть итог
   там, куда смотрел. */
.forma__otvet { border-radius: var(--radius-s); padding: 12px 14px; font-size: 14px; line-height: 1.45; }
.forma__otvet--horosho { background: #eaf6ed; border: 1px solid #b7dfc2; color: #1d6b34; }
.forma__otvet--ploho { background: #fdeceb; border: 1px solid #f3c2bf; color: #a12a21; }

/* Ловушка для роботов: не display:none — часть ботов такие поля пропускает.
   Схлопываем до точки на месте, а не уносим на left:-9999px: уехавший за
   край элемент честно считается вылезшим за экран, и проверка вёрстки
   отмечала его переливом на каждой ширине. */
.forma__lovushka {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

/* Страницы выдачи поиска. Фальшивой пагинации в каталоге у нас нет — в
   разделах максимум 19 позиций, — а вот поиск по всем 79 моделям страницами
   идёт по-настоящему. */
.stranicy { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin: 32px 0 8px; }
.stranicy .page-numbers {
  min-width: 44px; height: 44px; padding: 0 12px; display: inline-flex; align-items: center;
  justify-content: center; border: 1px solid var(--linia); border-radius: var(--radius-s);
  font-size: 15px; font-weight: 600; color: var(--tekst-1); background: #fff;
}
.stranicy .page-numbers:hover { border-color: var(--sin); color: var(--sin); }
.stranicy .page-numbers.current { background: var(--sin); border-color: var(--sin); color: #fff; }
.stranicy .page-numbers.dots { border-color: transparent; }

/* ---------- футер ---------- */
.futer { background: var(--grafit); color: #9aa2ab; padding: 52px 0 26px; font-size: 14px; }
.futer__setka { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1.2fr; gap: 36px; }
.futer h4 { color: #fff; font-size: 15px; margin: 0 0 15px; }
.futer__spisok { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }
.futer__spisok a:hover { color: #fff; }
.futer__telefon { display: block; color: #fff; font-family: Montserrat, sans-serif; font-size: 20px; font-weight: 700; margin-bottom: 6px; }
.futer__telefon--vtoroj { font-size: 16px; color: #c8ced6; margin-top: -2px; }
.logo--futer { margin-bottom: 16px; }
.futer .logo__imya { color: #fff; }
.futer .logo__opisanie { color: rgba(255,255,255,.6); border-left-color: rgba(255,255,255,.2); }

.futer__niz { margin-top: 34px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,.12); display: flex; justify-content: space-between; flex-wrap: wrap; gap: 16px; font-size: 13px; color: #6d757e; }

/* ---------- адаптив ---------- */
@media (max-width: 1280px) { .navbar__punkt--3 { display: none; } }
@media (max-width: 1200px) {
  .navbar__punkt--2 { display: none; }
  .plitki, .akcii { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .megamenu__setka { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 992px) {
  .verhnyaya__menu, .kontakt__rezhim { display: none; }
  /* padding-top/bottom, а НЕ `padding: 14px 0`: сокращённая запись обнуляла
     боковые поля, которые приходят от .obolochka, и вся шапка — логотип,
     поиск, телефон — упиралась в края экрана. Остальные ряды сайта при этом
     стояли с отступом 20 px, отчего логотип казался сдвинутым вбок. */
  .shapka__ryad { height: auto; padding-top: 14px; padding-bottom: 14px; flex-wrap: wrap; }
  .poisk { order: 3; flex-basis: 100%; }
  .logo__podpis { display: none; }
  .o-nas__ryad, .kontakty__ryad, .zapusk { grid-template-columns: 1fr; }
  .zapusk__telo { padding: 0 26px 28px; }
  .plitki, .akcii { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .geroy__cifry { grid-template-columns: repeat(4, 1fr); }
}
@media (max-width: 768px) {
  .sekciya { padding-top: 44px; padding-bottom: 44px; }
  .navbar__punkt { display: none; }
  /* Трубка из синей полосы убрана: номер стоит строкой выше, а внизу экрана
     висит «Позвонить». Три способа позвонить в одном экране — это не забота,
     а шум; освободившееся место отдаём кнопке каталога. */
  .navbar__telefon { display: none; }
  .navbar__katalog { flex: 1; justify-content: center; }

  /* Шапка при прокрутке вниз сворачивается до синей полосы: три этажа —
     почти 200 px, это четверть экрана телефона, и они едут за человеком всю
     страницу. При первом же движении вверх шапка возвращается целиком.

     СДВИГАЕМ, А НЕ СЖИМАЕМ. Сначала белая часть пряталась через max-height,
     и шапка прыгала: липкая шапка стоит в потоке, при сжатии документ
     становился короче на 142 px, браузер подтягивал прокрутку, а обработчик
     читал это как «листают вверх» и разворачивал шапку обратно — та снова
     удлиняла документ, и всё повторялось. Теперь шапка вынута из потока
     (fixed), её место держит отступ у body, а сворачивание — это сдвиг
     вверх ровно на высоту белой части. Высота документа не меняется вообще.

     Обе переменные проставляет script.js замером после загрузки и при
     повороте экрана: высота зависит от того, влезла ли подпись под логотип
     и режим работы под телефон. */
  .shapka-obertka { position: fixed; top: 0; left: 0; right: 0;
    transition: transform .22s ease; will-change: transform; }
  .shapka-obertka--szhata { transform: translateY(calc(-1 * var(--shapka-belaya, 143px))); }
  body { padding-top: var(--shapka-vysota, 197px); }
  /* якоря не должны уезжать под шапку */
  html { scroll-padding-top: var(--shapka-vysota, 197px); }

  /* Тёмная служебная строка уезжает в панель: на телефоне в ней остаются
     город и одна фраза, а 32 px первого экрана она съедает всегда. */
  .verhnyaya { display: none; }

  /* ---- шапка телефона ----
     Логотип в две строки: на широком экране подпись стоит справа от имени
     через разделитель, а на телефоне места на это нет — и без подписи
     «SIENA» читается как случайное слово, а не как вывеска компании.

     Селекторы с `.shapka` намеренно: ниже по файлу лежат старые правила для
     992 и 620 px, которые прячут подпись и задают свой кегль. При равной
     силе выигрывает то, что записано позже, поэтому здесь нужен вес выше. */
  .shapka .logo { flex-direction: column; align-items: flex-start; gap: 1px; }
  /* Ширина подписи держит весь левый столбец: шире 140 px — и телефон
     справа перестаёт помещаться в строку, переносится вниз, шапка растёт
     ещё на этаж. Проверяется замером «логотип и телефон на одной линии». */
  .shapka .logo__opisanie { display: block; padding-left: 0; border-left: 0;
    font-size: 8px; line-height: 1.35; max-width: 140px; color: #5b636d; }
  .shapka .logo__imya { font-size: 25px; }

  /* Телефон и режим работы — правым столбиком, чтобы уравновесить логотип. */
  .kontakt { display: flex; flex-direction: column; align-items: flex-end; }
  .kontakt__telefon { font-size: 17px; }
  .kontakt__rezhim { display: block; font-size: 10px; color: var(--tekst-3); }

  /* Поиск с настоящей кнопкой: на телефоне поле стоит в строке одно, и без
     кнопки его принимают за обычный ввод. Значок слева при этом убираем —
     два одинаковых значка на одном поле только мешают. */
  .poisk { margin: 0; }
  .poisk__ikonka { display: none; }
  .poisk__pole { height: 46px; padding: 0 56px 0 16px; border-radius: 8px; font-size: 15px; }
  .poisk__knopka { display: flex; align-items: center; justify-content: center;
    position: absolute; right: 4px; top: 4px; width: 46px; height: 38px;
    border-radius: 6px; background: var(--sin); color: #fff; }
  .poisk__knopka:active { background: var(--sin-t); }

  /* Бургер отдельной кнопкой, 44 px под палец. Три полоски внутри кнопки
     «Каталог» на телефоне убираем — иначе два одинаковых значка рядом. */
  /* Отрицательное поле ровно такое, чтобы САМИ ПОЛОСКИ бургера встали по
     левому краю логотипа (поле .obolochka 20 px): кнопка шире значка, и без
     сдвига значок оказывается на 14 px правее всей остальной колонки. */
  .navbar__menyu { display: inline-flex; align-items: center; justify-content: center;
    width: 46px; height: 54px; margin-left: -14px; background: none; }
  .navbar__burger--katalog { display: none; }
  .navbar__katalog { padding: 0 14px; font-size: 14px; }

  /* Подразделы каталога. Гнездо становится обычным блоком, стрелка справа
     раскрывает вложенный список. Ссылка самого раздела при этом остаётся
     ссылкой: тап по названию ведёт в раздел, тап по стрелке — разворачивает. */
  .megamenu__gnezdo { display: block; position: relative; }
  .megamenu__gnezdo--s-detmi .megamenu__punkt { padding-right: 44px; }
  .megamenu__razvernut { display: flex; align-items: center; justify-content: center;
    position: absolute; top: 0; right: 0; width: 44px; height: 44px;
    background: none; color: var(--tekst-3); transition: transform var(--t); }
  .megamenu__razvernut svg { width: 18px; height: 18px; transform: rotate(90deg); }
  .megamenu__razvernut[aria-expanded="true"] svg { transform: rotate(-90deg); }
  .megamenu__deti { display: none; padding: 2px 0 8px 50px; }
  .megamenu__gnezdo--otkryt .megamenu__deti { display: block; }
  .megamenu__rebenok { display: flex; align-items: center; justify-content: space-between;
    gap: 10px; min-height: 40px; padding: 8px 8px 8px 0; font-size: 14px; color: var(--tekst-2); }

  /* Нижняя полоса действий. Держим её на всех страницах, поэтому телу
     страницы нужен запас снизу — иначе полоса накрывает последнюю строку
     подвала и ссылку на политику. */
  .nizhnyaya-polosa { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    background: #fff; border-top: 1px solid var(--linia);
    box-shadow: 0 -6px 18px rgba(21,24,29,.10);
    padding-bottom: env(safe-area-inset-bottom);   /* полоса жестов на iPhone */
  }
  .nizhnyaya-polosa__punkt { display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 3px; min-height: 56px; padding: 6px 4px; font-size: 11px; line-height: 1.15;
    text-align: center; color: var(--tekst-2); background: none; }
  .nizhnyaya-polosa__punkt svg { width: 20px; height: 20px; color: var(--sin); }
  .nizhnyaya-polosa__punkt--glavnaya { color: var(--sin); font-weight: 700; }
  body { padding-bottom: 62px; }
  /* minmax(0, 1fr), а не 1fr: `1fr` — это `minmax(auto, 1fr)`, и колонка не
     сжимается уже своего содержимого. У пунктов каталога содержимое — фото
     38 px, отступ, длинное неразрывное слово («Оцилиндровочные») и счётчик,
     то есть минимум около 190 px на колонку. На экране 390 px две такие
     колонки давали сетку в 438 px: правая колонка (9 разделов из 18) просто
     уезжала за край экрана. Перелива страницы при этом НЕ видно — меню
     закрыто, и проверка ширины его не встречает. */
  .megamenu__setka { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .megamenu__punkt { min-width: 0; }
  /* В колонке остаётся ~105 px, а «Оцилиндровочные» — одно слово шириной
     128 px. Переносить его нечему: пробелов внутри нет. Сначала просим
     браузер перенести по слогам, и только если словаря нет — рвём слово. */
  .megamenu__imya { hyphens: auto; overflow-wrap: break-word; }
  /* Каталог живёт внутри липкой шапки и вместе с ней стоит на месте, пока
     страница едет под ним. Значит всё, что не поместилось по высоте экрана,
     достать нельзя вообще: 18 разделов — это 549 px, и на невысоком телефоне
     нижние разделы просто недоступны. Даём меню собственную прокрутку. */
  .megamenu { max-height: calc(100vh - 150px); overflow-y: auto; -webkit-overflow-scrolling: touch; }
  @supports (height: 100dvh) {
    /* dvh учитывает панели браузера, которые на телефоне то есть, то нет */
    .megamenu { max-height: calc(100dvh - 150px); }
  }
  .shapka-sekcii { flex-direction: column; align-items: flex-start; gap: 12px; }
  .geroy__cifry { grid-template-columns: repeat(2, 1fr); }
  .futer__setka { grid-template-columns: 1fr 1fr; }
}

/* На самых узких экранах подпись под логотипом и режим работы убираем:
   замер показал, что на 320 px логотип с подписью и телефон уже не встают
   в одну строку — телефон переносится вниз, и шапка растёт со 197 до 254 px. */
@media (max-width: 360px) {
  .shapka .logo__opisanie, .kontakt__rezhim { display: none; }
}

@media (max-width: 560px) {
  .plitki, .akcii, .futer__setka { grid-template-columns: 1fr; }
  .plitka { min-height: 232px; }
  /* в одну колонку плитка широкая: подразделам можно больше места, но тогда
     и станок надо ужать, иначе список снова уходит под него */
  .plitka__podrazdely { max-width: 58%; }
  .plitka__foto { width: 38%; }
  .kontakt__zvonok { display: none; }
  .geroy__knopki .knopka { width: 100%; }
}

/* ============================================================
   ПОЧЕМУ МЫ — по образцу frontWhyKAMI на stanki.ru:
   иконка, крупная цифра-название, поясняющий текст
   ============================================================ */
.pochemu { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--linia); border: 1px solid var(--linia); border-radius: var(--radius); overflow: hidden; }
.pochemu__punkt { background: #fff; padding: 26px 24px; display: flex; gap: 18px; align-items: flex-start; transition: background var(--t); }
.pochemu__punkt:hover { background: var(--fon-hol); }
.pochemu__ikonka {
  width: 62px; height: 62px; flex: none; border-radius: 50%; background: var(--sin-svet); color: var(--sin);
  display: flex; align-items: center; justify-content: center;
}
.pochemu__ikonka svg { width: 30px; height: 30px; }
.pochemu__imya { font-family: Montserrat, sans-serif; font-size: 19px; font-weight: 700; line-height: 1.2; }
.pochemu__imya b { color: var(--sin); }
.pochemu__text { color: var(--tekst-3); font-size: 14px; margin-top: 7px; line-height: 1.45; }

/* ============================================================
   ЗАПУЩЕННЫЕ СТАНКИ — по образцу одноимённого блока stanki.ru:
   табы, баннер с крупной цифрой, галерея фотографий
   ============================================================ */
.taby { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 24px; }
.tab {
  height: 44px; padding: 0 22px; border-radius: var(--radius-s); border: 1px solid var(--linia);
  background: #fff; color: var(--tekst-2); font-weight: 600; font-size: 14px; transition: all var(--t);
}
.tab:hover { border-color: var(--sin); color: var(--sin); }
.tab.aktiven { background: var(--sin); border-color: var(--sin); color: #fff; }
.tab-soderzhimoe { display: none; }
.tab-soderzhimoe.aktivno { display: block; }

.zapuski__ryad { display: grid; grid-template-columns: minmax(280px, 340px) minmax(0, 1fr); gap: 18px; align-items: stretch; }
.banner-cifra {
  position: relative; border-radius: var(--radius); overflow: hidden; min-height: 280px;
  background: linear-gradient(180deg, rgba(10,34,74,.35) 0%, rgba(10,34,74,.85) 100%), var(--sin);
  color: #fff; display: flex; flex-direction: column; justify-content: flex-end; padding: 26px;
}
.banner-cifra img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; opacity: .5; }
.banner-cifra__chislo { position: relative; z-index: 1; font-family: Montserrat, sans-serif; font-size: 46px; font-weight: 800; line-height: 1; letter-spacing: -.03em; }
.banner-cifra__text { position: relative; z-index: 1; margin-top: 8px; font-size: 15px; color: rgba(255,255,255,.85); }

.galereya { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.galereya__punkt {
  position: relative; overflow: hidden; border-radius: var(--radius); min-height: 280px;
  display: flex; flex-direction: column; justify-content: flex-end; padding: 22px; color: #fff;
  background: linear-gradient(180deg, rgba(10,34,74,.25) 0%, rgba(8,28,64,.88) 72%), var(--sin);
  transition: transform var(--t), box-shadow var(--t);
}
.galereya__punkt:hover { transform: translateY(-3px); box-shadow: 0 18px 36px rgba(8,28,64,.3); }
.galereya__foto {
  position: absolute; left: 0; right: 0; top: 0; bottom: 34%; z-index: 0;
  display: flex; align-items: center; justify-content: center; padding: 18px;
}
.galereya__foto img { max-height: 100%; width: auto; object-fit: contain;
  filter: drop-shadow(0 14px 26px rgba(0,0,0,.35)); }
.galereya__podpis { position: relative; z-index: 1; }
.galereya__gorod { font-family: Montserrat, sans-serif; font-weight: 700; font-size: 18px; }
.galereya__model { color: rgba(255,255,255,.82); font-size: 14px; margin-top: 6px; }
.galereya__data { color: rgba(255,255,255,.6); font-size: 12px; margin-top: 10px; }
.galereya__pusto {
  border: 1px dashed rgba(255,255,255,.35); border-radius: var(--radius); display: flex; align-items: center;
  justify-content: center; text-align: center; padding: 26px; min-height: 280px; font-size: 13px;
  color: rgba(255,255,255,.72); background: linear-gradient(180deg, rgba(10,34,74,.5), rgba(8,28,64,.8)), var(--sin);
}

@media (max-width: 1200px) {
  .pochemu { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .galereya { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 992px) {
  .zapuski__ryad { grid-template-columns: 1fr; }
  .banner-cifra { min-height: 200px; }
}
@media (max-width: 620px) {
  .pochemu, .galereya { grid-template-columns: 1fr; }
  .pochemu__punkt { padding: 20px; gap: 14px; }
  .pochemu__ikonka { width: 52px; height: 52px; }
}


/* ---------- 3D-фигуры на фоне блока акций ---------- */
.sekciya--temnaya { position: relative; overflow: hidden; }
.sekciya--temnaya > .obolochka { position: relative; z-index: 2; }
.figury { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.figury__f { position: absolute; width: auto; }
.figury__f--1 { top: -70px;  right: 4%;   height: 300px; opacity: .92; }
.figury__f--2 { bottom: -90px; left: 2%;  height: 260px; opacity: .85; }
.figury__f--3 { bottom: -60px; right: 1%; height: 280px; opacity: .9; }
.figury__f--4 { top: 18px;  left: 34%;    height: 190px; opacity: .55; }
.akciya__telo { padding: 22px 22px 22px; display: flex; flex-direction: column; flex: 1; }
@media (max-width: 1200px) { .figury__f--4 { display: none; } }
@media (max-width: 992px)  { .figury__f--1, .figury__f--3 { height: 200px; opacity: .5; } .figury__f--2 { display: none; } }
@media (max-width: 620px)  { .figury__f { display: none; } }

/* ---------- декоративные 3D-фигуры в светлой секции ---------- */
.o-nas { position: relative; overflow: hidden; }
.o-nas > .obolochka { position: relative; z-index: 2; }
.figury--svet .figury__f { opacity: .18; }
.figury__f--o1 { top: -60px; right: -40px; height: 300px; }
.figury__f--o2 { bottom: -70px; left: -50px; height: 260px; }
@media (max-width: 620px) { .figury--svet { display: none; } }

/* шапка на узких экранах: логотип и телефон в строку, поиск отдельной строкой */
@media (max-width: 1200px) { .logo__opisanie { max-width: 150px; font-size: 10px; } }
@media (max-width: 992px) {
  /* то же самое, что выше: боковые поля обнулять нельзя */
  .shapka__ryad { height: auto; padding-top: 12px; padding-bottom: 12px; flex-wrap: wrap; gap: 14px 18px; }
  .poisk { order: 3; flex-basis: 100%; }
  .shapka__svyaz { margin-left: auto; }
  .logo__opisanie { display: none; }
}
@media (max-width: 620px) {
  .shapka__svyaz .knopka { display: none; }
  .logo__imya { font-size: 26px; }
  .kontakt__telefon { font-size: 18px; }
}

/* картинка категории в выпадающем каталоге */
.megamenu__foto {
  width: 46px; height: 40px; flex: none; border-radius: var(--radius-s); background: #fff;
  display: flex; align-items: center; justify-content: center; padding: 3px;
}
.megamenu__foto img { max-width: 100%; max-height: 100%; width: auto; object-fit: contain; }
.megamenu__imya { flex: 1; min-width: 0; line-height: 1.25; }
@media (max-width: 620px) { .megamenu__foto { width: 38px; height: 34px; } }

@media (max-width: 1200px) { .verhnyaya__pravo { display: none; } }
@media (max-width: 992px)  { .verhnyaya__menu { display: none; } }

/* ============================================================
   ВНУТРЕННИЕ СТРАНИЦЫ — раздел каталога и карточка товара.
   Размеры сняты с макета Figma (idKEn7ocLuFC1ymmAIjEss, фрейм
   catalog-page, ширина 1440): сайдбар 280 + отступ 32 + контент 968,
   карточка 306 с фото 180, кнопка «В корзину» 116×35, листалка 36×36.
   Контейнер у нас шире (1720), поэтому колонки заданы в fr, а не жёстко.
   ============================================================ */
/* страницы каталога тоже белые — блоки держатся на рамках, не на заливке */
.stranica-katalog { background: #fff; }

/* ---------- хлебные крошки ---------- */
.kroshki { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 13px; color: var(--tekst-3); }
.kroshki { padding-top: 16px; padding-bottom: 10px; }
.kroshki a:hover { color: var(--sin); }
.kroshki i { font-style: normal; color: #b7bcc2; }
.kroshki span:last-child { color: var(--tekst); }

/* ---------- заголовок раздела ---------- */
.zagolovok-razdela { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; }
.zagolovok-razdela { padding-top: 6px; padding-bottom: 24px; }
.zagolovok-razdela h1 { font-size: clamp(26px, 3.1vw, 38px); line-height: 1.12; }
.bejdzh {
  display: inline-flex; align-items: center; height: 26px; padding: 0 12px; border-radius: 999px;
  background: #fff; border: 1px solid var(--linia); font-size: 13px; font-weight: 600; color: var(--tekst-2);
}

/* ---------- раскладка: фильтры + товары ---------- */
.katalog-setka { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 28px; align-items: start; }
.katalog-setka { padding-bottom: 56px; }

.filtry-knopka { display: none; }
.bokovaya { background: #fff; border: 1px solid var(--linia); border-radius: var(--radius); padding: 4px 24px 24px; }
.bokovaya__blok { padding: 20px 0; border-bottom: 1px solid var(--linia); }
.bokovaya__zagolovok {
  font-family: Montserrat, sans-serif; font-size: 13px; font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; margin-bottom: 14px;
}
.bokovaya__telo { display: grid; gap: 3px; }

.kategoriya {
  display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 36px;
  padding: 7px 12px; border-radius: var(--radius-s); font-size: 14px; line-height: 1.3; color: var(--tekst-2);
  transition: background var(--t), color var(--t);
}
.kategoriya:hover { background: var(--fon-hol); color: var(--sin); }
.kategoriya__kolvo { flex: none; font-size: 12px; color: var(--tekst-3); }
.kategoriya--aktivna, .kategoriya--aktivna:hover { background: var(--sin); color: #fff; font-weight: 600; }
.kategoriya--aktivna .kategoriya__kolvo { color: rgba(255,255,255,.75); }

.cena-polya { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.cena-pole {
  display: flex; align-items: center; gap: 6px; height: 40px; padding: 0 10px;
  border: 1px solid var(--linia); border-radius: var(--radius-s); background: #fff;
}
.cena-pole span { flex: none; font-size: 13px; color: var(--tekst-3); }
.cena-pole input { width: 100%; min-width: 0; border: 0; outline: none; background: none; font: inherit; font-size: 14px; font-weight: 600; color: var(--tekst); }
.cena-pole:focus-within { border-color: var(--sin); }

.polzunok { position: relative; height: 22px; margin-top: 14px; }
.polzunok::before { content: ""; position: absolute; left: 0; right: 0; top: 9px; height: 4px; border-radius: 999px; background: var(--linia); }
.polzunok__zalivka { position: absolute; left: 5%; right: 5%; top: 9px; height: 4px; border-radius: 999px; background: var(--sin); }
/* Два наложенных <input type="range">, а не свои кружки с перетаскиванием:
   нативные дают клавиатуру, тач и шаг из разметки бесплатно. Дорожки у них
   спрятаны — линию рисуют .polzunok::before и .polzunok__zalivka. Клики
   пропускаем насквозь (pointer-events: none) и включаем только на бегунках,
   иначе верхний input накрыл бы нижний целиком и тот перестал бы ловиться. */
.polzunok__vhod {
  position: absolute; left: 0; top: 0; width: 100%; height: 22px; margin: 0;
  -webkit-appearance: none; appearance: none;
  background: none; pointer-events: none; outline: none;
}
.polzunok__vhod::-webkit-slider-runnable-track { height: 22px; background: none; }
.polzunok__vhod::-moz-range-track { height: 22px; background: none; }
.polzunok__vhod::-webkit-slider-thumb {
  -webkit-appearance: none; pointer-events: auto; cursor: pointer;
  width: 16px; height: 16px; border-radius: 50%; background: var(--sin);
  border: 3px solid #fff; box-shadow: 0 1px 4px rgba(21,24,29,.35);
}
.polzunok__vhod::-moz-range-thumb {
  pointer-events: auto; cursor: pointer;
  width: 16px; height: 16px; border-radius: 50%; background: var(--sin);
  border: 3px solid #fff; box-shadow: 0 1px 4px rgba(21,24,29,.35);
}
.polzunok__vhod:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 3px var(--sin-svet); }
.polzunok__vhod:focus-visible::-moz-range-thumb { box-shadow: 0 0 0 3px var(--sin-svet); }

.ptichka { position: relative; display: flex; align-items: center; gap: 10px; padding: 5px 0; font-size: 14px; color: var(--tekst-2); cursor: pointer; }
.ptichka input { position: absolute; width: 0; height: 0; margin: 0; opacity: 0; }
.ptichka__kvadrat {
  width: 18px; height: 18px; flex: none; display: flex; align-items: center; justify-content: center;
  border: 1px solid #c3c9cf; border-radius: 4px; background: #fff; color: transparent;
  transition: background var(--t), border-color var(--t);
}
.ptichka input:checked + .ptichka__kvadrat { background: var(--sin); border-color: var(--sin); color: #fff; }
.ptichka input:focus-visible + .ptichka__kvadrat { outline: 2px solid var(--sin); outline-offset: 2px; }
.ptichka__kolvo { margin-left: auto; font-size: 12px; color: var(--tekst-3); }

.sbros { margin-top: 22px; height: 42px; font-size: 14px; color: var(--sin); border-color: #c7d6ef; }
.sbros:hover { border-color: var(--sin); background: var(--fon-hol); }

/* ---------- панель сортировки ---------- */
.panel-sortirovki {
  display: flex; align-items: center; justify-content: space-between; gap: 16px; height: 48px;
  padding: 0 16px; margin-bottom: 18px; background: #fff; border-radius: var(--radius);
  border: 1px solid var(--linia);
}
.sortirovka { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--tekst-3); }
.sortirovka__vybor { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 600; color: var(--tekst); }
.sortirovka__vybor:hover { color: var(--sin); }
.vid { display: flex; gap: 6px; }
.vid__knopka { width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--radius-s); color: var(--tekst-3); transition: background var(--t), color var(--t); }
.vid__knopka:hover { background: var(--sin-svet); color: var(--sin); }
.vid__knopka--aktivna, .vid__knopka--aktivna:hover { background: var(--sin); color: #fff; }

/* ---------- карточка товара в сетке ---------- */
.tovary-setka { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; }
.tovar-kartochka {
  display: flex; flex-direction: column; background: #fff; border: 1px solid var(--linia);
  border-radius: var(--radius); overflow: hidden;
  transition: box-shadow var(--t), transform var(--t), border-color var(--t);
}
.tovar-kartochka:hover { border-color: transparent; box-shadow: 0 16px 34px rgba(21,24,29,.13); transform: translateY(-2px); }
.tovar-kartochka__verh { position: relative; background: #fff; border-bottom: 1px solid var(--linia); }
.tovar-kartochka__foto { display: block; height: 180px; padding: 14px; }
.tovar-kartochka__foto img { width: 100%; height: 100%; object-fit: contain; }
.tovar-kartochka__net-foto, .tovar__net-foto {
  display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;
  font-size: 13px; color: var(--tekst-3); text-align: center;
}

.metka {
  display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 10px; border-radius: 4px;
  font-size: 11px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;
}
.metka--nalichie { background: var(--zelen); color: #fff; }
/* «Под заказ» — нейтральная, чтобы не читалась как «есть на складе» */
.metka--zakaz { background: #fff; border: 1px solid var(--linia); color: var(--tekst-2); }
.tovar-kartochka__verh .metka { position: absolute; left: 12px; top: 12px; z-index: 2; }

.tovar-kartochka__telo { display: flex; flex-direction: column; flex: 1; padding: 16px; }
.tovar-kartochka__imya { font-family: Montserrat, sans-serif; font-size: 16px; font-weight: 700; line-height: 1.25; }
.tovar-kartochka__imya:hover { color: var(--sin); }
.tovar-kartochka__hara { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 6px; font-size: 13px; }
.tovar-kartochka__hara li { display: flex; justify-content: space-between; gap: 12px; color: var(--tekst-3); }
.tovar-kartochka__hara b { font-weight: 600; color: var(--tekst-2); text-align: right; white-space: nowrap; }
.tovar-kartochka__niz { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; margin-top: auto; padding-top: 16px; }
.tovar-kartochka__cena { font-family: Montserrat, sans-serif; font-size: 20px; font-weight: 800; letter-spacing: -.02em; white-space: nowrap; }
.tovar-kartochka__kp { margin-top: 12px; font-size: 13px; font-weight: 600; color: var(--sin); }
.tovar-kartochka__kp:hover { color: var(--oranzh); }

/* ---------- листалка ---------- */
.listalka { display: flex; justify-content: center; flex-wrap: wrap; gap: 8px; margin-top: 32px; }
.listalka__knopka {
  min-width: 36px; height: 36px; padding: 0 10px; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--linia); border-radius: var(--radius-s); background: #fff;
  font-size: 14px; font-weight: 600; color: var(--tekst-2); transition: border-color var(--t), color var(--t);
}
.listalka__knopka:hover:not(:disabled) { border-color: var(--sin); color: var(--sin); }
.listalka__knopka:disabled { color: #c3c9cf; cursor: default; }
.listalka__knopka--aktivna, .listalka__knopka--aktivna:hover { background: var(--sin); border-color: var(--sin); color: #fff; }

/* ---------- синяя панель призыва в конце страницы ----------
   Была полосой во всю ширину окна. Фон переехал с секции на внутреннюю
   панель: у секции остались только вертикальные отступы, а заливка и радиус
   живут внутри `.obolochka` и потому не уходят за края контента. */
.prizyv { padding: 8px 0 64px; }
/* панель шире остального контента: своя обёртка вместо общей --shirina (1720)
   и поля поуже — на 1920 это 1816 px против прежних 1632 */
.prizyv .obolochka { max-width: 1880px; padding: 0 clamp(16px, 2vw, 32px); }
.prizyv__panel {
  border-radius: 20px; overflow: hidden;
  padding: 56px clamp(24px, 4vw, 64px);
  text-align: center; color: #fff;
  /* Фото лесного склада под синим градиентом. Градиент НЕ убираем: сам по себе
     снимок пёстрый, и белый текст на светлых торцах досок теряется. Плотность
     подобрана по замеру: белый текст над САМЫМ СВЕТЛЫМ пикселем кадра после
     наложения даёт 5,94 : 1 в середине панели (альфа .80) и 7,50 : 1 у краёв
     (.90) — с запасом к порогу 4,5. Уменьшать альфу ниже .80 нельзя: там
     контраст уходит под порог на торцах досок.
     Картинка сгенерирована 15.09.2026 через GPTunnel (scripts/sgenerirovat-fon.py),
     промпт — лесной склад в сумерках, без техники и людей. */
  background-color: var(--sin);
  background-image:
    linear-gradient(135deg, rgba(11,71,171,.90) 0%, rgba(13,79,194,.80) 55%, rgba(10,60,148,.93) 100%),
    url("fony/prizyv.png");
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
}
.prizyv__panel h2 { text-wrap: balance; }
.prizyv__panel p { max-width: 74ch; margin: 14px auto 26px; color: rgba(255,255,255,.84); }
.prizyv__knopki { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; }

/* ============================================================
   КАРТОЧКА ТОВАРА
   ============================================================ */
.tovar { display: grid; grid-template-columns: minmax(0, 520px) minmax(0, 1fr); gap: 44px; align-items: start; }
.tovar { padding-top: 6px; padding-bottom: 48px; }
.tovar__foto-bolshoe {
  height: 420px; padding: 24px; display: flex; align-items: center; justify-content: center;
  background: #fff; border: 1px solid var(--linia); border-radius: var(--radius);
}
.tovar__foto-bolshoe img { max-height: 100%; width: auto; object-fit: contain; }
.tovar__minaturi { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: 12px; }
.tovar__minatura {
  height: 84px; padding: 8px; display: flex; align-items: center; justify-content: center; overflow: hidden;
  border: 1px solid var(--linia); border-radius: var(--radius-s); background: #fff;
}
.tovar__minatura img { max-height: 100%; width: auto; object-fit: contain; }
.tovar__minatura--aktivna { border-color: var(--sin); box-shadow: inset 0 0 0 1px var(--sin); }
.tovar__minatura--pusto { border-style: dashed; font-size: 11px; line-height: 1.3; text-align: center; color: var(--tekst-3); }

.tovar__glavnoe h1 { font-size: clamp(24px, 2.5vw, 34px); line-height: 1.15; }
.tovar__stroka-metok { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 14px; font-size: 13px; color: var(--tekst-3); }
.tovar__brend { font-weight: 600; color: var(--tekst-2); }

.tovar__kratkie { list-style: none; margin: 22px 0 0; padding: 0; border: 1px solid var(--linia); border-radius: var(--radius); overflow: hidden; }
.tovar__kratkie li { display: flex; justify-content: space-between; gap: 16px; padding: 11px 16px; font-size: 14px; }
.tovar__kratkie li + li { border-top: 1px solid var(--linia); }
.tovar__kratkie span { color: var(--tekst-3); }
.tovar__kratkie b { font-weight: 600; text-align: right; }

.tovar__pokupka {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px;
  margin-top: 24px; padding: 22px; background: #fff; border: 1px solid var(--linia); border-radius: var(--radius);
}
.tovar__cena { font-family: Montserrat, sans-serif; font-size: 32px; font-weight: 800; line-height: 1; letter-spacing: -.03em; }
.tovar__cena-podpis { margin-top: 7px; font-size: 12px; color: var(--tekst-3); }
.tovar__knopki { display: flex; flex-wrap: wrap; gap: 12px; }

.uslugi { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin-top: 22px; }
.usluga { display: flex; align-items: flex-start; gap: 12px; font-size: 13px; color: var(--tekst-3); }
.usluga__ikonka {
  width: 38px; height: 38px; flex: none; display: flex; align-items: center; justify-content: center;
  border-radius: 8px; background: var(--sin-svet); color: var(--sin);
}
.usluga b { display: block; font-size: 14px; color: var(--tekst); }

.tovar-bloki { display: grid; gap: 14px; align-items: start; }
.tovar-bloki { padding-bottom: 8px; }
/* блоки карточки сворачиваются: описание из фида бывает до 2864 знаков сплошным
   текстом, и раскрытым оно уводит похожие товары за три экрана */
.tovar-blok { border: 1px solid var(--linia); border-radius: var(--radius); }
.tovar-blok[open] { border-color: #c9d3de; }
.tovar-blok > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between;
  gap: 20px; padding: 18px 24px;
}
.tovar-blok > summary::-webkit-details-marker { display: none; }
.tovar-blok > summary::after {
  content: ""; width: 24px; height: 24px; flex: none; transition: transform var(--t);
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230d4fc2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center/20px no-repeat;
}
.tovar-blok[open] > summary::after { transform: rotate(180deg); }
.tovar-blok > summary:hover h2 { color: var(--sin); }
.tovar-blok h2 { font-size: 22px; margin: 0; transition: color var(--t); }
.tovar-blok__telo { padding: 0 24px 22px; }
.tovar-blok p { margin: 0; max-width: 92ch; color: var(--tekst-2); }
.hara-kolonki { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 36px; align-items: start; }
.tovar-plyusy { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 10px; }
.tovar-plyusy li { position: relative; padding-left: 30px; font-size: 15px; color: var(--tekst-2); }
.tovar-plyusy li::before {
  content: ""; position: absolute; left: 0; top: 3px; width: 20px; height: 20px; border-radius: 5px; background: var(--sin)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M2.5 6.2l2.3 2.3 4.7-5' stroke='%23ffffff' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat;
}
.tablica-hara { width: 100%; border-collapse: collapse; font-size: 14px; }
.tablica-hara td { padding: 10px 14px; border-bottom: 1px solid var(--linia); }
/* строки разделяет линия, а не серая зебра */
.tablica-hara td:first-child { width: 54%; color: var(--tekst-3); }
.tablica-hara td:last-child { font-weight: 600; }

/* ---------- адаптив внутренних страниц ---------- */
@media (max-width: 1280px) {
  .katalog-setka { grid-template-columns: 264px minmax(0, 1fr); gap: 20px; }
  .bokovaya { padding: 4px 18px 20px; }
  .tovar { grid-template-columns: minmax(0, 440px) minmax(0, 1fr); gap: 32px; }
}
@media (max-width: 992px) {
  .katalog-setka, .tovar { grid-template-columns: 1fr; }
  .katalog-setka { gap: 14px; }
  .tovar { gap: 28px; }
  .tovar-bloki { gap: 32px; }
  .tovar__foto-bolshoe { height: 340px; }
  .bokovaya { padding: 4px 20px 20px; }
  /* фильтры не должны отжимать товары вниз — прячем их за кнопку */
  .filtry-knopka { display: inline-flex; justify-self: start; background: #fff; }
  .bokovaya { display: none; }
  .bokovaya.otkryta { display: block; }
  .prizyv { padding: 8px 0 44px; }
  .prizyv__panel { padding: 40px 22px; border-radius: 16px; }
}
@media (max-width: 700px) {
  .tovary-setka { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }
  .tovar-kartochka__telo { padding: 14px; }
  .tovar-kartochka__foto { height: 150px; }
  .uslugi { grid-template-columns: 1fr; }
  .tovar__minaturi { grid-template-columns: repeat(3, 1fr); }
  .panel-sortirovki { height: auto; padding: 12px 14px; flex-wrap: wrap; }
  .hara-kolonki { grid-template-columns: 1fr; }
  .katalog-setka { padding-bottom: 40px; }
}
@media (max-width: 560px) {
  .tovar__foto-bolshoe { height: 260px; padding: 16px; }
  .tovar__pokupka { padding: 18px; }
  .tovar__knopki { width: 100%; }
  .tovar__knopki .knopka { flex: 1; padding: 0 16px; }
  .prizyv__knopki .knopka { width: 100%; }
  .tablica-hara td { padding: 9px 10px; }
}

@media (max-width: 992px) {
  .kontakty__ryad { grid-template-columns: 1fr; padding-top: 320px; }
  .kontakty__karta { inset: 0 0 auto; height: 290px; }
}
@media (max-width: 620px) { .kontakty__karta-blok { padding: 22px; } }

/* На 320 px телефон в блоке контактов набран в 19 px и запрещён к переносу
   (`white-space: nowrap` у .kontakt__telefon). Его минимальная ширина — 244 px,
   плюс поля блока: колонка сетки раздувалась до 288 px при доступных 265, и
   страница уезжала вбок на 3 px. Уменьшаем сам телефон, а не убираем nowrap:
   разорванный посередине номер читается как две разные цифры. */
@media (max-width: 380px) {
  .kontakty__karta-blok { padding: 18px; }
  .kontakty__karta-blok .kontakt__telefon { font-size: 17px; }
  .forma { padding: 20px; }
}

/* ============================================================
   РАЗДЕЛЫ ИЗ МЕНЮ: доставка и оплата, порядок работы, лизинг,
   сервис и запчасти, частые вопросы.
   Все сетки — как у .pochemu: белые ячейки на подложке --linia,
   зазор в 1px играет роль разделительных линий.
   ============================================================ */

/* ---------- доставка и оплата ---------- */
.dve-kolonki {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px;
  background: var(--linia); border: 1px solid var(--linia); border-radius: var(--radius); overflow: hidden;
}
.kolonka { background: #fff; padding: 28px 30px 30px; }
.kolonka__shapka { display: flex; align-items: center; gap: 15px; margin-bottom: 20px; }
.kolonka__shapka h3 { font-size: 20px; }
.kolonka__ikonka {
  width: 52px; height: 52px; flex: none; border-radius: 50%; background: var(--sin-svet); color: var(--sin);
  display: flex; align-items: center; justify-content: center;
}
.spisok-galki { list-style: none; margin: 0; padding: 0; display: grid; gap: 13px; }
.spisok-galki li { position: relative; padding-left: 30px; color: var(--tekst-2); font-size: 15px; line-height: 1.5; }
.spisok-galki li::before {
  content: ""; position: absolute; left: 0; top: 3px; width: 20px; height: 20px; border-radius: 5px; background: var(--sin)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M2.5 6.2l2.3 2.3 4.7-5' stroke='%23ffffff' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat;
}

/* ---------- порядок работы: шаги ----------
   Было: шесть ячеек в общей рамке, разделённых волосяными линиями. Читалось
   как таблица — ни направления, ни ощущения пути, а названия шагов были
   пустыми, и оставался только номер над серой строкой.
   Стало: дорожка. Линия проходит через номера и показывает направление,
   название шага набрано крупно, пояснение уходит под него. */
.shagi { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0; }
.shagi--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.shagi--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.shagi--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
/* Шесть — это и есть основной случай, но правило нужно явно: иначе
   .shagi--6 висит в разметке классом, которого нет ни в одном css, и
   проверка вёрстки каждый раз показывает его как потерянный. */
.shagi--6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }

.shag { position: relative; padding: 0 18px 0 0; }
.shag__verh { position: relative; height: 44px; display: flex; align-items: center; }
/* Линия — от центра номера вправо, до центра следующего. У последнего шага
   её нет: иначе дорожка обрывается в пустоту за краем секции. */
.shag:not(:last-child) .shag__verh::after {
  content: ''; position: absolute; left: 44px; right: -18px; top: 50%;
  height: 2px; background: var(--linia);
}
.shag__nomer {
  position: relative; z-index: 1; flex: none;
  font-family: Montserrat, sans-serif; font-size: 17px; font-weight: 800; line-height: 44px;
  width: 44px; height: 44px; text-align: center; border-radius: 50%;
  background: var(--sin); color: #fff;
  box-shadow: 0 0 0 6px #fff, 0 6px 16px rgba(13,79,194,.28);
  transition: transform var(--t);
}
.shag:hover .shag__nomer { transform: translateY(-2px); }
.shag__imya {
  font-family: Montserrat, sans-serif; font-weight: 700; font-size: 16px; line-height: 1.25;
  margin-top: 18px; color: var(--tekst);
}
.shag__text { color: var(--tekst-2); font-size: 13px; line-height: 1.5; margin-top: 8px; }

/* ---------- лизинг ----------
   Раньше было «текст слева, четыре карточки справа, по центру»: карточки
   держали высоту, под текстом оставалась пустая треть секции, а самого
   оборудования в блоке про оборудование не было ни одного кадра.
   Теперь слева весь рассказ (текст → пункты → кнопки), справа фото во всю
   высоту колонки. */
.lizing__ryad { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, .92fr); gap: 48px; align-items: stretch; }
.lizing__text { display: flex; flex-direction: column; }
.lizing__text p { color: var(--tekst-2); margin: 12px 0 0; max-width: 52ch; }
.lizing__knopki { display: flex; flex-wrap: wrap; gap: 12px; margin-top: auto; padding-top: 26px; }

/* Пункты — список в одну колонку: в две они читались как четыре отдельные
   карточки-плитки, хотя это перечисление условий одной услуги. */
.lizing__punkty { list-style: none; margin: 24px 0 0; padding: 0; display: grid; gap: 10px; }
.lizing__punkt {
  display: flex; gap: 14px; align-items: center; background: #fff;
  border: 1px solid var(--linia); border-radius: var(--radius);
  padding: 14px 18px; font-size: 14px; line-height: 1.4; color: var(--tekst);
  transition: border-color var(--t), box-shadow var(--t);
}
.lizing__punkt:hover { border-color: var(--sin); box-shadow: 0 8px 20px rgba(21,24,29,.07); }
.lizing__ikonka {
  width: 34px; height: 34px; flex: none; border-radius: 9px; background: var(--sin-svet); color: var(--sin);
  display: flex; align-items: center; justify-content: center;
}

.lizing__foto {
  position: relative; margin: 0; border-radius: var(--radius); overflow: hidden;
  min-height: 420px; background: var(--fon-hol);
}
.lizing__foto img { width: 100%; height: 100%; object-fit: cover; display: block; position: absolute; inset: 0; }
/* Плашка поверх фото: тёмная подложка, иначе белый текст пропадает на
   светлом кадре, а фото у нас загружает человек и предсказать его нельзя. */
.lizing__plashka {
  position: absolute; left: 20px; right: 20px; bottom: 20px; z-index: 2;
  background: rgba(21,24,29,.82); color: #fff; border-radius: var(--radius-s);
  padding: 16px 20px; display: grid; gap: 4px; backdrop-filter: blur(3px);
}
.lizing__plashka-zag { font-family: Montserrat, sans-serif; font-weight: 800; font-size: 21px; line-height: 1.1; }
.lizing__plashka-text { font-size: 13px; color: #d5dae1; line-height: 1.4; }

/* ---------- сервис и запчасти ---------- */
.servis {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px;
  background: var(--linia); border: 1px solid var(--linia); border-radius: var(--radius); overflow: hidden;
}
.servis__punkt { background: #fff; padding: 28px 26px 30px; transition: background var(--t); }
.servis__punkt:hover { background: var(--fon-hol); }
.servis__ikonka {
  width: 56px; height: 56px; border-radius: 50%; background: var(--sin-svet); color: var(--sin);
  display: flex; align-items: center; justify-content: center;
}
.servis__imya { font-family: Montserrat, sans-serif; font-weight: 700; font-size: 17px; line-height: 1.25; margin-top: 18px; }
.servis__text { color: var(--tekst-3); font-size: 14px; line-height: 1.45; margin-top: 8px; }
.servis__polosa {
  margin-top: 20px; border: 1px solid var(--linia); border-radius: var(--radius); padding: 20px 26px;
  display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap;
}
.servis__polosa p { margin: 0; color: var(--tekst-2); }

/* ---------- частые вопросы ---------- */
/* две колонки: одна на всю ширину экрана выглядит обрубленной.
   align-items: start — иначе раскрытый вопрос растягивает рамку соседнего */
.voprosy { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 20px; align-items: start; }
.vopros { border: 1px solid var(--linia); border-radius: var(--radius); transition: border-color var(--t); }
.vopros[open] { border-color: var(--sin); }
.vopros summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 20px;
  padding: 18px 24px; font-family: Montserrat, sans-serif; font-weight: 700; font-size: 16px;
}
.vopros summary::-webkit-details-marker { display: none; }
.vopros summary::after {
  content: ""; width: 22px; height: 22px; flex: none; transition: transform var(--t);
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230d4fc2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center/18px no-repeat;
}
.vopros[open] summary::after { transform: rotate(180deg); }
.vopros summary:hover { color: var(--sin); }
.vopros__otvet { padding: 0 24px 20px; color: var(--tekst-2); max-width: 86ch; }

/* ---------- хиты продаж: ровно четыре в ряд ---------- */
.tovary-setka--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

/* ============================================================
   ПРОСМОТР ФОТО НА ВЕСЬ ЭКРАН (карточка товара)
   Класс на .tovar__foto-bolshoe вешает скрипт — без JS курсор-лупа
   обещала бы увеличение, которого нет.
   ============================================================ */
.tovar__foto-bolshoe--uvelichit { cursor: zoom-in; position: relative; }
.tovar__foto-bolshoe--uvelichit::after {
  content: ""; position: absolute; right: 14px; bottom: 14px; width: 34px; height: 34px;
  border-radius: 50%; background: rgba(255,255,255,.92) center/18px no-repeat
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2325282b' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.5-3.5M11 8.5v5M8.5 11h5'/%3E%3C/svg%3E");
  box-shadow: 0 2px 10px rgba(21,24,29,.18); opacity: .85; transition: opacity var(--t);
}
.tovar__foto-bolshoe--uvelichit:hover::after { opacity: 1; }

body.bez-prokrutki { overflow: hidden; }

.prosmotr {
  position: fixed; inset: 0; z-index: 100; display: none;
  align-items: center; justify-content: center; padding: 56px 72px;
  background: rgba(16, 18, 22, .93); backdrop-filter: blur(3px);
}
.prosmotr.otkryt { display: flex; }
.prosmotr img {
  max-width: 100%; max-height: 100%; width: auto; height: auto;
  object-fit: contain; border-radius: var(--radius-s); background: #fff;
  /* Кадр листается щелчком по нему, поэтому курсор обязан об этом говорить */
  cursor: pointer; user-select: none;
}
.prosmotr__zakryt {
  position: absolute; top: 16px; right: 20px; width: 46px; height: 46px;
  font-size: 30px; line-height: 1; color: #fff; border-radius: 50%;
  background: rgba(255,255,255,.12); transition: background var(--t);
}
.prosmotr__zakryt:hover { background: rgba(255,255,255,.24); }
.prosmotr__strelka {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 52px; height: 52px; font-size: 34px; line-height: 1; color: #fff;
  border-radius: 50%; background: rgba(255,255,255,.12); transition: background var(--t);
}
.prosmotr__strelka:hover { background: rgba(255,255,255,.24); }
.prosmotr__strelka--nazad  { left: 16px; }
.prosmotr__strelka--vpered { right: 16px; }
.prosmotr__schet {
  position: absolute; bottom: 18px; left: 50%; transform: translateX(-50%);
  color: rgba(255,255,255,.72); font-size: 13px; letter-spacing: .04em;
}
@media (max-width: 620px) {
  .prosmotr { padding: 56px 12px 48px; }
  .prosmotr__strelka { width: 42px; height: 42px; font-size: 26px; }
  .prosmotr__strelka--nazad { left: 6px; }
  .prosmotr__strelka--vpered { right: 6px; }
}

/* ---------- адаптив разделов ---------- */

/* Дорожка шагов при переносе на новую строку.
   Линию рисует ::after у каждого шага, кроме последнего. Но когда шесть
   шагов ложатся в три колонки, последним в СТРОКЕ становится третий — и
   его линия уходила вправо в пустоту. Поэтому на каждой ширине гасим линию
   у того шага, который закрывает строку. Диапазоны не перекрываются, иначе
   пришлось бы включать линию обратно там, где её погасила ширина больше. */
@media (min-width: 1281px) {
  .shag:nth-child(6n) .shag__verh::after { content: none; }
}
@media (max-width: 1280px) and (min-width: 769px) {
  .shagi { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 34px; }
  .shag:nth-child(3n) .shag__verh::after { content: none; }
}
@media (max-width: 768px) and (min-width: 481px) {
  .shag:nth-child(2n) .shag__verh::after { content: none; }
}
@media (max-width: 1200px) {
  .servis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tovary-setka--4 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .lizing__ryad { gap: 32px; }
  .novosti--spisok { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 992px) {
  .linii, .novosti, .novosti--spisok { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* В одну колонку фото уходит вниз под кнопки и уже не обязано держать
     высоту текстовой колонки — иначе на телефоне это полтора экрана камня. */
  .lizing__ryad { grid-template-columns: 1fr; gap: 28px; align-items: start; }
  .lizing__foto { min-height: 280px; }
  .lizing__knopki { margin-top: 26px; }
  .tovary-setka--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
  .dve-kolonki { grid-template-columns: 1fr; }
  .shagi { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 30px; }
  .kolonka { padding: 22px 20px 24px; }
}
@media (max-width: 620px) {
  .linii, .novosti, .novosti--spisok { grid-template-columns: 1fr; }
  .liniya__foto { height: 220px; }
  .novost__foto { height: 200px; }
  .voprosy { grid-template-columns: 1fr; }
  .lizing__punkty { grid-template-columns: 1fr; }
  .lizing__knopki .knopka { width: 100%; }
  .servis { grid-template-columns: 1fr; }
  .servis__polosa { flex-direction: column; align-items: flex-start; }
  .servis__polosa .knopka { width: 100%; }
  .vopros summary { padding: 15px 18px; font-size: 15px; }
  .vopros__otvet { padding: 0 18px 17px; }
}
@media (max-width: 480px) {
  /* Каталог на телефоне — одной колонкой. В двух на 390 px на название
     раздела остаётся ~105 px, и «Оцилиндровочные» приходится рвать посреди
     слова. В одну колонку имена влезают целиком, строка становится высотой
     с палец, а высоту списка держит своя прокрутка (см. блок 768 px). */
  .megamenu__setka { grid-template-columns: 1fr; }

  /* В одну колонку дорожка разворачивается вертикально: номер уходит влево,
     линия идёт сверху вниз между номерами. Горизонтальная линия здесь была
     бы бессмыслицей — справа от номера ничего нет. */
  .shagi { grid-template-columns: 1fr; }
  .shag { padding: 0 0 24px 60px; }
  .shag__verh { position: absolute; left: 0; top: 0; height: 44px; }
  .shag:not(:last-child) .shag__verh::after { content: none; }
  .shag:not(:last-child)::before {
    content: ''; position: absolute; left: 21px; top: 50px; bottom: 6px;
    width: 2px; background: var(--linia);
  }
  .shag__imya { margin-top: 0; min-height: 44px; display: flex; align-items: center; }
  .tovary-setka--4 { grid-template-columns: 1fr; }
}

/* ---------- подсказки поиска ----------
   Список лежит внутри .poisk (у неё position: relative), поэтому z-index
   считается внутри шапки: 60 хватает, чтобы перекрыть мегаменю (49),
   и не надо соревноваться с самой шапкой (50). */
.podskazki {
  position: absolute; left: 0; right: 0; top: calc(100% + 6px); z-index: 60;
  background: #fff; border: 1px solid var(--linia); border-radius: var(--radius-s);
  box-shadow: 0 18px 40px rgba(21,24,29,.16);
  max-height: min(70vh, 520px); overflow-y: auto; padding: 6px 0;
}
.podskazki__zagolovok {
  padding: 8px 16px 6px; font-size: 11px; font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; color: var(--tekst-3);
}
.podskazka {
  display: grid; grid-template-columns: 46px minmax(0, 1fr) auto; align-items: center;
  gap: 12px; padding: 8px 16px; text-decoration: none; color: var(--tekst);
  border-left: 3px solid transparent;
}
.podskazka:hover,
.podskazka--vybrana { background: var(--fon-hol); border-left-color: var(--sin); }
.podskazka__foto { display: flex; align-items: center; justify-content: center; height: 40px; }
.podskazka__foto img { max-width: 100%; max-height: 40px; object-fit: contain; }
.podskazka__bez-foto {
  width: 40px; height: 40px; border-radius: var(--radius-s); background: var(--fon-tepl);
}
.podskazka__telo { display: grid; gap: 2px; min-width: 0; }
.podskazka__imya {
  font-size: 13px; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.podskazka__imya b { font-weight: 700; color: var(--sin); }
.podskazka__razdel { font-size: 11px; color: var(--tekst-3); }
.podskazka__cena { font-size: 13px; font-weight: 700; white-space: nowrap; }
/* строка раздела короче товарной: фото у неё нет, поэтому своя раскладка */
.podskazka--razdel { grid-template-columns: minmax(0, 1fr) auto; }
.podskazka--razdel .podskazka__imya { font-weight: 600; }
.podskazka__kolvo {
  font-size: 12px; color: var(--tekst-3); background: var(--fon-hol);
  border-radius: 20px; padding: 2px 9px;
}
.podskazki__pusto { padding: 14px 16px; font-size: 13px; color: var(--tekst-2); line-height: 1.5; }
.podskazki__pusto a { color: var(--sin); font-weight: 700; white-space: nowrap; }
.podskazki__vse {
  display: block; padding: 11px 16px; margin-top: 4px; border-top: 1px solid var(--linia);
  font-size: 13px; font-weight: 700; color: var(--sin); text-decoration: none; text-align: center;
}
.podskazki__vse:hover { background: var(--fon-hol); }

/* ---------- страница результатов поиска ---------- */
.rezultaty { padding-bottom: 40px; }
.rezultaty__pusto { font-size: 15px; color: var(--tekst-2); line-height: 1.6; }
.rezultaty__pusto a { color: var(--sin); font-weight: 700; }

@media (max-width: 900px) {
  /* Узкий экран: подпись раздела под названием убираем, фото ужимаем.
     Раскладку правим только у товарных строк — у строки раздела колонок
     две, и общее правило .podskazka загоняло её название в колонку 40 px,
     а счётчик растягивало на всю ширину. */
  .podskazka__razdel { display: none; }
  .podskazka:not(.podskazka--razdel) { grid-template-columns: 40px minmax(0, 1fr) auto; gap: 10px; }
}

/* ---------- фильтры и сортировка каталога ----------
   Скрытую карточку прячем именно так: у .tovar-kartochka стоит display: flex,
   и он перебивает браузерное [hidden] { display: none } — без этого правила
   отфильтрованные карточки остались бы на месте. */
.tovar-kartochka[hidden] { display: none; }

.sortirovka__vybor {
  height: 32px; padding: 0 28px 0 8px; border: 1px solid var(--linia); border-radius: var(--radius-s);
  background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%237e838a' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 9px center;
  -webkit-appearance: none; appearance: none;
  font: inherit; font-size: 14px; font-weight: 600; color: var(--tekst); cursor: pointer;
}
.sortirovka__vybor:hover { border-color: var(--sin); color: var(--sin); }
.sortirovka__vybor:focus-visible { outline: 2px solid var(--sin); outline-offset: 1px; }

.panel-sortirovki__pravo { display: flex; align-items: center; gap: 14px; }
.najdeno { font-size: 13px; color: var(--tekst-3); white-space: nowrap; }
.vid__knopka--aktivna { background: var(--sin-svet); color: var(--sin); }

.nichego-net {
  margin: 0; padding: 40px 24px; border: 1px solid var(--linia); border-radius: var(--radius);
  font-size: 15px; line-height: 1.6; color: var(--tekst-2); text-align: center;
}
.ssylka-knopka { font: inherit; font-weight: 700; color: var(--sin); text-decoration: underline; cursor: pointer; }
.ssylka-knopka:hover { color: var(--oranzh); }

/* Список: та же карточка, только фото уезжает влево. Ширину фото держим
   фиксированной, иначе при длинном названии колонки пляшут от строки к строке. */
.tovary-setka--spisok { grid-template-columns: 1fr; gap: 14px; }
.tovary-setka--spisok .tovar-kartochka { flex-direction: row; }
.tovary-setka--spisok .tovar-kartochka__verh {
  width: 260px; flex: none; border-bottom: 0; border-right: 1px solid var(--linia);
}
/* Высота именно в пикселях, а не 100%: у родителя высота auto, проценты
   такому не считаются, и размер карточки начинал диктовать натуральный
   размер фотографии — строка раздувалась до 240 px с дырой под ценой. */
.tovary-setka--spisok .tovar-kartochka__foto { height: 180px; }
.tovary-setka--spisok .tovar-kartochka__telo { flex: 1; }
.tovary-setka--spisok .tovar-kartochka__hara { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 28px; }

@media (max-width: 700px) {
  /* на телефоне список и плитка совпадают: 260 px под фото там нет */
  .tovary-setka--spisok .tovar-kartochka { flex-direction: column; }
  .tovary-setka--spisok .tovar-kartochka__verh { width: auto; border-right: 0; border-bottom: 1px solid var(--linia); }
  .tovary-setka--spisok .tovar-kartochka__foto { height: 180px; }
  .tovary-setka--spisok .tovar-kartochka__hara { grid-template-columns: 1fr; }
  .panel-sortirovki { height: auto; flex-wrap: wrap; padding: 10px 12px; gap: 10px; }
  .vid { display: none; }
}

/* ---------- текстовая страница (политика) ---------- */
.tekstovaya { max-width: 840px; padding-bottom: 48px; font-size: 15px; line-height: 1.7; color: var(--tekst-2); }
.tekstovaya h2 {
  margin: 34px 0 12px; font-family: Montserrat, sans-serif; font-size: 20px;
  font-weight: 700; line-height: 1.3; color: var(--tekst);
}
.tekstovaya h2:first-child { margin-top: 0; }
.tekstovaya p { margin: 0 0 12px; }

/* ---------- 404 ---------- */
.oshibka { padding: 60px 0 80px; text-align: center; }
.oshibka__chislo {
  font-family: Montserrat, sans-serif; font-size: clamp(90px, 18vw, 170px); font-weight: 800;
  line-height: 1; letter-spacing: -.04em; color: var(--sin-svet);
}
.oshibka h1 { margin: 6px 0 14px; font-family: Montserrat, sans-serif; font-size: clamp(24px, 4vw, 34px); font-weight: 800; }
.oshibka p { max-width: 560px; margin: 0 auto; font-size: 15px; line-height: 1.6; color: var(--tekst-2); }
.oshibka__ssylki { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin: 28px auto 0; max-width: 780px; }
.oshibka__ssylki .knopka { height: 40px; padding: 0 18px; font-size: 13px; }
.oshibka__pomoshch { margin-top: 28px; }
.oshibka__pomoshch a { font-weight: 700; color: var(--sin); white-space: nowrap; }
