/* Собрано из redesign/build/styles/*.css (файл на блок). Здесь не править. */

/* ===== 00-base.css ===== */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0}
/* Атрибут hidden значит «этого нет» и должен побеждать любую раскладку —
   иначе каждый блок с display:flex снова показывает спрятанное. */
[hidden]{display:none !important}

/* ============================================================
   ПРОТОТИП САЙТА
   ============================================================ */
/* Токен шрифта живёт здесь: страницы макета подключают только этот файл,
   а в CSS презентации его нет — без определения var(--fx) не разрешается
   и браузер откатывается на шрифт с засечками. */
body.site{
  --fx:'Onest',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --ink:#1A1D1B; --muted:#70786F; --soft:#F2F3F0; --line:#E5E7E2; --paper:#FFFFFF;
  --green:#4F8452; --green-dk:#3E6C41; --green-soft:#EAF2E9;
  --orange:#E4671F; --orange-soft:#FCEDE2;
  --rc:22px; --ri:16px; --rp:999px;
  /* Шкала отступов. Любой зазор, поле или внешний отступ между элементами
     берётся отсюда; значения между ступенями не используем. Сетки карточек
     держат один зазор по обеим осям — горизонтальный не меньше и не больше
     вертикального. Внутренние поля мелких элементов (кнопка, пилюля, поле
     ввода, ячейка таблицы) — это посадка текста, а не отступ; они шкале не
     подчиняются. */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:22px; --s6:30px; --s7:44px; --s8:56px;
  --gut:40px; --gut-sm:18px;
  font-family:var(--fx); color:var(--ink); background:var(--paper); font-size:16px; line-height:1.55;
}
.site *{box-sizing:border-box}
.site h1,.site h2,.site h3,.site h4{margin:0; letter-spacing:-.02em; text-wrap:balance}
.site p{margin:0}
.site a{color:inherit; text-decoration:none}
.site button{font:inherit}
.site img{max-width:100%}
.sprite{position:absolute; width:0; height:0; overflow:hidden}
.site .num{font-variant-numeric:tabular-nums}
.k{max-width:1380px; margin:0 auto; padding:0 var(--gut)}
@media (max-width:900px){.k{padding:0 var(--gut-sm)}}

/* ===== 01-controls.css ===== */
/* --- кнопки и пилюли --- */
.btn{display:inline-flex; align-items:center; justify-content:center; gap:var(--s2);
  border-radius:var(--rp); padding:var(--s4) var(--s6); font-size:15px; font-weight:500; border:1px solid transparent; cursor:pointer; white-space:nowrap}
.site .btn-g{background:var(--green); color:#fff}
.site .btn-g:hover{background:var(--green-dk)}
.site .btn-w{background:var(--paper); color:var(--ink); border-color:var(--line)}
.site .btn-w:hover{border-color:var(--green)}
.site .btn-d{background:var(--ink); color:#fff}
.btn-s{padding:10px 20px; font-size:14px}
.btn-wide{width:100%; padding:18px; font-size:16px}
.arrows{display:flex; gap:var(--s2)}
.arrows button{width:44px; height:44px; border-radius:50%; border:1px solid var(--line); background:var(--paper); cursor:pointer; color:var(--ink); display:grid; place-items:center}
.arrows button:hover{border-color:var(--green); color:var(--green)}
.chipbar{display:flex; gap:var(--s2); flex-wrap:wrap}
.chipbar button{border:1px solid var(--line); background:var(--paper); border-radius:var(--rp); padding:9px 18px; font-size:14px; cursor:pointer; color:var(--ink)}
.chipbar button i{font-style:normal; color:var(--muted)}
.chipbar button[aria-pressed="true"]{background:var(--ink); color:#fff; border-color:var(--ink)}
.chipbar button[aria-pressed="true"] i{color:#9AA69C}

/* ===== 02-ph.css ===== */
/* --- фото-плашки --- */
.ph{position:relative; overflow:hidden; border-radius:var(--ri);
  background:linear-gradient(140deg,var(--c1,#8FA9A2),var(--c2,#5E7C74)); display:grid; place-items:center}
.ph::after{content:''; position:absolute; inset:0; background:radial-gradient(115% 85% at 18% 8%,rgba(255,255,255,.26),transparent 62%)}
.ph > svg{width:36%; height:36%; color:#fff; opacity:.5; position:relative; z-index:1}
.ph .tags{position:absolute; z-index:2; top:12px; left:12px; display:flex; gap:var(--s2); flex-wrap:wrap; max-width:calc(100% - 60px)}
.tag{background:rgba(255,255,255,.94); color:#252926; border-radius:var(--rp); padding:5px 12px; font-size:12px; font-weight:500; white-space:nowrap}
.tag.hot{background:var(--orange); color:#fff}
.fav{position:absolute; z-index:2; top:12px; right:12px; width:34px; height:34px; border-radius:50%;
  background:rgba(255,255,255,.94); border:0; display:grid; place-items:center; cursor:pointer; color:#3A403B}
.fav[data-on="1"]{color:var(--orange)}
.ph .over{position:absolute; z-index:2; left:22px; right:22px; bottom:20px; color:#fff}
.ph .over b{display:block; font-size:19px; font-weight:600; letter-spacing:-.01em}
.ph .over span{font-size:14px; opacity:.88}
/* Фото в плашке: по умолчанию заполняет её целиком с обрезкой по краям.
   Снимок на белом фоне (.pic) показываем целиком: белое умножением уходит в
   цвет плашки, товар остаётся посередине. */
.ph img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:1}
.ph.pic img{object-fit:contain; padding:4%; mix-blend-mode:multiply}
/* Снимок на белом фоне кладём на светлую плашку, а не на цвет группы: белое
   умножением превращалось в жёлтое или зелёное. Цвет группы остаётся у плашек
   без снимка. */
.ph.pic{--c1:#F2F3F0; --c2:#E4E7E1}
.ph.pic::after{display:none}
/* Крупная плашка с подписью: снимок виден целиком, белый фон уходит в цвет
   плашки умножением — полей по бокам нет, подпись внизу читается на тени. */
.ph.blend img{object-fit:contain; padding:0; mix-blend-mode:multiply}
.ph-stretch{--c1:#9BB3AE; --c2:#5F7D78}
.ph-scotch{--c1:#C8A97C; --c2:#8A6A3F}
.ph-print{--c1:#C2B07A; --c2:#7E6B33}
.ph-carton{--c1:#D2A369; --c2:#9A6B33}
.ph-bubble{--c1:#A9BFC6; --c2:#6A8590}
.ph-steel{--c1:#B0BEC4; --c2:#6C7F88}
.ph-glove{--c1:#BFC6BC; --c2:#79837A}
.ph .shade{position:absolute; inset:0; z-index:1; background:linear-gradient(to top,rgba(12,18,14,.62),rgba(12,18,14,0) 55%)}

/* цвета подложек и формы плашки — вместо style= (K-29). Форма — через .site,
   чтобы перебить форму плашки внутри плитки (.ccard .ph, .ncard .ph). */
.ph-moss{--c1:#AEBBAA; --c2:#6B7A67}
.ph-amber{--c1:#C7A575; --c2:#7E5B2E}
.ph-ash{--c1:#B7C0B5; --c2:#737D71}
.ph-teal{--c1:#8FA9A2; --c2:#4E6A64}
.ph-khaki{--c1:#BDB69E; --c2:#7C7458}
.ph-mist{--c1:#B9C4CB; --c2:#75838C}
.ph-fern{--c1:#9FB59A; --c2:#5E7359}
.ph-slate{--c1:#7C8A85; --c2:#3B4744}
.ph-forest{--c1:#6E8F6B; --c2:#3C5B45}
.ph-honey{--c1:#C8A97C; --c2:#7E5B2E}
.site .ph.r16x10{aspect-ratio:16/10}
.site .ph.r16x9{aspect-ratio:16/9}
.site .ph.hero{min-height:340px}
.site .ph.hero-s{min-height:300px}

/* ===== 03-header.css ===== */
/* --- шапка --- */
.s-strip{border-bottom:1px solid var(--line); font-size:13.5px; color:var(--muted)}
.s-strip .k{display:flex; align-items:center; gap:var(--s5); height:42px}
.s-strip .city{color:var(--ink); font-weight:500; display:flex; align-items:center; gap:var(--s2)}
.s-strip .city em{font-style:normal; color:var(--muted); font-weight:400; border-bottom:1px dashed var(--line); cursor:pointer}
.s-strip .r{margin-left:auto; display:flex; gap:var(--s5)}
@media (max-width:900px){.s-strip .r{display:none}}

.s-head .k{display:flex; align-items:center; gap:var(--s6); height:78px}
.s-logo{display:flex; align-items:center; gap:var(--s3); flex:0 0 auto}
.s-logo b{display:block; font-size:17px; font-weight:700; letter-spacing:-.02em; line-height:1.1}
.s-logo span{display:block; font-size:11.5px; color:var(--muted)}
.s-menu{display:flex; gap:var(--s5); font-size:15px; flex-wrap:nowrap; overflow:hidden}
.s-menu a:hover{color:var(--green)}
.s-menu a.on{font-weight:600}
.s-tools{margin-left:auto; display:flex; align-items:center; gap:var(--s4); flex:0 0 auto}
.s-tools .tel{font-size:18px; font-weight:700; letter-spacing:-.02em; white-space:nowrap}
.s-tools .ic{width:42px; height:42px; border-radius:50%; border:1px solid var(--line); background:var(--paper); display:grid; place-items:center; cursor:pointer; color:var(--ink)}
.s-tools .ic:hover{border-color:var(--green); color:var(--green)}
/* Счётчик в углу иконки: при одной цифре — ровный круг (ширина равна
   высоте), при двух и больше — растёт в пилюлю. */
.s-tools .ic{position:relative}
.s-tools .ic .cnt{position:absolute; top:-5px; right:-5px; min-width:18px; height:18px; padding:0 5px; box-sizing:border-box; display:grid; place-items:center; background:var(--orange); color:#fff; font-size:11px; font-weight:600; line-height:1; border-radius:var(--rp)}
.s-tools .ic .cnt:empty{display:none}
/* Поиск в шапке: поле выезжает влево из иконки, иконка становится кнопкой «найти». */
.s-search{position:relative; display:flex; align-items:center}
.s-search .ic{padding:0; font:inherit}
/* Поле лежит поверх меню, а не раздвигает его: шапка при открытии не прыгает. */
.s-search input{position:absolute; right:calc(100% + var(--s2)); top:0; z-index:5; width:0; min-width:0; opacity:0; height:42px; border:1px solid var(--line); border-radius:var(--rp); padding:0; margin:0; font:inherit; font-size:14.5px; color:var(--ink); background:var(--paper); box-shadow:0 6px 24px rgba(0,0,0,.08); transition:width .3s ease, opacity .2s, padding .3s}
.s-search.open input{width:280px; opacity:1; padding:0 var(--s4)}
.s-search input:focus{outline:2px solid var(--green); outline-offset:-1px; border-color:transparent}
@media (max-width:640px){.s-search.open input{width:200px}}
/* Узкие экраны: шапка закреплена, меню — за бургером. На телефоне остаются
   лого, телефон и бургер (и заявка со счётчиком). */
.s-tools .tel-ic,.s-tools .burger{display:none}
.s-tools .burger{padding:0; font:inherit}
.s-menu a{white-space:nowrap}
.s-drawer{border-top:1px solid var(--line); background:var(--paper); padding:var(--s4) 0 var(--s5); box-shadow:0 18px 40px rgba(0,0,0,.12)}
/* Внутри меню обычный поток: правило шапки .s-head .k (flex, 78px) сюда не относится. */
.s-drawer .k{display:block; height:auto}
.s-drawer ul{list-style:none; margin:0; padding:0}
.dr-menu{display:flex; flex-direction:column; gap:var(--s3); font-size:18px; font-weight:600}
.dr-more{display:flex; flex-wrap:wrap; gap:var(--s2) var(--s4); margin-top:var(--s4); padding-top:var(--s4); border-top:1px solid var(--line); font-size:15px; color:var(--muted)}
.dr-adr{margin-top:var(--s4); padding-top:var(--s4); border-top:1px solid var(--line); font-size:14.5px; color:var(--muted); line-height:1.6}
.dr-adr .tel{display:block; font-size:20px; font-weight:700; color:var(--ink); margin-bottom:var(--s2)}
.dr-adr p + p{margin-top:var(--s1)}
.dr-adr b{color:var(--ink); font-weight:600}
/* Семь пунктов меню с телефоном и иконками помещаются от 1320 px; уже —
   меню за бургером. */
@media (max-width:1320px){
  .s-menu{display:none}
  .s-tools .burger{display:grid}
  /* Верхняя полоса уезжает первой, и шапка «съезжала», прежде чем закрепиться;
     на этих ширинах полосы нет — её ссылки и соцсети в меню. */
  .s-strip{display:none}
  .s-head{position:sticky; top:0; z-index:30; background:var(--paper); box-shadow:0 1px 0 var(--line)}
  .s-vol{padding-top:var(--s3)}
  .bc{padding-top:var(--s5)}
  .s-drawer{position:absolute; left:0; right:0; top:100%; max-height:calc(100vh - 80px); overflow:auto}
}
@media (max-width:640px){
  .s-tools .tel{display:none}
  .s-tools .tel-ic{display:grid}
  .s-search,.s-tools a[href="/favorites/"],.s-tools a[href="/order/"]{display:none}
  .s-head .k{gap:var(--s3)}
  .s-logo > span > span{display:none}
  .s-tools{gap:var(--s2)}
  .s-tools .ic{width:38px; height:38px}
}

/* значок заявки вздрагивает, когда позиция добавлена */
.s-tools .ic.pulse{border-color:var(--green); color:var(--green)}

/* ===== 04-volume.css ===== */
/* --- объём заказа --- */
.s-vol{padding:0 0 var(--s2)}
.s-vol .box{background:var(--green-soft); border-radius:var(--rp); padding:10px 12px 10px 24px; display:flex; align-items:center; gap:var(--s4); flex-wrap:nowrap}
.s-vol .lb{font-size:14px; font-weight:500; white-space:nowrap; flex:0 0 auto}
.s-vol .lb i{font-style:normal; font-weight:400; color:#5E7A5C}
.s-vol .steps{display:flex; gap:6px; flex-wrap:nowrap; flex:0 0 auto}
.s-vol .steps button{white-space:nowrap}
.s-vol .steps button{border:0; background:transparent; border-radius:var(--rp); padding:9px 18px; font-size:14px; cursor:pointer; color:#3F5B3E}
.s-vol .steps button:hover{background:rgba(255,255,255,.6)}
/* Выбранная ступень выделяется цветом, а не жирностью: жирный шрифт шире,
   и от смены ширины кнопки подсказка справа уезжала на вторую строку. */
.s-vol .steps button[aria-pressed="true"]{background:var(--green); color:#fff}
/* Подсказка занимает остаток строки и никогда её не ломает: не влезла — обрезается. */
.s-vol .hint{font-size:13.5px; color:#5E7A5C; margin-left:auto; padding-right:var(--s3); flex:1 1 0; min-width:0; text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
/* Уже подсказка не помещается целиком — и обрезанная фраза хуже отсутствующей. */
/* На 1366 подсказка уже обрезалась многоточием — прячем её раньше. */
@media (max-width:1400px){.s-vol .hint{display:none}}
/* Полоса — строго одна строка (решение владельца corp:U-45: «Если не может
   сделать это адаптивным без переноса в 2 строки, то пусть просто уберёт
   это»). Уже 1000 px пояснение «— цены пересчитываются…» убирается, остаётся
   «Объём заказа» и четыре кнопки — они помещаются в строку до 641 px. */
@media (max-width:1000px){.s-vol .lb i{display:none}}
/* На телефонах полосы нет: по решению заказчика она там бесполезна. Ступень
   остаётся та, что запомнена, или оптовая по умолчанию. */
@media (max-width:640px){.s-vol{display:none}}

/* ===== 05-sect.css ===== */
/* --- секции --- */
.site main{display:block}
.sect{padding:var(--s8) 0}
.sect.soft{background:var(--soft)}
.sect.tight{padding-top:0}
.sh{display:flex; align-items:flex-end; gap:var(--s5); margin-bottom:var(--s6); flex-wrap:wrap}
.sh h2{font-size:clamp(24px,2.9vw,38px); font-weight:800; line-height:1.08}
.sh .sub{font-size:16px; color:var(--muted); margin-top:var(--s2); max-width:70ch}
.sh .side{margin-left:auto; display:flex; align-items:center; gap:var(--s4)}
.sh .side a{font-size:15px; color:var(--green); font-weight:500}
.bc{font-size:13.5px; color:var(--muted); padding:var(--s5) 0 0}
.bc a:hover{color:var(--green)}
.ph-head{padding:var(--s4) 0 var(--s6)}
.ph-head h1{font-size:clamp(28px,3.6vw,46px); font-weight:800; line-height:1.06}
.ph-head .sub{margin-top:var(--s4); font-size:17px; color:var(--muted); max-width:68ch}

/* свой верхний отступ секции — вместо style= (K-29); стоит после .sect.tight и перебивает его */
.sect.top-22{padding-top:22px}
.sect.top-26{padding-top:26px}
.sect.top-30{padding-top:30px}
.sect.top-32{padding-top:32px}
.sect.top-36{padding-top:36px}

/* ===== 06-banner.css ===== */
/* --- баннер-слайдер --- */
.banner{--c1:#6E8F6B; --c2:#3C5B45; border-radius:var(--rc); position:relative; overflow:hidden; min-height:330px; display:flex; align-items:center}
.banner::after{content:''; position:absolute; inset:0; background:radial-gradient(90% 120% at 78% 30%,rgba(255,255,255,.2),transparent 60%)}
.banner .bg{position:absolute; inset:0; background:linear-gradient(115deg,var(--c1),var(--c2))}
.banner .art{position:absolute; right:-40px; top:50%; transform:translateY(-50%); width:520px; opacity:.55; color:#fff}
.banner .bd{position:relative; z-index:2; padding:var(--s7) var(--s7); max-width:620px; color:#fff}
.banner h2{font-size:clamp(28px,3.4vw,44px); font-weight:800; line-height:1.06}
.banner p{margin-top:var(--s4); font-size:16.5px; opacity:.9; max-width:44ch}
.banner .when{display:inline-flex; align-items:center; gap:9px; margin-top:var(--s5); background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.32); border-radius:var(--rp); padding:9px 18px; font-size:15px; font-weight:500}
.banner .b-cta{margin-top:var(--s5); display:flex; gap:var(--s4); flex-wrap:wrap}
/* Слайды лежат в одной клетке сетки: высота блока — по самому высокому слайду,
   при переключении ничего не прыгает. Показ — прозрачностью. */
.slider{display:grid}
.slider .banner{grid-area:1/1; opacity:0; transition:opacity .5s; pointer-events:none}
.slider .banner.on{opacity:1; pointer-events:auto}
.banner.b-print{--c1:#9A7A4C; --c2:#5A4326}
.banner.b-tape{--c1:#6C8590; --c2:#3F5661}
.dots{display:flex; gap:var(--s2); justify-content:center; margin-top:var(--s4)}
.dots button{width:26px; height:3px; border-radius:3px; background:var(--line); border:0; padding:0; cursor:pointer; transition:width .3s}
.dots button.on{background:var(--green); width:40px}
@media (max-width:760px){.banner .bd{padding:var(--s6) var(--s5)} .banner .art{display:none}}

/* ===== 07-intro.css ===== */
/* --- H1 + CTA --- */
/* Группы кнопок держат тот же зазор, что и сетки карточек: --s4. */
.intro{display:grid; grid-template-columns:minmax(0,1fr) auto; gap:var(--s7); align-items:start}
@media (max-width:900px){.intro{grid-template-columns:1fr; gap:var(--s5)}}
.intro h1{font-size:clamp(28px,3.9vw,50px); font-weight:800; line-height:1.06; max-width:20ch}
.intro p{margin-top:var(--s4); font-size:16.5px; color:var(--muted); max-width:62ch}
.intro .acts{display:flex; flex-direction:column; gap:var(--s4); align-items:stretch; min-width:290px}
.intro .acts small{color:var(--muted); font-size:13px; text-align:center}
@media (max-width:900px){.intro .acts{align-items:flex-start; min-width:0}}

/* ===== 08-trio.css ===== */
/* --- тройка карточек --- */
.trio{display:grid; grid-template-columns:1.55fr 1fr 1fr; gap:var(--s4)}
@media (max-width:1000px){.trio{grid-template-columns:1fr 1fr}}
@media (max-width:640px){.trio{grid-template-columns:1fr}}
.trio .big{grid-row:span 1}
.trio .ph{min-height:290px}
.trio .col{display:flex; flex-direction:column; gap:var(--s4)}
.trio .col .ph{min-height:190px}
.trio .col ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--s2); font-size:14px; color:var(--muted)}
.trio .col ul li{display:flex; gap:var(--s2); align-items:flex-start}
.trio .col ul li::before{content:'✓'; color:var(--green); font-weight:700}
.trio .col a.more{font-size:14.5px; color:var(--green); font-weight:500}

/* ===== 09-catgrid.css ===== */
/* --- сетка категорий --- */
/* Пять категорий — пять плиток в ряд: столько групп в каталоге. На узком
   экране последняя плитка не остаётся одна в ряду — растягивается на два. */
.catgrid{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:var(--s4)}
@media (max-width:1100px){.catgrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:700px){
  .catgrid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .catgrid .ccard:last-child:nth-child(odd){grid-column:1/-1}
  .catgrid .ccard:last-child:nth-child(odd) .ph{aspect-ratio:2/1}
}
.ccard .ph{aspect-ratio:5/4}
/* Наведение на плитку: снимок плавно наплывает, блик на плашке гаснет,
   заголовок зеленеет. Плитка при этом не двигается — сетка стоит на месте. */
.ccard .ph img{transition:transform .6s ease}
.ccard .ph::after{transition:opacity .4s ease}
.ccard:hover .ph img{transform:scale(1.08)}
.ccard:hover .ph::after{opacity:.35}
.ccard h3{transition:color .2s}
.ccard:hover h3{color:var(--green)}
.ccard h3{font-size:16.5px; font-weight:600; margin-top:var(--s3)}
.ccard p{font-size:13.5px; color:var(--muted); margin-top:var(--s1)}
.ccard .from{font-size:14px; font-weight:600; margin-top:var(--s2); color:var(--green)}

/* ===== 10-pcard.css ===== */
/* --- карточки товара --- */
.prods{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--s4)}
@media (max-width:1080px){.prods{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:780px){.prods{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:430px){.prods{grid-template-columns:1fr}}
.p-card{display:flex; flex-direction:column; position:relative}
/* Карточка кликабельна целиком: ссылка заголовка растянута на всю карточку
   псевдоэлементом, кнопки лежат выше неё. */
.p-card h3 a::after{content:''; position:absolute; inset:0; z-index:1}
.p-card .add{position:relative; z-index:2}
.p-card .ph img{transition:transform .5s ease}
.p-card:hover .ph img{transform:scale(1.05)}
.p-card:hover h3 a{color:var(--green)}
.p-card .ph{aspect-ratio:4/3}
.p-card .top{display:flex; align-items:center; gap:var(--s2); flex-wrap:wrap; margin-top:var(--s4)}
/* Круглая кнопка-корзина в строке с ценой, вместо широкой «В заявку». */
.p-card .add{margin-left:auto; width:36px; height:36px; border-radius:50%; border:1px solid var(--line); background:var(--paper); display:grid; place-items:center; cursor:pointer; color:var(--ink); padding:0}
.p-card .add:hover{border-color:var(--green); color:var(--green)}
.p-card .top + .top{margin-top:var(--s2)}
.prods-tabs{margin-bottom:var(--s5)}
.p-card .price{font-size:19px; font-weight:700; letter-spacing:-.02em}
.p-card .price em{font-style:normal; font-size:13px; font-weight:400; color:var(--muted)}
.p-card .sp{display:inline-flex; align-items:center; gap:5px; background:var(--soft); border-radius:var(--rp); padding:4px 11px; font-size:12.5px; color:#4C544D}
.p-card .sp svg{width:13px; height:13px; opacity:.75}
.p-card h3{font-size:15.5px; font-weight:600; margin-top:var(--s3); line-height:1.3}
.p-card .desc{font-size:13.5px; color:var(--muted); margin-top:var(--s1)}
.p-card .act{margin-top:var(--s3); display:flex; gap:var(--s2)}
.p-card .act .btn{flex:1; padding:11px 16px; font-size:14px}

/* листинг из данных: три колонки; отметка «добавлено в заявку» */
.prods.cols3{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:780px){.prods.cols3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:430px){.prods.cols3{grid-template-columns:1fr}}
.p-card .add.done{background:var(--green); color:#fff; border-color:var(--green)}

/* ===== 11-circles.css ===== */
/* --- круглые фото производства --- */
/* Карусели нет и не планируется: кружки прежнего размера, 150 px, а на всю
   ширину расходятся промежутки между ними. На узком экране — лента с
   прокруткой пальцем, без стрелок. */
.circles{display:flex; justify-content:space-between; gap:var(--s5); overflow-x:auto; padding-bottom:var(--s2); scrollbar-width:none}
.circles::-webkit-scrollbar{display:none}
.circles .c{flex:0 0 150px; text-align:center}
.circles .c .ph{width:150px; height:150px; border-radius:50%; border:3px solid var(--green)}
.circles .c span{display:block; font-size:13.5px; margin-top:var(--s3); color:var(--ink)}

/* ===== 12-ctaform.css ===== */
/* --- блок с формой --- */
.ctaform{--c1:#4E7A50; --c2:#2E4A34; border-radius:var(--rc); overflow:hidden; position:relative; color:#fff;
  display:grid; grid-template-columns:1fr 420px; gap:0}
.ctaform .bg{position:absolute; inset:0; background:linear-gradient(115deg,var(--c1),var(--c2))}
@media (max-width:900px){.ctaform{grid-template-columns:1fr}}
.ctaform .l{position:relative; z-index:2; padding:var(--s7) var(--s7)}
.ctaform h2{font-size:clamp(24px,2.8vw,36px); font-weight:800; line-height:1.08}
.ctaform ul{list-style:none; margin:var(--s5) 0 0; padding:0; display:flex; flex-direction:column; gap:var(--s3); font-size:15.5px}
.ctaform ul li{display:flex; gap:var(--s3)}
.ctaform ul li::before{content:'✓'; opacity:.85}
.ctaform .r{position:relative; z-index:2; background:var(--paper); color:var(--ink); margin:var(--s4); border-radius:var(--rc); padding:var(--s6)}
@media (max-width:900px){.ctaform .l{padding:var(--s6) var(--s5)} .ctaform .r{margin:0 var(--s4) var(--s4)}}

/* крупный телефон в блоке (контакты) */
.ctaform .l .bigtel{font-size:38px; font-weight:800; letter-spacing:-.03em; margin-top:16px}

/* ===== 13-form.css ===== */
.fld{display:flex; flex-direction:column; gap:var(--s2)}
.fld span{font-size:13px; color:var(--muted)}
.fld input,.fld select,.fld textarea{border:1px solid var(--line); border-radius:14px; padding:12px 15px; font:inherit; font-size:15px; background:var(--paper); color:var(--ink); width:100%}
.fld textarea{border-radius:16px}
.fld select{appearance:none; -webkit-appearance:none; padding-right:40px; background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 20 20'><path d='M5 8l5 5 5-5' fill='none' stroke='%2370786F' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"); background-repeat:no-repeat; background-position:right 15px center}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:2px solid var(--green); outline-offset:-1px; border-color:transparent}
.formgrid{display:grid; grid-template-columns:1fr 1fr; gap:var(--s3)}
.formgrid .full{grid-column:1/-1}
@media (max-width:560px){.formgrid{grid-template-columns:1fr}}
.consent{font-size:12.5px; color:var(--muted); display:flex; gap:var(--s2); align-items:flex-start}
.consent input{accent-color:var(--green); margin-top:var(--s1)}

/* ===== 14-calc.css ===== */
/* --- калькулятор --- */
.calc{display:grid; grid-template-columns:minmax(0,1fr) 330px; gap:0; background:var(--soft); border-radius:var(--rc); overflow:hidden}
@media (max-width:860px){.calc{grid-template-columns:1fr}}
.calc .in{padding:var(--s6) var(--s6)}
.calc h3{font-size:24px; font-weight:700}
.calc .hint{font-size:15px; color:var(--muted); margin-top:var(--s2); max-width:48ch}
.calc .row{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--s3); margin-top:var(--s5)}
@media (max-width:560px){.calc .row{grid-template-columns:1fr}}
.calc .out{background:var(--ink); color:#fff; padding:var(--s6) var(--s6); display:flex; flex-direction:column; justify-content:center; gap:var(--s1)}
.calc .out .big{font-size:46px; font-weight:800; line-height:1; letter-spacing:-.03em; font-variant-numeric:tabular-nums}
.calc .out .u{font-size:14.5px; color:#A3AFA4}
.calc .out .ln{display:flex; justify-content:space-between; gap:12px; font-size:14px; color:#C7D1C6; border-top:1px solid #2E352F; margin-top:var(--s4); padding-top:var(--s3); font-variant-numeric:tabular-nums}

/* ===== 15-news.css ===== */
/* --- новости и статьи --- */
.news{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--s4)}
@media (max-width:900px){.news{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.news{grid-template-columns:1fr}}
.ncard .ph{aspect-ratio:16/10}
.ncard .dt{font-size:13px; color:var(--muted); margin-top:var(--s3)}
.ncard h3{font-size:16.5px; font-weight:600; margin-top:var(--s2); line-height:1.3}
.ncard p{font-size:13.5px; color:var(--muted); margin-top:var(--s2)}

/* ===== 16-tiles.css ===== */
/* --- условия / плитки --- */
.tiles{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--s4)}
@media (max-width:860px){.tiles{grid-template-columns:1fr}}
.tile{background:var(--paper); border-radius:var(--rc); padding:var(--s6) var(--s6)}
.sect.soft .tile{background:var(--paper)}
.sect:not(.soft) .tile{background:var(--soft)}
.tile b{display:block; font-size:17px; font-weight:600; margin-bottom:var(--s2)}
.tile p{font-size:14.5px; color:var(--muted)}
.tile .free{color:var(--green); font-weight:600}
.tile ul{margin:var(--s3) 0 0; padding-left:var(--s5); font-size:14.5px; color:var(--muted); display:flex; flex-direction:column; gap:var(--s2)}

/* второй ряд плиток, две колонки, список городов (K-29) */
.tiles + .tiles{margin-top:var(--s4)}
.tiles.cols2{grid-template-columns:1fr 1fr}
.tile .cities{font-size:15px; line-height:2; color:#4A524B}

/* ===== 17-footer.css ===== */
/* --- подвал --- */
.s-foot{background:var(--ink); color:#AEB8AE; padding:var(--s8) 0 var(--s6); margin-top:var(--s8); border-radius:var(--rc) var(--rc) 0 0}
.s-foot .cols{display:grid; grid-template-columns:1.5fr 1fr 1fr 1.4fr; gap:var(--s6)}
@media (max-width:900px){.s-foot .cols{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.s-foot .cols{grid-template-columns:1fr}}
.s-foot h4{color:#fff; font-size:14px; font-weight:600; margin-bottom:var(--s4)}
.s-foot ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--s2); font-size:14.5px}
.s-foot a:hover{color:#fff}
.s-foot .adr{font-size:14.5px; line-height:1.65}
.s-foot .adr b{color:#fff; font-weight:600}
.s-foot .tel{display:block; font-size:21px; font-weight:700; color:#fff; margin-bottom:var(--s2); letter-spacing:-.02em}
/* Знак и имя в подвале. */
.s-foot .brand{display:flex; align-items:center; gap:var(--s3); color:#fff; font-weight:700; font-size:17px}
.s-foot .brand svg{color:#7FB183}
.s-foot .brand + .adr{margin-top:var(--s4)}
.s-foot .low{border-top:1px solid #2C332D; margin-top:var(--s6); padding-top:var(--s5); display:flex; gap:var(--s5); flex-wrap:wrap; font-size:13px; color:#828D83}

/* ===== 18-pd.css ===== */
/* --- карточка товара --- */
.pd{display:grid; grid-template-columns:minmax(0,1.05fr) minmax(0,1fr); gap:var(--s7); align-items:start}
@media (max-width:940px){.pd{grid-template-columns:1fr; gap:var(--s6)}}
.pd .gal .ph{aspect-ratio:4/3}
/* У товара одна фотография — под ней живёт описание, чтобы левая колонка
   не пустовала под правой. */
.pd-head{padding-bottom:var(--s5)}
.pd-head h1{font-size:clamp(24px,2.9vw,38px)}
.pd-text{margin-top:var(--s5); font-size:16px; color:#39413A; max-width:72ch}
.pd-text h2{font-size:20px; font-weight:700; color:var(--ink); margin-bottom:var(--s3)}
.pd-text p + p{margin-top:var(--s3)}
.pd-note{margin-top:var(--s6); font-size:14px; color:var(--muted)}
.fld-thick{width:160px}
.buybox .qty .bb-add{flex:1; min-width:170px}
.pd .badges{display:flex; gap:var(--s2); flex-wrap:wrap; margin-bottom:var(--s4)}
.pd .lead{font-size:16px; color:var(--muted); max-width:56ch}
.speclist{display:grid; grid-template-columns:auto 1fr; gap:0 var(--s5); font-size:15px; margin-top:var(--s5)}
.speclist dt{color:var(--muted); padding:9px 0; border-bottom:1px solid var(--line)}
.speclist dd{margin:0; padding:9px 0; border-bottom:1px solid var(--line); font-weight:500; font-variant-numeric:tabular-nums}
.ladder{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--s2); margin-top:var(--s5)}
@media (max-width:520px){.ladder{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* Ступени — кнопки: клик ставит в поле минимальное количество ступени. */
.ladder .st{background:var(--soft); border-radius:16px; padding:14px 16px; text-align:center; border:0; font:inherit; color:inherit; cursor:pointer}
.ladder .st:hover{background:var(--green-soft)}
.ladder .st.hi{background:var(--green); color:#fff}
.ladder .st b{display:block; font-size:18px; font-weight:700; font-variant-numeric:tabular-nums}
.ladder .st span{font-size:12.5px; color:var(--muted)}
.ladder .st.hi span{color:rgba(255,255,255,.85)}
.buybox{margin-top:var(--s5); background:var(--soft); border-radius:var(--rc); padding:var(--s6)}
.buybox .price{font-size:40px; font-weight:800; letter-spacing:-.03em; line-height:1; font-variant-numeric:tabular-nums}
.buybox .price em{font-style:normal; font-size:15px; font-weight:400; letter-spacing:0; color:var(--muted); margin-left:var(--s1)}
.buybox .per{font-size:14px; color:var(--muted); margin-top:var(--s2)}
.buybox .qty{display:flex; gap:var(--s3); margin-top:var(--s5); flex-wrap:wrap; align-items:flex-end}
.buybox .qty .fld{width:140px}
.buybox .qty .fld input,.buybox .qty .fld select{background:var(--paper); border-color:transparent}
.buybox .sum{margin-top:var(--s4); padding-top:var(--s4); border-top:1px solid var(--line); display:flex; justify-content:space-between; align-items:baseline; font-size:15px; color:var(--muted); font-variant-numeric:tabular-nums}
.buybox .sum b{font-size:22px; color:var(--ink); font-weight:700}
.tabs{display:flex; gap:var(--s2); margin-top:var(--s6); overflow-x:auto; scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{border:1px solid var(--line); background:var(--paper); border-radius:var(--rp); padding:10px 20px; font-size:14.5px; cursor:pointer; white-space:nowrap; color:var(--ink)}
.tabs button[aria-selected="true"]{background:var(--ink); color:#fff; border-color:var(--ink)}
.tabpane{padding:var(--s5) 0 0; font-size:16px; color:#4A524B; max-width:76ch}
.tabpane p + p{margin-top:var(--s3)}

/* кнопка «Добавить в заявку» после нажатия */
.bb-add.done{background:var(--green-dk)}

/* ===== 19-lst.css ===== */
/* --- листинг с фильтрами --- */
.lst{display:grid; grid-template-columns:270px minmax(0,1fr); gap:var(--s6); align-items:start}
@media (max-width:900px){.lst{grid-template-columns:1fr}}
.flt{background:var(--soft); border-radius:var(--rc); padding:var(--s5)}
.flt h3{font-size:16px; margin-bottom:var(--s4); font-weight:600}
.flt .grp{border-top:1px solid var(--line); padding:var(--s4) 0 var(--s2)}
.flt .grp:first-of-type{border-top:0; padding-top:0}
.flt .grp b{display:block; font-size:14px; margin-bottom:var(--s3); font-weight:600}
.flt label{display:flex; align-items:center; gap:9px; font-size:14.5px; padding:4px 0; cursor:pointer}
.flt label input{accent-color:var(--green); width:17px; height:17px}
.flt label .n{margin-left:auto; font-size:12.5px; color:var(--muted)}
.sortbar{display:flex; align-items:center; gap:var(--s4); margin-bottom:var(--s4); flex-wrap:wrap; font-size:14.5px; color:var(--muted)}
/* Селектор: своя стрелка с нормальным полем — родная у браузера липнет к границе. */
.sortbar select{border:1px solid var(--line); border-radius:var(--rp); padding:9px 40px 9px 16px; font:inherit; font-size:14px; color:var(--ink); appearance:none; -webkit-appearance:none; background:var(--paper) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 20 20'><path d='M5 8l5 5 5-5' fill='none' stroke='%2370786F' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>") no-repeat right 16px center}

/* листинг из данных: вкладки разделов, активные фильтры, сортировка, пусто */
.sec-tabs{margin-bottom:var(--s4)}
.flt-active{margin-bottom:var(--s4)}
.sortbar .sort{margin-left:auto; display:flex; gap:var(--s3); align-items:center}
.lst-empty{color:var(--muted); padding:var(--s6) 0; font-size:15px}

/* ===== 20-price.css ===== */
/* --- прайс --- */
.pricewrap{display:grid; grid-template-columns:250px minmax(0,1fr); gap:var(--s6); align-items:start}
@media (max-width:900px){.pricewrap{grid-template-columns:1fr}}
.toc{background:var(--soft); border-radius:var(--rc); padding:var(--s5); font-size:14.5px; position:sticky; top:16px}
.toc b{display:block; font-size:15px; margin-bottom:var(--s3); font-weight:600}
.toc a{display:block; padding:8px 14px; border-radius:var(--rp); color:var(--muted)}
.toc a:hover{background:var(--paper)}
.toc a.on{background:var(--green); color:#fff; font-weight:500}
.pricemeta{display:flex; gap:var(--s3); flex-wrap:wrap; align-items:center; background:var(--soft); border-radius:var(--rc); padding:var(--s4) var(--s5); font-size:14.5px}
.pricemeta .warn{color:var(--orange); font-weight:500}
.ptwrap{margin-top:var(--s6)}
.ptwrap h3{font-size:20px; font-weight:700; margin-bottom:var(--s4)}
.tblscroll{overflow-x:auto; border-radius:18px; background:var(--soft); padding:6px}
.ptbl{width:100%; border-collapse:separate; border-spacing:0 4px; font-size:14.5px}
.ptbl th,.ptbl td{padding:12px 16px; text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; background:transparent}
.ptbl thead th{font-size:12.5px; font-weight:500; color:var(--muted)}
.ptbl thead th.hi{background:var(--green); color:#fff; border-radius:var(--rp)}
.ptbl td.nm,.ptbl th.nm{text-align:left; white-space:normal; font-weight:500}
.ptbl tbody tr td{background:var(--paper)}
.ptbl tbody tr td:first-child{border-radius:14px 0 0 14px}
.ptbl tbody tr td:last-child{border-radius:0 14px 14px 0}
.ptbl tbody td.hi{background:var(--green-soft); font-weight:700; color:#2F5732}

/* кнопка «Получить прайс на почту» — правым краем */
.pricemeta .pm-get{margin-left:auto}

/* ===== 21-cart.css ===== */
/* --- заявка --- */
.cartwrap{display:grid; grid-template-columns:minmax(0,1fr) 360px; gap:var(--s6); align-items:start}
@media (max-width:900px){.cartwrap{grid-template-columns:1fr}}
.crow{display:grid; grid-template-columns:96px minmax(0,1fr) 140px 120px 36px; gap:var(--s4); align-items:center; padding:var(--s4); background:var(--soft); border-radius:var(--rc); margin-bottom:var(--s3)}
@media (max-width:660px){.crow{grid-template-columns:80px minmax(0,1fr) 36px; row-gap:var(--s3)} .crow .qtyc{grid-column:2} .crow .amt{grid-column:2; text-align:left}}
.crow .ph{width:96px; height:76px; border-radius:12px}
@media (max-width:660px){.crow .ph{width:80px; height:64px}}
.crow .ttl{font-size:15px; font-weight:600}
.crow .sp{font-size:13px; color:var(--muted); margin-top:var(--s1)}
.crow .amt{text-align:right; font-weight:700; font-size:17px; font-variant-numeric:tabular-nums}
.crow .rm{border:0; background:transparent; color:var(--muted); cursor:pointer; font-size:18px}
.crow .fld input{background:var(--paper); border-color:transparent}
.summary{background:var(--soft); border-radius:var(--rc); padding:var(--s6); position:sticky; top:16px}
.summary .ln{display:flex; justify-content:space-between; gap:12px; font-size:14.5px; padding:8px 0; font-variant-numeric:tabular-nums}
.summary .ln b{font-weight:600}
.summary .tot{border-top:1px solid var(--line); margin-top:var(--s3); padding-top:var(--s4); font-size:16px}
.summary .tot b{font-size:26px; font-weight:800; letter-spacing:-.02em}

/* заявка из корзины (строки собирает скрипт) */
.crow .ph{display:grid; place-items:center}
.crow .ttl{display:block}
.cart-h2{font-size:24px; font-weight:700; margin:var(--s6) 0 var(--s4)}
.summary .sum-btn{margin-top:var(--s4)}
.summary .sum-btn:disabled{opacity:.5; cursor:default}
.summary .sum-note{font-size:13px; color:var(--muted); margin-top:var(--s4)}

/* ===== 22-offices.css ===== */
/* --- контакты --- */
.offices{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--s4)}
@media (max-width:780px){.offices{grid-template-columns:1fr}}
.office{background:var(--soft); border-radius:var(--rc); overflow:hidden}
/* Карта — правая карточка целиком, во всю высоту левой; виджет Яндекс.Карт,
   зум колесом выключен параметром scroll=false. */
.offices{align-items:stretch}
.office-map{min-height:420px; background:var(--soft)}
.office-map iframe{display:block; width:100%; height:100%; border:0}
.office .bd{padding:var(--s6) var(--s6)}
.office h3{font-size:19px; font-weight:700; margin-bottom:var(--s4)}
.office dl{display:grid; grid-template-columns:auto 1fr; gap:var(--s2) var(--s4); font-size:14.5px; margin:0}
.office dt{color:var(--muted)}
.office dd{margin:0}
.office .acts{margin-top:var(--s5); display:flex; gap:var(--s4); flex-wrap:wrap}

/* ===== 23-longread.css ===== */
/* --- длинный текст: политика, согласие, о компании --- */
.longread{max-width:78ch; font-size:16px; color:#39413A}
/* По просьбе заказчика текст «О компании» идёт на всю ширину. */
.longread.wide{max-width:none}
.longread h2{font-size:20px; font-weight:700; margin:var(--s6) 0 var(--s3); color:var(--ink)}
.longread h2:first-child{margin-top:0}
.longread p{margin:0 0 var(--s3)}
.longread ul{margin:0 0 var(--s4); padding-left:var(--s5); display:flex; flex-direction:column; gap:var(--s2)}
.longread .box{background:var(--soft); border-radius:var(--rc); padding:var(--s5) var(--s6); margin:0 0 var(--s5)}

/* ===== 24-article.css ===== */
/* --- статья --- */
.article{display:grid; grid-template-columns:minmax(0,1fr) 300px; gap:var(--s7); align-items:start}
@media (max-width:940px){.article{grid-template-columns:1fr; gap:var(--s6)}}
.artbody{max-width:72ch; font-size:17px; line-height:1.7; color:#39413A}
.artbody p{margin:0 0 var(--s4)}
.artbody p:first-child{font-size:19px; color:var(--ink)}
.artmeta{display:flex; gap:var(--s4); flex-wrap:wrap; font-size:13.5px; color:var(--muted); margin-bottom:var(--s5)}
.aside{background:var(--soft); border-radius:var(--rc); padding:var(--s5); position:sticky; top:16px}
.aside h3{font-size:16px; font-weight:700; margin-bottom:var(--s4)}
.aside ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--s3); font-size:14.5px}
.aside ul a:hover{color:var(--green)}

/* ===== 25-sitemap.css ===== */
/* --- карта сайта --- */
.smcols{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--s4)}
@media (max-width:900px){.smcols{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.smcols{grid-template-columns:1fr}}
.smcol{background:var(--soft); border-radius:var(--rc); padding:var(--s5) var(--s6)}
.smcol h3{font-size:16px; font-weight:700; margin-bottom:var(--s3)}
.smcol ul{list-style:none; margin:0 0 var(--s4); padding:0; display:flex; flex-direction:column; gap:var(--s2); font-size:14.5px}
.smcol ul:last-child{margin-bottom:0}
.smcol ul a:hover{color:var(--green)}
.smcol .sub{padding-left:var(--s4); border-left:2px solid var(--line); margin-top:var(--s2)}

/* ===== 26-seclist.css ===== */
/* --- разделы каталога со знаками --- */
.seclist{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:var(--s5) var(--s4)}
@media (max-width:1100px){.seclist{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:700px){.seclist{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:460px){.seclist{grid-template-columns:1fr}}
.secgroup h3{font-size:16px; font-weight:700; margin-bottom:var(--s3)}
.secgroup h3 a:hover{color:var(--green)}
.secgroup ul{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--s2); font-size:14px}
.secgroup ul a{display:flex; align-items:center; gap:var(--s2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.secgroup ul a svg{flex:0 0 auto; color:var(--green)}
.secgroup ul a i{font-style:normal; color:var(--muted); font-size:12.5px}
.secgroup ul a:hover{color:var(--green)}

/* ===== 27-select.css ===== */
/* --- выпадающий список в стиле сайта ---
   Родной список опций браузер стилизовать не даёт, поэтому поверх <select>
   рисуем свою кнопку и список. Сам <select> прячется, но остаётся в форме и
   получает значение — для отправки и для скриптов ничего не меняется. */
.dd{position:relative}
.dd > select{position:absolute; inset:0; width:100%; height:100%; opacity:0; pointer-events:none}
.dd-btn{display:flex; align-items:center; justify-content:space-between; gap:var(--s3); width:100%; min-height:42px; border:1px solid var(--line); border-radius:var(--rp); padding:9px 16px; font:inherit; font-size:14px; color:var(--ink); background:var(--paper); cursor:pointer; text-align:left; white-space:nowrap}
.dd-btn::after{content:''; flex:0 0 auto; width:8px; height:8px; border-right:1.8px solid var(--muted); border-bottom:1.8px solid var(--muted); transform:rotate(45deg) translateY(-2px); transition:transform .2s}
.dd.open .dd-btn{border-color:var(--green)}
.dd.open .dd-btn::after{transform:rotate(225deg) translateY(-2px)}
.dd-btn:focus-visible{outline:2px solid var(--green); outline-offset:-1px}
.fld .dd-btn{border-radius:14px; padding:12px 15px; font-size:15px}
.dd-list{position:absolute; z-index:40; left:0; right:0; top:calc(100% + 6px); background:var(--paper); border-radius:16px; box-shadow:0 18px 50px rgba(0,0,0,.16); padding:6px; margin:0; list-style:none; display:none; max-height:280px; overflow:auto}
.dd.open .dd-list{display:block}
.dd-list li{padding:10px 14px; border-radius:10px; font-size:14.5px; cursor:pointer; white-space:nowrap}
.dd-list li:hover,.dd-list li.act{background:var(--green-soft)}
.dd-list li[aria-selected="true"]{color:var(--green); font-weight:600}

/* ===== 28-tabbar.css ===== */
/* --- нижняя панель на телефоне: каталог и заявка, как в приложении --- */
.tabbar{display:none}
@media (max-width:640px){
  .tabbar{position:fixed; left:0; right:0; bottom:0; z-index:30; display:grid; grid-template-columns:1fr 1fr; background:var(--paper); border-top:1px solid var(--line); padding:6px 0 calc(6px + env(safe-area-inset-bottom))}
  .tabbar a{position:relative; display:flex; flex-direction:column; align-items:center; gap:2px; font-size:12px; color:var(--muted); padding:4px 0}
  .tabbar a:active,.tabbar a[aria-current]{color:var(--green)}
  .tabbar .cnt{position:absolute; top:0; left:calc(50% + 6px); min-width:18px; height:18px; padding:0 5px; box-sizing:border-box; display:grid; place-items:center; background:var(--orange); color:#fff; font-size:11px; font-weight:600; font-style:normal; line-height:1; border-radius:var(--rp)}
  .tabbar .cnt:empty{display:none}
  .s-foot{padding-bottom:calc(34px + 64px)}
}

/* ===== 29-search.css ===== */
/* --- поиск --- */
.bigsearch{display:flex; gap:var(--s3); max-width:640px}
.bigsearch input{flex:1; border:1px solid var(--line); border-radius:var(--rp); padding:15px 24px; font:inherit; font-size:16px; color:var(--ink); background:var(--paper); min-width:0}
.bigsearch input:focus{outline:2px solid var(--green); outline-offset:-1px; border-color:transparent}
.results{display:flex; flex-direction:column; gap:var(--s3)}
.result{display:grid; grid-template-columns:96px minmax(0,1fr) auto; gap:var(--s5); align-items:center; background:var(--soft); border-radius:var(--rc); padding:var(--s4)}
@media (max-width:660px){.result{grid-template-columns:72px minmax(0,1fr); row-gap:var(--s3)} .result .go{grid-column:2}}
.result .ph{width:96px; height:74px; border-radius:12px}
@media (max-width:660px){.result .ph{width:72px; height:60px}}
.result h3{font-size:16px; font-weight:600}
.result p{font-size:13.5px; color:var(--muted); margin-top:var(--s1)}
.result .price{font-weight:700; font-size:18px; white-space:nowrap; font-variant-numeric:tabular-nums}

/* результаты поиска из скрипта */
.sr-note{font-size:14.5px; color:var(--muted); margin-bottom:var(--s4)}
#srTabs{margin-bottom:var(--s5)}
.result .kind{font-size:14px; font-weight:500; color:var(--green); white-space:nowrap}

/* ===== 30-msg.css ===== */
/* --- крупное сообщение: 404, спасибо --- */
.msg{background:var(--soft); border-radius:var(--rc); padding:var(--s8) var(--s7); text-align:center; display:flex; flex-direction:column; align-items:center; gap:var(--s4)}
@media (max-width:560px){.msg{padding:var(--s6) var(--s5)}}
.msg .big{font-size:clamp(40px,7vw,72px); font-weight:800; line-height:1; letter-spacing:-.03em; color:var(--green)}
/* Заголовок сообщения — H1, когда сообщение и есть страница (404, «спасибо»),
   и H2 внутри страницы со своим H1 (пустое избранное, пустая заявка). */
.msg h1,.msg h2{font-size:clamp(24px,3.4vw,36px); font-weight:800}
.msg p{font-size:16.5px; color:var(--muted); max-width:56ch}
.msg .acts{display:flex; gap:var(--s4); flex-wrap:wrap; justify-content:center; margin-top:var(--s2)}

/* ===== 31-popups.css ===== */
/* --- попапы: короткие формы с главной --- */
.pop{border:0; border-radius:var(--rc); padding:0; max-width:440px; width:calc(100% - 32px); box-shadow:0 24px 70px rgba(0,0,0,.3); color:var(--ink); background:var(--paper)}
.pop::backdrop{background:rgba(12,18,14,.55)}
.pop-form{padding:var(--s6); display:flex; flex-direction:column; gap:var(--s4); position:relative}
.pop h3{font-size:22px; font-weight:800; line-height:1.15; padding-right:var(--s7)}
.pop p{color:var(--muted); font-size:15px}
.pop p.err{color:var(--orange); font-size:14px}
.pop .fld small{font-size:12.5px; color:var(--muted)}
.pop-x{position:absolute; top:var(--s4); right:var(--s4); width:36px; height:36px; border-radius:50%; border:1px solid var(--line); background:var(--paper); cursor:pointer; padding:0; color:var(--muted); display:grid; place-items:center}
.pop-x:hover{color:var(--ink); border-color:var(--green)}
@media (max-width:560px){.pop-form{padding:var(--s5)}}

/* ===== 32-vacancy.css ===== */
/* --- вакансия --- */
.vacancy{background:var(--soft); border-radius:var(--rc); padding:var(--s6) var(--s6); max-width:78ch}
.vacancy h2{font-size:22px; font-weight:700}
.vacancy .terms{display:flex; gap:var(--s2); flex-wrap:wrap; margin:var(--s4) 0 var(--s5)}
.vacancy .terms span{background:var(--paper); border-radius:var(--rp); padding:7px 16px; font-size:14px}
.vacancy h3{font-size:16px; font-weight:700; margin:var(--s5) 0 var(--s3)}
.vacancy ul{margin:0; padding-left:var(--s5); font-size:15px; color:#39413A; display:flex; flex-direction:column; gap:var(--s2)}

/* отдел под названием вакансии */
.vacancy .dept{color:var(--muted); margin-top:6px}

/* ===== 99-utilities.css ===== */
/* --- утилиты: ряд кнопок и отступы между ступенями шкалы ---
   Заменили style= в разметке (K-29). Через .site — чтобы перебить сброс
   .site p/h3{margin:0} и отступы внутри блоков. Значения между ступенями --s*
   сохранены как были, чтобы вид не поменялся; свести их к шкале — отдельное
   решение. */
.btnrow{display:flex; gap:10px; flex-wrap:wrap}
.site .mt-18{margin-top:18px}
.site .mt-20{margin-top:20px}
.site .mt-24{margin-top:24px}
.site .mt-26{margin-top:26px}
.site .mt-30{margin-top:30px}
.site .mt-32{margin-top:32px}
.site .mb-18{margin-bottom:18px}
.site .mb-22{margin-bottom:22px}
.site .mb-26{margin-bottom:26px}
