/* ---------- Фирменный шрифт Gotham Pro (лицензия клиента) ---------- */
@font-face{font-family:'Gotham Pro';src:url('fonts/gothampro.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'Gotham Pro';src:url('fonts/gothampro_medium.ttf') format('truetype');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'Gotham Pro';src:url('fonts/gothampro_bold.ttf') format('truetype');font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:'Gotham Pro';src:url('fonts/gothampro_black.ttf') format('truetype');font-weight:900;font-style:normal;font-display:swap}

/* ============================================================
   Serikov Coffee — общие стили сайта
   Токены сняты с утверждённого макета Figma (Frame 409)
   и сверены с брендбуком (docs/BRAND-RULES.md)
   ============================================================ */
:root{
  /* Зелёные */
  --green-deep:#205b28;      /* футер, тёмные плоскости */
  --green-deep-2:#22612b;
  --green:#009144;           /* кнопки, акценты */
  --green-bright:#00904c;
  --green-brand:#00723b;      /* брендбук */
  --green-pale:#d9f2dd;      /* фон шкал вкуса, подложки */
  /* Акценты */
  --teal:#00a8bc;
  --teal-2:#019db0;
  --orange:#f47920;
  --orange-2:#f36d0c;
  --yellow:#f7ab01;
  --yellow-2:#fdb913;
  --crimson:#9c1c3c;
  --crimson-2:#ab1a40;
  --bordo:#861e22;           /* тёмно-красный из палитры */
  --cart:#8b2628;            /* кнопка «В корзину»: заливка .pbtn и btn-cart.svg */
  /* Плитка — как в примерах заказчика (Ligastore, Lemana): белая карточка,
     еле заметная линия и мягкая тень вместо жирной цветной обводки. */
  --tile-line:#ececE8;
  --tile-shadow:0 1px 2px rgba(20,40,20,.04), 0 8px 24px rgba(20,40,20,.06);
  --tile-shadow-hover:0 2px 4px rgba(20,40,20,.06), 0 16px 36px rgba(20,40,20,.10);
  /* Нейтральные */
  --ink:#1a1a1a;
  --ink-soft:#4d4d4d;
  --line:#e4e4e0;
  --bg:#ffffff;
  --bg-soft:#f4f6f3;
  /* Геометрия */
  --r-sm:8px; --r:12px; --r-md:20px; --r-lg:36px; --r-xl:52px;
  --shadow:0 4px 18px rgba(20,30,20,.07);
  --shadow-lift:0 12px 34px rgba(20,30,20,.13);
  --ease:cubic-bezier(.22,1,.36,1);
  --font:'Gotham Pro',system-ui,-apple-system,sans-serif;
  /* Обычный текст тем же Gotham Pro: в наборе дизайнера один шрифт,
     Geologica здесь была временной подменой. */
  --font-ui:'Gotham Pro',system-ui,sans-serif;
  --font-display:'Gotham Pro',system-ui,sans-serif;
  --wrap:1280px;
  /* Единый масштаб макета. Макет нарисован под 1440 и на реальных
     экранах читается крупно, поэтому базовый коэффициент 0.9 и плавное
     уменьшение на узких окнах. Крупнее/мельче — меняется здесь одним числом. */
  --u: clamp(.70px, min(.0576vw, .1005vh), 1.085px);
  /* Ширина контентной колонки. Хотите уже поля по бокам — увеличьте число.
     1640 при масштабе .8 даёт колонку 1312px. */
  --wrap-w: calc(1640 * var(--u));
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:var(--font);font-size:16px;line-height:1.55;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:16px}
/* Автозаполнение браузера (сохранённый пароль, почта) красило поле голубым
   прямоугольником поверх нарисованной фигуры (Герман 17.09.2026, вход).
   Цвет автозаполнения браузер ставит своим правилом с !important, и
   перебить его нельзя; зато можно бесконечно отложить его появление
   переходом. Текст оставляем цветом сайта. */
input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,
textarea:-webkit-autofill,select:-webkit-autofill{
  -webkit-text-fill-color:var(--ink);caret-color:var(--ink);
  transition:background-color 0s 600000s,color 0s 600000s}
input:autofill{transition:background-color 0s 600000s,color 0s 600000s}
.wrap{max-width:var(--wrap-w);margin:0 auto;padding:0 16px;width:100%}
@media(min-width:768px){.wrap{padding:0 28px}}
/* Фокус. Ссылкам в тексте — кольцо в цвет сайта. Полям, спискам и кнопкам
   прямоугольной обводки НЕТ никогда, ни по щелчку, ни с клавиатуры
   (правило «без обводки», BRAND-RULES §3.2): у них фигура нарисована фоном
   со скосом, и прямоугольник outline вставал вокруг неё вторым контуром
   (Герман 16.09.2026, поле помола в каталоге). Фокус с клавиатуры показывает
   свечение по силуэту: drop-shadow повторяет нарисованную форму, а не
   прямоугольник коробки. Ссылки, которые выглядят кнопками (.pbtn-*,
   значки шапки, пагинация, переключатель документов), переведены на то же
   свечение своими правилами. */
a:focus-visible{outline:3px solid var(--teal);outline-offset:2px;border-radius:6px}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{
  outline:none;filter:drop-shadow(0 0 3px var(--green-brand))}
/* Щелчок мышью — никакого отклика вокруг поля (Герман 17.09.2026, поле
   помола: «Тут тень»). Chrome ставит :focus-visible списку и полю ввода и
   при щелчке, поэтому свечение выглядело тенью. Свечение показываем только
   при работе с клавиатуры: класс sc-kbd на <html> ставит site-hf.js по
   Tab и стрелкам и снимает при нажатии мышью или пальцем.
   Кнопки и ссылки (22.09.2026). Считалось, что им браузер :focus-visible по
   щелчку не ставит, но на снимке Германа после щелчка по заголовку фильтра
   «Способ заваривания» (это кнопка) вокруг букв стоял зелёный ореол:
   браузер всё-таки ставит, когда фокус переводит скрипт раскрытия. Правило
   то же — при работе мышью и пальцем никакого свечения, у ссылок и
   прямоугольной рамки. */
html:not(.sc-kbd) input:focus-visible,
html:not(.sc-kbd) select:focus-visible,
html:not(.sc-kbd) textarea:focus-visible,
html:not(.sc-kbd) button:focus-visible{filter:none!important;box-shadow:none!important}
html:not(.sc-kbd) a:focus-visible{outline:none!important}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- Шапка (макет Figma: Frame 409 + Frame 316) ----------
   Контейнер 1440 · плашка 1360×64, radius 20
   Логотип 144×77 выступает за плашку
   Кнопка «Меню» и поиск — рисованные фигуры наискось (SVG из макета)
   Справа три иконки, слово ПОД иконкой · корзина бордовая #8b2628
------------------------------------------------------------------ */
#site-header{position:sticky;top:0;z-index:100}
/* Шапка по макету: простая белая полоса. Ряд стоит на 19-й строке и сам
   высотой 64, поля 40 по бокам. Скруглённой плашки с матовым стеклом,
   рамкой и тенью в макете нет — это была отсебятина.
   Правила дублировались в site.css и site-hf.css: я поправил только
   второй файл, и ничего не изменилось, потому что site.css идёт следом
   и перебивал. Здесь оставлена одна версия. */
.site-head{background:#fff;padding:calc(19 * var(--u)) 0 0;will-change:transform;transition:transform .42s var(--ease),box-shadow .3s ease}
.site-head.is-hidden{transform:translateY(-102%)}
/* Прилипшая шапка: полупрозрачная с размытием. В покое, наверху страницы,
   она сплошная белая — как в макете; полупрозрачной становится только
   когда возвращается при прокрутке вверх посреди страницы, чтобы не
   закрывать содержимое глухой плашкой. */
.site-head.is-stuck{background:rgba(255,255,255,.82);
  backdrop-filter:blur(14px) saturate(140%);
  -webkit-backdrop-filter:blur(14px) saturate(140%);
  box-shadow:0 6px 18px rgba(20,40,20,.10)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .site-head.is-stuck{background:rgba(255,255,255,.96)}}
@media(prefers-reduced-motion:reduce){.site-head{transition:none}}
.head-plate{max-width:var(--wrap-w);margin:0 auto;padding:0 calc(48 * var(--u))}
.head-inner{position:relative;height:calc(64 * var(--u));display:flex;align-items:center;
  gap:calc(40 * var(--u));padding:0;border-radius:0;border:0;box-shadow:none;background:none}
@media(max-width:1100px){.head-plate{padding:0 16px}.head-inner{height:auto;padding:10px 0;flex-wrap:wrap}}

/* логотип */
.hd-logo{flex-shrink:0;display:block;line-height:0;margin-right:calc(16 * var(--u))}
.hd-logo img{width:calc(144 * var(--u));height:auto;max-height:calc(78 * var(--u));object-fit:contain}
@media(max-width:1100px){.hd-logo img{width:112px}}

/* «Меню» — рисованная плашка из макета (наискось) */
.hd-cat{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;gap:calc(10 * var(--u));
  width:calc(160 * var(--u));height:calc(50 * var(--u));background:url(img/hd-shape-btn.svg?v=2) no-repeat center/100% 100%;
  color:#f5f5f5;font-family:var(--font);font-weight:500;font-size:calc(18 * var(--u));letter-spacing:.01em;
  white-space:nowrap;transition:transform .18s var(--ease),filter .18s ease}
.hd-cat:hover{transform:translateY(-1px);filter:brightness(1.08)}
/* ---- мега-меню: каталог на виду, служебное убрано внутрь ---- */
.hd-menu{position:static}
.hd-cat.is-open{filter:brightness(1.12)}
.hd-drop{position:absolute;left:0;right:0;top:calc(100% + 10px);z-index:120;
  background:#fff;border:1px solid var(--line);border-radius:calc(24 * var(--u));
  box-shadow:0 22px 54px rgba(20,40,20,.20);overflow:hidden;
  animation:mmIn .28s cubic-bezier(.22,1,.36,1)}
@keyframes mmIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.hd-drop[hidden]{display:none}
.hd-drop-in{display:grid;gap:0}
@media(min-width:900px){.hd-drop-in{grid-template-columns:minmax(0,1fr) calc(286 * var(--u))}}

/* каталог */
.hd-cat-cols{display:grid;gap:calc(26 * var(--u));padding:calc(26 * var(--u)) calc(30 * var(--u))}
@media(min-width:620px){.hd-cat-cols{grid-template-columns:repeat(3,minmax(0,1fr))}}
.hd-cat-col{display:flex;flex-direction:column;gap:calc(9 * var(--u))}
.hd-cat-h{font-family:var(--font);font-weight:900;font-size:calc(19 * var(--u));text-transform:uppercase;
  color:var(--green-deep-2);letter-spacing:-.01em;margin-bottom:calc(4 * var(--u));transition:color .15s}
.hd-cat-h:hover{color:var(--green-brand)}
.hd-cat-col a:not(.hd-cat-h){font-weight:500;font-size:calc(16 * var(--u));line-height:1.25;color:var(--ink);
  transition:color .15s,transform .15s}
.hd-cat-col a:not(.hd-cat-h):hover{color:var(--green-brand);transform:translateX(3px)}

/* служебная колонка */
.hd-drop-side{display:flex;flex-direction:column;gap:calc(9 * var(--u));
  padding:calc(26 * var(--u)) calc(30 * var(--u));background:var(--bg-soft);border-left:1px solid var(--line)}
@media(max-width:899px){.hd-drop-side{border-left:0;border-top:1px solid var(--line)}}
.hd-drop-cap{font-family:var(--font);font-weight:900;font-size:calc(13 * var(--u));text-transform:uppercase;
  letter-spacing:.05em;color:var(--green-brand)}
.hd-drop-cap.gap{margin-top:calc(14 * var(--u))}
.hd-drop-side a{font-weight:500;font-size:calc(15 * var(--u));line-height:1.25;color:var(--ink-soft);transition:color .15s}
.hd-drop-side a:hover{color:var(--green-brand)}
.hd-drop-tel{margin-top:auto;padding-top:calc(16 * var(--u));font-family:var(--font);
  font-weight:700;font-size:calc(19 * var(--u));color:var(--green-deep-2)!important;white-space:nowrap}
.hd-drop a.is-here{color:var(--green-brand);font-weight:700}
@media(max-width:620px){.hd-drop{left:calc(-16 * var(--u));right:calc(-16 * var(--u))}
  .hd-cat-cols,.hd-drop-side{padding:calc(20 * var(--u)) calc(22 * var(--u))}}
.hd-cat-ico{width:calc(18 * var(--u));height:calc(13 * var(--u));flex-shrink:0;margin-top:1px}

/* поиск — рисованная обводка из макета (наискось) */
.hd-search{flex:1;min-width:0;max-width:calc(860 * var(--u));display:flex;align-items:center;gap:calc(10 * var(--u));height:calc(50 * var(--u));
  padding:0 calc(24 * var(--u));background:url(img/hd-shape-search.svg?v=2) no-repeat center/100% 100%}
.hd-search input{flex:1;border:none;outline:none;background:none;font-family:var(--font);font-weight:500;font-size:calc(16 * var(--u));color:var(--ink);min-width:0}
.hd-search input::placeholder{color:var(--green-brand);opacity:1}
.hd-search-ico{width:calc(18 * var(--u));height:calc(18 * var(--u));flex-shrink:0}

/* правый блок: иконка сверху, слово под ней */
/* margin-left:auto прижимает иконки к правому краю плашки:
   без него они липли к полю поиска, а справа оставалась пустота. */
.hd-right{display:flex;align-items:flex-start;gap:calc(24 * var(--u));flex-shrink:0;margin-left:auto}
.hd-ico{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;
  color:var(--green-deep-2);font-family:var(--font);font-weight:500;font-size:calc(16 * var(--u));line-height:1;
  white-space:nowrap;transition:opacity .15s}
.hd-ico:hover{opacity:.72}
.hd-ico.cart{color:#8b2628}
/* Цифра стоит у самого значка, а не у правого края столбца: столбец шире
   значка на всю подпись, и от «right» цифра уезжала к «Корзине». В макете
   она в 3,5 правее значка и на 6 выше его верхнего края. */
.hd-ico .cnt{position:absolute;top:calc(-6 * var(--u));left:calc(50% + 12 * var(--u));right:auto;
  font-family:var(--font);font-weight:900;font-size:calc(15 * var(--u));color:#8b2628}
@media(max-width:1100px){
  .hd-right{gap:16px;order:2;margin-left:auto;align-items:center}
  .hd-ico span:not(.cnt){display:none}
  .hd-search{order:3;flex-basis:100%;max-width:none;height:48px;padding:0 18px}
  .hd-search input{font-size:16px}
  .hd-cat{width:132px;height:46px;font-size:16px;order:1}
}

/* ---------- Хлебные крошки и заголовок страницы ---------- */
.crumbs{padding:18px 0 0;font-size:13px;color:var(--ink-soft)}
.crumbs a:hover{color:var(--green)}
.crumbs span{opacity:.5;margin:0 6px}
.page-head{padding:14px 0 26px}
.page-head h1{font-family:var(--font-display);font-weight:900;text-transform:uppercase;font-size:clamp(28px,4.4vw,46px);line-height:1.05}
.page-head h1 em{font-style:normal;color:var(--green)}
.page-head .lead{margin-top:10px;color:var(--ink-soft);max-width:640px;font-size:15.5px}

/* ---------- Кнопки ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-weight:800;font-size:15px;padding:15px 26px;border-radius:var(--r);min-height:52px;transition:background .2s,transform .15s,box-shadow .2s}
.btn:active{transform:scale(.98)}
.btn-green{background:var(--green);color:#fff}
.btn-green:hover{background:var(--green-bright)}
.btn-bordo{background:var(--bordo);color:#fff}
.btn-bordo:hover{background:#6f181c}
.btn-ghost{background:#fff;color:var(--ink);border:1.5px solid var(--line)}
.btn-ghost:hover{border-color:var(--green);color:var(--green)}

/* ---------- Подвал — отдельный фрейм Figma «footer» 1440×319 ----------
   Рваный зелёный край #22612b (SVG 1440×276, снизу)
   Узор-шеврон белым 3% (SVG 1440×319)
   Колонки по макету: лого 82 · ссылки 373 · каталог 575 · лицам 790 · телефоны 1112
   Ссылки Gotham Pro Bold 14 · телефоны Medium 22 · копирайт Bold 10 (y=276)
----------------------------------------------------------------------- */
.site-foot{position:relative;padding:0 0 calc(26 * var(--u));margin-top:64px;
  min-height:calc(319 * var(--u));color:#fff;font-family:var(--font);overflow:hidden}
/* Зелёная заливка с рваным краем раньше была фиксированной высоты и
   висела у нижней кромки. Подвал теперь растёт по содержимому, поэтому
   тянем заливку от той же линии до самого низа — иначе верхние ссылки
   оказывались на белом фоне и пропадали. */
.site-foot .ft-shape{position:absolute;left:0;right:0;top:calc(43 * var(--u));bottom:0;height:auto;
  pointer-events:none}
.site-foot .ft-wave{position:absolute;inset:0;z-index:1;
  background:url(img/foot-wave.svg) no-repeat center/100% 100%;pointer-events:none}

.ft-in{position:relative;z-index:2;max-width:var(--wrap-w);margin:0 auto;padding:calc(78 * var(--u)) calc(82 * var(--u)) 0;
  display:grid;grid-template-columns:calc(291 * var(--u)) calc(202 * var(--u)) calc(215 * var(--u)) calc(322 * var(--u)) 1fr;align-items:start}
.ft-logo{display:block;line-height:0}
.ft-logo img{width:calc(223 * var(--u));height:auto}

.ft-col{list-style:none;margin-top:18px}
.ft-col li{list-style:none;line-height:0}
.ft-col a{display:block;font-weight:700;font-size:14px;line-height:17px;color:#fff;transition:opacity .15s}
.ft-col a:hover{opacity:.72}
.ft-col.c1 a{margin-bottom:7px}
.ft-col.c2 a{margin-bottom:11px}
.ft-col.c3{margin-top:18px}
.ft-col.c3 p{font-weight:700;font-size:14px;line-height:17px;margin:0 0 10px}
.ft-col.c3 a{display:inline;font-weight:700;line-height:17px}
.ft-col.c3 .cap{font-weight:500;text-transform:uppercase;letter-spacing:.01em}
.ft-col.c3 .gap{margin-top:35px}
.ft-col.c3 p:nth-child(4){margin-bottom:5px}

.ft-tel{margin-top:18px}
.ft-tel a{display:block;font-weight:500;font-size:calc(22 * var(--u));line-height:22px;margin-bottom:24px;color:#fff;white-space:nowrap;transition:opacity .15s}
.ft-tel a:hover{opacity:.8}

.ft-legal{position:relative;top:auto;z-index:2;max-width:var(--wrap-w);margin:0 auto;
  padding:calc(34 * var(--u)) calc(82 * var(--u)) 0;
  display:flex;flex-wrap:wrap;gap:4px 46px;font-weight:700;font-size:10px;line-height:1.4;color:#fff}

@media(max-width:1200px){
  .site-foot{height:auto;padding-bottom:34px}
  /* рваный край — отдельной полосой сверху, дальше сплошная заливка */
  .site-foot::before{content:'';position:absolute;left:0;right:0;top:0;height:34px;z-index:0;
    background:url(img/foot-shape.svg) no-repeat center top/1440px auto}
  .site-foot .ft-shape{top:26px;bottom:0;height:auto;background:var(--green-deep-2)}
  .site-foot .ft-wave{inset:26px 0 0;background:url(img/foot-wave.svg) repeat center top/1440px auto}
  .ft-in{grid-template-columns:1fr 1fr 1fr;gap:26px;padding:56px 28px 0}
  .ft-logo{grid-column:1/-1}
  .ft-logo img{width:190px}
  .ft-col,.ft-col.c3,.ft-tel{margin-top:0}
  .ft-legal{position:static;padding:26px 28px 0;margin-top:0}
}
@media(max-width:700px){
  .ft-in{grid-template-columns:1fr 1fr;padding:46px 18px 0;gap:22px}
  .ft-logo img{width:160px}
  .ft-tel{grid-column:1/-1}
  .ft-tel a{font-size:20px;margin-bottom:14px}
  .ft-legal{padding:22px 18px 0;font-size:11px;gap:4px 20px}
}

/* ---------- Плавающая поддержка ---------- */
.fab{position:fixed;right:16px;bottom:16px;z-index:120;display:flex;align-items:center;gap:9px;background:#25d366;color:#fff;font-weight:800;font-size:14px;padding:14px 18px;border-radius:999px;box-shadow:0 8px 24px rgba(0,0,0,.22);transition:transform .2s}
.fab:hover{transform:scale(1.04)}
@media(max-width:560px){.fab span{display:none}.fab{padding:15px}}

/* ---------- Юридические (текстовые) страницы ---------- */
.doc{max-width:820px;padding-bottom:20px}
.doc .updated{display:inline-block;background:var(--green-pale);color:var(--green-deep);font-size:13px;font-weight:700;padding:8px 14px;border-radius:999px;margin-bottom:24px}
.doc h2{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:20px;line-height:1.2;margin:32px 0 12px;color:var(--green-deep)}
.doc h2:first-of-type{margin-top:0}
.doc p{margin-bottom:12px;color:var(--ink-soft);font-size:15.5px;line-height:1.65}
.doc ul{margin:0 0 14px 0;padding-left:20px}
.doc li{margin-bottom:8px;color:var(--ink-soft);font-size:15.5px;line-height:1.6}
.doc .req{background:var(--bg-soft);border-radius:var(--r-md);padding:22px 24px;margin-top:34px}
.doc .req b{display:block;margin-bottom:10px;color:var(--ink);font-family:var(--font-display);text-transform:uppercase;letter-spacing:.04em;font-size:15px}
.doc .req p{margin-bottom:6px;font-size:14.5px}
/* Переключатель документов «Политика / Оферта / Доставка / Возврат».
   Герман 16.09.2026, снимок «кнопки не той формы»: стояли скруглённые
   пилюли (серые, активная зелёная). Правило сайта — все кнопки фирменной
   формы (BRAND-RULES §3.1): активная — заливка как у .pbtn-green,
   остальные — контур как у .pbtn-line. Классы .pbtn-* на ссылки не
   вешаем: это правило (.doc-nav a, вес (0,1,1)) перебило бы их подложку,
   поэтому фигура нарисована здесь целиком — один раз на все четыре
   страницы (разметка у них одинаковая, стилей на страницах нет).
   Ряд переключателей — рост 40 из набора kit/cap40-* (колпачок 0,56265
   и линия 0,05 роста), как у сортировки каталога (catalog-sort.css §1.1):
   у выбранной и невыбранной кнопки один силуэт и одна толщина линии,
   разница только заливкой — «ровно» по §3.2. На телефон переносится
   сам: у ряда flex-wrap, кнопки не ужимаются. */
.doc-nav{display:flex;flex-wrap:wrap;align-items:center;gap:calc(10 * var(--u));margin-bottom:calc(30 * var(--u))}
.doc-nav a{
  --btn-h:calc(40 * var(--u));
  --cap:calc(var(--btn-h) * 0.56265);   /* 22,506 / 40 */
  --line-h:calc(var(--btn-h) * 0.05);   /* обводка 2 при высоте 40 */
  display:inline-flex;align-items:center;justify-content:center;
  min-height:var(--btn-h);min-width:calc(56 * var(--u));padding:0 calc(20 * var(--u));
  border:0;border-radius:0;white-space:nowrap;text-decoration:none;
  font-family:var(--font);font-weight:500;font-size:calc(15 * var(--u));line-height:1.15;
  color:var(--green-deep-2);background-color:transparent;
  background-repeat:no-repeat;
  /* Белая середина — пятым слоем только между колпачками (+2px на их
     белые полоски), не background-color на всю коробку: иначе углы за
     дугами — белый прямоугольник, по которому пошли бы и затемнение при
     наведении, и свечение фокуса. Слой последний — под остальными. */
  background-image:url(img/kit/cap40-line-l.svg),url(img/kit/cap40-line-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(#fff,#fff);
  background-position:left center,right center,center top,center bottom,center;
  background-size:auto 100%,auto 100%,
    calc(100% - 2 * var(--cap)) var(--line-h),
    calc(100% - 2 * var(--cap)) var(--line-h),
    calc(100% - 2 * var(--cap) + 2px) 100%;
  transition:filter .2s,transform .2s}
/* Наведение не меняет фигуру — только яркость и подъём, как у .pbtn-*.
   Тень под кнопкой не рисуем: box-shadow идёт по прямоугольнику коробки,
   а не по скосу. */
.doc-nav a:hover{filter:brightness(1.06);transform:translateY(-2px)}
/* Открытый документ — тот же силуэт заливкой: залитый близнец колпачка
   cap-tag-green-*. +2px у середины закрывают шов между заливками. Это
   отметка «вы здесь», не ссылка куда-то: подъём ему не нужен. */
.doc-nav a.on{color:#fff;cursor:default;
  background-image:url(img/cap-tag-green-l.svg),url(img/cap-tag-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand));
  background-position:left center,right center,center;
  background-size:auto 100%,auto 100%,calc(100% - 2 * var(--cap) + 2px) 100%}
.doc-nav a.on:hover{filter:none;transform:none}
/* Телефон: --u упирается в нижний предел 0,70px, и рост 40·--u дал бы 28px.
   Числа в пикселях, как во всём слое mobile/ (условие — его же): рост 44
   под палец, колпачок и линия считаются от --btn-h сами. */
@media (max-width:767px), (max-width:1023px) and (max-height:520px){
  .doc-nav{gap:8px;margin-bottom:20px}
  .doc-nav a{--btn-h:44px;min-height:44px;padding:0 16px;font-size:15px}
}

/* ---------- Появление блоков ---------- */
.rv{opacity:0;transform:translateY(24px);transition:opacity .6s var(--ease),transform .7s var(--ease)}
.rv.in{opacity:1;transform:none}


/* ============================================================
   ГЛАВНАЯ СТРАНИЦА — перенос макета Figma (Frame 409)
   Сетка: контейнер 1440, контент 1360 (padding 40).
   Секции: hero-баннер, 4 карточки-входа, бегущая строка,
   «Хиты обжарки», квиз «Подберём кофе за минуту».
   ============================================================ */
.mac{max-width:var(--wrap-w);margin:0 auto;padding:0 calc(24 * var(--u))}
@media(max-width:1100px){.mac{padding:0 16px}}

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

   Пропорция дорожки равна пропорции баннера (1900×814), поэтому картинка
   ложится без обрезки на любой ширине. Ничего не теряется — но и на
   телефоне баннер остаётся широкой полосой: под мобильные нужны свои
   версии, они запрошены у заказчика.
------------------------------------------------------------------------ */
/* Баннер — та же окантовка, что у карточек: рамка 4 px, скругление 32. */
.hero-b{position:relative;padding:0;margin-top:8px;border-radius:calc(32 * var(--u));overflow:hidden;
  background:var(--green-brand);isolation:isolate}
/* У баннера рваный край и никакой линии: обрезаем сам элемент по силуэту,
   и картинка кончается по рисованной кромке. */

/* РАЗМЕР БАННЕРА ЗАФИКСИРОВАН: 2560×800, пропорция 3.2:1.
   Картинка другой пропорции обрежется по центру — намеренно, чтобы
   ошибка в размерах была видна сразу и её починили в макете, а не
   подгоняли вёрсткой. Нужны две версии: десктоп 2560×800 и мобильная
   1080×1080, вторая пока не сделана. */
/* Пропорция из макета: Frame 490 — 1360×320, то есть 4,25:1. Было
   2560×800 (3,2:1), и баннер выходил заметно выше, чем нарисовано.
   Готовые баннеры бренда сделаны под 3,2:1, поэтому теперь они немного
   подрезаются сверху и снизу — нужны версии под 1360×320. */
.hero-track{position:relative;aspect-ratio:1360 / 320}
.hero-slide{position:absolute;inset:0;display:block;opacity:0;pointer-events:none;
  transition:opacity .6s ease}
.hero-slide.on{opacity:1;pointer-events:auto}
.hero-slide img{display:block;width:100%;height:100%;object-fit:cover}

/* Заголовок страницы держим текстом: на баннере он нарисован, а поиску и
   скринридеру нужен настоящий h1. */
.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* Стрелки из макета: тонкие уголки 14×16 без круглой подложки, слева
   на 30 от края. Было — серые полупрозрачные кружки 44×44. */
.hero-nav{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);
  display:flex;justify-content:space-between;padding:0 calc(30 * var(--u));z-index:8;
  pointer-events:none}
.hero-nav button{width:calc(14 * var(--u));height:calc(16 * var(--u));border-radius:0;
  background:no-repeat center/100% 100%;
  pointer-events:auto;cursor:pointer;border:0;opacity:.9;font-size:0;
  transition:opacity .2s,transform .2s}
.hero-nav button:first-child{background-image:url(img/hero-arr-l.svg)}
.hero-nav button:last-child{background-image:url(img/hero-arr-r.svg)}
.hero-nav button svg{display:none}
.hero-nav button:hover{opacity:1;transform:scale(1.12)}

.hero-dots{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(18 * var(--u));
  display:flex;gap:calc(10 * var(--u));z-index:8}
.hero-dots i{width:calc(30 * var(--u));height:calc(6 * var(--u));border-radius:999px;
  background:rgba(255,255,255,.45);cursor:pointer;transition:background .25s,width .3s}
.hero-dots i.on{background:#fff;width:calc(46 * var(--u))}

@media(max-width:900px){
  /* Пока нет мобильной версии баннера — берём более высокий кадр из того же
     файла, обрезая бока: полоса 3.2:1 на телефоне складывается в 117 px. */
  .hero-track{aspect-ratio:2 / 1}
  .hero-b{border-radius:20px;margin-top:4px}
  .hero-nav{display:none}
  .hero-dots{bottom:8px;gap:6px}
  .hero-dots i{width:20px;height:4px}
  .hero-dots i.on{width:30px}
}
@media(prefers-reduced-motion:reduce){
  .hero-slide{transition:none}
}

/* ---------- 4 карточки-входа (Frame 316: ровные, r32, 322×400) ----------
   На десктопе — аккордеон: наведённая карточка расширяется, соседние
   поджимаются, у наведённой снизу выезжает описание и кнопка.
   Текст не переверстывается: заголовок в одну строку с плавной сменой
   кегля, описание фиксированной ширины.
------------------------------------------------------------------------ */
.entries{display:grid;gap:24px;margin-top:22px}
@media(min-width:1000px){.entries{grid-template-columns:repeat(4,1fr)}}
@media(min-width:620px) and (max-width:999px){.entries{grid-template-columns:1fr 1fr}}
/* Пропорция и окантовка — из макета: 325×388.
   Рамка НЕ css-бордюр: в макете это рисованная от руки линия, она гуляет
   и меняет толщину. Ровная рамка сразу выдаёт подделку, поэтому контур
   вынесен в SVG (путь на 980 узлов, выгружен из Figma) и кладётся поверх
   карточки. Скругление у самой карточки оставлено только чтобы обрезать
   фотографию внутри. */
.entry{position:relative;aspect-ratio:325/388;min-height:300px;border-radius:calc(32 * var(--u));
  border:0;background:#fff;overflow:hidden;
  display:block;padding:calc(30 * var(--u));transition:transform .4s var(--ease),box-shadow .4s ease}

.entry:hover{transform:translateY(-6px)}
.entry .wave{position:absolute;inset:-20%;z-index:0;pointer-events:none;opacity:.45;
  background:url(img/foot-wave.svg) no-repeat center/cover}
.entry h3{position:relative;z-index:3;font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(24 * var(--u));line-height:1.1;letter-spacing:0;color:var(--green-brand);
  max-width:calc(147 * var(--u))}
.entry ul{list-style:none;margin-top:calc(16 * var(--u));position:relative;z-index:3}
.entry li{font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--u));line-height:1.3;
  display:flex;gap:calc(5 * var(--u));align-items:baseline;margin-bottom:calc(4 * var(--u));color:#000}
/* Маркер — треугольник из макета, а не точка. */
.entry li::before{content:'\25B8';font-family:var(--font);font-weight:700;flex:none;
  width:auto;height:auto;border-radius:0;background:none;transform:none}
.entry .pic{position:absolute;z-index:1;pointer-events:none;transition:transform .5s var(--ease)}
.entry .pic img{width:100%;height:auto;display:block}
.entry:hover .pic{transform:scale(1.04)}
/* Посадка фотографий — из макета, проценты от карточки 325×388.
   Считано по прямоугольникам самих снимков:
     Для дома      −23 / 184, 371×220
     Для бизнеса    −7 / 154, 335×253
     Подбор кофе    −2 / 139, 334×297
     Наши точки    −13 / 156, 351×249
   Раньше значения были от другой сетки (322×400) и с другими снимками,
   поэтому фотографии стояли вразнобой. */
.e-home  .pic{left:-7.08%;top:47.42%;width:114.15%}
.e-biz   .pic{left:-2.15%;top:39.69%;width:103.08%}
.e-quiz  .pic{left:-0.62%;top:35.82%;width:102.77%}
.e-where .pic{left:-4.04%;top:40.21%;width:108.08%}
/* Плитки по макету: не сплошная заливка, а белая карточка с фирменной
   зелёной окантовкой — так теперь оформлены все карточки и секции.
   Цветные классы оставляем в разметке, чтобы не переписывать страницу. */
.e-biz,.e-home,.e-quiz,.e-where{background:#fff;color:#000}
/* Круглая зелёная стрелка в правом верхнем углу — она есть у каждой плитки. */
.entry::after{content:'';position:absolute;right:calc(30 * var(--u));top:calc(30 * var(--u));
  width:calc(52 * var(--u));height:calc(52 * var(--u));z-index:4;pointer-events:none;
  background:url(img/btn-arrow-green.svg) no-repeat center/100% 100%}
/* Выезжающая подпись при наведении: в макете её нет. */
.entry .more{display:none}
/* выезжающая подпись — по умолчанию скрыта */
.entry .more{position:absolute;left:0;right:0;bottom:0;z-index:4;padding:56px 27px 26px;
  background:linear-gradient(to top,rgba(12,32,14,.74) 0%,rgba(12,32,14,.55) 46%,rgba(12,32,14,0) 100%);
  color:#fff;opacity:0;transform:translateY(16px);pointer-events:none;
  transition:opacity .4s ease,transform .6s cubic-bezier(.3,.7,.2,1)}
.entry .more-t{display:block;width:330px;max-width:100%;font-weight:500;font-size:15px;line-height:1.5}
.entry .more-b{display:inline-flex;align-items:center;gap:9px;margin-top:16px;background:#fff;
  color:var(--green-deep-2);font-family:var(--font);font-weight:700;font-size:15px;
  padding:12px 20px;border-radius:999px;white-space:nowrap}
@media(max-width:999px){.entry{aspect-ratio:auto;height:400px;padding:26px 22px 0}.entry h3{font-size:26px}.entry li{font-size:15px}}

/* ---- аккордеон плиток ----
   Наведённая плитка расширяется, соседи поджимаются. Убирался в пользу
   эталона, но заказчик попросил вернуть: «уже идеально работало».
   Высота при этом фиксированная — вытягивания вниз, как раньше, нет. */
@media(min-width:1000px) and (hover:hover){
  .entries{display:flex}
  .entries > .entry{flex:1 1 0;min-width:0;
    transition:flex-grow .7s cubic-bezier(.3,.7,.2,1),filter .45s ease}
  .entry:hover{transform:none}

  /* Разъезд заметный: наведённая почти вдвое шире соседней, остальные
     уходят на второй план цветом и кеглем заголовка. */
  .entries:hover .entry{flex-grow:.78}
  .entries .entry:hover{flex-grow:2.1;z-index:2}
  .entries:hover .entry:not(:hover){filter:saturate(.72) brightness(.9)}

  .entry h3{white-space:nowrap;transition:font-size .5s cubic-bezier(.3,.7,.2,1)}
  .entries:hover .entry:not(:hover) h3{font-size:calc(21 * var(--d))}
  .entries .entry:hover h3{font-size:calc(32 * var(--d))}

  /* Список у поджатых мешает читать заголовок — притухает. */
  .entry ul{transition:opacity .35s ease}
  .entries:hover .entry:not(:hover) ul{opacity:.35}

  /* Единственное, чего в разъезде быть не должно, — увеличение самого
     снимка. Заказчик: «картинка внутри карточек должна съезжать без
     увеличения». Поэтому наведённая двигает снимок вправо, а поджатые
     оставляют его на месте. */
  .entry .pic{transition:transform .5s var(--ease)}
  .entries .entry:hover .pic{transform:translateX(-44%)}
  .entries:hover .entry:not(:hover) .pic{transform:translateX(-50%)}
  .entry .orn{transition:opacity .35s ease}
  .entries:hover .entry:not(:hover) .orn{opacity:.5}
}

/* ---------- бегущая строка (макет: 1985×73, наклон 1,72°) ---------- */
.ticker-wrap{overflow:hidden;margin-top:44px;padding:16px 0}
/* Наклон и вылет за края — из макета, а не на глаз. Frame 215 стоит на
   x=-315 при холсте 1440 и имеет размер 1986×107,63. Отсюда: ширина
   137,91 % холста, сдвиг влево 21,88 %, а угол считается из габаритов —
   верхняя грань поднимается к правому краю на 0,975°. Толщина самой
   ленты при этом 73,8. Стояло −1,72° и 124 % — лента была круче и уже. */
/* Заливку и рваные края рисует wavy.js — как у верхней полосы. */
.ticker{background:none !important;color:#fff;height:calc(74 * var(--u));
  display:flex;align-items:center;overflow:hidden;
  width:137.91%;margin-left:-21.88%;transform:rotate(-0.975deg)}
.ticker-t{position:relative;z-index:1;display:flex;white-space:nowrap;width:max-content;animation:tick 38s linear infinite}
.ticker-t span{font-family:var(--font);font-weight:900;font-size:calc(24 * var(--u));text-transform:uppercase;padding:0 20px}
/* Звёздочки-разделители в макете жёлтые, а не белые. */
.ticker-t i{color:#fdb913;font-style:normal}
@keyframes tick{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.ticker-t{animation:none}}
@media(max-width:700px){.ticker{height:56px}.ticker-t span{font-size:16px}}


/* ---------- ХИТЫ ОБЖАРКИ ----------
   В макете заголовок слева, кнопка «Весь каталог» справа: H1 40 с зелёным
   вторым словом, подпись 14 под ним, кнопка 224×54 фирменной формы. */
.hits{padding-top:70px;padding-bottom:20px}
.hits-head{display:flex;align-items:center;justify-content:space-between;
  gap:calc(32 * var(--u));flex-wrap:wrap;margin-bottom:calc(44 * var(--u))}
.hits-ttl{flex:1 1 auto;min-width:calc(325 * var(--u))}
.hits-ttl h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(40 * var(--u));line-height:1.1;letter-spacing:0}
.hits-ttl h2 em{font-style:normal;color:var(--green-brand)}
.hits-ttl p{margin-top:calc(12 * var(--u));font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));line-height:1.3;color:#000;max-width:calc(325 * var(--u))}
/* Кнопка отличается от прочих .pbtn-green только ростом и кеглем: в макете
   это H3 Medium 20 в фигуре высотой 54, а не жирный 16 в фигуре 52. */
.hits-all{--btn-h:calc(54 * var(--u));font-weight:500;font-size:calc(20 * var(--u));
  gap:calc(10 * var(--u));text-transform:none}
/* Уголок из макета: нарисован от руки, поэтому картинкой, а не бордерами.
   В макете он повёрнут на 90°, файл лежит остриём вверх. */
.btn-arr{flex:none;width:calc(22 * var(--u));height:calc(22 * var(--u));
  background:url(img/arr-white.svg) no-repeat center/100% 100%;transform:rotate(90deg)}
@media(max-width:820px){.hits-ttl h2{font-size:calc(30 * var(--u))}.hits{padding-top:44px}}

.pgrid{display:grid;gap:20px}
@media(min-width:1040px){.pgrid{grid-template-columns:repeat(4,1fr)}}
@media(min-width:620px) and (max-width:1039px){.pgrid{grid-template-columns:1fr 1fr}}
/* Край карточки — сам рисованный контур, а не линия внутри прямоугольника:
   элемент обрезан по силуэту (подложка вместе со штрихами), поэтому белое
   поле кончается ровно там же, где кончается зелёная линия. Так же сделан
   рваный верх подвала. */
/* Карточка товара собрана одним блоком в конце файла, в единицах макета. */


/* ---------- ТЕСТ «Подберём кофе за минуту» ----------
   Перенос Figma Frame 405 (файл XxbJXTBouifhaQr5F4y50H):
   • шапка 48/Black + подводка 15/Regular;
   • слева колонка 325×400: шаг 20/Bold #0c723b, вопрос 24/Black,
     чашка 269×281 (наполняется по шагам) и прогресс из 3 сегментов;
   • справа три карточки 325×400 r36: цветной верх с иконкой,
     белая панель с большим скруглением 120px, номер в кружке,
     заголовок 20/Black #22612b, описание 15/Medium #4c4c4c,
     круглая стрелка 52px #246231;
   • помол определяется автоматически по ответу на 2-й вопрос.
----------------------------------------------------- */
.quizsec{position:relative;padding:80px 0 64px;overflow:hidden}

/* шапка */
.quiz-head{position:relative;z-index:3;max-width:520px}
.quiz-head h2{font-family:var(--font);font-weight:900;text-transform:uppercase;font-size:calc(48 * var(--u));line-height:1.1;letter-spacing:-.01em}
.quiz-head h2 em{font-style:normal;color:var(--green-brand);display:block}
.quiz-head .sub{margin-top:16px;font-size:15px;line-height:1.3;max-width:391px;color:#000}

/* декор за карточками */
/* Декор теста описан в конце файла, в блоке про «Подберём кофе». */

/* сетка блока: 325 слева, карточки справа */
.quiz-row{position:relative;z-index:3;display:grid;gap:20px;margin-top:44px}
@media(min-width:1040px){.quiz-row{grid-template-columns:calc(325 * var(--u)) minmax(0,1fr)}}

/* ---- левая колонка ---- */
.quiz-aside{width:100%;max-width:calc(325 * var(--u))}
@media(min-width:1040px){.quiz-aside{position:relative;height:calc(400 * var(--u))}
  /* полоска прижата к низу колонки — ровно на уровне нижней границы карточек */
  .q-prog{position:absolute;left:0;right:0;bottom:0;margin-top:0}}
.q-step{display:block;font-family:var(--font);font-weight:700;font-size:calc(20 * var(--u));text-transform:uppercase;color:#0c723b}
.q-title{font-family:var(--font);font-weight:900;font-size:calc(24 * var(--u));line-height:1.3;text-transform:uppercase;color:#000;margin-top:10px;height:calc(56 * var(--u))}
.q-cup{height:calc(282 * var(--u));margin-top:6px;display:flex;align-items:flex-end;justify-content:center}
.q-cup img{height:100%;width:auto;max-width:100%;object-fit:contain;
  animation:cupIn .55s cubic-bezier(.22,1,.36,1)}
@keyframes cupIn{from{opacity:0;transform:translateY(14px) scale(.94)}to{opacity:1;transform:none}}
.q-prog{display:flex;align-items:center;gap:4px;margin-top:14px;padding-left:38px}
.q-prog i{width:59px;height:8px;border-radius:200px;background:#d9d9d9;flex:none;transition:background .45s var(--ease)}
.q-prog i.done{background:#0c723b}
.q-prog i.on{width:67px;height:16px;border-radius:0;background:url(img/q-progress-on.svg) no-repeat left center/67px 16px;margin-left:-8px}
.q-prog i.on + i{margin-left:-4px}

/* ---- карточки-ответы ---- */
.quiz-main{position:relative;min-height:400px}
/* Раньше варианты стояли в три колонки и тянулись на всю высоту блока.
   Теперь это столбик карточек по 191 px — высоту задаёт содержимое,
   иначе сетка растягивала строки и рисованный контур смазывало. */
.qcards{display:grid;gap:calc(20 * var(--u));align-content:start;grid-auto-rows:min-content;
  transition:opacity .22s ease,transform .38s var(--ease)}
.qcards[hidden]{display:none}
.qcards.is-out{opacity:0;transform:translateY(12px)}
.qcards.is-in{opacity:1;transform:none}
/* В макете варианты идут столбиком, а не в три колонки. */
/* Карточка ответа по макету (907×191): белая, в столбик, рисованный
   зелёный контур. Прежняя была цветной плиткой 325×400 с узором, номером
   и белой дугой — от этого не осталось ничего, поэтому блок переписан
   целиком, а лишние части разметки просто спрятаны. */
.qc{position:relative;display:flex;align-items:center;justify-content:space-between;
  gap:calc(20 * var(--u));text-align:left;width:100%;
  padding:calc(16 * var(--u)) calc(40 * var(--u));
  min-height:calc(191 * var(--u));border-radius:calc(32 * var(--u));border:0;
  background:#fff;
  transition:transform .35s var(--ease)}

.qc:hover{transform:translateY(-3px)}
/* Узор, белая дуга и номер варианта — в макете их нет. */
.qc .qc-pat,.qc .qc-panel,.qc .qc-num{display:none}
.qc .qc-ico{position:static;transform:none;width:calc(117 * var(--u));height:calc(117 * var(--u));
  object-fit:contain;flex:none;z-index:2;transition:transform .45s var(--ease)}
.qc:hover .qc-ico{transform:scale(1.06)}
.qc .qc-txt{position:static;display:flex;flex-direction:column;justify-content:center;
  gap:calc(8 * var(--u));width:calc(178 * var(--u));flex:1 1 auto;z-index:5}
.qc .qc-t{display:block;font-family:var(--font);font-weight:900;font-size:calc(24 * var(--u));
  line-height:1.1;text-transform:uppercase;color:var(--green-brand)}
.qc .qc-d{display:block;margin-top:0;font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));line-height:1.3;color:#000}
.qc .qc-go{position:static;flex:none;width:calc(52 * var(--u));height:calc(52 * var(--u));
  border-radius:0;background:url(img/btn-arrow-green.svg) no-repeat center/100% 100%;
  display:block;z-index:5;transition:transform .25s var(--ease)}
.qc .qc-go img{display:none}
.qc:hover .qc-go{transform:translateX(4px)}
.qc.picked .qc-go{transform:translateX(4px) scale(1.08)}

/* ---- результат ---- */
.qresult{position:relative;z-index:3}
.qresult[hidden]{display:none}
@keyframes qrIn{from{opacity:0;transform:translateY(26px) scale(.97)}to{opacity:1;transform:none}}
@keyframes qrLead{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.qr-lead{font-weight:500;font-size:16px;line-height:1.55;max-width:660px;opacity:0;animation:qrLead .5s var(--ease) .06s forwards}
.qr-grind{display:inline-flex;align-items:center;gap:10px;margin-top:14px;background:var(--green-pale);
  color:var(--green-deep-2);font-weight:700;font-size:15px;padding:11px 18px;border-radius:999px;
  opacity:0;animation:qrLead .5s var(--ease) .14s forwards}
.qr-grind b{font-weight:900}
.qr-grid{display:grid;gap:16px;margin-top:22px}
@media(min-width:760px){.qr-grid{grid-template-columns:1fr 1fr}}
.qr-card{display:grid;grid-template-columns:118px minmax(0,1fr);gap:18px;align-items:center;background:#fff;
  border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);border-radius:24px;padding:16px 18px;
  opacity:0;animation:qrIn .62s cubic-bezier(.22,1,.36,1) forwards}
.qr-card:nth-child(1){animation-delay:.24s}
.qr-card:nth-child(2){animation-delay:.38s}
.qr-img{display:flex;align-items:center;justify-content:center}
.qr-img img{max-width:100%;height:auto;transition:transform .45s var(--ease)}
.qr-card:hover .qr-img img{transform:scale(1.05)}
.qr-body h4{font-family:var(--font);font-weight:900;font-size:19px;text-transform:uppercase;color:var(--green-deep-2)}
.qr-body p{font-weight:500;font-size:14px;color:#4d4d4d;margin-top:6px;line-height:1.45}
.qr-w{display:flex;gap:8px;margin-top:12px}
.qr-w button{font-weight:500;font-size:14px;padding:7px 16px;border-radius:11px;background:#fff;
  border:1.5px solid var(--green-deep-2);color:var(--green-deep-2);transition:all .18s}
.qr-w button.on{background:var(--green-deep-2);color:#fff}
.qr-buy{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:14px;
  margin-top:6px;padding-top:14px;border-top:1px solid var(--line)}
.qr-price{font-family:var(--font);font-weight:900;font-size:20px;color:var(--green-deep-2);line-height:1.25}
.qr-price small{display:block;font-family:var(--font-ui);font-weight:400;font-size:14px;color:#000;margin-top:2px}
.qr-reset{margin-top:22px;font-weight:700;font-size:15px;color:var(--green-deep-2);
  border-bottom:2px solid var(--yellow);padding-bottom:3px;opacity:0;animation:qrLead .5s var(--ease) .52s forwards}
.qr-reset:hover{border-bottom-color:var(--green)}

@media(max-width:1039px){.quiz-head h2{font-size:30px}.quizsec{padding-top:50px}
  .quiz-aside{max-width:none}
  .q-title{margin-top:8px;height:auto}
  .q-cup{height:200px;width:100%;margin-top:14px;justify-content:flex-start}
  .q-cup img{max-width:100%}
  .q-prog{margin-top:14px}}
/* Прежние мобильные правила подгоняли высокую цветную плитку: фиксировали
   высоту 348 и раскладывали номер, текст и стрелку по абсолютным отступам.
   Карточка теперь горизонтальная и высоту берёт из содержимого, поэтому
   от старых правил осталось только то, что к ней не относится. */
@media(max-width:759px){
  .qc{padding:calc(14 * var(--u)) calc(18 * var(--u));gap:calc(14 * var(--u))}
  .q-cup{height:180px}.qr-card{grid-template-columns:1fr}.qr-buy{flex-wrap:wrap}
  .quiz-main{min-height:0}}
@media(prefers-reduced-motion:reduce){
  .qr-card,.qr-lead,.qr-grind,.qr-reset{animation:none;opacity:1;transform:none}
  .qcards,.q-cup img{transition:none;animation:none}
}

/* ---------- ДЕТАЛЬНАЯ КАРТОЧКА ТОВАРА — Figma Frame 452 ----------
   Слева блок 465 (бейджи, имя 64/ExtraBold #22612b, происхождение,
   описание, шкалы вкуса, способы приготовления), в центре фото
   пачки 737×643 с зёрнами, справа карточка покупки 329×424
   (#145732, r36) с белой панелью 325×326 внутри.
------------------------------------------------------------------- */
.pdp{padding:calc(22 * var(--u)) 0 calc(70 * var(--u))}
.pdp-crumbs{font-size:14px;color:var(--ink-soft)}
.pdp-crumbs a{color:var(--ink-soft);transition:color .15s}
.pdp-crumbs a:hover{color:var(--green-brand)}
.pdp-crumbs span{color:var(--green-deep-2);font-weight:500}

.pdp-grid{display:grid;gap:calc(24 * var(--u));margin-top:calc(28 * var(--u));align-items:start}
@media(min-width:1100px){
  .pdp-grid{grid-template-columns:calc(465 * var(--u)) minmax(0,1fr) calc(329 * var(--u));
    gap:calc(30 * var(--u))}
}

/* ---- левая колонка ---- */
.pdp-badges{display:flex;gap:calc(10 * var(--u));flex-wrap:wrap}
.pdp-badges .ptag{position:static}
.pdp-name{font-family:var(--font);font-weight:900;text-transform:uppercase;color:var(--green-deep-2);
  font-size:calc(64 * var(--u));line-height:1.02;letter-spacing:-.02em;margin-top:calc(24 * var(--u))}
/* Строки .pdp-meta («△ высота» и обработка) больше нет: высоту заказчик
   15.09.2026 убрал со всего сайта, обработка стоит строкой .pdp-sub сразу
   под названием. Её правила удалены вместе с разметкой.
   Кегль описания — не меньше 15px, на широком экране растёт с макетом:
   «и всё сделать крупнее» (15.09.2026); все размеры «было / стало» —
   у правила .pdp-sub ниже. */
.pdp-desc{margin-top:calc(18 * var(--u));font-size:max(15px, calc(17 * var(--mp)));line-height:1.6;color:#000;max-width:calc(400 * var(--u))}

.pdp-box{margin-top:calc(22 * var(--u));border:1.5px solid var(--line);border-radius:calc(24 * var(--u));
  padding:calc(20 * var(--u)) calc(22 * var(--u))}
.pdp-scales{display:flex;flex-direction:column;gap:calc(10 * var(--u));max-width:calc(405 * var(--u))}
.pdp-scales .sc{display:flex;align-items:center;gap:calc(16 * var(--u));font-weight:500;font-size:15px;color:#000}
.pdp-scales .nm{width:calc(84 * var(--u));flex:none}
.pdp-scales .bars{display:flex;gap:calc(7 * var(--u))}
.pdp-scales i{width:calc(13 * var(--u));height:calc(13 * var(--u));border-radius:50%;
  border:1.5px solid var(--green-deep-2);background:#fff}
.pdp-scales i.on{background:var(--green-deep-2)}
.pdp-scales i.half{background:linear-gradient(90deg,var(--green-deep-2) 50%,#fff 50%)}

.pdp-brew{display:flex;gap:calc(6 * var(--u));justify-content:space-between;max-width:calc(405 * var(--u))}
.pdp-brew span{display:flex;flex-direction:column;align-items:center;gap:calc(8 * var(--u));
  font-weight:500;font-size:12px;color:#000;text-align:center;flex:1;min-width:0;white-space:nowrap}
.pdp-brew img{height:calc(46 * var(--u));width:auto}

/* ---- фото ---- */
.pdp-photo{position:relative;display:flex;align-items:flex-start;justify-content:center;padding-top:calc(10 * var(--u))}
@media(min-width:1100px){.pdp-photo{margin:0 calc(-30 * var(--u))}}
.pdp-pack{width:100%;max-width:calc(737 * var(--u));height:auto}
.pdp-bean{position:absolute;pointer-events:none;opacity:.95}
.pdp-bean.b1{width:calc(115 * var(--u));left:9%;bottom:calc(-14 * var(--u));transform:rotate(-8deg)}
.pdp-bean.b2{width:calc(84 * var(--u));left:30%;bottom:calc(-26 * var(--u));transform:rotate(12deg)}
.pdp-bean.b3{width:calc(160 * var(--u));right:6%;bottom:calc(-4 * var(--u));transform:rotate(-3deg)}

/* ---- карточка покупки ---- */
.pdp-buy{position:relative;background:#145732;border-radius:calc(36 * var(--u));padding:calc(4 * var(--u));
  box-shadow:0 18px 44px rgba(20,60,30,.18)}
.buy-top{position:relative;display:flex;align-items:center;justify-content:space-between;gap:calc(10 * var(--u));
  padding:calc(20 * var(--u)) calc(22 * var(--u)) calc(4 * var(--u))}
.buy-prices{display:flex;flex-direction:column;min-width:0}
.buy-old{font-weight:700;font-size:calc(19 * var(--u));color:var(--yellow-2);text-decoration:line-through;
  text-decoration-thickness:1.5px;white-space:nowrap}
.buy-new{font-family:var(--font);font-weight:700;font-size:calc(34 * var(--u));color:#fff;line-height:1.1;margin-top:2px;white-space:nowrap}
.buy-off{flex:none;background:var(--orange);color:#fff;font-family:var(--font);font-weight:700;
  font-size:calc(19 * var(--u));padding:calc(6 * var(--u)) calc(14 * var(--u));border-radius:999px;white-space:nowrap}
.buy-save{font-style:italic;font-size:11px;line-height:1.25;color:#fff;opacity:.9;text-align:right;
  padding:0 calc(22 * var(--u)) calc(14 * var(--u))}

.buy-panel{background:#fff;border-radius:calc(34 * var(--u));padding:calc(24 * var(--u)) calc(24 * var(--u)) calc(20 * var(--u))}
.buy-row + .buy-row{margin-top:calc(18 * var(--u))}
/* «Вес пачки», «Помол»: было 15px, стало не меньше 15 и 17 · --mp (крупнее
   по просьбе заказчика 15.09.2026, см. .pdp-sub). */
.buy-cap{display:block;font-weight:500;font-size:max(15px, calc(17 * var(--mp)));color:#000}
.buy-cap .req{font-style:normal;color:var(--orange)}
.buy-chips{display:flex;gap:calc(10 * var(--u));margin-top:calc(10 * var(--u))}
.buy-chips button{font-weight:500;font-size:15px;padding:calc(10 * var(--u)) calc(20 * var(--u));
  border-radius:999px;background:#fff;border:1.5px solid var(--line);color:#000;transition:all .18s}
.buy-chips button.on{background:var(--yellow-2);border-color:var(--yellow-2);color:#000;font-weight:700}
.buy-select{position:relative;margin-top:calc(10 * var(--u))}
.buy-select select{width:100%;appearance:none;-webkit-appearance:none;background:#fff;border:1.5px solid var(--line);
  border-radius:calc(14 * var(--u));padding:calc(12 * var(--u)) calc(38 * var(--u)) calc(12 * var(--u)) calc(16 * var(--u));
  font-family:var(--font-ui);font-weight:500;font-size:15px;color:#000;cursor:pointer}
.buy-select select:focus{outline:none;border-color:var(--green-brand)}
.buy-select svg{position:absolute;right:calc(16 * var(--u));top:50%;transform:translateY(-50%);color:#000;pointer-events:none}

.buy-actions{display:flex;align-items:center;gap:calc(12 * var(--u));margin-top:calc(20 * var(--u))}
.buy-qty{display:flex;align-items:center;gap:calc(6 * var(--u));border:1.5px solid var(--line);
  border-radius:calc(14 * var(--u));padding:calc(6 * var(--u)) calc(10 * var(--u));flex:none}
.buy-qty button{width:calc(28 * var(--u));height:calc(28 * var(--u));border-radius:50%;font-size:calc(20 * var(--u));
  line-height:1;color:var(--green-deep-2);transition:background .15s}
.buy-qty button:hover{background:var(--green-pale)}
.buy-qty span{min-width:calc(22 * var(--u));text-align:center;font-weight:500;font-size:calc(18 * var(--u))}
.buy-cta{flex:1;justify-content:center;border-radius:calc(14 * var(--u));padding:calc(14 * var(--u)) calc(16 * var(--u))}
.buy-cta.is-added{background:var(--green)}
.buy-note{list-style:none;margin-top:calc(16 * var(--u));display:flex;flex-direction:column;gap:3px}
/* Сноски под кнопкой: было 11px, стало 14 · --mp, не меньше 13px (15.09.2026).
   Порог 13, а не 12: на 1024–1366 --mp стоит на пороге, и без него сноски
   там были бы мельче, чем на телефоне и планшете (там 13px). */
.buy-note li{font-style:italic;font-size:max(13px, calc(14 * var(--mp)));line-height:1.35;color:#000;opacity:.75}
.buy-note li::before{content:'— ';opacity:.6}

@media(max-width:1099px){
  .pdp-grid{grid-template-columns:1fr}
  .pdp-photo{order:-1}
  .pdp-pack{max-width:min(100%,420px)}
  .pdp-name{font-size:clamp(34px,7vw,56px)}
  .pdp-buy{max-width:420px}
}

/* --- выравнивание карточек «Хитов обжарки» ---
   Товары в каталоге заполнены по-разному: у кого-то нет фото, у кого-то
   описания или шкал. Чтобы карточки не разъезжались, место под картинку
   держим постоянным, а блок с ценой прижимаем к низу. */




/* Карточка покупки на детальной: кнопка вылезала за пределы зелёной
   плашки, потому что строка с количеством и кнопкой не переносилась. */
.pdp-buy .buy-actions{display:flex;flex-wrap:wrap;gap:calc(12 * var(--u));align-items:center}
.pdp-buy .buy-cta{flex:1 1 auto;justify-content:center;min-width:calc(150 * var(--u))}
.pdp-buy .buy-qty{flex:0 0 auto}
.pdp-buy .buy-panel,.pdp-buy .buy-top{box-sizing:border-box}
.pdp-brew span{display:block}

/* Карточки в списке каталога: сетка там от темы (row-cols), поэтому
   растягиваем ячейку и саму карточку, иначе они разной высоты. */
/* Ячейка списка каталога. height:100% ставить НЕЛЬЗЯ: заданная высота
   отменяет растягивание по ряду, и карточки выходят разной длины.
   Достаточно сделать ячейку флекс-контейнером — она сама займёт
   высоту ряда, а карточка внутри растянется. */
.pgrid-cell{display:flex}
.pgrid-cell > .pcard{width:100%}
.pcard .pw{margin-top:auto}

/* ================= правки по замечаниям ================= */

/* 1. Поиск занимал 688px, дальше до иконок оставалось 125px пустоты.
      На широких экранах снимаем потолок — поле дотягивается до иконок. */
@media(min-width:1101px){
  .hd-search{max-width:none}
}

/* 2. Бегущая строка шла внутри контентной колонки. В макете она
      во всю ширину экрана. */
.ticker-wrap{width:100vw;margin-left:calc(50% - 50vw);max-width:100vw}

/* 3. Аккордеон карточек входа раскрывался рывком: правило появления .rv
      из home.css перебивало переход flex-grow, потому что идёт позже
      и имеет ту же силу. Возвращаем оба перехода вместе. */
@media(min-width:1000px) and (hover:hover){
  .entries .entry.rv{
    transition:flex-grow .8s cubic-bezier(.3,.7,.2,1),
               filter .5s ease,
               box-shadow .45s ease,
               opacity .7s var(--ease),
               transform .7s var(--ease)}
}




/* Кнопка покупки на детальной — той же рисованной формы. */
.pdp-buy .buy-cta{
  background:url(img/btn-cart.svg?v=1) no-repeat center/100% 100%;
  border-radius:0}
.pdp-buy .buy-cta:hover{filter:brightness(1.08)}


/* ---------- страницы документов (политика, оферта) ----------
   Текст приходит из Битрикса обычными <p>, <h2>, <ul> — задаём им
   типографику макета, не трогая сам текст. */
.doc{padding-bottom:calc(60 * var(--u))}
.doc h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(26 * var(--u));line-height:1.15;margin:calc(34 * var(--u)) 0 calc(12 * var(--u));color:var(--green-deep-2)}
.doc h3{font-family:var(--font);font-weight:700;font-size:calc(19 * var(--u));
  margin:calc(22 * var(--u)) 0 calc(8 * var(--u))}
.doc p{margin:0 0 calc(12 * var(--u));font-size:calc(16 * var(--u));line-height:1.65;color:var(--ink-soft);max-width:calc(900 * var(--u))}
.doc ul,.doc ol{margin:0 0 calc(14 * var(--u)) calc(22 * var(--u));padding:0;max-width:calc(900 * var(--u))}
.doc li{margin-bottom:calc(6 * var(--u));font-size:calc(16 * var(--u));line-height:1.6;color:var(--ink-soft)}
.doc strong{color:var(--ink)}
.doc p a,.doc li a,.doc td a{color:var(--green-brand);text-decoration:underline}
/* Переключатель документов .doc-nav целиком описан выше, в блоке «Документы»
   (~строка 282): фигура, наведение, открытый документ. Прежние правила
   отсюда (тень при наведении, background у активной) ломали фигуру —
   box-shadow шёл по прямоугольнику, а background стирал подложку. */
.doc table{width:100%;max-width:calc(900 * var(--u));border-collapse:collapse;margin:0 0 calc(16 * var(--u))}
.doc td,.doc th{border:1px solid var(--line);padding:calc(10 * var(--u)) calc(12 * var(--u));font-size:calc(15 * var(--u));text-align:left}

/* ---------- страница корзины (первый шаг покупки) ----------
   Разметку рисует штатный компонент Битрикса — переписывать его нельзя,
   на нём висит пересчёт количества и удаление позиций. Поэтому задаём
   только оформление поверх его классов. */
.sc-basket{padding-bottom:calc(60 * var(--u))}
.sc-basket .sec-title{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(44 * var(--u));line-height:1.05;margin:calc(18 * var(--u)) 0 calc(26 * var(--u))}

/* позиции */
.sc-basket .basket-items-list{border:0}
.sc-basket .basket-item-block-info,
.sc-basket .basket-items-list-item-container{
  background:#fff;border:1px solid var(--tile-line);border-radius:calc(28 * var(--u));
  padding:calc(18 * var(--u));margin-bottom:calc(14 * var(--u))}
.sc-basket .basket-item-info-name{font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(18 * var(--u));color:var(--green-deep-2);line-height:1.2}
.sc-basket .basket-item-price-current{font-family:var(--font);font-weight:900;
  font-size:calc(22 * var(--u));color:var(--green-deep-2)}
.sc-basket .basket-item-property-name{font-weight:700;color:var(--ink-soft);font-size:calc(14 * var(--u))}

/* итог справа */
.sc-basket .basket-checkout-section{
  background:var(--bg-soft);border-radius:calc(28 * var(--u));padding:calc(22 * var(--u));border:0}
.sc-basket .basket-checkout-block-total-price-current,
.sc-basket .basket-coupon-block-total-price-current{
  font-family:var(--font);font-weight:900;font-size:calc(30 * var(--u));color:var(--green-deep-2)}
.sc-basket .basket-checkout-block-total-title{font-weight:700;color:var(--ink-soft)}

/* кнопка перехода ко второму шагу — той же формы, что «В корзину» */
.sc-basket .basket-btn-checkout{
  display:inline-flex;align-items:center;justify-content:center;
  background:url(img/btn-cart.svg?v=1) no-repeat center/100% 100%;
  color:#fff;font-family:var(--font);font-weight:500;font-size:calc(17 * var(--u));
  padding:calc(16 * var(--u)) calc(28 * var(--u));border:0;border-radius:0;
  width:100%;transition:filter .2s}
.sc-basket .basket-btn-checkout:hover{filter:brightness(1.08);color:#fff}

/* купон */
.sc-basket .basket-coupon-section{background:transparent;border:0;padding:0;margin-bottom:calc(18 * var(--u))}
.sc-basket .basket-coupon-block-field input{
  border:2px solid var(--line);border-radius:999px;padding:calc(11 * var(--u)) calc(18 * var(--u));
  font-family:var(--font);font-size:calc(15 * var(--u))}

/* Реквизиты в конце документа — отдельной плашкой, чтобы не терялись
   в общем тексте. */
.doc-req{margin-top:calc(40 * var(--u));padding:calc(26 * var(--u)) calc(28 * var(--u));
  background:var(--bg-soft);border-radius:calc(28 * var(--u));max-width:calc(900 * var(--u))}
.doc-req h2{margin-top:0}
.doc-req p:last-child{margin-bottom:0}
.doc-req a{color:var(--green-brand);text-decoration:none;font-weight:700}
.doc-req a:hover{text-decoration:underline}

/* ---------- оформление заказа (второй шаг) ----------
   Форму рисует штатный sale.order.ajax: на ней держатся расчёт доставки,
   выбор оплаты и отправка заказа. Переписывать нельзя — задаём оформление
   поверх её классов, как и на корзине. */
.sc2026-page .bx-soa-section{
  background:#fff;border:2px solid var(--line);border-radius:calc(28 * var(--u));
  margin-bottom:calc(16 * var(--u));overflow:hidden}
.sc2026-page .bx-soa-section-title-container{
  background:var(--bg-soft);border:0;padding:calc(16 * var(--u)) calc(22 * var(--u))}
.sc2026-page .bx-soa-section-title{
  font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(18 * var(--u));color:var(--green-deep-2);margin:0}
.sc2026-page .bx-soa-section-title-count{color:var(--green-brand);font-weight:900}
.sc2026-page .bx-soa-section-content{padding:calc(20 * var(--u)) calc(22 * var(--u))}

/* поля формы */
.sc2026-page .bx-soa-customer input.form-control,
.sc2026-page .bx-soa-section .form-control{
  border:2px solid var(--line);border-radius:calc(16 * var(--u));
  padding:calc(12 * var(--u)) calc(16 * var(--u));
  font-family:var(--font);font-size:calc(16 * var(--u));box-shadow:none}
.sc2026-page .bx-soa-section .form-control:focus{border-color:var(--green-brand)}
.sc2026-page .bx-soa-custom-label{font-weight:700;color:var(--ink-soft);font-size:calc(14 * var(--u))}

/* выбор доставки и оплаты — карточками */
.sc2026-page .bx-soa-pp-company{
  border:2px solid var(--line);border-radius:calc(22 * var(--u));
  padding:calc(14 * var(--u));transition:border-color .2s,box-shadow .2s}
.sc2026-page .bx-soa-pp-company:hover{border-color:var(--green-pale)}
.sc2026-page .bx-soa-pp-company.bx-selected{
  border-color:var(--green-brand);box-shadow:0 8px 22px rgba(20,40,20,.10)}

/* итог */
.sc2026-page .bx-soa-cart-total{
  background:var(--bg-soft);border:0;border-radius:calc(28 * var(--u));padding:calc(22 * var(--u))}
.sc2026-page .bx-soa-cart-total-line-total .bx-soa-cart-d,
.sc2026-page .bx-soa-cart-total-line.bx-soa-cart-total-line-highlight .bx-soa-cart-d{
  font-family:var(--font);font-weight:900;font-size:calc(28 * var(--u));color:var(--green-deep-2)}

/* кнопки шага — рисованной формой, как «В корзину» */
.sc2026-page .bx-soa-cart-total-button-container .btn-primary,
.sc2026-page .btn-order-save{
  background:url(img/btn-cart.svg?v=1) no-repeat center/100% 100%;
  border:0;border-radius:0;color:#fff;
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--u));
  padding:calc(16 * var(--u)) calc(30 * var(--u));transition:filter .2s}
.sc2026-page .bx-soa-cart-total-button-container .btn-primary:hover,
.sc2026-page .btn-order-save:hover{filter:brightness(1.08);color:#fff}
.sc2026-page .bx-soa-editstep{color:var(--green-brand);font-weight:700}

/* ---------- детальная карточка по макету (Frame 467) ---------- */

/* Шкалы — точками на светлой плашке, а не полосками. */
.pdp-scales{background:var(--bg-soft);border-radius:calc(22 * var(--u));
  padding:calc(20 * var(--u)) calc(24 * var(--u));display:grid;gap:calc(10 * var(--u))}
.pdp-scales .sc{display:flex;align-items:center;justify-content:space-between;gap:calc(20 * var(--u))}
.pdp-scales .nm{font-family:var(--font);font-weight:700;font-size:calc(16 * var(--u));color:var(--ink)}
.pdp-scales .bars{display:flex;gap:calc(7 * var(--u))}
.pdp-scales .bars i{width:calc(11 * var(--u));height:calc(11 * var(--u));border-radius:50%;
  background:#fff;border:calc(1.5 * var(--u)) solid var(--green-pale)}
.pdp-scales .bars i.on{background:var(--green-brand);border-color:var(--green-brand)}

/* Способы приготовления — плитками с иконкой, как в макете. */
.pdp-brew{display:flex;flex-wrap:wrap;gap:calc(12 * var(--u));background:transparent;padding:0;border:0}
.pdp-brew span{display:flex;flex-direction:column;align-items:center;gap:calc(6 * var(--u));
  width:calc(78 * var(--u));font-size:calc(13 * var(--u));text-align:center;color:var(--ink-soft);line-height:1.2}
.pdp-brew span::before{content:'';width:calc(56 * var(--u));height:calc(56 * var(--u));
  border-radius:calc(16 * var(--u));background:var(--bg-soft)}

/* Выбранная фасовка в карточке покупки — жёлтая, как в макете. */
.pdp-buy .buy-chips button.on{background:var(--yellow-2);border-color:var(--yellow-2);color:var(--ink)}
.pdp-buy .buy-chips button{border-radius:999px;padding:calc(11 * var(--u)) calc(22 * var(--u));
  border:calc(2 * var(--u)) solid var(--line);background:#fff;font-weight:700;font-size:calc(16 * var(--u))}

/* Характеристики под описанием — сеткой на светлой плашке.
   Один порядок и одна сетка у всех товаров (заказчик 16.09.2026:
   «расположение текста везде разное, привести в один стиль»). Порядок
   полей задаёт шаблон (catalog.element/sc2026.detail), здесь — сетка:
   • колонки: телефон (<768) — одна, планшет (768–1023) — две, компьютер
     (≥1024) — три, без исключений;
   • grid-auto-flow:row — ячейки идут по порядку шаблона; пустое поле не
     выводится, следующее встаёт на его место, и ряды не рвутся (не dense:
     dense перетасовал бы ячейки по свободным местам);
   • .wide (букет — список через запятую) — на всю ширину ряда, последним;
   • плашка — на всю ширину области под вкладками (grid-column). .pdp-below
     при ≥900 двухколоночная (описание в половину ширины — прозу так и
     читают), и раньше характеристики стояли в левой половине: на 1440
     колонка выходила 132px, на 1100–1279 — 97–119, где «традиционная»
     (109px при 15px) и «натуральная» (97) ломались посередине слова, и
     на 1100–1279 держали две колонки вместо трёх. Теперь колонка 227px
     на 1100, 272 на 1280, 303 на 1440, 362 на 1920, на 1024 — 297 (сетка
     страницы там ещё одноколоночная); планшет 328 на 768 и 394 на 900,
     телефон набок 366, телефон 284 (замер 16.09.2026 по товарам 56, 159,
     1320, 1424, 558, 562). Самые длинные слова каталога — «традиционная»
     109px, «косточковые» 100, «натуральная» 97 — входят в колонку на всех
     ширинах, отдельное правило для 1100–1279 снято. */
.pdp-specs{margin-top:calc(30 * var(--u));background:var(--bg-soft);border-radius:calc(26 * var(--u));
  padding:calc(26 * var(--u));display:grid;grid-auto-flow:row;grid-template-columns:minmax(0,1fr);
  gap:calc(22 * var(--u)) calc(30 * var(--u));grid-column:1 / -1}
@media(min-width:768px){.pdp-specs{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1024px){.pdp-specs{grid-template-columns:repeat(3,minmax(0,1fr))}}
.pdp-specs .wide{grid-column:1 / -1}
/* Подписи характеристик: было 15 · --u (12,4px на 1440), стало 19 · --u
   (15,8px) — заказчик 15.09.2026 «всё сделать крупнее», см. .pdp-sub.
   Не меньше 15px: на 1024–1366 --u на пороге, и без порога там оставалось
   13,3–14,9px. На 1440 и шире порог не срабатывает. */
.pdp-specs dt{font-family:var(--font);font-weight:700;font-size:max(15px, calc(19 * var(--u)));color:var(--ink);margin:0}
.pdp-specs dd{margin:calc(4 * var(--u)) 0 0;font-size:max(15px, calc(19 * var(--u)));color:var(--ink-soft)}
/* С крупным кеглем длинное слово бывает шире своей колонки там, где колонки
   узкие: на планшете 900 колонка 111px, а «Разновидность» шире и вылезало
   в соседнюю. Переносим по слогам — у страницы lang="ru", браузер ставит
   дефис сам («Разновид-ность»).
   Только у подписей. У значений перенос по слогам резал и то, что спокойно
   уходит на следующую строку целым словом: на планшете букет 1305 шёл
   в семь строк «жёлтые фрук-/ты, красные / ягоды, спе-/ции…», на 1100
   «яго-/ды» (замер 16.09.2026). Значению хватает переноса по пробелам;
   overflow-wrap ломает только слово, которое шире колонки целиком.
   С 16.09.2026 плашка на всю ширину области и колонки шире (см. выше):
   111px на планшете больше нет, правила остаются страховкой. */
.pdp-specs dt{-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word}
.pdp-specs dd{overflow-wrap:break-word}
.pdp-sec-title{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(24 * var(--u));color:var(--green-deep-2);margin:calc(34 * var(--u)) 0 calc(14 * var(--u))}

/* Карточка покупки едет за прокруткой. Шапка липкая и занимает ~72px,
   поэтому отступаем чуть больше, чтобы она не перекрывала цену.
   align-self:start обязателен: иначе элемент растянут на всю строку
   сетки и ехать ему некуда. */
.pdp-grid > .pdp-buy{position:sticky;top:calc(96 * var(--u));align-self:start}
@media(max-width:900px){.pdp-grid > .pdp-buy{position:static}}

/* Вкладки под карточкой и раскладка описания — по макету Frame 467. */
.pdp-tabs{display:flex;flex-wrap:wrap;gap:calc(34 * var(--u));
  border-bottom:1px solid var(--line);margin-top:calc(40 * var(--u))}
.pdp-tabs button{background:none;border:0;padding:0 0 calc(14 * var(--u));cursor:pointer;
  font-family:var(--font);font-weight:700;text-transform:uppercase;letter-spacing:.02em;
  /* было 16 · --u, стало 19 · --u — вровень с характеристиками под ними;
     не меньше 15px, как у характеристик (порог нужен на 1024–1366) */
  font-size:max(15px, calc(19 * var(--u)));color:var(--ink-soft);position:relative;transition:color .2s}
.pdp-tabs button:hover{color:var(--ink)}
.pdp-tabs button.on{color:var(--ink)}
.pdp-tabs button.on::after{content:'';position:absolute;left:0;right:0;bottom:-1px;
  height:calc(3 * var(--u));background:var(--green-brand);border-radius:2px}

.pdp-below{display:grid;gap:calc(30 * var(--u));margin-top:calc(28 * var(--u))}
@media(min-width:900px){.pdp-below{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start}}
.pdp-fulltext p{margin:0 0 calc(12 * var(--u))}
/* было 16 · --u, стало 19 · --u, не меньше 15px (15.09.2026, «всё крупнее») */
.pdp-fulltext{font-size:max(15px, calc(19 * var(--u)));line-height:1.7;color:var(--ink-soft)}
.pdp-specs[hidden],.pdp-panel[hidden]{display:none}

/* ---------- карточка товара: доводка по Frame 467 ---------- */

/* Заголовок: кегль и цвет из макета. Селектор с .sc2026-page — чтобы
   не проигрывать правилам темы по специфичности. */
.sc2026-page .pdp-name{font-size:calc(62 * var(--u));line-height:1.06;
  letter-spacing:0;color:var(--green-deep-2)}

/* Панель шкал: цвет и радиус макета, лишнюю рамку от .pdp-box снимаем. */
.pdp-box.pdp-scales{background:#f1f2e8;border:0;border-radius:calc(30 * var(--u));
  padding:calc(20 * var(--u))}
/* Подписи шкал: было 19 · --u (15,8px на 1440), стало 22 · --u (18,2px) —
   15.09.2026, см. .pdp-sub. В панель 325 · --mp входит с запасом: на 1440
   между «Кислотностью» (121px) и кружками остаётся 87px. */
.pdp-scales .nm{font-size:calc(22 * var(--u));color:#000}
.pdp-scales .bars i{width:calc(13 * var(--u));height:calc(13 * var(--u));
  background:transparent;border:1px solid rgba(34,97,43,.38)}
.pdp-scales .bars i.on{background:var(--green-deep-2);border-color:var(--green-deep-2)}

/* Плитки способов приготовления: размеры и цвета макета,
   длинные названия переносим, а не выпускаем за ячейку. */
.pdp-brew span{white-space:normal;font-size:calc(15 * var(--u));color:#000;
  gap:calc(10 * var(--u));width:calc(92 * var(--u))}
.pdp-brew span::before{width:calc(65 * var(--u));height:calc(65 * var(--u));
  border-radius:calc(20 * var(--u));background:#f1f2e8}

/* Счётчик количества: под него не было ни одного правила, поэтому
   браузер рисовал поле шириной 190px и оно выламывало карточку. */
.pdp-buy .buy-qty{border-radius:999px;border:1px solid var(--green-deep-2);
  gap:calc(15 * var(--u));padding:calc(8 * var(--u)) calc(13 * var(--u));background:#fff}
.pdp-buy .buy-qty .quantity-input{width:calc(34 * var(--u));min-width:0;padding:0;border:0;
  background:transparent;text-align:center;font-family:var(--font);font-weight:500;
  font-size:calc(22 * var(--u));line-height:1;color:#000;-moz-appearance:textfield}
.pdp-buy .buy-qty .quantity-input::-webkit-outer-spin-button,
.pdp-buy .buy-qty .quantity-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.pdp-buy .buy-actions{flex-wrap:nowrap}

/* Кнопка покупки на детальной — в макете сплошная пилюля, а не
   рисованная фигура, которая стоит в карточках каталога. */
.pdp-buy .buy-cta,.pdp-buy .buy-cta:hover{
  background:var(--cart);border-radius:999px;
  padding:calc(16 * var(--u)) calc(22 * var(--u));
  font-size:calc(21 * var(--u));gap:calc(12 * var(--u))}

/* Рисунки способов приготовления. Раньше плитка рисовалась пустым
   ::before — светлый квадрат без содержимого выглядел недоделкой.
   Теперь внутри плитки лежит картинка, а квадрат остаётся только
   там, где картинки нет. */
.pdp-brew span:has(.ic)::before{content:none}
.pdp-brew .ic{display:flex;align-items:center;justify-content:center;
  width:calc(65 * var(--u));height:calc(65 * var(--u));
  border-radius:calc(20 * var(--u));background:#f1f2e8;flex:none}
.pdp-brew .ic img{width:calc(40 * var(--u));height:calc(40 * var(--u));object-fit:contain}

/* Зёрна у пачки — украшение из макета. На узких экранах фото и так
   уменьшается, зёрна там только мешают. */
.pdp-photo{overflow:visible}
@media(max-width:1099px){.pdp-bean{display:none}}

/* Плитки способов приготовления во вкладке: их семь, а не четыре,
   и в 405u они не помещались — flex сжимал каждую до 38px, отчего
   подписи налезали друг на друга. Ширину фиксируем, ряд пускаем
   во всю ширину вкладки. */
.pdp-brew span{flex:0 0 calc(92 * var(--u))}
.pdp-panel .pdp-brew{max-width:none;justify-content:flex-start;
  gap:calc(24 * var(--u)) calc(18 * var(--u))}

/* ==========================================================================
   Frame 467 — детальная карточка, снятая с макета один в один.

   Макет нарисован на ширине 1440, а дизайн-система сайта считает в своих
   единицах (--u откалиброван под макет 1800). Чтобы не пересчитывать
   каждое число руками, вводим «пиксель макета»: --mp. Тогда любой размер
   из Frame 467 пишется как есть — calc(322 * var(--mp)).

   Полоса контента у нас уже макетной (1360 против наших ~1274), поэтому
   карточка выходит пропорционально макету, а не абсолютно. Менять общую
   ширину ради одного экрана нельзя — она держит шапку, подвал и главную.
   ========================================================================== */
.pdp{--mp:calc((var(--wrap-w) - 48 * var(--u)) / 1360);
  /* Правый узор в макете уходит за край кадра. Режем именно clip,
     а не hidden: hidden сделал бы .pdp контейнером прокрутки и
     карточка покупки перестала бы липнуть при скролле. */
  overflow-x:clip}

@media(min-width:1100px){
  /* Колонки макета: 325 | 737 | 322. Фото заходит на соседние колонки
     (352..1089 против 365 и 1075), поэтому вытягиваем его отрицательными
     полями, а не расширением колонки. */
  .pdp-grid{grid-template-columns:calc(325 * var(--mp)) minmax(0,1fr) calc(322 * var(--mp));
    gap:0;position:relative}
  .pdp-photo{margin:0 calc(-14 * var(--mp));padding-top:calc(78 * var(--mp))}
  .pdp-pack{max-width:calc(737 * var(--mp))}
}

/* Панель шкал: 325×140, радиус 24, заливка F1F2E8 */
.sc2026-page .pdp-box.pdp-scales{max-width:calc(325 * var(--mp));border-radius:calc(24 * var(--mp));
  padding:calc(18 * var(--mp)) calc(22 * var(--mp))}

/* Плитки способов: 52×52, радиус 16, F2F3E9, шаг 78 (зазор 26) */
.sc2026-page .pdp-info .pdp-brew{max-width:calc(325 * var(--mp));gap:calc(26 * var(--mp));
  justify-content:flex-start;margin-top:calc(24 * var(--mp))}
.sc2026-page .pdp-brew span{width:calc(52 * var(--mp));flex:0 0 calc(52 * var(--mp));
  gap:calc(8 * var(--mp));font-size:calc(12 * var(--mp))}
/* Подписи под плитками в верхнем блоке: было 12 · --mp, стало 14 · --mp,
   не меньше 12px (15.09.2026, см. .pdp-sub). Крупнее не берём: подпись шире
   плитки в 52 и выходит в зазор 26; между «кружка» и «капельная кофеварка»
   остаётся 12,4px на 1440 и 8px при 12px (1024–1216, телефон, планшет).
   (Замер ряда из четырёх до 16.09.2026; шаг 78 и зазор 26 ниже перебиты
   сеткой в три колонки, см. следующее правило.)
   Только верхний блок (.pdp-info). Тот же .pdp-brew стоит и во вкладке
   «Способы приготовления»: там плиток семь, а зазор между ними меньше, и
   при 14 подписи соседних плиток слипались («ропресскружкакапельная» на
   телефоне, 1,2–1,4px на 1100 и 1440). Во вкладке кегль прежний, 12 · --mp. */
.sc2026-page .pdp-info .pdp-brew span{font-size:max(12px, calc(14 * var(--mp)))}
/* Верхний блок — сетка в три колонки (16.09.2026). Способы теперь по
   категории кофе (newdesign/quiz-brew.php): у тёмной их пять, у светлой и
   батч-брю четыре, у уникального два. В один ряд пять плиток в колонку 325
   не встают: шаг выходит 65 · --mp (53px на 1100–1215 и на телефоне, 63 на
   1440), а слово «кофеварка» при 12px — 69px, при 14 · --mp — 78,5; у тёмной
   «гейзерная кофеварка» и «капельная кофеварка» стоят рядом и слипались бы
   на всех ширинах. Четыре в ряд тоже на грани: «аэропресс» и «воронка и»
   на 1440 расходились на 2px. Поэтому ряд по три: колонка шире самого
   длинного слова, и подпись не выходит за свою колонку.
   Замер 16.09.2026 (подпись к подписи / блок): 320, 375, 768, 844×390,
   1024, 1100 — 17px, высота 169; 1440 — 24px, 197; 1920 — 33px, 258.
   Страница выше не становится: колонка сведений и на 1100 (514 против
   фото 579), и на 1440 (588 против 789) остаётся ниже фотографии. */
.sc2026-page .pdp-info .pdp-brew{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:calc(16 * var(--mp)) calc(8 * var(--mp));justify-items:center}
.sc2026-page .pdp-info .pdp-brew span{width:100%;min-width:0;flex:none;text-align:center}
/* Вкладка «Способы приготовления» — ряд, как был, но ячейка не уже своей
   подписи. Раньше это правило стояло только в mobile/product-page.css и
   mobile/tablet.css (§6): на десктопе ячейка 52 · --mp, и при новых подписях
   «гейзерная кофеварка» и «капельная кофеварка» рядом наезжали друг на
   друга на 2px (замер 1440, 16.09.2026). С правилом: между подписями не
   меньше 12,6px на 320–1100 (на 320 у тёмной ряд 4 + 1), 14,9 на 1440,
   19,5 на 1920; за край страницы ничего не выходит. */
.sc2026-page .pdp-panel .pdp-brew span{width:min-content;flex:0 0 auto;min-width:calc(52 * var(--mp))}
.sc2026-page .pdp-brew .ic{width:calc(52 * var(--mp));height:calc(52 * var(--mp));
  border-radius:calc(16 * var(--mp));background:#F2F3E9}
.sc2026-page .pdp-brew .ic img{width:calc(52 * var(--mp));height:calc(52 * var(--mp))}

/* Карточка покупки: зелёная 322×424 r36, внутри белая панель 326 высотой,
   над ней 96 под цену.
   Шапка с ценой — 100, а не 96: 15.09.2026 приписка «за 200 г» стала
   крупнее (taste-pack.css, .pdp .buy-per), и у килограмма три строки —
   зачёркнутая цена, цена, «за 1 кг» — в 96 больше не входили. На 1100–1215
   и на телефоне (--mp на пороге 0,819) столбик занимает 96,6 единицы, и
   шапка при выборе «1 кг» вырастала бы на полпикселя. 100 держат одну
   высоту у обеих фасовок; до белой панели остаётся 2,8px на телефоне,
   3,6 на 1280, 5 на 1440, 7 на 1920 (замер 16.09.2026). */
.sc2026-page .pdp-buy{border-radius:calc(36 * var(--mp));padding:0 0 calc(2 * var(--mp))}
.sc2026-page .pdp-buy .buy-top{min-height:calc(100 * var(--mp));align-items:flex-start;
  padding:calc(20 * var(--mp)) calc(24 * var(--mp)) 0}
.sc2026-page .pdp-buy .buy-panel{border-radius:calc(36 * var(--mp));
  padding:calc(22 * var(--mp)) calc(24 * var(--mp)) calc(20 * var(--mp))}

/* Узоры макета. Левый светлый уходит за край полосы контента, правый
   лежит под карточкой покупки. */
.pdp-deco{position:absolute;pointer-events:none;user-select:none;z-index:0;
  /* Общее правило img{max-width:100%} сжимало узор до ширины колонки. */
  max-width:none}
.pdp-deco-l{left:calc(-287 * var(--mp));top:calc(53 * var(--mp));width:calc(1051 * var(--mp))}
.pdp-deco-r{left:calc(915 * var(--mp));top:calc(99 * var(--mp));width:calc(627 * var(--mp))}
/* Узор лежит под содержимым, поэтому колонкам нужен свой слой.
   Карточке покупки position не трогаем — она липкая при скролле. */
.pdp-grid > .pdp-info,
.pdp-grid > .pdp-photo{position:relative;z-index:1}
.pdp-grid > .pdp-buy{z-index:1}
@media(max-width:1099px){.pdp-deco{display:none}}

/* ---------- Frame 467: правки после первого показа ---------- */

/* Длинное название не должно заезжать под фото. Слово вроде
   «(АНАЭРОБНАЯ)» шире колонки, поэтому и переносим по буквам. */
.sc2026-page .pdp-name{overflow-wrap:break-word;hyphens:manual;text-wrap:balance}

@media(min-width:1100px){
  /* Вкладки и панели переехали внутрь сетки: правая колонка тянется
     до конца страницы, и карточка покупки едет со скроллом до самого
     низа, а не останавливается под фото. */
  .pdp-grid{grid-template-areas:
      "info  photo buy"
      "tabs  tabs  buy"
      "below below buy";
    grid-template-rows:auto auto 1fr}
  .pdp-grid > .pdp-info{grid-area:info}
  .pdp-grid > .pdp-photo{grid-area:photo}
  .pdp-grid > .pdp-buy{grid-area:buy;margin-left:calc(24 * var(--mp));
    margin-top:calc(96 * var(--mp))}
  .pdp-grid > .pdp-tabs{grid-area:tabs}
  .pdp-grid > .pdp-below{grid-area:below}
}

/* Узор — под всем содержимым. Он выходит за низ сетки и раньше ложился
   поверх вкладок и характеристик, потому что позиционированный элемент
   рисуется выше обычного потока. */
.pdp-grid > .pdp-info,
.pdp-grid > .pdp-photo,
.pdp-grid > .pdp-tabs,
.pdp-grid > .pdp-below{position:relative;z-index:1}

/* Края узоров растворяем, чтобы страница не обрывалась ровной линией.
   Одна маска на элемент — списки масок с mask-composite ведут себя
   по-разному в браузерах, а нам нужно предсказуемо. */
.pdp-deco{-webkit-mask-image:linear-gradient(to bottom,#000 55%,transparent 100%);
          mask-image:linear-gradient(to bottom,#000 55%,transparent 100%)}

/* Правый узор в макете уходит за кадр, и обрез по краю экрана даёт
   ровную вертикаль. Растворяем её белой полосой в цвет страницы. */
.pdp::before,.pdp::after{content:'';position:absolute;top:0;bottom:0;width:calc(140 * var(--u));
  pointer-events:none;z-index:0}
.pdp::before{left:0;background:linear-gradient(to left,transparent,#fff 78%)}
.pdp::after{right:0;background:linear-gradient(to right,transparent,#fff 78%)}
.pdp{position:relative}

/* Плитка способа приготовления: светлый квадрат — фон под рисунком,
   а не поверх. Рисунок кладём отдельным слоем выше. */
.sc2026-page .pdp-brew .ic{position:relative;isolation:isolate}
.sc2026-page .pdp-brew .ic img{position:relative;z-index:1}

/* ---------- «Где пить кофе»: раскладка из прототипа map.html ---------- */
.sc-map .lead{font-size:calc(16 * var(--u));line-height:1.6;color:var(--ink-soft);max-width:calc(720 * var(--u))}

.sc-map .city-tabs{display:flex;flex-wrap:wrap;gap:calc(10 * var(--u));margin:calc(24 * var(--u)) 0 calc(22 * var(--u))}
.sc-map .city-tab{font-size:calc(14 * var(--u));font-weight:800;padding:calc(12 * var(--u)) calc(22 * var(--u));
  border-radius:999px;background:var(--bg-soft);color:var(--ink);border:0;cursor:pointer;
  transition:background .2s,color .2s;display:inline-flex;align-items:center;gap:calc(8 * var(--u))}
.sc-map .city-tab:hover{background:var(--green-pale);color:var(--green-deep-2)}
.sc-map .city-tab.on{background:var(--green-brand);color:#fff}
.sc-map .city-tab i{font-style:normal;opacity:.6;font-weight:700}
.sc-map .city-tab.on i{opacity:.85}

.sc-map .map-grid{display:grid;gap:calc(20 * var(--u));align-items:start}
@media(min-width:1000px){.sc-map .map-grid{grid-template-columns:calc(400 * var(--u)) 1fr;gap:calc(26 * var(--u))}}

.sc-map .spots{display:flex;flex-direction:column;gap:calc(12 * var(--u))}
.sc-map .spot{background:#fff;border:1px solid var(--tile-line);border-radius:calc(24 * var(--u));
  padding:calc(18 * var(--u));cursor:pointer;transition:box-shadow .25s,transform .25s}
.sc-map .spot:hover{box-shadow:0 12px 30px rgba(20,40,20,.12);transform:translateY(-2px)}
.sc-map .spot.on{box-shadow:0 0 0 calc(3 * var(--u)) rgba(139,38,40,.14)}
.sc-map .spot[hidden]{display:none}
.sc-map .spot-top{display:flex;align-items:flex-start;justify-content:space-between;gap:calc(12 * var(--u))}
.sc-map .spot h3{font-size:calc(16.5 * var(--u));font-weight:800;line-height:1.25;margin:0}
.sc-map .spot .kind{font-size:calc(11 * var(--u));font-weight:800;text-transform:uppercase;letter-spacing:.04em;
  padding:calc(5 * var(--u)) calc(10 * var(--u));border-radius:999px;white-space:nowrap;flex:none}
.sc-map .k-show{background:var(--green-pale);color:var(--green-deep-2)}
.sc-map .k-partner{background:#d6f4f8;color:#00697a}
.sc-map .spot .addr{font-size:calc(14 * var(--u));color:var(--ink-soft);margin-top:calc(6 * var(--u))}
.sc-map .spot .row{display:flex;flex-wrap:wrap;gap:calc(14 * var(--u));margin-top:calc(12 * var(--u));
  font-size:calc(13 * var(--u));color:var(--ink-soft)}
.sc-map .spot .row span{display:inline-flex;align-items:center;gap:calc(6 * var(--u))}
.sc-map .spot .acts{display:flex;flex-wrap:wrap;gap:calc(10 * var(--u));margin-top:calc(14 * var(--u))}
.sc-map .spot .acts a{font-size:calc(13 * var(--u));font-weight:800;padding:calc(10 * var(--u)) calc(16 * var(--u));
  border-radius:999px;display:inline-flex;align-items:center;gap:calc(7 * var(--u));
  text-decoration:none;transition:background .2s}
.sc-map .spot .acts .a-map{background:var(--green-brand);color:#fff}
.sc-map .spot .acts .a-map:hover{background:var(--green-deep-2)}
.sc-map .spot .acts .a-tel{background:var(--bg-soft);color:var(--green-deep-2)}
.sc-map .spot .acts .a-tel:hover{background:var(--green-pale)}

.sc-map .map-box{position:relative;border-radius:calc(36 * var(--u));overflow:hidden;
  background:var(--green-pale);min-height:calc(420 * var(--u));display:flex;align-items:center;
  justify-content:center;border:1px solid var(--tile-line)}
@media(min-width:1000px){.sc-map .map-box{min-height:calc(600 * var(--u));position:sticky;top:calc(96 * var(--u))}}
.sc-map .map-box .pat{position:absolute;inset:0;opacity:.7;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='60' viewBox='0 0 60 60'%3E%3Cpath d='M0 45 L15 25 L30 45 L45 25 L60 45' fill='none' stroke='%23205b28' stroke-opacity='.10' stroke-width='3.5'/%3E%3C/svg%3E")}
.sc-map .map-note{position:relative;text-align:center;padding:calc(30 * var(--u));max-width:calc(420 * var(--u))}
.sc-map .map-note .pin{width:calc(64 * var(--u));height:calc(64 * var(--u));border-radius:50%;
  background:var(--green-brand);color:#fff;display:flex;align-items:center;justify-content:center;
  margin:0 auto calc(16 * var(--u));box-shadow:0 8px 22px rgba(32,91,40,.28)}
.sc-map .map-note b{display:block;font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(19 * var(--u));color:var(--green-deep-2);margin-bottom:calc(8 * var(--u));line-height:1.25}
.sc-map .map-note p{font-size:calc(14 * var(--u));color:var(--ink-soft);line-height:1.55}
.sc-map .map-go{display:inline-flex;margin-top:calc(18 * var(--u));color:#fff;text-decoration:none}

.sc-map .partner{margin-top:calc(40 * var(--u));background:var(--green-deep);color:#fff;
  border-radius:calc(36 * var(--u));padding:calc(32 * var(--u)) calc(26 * var(--u));
  display:grid;gap:calc(18 * var(--u))}
@media(min-width:800px){.sc-map .partner{grid-template-columns:1.4fr auto;align-items:center;
  padding:calc(40 * var(--u)) calc(44 * var(--u))}}
.sc-map .partner h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(26 * var(--u));margin:0 0 calc(10 * var(--u));color:#fff}
.sc-map .partner p{font-size:calc(15 * var(--u));line-height:1.55;opacity:.9;margin:0}
.sc-map .partner .pbtn{white-space:nowrap;text-decoration:none;color:#fff}

/* ---------- «О компании» ----------
   Фотографий у страницы всего две, поэтому она держится не фотобанком,
   а крупной конденсед-типографикой, цифрами, паттернами и цветными
   плоскостями. Кнопки — рисованными SVG-формами, как везде на сайте. */

.about{padding-bottom:calc(40 * var(--u))}
.about .page-head{display:none}          /* заголовок страницы живёт в первом экране */

/* ---- кнопки страницы ---- */
.about .ab-btn{display:inline-flex;align-items:center;justify-content:center;
  background:url(img/hd-shape-btn.svg) no-repeat center/100% 100%;border:0;border-radius:0;
  min-height:calc(56 * var(--u));padding:0 calc(30 * var(--u));
  font-family:var(--font);font-weight:700;font-size:calc(16 * var(--u));
  color:#fff;text-decoration:none;white-space:nowrap;transition:filter .18s,transform .18s}
.about .ab-btn:hover{filter:brightness(1.08);transform:translateY(-2px);color:#fff}
.about .ab-btn-line{background:none;border:1.5px solid var(--green-brand);
  border-radius:calc(16 * var(--u));color:var(--green-deep-2)}
.about .ab-btn-line:hover{background:var(--green-pale);filter:none;color:var(--green-deep-2)}
.about .ab-btn-white{background:#fff;color:var(--cart);
  -webkit-mask:url(img/btn-cart.svg) no-repeat center/100% 100%;
          mask:url(img/btn-cart.svg) no-repeat center/100% 100%}
.about .ab-btn-white:hover{background:#fff;color:var(--cart);filter:none;opacity:.9}
.about .ab-btn-ghost{background:none;border:1.5px solid rgba(255,255,255,.55);
  border-radius:calc(16 * var(--u));color:#fff}
.about .ab-btn-ghost:hover{background:rgba(255,255,255,.12);filter:none}

/* ссылка-действие внутри блоков */
.about .ab-link{display:inline-flex;align-items:center;gap:calc(8 * var(--u));
  font-weight:700;font-size:calc(15 * var(--u));color:var(--green-brand);text-decoration:none;
  border-bottom:1px solid rgba(0,114,59,.3);padding-bottom:calc(2 * var(--u));
  transition:color .18s,border-color .18s}
.about .ab-link:hover{color:var(--green-deep-2);border-color:var(--green-deep-2)}
.about .ab-link::after{content:'→';font-size:calc(15 * var(--u));line-height:1}

/* подчёркивание фирменным штрихом */
.about .ab-uline{color:var(--ink);text-decoration:none;font-weight:700;
  background:url(img/underline-catalog.svg) no-repeat 0 100%/100% calc(7 * var(--u));
  padding-bottom:calc(3 * var(--u))}
.about .ab-uline:hover{color:var(--green-deep-2)}

/* ---- первый экран ---- */
.about .ab-hero{display:grid;gap:calc(30 * var(--u));align-items:center;
  padding:calc(20 * var(--u)) 0 calc(34 * var(--u))}
@media(min-width:900px){.about .ab-hero{grid-template-columns:1fr calc(520 * var(--u));gap:calc(56 * var(--u))}}
.about .ab-stamp{display:inline-block;font-family:var(--font);font-weight:700;text-transform:uppercase;
  font-size:calc(12 * var(--u));letter-spacing:.2em;color:var(--green-brand);
  border:1.5px solid var(--green-pale);border-radius:999px;
  padding:calc(8 * var(--u)) calc(16 * var(--u));margin-bottom:calc(20 * var(--u))}
.about .ab-hero h1{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:clamp(calc(38 * var(--u)),6vw,calc(76 * var(--u)));line-height:1.02;
  letter-spacing:-.015em;color:var(--ink);margin:0 0 calc(22 * var(--u))}
.about .ab-hero h1 em{font-style:normal;color:var(--green-brand)}
.about .lead{font-size:calc(18 * var(--u));line-height:1.6;color:var(--ink);margin:0 0 calc(12 * var(--u));
  max-width:calc(560 * var(--u))}
.about .lead-2{font-size:calc(16 * var(--u));line-height:1.6;color:var(--ink-soft);margin:0;
  max-width:calc(560 * var(--u))}
.about .ab-acts{display:flex;flex-wrap:wrap;gap:calc(12 * var(--u));margin-top:calc(26 * var(--u))}

.about .ab-hero-img{margin:0}
.about .ab-hero-img img{display:block;width:100%;height:auto;
  border-radius:calc(32 * var(--u));border:1px solid var(--tile-line);box-shadow:var(--tile-shadow)}
.about figcaption{font-size:calc(13 * var(--u));line-height:1.45;color:var(--ink-soft);
  margin-top:calc(12 * var(--u))}

/* ---- лента цифр ---- */
.about .ab-figures{display:grid;grid-template-columns:1fr 1fr;gap:calc(24 * var(--u));
  padding:calc(30 * var(--u)) 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
@media(min-width:900px){.about .ab-figures{grid-template-columns:repeat(4,1fr);gap:calc(30 * var(--u))}}
.about .ab-figures div{display:flex;flex-direction:column}
.about .ab-figures b{font-family:var(--font);font-weight:900;font-size:calc(34 * var(--u));
  line-height:1.05;color:var(--green-deep-2)}
.about .ab-figures span{font-size:calc(13.5 * var(--u));line-height:1.45;color:var(--ink-soft);
  margin-top:calc(10 * var(--u));padding-top:calc(10 * var(--u));
  border-top:1px solid var(--line);max-width:calc(230 * var(--u))}

/* ---- общий заголовок раздела ---- */
.about h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:clamp(calc(26 * var(--u)),3.6vw,calc(44 * var(--u)));line-height:1.06;
  letter-spacing:-.01em;color:var(--ink);margin:0 0 calc(18 * var(--u))}
.about .ab-sub{font-size:calc(16.5 * var(--u));line-height:1.6;color:var(--ink-soft);
  margin:0 0 calc(26 * var(--u));max-width:calc(720 * var(--u))}

/* ---- с чего начать ---- */
.about .ab-start{margin-top:calc(56 * var(--u));background:var(--bg-soft);
  border-radius:calc(36 * var(--u));padding:calc(44 * var(--u)) calc(30 * var(--u));
  display:grid;gap:calc(24 * var(--u));overflow:hidden}
/* Раньше блок на ≥960 стоял без нижнего отступа, а колонка текста
   компенсировала его своим padding-bottom: вырезка человека «стояла»
   на нижнем крае. Человека 16.09.2026 заменили пачкой в кольце — она
   висит в воздухе, поэтому отступы у блока снова симметричные, а
   колонки выровнены по центру. */
@media(min-width:960px){.about .ab-start{grid-template-columns:minmax(0,1fr) calc(320 * var(--u));
  gap:calc(40 * var(--u));padding:calc(56 * var(--u)) calc(52 * var(--u));align-items:center}}
.about .ab-start-txt{padding-bottom:calc(12 * var(--u))}
@media(min-width:960px){.about .ab-start-txt{padding-bottom:0}}
.about .ab-start p{font-size:calc(16.5 * var(--u));line-height:1.65;color:var(--ink);
  margin:0 0 calc(14 * var(--u));max-width:calc(640 * var(--u))}
.about .ab-start .ab-btn{margin-top:calc(8 * var(--u))}
.about .ab-note{margin-top:calc(24 * var(--u));padding-top:calc(20 * var(--u));
  border-top:1px solid var(--line);font-size:calc(14.5 * var(--u));line-height:1.6;
  color:var(--ink-soft)}
.about .ab-note a{color:var(--green-brand);font-weight:700}
/* В тексте заказчика (16.09.2026) у примечания появились подзаголовок
   «Помощь с приготовлением» и отдельная строка с графиком ответов:
   примечание стало блоком из h3 и абзацев. Абзацы внутри мельче
   основных (.ab-start p выше задаёт 16,5), график — жирный, чтобы
   читался как справка, а не как продолжение фразы. */
.about .ab-note h3{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(16 * var(--u));line-height:1.2;color:var(--ink);margin:0 0 calc(8 * var(--u))}
.about .ab-note p{font-size:calc(14.5 * var(--u));line-height:1.6;color:var(--ink-soft);
  margin:0 0 calc(8 * var(--u));max-width:calc(640 * var(--u))}
.about .ab-note p:last-child{margin-bottom:0}
.about .ab-note .ab-note-hours{font-weight:700;color:var(--ink)}
/* Пачка в кольце вместо фотографии человека (заказчик 15.09.2026 —
   убрать человека из теста; на главной уже стоит эта пара, home.css
   .quiz-deco). Там кольцо и пачка посажены абсолютными координатами
   ряда, здесь колонка своя: кольцо занимает её целиком, пачка
   центрируется по кругу. Центр круга внутри файла 420×532 — точка
   (209,5; 287), то есть 49,9 % по ширине и 53,9 % по высоте; ширина
   пачки 226 из 420 — 53,8 %. Наклон и тень — как на главной. */
.about .ab-start-art{position:relative;display:none;align-self:center}
@media(min-width:960px){.about .ab-start-art{display:block}}
.about .ab-start-ring{display:block;width:100%;height:auto;max-width:none}
.about .ab-start-pack{position:absolute;display:block;left:49.9%;top:53.9%;width:53.8%;
  transform:translate(-50%,-50%) rotate(-7deg);
  filter:drop-shadow(0 calc(12 * var(--u)) calc(18 * var(--u)) rgba(26,26,26,.28))}
.about .ab-start-pack img{display:block;width:100%;height:auto;max-width:none}

/* ---- свежесть ---- */
.about .ab-fresh{margin-top:calc(64 * var(--u));display:grid;gap:calc(30 * var(--u));align-items:start}
@media(min-width:960px){.about .ab-fresh{grid-template-columns:calc(460 * var(--u)) 1fr;gap:calc(52 * var(--u))}}
.about .ab-fresh-img{margin:0}
.about .ab-fresh-img img{display:block;width:100%;height:auto;
  border-radius:calc(32 * var(--u));border:1px solid var(--tile-line);box-shadow:var(--tile-shadow)}
@media(min-width:960px){.about .ab-fresh-img{position:sticky;top:calc(90 * var(--u))}}
.about .ab-fresh-txt p{font-size:calc(16.5 * var(--u));line-height:1.65;color:var(--ink);
  margin:0 0 calc(16 * var(--u))}
.about .ab-big{font-family:var(--font);font-weight:700;
  font-size:clamp(calc(22 * var(--u)),2.6vw,calc(30 * var(--u)))!important;line-height:1.25!important;
  color:var(--green-deep-2);padding:calc(20 * var(--u)) 0;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:calc(22 * var(--u)) 0!important}
.about .ab-fresh-txt .ab-link{margin-top:calc(10 * var(--u))}

/* ---- как читать пачку ---- */
.about .ab-pack{margin-top:calc(70 * var(--u));background:var(--green-deep);color:#fff;
  border-radius:calc(36 * var(--u));padding:calc(44 * var(--u)) calc(30 * var(--u));
  position:relative;overflow:hidden}
@media(min-width:960px){.about .ab-pack{padding:calc(56 * var(--u))}}
.about .ab-pack::before{content:'';position:absolute;right:calc(-40 * var(--u));top:calc(-30 * var(--u));
  width:calc(320 * var(--u));height:calc(272 * var(--u));
  background:url(img/banner-pattern-v.svg) no-repeat center/contain;opacity:.10;pointer-events:none}
.about .ab-pack > *{position:relative}
.about .ab-pack h2{color:#fff;max-width:calc(620 * var(--u))}
.about .ab-pack-head p{font-size:calc(16.5 * var(--u));line-height:1.6;color:rgba(255,255,255,.86);
  margin:0;max-width:calc(680 * var(--u))}
.about .ab-pack-body{display:grid;gap:calc(30 * var(--u));margin-top:calc(34 * var(--u))}
@media(min-width:960px){.about .ab-pack-body{grid-template-columns:minmax(0,1fr) calc(300 * var(--u));
  gap:calc(48 * var(--u));align-items:start}}
.about .ab-pack h3{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(20 * var(--u));color:#fff;margin:0 0 calc(8 * var(--u))}
.about .ab-scales-note{font-size:calc(14.5 * var(--u));line-height:1.55;color:rgba(255,255,255,.75);
  margin:0 0 calc(22 * var(--u))}
.about .ab-scale-list{list-style:none;margin:0;padding:0;display:grid;gap:calc(18 * var(--u))}
@media(min-width:700px){.about .ab-scale-list{grid-template-columns:1fr 1fr;gap:calc(22 * var(--u)) calc(34 * var(--u))}}
.about .ab-scale-row{display:flex;align-items:center;gap:calc(14 * var(--u));
  margin-bottom:calc(7 * var(--u))}
.about .ab-scale-nm{font-family:var(--font);font-weight:700;font-size:calc(16 * var(--u));
  color:#fff;flex:none;min-width:calc(96 * var(--u))}
.about .ab-scale-bars{display:inline-flex;gap:calc(5 * var(--u))}
.about .ab-scale-bars i{width:calc(16 * var(--u));height:calc(8 * var(--u));border-radius:999px;
  background:rgba(255,255,255,.22)}
.about .ab-scale-bars i.on{background:var(--yellow-2,#fdb913)}
.about .ab-scale-list p{font-size:calc(14 * var(--u));line-height:1.55;color:rgba(255,255,255,.78);margin:0}
/* Рекомендация под шкалами (текст заказчика 16.09.2026). Раньше здесь
   стояла короткая фраза-выкрик (.ab-pack-kick, 19 жирным); совет из двух
   предложений тем же кеглем давил, поэтому он набран обычным текстом с
   жёлтой чертой слева — тем же цветом, что закрашенные деления шкал. */
.about .ab-pack-tip{font-size:calc(16 * var(--u));line-height:1.6;color:rgba(255,255,255,.9);
  border-left:3px solid var(--yellow-2,#fdb913);padding-left:calc(16 * var(--u));
  max-width:calc(600 * var(--u));margin:calc(28 * var(--u)) 0 calc(20 * var(--u))}
.about .ab-pack .ab-link{color:#fff;border-color:rgba(255,255,255,.4)}
.about .ab-pack .ab-link:hover{color:#fff;border-color:#fff}

.about .ab-pack-aside{display:flex;flex-direction:column;gap:calc(20 * var(--u));
  background:rgba(255,255,255,.07);border-radius:calc(28 * var(--u));padding:calc(26 * var(--u))}
.about .ab-pack-quote{font-family:var(--font);font-weight:700;font-size:calc(17 * var(--u));
  line-height:1.35;color:#fff;margin:0}
.about .ab-pack-aside img{display:block;width:100%;max-width:calc(200 * var(--u));height:auto;
  margin:0 auto}

/* ---- направления ---- */
.about .ab-lines{margin-top:calc(70 * var(--u))}
.about .ab-grid{display:grid;gap:calc(16 * var(--u))}
@media(min-width:700px){.about .ab-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1100px){.about .ab-grid{grid-template-columns:repeat(3,1fr)}}
.about .ab-card{background:#fff;border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  border-radius:calc(28 * var(--u));padding:calc(26 * var(--u));
  display:flex;flex-direction:column;transition:box-shadow .25s,transform .25s}
.about .ab-card:hover{box-shadow:var(--tile-shadow-hover);transform:translateY(-3px)}
.about .ab-ico{width:calc(54 * var(--u));height:calc(54 * var(--u));border-radius:calc(18 * var(--u));
  background:var(--green-pale);color:var(--green-deep-2);
  display:flex;align-items:center;justify-content:center;margin-bottom:calc(18 * var(--u))}
.about .ab-card h3{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(18 * var(--u));line-height:1.2;color:var(--ink);margin:0 0 calc(10 * var(--u))}
.about .ab-card p{font-size:calc(15 * var(--u));line-height:1.55;color:var(--ink-soft);
  margin:0 0 calc(18 * var(--u));flex:1}
.about .ab-card .ab-link{align-self:flex-start}

/* ---- города ---- */
.about .ab-cities{margin-top:calc(70 * var(--u))}
.about .ab-city-grid{display:grid;gap:calc(16 * var(--u))}
@media(min-width:760px){.about .ab-city-grid{grid-template-columns:repeat(3,1fr)}}
.about .ab-city{display:flex;flex-direction:column;gap:calc(6 * var(--u));
  background:#fff;border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  border-radius:calc(24 * var(--u));padding:calc(24 * var(--u));text-decoration:none;
  transition:box-shadow .25s,transform .25s,border-color .25s}
.about .ab-city:hover{box-shadow:var(--tile-shadow-hover);transform:translateY(-3px);
  border-color:var(--green-pale)}
.about .ab-city b{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(22 * var(--u));color:var(--ink)}
.about .ab-city-kind{font-weight:700;font-size:calc(13 * var(--u));color:var(--green-brand);
  text-transform:uppercase;letter-spacing:.08em}
.about .ab-city-addr{font-size:calc(14.5 * var(--u));line-height:1.5;color:var(--ink-soft);
  margin-top:calc(4 * var(--u))}
/* «Адреса и маршруты →» в тексте заказчика — отдельная ссылка после
   заключения, а не слово внутри абзаца. */
.about .ab-cities .ab-link{margin-top:calc(14 * var(--u))}

/* ---- знак ---- */
.about .ab-sign{margin-top:calc(70 * var(--u));background:var(--green-deep);color:#fff;
  border-radius:calc(36 * var(--u));padding:calc(44 * var(--u)) calc(30 * var(--u));
  display:grid;gap:calc(30 * var(--u));align-items:center}
@media(min-width:900px){.about .ab-sign{grid-template-columns:calc(300 * var(--u)) 1fr;
  gap:calc(52 * var(--u));padding:calc(56 * var(--u))}}
.about .ab-sign-logo{display:flex;align-items:center;justify-content:center;
  background:#fff;border-radius:calc(28 * var(--u));padding:calc(30 * var(--u))}
.about .ab-sign-logo img{display:block;width:100%;max-width:calc(220 * var(--u));height:auto}
.about .ab-sign h2{color:#fff}
.about .ab-sign p{font-size:calc(16 * var(--u));line-height:1.65;color:rgba(255,255,255,.86);
  margin:0 0 calc(12 * var(--u));max-width:calc(680 * var(--u))}
.about .ab-sign p b{color:#fff}

/* ---- вопросы ---- */
.about .ab-faq{margin-top:calc(70 * var(--u))}
.about .ab-faq-list{display:grid;gap:calc(12 * var(--u))}
.about .ab-faq details{background:#fff;border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  border-radius:calc(24 * var(--u));padding:calc(4 * var(--u)) calc(26 * var(--u))}
.about .ab-faq summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  gap:calc(16 * var(--u));padding:calc(20 * var(--u)) 0}
.about .ab-faq summary::-webkit-details-marker{display:none}
/* Вопросы — прописными, как остальные заголовки страницы: в файле
   заказчика (16.09.2026) они набраны так же, как заголовки карточек. */
.about .ab-faq summary h3{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(18 * var(--u));line-height:1.3;color:var(--ink);margin:0;flex:1}
.about .ab-faq summary::after{content:'';flex:none;width:calc(14 * var(--u));height:calc(14 * var(--u));
  border-right:2px solid var(--green-brand);border-bottom:2px solid var(--green-brand);
  transform:rotate(45deg);margin-right:calc(4 * var(--u));transition:transform .2s ease}
.about .ab-faq details[open] summary::after{transform:rotate(-135deg)}
/* Ответ может состоять из нескольких абзацев (реквизиты и график —
   двумя), поэтому нижний отступ висит на обёртке .ab-faq-a, а не на p. */
.about .ab-faq .ab-faq-a{padding:0 0 calc(24 * var(--u));max-width:calc(760 * var(--u))}
.about .ab-faq details p{font-size:calc(15.5 * var(--u));line-height:1.65;color:var(--ink-soft);
  margin:0 0 calc(10 * var(--u));padding:0}
.about .ab-faq details p:last-child{margin-bottom:0}
.about .ab-faq details p a{color:var(--green-brand);font-weight:700}

/* ---- дальше ---- */
.about .ab-cta{margin-top:calc(70 * var(--u));background:var(--cart);color:#fff;
  border-radius:calc(36 * var(--u));padding:calc(40 * var(--u)) calc(30 * var(--u));
  display:grid;gap:calc(24 * var(--u));position:relative;overflow:hidden}
@media(min-width:900px){.about .ab-cta{grid-template-columns:1.5fr auto;align-items:center;
  padding:calc(50 * var(--u)) calc(52 * var(--u))}}
.about .ab-cta::before{content:'';position:absolute;left:calc(-30 * var(--u));bottom:calc(-60 * var(--u));
  width:calc(240 * var(--u));height:calc(204 * var(--u));
  background:url(img/banner-pattern-v.svg) no-repeat center/contain;opacity:.12;pointer-events:none}
.about .ab-cta > *{position:relative}
.about .ab-cta-kick{display:block;font-family:var(--font);font-weight:700;text-transform:uppercase;
  font-size:calc(12 * var(--u));letter-spacing:.2em;color:rgba(255,255,255,.7);
  margin-bottom:calc(10 * var(--u))}
.about .ab-cta h2{color:#fff;margin:0 0 calc(12 * var(--u))}
.about .ab-cta p{font-size:calc(16 * var(--u));line-height:1.6;color:rgba(255,255,255,.9);margin:0;
  max-width:calc(640 * var(--u))}
.about .ab-cta-acts{display:flex;flex-wrap:wrap;gap:calc(12 * var(--u))}
.about .ab-cta-acts .ab-btn-white{color:var(--cart)}

/* ---- реквизиты строкой ---- */
.about .ab-legal{margin-top:calc(34 * var(--u));font-size:calc(13 * var(--u));line-height:1.7;
  color:var(--ink-soft)}
.about .ab-legal a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid var(--line)}
.about .ab-legal a:hover{color:var(--green-brand);border-color:var(--green-brand)}

/* ---- телефон ---- */
@media(max-width:599px){
  .about .ab-acts .ab-btn,
  .about .ab-cta-acts .ab-btn{width:100%}
  .about .ab-start,.about .ab-pack,.about .ab-sign,.about .ab-cta{
    padding-left:calc(22 * var(--u));padding-right:calc(22 * var(--u));
    border-radius:calc(28 * var(--u))}
  .about .ab-scale-nm{min-width:calc(84 * var(--u))}
}

/* ==========================================================================
   Frame 467: кнопка и поля карточки покупки — рисованные фигуры.

   В макете у кнопки «В корзину», счётчика, поля помола, чипов веса и
   плашки скидки одна и та же рисованная форма со скосом. Раньше здесь
   стояли обычные пилюли — это и было расхождение.

   Фигуры вынуты из Frame 467 (design/figma/shapes), у каждой стоит
   preserveAspectRatio="none", поэтому они тянутся под размер элемента,
   а обводка не плывёт за счёт vector-effect="non-scaling-stroke".
   ========================================================================== */

/* кнопка «В корзину» — 171×51 в макете */
.sc2026-page .pdp-buy .buy-cta,
.sc2026-page .pdp-buy .buy-cta:hover{
  background:url(img/pdp-btn-buy.svg) no-repeat center/100% 100%;
  border-radius:0;
  min-width:calc(171 * var(--mp));min-height:calc(51 * var(--mp));
  padding:0 calc(18 * var(--mp));
  /* Не меньше 15px (16.09.2026): на 1024–1366 --mp на пороге, и надпись
     была 13,1–14,7px — мельче, чем на телефоне (15). На 1440 и шире
     порог не срабатывает. Надпись не переносится (nowrap), кнопка не
     шире ряда. */
  font-size:max(15px, calc(16 * var(--mp)));gap:calc(10 * var(--mp))}
.sc2026-page .pdp-buy .buy-cta:hover{filter:brightness(1.08)}

/* счётчик количества — 82×49.5 */
.sc2026-page .pdp-buy .buy-qty{
  background:url(img/pdp-field-qty.svg) no-repeat center/100% 100%;
  border:0;border-radius:0;
  min-width:calc(82 * var(--mp));height:calc(50 * var(--mp));
  padding:0 calc(8 * var(--mp));gap:0;justify-content:space-between}
.sc2026-page .pdp-buy .buy-qty .quantity-input{width:calc(26 * var(--mp));font-size:calc(18 * var(--mp))}
.sc2026-page .pdp-buy .buy-qty button{width:calc(22 * var(--mp));height:calc(22 * var(--mp));
  font-size:calc(18 * var(--mp));color:var(--green-deep-2)}

/* поле помола — 260×35.5 */
.sc2026-page .pdp-buy .buy-select select{
  background:url(img/pdp-field-select.svg) no-repeat center/100% 100%;
  border:0;border-radius:0;height:calc(36 * var(--mp));
  padding:0 calc(34 * var(--mp)) 0 calc(18 * var(--mp));
  /* кегль был 14, стало 16 (15.09.2026, см. .pdp-sub); фигура поля та же.
     Не меньше 15px: на 1024–1216 --mp на пороге (13,1px). Самый длинный
     вариант «капельная кофеварка» при 15px на 1100 входит с запасом 3,9px. */
  font-size:max(15px, calc(16 * var(--mp)));line-height:calc(36 * var(--mp))}
.sc2026-page .pdp-buy .buy-select select:focus{outline:none;filter:brightness(.97)}

/* чипы веса — 89.5×35.5 в покое и 91×37 у выбранного */
.sc2026-page .pdp-buy .buy-chips button{
  background:url(img/pdp-chip-off.svg) no-repeat center/100% 100%;
  border:0;border-radius:0;color:var(--green-deep-2);
  min-width:calc(89 * var(--mp));height:calc(36 * var(--mp));
  /* кегль был 14, стало 16 (15.09.2026, см. .pdp-sub): «200 г» занимает
     около 40 из 89 — фигура чипа не растягивается. Не меньше 15px, как на
     телефоне: на 1024–1216 чип 73 × 29,5, «200 г» в него входит. */
  padding:0 calc(14 * var(--mp));font-size:max(15px, calc(16 * var(--mp)));font-weight:700}
.sc2026-page .pdp-buy .buy-chips button.on{
  background:url(img/pdp-chip-on.svg) no-repeat center/100% 100%;color:#1D1D1B}

/* плашка скидки «−27%» — 89.5×35.5 */
.sc2026-page .pdp-buy .buy-off{
  background:url(img/pdp-badge-off.svg) no-repeat center/100% 100%;
  border-radius:0;color:#fff;min-width:calc(89 * var(--mp));height:calc(36 * var(--mp));
  display:inline-flex;align-items:center;justify-content:center;padding:0 calc(12 * var(--mp))}

/* Плашка «−16%» справа от цены, в своей обёртке .buy-deal. Узел печатает
   шаблон страницы товара, показывает и прячет packs.js атрибутом hidden —
   а у обёртки свой display, поэтому hidden повторяем правилом, иначе «−0%»
   висело бы и у фасовки без скидки. Строки «Выгода N ₸» под плашкой нет:
   заказчик 15.09.2026 решил ставить у килограмма постоянные 16 %, и
   настоящая сумма у части сортов с ними бы не сходилась. */
.sc2026-page .pdp-buy .buy-deal{display:flex;flex:none}
/* Зачёркнутая цена встаёт над ценой третьей строкой (цена, «за 1 кг»), и
   с межстрочным по умолчанию (≈1,3) столбик упирался в белую панель: на
   1440 зазор 1,3 px, на телефоне (--u на пороге .70) шапка вырастала на
   пиксель. 1,15 возвращает 2–3 px воздуха, кегль тот же. */
.sc2026-page .pdp-buy .buy-old{line-height:1.15}
.sc2026-page .pdp-buy .buy-deal[hidden],
.sc2026-page .pdp-buy .buy-old[hidden]{display:none}

/* ---------- «В корзину»: состояние и окно подтверждения ----------
   Мигающая надпись «Добавлено» ничего не сообщала: через секунду кнопка
   возвращалась в исходный вид. Теперь она остаётся зелёной «В корзине»
   и ведёт в корзину — состояние видно и после перезагрузки страницы,
   потому что при отрисовке проверяется, лежит ли предложение в корзине. */
.add-to-cart-btn{transition:opacity .18s,filter .18s}
.add-to-cart-btn.is-adding{opacity:.6;pointer-events:none}

.pcard .pbtn.add-to-cart-btn.is-in-cart,
.pcard .pbtn.add-to-cart-btn.is-in-cart:hover{
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand))}
.sc2026-page .pdp-buy .buy-cta.is-in-cart,
.sc2026-page .pdp-buy .buy-cta.is-in-cart:hover{
  background:url(img/pdp-btn-buy-in.svg?v=1) no-repeat center/100% 100%}
.add-to-cart-btn.is-in-cart:hover{filter:brightness(1.08)}

/* окно подтверждения */
.sc-added{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .22s ease}
.sc-added.on{opacity:1}
.sc-added-scrim{position:absolute;inset:0;background:rgba(20,40,20,.42)}
.sc-added-box{position:relative;z-index:1;width:min(calc(560 * var(--u)),calc(100vw - 32px));
  background:#fff;border:1px solid var(--tile-line);border-radius:calc(28 * var(--u));
  padding:calc(22 * var(--u)) calc(24 * var(--u));box-shadow:0 24px 60px rgba(20,40,20,.24);
  transform:translateY(10px) scale(.98);transition:transform .22s var(--ease)}
.sc-added.on .sc-added-box{transform:none}
.sc-added-head{display:flex;align-items:center;gap:calc(12 * var(--u))}
.sc-added-ok{flex:none;width:calc(34 * var(--u));height:calc(34 * var(--u));border-radius:50%;
  background:var(--green-pale);color:var(--green-brand);display:flex;align-items:center;justify-content:center}
.sc-added-head b{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(18 * var(--u));color:var(--green-deep-2);flex:1}
.sc-added-x{background:none;color:var(--ink-soft);padding:calc(4 * var(--u));cursor:pointer;
  transition:color .15s}
.sc-added-x:hover{color:var(--cart)}
.sc-added-item{display:flex;align-items:center;gap:calc(14 * var(--u));
  margin-top:calc(18 * var(--u));padding-top:calc(16 * var(--u));border-top:1.5px solid var(--line)}
.sc-added-ph{flex:none;width:calc(64 * var(--u));height:calc(64 * var(--u));border-radius:calc(16 * var(--u));
  background:var(--bg-soft);display:flex;align-items:center;justify-content:center;padding:calc(6 * var(--u))}
.sc-added-ph img{max-width:100%;max-height:100%;object-fit:contain;mix-blend-mode:multiply}
.sc-added-item > div{flex:1;min-width:0}
.sc-added-item b{display:block;font-weight:800;font-size:calc(15 * var(--u));line-height:1.3}
.sc-added-item span{display:block;font-size:calc(13 * var(--u));color:var(--ink-soft);margin-top:calc(4 * var(--u))}
.sc-added-price{flex:none;font-family:var(--font);font-weight:900;font-size:calc(18 * var(--u));
  color:var(--green-deep-2);white-space:nowrap}
.sc-added-sum{display:flex;align-items:center;justify-content:space-between;gap:calc(12 * var(--u));
  margin-top:calc(14 * var(--u));padding-top:calc(14 * var(--u));border-top:1.5px solid var(--line);
  font-size:calc(14 * var(--u));color:var(--ink-soft)}
.sc-added-sum b{font-family:var(--font);font-weight:900;font-size:calc(20 * var(--u));color:var(--green-deep-2)}
.sc-added-acts{display:flex;flex-wrap:wrap;gap:calc(12 * var(--u));margin-top:calc(20 * var(--u))}
.sc-added-acts .pbtn{flex:1;justify-content:center;text-decoration:none;color:#fff;min-width:calc(180 * var(--u))}
.sc-added-more{flex:1;min-width:calc(160 * var(--u));background:#fff;border:2px solid var(--green-deep-2);
  color:var(--green-deep-2);font-weight:700;font-size:calc(15 * var(--u));
  padding:calc(13 * var(--u)) calc(18 * var(--u));border-radius:calc(14 * var(--u));cursor:pointer;
  transition:background .18s}
.sc-added-more:hover{background:var(--green-pale)}
@media(prefers-reduced-motion:reduce){.sc-added,.sc-added-box{transition:none}}

/* ==========================================================================
   Оформление заказа — по образцу, который прислал заказчик (Ligastore),
   но в нашей форме и цвете.

   Компонент sale.order.ajax собирает разметку сам, на клиенте. Его DOM не
   трогаем: скин целиком на классах .bx-soa-*, а порядок блоков задан
   через order у флекс-колонки. Так оформление продолжает считать доставку
   и оплату штатно — переписывать логику заказа ради вида нельзя.
   ========================================================================== */
.sc-checkout .bx-soa-wrapper{margin:0}
.sc-checkout #bx-soa-order{display:grid;gap:calc(24 * var(--u));align-items:start}
@media(min-width:1000px){
  .sc-checkout #bx-soa-order{grid-template-columns:1fr calc(400 * var(--u));gap:calc(30 * var(--u))}
}
.sc-checkout #bx-soa-order > div{max-width:none;flex:none;width:auto;padding:0}

/* левая колонка — карточки шагов в порядке из образца:
   адрес → способ получения → товары → получатель → оплата */
.sc-checkout .bx-soa{display:flex;flex-direction:column;gap:calc(16 * var(--u))}
.sc-checkout #bx-soa-auth{display:none}          /* гостю вход не нужен */
.sc-checkout #bx-soa-region{order:1}
.sc-checkout #bx-soa-delivery{order:2}
.sc-checkout #bx-soa-pickup{order:3}
.sc-checkout #bx-soa-basket{order:4}
.sc-checkout #bx-soa-properties{order:5}
.sc-checkout #bx-soa-paysystem{order:6}

.sc-checkout .bx-soa-section{background:#fff;border:1px solid var(--tile-line);
  border-radius:calc(28 * var(--u));margin:0;overflow:hidden}
.sc-checkout .bx-soa-section.bx-step-completed{border-color:var(--green-pale)}
.sc-checkout .bx-soa-section-title-container{background:transparent;border:0;
  padding:calc(20 * var(--u)) calc(24 * var(--u)) 0}
.sc-checkout .bx-soa-section-title{font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(20 * var(--u));color:var(--green-deep-2);
  display:flex;align-items:center;gap:calc(12 * var(--u))}
.sc-checkout .bx-soa-section-title .bx-soa-section-title-count{flex:none;
  width:calc(30 * var(--u));height:calc(30 * var(--u));border-radius:50%;
  background:var(--green-brand);color:#fff;display:flex;align-items:center;
  justify-content:center;font-size:calc(15 * var(--u));font-weight:700}
.sc-checkout .bx-soa-section-content{padding:calc(16 * var(--u)) calc(24 * var(--u)) calc(22 * var(--u))}

/* карточки способов доставки и оплаты */
.sc-checkout .bx-soa-pp-item-container{display:grid;gap:calc(12 * var(--u))}
@media(min-width:700px){.sc-checkout .bx-soa-pp-item-container{grid-template-columns:repeat(2,1fr)}}
.sc-checkout .bx-soa-pp-company{background:#fff;border:2px solid var(--line);
  border-radius:calc(20 * var(--u));padding:calc(14 * var(--u)) calc(16 * var(--u));
  margin:0;min-height:calc(76 * var(--u));display:flex;align-items:center;
  gap:calc(12 * var(--u));cursor:pointer;transition:border-color .18s,box-shadow .18s}
.sc-checkout .bx-soa-pp-company:hover{border-color:var(--green-pale)}
.sc-checkout .bx-soa-pp-company.bx-selected{border-color:var(--green-brand);
  box-shadow:0 0 0 calc(3 * var(--u)) rgba(0,114,59,.12)}
.sc-checkout .bx-soa-pp-company-graf-container{flex:none;width:calc(46 * var(--u))}
.sc-checkout .bx-soa-pp-company-graf-container img{max-width:100%;height:auto}
.sc-checkout .bx-soa-pp-company-smalltitle{font-weight:700;font-size:calc(14 * var(--u));
  line-height:1.3;color:var(--ink)}
.sc-checkout .bx-soa-pp-delivery-cost,
.sc-checkout .bx-soa-pp-company .bx-soa-pp-price{font-family:var(--font);font-weight:900;
  font-size:calc(16 * var(--u));color:var(--green-deep-2);white-space:nowrap}
.sc-checkout .bx-soa-pp-company-selected{display:flex;align-items:center;gap:calc(12 * var(--u))}
.sc-checkout .bx-soa-pp-company-selected img{max-width:calc(46 * var(--u));height:auto}

/* поля формы — фирменной формой, как в карточке товара */
.sc-checkout .form-control,
.sc-checkout input[type=text],.sc-checkout input[type=tel],
.sc-checkout input[type=email],.sc-checkout textarea{
  background:url(img/pdp-field-select.svg) no-repeat center/100% 100%;
  border:0;border-radius:0;box-shadow:none;
  min-height:calc(46 * var(--u));padding:0 calc(18 * var(--u));
  font-family:var(--font-ui);font-size:calc(15 * var(--u));color:#000}
.sc-checkout textarea{padding:calc(12 * var(--u)) calc(18 * var(--u));min-height:calc(96 * var(--u))}
.sc-checkout select.form-control{
  background:url(img/pdp-field-select.svg) no-repeat center/100% 100%;
  appearance:none;-webkit-appearance:none;padding-right:calc(38 * var(--u))}
.sc-checkout .form-control:focus{outline:none;filter:brightness(.97)}
.sc-checkout .bx-soa-customer-label,
.sc-checkout label{font-weight:700;font-size:calc(13 * var(--u));color:var(--ink-soft);
  margin-bottom:calc(6 * var(--u))}

/* кнопки шагов и оформления */
.sc-checkout .btn-default,.sc-checkout .btn-primary,.sc-checkout .btn-lg,
.sc-checkout .bx-soa-editstep{
  background:url(img/pdp-btn-buy.svg) no-repeat center/100% 100%;
  border:0;border-radius:0;color:#fff;font-weight:700;font-size:calc(15 * var(--u));
  min-height:calc(48 * var(--u));padding:0 calc(24 * var(--u));
  display:inline-flex;align-items:center;justify-content:center;transition:filter .18s}
.sc-checkout .btn-default:hover,.sc-checkout .btn-primary:hover,
.sc-checkout .btn-lg:hover,.sc-checkout .bx-soa-editstep:hover{filter:brightness(1.08);color:#fff}

/* правая колонка — сводка заказа */
.sc-checkout .bx-soa-cart-total{background:#fff;border:1px solid var(--tile-line);
  border-radius:calc(28 * var(--u));padding:calc(22 * var(--u));margin:0}
.sc-checkout .bx-soa-cart-total-line{display:flex;align-items:baseline;
  justify-content:space-between;gap:calc(12 * var(--u));margin-bottom:calc(11 * var(--u));
  font-size:calc(14.5 * var(--u));color:var(--ink-soft)}
.sc-checkout .bx-soa-cart-total-line .bx-soa-cart-d{color:var(--ink);font-weight:700;text-align:right}
.sc-checkout .bx-soa-cart-total-line-total{border-top:1.5px solid var(--line);
  margin-top:calc(16 * var(--u));padding-top:calc(16 * var(--u))}
.sc-checkout .bx-soa-cart-total-line-total .bx-soa-cart-t{font-weight:700;color:var(--ink)}
.sc-checkout .bx-soa-cart-total-line-total .bx-soa-cart-d{font-family:var(--font);
  font-weight:900;font-size:calc(28 * var(--u));color:var(--green-deep-2)}
.sc-checkout .bx-soa-cart-total-button-container{margin-top:calc(18 * var(--u))}
.sc-checkout .bx-soa-cart-total-button-container .btn{width:100%}
.sc-checkout .bx-soa-cart-total-ghost{display:none}
/* Строка скидки. Коробочный стиль красит её в салатовый #d4ffb8 во всю
   ширину колонки — рядом с зелёными сайта это чужой цвет. Мы перекрашивали
   плашку в свой зелёный, но Герман 21.09.2026: «убери обводку зелёную и по
   всему сайту сделай так, как у нас в плашке при добавлении в корзину».
   Образец — .scp-loy в newdesign/cart-popover.css: ни фона, ни скругления,
   строку выделяют подпись пожирнее и зелёная сумма. Коробочную заливку
   гасим явно, иначе салатовый вернётся. */
.sc-checkout .bx-soa-cart-total-line.bx-soa-cart-total-line-highlighted{
  background:none;border-radius:0;padding:0;
  margin-top:calc(2 * var(--u))}
.sc-checkout .bx-soa-cart-total-line-highlighted .bx-soa-cart-t{
  font-weight:700;color:var(--green-deep-2)}
.sc-checkout .bx-soa-cart-total-line-highlighted .bx-soa-cart-d{color:var(--green-brand)}

/* «Товаров на»: пара цен, как во всплывашке «товар в корзине». Старая сумма
   зачёркнута рисованной чертой (img/cross.svg, класс .pcross), новая рядом
   зелёным. Раньше старая стояла под новой через <br> мелким серым, и цены
   читались как две разные строки. Пара живёт только здесь: в строке скидки
   те же два числа шли бы вторым разом (order_ajax.js, editTotalBlock). */
.sc-checkout .sc-cut-price{display:inline-flex;flex-wrap:wrap;
  align-items:baseline;justify-content:flex-end;
  gap:calc(2 * var(--u)) calc(10 * var(--u))}
.sc-checkout .sc-cut-was{position:relative;text-decoration:none;
  white-space:nowrap;font-weight:700;color:#000}
.sc-checkout .sc-cut-was .pcross{position:absolute;left:calc(-2 * var(--u));
  top:50%;width:calc(100% + 4 * var(--u));max-width:none;height:auto;
  transform:translateY(-50%)}
.sc-checkout .sc-cut-now{font-weight:700;color:var(--green-brand);white-space:nowrap}

/* Подсказка гостю про скидку за регистрацию (order_ajax.js, editTotalBlock).
   Это не цифра заказа, а предложение, поэтому строка идёт во всю ширину, а
   не парой «название — сумма»: сумма справа читалась бы как скидка, которой
   у гостя пока нет. Плашки у неё тоже больше нет — по той же причине, что
   и у строки скидки выше. */
.sc-checkout .bx-soa-cart-total-line.sc-loy-note{display:block;
  margin-top:calc(12 * var(--u));padding:0;
  background:none;border-radius:0;
  font-size:calc(13 * var(--u));line-height:1.35}
.sc-checkout .sc-loy-note a{color:var(--green-brand);text-decoration:underline}

/* товары в заказе */
.sc-checkout .bx-soa-item-tr{border-color:var(--line)}
.sc-checkout .bx-soa-item-title a{color:var(--green-deep-2);font-weight:700;text-decoration:none}
.sc-checkout .bx-soa-item-title a:hover{color:var(--green-brand)}
.sc-checkout .bx-soa-item-imgcontainer{border:0;background:var(--bg-soft);
  border-radius:calc(16 * var(--u));padding:calc(6 * var(--u))}

/* Список способов и панель описания: у коробочной вёрстки это .row из двух
   колонок, но сетка внутри ужимала карточки до половины ширины. Раздаём
   доли явно и вынимаем цену из абсолютного позиционирования — она налезала
   на угол карточки тёмной плашкой. */
@media(min-width:1000px){
  .sc-checkout .bx-soa-pp.row{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);
    gap:calc(20 * var(--u));align-items:start;margin:0}
  .sc-checkout .bx-soa-pp.row > *{max-width:none;flex:none;width:auto;padding:0}
}
.sc-checkout .bx-soa-pp-item-container{width:100%}
@media(min-width:700px){.sc-checkout .bx-soa-pp-item-container{grid-template-columns:repeat(2,minmax(0,1fr))}}

.sc-checkout .bx-soa-pp-company{flex-direction:column;align-items:flex-start;
  justify-content:flex-start;text-align:left;gap:calc(8 * var(--u));
  padding:calc(16 * var(--u));min-height:calc(112 * var(--u))}
.sc-checkout .bx-soa-pp-company-graf-container{width:calc(38 * var(--u))}
.sc-checkout .bx-soa-pp-delivery-cost{position:static;background:none;color:var(--green-deep-2);
  padding:0;margin-top:auto;font-size:calc(17 * var(--u));border-radius:0}

/* панель с описанием выбранного способа */
.sc-checkout .bx-soa-pp-desc-container,
.sc-checkout .bx-soa-pp-company-selected{background:var(--bg-soft);
  border-radius:calc(22 * var(--u));padding:calc(18 * var(--u))}
.sc-checkout .bx-soa-pp-desc-container .bx-soa-pp-company-graf-container{margin-bottom:calc(10 * var(--u))}

/* Коробочная тема задаёт карточке способа фиксированную ширину — в нашей
   сетке она сжималась до 133 px. Растягиваем на ячейку и ставим цену под
   названием, а не над ним. */
.sc-checkout .bx-soa-pp-company{width:100%!important;max-width:none!important;
  float:none!important;margin:0!important}
.sc-checkout .bx-soa-pp-company-graf-container{order:1}
.sc-checkout .bx-soa-pp-company-smalltitle{order:2}
.sc-checkout .bx-soa-pp-delivery-cost{order:3}

/* Каждая карточка способа обёрнута в лишний .row — именно он попадает в
   ячейку сетки, а карточка внутри вылезала за неё. Обёртку делаем
   прозрачной и заодно ограничиваем высоту значка службы. */
.sc-checkout .bx-soa-pp-item-container > .row{display:block;width:auto;margin:0}
.sc-checkout .bx-soa-pp-company{width:auto!important}
.sc-checkout .bx-soa-pp-company-graf-container{width:auto;max-height:calc(46 * var(--u));
  display:flex;align-items:center;gap:calc(8 * var(--u))}
.sc-checkout .bx-soa-pp-company-graf-container img{max-height:calc(40 * var(--u));width:auto}

/* Сетка из двух колонок не сработала: обёртки .row остаются блочными и
   занимают всю ширину ячейки. Flex с переносом надёжнее — карточки идут
   по две в ряд и тянутся до одинаковой высоты. */
@media(min-width:700px){
  .sc-checkout .bx-soa-pp-item-container{display:flex;flex-wrap:wrap;
    gap:calc(12 * var(--u));grid-template-columns:none}
  .sc-checkout .bx-soa-pp-item-container > .row{flex:0 0 calc(50% - calc(6 * var(--u)));
    display:flex}
  .sc-checkout .bx-soa-pp-item-container > .row > .bx-soa-pp-company{flex:1}
}

/* На карточке висит бутстраповский col-6 — он давал ей половину обёртки
   и карточки выходили по 121 px. Снимаем ограничение колонки. */
.sc-checkout .bx-soa-pp-item-container > .row > .bx-soa-pp-company{
  flex:1 1 100%!important;max-width:100%!important}

/* Разобрались окончательно: .row внутри контейнера один на все карточки,
   а не по одному на каждую. Значит переносить нужно его, а долю ширины
   задавать самим карточкам. */
@media(min-width:700px){
  .sc-checkout .bx-soa-pp-item-container{display:block}
  .sc-checkout .bx-soa-pp-item-container > .row{display:flex;flex-wrap:wrap;
    gap:calc(12 * var(--u));width:auto;margin:0}
  .sc-checkout .bx-soa-pp-item-container > .row > .bx-soa-pp-company{
    flex:0 0 calc(50% - calc(6 * var(--u)))!important;
    max-width:calc(50% - calc(6 * var(--u)))!important}
}

/* Значок службы и служебный чекбокс. Выбор показываем рамкой карточки,
   как в образце, поэтому сам чекбокс прячем, а картинку не растягиваем. */
.sc-checkout .bx-soa-pp-company input[type=radio],
.sc-checkout .bx-soa-pp-company input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.sc-checkout .bx-soa-pp-company{position:relative}
.sc-checkout .bx-soa-pp-company-graf-container{max-height:calc(44 * var(--u));overflow:hidden}
.sc-checkout .bx-soa-pp-company-graf-container img{max-height:calc(36 * var(--u));
  max-width:calc(90 * var(--u));width:auto;object-fit:contain}

/* Блок согласия и кнопка «Оформить заказ» (#bx-soa-orderSave) уезжали
   в самый верх страницы: у них нет собственного order, а флекс ставит
   такие элементы перед теми, у кого order задан. Даём общему потомку
   большой порядок, а шагам — их номера. */
.sc-checkout .bx-soa > *{order:20}
.sc-checkout #bx-soa-region{order:1}
.sc-checkout #bx-soa-delivery{order:2}
.sc-checkout #bx-soa-pickup{order:3}
.sc-checkout #bx-soa-basket{order:4}
.sc-checkout #bx-soa-properties{order:5}
.sc-checkout #bx-soa-paysystem{order:6}
.sc-checkout #bx-soa-orderSave{order:30}

/* Согласие и итоговая кнопка внизу — оформляем как отдельную карточку. */
.sc-checkout #bx-soa-orderSave{background:#fff;border:1px solid var(--tile-line);
  border-radius:calc(28 * var(--u));padding:calc(22 * var(--u)) calc(24 * var(--u))}
.sc-checkout #bx-soa-orderSave .checkbox,
.sc-checkout #bx-soa-orderSave label{display:flex;gap:calc(10 * var(--u));
  align-items:flex-start;font-size:calc(13 * var(--u));line-height:1.5;color:var(--ink-soft);
  font-weight:400;margin:0 0 calc(16 * var(--u))}
.sc-checkout #bx-soa-orderSave input[type=checkbox]{flex:none;width:calc(20 * var(--u));
  height:calc(20 * var(--u));margin-top:calc(2 * var(--u));accent-color:var(--green-brand)}

/* Кнопка оформления: пока шаги не заполнены, она отключена — показываем
   это приглушённостью, а не бледно-розовой заливкой поверх фигуры. */
.sc-checkout .btn[disabled],.sc-checkout .btn.disabled{opacity:.45;filter:grayscale(.4);cursor:not-allowed}

/* Номера шагов. Битрикс нумерует блоки в своём порядке, а мы их
   переставили — на экране получалось «1, 2, 5». Считаем сами по
   визуальному порядку, родной счётчик прячем. */
.sc-checkout .bx-soa{counter-reset:sc-step}
.sc-checkout .bx-soa-section-title-count,
.sc-checkout .bx-soa-section-title > .bx-soa-section-title-count{display:none!important}
.sc-checkout #bx-soa-region .bx-soa-section-title::before{counter-increment:sc-step}
.sc-checkout .bx-soa-section-title::before{content:counter(sc-step);
  flex:none;width:calc(30 * var(--u));height:calc(30 * var(--u));border-radius:50%;
  background:var(--green-brand);color:#fff;display:flex;align-items:center;justify-content:center;
  font-family:var(--font-ui);font-size:calc(15 * var(--u));font-weight:700}
.sc-checkout #bx-soa-region .bx-soa-section-title::before{content:'1'}
.sc-checkout #bx-soa-delivery .bx-soa-section-title::before{content:'2'}
.sc-checkout #bx-soa-basket .bx-soa-section-title::before{content:'3'}
.sc-checkout #bx-soa-properties .bx-soa-section-title::before{content:'4'}
.sc-checkout #bx-soa-paysystem .bx-soa-section-title::before{content:'5'}

/* Миниатюра товара — фоновой картинкой, у блока не было размеров и он
   схлопывался в серую полоску. */
.sc-checkout .bx-soa-item-img-block{width:calc(64 * var(--u));height:calc(64 * var(--u));
  flex:none;border-radius:calc(16 * var(--u));background-color:var(--bg-soft);
  background-size:contain;background-repeat:no-repeat;background-position:center;
  border:0;margin-right:calc(14 * var(--u))}
.sc-checkout .bx-soa-item-tr{display:flex;align-items:center;gap:calc(14 * var(--u));
  padding:calc(14 * var(--u)) 0;border-bottom:1.5px solid var(--line)}
.sc-checkout .bx-soa-item-tr:last-child{border-bottom:0}
.sc-checkout .bx-soa-item-td{padding:0}
.sc-checkout .bx-soa-item-td:first-child{flex:1;display:flex;align-items:center;min-width:0}
.sc-checkout .bx-soa-item-properties{font-size:calc(13 * var(--u));color:var(--ink-soft)}
.sc-checkout .bx-soa-item-properties .bx-soa-item-property-value{color:var(--ink)}

/* Картинка товара лежит фоном на внутреннем .bx-soa-item-imgcontainer,
   а размеров у него не было — выходила полоска 36×10. Растягиваем его
   на всю миниатюру. */
.sc-checkout .bx-soa-item-imgcontainer{width:100%;height:100%;padding:calc(6 * var(--u));
  background-size:contain;background-repeat:no-repeat;background-position:center;
  background-color:transparent;border-radius:calc(16 * var(--u));border:0;margin:0}
.sc-checkout .bx-soa-item-img-block{padding:0;overflow:hidden}

/* Строка товара: название и свойства в столбик слева, количество и цена
   прижаты вправо и не пляшут по вертикали. */
.sc-checkout .bx-soa-item-td:first-child{gap:calc(14 * var(--u))}
.sc-checkout .bx-soa-item-title{min-width:0}
.sc-checkout .bx-soa-item-title a{display:block;font-size:calc(15 * var(--u));line-height:1.3}
.sc-checkout .bx-soa-item-properties{margin-top:calc(6 * var(--u));display:flex;
  flex-wrap:wrap;gap:calc(4 * var(--u)) calc(14 * var(--u))}
.sc-checkout .bx-soa-item-properties > *{display:inline-flex;gap:calc(5 * var(--u))}
.sc-checkout .bx-soa-item-tr > .bx-soa-item-td:not(:first-child){flex:none;text-align:right;
  font-weight:700;white-space:nowrap}

/* ==========================================================================
   Корзина — по образцу заказчика: слева карточка со списком, справа липкая
   сводка с отметкой «Я юридическое лицо», итогом и переходом к оформлению.
   ========================================================================== */
.sc-cart .cart-grid{display:grid;gap:calc(22 * var(--u));align-items:start;padding-bottom:calc(40 * var(--u))}
@media(min-width:1000px){.sc-cart .cart-grid{grid-template-columns:1fr calc(420 * var(--u));gap:calc(28 * var(--u))}}

.sc-cart .cart-box{background:#fff;border:1px solid var(--tile-line);border-radius:calc(28 * var(--u));
  padding:calc(22 * var(--u)) calc(24 * var(--u))}
.sc-cart .cart-count{font-weight:700;font-size:calc(16 * var(--u));color:var(--ink);margin:0}
.sc-cart .cart-tools{display:flex;align-items:center;justify-content:space-between;gap:calc(16 * var(--u));
  margin-top:calc(16 * var(--u));padding-bottom:calc(14 * var(--u));border-bottom:1.5px solid var(--line)}
.sc-cart .cart-drop{background:none;border:0;color:var(--cart);font-weight:700;
  font-size:calc(14 * var(--u));cursor:pointer;transition:opacity .18s}
.sc-cart .cart-drop[disabled]{opacity:.4;cursor:default}

.sc-cart .cart-check{display:inline-flex;align-items:center;gap:calc(10 * var(--u));cursor:pointer;
  font-weight:700;font-size:calc(14 * var(--u));color:var(--ink)}
.sc-cart .cart-check input{width:calc(20 * var(--u));height:calc(20 * var(--u));flex:none;
  accent-color:var(--green-brand);cursor:pointer}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.sc-cart .cart-items{display:flex;flex-direction:column}
.sc-cart .ci{display:grid;gap:calc(14 * var(--u));align-items:center;
  grid-template-columns:auto calc(84 * var(--u)) 1fr;
  padding:calc(18 * var(--u)) 0;border-bottom:1.5px solid var(--line)}
.sc-cart .ci:last-child{border-bottom:0}
@media(min-width:800px){
  .sc-cart .ci{grid-template-columns:auto calc(84 * var(--u)) 1fr calc(150 * var(--u)) calc(130 * var(--u))}
}
.sc-cart .ci .ph{background:var(--bg-soft);border-radius:calc(16 * var(--u));aspect-ratio:1;
  display:flex;align-items:center;justify-content:center;padding:calc(8 * var(--u))}
.sc-cart .ci .ph img{max-height:100%;max-width:100%;object-fit:contain;mix-blend-mode:multiply}
.sc-cart .ci h2{font-size:calc(16 * var(--u));font-weight:800;line-height:1.3;margin:0}
.sc-cart .ci h2 a{color:inherit;text-decoration:none}
.sc-cart .ci h2 a:hover{color:var(--green-brand)}
.sc-cart .ci .opts{display:flex;flex-wrap:wrap;gap:calc(8 * var(--u));margin-top:calc(10 * var(--u))}
.sc-cart .ci .opt{font-size:calc(12.5 * var(--u));font-weight:700;background:var(--green-pale);
  color:var(--green-deep-2);padding:calc(5 * var(--u)) calc(11 * var(--u));border-radius:999px}
.sc-cart .ci-price{display:flex;flex-direction:column;gap:calc(4 * var(--u));text-align:right}
.sc-cart .ci-price b{font-family:var(--font);font-weight:900;font-size:calc(18 * var(--u));
  color:var(--ink);white-space:nowrap}
.sc-cart .ci-price span{font-size:calc(12.5 * var(--u));color:var(--ink-soft);white-space:nowrap}
.sc-cart .ci-qty{display:flex;flex-direction:column;align-items:flex-end;gap:calc(6 * var(--u))}
.sc-cart .qty{display:flex;align-items:center;border:1.5px solid var(--green-deep-2);border-radius:999px;overflow:hidden}
.sc-cart .qty button{width:calc(38 * var(--u));height:calc(40 * var(--u));font-size:calc(19 * var(--u));
  font-weight:700;color:var(--green-deep-2);background:none;cursor:pointer;transition:background .15s}
.sc-cart .qty button:hover{background:var(--green-pale)}
.sc-cart .qty span{min-width:calc(34 * var(--u));text-align:center;font-weight:800;font-size:calc(15 * var(--u))}
.sc-cart .qty-unit{font-size:calc(12 * var(--u));color:var(--ink-soft)}
.sc-cart .ci .del{font-size:calc(12.5 * var(--u));color:#9a9a95;background:none;border:0;
  padding:calc(2 * var(--u));cursor:pointer;transition:color .15s}
.sc-cart .ci .del:hover{color:var(--cart)}

.sc-cart .total{background:#fff;border:1px solid var(--tile-line);border-radius:calc(28 * var(--u));
  padding:calc(24 * var(--u));position:sticky;top:calc(96 * var(--u))}
.sc-cart .cart-company{width:100%;border:1.5px solid var(--line);border-radius:calc(16 * var(--u));
  padding:calc(14 * var(--u)) calc(16 * var(--u));margin-bottom:calc(20 * var(--u))}
.sc-cart .tl-sum{display:flex;align-items:baseline;justify-content:space-between;gap:calc(12 * var(--u))}
.sc-cart .tl-sum span{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(20 * var(--u));color:var(--ink)}
.sc-cart .tl-sum b{font-family:var(--font);font-weight:900;font-size:calc(30 * var(--u));color:var(--green-deep-2)}
.sc-cart .cart-go{display:flex;justify-content:center;width:100%;margin-top:calc(20 * var(--u));
  color:#fff;text-decoration:none}
.sc-cart .total .note{font-size:calc(12.5 * var(--u));color:#8a8a85;margin-top:calc(14 * var(--u));
  text-align:center;line-height:1.5}
.sc-cart .cart-empty{display:flex;flex-direction:column;align-items:flex-start;gap:calc(16 * var(--u));
  padding:calc(30 * var(--u)) 0 calc(60 * var(--u))}
.sc-cart .cart-empty .pbtn{text-decoration:none;color:#fff}

/* На корзине и оформлении подвала нет — как в образце: страница
   заканчивается действием, ничто не уводит с шага покупки. */
body:has(.sc-cart) .site-foot,
body:has(.sc-checkout) .site-foot{display:none}

/* ---------- Оформление: доводка под образец ----------
   В образце у шагов нет номеров — только названия, и каждый шаг отдельной
   карточкой. Кнопка оформления одна и живёт в правой сводке. */
.sc-checkout .bx-soa-section-title::before{content:none!important}
.sc-checkout .bx-soa-section-title{gap:0}

/* Кнопка оформления живёт и в блоке согласия, и в сводке. Прятать её
   нельзя: компонент показывает кнопку в сводке только на последнем шаге
   (SHOW_ORDER_BUTTON), и, спрятав вторую, мы оставили страницу вообще
   без кнопки заказа. Оформляем обе одинаково. */
.sc-checkout #bx-soa-orderSave > a.btn{width:100%;margin-top:calc(14 * var(--u))}
.sc-checkout #bx-soa-orderSave{padding:calc(18 * var(--u)) calc(24 * var(--u))}
.sc-checkout #bx-soa-orderSave .checkbox,
.sc-checkout #bx-soa-orderSave label{margin:0}

/* Правая сводка — как «Ваш заказ» в образце. */
.sc-checkout .bx-soa-cart-total::before{content:'Ваш заказ';display:block;
  font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(20 * var(--u));color:var(--green-deep-2);margin-bottom:calc(18 * var(--u))}
.sc-checkout .bx-soa-cart-total-button-container .btn{min-height:calc(52 * var(--u));
  font-size:calc(16 * var(--u))}


/* ---------- Плитки: единый вид как в примерах заказчика ----------
   Жирная бордовая обводка ушла: карточка — белая, с еле заметной линией
   и мягкой тенью, которая усиливается при наведении. Бордовым остаётся
   только кнопка «В корзину». */
/* .pcard отсюда убрана: в макете у карточки нет тени, а тень рисовала
   прежний прямоугольный силуэт вокруг рисованного контура. */
.sc-cart .cart-box,.sc-cart .total,
.sc-map .spot,.sc-map .map-box,
.about .ab-card,.about .ab-hero-img,.about .ab-story-img,
.sc-added-box,
.sc-checkout .bx-soa-section,.sc-checkout .bx-soa-cart-total,
.sc-checkout #bx-soa-orderSave{
  border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  transition:box-shadow .25s ease,transform .25s ease}
.pcard:hover,.sc-map .spot:hover,.about .ab-card:hover{
  box-shadow:var(--tile-shadow-hover)}
.sc-map .spot.on{border-color:var(--green-brand);
  box-shadow:0 0 0 2px rgba(0,114,59,.14),var(--tile-shadow)}

/* Страница под плитками — светлая, чтобы белые карточки читались,
   как в примерах. */
body:has(.sc-cart),body:has(.sc-checkout){background:#f6f6f3}
.sc-checkout .bx-soa-pp-company{border:1px solid var(--tile-line);box-shadow:none}
.sc-checkout .bx-soa-pp-company.bx-selected{border-color:var(--green-brand);
  box-shadow:0 0 0 2px rgba(0,114,59,.14)}

/* Значок службы доставки приходит картинкой произвольного размера и
   растягивался на всю карточку. Ограничиваем и возвращаем цену на место —
   в образце она стоит рядом с названием. */
.sc-checkout .bx-soa-pp-company{align-items:flex-start;gap:calc(10 * var(--u));
  padding:calc(16 * var(--u));min-height:calc(104 * var(--u))}
.sc-checkout .bx-soa-pp-company-graf-container{width:auto;max-width:calc(56 * var(--u));
  max-height:calc(40 * var(--u));display:flex;align-items:center;overflow:hidden}
.sc-checkout .bx-soa-pp-company-graf-container img{max-height:calc(34 * var(--u));
  max-width:calc(56 * var(--u));width:auto;height:auto;object-fit:contain}
.sc-checkout .bx-soa-pp-delivery-cost{position:static;display:block;background:none;
  padding:0;margin:0;border-radius:0;color:var(--green-deep-2);
  font-family:var(--font);font-weight:900;font-size:calc(16 * var(--u));order:3}
.sc-checkout .bx-soa-pp-company-smalltitle{order:2;font-size:calc(14 * var(--u));line-height:1.3}
.sc-checkout .bx-soa-pp-company-graf-container{order:1}

/* Цена лежит ВНУТРИ контейнера значка, а у него от коробочной темы своя
   рамка и высота — получалась узкая коробка с картинкой и цифрой внутри.
   Снимаем рамку и высоту, раскладываем содержимое в строку. */
.sc-checkout .bx-soa-pp-company-graf-container{border:0!important;background:none!important;
  width:100%!important;max-width:none!important;height:auto!important;max-height:none!important;
  min-height:0!important;padding:0!important;margin:0 0 calc(10 * var(--u))!important;
  display:flex!important;align-items:center;gap:calc(10 * var(--u));overflow:visible}
.sc-checkout .bx-soa-pp-company-graf-container img{max-height:calc(32 * var(--u))!important;
  max-width:calc(52 * var(--u))!important;width:auto!important;height:auto!important;object-fit:contain}
.sc-checkout .bx-soa-pp-company-graf-container .bx-soa-pp-delivery-cost{margin-left:auto!important}

/* ==========================================================================
   Блок «Адрес доставки» на оформлении — по образцу заказчика.
   ========================================================================== */
.sc-addr{background:#fff;border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  border-radius:calc(28 * var(--u));padding:calc(22 * var(--u)) calc(24 * var(--u));
  margin-bottom:calc(16 * var(--u))}
.sc-addr-head{display:flex;align-items:center;justify-content:space-between;
  gap:calc(16 * var(--u));flex-wrap:wrap}
.sc-addr-head h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(20 * var(--u));color:var(--green-deep-2);margin:0}

.sc-addr-mode{display:flex;gap:calc(10 * var(--u))}
.sc-addr-mode button{display:inline-flex;align-items:center;gap:calc(9 * var(--u));
  background:#fff;border:1.5px solid var(--tile-line);border-radius:calc(14 * var(--u));
  padding:calc(11 * var(--u)) calc(18 * var(--u));font-weight:700;font-size:calc(14 * var(--u));
  color:var(--ink);cursor:pointer;transition:border-color .18s,box-shadow .18s}
.sc-addr-mode button .dot{width:calc(16 * var(--u));height:calc(16 * var(--u));border-radius:50%;
  border:2px solid var(--tile-line);flex:none;transition:border-color .18s,box-shadow .18s}
.sc-addr-mode button.on{border-color:var(--green-brand)}
.sc-addr-mode button.on .dot{border-color:var(--green-brand);
  box-shadow:inset 0 0 0 calc(3 * var(--u)) var(--green-brand)}

.sc-addr-row{display:flex;align-items:center;gap:calc(14 * var(--u));margin-top:calc(18 * var(--u))}
.sc-addr-pin{flex:none;width:calc(44 * var(--u));height:calc(44 * var(--u));border-radius:50%;
  background:var(--bg-soft);color:var(--green-brand);display:flex;align-items:center;justify-content:center}
.sc-addr-text{flex:1;min-width:0}
.sc-addr-text b{display:block;font-weight:700;font-size:calc(15 * var(--u));line-height:1.35}
.sc-addr-text span{display:block;font-size:calc(13 * var(--u));color:var(--ink-soft);margin-top:calc(3 * var(--u))}
.sc-addr-edit{flex:none;background:var(--bg-soft);border:0;border-radius:calc(14 * var(--u));
  padding:calc(12 * var(--u)) calc(20 * var(--u));font-weight:700;font-size:calc(14 * var(--u));
  color:var(--ink);cursor:pointer;transition:background .18s}
.sc-addr-edit:hover{background:var(--green-pale)}

/* окно с картой */
.sc-addr-modal{position:fixed;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .2s ease}
.sc-addr-modal.on{opacity:1}
.sc-addr-scrim{position:absolute;inset:0;background:rgba(20,40,20,.45)}
.sc-addr-box{position:relative;z-index:1;display:grid;background:#fff;
  width:min(calc(1180 * var(--u)),calc(100vw - 32px));height:min(calc(720 * var(--u)),calc(100vh - 48px));
  border-radius:calc(28 * var(--u));overflow:hidden;box-shadow:0 30px 80px rgba(20,40,20,.30)}
@media(min-width:900px){.sc-addr-box{grid-template-columns:calc(420 * var(--u)) 1fr}}
.sc-addr-form{padding:calc(26 * var(--u));overflow-y:auto}
.sc-addr-form h3{font-family:var(--font);font-weight:900;font-size:calc(24 * var(--u));
  color:var(--ink);margin:calc(16 * var(--u)) 0 calc(14 * var(--u))}
.sc-addr-note{display:flex;align-items:center;gap:calc(8 * var(--u));margin:calc(14 * var(--u)) 0 0;
  font-size:calc(14 * var(--u));color:var(--green-brand);font-weight:700}
.sc-addr-sub{font-family:var(--font);font-weight:900;font-size:calc(17 * var(--u));
  margin:calc(18 * var(--u)) 0 calc(10 * var(--u))}

.sc-field{display:block;margin-bottom:calc(14 * var(--u))}
.sc-field > span{display:block;font-size:calc(12.5 * var(--u));color:var(--ink-soft);
  margin-bottom:calc(6 * var(--u))}
.sc-field input,.sc-field textarea{width:100%;border:1.5px solid var(--tile-line);
  border-radius:calc(14 * var(--u));padding:calc(13 * var(--u)) calc(16 * var(--u));
  font-family:var(--font-ui);font-size:calc(15 * var(--u));background:#fff;transition:border-color .18s}
.sc-field input:focus,.sc-field textarea:focus{outline:none;border-color:var(--green-brand)}
.sc-hint{font-size:calc(12.5 * var(--u));color:var(--ink-soft);margin:calc(-8 * var(--u)) 0 calc(12 * var(--u))}
.sc-check{display:inline-flex;align-items:center;gap:calc(10 * var(--u));cursor:pointer;
  font-size:calc(14 * var(--u));margin-bottom:calc(14 * var(--u))}
.sc-check input{width:calc(19 * var(--u));height:calc(19 * var(--u));accent-color:var(--green-brand)}
.sc-addr-two{display:grid;grid-template-columns:1fr 1fr;gap:calc(12 * var(--u))}

.sc-addr-found{list-style:none;margin:0 0 calc(12 * var(--u));padding:0;
  border:1.5px solid var(--tile-line);border-radius:calc(14 * var(--u));overflow:hidden}
.sc-addr-found li + li{border-top:1px solid var(--tile-line)}
.sc-addr-found button{display:block;width:100%;text-align:left;background:#fff;border:0;
  padding:calc(11 * var(--u)) calc(14 * var(--u));font-size:calc(13.5 * var(--u));cursor:pointer;
  transition:background .15s}
.sc-addr-found button:hover{background:var(--bg-soft)}
.sc-addr-none{padding:calc(11 * var(--u)) calc(14 * var(--u));font-size:calc(13 * var(--u));color:var(--ink-soft)}

.sc-addr-lift{display:grid;grid-template-columns:1fr 1fr;gap:calc(12 * var(--u));margin-bottom:calc(16 * var(--u))}
.sc-addr-lift button{background:#fff;border:1.5px solid var(--tile-line);border-radius:calc(14 * var(--u));
  padding:calc(12 * var(--u));font-weight:700;font-size:calc(14 * var(--u));cursor:pointer;
  transition:border-color .18s}
.sc-addr-lift button.on{border-color:var(--green-brand);color:var(--green-deep-2)}

.sc-addr-acts{display:flex;gap:calc(12 * var(--u));margin-top:calc(18 * var(--u))}
/* Заливку и скругление не задаём: форму кнопке даёт общее правило
   контурных кнопок ниже. Серый прямоугольник поверх фирменной фигуры
   выглядел как случайная плашка. */
.sc-addr-cancel{flex:none;background:none;border:0;cursor:pointer}
.sc-addr-acts .pbtn{flex:1;justify-content:center;border:0;cursor:pointer}

.sc-addr-map{position:relative;background:var(--bg-soft);min-height:calc(320 * var(--u))}
.sc-addr-map iframe,
.sc-addr-map #scAddrMap{width:100%;height:100%;min-height:calc(320 * var(--u));border:0;display:block}
/* Легенда зон доставки. Лежит НА карте снизу: карта занимает всю свою
   колонку целиком, отдельной строки под ней в раскладке нет. Сквозная для
   мыши (pointer-events) — это подпись, а не кнопка, и щелчок по карте под
   ней должен по-прежнему ставить метку дома. Появляется только когда у
   города есть зоны: их рисует checkout-address.js. */
/* Низ карты не занимаем: там Яндекс рисует свою подпись с условиями
   использования, и закрывать её нельзя. */
.sc-addr-zones{position:absolute;left:calc(12 * var(--u));right:calc(12 * var(--u));
  bottom:calc(36 * var(--u));z-index:2;pointer-events:none;
  background:rgba(255,255,255,.93);border-radius:calc(12 * var(--u));
  padding:calc(10 * var(--u)) calc(12 * var(--u));
  box-shadow:0 4px 14px rgba(20,40,20,.14)}
.sc-addr-zones[hidden]{display:none}
.sc-addr-zone-row{display:flex;align-items:flex-start;gap:calc(8 * var(--u));
  margin:0 0 calc(4 * var(--u));font-size:calc(12.5 * var(--u));line-height:1.35;color:var(--ink)}
.sc-addr-zone-row:last-child{margin-bottom:0}
.sc-addr-zone-row .dot{flex:none;width:calc(10 * var(--u));height:calc(10 * var(--u));
  border-radius:calc(3 * var(--u));margin-top:calc(4 * var(--u));background:#2E7D32}
.sc-addr-zone-row .dot.is-paid{background:#C98A17}
.sc-addr-zone-row .dot.is-out{background:#fff;border:1px solid var(--tile-line)}

.sc-addr-x{position:absolute;top:calc(16 * var(--u));right:calc(16 * var(--u));z-index:2;
  width:calc(38 * var(--u));height:calc(38 * var(--u));border-radius:50%;background:#fff;border:0;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 4px 14px rgba(20,40,20,.18)}

/* Самовывоз: поля адреса не нужны. */
.sc-addr-modal.is-pickup h3,
.sc-addr-modal.is-pickup .sc-field,
.sc-addr-modal.is-pickup .sc-hint,
.sc-addr-modal.is-pickup .sc-check,
.sc-addr-modal.is-pickup .sc-addr-two,
.sc-addr-modal.is-pickup [data-lift-block]{display:none}
/* Частный дом: квартира, этаж и лифт не спрашиваются. */
.sc-addr-modal.is-private [data-flat-fields],
.sc-addr-modal.is-private [data-lift-block]{display:none}

/* Окно адреса показываем без плавного проявления: анимация на opacity
   в этой сборке не срабатывала — окно оставалось прозрачным, — а видимое
   окно важнее эффекта. Управляем только атрибутом hidden. */
.sc-addr-modal{opacity:1!important;transition:none}
.sc-addr-modal[hidden]{display:none!important}
.sc-addr-box{transform:none!important}

/* ==========================================================================
   Оформление заказа — один экран, без аккордеона.

   Раньше страница работала шагами: открыт один, остальные свёрнуты в
   строчку-сводку. Теперь все поля видны сразу (сворачивание отключено в
   newdesign/checkout.js), поэтому здесь снимаем всё, что осталось от
   пошагового вида: инлайновые display:none, кнопки «Далее» и «Изменить»
   в заголовках, подсветку пройденных шагов.
   ========================================================================== */

.sc-checkout .bx-soa-section .bx-soa-section-content{display:block!important}
.sc-checkout .bx-soa-more,
.sc-checkout .bx-soa-editstep{display:none!important}
.sc-checkout .bx-soa-section-title-container{cursor:default}
.sc-checkout .bx-soa-section,
.sc-checkout .bx-soa-section.bx-selected,
.sc-checkout .bx-soa-section.bx-step-completed{border-color:var(--tile-line)}

/* Тип плательщика выбирают в корзине галочкой «Я юридическое лицо».
   Шаг остаётся в разметке — компонент шлёт из него PERSON_TYPE, — но на
   глаза не попадается. Мобильная сводка не нужна: справа липкая. */
.sc-checkout #bx-soa-region,
.sc-checkout #bx-soa-total-mobile{display:none!important}

/* ---------- Блок «Адрес доставки» ----------
   Скрипт переносит его в левую колонку, к остальным шагам, поэтому здесь
   он подгоняется под их карточку: та же рамка, те же отступы. */
.sc-checkout .bx-soa .sc-addr{order:0;margin:0;
  padding:calc(20 * var(--u)) calc(24 * var(--u)) calc(22 * var(--u));
  border-radius:calc(28 * var(--u))}
.sc-checkout .sc-addr-head h2{font-size:calc(19 * var(--u));letter-spacing:-.01em}
.sc-checkout .sc-addr-mode button{padding:calc(9 * var(--u)) calc(16 * var(--u));
  font-size:calc(13.5 * var(--u))}
.sc-checkout .sc-addr-row{margin-top:calc(14 * var(--u))}
.sc-checkout .sc-addr-pin{width:calc(38 * var(--u));height:calc(38 * var(--u))}
.sc-checkout .sc-addr-pin svg{width:calc(18 * var(--u));height:calc(18 * var(--u))}
.sc-checkout .sc-addr-edit{padding:calc(10 * var(--u)) calc(18 * var(--u));
  font-size:calc(13.5 * var(--u))}
@media(max-width:600px){
  .sc-checkout .sc-addr-head{align-items:flex-start;flex-direction:column;gap:calc(12 * var(--u))}
  .sc-checkout .sc-addr-mode{width:100%}
  .sc-checkout .sc-addr-mode button{flex:1;justify-content:center}
}

/* ---------- Товары: миниатюры вместо таблицы ----------
   В образце состав заказа — не таблица, а полоска фотографий с
   количеством: покупатель уже выбрал товары в корзине, здесь ему нужно
   только убедиться, что везут именно их. Полную таблицу компонента
   прячем, но оставляем в разметке — на ней держатся его пересчёты. */
.sc-checkout #bx-soa-basket .bx-soa-table-fade{display:none}
.sc-goods-head{display:flex;align-items:baseline;justify-content:space-between;
  gap:calc(14 * var(--u));flex-wrap:wrap}
.sc-goods-count{font-weight:700;font-size:calc(15 * var(--u));color:var(--ink)}
.sc-goods-edit{font-size:calc(14 * var(--u));font-weight:700;color:var(--green-brand);
  text-decoration:none;border-bottom:1px solid rgba(0,114,59,.3)}
.sc-goods-edit:hover{color:var(--green-deep-2)}
.sc-goods-list{list-style:none;display:flex;flex-wrap:wrap;gap:calc(16 * var(--u));
  margin:calc(18 * var(--u)) 0 0;padding:0}
.sc-goods-item{width:calc(78 * var(--u));text-align:center}
.sc-goods-pic{display:block;width:calc(78 * var(--u));height:calc(78 * var(--u));
  border:1px solid var(--tile-line);border-radius:calc(18 * var(--u));
  background-color:var(--bg-soft);background-repeat:no-repeat;
  background-position:center;background-size:contain}
.sc-goods-qty{display:block;margin-top:calc(8 * var(--u));font-size:calc(13 * var(--u));
  color:var(--ink-soft)}
.sc-goods-sum{margin:calc(20 * var(--u)) 0 0;font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(18 * var(--u));color:var(--ink)}
.sc-goods-sum b{font-size:calc(24 * var(--u));color:var(--green-deep-2);margin-left:calc(8 * var(--u))}

/* ---------- Сводка заказа ----------
   Едет вместе со страницей: position:sticky вместо самодельного
   position:fixed у компонента (он отключён в checkout.js — иначе панель
   прыгала и меряла ширину вручную). */
.sc-checkout .bx-soa-cart-total-ghost{display:none}
.sc-checkout .bx-soa-cart-total.bx-soa-cart-total-fixed,
.sc-checkout .bx-soa-cart-total.bx-soa-cart-total-bottom{
  position:static!important;width:auto!important;bottom:auto!important}
@media(min-width:768px){
  .sc-checkout #bx-soa-total{position:sticky;top:calc(18 * var(--u));align-self:start;z-index:5}
}

/* Разделительных линий в сводке нет — уровни держатся размером и
   воздухом, как в образце. */
.sc-checkout .bx-soa-cart-total-line,
.sc-checkout .bx-soa-cart-total-line-total{border:0!important;
  padding:calc(7 * var(--u)) 0;margin:0}
.sc-checkout .bx-soa-cart-total-line-total{margin-top:calc(14 * var(--u))}

/* Кнопка заказа — та же рисованная фигура, что у «Меню» и «В корзину»,
   только зелёная: на странице не должно быть кнопки другой формы. */
.sc-checkout .bx-soa-cart-total-button-container{margin-top:calc(20 * var(--u))}
.sc-checkout .bx-soa-cart-total-button-container .btn,
.sc-checkout .bx-soa-cart-total-button-container .btn:hover,
.sc-checkout .bx-soa-cart-total-button-container .btn:focus,
.sc-checkout .bx-soa-cart-total-button-container .btn:active{
  display:flex;align-items:center;justify-content:center;width:100%;
  background:url(img/hd-shape-btn.svg) no-repeat center/100% 100%;
  border:0;border-radius:0;box-shadow:none;color:#fff;text-decoration:none;
  font-family:var(--font);font-weight:700;font-size:calc(17 * var(--u));
  min-height:calc(58 * var(--u));padding:0 calc(20 * var(--u))}
.sc-checkout .bx-soa-cart-total-button-container .btn:hover{filter:brightness(1.08)}

/* Согласие живёт внизу страницы, а кнопка — в сводке. Чтобы предупреждение
   стояло рядом с действием, короткую его версию печатаем под кнопкой. */
.sc-checkout .bx-soa-cart-total-button-container::after{
  content:'Нажимая кнопку, вы соглашаетесь на обработку персональных данных';
  display:block;margin-top:calc(12 * var(--u));text-align:center;
  font-size:calc(11.5 * var(--u));line-height:1.45;color:var(--ink-soft)}

/* ---------- Низ страницы ----------
   Вторая кнопка «Оформить заказ» убрана: действие одно и живёт в сводке.
   Остаётся само согласие — полным текстом и со ссылкой. */
.sc-checkout #bx-soa-orderSave > a.btn,
.sc-checkout #bx-soa-orderSave [data-save-button]{display:none!important}
.sc-checkout #bx-soa-orderSave{background:none;border:0;box-shadow:none;
  padding:calc(6 * var(--u)) calc(8 * var(--u)) calc(10 * var(--u))}
.sc-checkout #bx-soa-orderSave .main-user-consent-request-announce-link{
  font-size:calc(12.5 * var(--u));line-height:1.5;color:var(--ink-soft)}
.sc-checkout #bx-soa-orderSave input[type=checkbox]{width:calc(18 * var(--u));
  height:calc(18 * var(--u));accent-color:var(--green-brand)}

/* ---------- Согласие над кнопкой «Оформить заказ» (22.09.2026) ----------
   Обёртку .sc-consent-wrap order_ajax.js переносит из конца шагов в сводку,
   прямо над кнопкой (scPlaceConsent). Правила выше написаны на
   #bx-soa-orderSave и на новом месте не действуют — поэтому своя строка.
   Галочка сама фирменная: у подписи класс sc-check, её рисует блок
   «ГАЛОЧКИ» ниже. Текст мельче суммы и кнопки, но не сносочный: это
   условие заказа, его должны прочитать. */
.sc-checkout .bx-soa-cart-total .sc-consent-wrap{margin-top:calc(18 * var(--u))}
.sc-checkout .sc-consent-wrap .checkbox{margin:0}
.sc-checkout .sc-consent-wrap label.sc-consent{display:flex;align-items:flex-start;
  gap:calc(10 * var(--u));margin:0;cursor:pointer;font-weight:400}
.sc-checkout .sc-consent-wrap label.sc-consent input{margin-top:calc(1 * var(--u))}
.sc-checkout .sc-consent-wrap .main-user-consent-request-announce-link,
.sc-checkout .sc-consent-given p{margin:0;font-family:var(--font-ui);
  font-size:calc(13.5 * var(--u));line-height:1.45;color:var(--ink)}
.sc-checkout .sc-consent-given p{color:var(--ink-soft)}
.sc-checkout .sc-consent-wrap a{color:var(--green-brand);text-decoration:underline}
.sc-checkout .bx-soa-cart-total .sc-consent-wrap + .bx-soa-cart-total-button-container{
  margin-top:calc(14 * var(--u))}

/* ---------- Оформление: доводка полей и карточек ---------- */

/* Значок службы доставки и платёжной системы лежит фоном на пустом div —
   без размеров он схлопывался в точку, и на карточках висел обломок
   картинки. Раньше правила были написаны на <img>, которого здесь нет. */
.sc-checkout .bx-soa-pp-company-image{flex:none;
  width:calc(54 * var(--u));height:calc(34 * var(--u));
  background-repeat:no-repeat;background-position:left center;background-size:contain}

/* Описание выбранной службы тянулось на всю высоту колонки с карточками
   и превращалось в пустую коробку. */
.sc-checkout .bx-soa-pp-desc-container{align-self:start}

/* Поля получателя — в две колонки: во всю ширину строки поле выглядит
   растянутым, а форма из четырёх строк занимает пол-экрана. */
@media(min-width:760px){
  .sc-checkout .bx-soa-customer{display:grid;grid-template-columns:1fr 1fr;
    gap:0 calc(20 * var(--u))}
  .sc-checkout .bx-soa-customer > .form-group{margin-bottom:calc(16 * var(--u))}
  .sc-checkout .bx-soa-customer > .form-group:has(textarea){grid-column:1 / -1}
}

/* У полей рисовалось две рамки: фирменная фигура фоном и обводка от
   темы поверх неё. Тема выигрывала по весу селектора — снимаем её. */
.sc-checkout .bx-soa-section .form-control,
.sc-checkout .bx-soa-customer input.form-control{
  border:0!important;border-radius:0;box-shadow:none}
.sc-checkout .bx-soa-section input.form-control{
  background:url(img/pdp-field-select.svg) no-repeat center/100% 100%;
  min-height:calc(48 * var(--u));padding:0 calc(20 * var(--u))}
/* Многострочному полю фирменная фигура не идёт: растянутая по высоте, она
   превращается в овал. Оставляем ту же линию, но прямой рамкой. */
.sc-checkout .bx-soa-section textarea.form-control{
  background-image:none;border:1.5px solid rgba(20,87,50,.8)!important;
  border-radius:calc(20 * var(--u));padding:calc(14 * var(--u)) calc(20 * var(--u));
  min-height:calc(92 * var(--u));resize:vertical}
/* Обводки у поля нет (правило «без обводки», §3.2): реакция на фокус — тон,
   блок «Фокус — тон, а не вторая рамка» ниже; здесь только снимаем
   яркость .97 с многострочного поля, у него своя рамка. */
.sc-checkout .bx-soa-section .form-control:focus{filter:none}

/* Адрес доставки спрашивается в блоке наверху. Здесь то же свойство
   заказа осталось бы вторым таким же полем — прячем, значение в него
   подставляет checkout-address.js. */
.sc-checkout #bx-soa-properties [data-property-id-row="26"],
.sc-checkout #bx-soa-properties [data-property-id-row="38"]{display:none}

/* Значок службы у коробочной темы лежит абсолютом поверх карточки — от
   этого он налезал на название. Возвращаем его в поток. */
.sc-checkout .bx-soa-pp-company-image{position:static!important;
  top:auto!important;left:auto!important;
  width:calc(54 * var(--u))!important;height:calc(34 * var(--u))!important}
.sc-checkout .bx-soa-pp-company-graf-container{min-height:calc(34 * var(--u))!important;
  align-items:center}
.sc-checkout .bx-soa-pp-company-smalltitle{margin-top:0}

/* Колонка сводки у коробочной темы — height:100%, поэтому она была ростом
   со всю страницу и липнуть ей было некуда. */
.sc-checkout #bx-soa-total{height:auto}

/* Подсказка об ошибке приходит всплывашкой над полем и налезала на
   соседнюю колонку. Ставим её строкой под полем — там, где её ищут. */
.sc-checkout .bx-soa-customer-field{display:flex;flex-direction:column}
.sc-checkout .bx-soa-customer-field > label{order:1}
.sc-checkout .bx-soa-customer-field > .soa-property-container{order:2}
.sc-checkout .bx-soa-tooltip{order:3;position:static!important;opacity:1!important;
  margin:calc(6 * var(--u)) 0 0;padding:0;max-width:none;background:none;
  filter:none;transform:none}
.sc-checkout .bx-soa-tooltip .tooltip-arrow{display:none}
.sc-checkout .bx-soa-tooltip .tooltip-inner{background:none;padding:0;max-width:none;
  text-align:left;font-size:calc(12.5 * var(--u));line-height:1.4;color:#b3261e}

/* ---------- Окно адреса: доводка ---------- */

/* На оформлении главное действие — зелёное («Оформить заказ»). Бордовая
   кнопка тут читалась бы как второе главное действие, поэтому «Доставить
   сюда» той же фирменной формы, но зелёная. */
.sc-addr-acts .pbtn{
  padding:0 calc(26 * var(--u));
  font-size:calc(16 * var(--u));font-weight:700}
.sc-addr-acts .pbtn:hover{filter:brightness(1.08)}

/* Найденные адреса: сверху короткий — город, улица, дом, — под ним полная
   строка геокодера, чтобы отличить два похожих дома. */
.sc-addr-found button{padding:calc(10 * var(--u)) calc(14 * var(--u))}
.sc-addr-found button b{display:block;font-weight:700;font-size:calc(14 * var(--u));
  color:var(--ink);line-height:1.35}
.sc-addr-found button span{display:block;margin-top:calc(3 * var(--u));
  font-size:calc(12 * var(--u));color:var(--ink-soft);line-height:1.35}

/* У поля комментария нет обёртки .soa-property-container — без порядка оно
   вставало выше своей подписи. */
.sc-checkout .bx-soa-customer-field > .form-control,
.sc-checkout .bx-soa-customer-field > .soa-property-container{order:2}

/* На телефоне тема ставила описание выбранной службы выше самих служб —
   покупатель видел рассказ о доставке раньше, чем список. */
@media(max-width:767px){
  .sc-checkout .bx-soa-pp-item-container{order:1}
  .sc-checkout .bx-soa-pp-desc-container{order:2;margin-top:calc(14 * var(--u))}
}


/* Строка под названием на странице товара — ОБРАБОТКА (свойство PROCESSING;
   откуда берётся — в шаблоне sc2026.detail/template.php).
   Заказчик 15.09.2026: «обработка — это то, что ниже названия, и всё сделать
   крупнее». Строка была 24 · --mp, стала 32 · --mp — две трети названия.

   ВСЁ КРУПНЕЕ. Заодно подняты кегли остального мелкого текста страницы
   товара — каждое правило на своём месте, с пометкой. Сетка верхнего блока,
   ширины колонок и фигуры кнопок не менялись. Замер на окне 1440×900
   (--mp 0,971, --u 0,829):
     обработка под названием   24 · --mp  23,3px → 32 · --mp  31,1px
     описание                  15px              → 17 · --mp  16,5px (≥15)
     подписи шкал              19 · --u   15,8px → 22 · --u   18,2px
     подписи способов          12 · --mp  11,7px → 14 · --mp  13,6px (≥12)
     «Вес пачки», «Помол»      15px              → 17 · --mp  16,5px (≥15)
     чипы «200 г / 1 кг»       14 · --mp  13,6px → 16 · --mp  15,5px (≥15)
     поле помола               14 · --mp  13,6px → 16 · --mp  15,5px (≥15)
     «за 200 г» у цены         14 · --mp  13,6px → 16 · --mp  15,5px (≥14)
     сноски под кнопкой        11px              → 14 · --mp  13,6px (≥13)
     вкладки                   16 · --u   13,3px → 19 · --u   15,8px (≥15)
     характеристики            15 · --u   12,4px → 19 · --u   15,8px (≥15)
     текст «Описание»          16 · --u   13,3px → 19 · --u   15,8px (≥15)
   Подписи способов — только в верхнем блоке; во вкладке «Способы
   приготовления» кегль прежний.
   Пороги в скобках — для 1024–1366: там --mp и --u стоят на пороге, и без них
   на 1024 (это и iPad в альбомной ориентации) выходило 11,5–13,3px. На 1440
   и шире пороги не срабатывают, таблица выше верна. Замер на 1024×768,
   сервер → стало: обработка 19,7 → 26,2; шкалы 13,3 → 15,4; способы 9,8 → 12;
   чипы и помол 11,5 → 15; «В корзину» 13,1 → 15; «за 200 г» 12 → 14;
   сноски 11 → 13; вкладки 11,2 → 15; характеристики 10,5 → 15; «Описание»
   11,2 → 15. Кнопке «В корзину» порог дан тоже (16.09.2026): её кегль на 1440
   15,5px и не менялся, но на 1024–1366 был 13,1–14,7.
   Название, цена, зачёркнутая цена, плашка «−16%» и счётчик не трогались.
   Телефон — mobile/product-page.css, планшет — mobile/tablet.css, §6: там
   кегли в пикселях. */
.pdp-sub{font-family:var(--font-ui);font-weight:500;font-style:italic;
  font-size:calc(32 * var(--mp));line-height:1.3;color:var(--green-deep-2);
  margin-top:calc(8 * var(--mp))}


/* ==========================================================================
   ПРАВИЛО КНОПОК САЙТА

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

     .pbtn        главное действие, бордовая заливка
     .pbtn-green  главное действие, зелёная заливка
     .pbtn-line   второстепенное, зелёный контур той же фигуры
     .pbtn-white  главное на цветной плоскости, белая заливка
     .pbtn-lwhite второстепенное на цветной плоскости, белый контур

   Второстепенная кнопка отличается заливкой, а не формой.
   ========================================================================== */

.pbtn,.pbtn-green,.pbtn-line,.pbtn-white,.pbtn-lwhite{
  --btn-h:calc(52 * var(--u));
  --cap:calc(var(--btn-h) * 0.5556);
  display:inline-flex;align-items:center;justify-content:center;gap:calc(9 * var(--u));
  min-height:var(--btn-h);padding:0 calc(28 * var(--u));
  border:0;border-radius:0;cursor:pointer;text-decoration:none;white-space:nowrap;
  font-family:var(--font);font-weight:700;font-size:calc(16 * var(--u));
  transition:filter .2s,transform .2s;
  background-repeat:no-repeat;
  background-position:left center, right center, center;
  background-size:auto 100%, auto 100%, calc(100% - 2 * var(--cap)) 100%}

.pbtn:hover,.pbtn-green:hover,.pbtn-line:hover,
.pbtn-white:hover,.pbtn-lwhite:hover{filter:brightness(1.06);transform:translateY(-2px)}

.pbtn{color:#fff;background-image:url(img/cap-bordo-l.svg),url(img/cap-bordo-r.svg),
  linear-gradient(var(--cart),var(--cart))}
.pbtn-green{color:#fff;background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
  linear-gradient(var(--green-brand),var(--green-brand))}
.pbtn-white{color:var(--cart);background-image:url(img/cap-white-l.svg),url(img/cap-white-r.svg),
  linear-gradient(#fff,#fff)}

/* Контурные: середина — две тонкие линии сверху и снизу, внутри прозрачно. */
.pbtn-line,.pbtn-lwhite{
  background-position:left center, right center, center top, center bottom;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288), calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288)}
.pbtn-line{color:var(--green-deep-2);
  background-image:url(img/cap-lgreen-l.svg),url(img/cap-lgreen-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))}
.pbtn-lwhite{color:#fff;
  background-image:url(img/cap-lwhite-l.svg),url(img/cap-lwhite-r.svg),
    linear-gradient(#fff,#fff),linear-gradient(#fff,#fff)}

/* ---- высоты по месту ---- */
.pcard .pbtn{--btn-h:calc(48 * var(--u))}
.sc-cart .cart-go{--btn-h:calc(56 * var(--u));width:100%}
.sc-addr-acts .pbtn{--btn-h:calc(50 * var(--u));flex:1}
.sc-added-acts .pbtn{--btn-h:calc(50 * var(--u));flex:1;min-width:calc(170 * var(--u))}

/* «В корзине» — то же место, зелёная заливка */
.pcard .pbtn.add-to-cart-btn.is-in-cart{
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand))}

/* «Доставить сюда» в окне адреса — главное действие, зелёное */
.sc-addr-acts .pbtn{
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand))}

/* ==========================================================================
   Те же правила для кнопок, у которых свои классы
   ========================================================================== */

/* заливка */
.sc2026-page .btn-primary,
.sc2026-page .btn-secondary,
.sc2026-page .btn-dark,
.offcanvas .btn-primary,
.offcanvas .btn-dark,
.sc-checkout .bx-soa-cart-total-button-container .btn,
.about .ab-btn{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  display:inline-flex!important;align-items:center;justify-content:center;
  min-height:var(--btn-h);padding:0 calc(26 * var(--u));
  border:0!important;border-radius:0!important;box-shadow:none!important;
  cursor:pointer;text-decoration:none;white-space:nowrap;
  font-family:var(--font);font-weight:700;font-size:calc(16 * var(--u));
  color:#fff!important;transition:filter .2s,transform .2s;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center!important;
  background-size:auto 100%, auto 100%, calc(100% - 2 * var(--cap)) 100%!important;
  background-image:url(img/cap-bordo-l.svg),url(img/cap-bordo-r.svg),
    linear-gradient(var(--cart),var(--cart))!important}

/* зелёные среди них */
.sc-checkout .bx-soa-cart-total-button-container .btn,
.about .ab-btn{
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand))!important}
.sc-checkout .bx-soa-cart-total-button-container .btn{width:100%}

/* контур */
.sc2026-page .btn-outline-primary,
.sc2026-page .btn-outline-secondary,
.sc2026-page .btn-outline-dark,
.sc-added-more,
.sc-addr-cancel,
.about .ab-btn-line,
.sc-cart .promo-apply{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  display:inline-flex!important;align-items:center;justify-content:center;
  min-height:var(--btn-h);padding:0 calc(24 * var(--u));
  border:0!important;border-radius:0!important;box-shadow:none!important;
  cursor:pointer;text-decoration:none;white-space:nowrap;
  font-family:var(--font);font-weight:700;font-size:calc(15 * var(--u));
  color:var(--green-deep-2)!important;transition:filter .2s,transform .2s;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288), calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288)!important;
  background-image:url(img/cap-lgreen-l.svg),url(img/cap-lgreen-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))!important}

/* белый контур на цветной плоскости */
.about .ab-btn-ghost{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  display:inline-flex!important;align-items:center;justify-content:center;
  min-height:var(--btn-h);padding:0 calc(26 * var(--u));
  border:0!important;border-radius:0!important;color:#fff!important;
  font-family:var(--font);font-weight:700;font-size:calc(16 * var(--u));
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288), calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288)!important;
  background-image:url(img/cap-lwhite-l.svg),url(img/cap-lwhite-r.svg),
    linear-gradient(#fff,#fff),linear-gradient(#fff,#fff)!important}
/* «Выбрать кофе» на бордовой плоскости — белая заливка */
.about .ab-btn-white{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  color:var(--cart)!important;-webkit-mask:none!important;mask:none!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center!important;
  background-size:auto 100%, auto 100%, calc(100% - 2 * var(--cap)) 100%!important;
  background-image:url(img/cap-white-l.svg),url(img/cap-white-r.svg),
    linear-gradient(#fff,#fff)!important}

.sc2026-page .btn-primary:hover,.sc2026-page .btn-outline-primary:hover,
.offcanvas .btn-primary:hover,.sc-added-more:hover,.sc-addr-cancel:hover,
.about .ab-btn:hover,.about .ab-btn-line:hover,.about .ab-btn-ghost:hover,
.about .ab-btn-white:hover,.sc-cart .promo-apply:hover,
.sc-checkout .bx-soa-cart-total-button-container .btn:hover{
  filter:brightness(1.06);transform:translateY(-2px)}

/* ==========================================================================
   Поля ввода — та же фигура контуром
   ========================================================================== */
.sc-cart .promo-row input,
.sc-checkout .bx-soa-section input.form-control{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  min-height:var(--btn-h);padding:0 calc(20 * var(--u));
  border:0!important;border-radius:0!important;box-shadow:none!important;
  font-family:var(--font-ui);font-size:calc(15 * var(--u));
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288), calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288)!important;
  background-image:url(img/cap-lgreen-l.svg),url(img/cap-lgreen-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))!important}
/* Фокус этих полей — тоном, без прямоугольной обводки: блок «Фокус — тон,
   а не вторая рамка» ниже (правило «без обводки», BRAND-RULES §3.2). */


/* ==========================================================================
   ФОРМА: кнопки, поля, степперы, галочки — догоняем остальные места
   ========================================================================== */

/* Кнопки, у которых были свои правила с растянутой подложкой. */
.sc2026-page .pdp-buy .buy-cta,
.sc2026-page .pdp-buy .buy-cta:hover,
.pdp-buy .buy-cta,
.sc-basket .basket-btn-checkout,
.sc2026-page .bx-soa-cart-total-button-container .btn-primary,
.sc2026-page .btn-order-save,
.sc-checkout .btn-default,.sc-checkout .btn-primary,.sc-checkout .btn-lg,
.about .ab-btn:not(.ab-btn-line):not(.ab-btn-ghost):not(.ab-btn-white),
.about .ab-btn-white{
  /* :not(): у контурных и белой кнопок «О компании» (.ab-btn-line,
     .ab-btn-ghost, .ab-btn-white) тоже есть класс .ab-btn, а эта заливка
     с !important стоит позже их собственных правил (выше по файлу) —
     контурная кнопка первого экрана («Подобрать по вкусу», теперь
     «Пройти тест») получает зелёную заливку при зелёной надписи, а белый
     контур в бордовом блоке — зелёную заливку. Так уже на dev с выкладки
     16.09.2026 (site.css?v=1789549409), поэтому этот site.css выкладывать
     вместе с /company/about/index.php или раньше него. :not() поднимает
     вес селектора, поэтому белую кнопку тоже исключаем: её правило ниже
     иначе не достаёт. */
  --btn-h:calc(52 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  border:0!important;border-radius:0!important;box-shadow:none!important;
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center!important;
  background-size:auto 100%, auto 100%, calc(100% - 2 * var(--cap)) 100%!important}

.sc2026-page .pdp-buy .buy-cta,
.sc2026-page .pdp-buy .buy-cta:hover,
.pdp-buy .buy-cta,
.sc-basket .basket-btn-checkout,
.sc2026-page .bx-soa-cart-total-button-container .btn-primary,
.sc2026-page .btn-order-save,
.sc-checkout .btn-default,.sc-checkout .btn-primary,.sc-checkout .btn-lg{
  background-image:url(img/cap-bordo-l.svg),url(img/cap-bordo-r.svg),
    linear-gradient(var(--cart),var(--cart))!important}

.sc2026-page .pdp-buy .buy-cta.is-in-cart,
.sc2026-page .pdp-buy .buy-cta.is-in-cart:hover{
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand))!important}

.about .ab-btn:not(.ab-btn-line):not(.ab-btn-ghost):not(.ab-btn-white){
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
  linear-gradient(var(--green-brand),var(--green-brand))!important}
.about .ab-btn-white{color:var(--cart)!important;
  -webkit-mask:none!important;mask:none!important;
  background-image:url(img/cap-white-l.svg),url(img/cap-white-r.svg),
    linear-gradient(#fff,#fff)!important}

/* Наведение не меняет фигуру — только яркость. Прежние правила подменяли
   подложку целиком, из-за чего кнопка на hover возвращалась к старой форме. */
.pbtn:hover,.pbtn-green:hover,.pbtn-line:hover,.pbtn-white:hover,.pbtn-lwhite:hover,
.pdp-buy .buy-cta:hover,.about .ab-btn:hover,.about .ab-btn-white:hover,
.sc-checkout .btn-primary:hover,.sc-basket .basket-btn-checkout:hover{
  filter:brightness(1.06);transform:translateY(-2px)}

/* Фокус с клавиатуры — свечение по силуэту фигуры, прямоугольной обводки
   нет (правило «без обводки», BRAND-RULES §3.2). Многие из этих кнопок —
   ссылки (сортировка каталога, «В каталог», переключатель документов), и
   без этого правила они получали бы кольцо a:focus-visible из начала
   файла. На цветной плоскости (.pbtn-white/.pbtn-lwhite) свечение белое —
   зелёное на зелёном не видно. */
.pbtn:focus-visible,.pbtn-green:focus-visible,.pbtn-line:focus-visible,
.pdp-buy .buy-cta:focus-visible,.about .ab-btn:focus-visible,
.sc-checkout .btn-primary:focus-visible,.sc-basket .basket-btn-checkout:focus-visible,
.doc-nav a:focus-visible{
  outline:none;box-shadow:none;filter:drop-shadow(0 0 3px var(--green-brand))}
.pbtn-white:focus-visible,.pbtn-lwhite:focus-visible,.about .ab-btn-white:focus-visible{
  outline:none;box-shadow:none;filter:drop-shadow(0 0 3px #fff)}

/* Свечение не гаснет под курсором. Отклик на наведение тоже записан в
   filter (brightness), и такие правила часто тяжелее свечения:
   interactions.css повторяет класс — .pbtn-line.pbtn-line:hover (0,3,0),
   .sc2026-page .pdp-buy .buy-cta:hover — (0,4,0). Пока мышь лежала на
   кнопке, у пришедшего табом свечения не было, только затемнение
   (замечание проверяющего 16.09.2026 по сортировке каталога). Один раз
   !important вместо гонки весов по трём файлам: фокус главнее наведения,
   на время фокуса затемнение снимается. Список повторяет все правила
   свечения (grep 'drop-shadow(0 0 3px'); шапка, подвал и всплывашка корзины
   лежат вне .sc2026-page, поэтому названы отдельно. */
.sc2026-page button:hover:focus-visible,.sc2026-page [tabindex]:hover:focus-visible,
.sc-city-modal button:hover:focus-visible,.hd-city-btn:hover:focus-visible,
.pbtn:hover:focus-visible,.pbtn-green:hover:focus-visible,.pbtn-line:hover:focus-visible,
.pdp-buy .buy-cta:hover:focus-visible,.about .ab-btn:hover:focus-visible,
.sc-checkout .btn-primary:hover:focus-visible,.sc-basket .basket-btn-checkout:hover:focus-visible,
.doc-nav a:hover:focus-visible,.hd-ico:hover:focus-visible,.mnav-i:hover:focus-visible,
.hd-cat:hover:focus-visible,.scp button:hover:focus-visible,.cookie button:hover:focus-visible,
.modern-page-navigation > a:hover:focus-visible,a.fab:hover:focus-visible,
.smart-filter-form .sc-freset:hover:focus-visible,.smart-filter-form .sc-fchip-x:hover:focus-visible,
.smart-filter-form .sc-fmore:hover:focus-visible,
.smart-filter-form .smart-filter-slider-handle:hover:focus-visible,
.sc-cart .cart-drop:hover:focus-visible,.sc-checkout .sc-addr-edit:hover:focus-visible{
  filter:drop-shadow(0 0 3px var(--green-brand))!important}
/* На цветной плоскости — белое, как и без наведения. */
.pbtn-white:hover:focus-visible,.pbtn-lwhite:hover:focus-visible,.about .ab-btn-white:hover:focus-visible,
.site-foot .ft-acc:hover:focus-visible,.hero-b .hero-dots i:hover:focus-visible{
  filter:drop-shadow(0 0 3px #fff)!important}
/* Кляксы под маской — тон, свечение маска режет (см. .pcard .pacts .pact:focus-visible). */
.pcard .pacts .pact:hover:focus-visible{filter:brightness(.78) saturate(1.2)!important}

/* ==========================================================================
   ПОЛЯ ВВОДА — та же фигура контуром
   ========================================================================== */
.sc-cart .promo-row input,
.sc-checkout .bx-soa-section input.form-control,
.sc-checkout .bx-soa-section select.form-control,
.sc-addr .sc-field input,
.sc-addr-modal .sc-field input,
/* Галочки и радио под это правило не подпадают — у них своя форма. */
.b2b-form input:not([type=checkbox]):not([type=radio]),
.b2b-form select{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  min-height:var(--btn-h);height:var(--btn-h);
  padding:0 calc(20 * var(--u));
  border:0!important;border-radius:0!important;box-shadow:none!important;
  font-family:var(--font-ui);font-size:calc(15 * var(--u));color:var(--ink);
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288), calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288)!important;
  background-image:url(img/cap-lgreen-l.svg),url(img/cap-lgreen-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))!important}

/* Многострочные поля фигурой не рисуем: растянутая по высоте, она читается
   как овал. Оставляем ту же линию прямой рамкой. */
.sc-checkout .bx-soa-section textarea.form-control,
.sc-addr-modal .sc-field textarea,
.b2b-form textarea{
  border:1.6px solid var(--green-brand)!important;border-radius:calc(20 * var(--u))!important;
  background:none!important;padding:calc(14 * var(--u)) calc(20 * var(--u))!important;
  font-family:var(--font-ui);font-size:calc(15 * var(--u));min-height:calc(96 * var(--u))}

/* Фокус полей и списков — тоном, без прямоугольной обводки (правило «без
   обводки», BRAND-RULES §3.2): блок «Фокус — тон, а не вторая рамка» ниже,
   многострочные — сменой цвета рамки там же. */

/* ==========================================================================
   СТЕПЕР — счётчик количества той же фигурой
   ========================================================================== */
.sc-cart .qty{
  --btn-h:calc(44 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  display:flex;align-items:center;border:0;border-radius:0;overflow:visible;
  height:var(--btn-h);padding:0 calc(6 * var(--u));
  background-repeat:no-repeat;
  background-position:left center, right center, center top, center bottom;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288), calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288);
  background-image:url(img/cap-lgreen-l.svg),url(img/cap-lgreen-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))}
.sc-cart .qty button{background:none;border:0;color:var(--green-deep-2);
  width:calc(34 * var(--u));height:100%;font-size:calc(19 * var(--u));
  cursor:pointer;border-radius:0}
.sc-cart .qty button:hover{background:none;color:var(--green-brand)}

/* ==========================================================================
   ГАЛОЧКИ — своя, вместо системной синей
   ========================================================================== */
.sc-cart .cart-check input,
.sc-check input,
.sc-checkout #bx-soa-orderSave input[type=checkbox],
.b2b-form input[type=checkbox]{
  appearance:none;-webkit-appearance:none;
  width:calc(22 * var(--u));height:calc(22 * var(--u));flex:none;margin:0;
  border:1.6px solid var(--green-brand);border-radius:calc(7 * var(--u));
  background:#fff;cursor:pointer;position:relative;
  transition:background-color .18s,border-color .18s}
.sc-cart .cart-check input:checked,
.sc-check input:checked,
.sc-checkout #bx-soa-orderSave input[type=checkbox]:checked,
.b2b-form input[type=checkbox]:checked{
  background:var(--green-brand);border-color:var(--green-brand)}
.sc-cart .cart-check input:checked::after,
.sc-check input:checked::after,
.sc-checkout #bx-soa-orderSave input[type=checkbox]:checked::after,
.b2b-form input[type=checkbox]:checked::after{
  content:'';position:absolute;left:calc(7 * var(--u));top:calc(3 * var(--u));
  width:calc(6 * var(--u));height:calc(11 * var(--u));
  border:solid #fff;border-width:0 calc(2.4 * var(--u)) calc(2.4 * var(--u)) 0;
  transform:rotate(45deg)}
/* Фокус с клавиатуры — свечение по силуэту галочки, прямоугольной обводки
   нет (правило «без обводки», §3.2). */
.sc-cart .cart-check input:focus-visible,
.sc-check input:focus-visible,
.b2b-form input[type=checkbox]:focus-visible{
  outline:none;filter:drop-shadow(0 0 3px var(--green-brand))}

/* ==========================================================================
   Страница «Для бизнеса»
   ========================================================================== */
.b2b{padding-bottom:calc(40 * var(--u))}
.b2b .page-head{display:none}

.b2b-hero{padding:calc(24 * var(--u)) 0 calc(30 * var(--u));max-width:calc(860 * var(--u))}
.b2b-hero h1{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:clamp(calc(34 * var(--u)),5.4vw,calc(64 * var(--u)));line-height:1.03;
  letter-spacing:-.015em;color:var(--ink);margin:0 0 calc(20 * var(--u))}
.b2b-hero h1 em{font-style:normal;color:var(--green-brand)}
.b2b .lead{font-size:calc(18 * var(--u));line-height:1.6;color:var(--ink);
  margin:0;max-width:calc(660 * var(--u))}
.b2b-acts{display:flex;flex-wrap:wrap;gap:calc(12 * var(--u));margin:calc(26 * var(--u)) 0 calc(24 * var(--u))}

.b2b-facts{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;
  gap:calc(10 * var(--u)) calc(22 * var(--u))}
.b2b-facts li{position:relative;padding-left:calc(16 * var(--u));
  font-size:calc(14.5 * var(--u));color:var(--ink-soft);line-height:1.4}
.b2b-facts li::before{content:'';position:absolute;left:0;top:calc(8 * var(--u));
  width:calc(6 * var(--u));height:calc(6 * var(--u));border-radius:50%;background:var(--green-brand)}
.b2b .b2b-note{font-size:calc(13 * var(--u));line-height:1.5;color:var(--ink-soft);
  margin:calc(14 * var(--u)) 0 0}

.b2b h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:clamp(calc(26 * var(--u)),3.6vw,calc(42 * var(--u)));line-height:1.06;
  color:var(--ink);margin:0 0 calc(20 * var(--u))}
.b2b h3{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(18 * var(--u));line-height:1.2;color:var(--ink);margin:0 0 calc(9 * var(--u))}
.b2b .ab-sub{font-size:calc(16.5 * var(--u));line-height:1.6;color:var(--ink-soft);
  margin:0 0 calc(24 * var(--u));max-width:calc(720 * var(--u))}

.b2b-what{margin-top:calc(56 * var(--u))}
.b2b-grid{display:grid;gap:calc(16 * var(--u))}
@media(min-width:700px){.b2b-grid{grid-template-columns:1fr 1fr}}
@media(min-width:1100px){.b2b-grid{grid-template-columns:repeat(4,1fr)}}
.b2b-card{background:#fff;border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  border-radius:calc(28 * var(--u));padding:calc(26 * var(--u));
  transition:box-shadow .25s,transform .25s}
.b2b-card:hover{box-shadow:var(--tile-shadow-hover);transform:translateY(-3px)}
.b2b-card p{font-size:calc(15 * var(--u));line-height:1.55;color:var(--ink-soft);margin:0}

.b2b-why{margin-top:calc(64 * var(--u));background:var(--green-deep);color:#fff;
  border-radius:calc(36 * var(--u));padding:calc(44 * var(--u)) calc(30 * var(--u));
  position:relative;overflow:hidden}
@media(min-width:960px){.b2b-why{padding:calc(54 * var(--u))}}
.b2b-why::before{content:'';position:absolute;right:calc(-40 * var(--u));top:calc(-30 * var(--u));
  width:calc(320 * var(--u));height:calc(272 * var(--u));
  background:url(img/banner-pattern-v.svg) no-repeat center/contain;opacity:.10;pointer-events:none}
.b2b-why > *{position:relative}
.b2b-why h2,.b2b-why h3{color:#fff}
.b2b-why p{font-size:calc(15.5 * var(--u));line-height:1.6;color:rgba(255,255,255,.86);margin:0}
.b2b-why-grid{display:grid;gap:calc(28 * var(--u))}
@media(min-width:860px){.b2b-why-grid{grid-template-columns:repeat(3,1fr);gap:calc(34 * var(--u))}}

.b2b-steps{margin-top:calc(64 * var(--u))}
.b2b-steps-list{list-style:none;margin:0;padding:0;display:grid;gap:calc(18 * var(--u))}
@media(min-width:860px){.b2b-steps-list{grid-template-columns:1fr 1fr;gap:calc(24 * var(--u)) calc(40 * var(--u))}}
.b2b-steps-list li{display:flex;gap:calc(16 * var(--u));align-items:flex-start}
.b2b-steps-list .num{flex:none;width:calc(38 * var(--u));height:calc(38 * var(--u));
  border-radius:50%;background:var(--green-pale);color:var(--green-deep-2);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font);font-weight:900;font-size:calc(17 * var(--u))}
.b2b-steps-list b{display:block;font-family:var(--font);font-weight:700;
  font-size:calc(16.5 * var(--u));color:var(--ink);margin-bottom:calc(5 * var(--u))}
.b2b-steps-list p{font-size:calc(15 * var(--u));line-height:1.55;color:var(--ink-soft);margin:0}

/* ---- заявка ---- */
.b2b-apply{margin-top:calc(64 * var(--u));display:grid;gap:calc(20 * var(--u));align-items:start}
@media(min-width:960px){.b2b-apply{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:calc(28 * var(--u))}}
.b2b-form-box{background:#fff;border:1px solid var(--tile-line);box-shadow:var(--tile-shadow);
  border-radius:calc(32 * var(--u));padding:calc(36 * var(--u)) calc(30 * var(--u))}
@media(min-width:760px){.b2b-form-box{padding:calc(44 * var(--u))}}
.b2b-form{margin-top:calc(24 * var(--u))}
.b2b-form .fld{margin:0 0 calc(18 * var(--u))}
.b2b-form .fld-2{display:grid;gap:0 calc(16 * var(--u))}
@media(min-width:620px){.b2b-form .fld-2{grid-template-columns:1fr 1fr}}
.b2b-form label{display:block;font-weight:700;font-size:calc(13.5 * var(--u));
  color:var(--ink-soft);margin-bottom:calc(7 * var(--u))}
.b2b-form label .opt{font-weight:400;color:#9a9a93}
.b2b-form input,.b2b-form select,.b2b-form textarea{width:100%}
.b2b-form select{appearance:none;-webkit-appearance:none;cursor:pointer;
  padding-right:calc(44 * var(--u))}
.b2b-form .err{display:block;margin-top:calc(6 * var(--u));font-size:calc(13 * var(--u));
  line-height:1.4;color:#b3261e}
.b2b-form .err:empty{display:none}
.b2b-consent{margin:calc(6 * var(--u)) 0 0;align-items:flex-start;gap:calc(11 * var(--u))}
.b2b-consent span{font-size:calc(14 * var(--u));line-height:1.5;color:var(--ink-soft)}
.b2b-consent a{color:var(--green-brand);font-weight:700}
.b2b-submit{margin:calc(22 * var(--u)) 0 0}
.b2b-submit .pbtn-green{width:100%;--btn-h:calc(56 * var(--u))}

/* Ловушка для роботов: убрана с экрана, но доступна разметке. */
.b2b-hp{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
  clip-path:inset(50%);white-space:nowrap}

.b2b-done h3{font-size:calc(24 * var(--u));color:var(--green-deep-2);outline:none}
.b2b-done p{font-size:calc(16 * var(--u));line-height:1.6;color:var(--ink);
  margin:0 0 calc(10 * var(--u))}
.b2b-done a{color:var(--green-brand);font-weight:700}

.b2b-side{background:var(--bg-soft);border-radius:calc(32 * var(--u));
  padding:calc(30 * var(--u)) calc(26 * var(--u))}
.b2b-side p{font-size:calc(15 * var(--u));line-height:1.55;color:var(--ink-soft);
  margin:0 0 calc(14 * var(--u))}
.b2b-phones{display:flex;flex-direction:column;gap:calc(6 * var(--u))}
.b2b-phones a{font-family:var(--font);font-weight:900;font-size:calc(20 * var(--u));
  color:var(--green-deep-2);text-decoration:none}
.b2b-phones a:hover{color:var(--green-brand)}
.b2b-side .pbtn-line{width:100%;margin-bottom:calc(14 * var(--u))}

/* ---- контакты ---- */
.b2b-contacts{margin-top:calc(64 * var(--u))}
.b2b-contacts-grid{display:grid;gap:calc(22 * var(--u))}
@media(min-width:760px){.b2b-contacts-grid{grid-template-columns:repeat(3,1fr);gap:calc(30 * var(--u))}}
.b2b-contacts-grid b{display:block;font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(15 * var(--u));color:var(--green-deep-2);
  margin-bottom:calc(9 * var(--u))}
.b2b-contacts-grid p{font-size:calc(15 * var(--u));line-height:1.65;color:var(--ink-soft);margin:0}
.b2b-contacts-grid a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line)}
.b2b-contacts-grid a:hover{color:var(--green-brand);border-color:var(--green-brand)}
.b2b .ab-legal{margin-top:calc(28 * var(--u));font-size:calc(13 * var(--u));color:var(--ink-soft)}
.b2b .ab-legal a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid var(--line)}

@media(max-width:599px){
  .b2b-acts .pbtn-green,.b2b-acts .pbtn-line{width:100%}
  .b2b-why,.b2b-form-box,.b2b-side{padding-left:calc(22 * var(--u));padding-right:calc(22 * var(--u));
    border-radius:calc(28 * var(--u))}
}


/* ---------- карта точек ---------- */
.sc-map .map-live{position:absolute;inset:0;opacity:0;transition:opacity .35s;
  border-radius:inherit;overflow:hidden}
.sc-map .map-box.map-on .map-live{opacity:1}
.sc-map .map-box.map-on .pat,
.sc-map .map-box.map-on .map-note{opacity:0;pointer-events:none;transition:opacity .25s}
.sc-map .map-live .ymaps-2-1-79-map,
.sc-map .map-live [class*="-ground-pane"]{border-radius:inherit}
/* Логотип и копирайт Яндекса убирать нельзя — только не даём им наезжать
   на скруглённый угол панели. */
.sc-map .map-live [class*="-copyrights-pane"]{padding-right:calc(10 * var(--u))}


/* ---------- наведение на карточку: шкалы -> оценка и букет ---------- */

/* «Кофе недели» — четвёртая плашка. Цвет фирменный зелёный, чтобы
   в столбике плашек она не спорила с бордовым «Хитом». */
.t-week{background-image:url(img/cap-tag-green-l.svg),url(img/cap-tag-green-r.svg),
  linear-gradient(var(--green-brand),var(--green-brand));color:#fff}



/* ---------- миниатюры фотографий на детальной ---------- */
.pdp-thumbs{position:absolute;left:0;top:calc(30 * var(--mp));z-index:2;
  display:flex;flex-direction:column;gap:calc(10 * var(--mp))}
.pdp-thumbs button{width:calc(64 * var(--mp));height:calc(64 * var(--mp));padding:0;
  border:1.5px solid var(--tile-line);border-radius:calc(14 * var(--mp));
  background:#fff;cursor:pointer;overflow:hidden;display:flex;
  align-items:center;justify-content:center;transition:border-color .2s,transform .2s}
.pdp-thumbs button:hover{transform:translateY(-2px)}
.pdp-thumbs button.on{border-color:var(--green-brand)}
.pdp-thumbs img{max-width:86%;max-height:86%;object-fit:contain}
.pdp-pack{transition:opacity .2s ease}
/* Телефон и планшет: миниатюры — под фотографией.
   .pdp-photo — flex-строка (site.css:711), и статичные миниатюры вставали
   не под пачкой, а РЯДОМ с ней. Пара «миниатюры + фото» шире колонки,
   а justify-content:center разносил её в обе стороны: первая миниатюра
   уходила за левый край экрана, фото — за правый и обрезалось
   (замер 16.09.2026 на 375: миниатюры −29…84, фото 84…404 при колонке
   27…348). Поэтому складываем сам .pdp-photo в колонку, а миниатюрам
   даём order:2: в разметке они идут ПЕРЕД снимком (шаблон детальной,
   строка 495), и без order лента встала бы над фото, а не под ним.
   flex-wrap: фотографий сейчас по две, но при трёх и более лента не
   должна вылезать за край — лишние переносятся на второй ряд.
   margin пишем сокращённо: прежнее правило давало margin-bottom, а в
   колонке отступ нужен сверху — от фотографии. Величина — явные 10px,
   а не calc(14 * var(--u)): при ширине до 1099 --u стоит на своём полу
   0,70px (см. шапку mobile/tablet.css), то есть «14» на телефоне и
   планшете давало 9,8px. Оставляем тот же зазор, но числом, которое
   означает то, что написано.
   Зёрна (.pdp-bean) здесь скрыты (site.css:1098), порядок им не важен.
   Десктоп (от 1100) не трогаем: там миниатюры так и лежат столбиком
   поверх левого края снимка, как в макете. */
@media(max-width:1099px){
  .pdp-photo{flex-direction:column;align-items:center}
  .pdp-thumbs{position:static;order:2;flex-direction:row;flex-wrap:wrap;
    justify-content:center;max-width:100%;
    margin:10px 0 0}
}


/* ---------- нет в наличии ---------- */
.t-out{background-image:url(img/cap-tag-grey-l.svg),url(img/cap-tag-grey-r.svg),
  linear-gradient(#e6e6e6,#e6e6e6);color:#4a4a4a}
.pcard .pbtn.is-out,
.pdp-buy .pbtn.is-out{
  filter:grayscale(1);opacity:.62;cursor:default;pointer-events:none;
  background-image:url(img/cap-bordo-l.svg),url(img/cap-bordo-r.svg),
    linear-gradient(var(--cart),var(--cart))!important}
.pcard .pbtn.is-out:hover,
.pdp-buy .pbtn.is-out:hover{transform:none;filter:grayscale(1)}
/* Карточка без товара приглушена целиком, но остаётся читаемой: покупатель
   должен видеть, что позиция есть и вернётся. */
.pcard:has(.ptag.t-out) .pimg img{filter:grayscale(.55);opacity:.85}

/* На складе другого города. Товар продаётся как обычно, поэтому плашка
   спокойная, без приглушения карточки — это срок доставки, а не отказ. */
/* «Плашка не единого цвета» (Герман 17.09.2026): колпачки были жёлтые, а
   середина бежевая. Теперь один цвет по всей фигуре — светло-серый из
   того же набора колпачков (жёлтый уже занят «С молоком»). */
.t-order{background-image:url(img/cap-tag-grey-l.svg),url(img/cap-tag-grey-r.svg),
  linear-gradient(#e6e6e6,#e6e6e6);color:#1a1a1a}


/* Подпись фасовки на миниатюре: видно, какой снимок к какой пачке. */
.pdp-thumbs button{position:relative}
.pdp-thumbs button i{position:absolute;left:0;right:0;bottom:0;
  font-style:normal;font-family:var(--font-ui);font-weight:600;
  font-size:calc(9.5 * var(--mp));line-height:1;padding:calc(3 * var(--mp)) 0;
  background:var(--green-deep-2);color:#fff;text-align:center;letter-spacing:.02em}


/* ---------- карта офисов на контактах ---------- */
.sc-contacts-map{border:1px solid var(--tile-line);border-radius:calc(28 * var(--u));
  background:var(--bg-soft);min-height:calc(220 * var(--u));
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:calc(12 * var(--u));padding:calc(28 * var(--u));text-align:center}
.sc-contacts-map .sc-map-open{cursor:pointer;border:0;color:#fff}
.sc-contacts-map .sc-map-hint{font-size:calc(14 * var(--u));color:var(--ink-soft);margin:0}
.sc-contacts-map.is-loading .sc-map-open{opacity:.6;pointer-events:none}
/* Когда карта построена, коробка отдаёт ей всю площадь. */
.sc-contacts-map:has(.sc-map-canvas){padding:0;display:block;min-height:0;overflow:hidden}
.sc-map-canvas{width:100%;height:calc(420 * var(--u));min-height:300px}


/* ---------- коробочный блок «Самовывоз» ----------
   Адрес самовывоза показан выше, в блоке адреса; второй такой же блок
   со своим списком складов и картой не нужен. Узел оставлен, потому что
   скрипт оформления обращается к нему по id. */
.sc-checkout #bx-soa-pickup,
.sc2026-page #bx-soa-pickup{display:none!important} /* коробочный самовывоз */


/* ==========================================================================
   ВЫБОР ГОРОДА
   Кнопка стоит слева от избранного и корзины — там его ищут глазами.
   ========================================================================== */
/* Город, кабинет, «Избранное» и «Корзина» — одна группа с равным
   промежутком 12, как Frame 264 в макете. Раньше город стоял отдельным
   столбцом шапки, и между ним и иконками вставал общий промежуток шапки
   (40) — расстояния получались разные. */
.hd-tools{display:flex;align-items:flex-start;gap:calc(12 * var(--u));
  flex:none;margin-left:auto}
.hd-city{position:relative;display:flex;align-items:center;flex:none}
/* Город — столбец, как «Избранное» и «Корзина» в макете: значок сверху,
   подпись снизу, кегль 17 Medium фирменным зелёным. */
/* К верху, как «Кабинет» и «Корзина»: центрирование по вертикали опускало
   значок города на 4 px ниже соседних — высота кнопки больше содержимого,
   и запас делился на верх и низ. */
.hd-city-btn{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  gap:calc(3 * var(--u));border-radius:0;
  background:none;border:0;cursor:pointer;color:var(--green-deep-2);
  padding:calc(6 * var(--u)) calc(10 * var(--u));border-radius:calc(12 * var(--u));
  transition:background-color .18s}
.hd-city-btn:hover{background:var(--green-pale)}
.hd-city-wrap{display:flex;flex-direction:column;align-items:center;line-height:1.15}
.hd-city-wrap i{font-style:normal;font-size:calc(11 * var(--u));color:var(--ink-soft)}
.hd-city-wrap b{font-family:var(--font);font-weight:500;font-size:calc(17 * var(--u));
  color:var(--green-brand);text-align:center;white-space:nowrap;
  white-space:nowrap}
@media(max-width:900px){.hd-city-wrap i{display:none}}

/* всплывашка «Ваш город — …?» */
.hd-city-confirm{position:absolute;top:calc(100% + 10 * var(--u));left:0;z-index:60;
  width:calc(268 * var(--u));background:#fff;border:1px solid var(--tile-line);
  border-radius:calc(18 * var(--u));padding:calc(16 * var(--u));
  box-shadow:0 14px 34px rgba(20,40,20,.16);
  opacity:0;transform:translateY(calc(-6 * var(--u)));transition:opacity .2s,transform .2s}
.hd-city-confirm.on{opacity:1;transform:none}
.hd-city-confirm p{margin:0 0 calc(12 * var(--u));font-size:calc(15 * var(--u));color:var(--ink)}
.hd-city-confirm b{font-weight:700;color:var(--green-deep-2)}
.hd-city-confirm-btns{display:flex;gap:calc(8 * var(--u))}
.hd-city-confirm-btns .pbtn,
.hd-city-confirm-btns .pbtn-line{font-size:calc(13 * var(--u));
  padding:calc(10 * var(--u)) calc(14 * var(--u));white-space:nowrap;cursor:pointer}
@media(max-width:700px){.hd-city-confirm{left:auto;right:0}}

/* модалка со списком */
.sc-city-modal{position:fixed;inset:0;z-index:1000;display:flex;
  align-items:center;justify-content:center;padding:calc(20 * var(--u));
  opacity:0;transition:opacity .2s}
.sc-city-modal.on{opacity:1}
.sc-city-back{position:absolute;inset:0;background:rgba(16,28,18,.45)}
.sc-city-box{position:relative;background:#fff;border-radius:calc(28 * var(--u));
  padding:calc(28 * var(--u));width:min(calc(560 * var(--u)), 100%);
  max-height:82vh;overflow:auto;box-shadow:0 24px 60px rgba(16,28,18,.28)}
.sc-city-x{position:absolute;top:calc(16 * var(--u));right:calc(16 * var(--u));
  width:calc(34 * var(--u));height:calc(34 * var(--u));border:0;border-radius:50%;
  background:var(--bg-soft);color:var(--ink-soft);cursor:pointer;
  display:flex;align-items:center;justify-content:center}
.sc-city-x:hover{background:var(--green-pale);color:var(--green-deep-2)}
.sc-city-box h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(24 * var(--u));margin:0 0 calc(6 * var(--u));color:var(--green-deep-2)}
.sc-city-note{margin:0 0 calc(18 * var(--u));font-size:calc(14 * var(--u));color:var(--ink-soft)}
.sc-city-box input[type=search]{margin-bottom:calc(18 * var(--u))}
.sc-city-major{display:flex;flex-wrap:wrap;gap:calc(8 * var(--u));
  margin-bottom:calc(20 * var(--u));padding-bottom:calc(18 * var(--u));
  border-bottom:1px solid var(--tile-line)}
.sc-city-major button{font-family:var(--font-ui);font-weight:700;
  font-size:calc(14 * var(--u));padding:calc(10 * var(--u)) calc(18 * var(--u));
  border:1.5px solid var(--green-brand);border-radius:999px;background:#fff;
  color:var(--green-deep-2);cursor:pointer;transition:background-color .18s,color .18s}
.sc-city-major button:hover{background:var(--green-brand);color:#fff}
.sc-city-list{list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(150 * var(--u)),1fr));
  gap:calc(2 * var(--u))}
.sc-city-list li[hidden]{display:none}
.sc-city-list button{width:100%;text-align:left;background:none;border:0;cursor:pointer;
  font-size:calc(15 * var(--u));color:var(--ink);
  padding:calc(9 * var(--u)) calc(10 * var(--u));border-radius:calc(10 * var(--u))}
.sc-city-list button:hover{background:var(--green-pale);color:var(--green-deep-2)}


/* ==========================================================================
   ФОКУС: без обводки, свечение по силуэту

   Голубая рамка браузера выбивалась из оформления везде, где поле не попало
   под правило формы. Гасим её. Своя прямоугольная рамка (outline в цвет
   бренда) тоже не годится: Chrome даёт :focus-visible списку <select> и по
   щелчку мышью, и вокруг рисованной фигуры со скосом вставал зелёный
   прямоугольник (Герман 16.09.2026, поле помола в каталоге). Отсюда
   правило «без обводки» (BRAND-RULES §3.2): у полей, списков, кнопок,
   чипсов, ручек и значков-кнопок outline нет никогда, а фокус с клавиатуры
   показывает свечение по силуэту — drop-shadow идёт по контуру нарисованной
   фоном формы, а не по прямоугольнику коробки. Где у поля своя реакция
   тоном (блок «Фокус — тон, а не вторая рамка», поиск в шапке), она
   перебивает это правило весом или порядком.

   Только :focus-visible: щёлкнул мышью по кнопке — ничего, пришёл табом —
   свечение. Совсем убирать нельзя, иначе с клавиатуры не видно, где
   находишься.
   ========================================================================== */
.sc2026-page input:focus,
.sc2026-page select:focus,
.sc2026-page textarea:focus,
.sc2026-page button:focus,
.sc2026-page [tabindex]:focus,
.sc-city-modal input:focus,
.sc-city-modal button:focus,
.hd-city-btn:focus,
.hd-search input:focus{outline:none;box-shadow:none}

.sc2026-page input:focus-visible,
.sc2026-page select:focus-visible,
.sc2026-page textarea:focus-visible,
.sc2026-page button:focus-visible,
.sc2026-page [tabindex]:focus-visible,
.sc-city-modal input:focus-visible,
.sc-city-modal button:focus-visible,
.hd-city-btn:focus-visible{
  outline:none;box-shadow:none;filter:drop-shadow(0 0 3px var(--green-brand))}

/* Поиск города — под общее правило полей: своя форма со скосом вместо
   браузерной рамки, из-за которой поле и выглядело чужим. */
.sc-city-box input[type=search]{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  width:100%;min-height:var(--btn-h);height:var(--btn-h);
  padding:0 calc(20 * var(--u));
  border:0!important;border-radius:0!important;box-shadow:none!important;
  font-family:var(--font-ui);font-size:calc(15 * var(--u));color:var(--ink);
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288),
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * 0.0288)!important;
  background-image:url(img/cap-lgreen-l.svg),url(img/cap-lgreen-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))!important}

/* ==========================================================================
   «Мы проложили путь первыми» — лента лет (макет: Desktop - 236)

   Было три шага текстом. В макете это горизонтальная лента карточек по
   годам: одна раскрыта (555×456, фото слева, текст справа), остальные
   свёрнуты (210×456, только заголовок над фотографией). Под лентой —
   шкала 2009–2025 с точками.

   Окантовка здесь оранжевая — единственное место на странице, где она
   не зелёная.
   ========================================================================== */
.pathsec{padding-top:0}
.path-head h2{font-family:var(--font);font-weight:900;font-size:calc(40 * var(--u));
  line-height:1.1;text-transform:uppercase}
.path-head h2 em{font-style:normal;color:var(--green-brand)}
.path-head p{margin-top:calc(12 * var(--u));font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));line-height:1.3;max-width:calc(440 * var(--u))}

/* лента */
.path-row{display:flex;gap:calc(20 * var(--u));margin-top:calc(68 * var(--u));
  overflow-x:auto;overflow-y:visible;padding-bottom:calc(8 * var(--u));
  scrollbar-width:none}
.path-row::-webkit-scrollbar{display:none}

.pcrd{position:relative;flex:0 0 auto;box-sizing:border-box;
  width:calc(210 * var(--u));height:calc(456 * var(--u));
  /* Рамку рисует wavy.js живым штрихом — в макете он оранжевый и на
     914 узлов. Оранжевый оттуда же (#f47920), а не из --orange-2:
     там #f36d0c, рядом разница заметна. */
  border:0;
  border-radius:calc(36 * var(--u));background:transparent;
  padding:0;text-align:left;cursor:pointer;
  transition:width .42s var(--ease)}
/* Год стоит над карточкой, поэтому саму карточку не обрезаем —
   обрезается только фотография внутри. */
.pcrd[data-year]::before{content:attr(data-year);position:absolute;
  top:calc(-34 * var(--u));left:0;
  font-family:var(--font);font-weight:900;font-size:calc(20 * var(--u));
  line-height:1;color:var(--green-brand)}

.pc-ph{position:absolute;overflow:hidden;background:#fff;
  left:calc(-128 * var(--u));top:calc(80 * var(--u));
  width:calc(373 * var(--u));height:calc(384 * var(--u));
  border:calc(6 * var(--u)) solid #fff;
  transition:all .42s var(--ease)}
.pc-ph img{width:100%;height:100%;object-fit:cover;display:block}

.pcrd > :not(.wavy){position:relative;z-index:1}
.pc-in{position:absolute;inset:0;display:block}
.pc-h{display:block;position:absolute;top:calc(18 * var(--u));left:0;right:0;
  text-align:center;font-family:var(--font);font-weight:900;
  font-size:calc(24 * var(--u));line-height:1.1;text-transform:uppercase;
  color:var(--green-brand)}
.pc-t,.pc-meta{display:none}

/* раскрытая карточка */
.pcrd.is-open{width:calc(555 * var(--u))}
.pcrd.is-open .pc-ph{left:calc(14 * var(--u));top:calc(14 * var(--u));
  width:calc(309 * var(--u));height:calc(424 * var(--u));
  border-width:calc(8 * var(--u));border-radius:calc(36 * var(--u))}
.pcrd.is-open .pc-in{left:calc(342 * var(--u));right:auto;top:50%;bottom:auto;
  transform:translateY(-50%);width:calc(190 * var(--u));
  display:flex;flex-direction:column;gap:calc(60 * var(--u))}
.pcrd.is-open .pc-body{display:flex;flex-direction:column;gap:calc(6 * var(--u))}
.pcrd.is-open .pc-h{position:static;text-align:left}
.pcrd.is-open .pc-t{display:block;font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));line-height:1.3;color:#000}
.pcrd.is-open .pc-meta{display:flex;flex-direction:column;gap:calc(8 * var(--u));
  width:calc(124 * var(--u))}
.pc-m{display:flex;align-items:center;gap:calc(12 * var(--u))}
.pc-m img{width:calc(20 * var(--u));height:calc(20 * var(--u));flex:none}
.pc-m b{font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--u));
  line-height:1.3;color:#000;white-space:nowrap}

/* шкала лет */
.path-scale{margin-top:calc(48 * var(--u))}
.path-dots{position:relative;display:flex;justify-content:space-between;align-items:center;
  padding:0 calc(6 * var(--u))}
.path-dots::before{content:'';position:absolute;left:0;right:0;top:50%;height:calc(6 * var(--u));
  transform:translateY(-50%);background:#e6e6e6;border-radius:999px}
.path-dots i{position:relative;z-index:2;width:calc(20 * var(--u));height:calc(20 * var(--u));
  border-radius:50%;background:#e6e6e6}
.path-dots i.on{background:var(--green-brand)}
.path-years{display:flex;justify-content:space-between;margin-top:calc(10 * var(--u))}
.path-years i{font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--u));
  font-style:normal;color:#8a8a8a}
.path-years i.on{color:var(--green-brand);font-weight:700}

@media(max-width:900px){
  .pcrd{width:calc(150 * var(--u));height:calc(330 * var(--u))}
  .pcrd.is-open{width:calc(88vw)}
  .path-years i{font-size:calc(11 * var(--u))}
}


/* ---- левая колонка квиза по макету (Frame 546) ----
   Было: строка «Вопрос 1 из 3», заголовок помельче, наполняющаяся чашка
   и полоса из трёх сегментов. В макете — цифра шага в зелёном кружке,
   вопрос Black 40 с последним словом зелёным и дорожка из четырёх точек.
   Чашки в макете нет: её место занимает фотография справа. */
.quizsec .q-step{display:flex;align-items:center;justify-content:center;
  width:calc(51 * var(--u));height:calc(51 * var(--u));border-radius:50%;
  background:var(--green-brand);color:#fff;
  font-family:var(--font);font-weight:700;font-size:calc(28 * var(--u));line-height:1}
.quizsec .q-title{margin-top:calc(12 * var(--u));
  font-family:var(--font);font-weight:900;font-size:calc(40 * var(--u));
  line-height:1.1;text-transform:uppercase;color:#000}
.quizsec .q-title em{font-style:normal;color:var(--green-brand)}
.quizsec .q-cup{display:none}
.quizsec .q-prog{position:relative;display:flex;align-items:center;justify-content:space-between;
  width:calc(188 * var(--u));margin-top:calc(16 * var(--u))}
.quizsec .q-prog::before{content:'';position:absolute;left:calc(10 * var(--u));
  right:calc(10 * var(--u));top:50%;height:calc(3 * var(--u));transform:translateY(-50%);
  background:var(--green-brand);border-radius:999px}
.quizsec .q-prog i{position:relative;z-index:2;width:calc(20 * var(--u));height:calc(20 * var(--u));
  border-radius:50%;background:#fff;border:calc(3 * var(--u)) solid var(--green-brand);
  box-sizing:border-box}
.quizsec .q-prog i.on{background:linear-gradient(90deg,var(--green-brand) 50%,#fff 50%)}
.quizsec .q-prog i.done{background:var(--green-brand)}


/* ---- живая обводка (wavy.js) ----
   Контур рисуется скриптом под фактический размер блока. Здесь только
   размещение слоёв: заливка уходит за содержимое, обводка — поверх. */
/* max-width:none обязателен: в теме есть общее правило svg{max-width:100%},
   и оно обрезало фигуру с вылетом ровно по ширине блока — верхняя полоса
   не доходила до правого края экрана. */
.wavy{position:absolute;inset:0;width:100%;height:100%;max-width:none;
  overflow:visible;pointer-events:none;z-index:5}
.wavy.wavy-fill{z-index:0}
.pcard > :not(.wavy):not(.ptags),.qc > :not(.wavy){position:relative;z-index:1}
.pcard .ptags{z-index:6}


/* ---- карточка в результате теста ----
   Подбор показывает те же товары, значит и выглядеть должен так же:
   белая карточка с живой обводкой, зелёный заголовок, та же типографика.
   Раньше это была отдельная карточка с цветной полосой. */
.qr-card{background:transparent;border:0;box-shadow:none}
.qr-card h4{font-family:var(--font);font-weight:900;font-size:calc(21 * var(--u));
  line-height:1.1;text-transform:uppercase;color:var(--green-brand)}
.qr-card p{font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--u));
  line-height:1.3;color:#000}
.qr-card .qr-price{font-family:var(--font);font-weight:900;font-size:calc(24 * var(--u));
  color:var(--green-brand);line-height:1.1}
.qr-card .qr-price small{display:block;font-family:var(--font-ui);font-weight:400;
  font-size:calc(13 * var(--u));color:#000;margin-top:calc(4 * var(--u))}
.qr-card > :not(.wavy){position:relative;z-index:1}


/* ---- верхняя полоса (Frame 523: 1440×32) ----
   Фон прозрачный: зелёную заливку вместе с рваным краем рисует wavy.js.
   Иначе ровный прямоугольник просвечивал бы из-под неровной кромки. */
.topbar{position:relative;display:flex;align-items:center;
  /* Во всю ширину окна: в макете полоса идёт от края до края, а шапка
     лежит в контейнере с полями. */
  width:100vw;margin-left:calc(50% - 50vw);max-width:100vw;
  height:calc(32 * var(--u));padding:0;
  /* Заливку даёт SVG с рваным краем. Фон гасим жёстко: в теме есть
     правило, которое красит полосу сплошным зелёным, и оно перебивало
     обычный transparent — рваного края просто не было видно. */
  background:none !important;color:#fff;
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--u));line-height:1.15}
.topbar > :not(.wavy){position:relative;z-index:1}
/* Поля ровно те же, что у .container + .mac на странице, — тогда «Бесплатная
   доставка» начинается под логотипом, а телефон кончается под «Корзиной». */
.tb-in{display:flex;align-items:center;justify-content:space-between;
  gap:calc(20 * var(--u));width:100%;height:100%;
  max-width:var(--wrap-w);margin:0 auto;padding:0 calc(48 * var(--u))}
.topbar p{margin:0;white-space:nowrap}
.topbar a{color:#fff}
.topbar a:hover{color:#fff;opacity:.85}
.topbar .tb-r i{font-style:normal;margin:0 calc(10 * var(--u));opacity:.75}
/* На узком экране левая половина уходит: телефон и города нужнее. */
@media(max-width:900px){
  .topbar{justify-content:center;font-size:calc(14 * var(--u));padding:0 16px}
  .topbar .tb-l{display:none}
}


/* ==========================================================================
   КАРТОЧКА ТОВАРА — макет «Desktop - 222», карточка 325×584 при ширине 1440.

   Все размеры записаны числами из макета и умножены на --cp — «пиксель
   карточки». Он считается от ширины ячейки сетки, а не от ширины окна:
   плашка, шкала и кнопка держат свою долю карточки на любой ширине.
   Раньше внутренности мерились в --u (доля окна) — при сужении сетки
   карточка сжималась, а плашки оставались прежними, и всё разъезжалось.
   ========================================================================== */
.pcard{--cp:var(--u)}
@supports (container-type:inline-size){
  .pgrid-cell{container-type:inline-size}
  .pgrid-cell > .pcard{--cp:calc(100cqw / 325)}
}

.pcard{position:relative;background:transparent;border:0;
  border-radius:calc(36 * var(--cp));padding:calc(20 * var(--cp));
  display:flex;flex-direction:column;
  transition:transform .35s var(--ease),box-shadow .35s ease}
.pcard:hover{transform:translateY(-5px)}

/* ---- плашки: высота 40, вынесены за угол на 16 влево и 13,5 вверх ---- */
.pcard .ptags{position:absolute;top:calc(-11 * var(--cp));left:calc(-13 * var(--cp));
  display:flex;flex-direction:column;gap:calc(6 * var(--cp));
  align-items:flex-start;z-index:6}
/* Плашка ниже макетных 40: на живых названиях в два слова она забирала
   верх карточки на себя. Колпачок считается от высоты — картинка у него
   22,506 × 40, иначе он разъедется с заливкой. */
.ptag{--tag-h:calc(40 * var(--cp));--cap:calc(var(--tag-h) * 0.56265);
  height:var(--tag-h);display:inline-flex;align-items:center;
  padding:0 var(--cap);border-radius:0;white-space:nowrap;
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--cp));
  line-height:1;text-transform:uppercase;letter-spacing:0;
  background-repeat:no-repeat;
  background-position:left center,right center,center;
  background-size:auto 100%,auto 100%,calc(100% - 2 * var(--cap) + 2px) 100%;
  /* Белая обводка по форме плашки. Плашка висит на углу карточки поверх
     зелёного контура, и без неё зелёная «Кофе недели» сливалась с ним, а
     остальные липли к линии. Четыре тени по сторонам дают ровный кант. */
  filter:drop-shadow(1.5px 0 0 #fff) drop-shadow(-1.5px 0 0 #fff)
         drop-shadow(0 1.5px 0 #fff) drop-shadow(0 -1.5px 0 #fff)}
.t-milk{background-image:url(img/cap-tag-yellow-l.svg),url(img/cap-tag-yellow-r.svg),
  linear-gradient(#fdb913,#fdb913);color:#000}
/* На оранжевом и голубом белые буквы почти не читаются: контраст 2,9 и
   2,8 при норме 4,5. Тот же чёрный, что на жёлтой плашке, даёт 7. */
.t-hit{background-image:url(img/cap-tag-orange-l.svg),url(img/cap-tag-orange-r.svg),
  linear-gradient(#f47920,#f47920);color:#000}
.t-rare{background-image:url(img/cap-tag-cyan-l.svg),url(img/cap-tag-cyan-r.svg),
  linear-gradient(#00a8bc,#00a8bc);color:#000}
.t-new{background-image:url(img/cap-tag-bordo-l.svg),url(img/cap-tag-bordo-r.svg),
  linear-gradient(#8b2628,#8b2628);color:#fff}

/* ---- фото: коробка 228×222 по центру, снизу отступ 24 ---- */
.pcard .pimg{width:calc(285 * var(--cp));height:calc(258 * var(--cp));
  margin:0 auto calc(16 * var(--cp));padding:0;min-height:0;
  display:flex;align-items:center;justify-content:center;
  position:relative;z-index:1;text-decoration:none}
.pcard .pimg img{max-height:100%;max-width:100%;width:auto;object-fit:contain;
  transition:transform .45s var(--ease)}
.pcard:hover .pimg img{transform:scale(1.06)}
.pcard .pimg.is-empty{background:var(--bg-soft);border-radius:calc(24 * var(--cp))}

/* ---- название и описание: коробка ровно 68, внутри промежуток 6 ----
   Описание добирает остаток высоты и обрезается нижним краем коробки —
   в макете последняя строка видна не целиком. Поэтому здесь нет
   -webkit-line-clamp: он всегда режет по целым строкам, а надо по краю. */
/* Высота коробки постоянная и одинаковая у соседей — шкалы в ряду стоят
   на одной линии. Но это min-height, а не height: у названия в три
   строки коробка подрастёт, и ничего не срежется. Букета здесь больше
   нет — только название и уточнение, поэтому коробка ниже. */
.pcard .ptext{position:relative;min-height:calc(70 * var(--cp));
  display:flex;flex-direction:column;gap:calc(6 * var(--cp))}
.pcard h3{margin:0;min-height:0;font-family:var(--font);font-weight:900;
  font-size:calc(21 * var(--cp));line-height:1.1;
  text-transform:uppercase;color:var(--green-brand)}
.pcard h3 a{color:inherit;text-decoration:none}
.pcard h3 a:hover{color:var(--green-brand)}
.pcard .ptbody{position:relative;min-height:calc(18.5 * var(--cp))}
.pcard .pdesc{margin:0;
  font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--cp));
  line-height:1.3;color:#000;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* Уточнение из скобок (обработка: «пибери», «анаэробная») — бордовое,
   треугольник чёрный жирный.
   С 16.09.2026 крупнее и жирнее: заказчик «пибери, анаэробный и
   комбинированный не стали больше и жирнее» — тогда их увеличили только на
   странице товара (.pdp-sub). Было: кегль описания, начертание 400. Стало:
   1,2 кегля описания (на 1440 — 16,8 · --cp = 16,2 px против 13,5) и 700.
   Кегль — в долях описания, а не в --cp: мобильный слой ставит описанию
   свой порог (mobile/products.css, не меньше 13 px), телефон набок — свои
   14 px (mobile/landscape.css), и обработка следует за ними без отдельных
   правил, оставаясь мельче названия.
   line-height 1 вместо унаследованных 1.3: строка с крупной обработкой
   не должна становиться выше строки описания, иначе карточка с названием
   в две строки вырастала бы, а её шкалы съезжали бы ниже, чем у соседей.
   Замер на главной 1440: с 1.3 строка 21,1 px, с 1.1 — 18,6, с 1 — 17,55,
   ровно как до правки; высота строки остаётся за описанием (1,3 · 14).
   is-long — значение длиннее 20 знаков (product-card.php): остаётся
   полужирным, но кеглем описания, чтобы уместиться в одну строку. */
.pcard .pdesc .psub{font-family:inherit;font-style:normal;font-weight:700;
  font-size:1.2em;line-height:1;color:#8b2628;margin:0}
.pcard .pdesc .psub.is-long{font-size:1em}
.pcard .pdesc .psep{color:#000;font-weight:700;font-style:normal;
  margin:0 calc(3 * var(--cp))}

/* ---- шкалы: подпись слева, пять кружков справа общей шириной 80 ---- */
.pcard .pflip{position:relative;margin-top:calc(16 * var(--cp))}
.scales4{display:flex;flex-direction:column;gap:calc(9 * var(--cp));margin:0}
.sc{display:flex;align-items:center;gap:calc(12 * var(--cp));
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--cp));
  line-height:1.15;color:#000}
.sc .nm{flex:none;white-space:nowrap;min-width:0}
.sc .bars{display:flex;align-items:center;gap:calc(3 * var(--cp));margin-left:auto}
.sc i{box-sizing:border-box;width:calc(11 * var(--cp));height:calc(11 * var(--cp));
  border-radius:50%;background:#fff;
  border:calc(2 * var(--cp)) solid var(--green-brand)}
.sc i.on{background:var(--green-brand)}
.sc i.half{background:linear-gradient(90deg,var(--green-brand) 0 50%,transparent 50% 100%)}

/* ---- оценка CVA: встаёт на место шкал при наведении ---- */
.pcard .pcva{display:flex;align-items:center;justify-content:space-between;
  gap:calc(10 * var(--cp));margin:0}
.pcard .pcva span{font-family:var(--font);font-weight:500;
  font-size:calc(17 * var(--cp));line-height:1.15;color:#000;
  text-transform:none;letter-spacing:0}
/* Оценка сидит не на кнопочной фигуре со скосами, а на рисованной кляксе
   113 × 45 — в макете это отдельная фигура «Polygon 4». */
.pcard .pcva b{height:calc(45 * var(--cp));min-width:calc(113 * var(--cp));
  display:inline-flex;align-items:center;justify-content:center;
  padding:0 calc(14 * var(--cp));color:#fff;
  font-family:var(--font);font-weight:500;font-size:calc(20 * var(--cp));line-height:1;
  background:url(img/cva-blob.svg) no-repeat center/100% 100%}
/* Коробка держит высоту сама: и шкалы, и оборот с оценкой и букетом
   должны в неё влезать, иначе карточка при наведении прыгала бы. */
.pcard .pflip.has-flip{min-height:calc(88 * var(--cp))}
.pcard .pflip .scales4{transition:opacity .3s var(--ease),transform .3s var(--ease)}
.pcard .pflip-back{display:flex;flex-direction:column;gap:calc(6 * var(--cp))}
.pcard .pflip.has-flip .pflip-back{position:absolute;left:0;right:0;top:0;
  opacity:0;pointer-events:none;transform:translateY(calc(10 * var(--cp)));
  transition:opacity .3s var(--ease),transform .3s var(--ease)}
.pcard .pbouquet{margin:0;font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--cp));line-height:1.3;color:#000;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* Меняем местами только там, где есть указатель: на телефоне наведения
   не бывает, и шкалы должны просто остаться на месте.
   any-hover, а не hover: у iPad главный ввод — палец, и с подключённой
   клавиатурой-трекпадом он всё равно отвечает hover:none. Курсор над
   карточкой тогда ничего не переключал (Герман 24.09.2026: «на айпаде,
   когда подключается клавиатура и появляется круглый курсор, при
   наведении на карточку не показывается букет и CVA»). any-hover
   спрашивает «есть ли хоть одно устройство с наведением» — с трекпадом
   да, без него нет, и Safari пересчитывает это при подключении на лету. */
@media(any-hover:hover){
  .pcard:hover .pflip.has-flip .scales4{opacity:0;transform:translateY(calc(-10 * var(--cp)))}
  .pcard:hover .pflip.has-flip .pflip-back{opacity:1;transform:none}
}
/* То же по классу — его ставит скрипт при переходе табом, чтобы карточка
   раскрывалась и с клавиатуры, а не только мышью. */
.pcard.is-flipped .pflip.has-flip .scales4{opacity:0;transform:translateY(calc(-10 * var(--cp)))}
.pcard.is-flipped .pflip.has-flip .pflip-back{opacity:1;transform:none}

/* Планшет и любой экран без мыши. Оценка CVA выше показывается только
   наведением, а у пальца наведения нет: на iPad в альбомной ориентации
   (раскладка десктопа) и на планшете в портрете оценку было не увидеть
   никак. Герман 22.09.2026: «во многих карточках не отображается CVA».
   Здесь оценка встаёт строкой под шкалами и видна сразу. Букет в этом
   режиме не показываем: карточка и так выросла на строку, а просил
   заказчик именно оценку.
   Телефоны это правило не задевает: там вся коробка .pflip скрыта по
   решению от 17.09 (mobile/products.css), и узкие альбомные экраны до
   520 по высоте отсечены условием ниже — у них своя раскладка
   (mobile/landscape.css). */
/* any-hover:none — только когда наведения нет ни у одного устройства.
   iPad с трекпадом сюда больше не попадает и работает как компьютер:
   наведением, с оценкой и букетом. Без трекпада — как раньше. */
@media (any-hover:none) and (min-width:768px) and (min-height:521px){
  .pcard .pflip.has-flip{min-height:0}
  .pcard .pflip.has-flip .pflip-back{position:static;opacity:1;transform:none;
    pointer-events:auto;margin-top:calc(12 * var(--cp))}
  .pcard .pflip.has-flip .pflip-back .pbouquet{display:none}
  /* Оценки у товара нет (у блендов и части дрип-пакетов её не заводили) —
     без букета оборот пустой, и его отступ висел бы лишней дырой. */
  .pcard .pflip.has-flip .pflip-back:not(:has(.pcva)){display:none}
}
@media(prefers-reduced-motion:reduce){
  .pcard .pflip .scales4,.pcard .pflip .pflip-back{transition:none}
}

/* ---- выбор фасовки: та же рисованная форма, что у плашек ----
   Выбранная — сплошная зелёная; доступная — белая с зелёными дугами и
   линиями сверху и снизу. Серой «нет такой фасовки» больше нет: кнопок
   ровно столько, сколько у товара настоящих фасовок. */
.pw{display:flex;gap:calc(8 * var(--cp));margin-top:auto;padding-top:calc(16 * var(--cp))}
.pcard:not(:has(.pw)) .pbuy{margin-top:auto}
.pw button{--cap:calc(22.506 * var(--cp));
  height:calc(40 * var(--cp));display:inline-flex;align-items:center;justify-content:center;
  padding:0 var(--cap);border:0;border-radius:0;background:none;cursor:pointer;
  white-space:nowrap;transition:none;
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--cp));line-height:1;
  background-repeat:no-repeat}
.pw button{color:var(--green-brand);
  background-image:url(img/cap-out-green-l.svg),url(img/cap-out-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand));
  background-position:left center,right center,center top,center bottom;
  /* Колпачок из набора: дуга продолжена прямыми до внутреннего края
     картинки, поэтому линия идёт просто от края до края выреза. Прежний
     вычет 34,42 · --cp считался под cap-line-green, у которого дуга
     обрывалась внутри картинки; с колпачком набора линия с ним вылезала
     за концы дуг заусенцами (разбор — card-actions.css, «КНОПКА
     ФАСОВКИ»). Толщина линии равна обводке колпачка.
     На экране это правило не видно: card-actions.css задаёт кнопке те же
     слои весом (0,4,1) и побеждает. Держим здесь ту же геометрию, чтобы
     запасной набор не возвращал старую кривизну. */
  background-size:auto 100%,auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--cap) * 0.08886),
    calc(100% - 2 * var(--cap)) calc(var(--cap) * 0.08886)}
.pw button.on{color:#fff;
  background-image:url(img/cap-tag-green-l.svg),url(img/cap-tag-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand));
  background-position:left center,right center,center;
  background-size:auto 100%,auto 100%,calc(100% - 2 * var(--cap) + 2px) 100%}

/* ---- цена и две круглые кнопки ---- */
.pbuy{display:flex;align-items:center;justify-content:space-between;
  gap:calc(10 * var(--cp));margin-top:calc(16 * var(--cp));padding-top:0}
.pprice{display:flex;flex-direction:column;gap:calc(2 * var(--cp));
  font-family:var(--font);font-weight:900;font-size:calc(24 * var(--cp));
  line-height:1.1;color:var(--green-brand)}
/* Прежняя цена чёрная и перечёркнута бордовой диагональю — так в макете;
   обычный line-through даёт горизонтальную черту и выглядит иначе.
   Минус чёрный, бордовое только само число. */
/* Герман 16.09: «сделай жирнее скидку» — зачёркнутая цена и процент
   полужирные (700 вместо 400), кегль прежний. */
/* ЗАЧЁРКНУТАЯ СТРОКА НЕ РВЁТСЯ (Герман 18.09.2026: «на некоторых
   устройствах вот скидка перечёркнутая некорректно выглядит»; на фото
   «17 750 ₸ −16%» разорвано на две строки — знак ₸ внизу, а диагональ
   осталась поверх первой).
   Что рвалось. Число и процент были тремя позициями флексбокса (<s>, «−»,
   «16%»). Между позициями флексбокс не переносит, а ВНУТРИ позиции строка
   переносится как обычно: когда колонке цены доставалось мало места (длинное
   число, узкая карточка, крупный кегль на телефоне), <s> сжималась до
   ширины «17 750» и знак валюты уходил под него. Диагональ при этом —
   абсолютная картинка внутри <s> — оставалась на первой строке.
   Как чинится. Число не переносится никогда (nowrap у <s>), а перенести
   можно только процент и только ЦЕЛИКОМ: он завёрнут в .poff
   (product-card.php) и тоже nowrap, а самой строке разрешён перенос
   (flex-wrap). На практике перенос не случается: цена над ней набрана
   кеглем 24 против 14 и всегда шире, то есть колонка цены не бывает уже
   зачёркнутой строки. */
.pcard .price-old{display:flex;flex-wrap:wrap;align-items:baseline;
  font-family:var(--font-ui);font-weight:700;font-size:calc(14 * var(--cp));line-height:1.3}
/* Промежуток только после зачёркнутой цены: минус и процент в макете
   стоят слитно, «− 20%» с пробелом читается как два разных числа. */
.pcard .price-old s{margin-right:calc(7 * var(--cp))}
.pcard .price-old s{position:relative;color:#000;text-decoration:none;white-space:nowrap}
.pcard .price-old .poff{white-space:nowrap}
/* Диагональ ложится ровно на число: ширина считается от самой <s>, а не
   числом 63 из макета. При 63 · --cp линия была нарисована под «20 000 ₸»
   и у короткой цены («4 000 ₸») вылезала за неё, а у длинной не докрывала.
   Вынос по 2 · --cp с каждой стороны — прежний, поэтому у цены из макета
   длина линии та же, что была. Высота остаётся пропорциональной (height:
   auto), наклон картинки не меняется. */
.pcard .price-old .pcross{position:absolute;left:calc(-2 * var(--cp));top:50%;
  width:calc(100% + 4 * var(--cp));max-width:none;height:auto;transform:translateY(-50%)}
.pcard .price-old .pminus{color:#000;font-weight:700}
.pcard .price-old i{color:#8b2628;font-style:normal}
/* Выгода за объём в узкой карточке (1 кг против пяти пачек по 200 г,
   расчёт — newdesign/pack-deal.php). Приписка «за 1 кг» уходит под цену
   своей строкой: её кегль не ниже 11 px (taste-pack.css), а всё остальное
   сжимается вместе с карточкой. У килограмма в блоке цены тогда три строки —
   цена, «за 1 кг», зачёркнутые «20 000 ₸ −16%» — и они выше круглых кнопок:
   при выборе «1 кг» карточка вытягивалась на 13–14 px, соседи по ряду
   тянулись за ней, фасовки в ряду вставали на разной высоте. Замерено
   15.09.2026 в каталоге на ширинах 768, 800, 1000 и 1024.
   Сколько держим: цена 24 × 1,1 = 26,4, промежуток до приписки 6, промежуток
   блока 2, прежняя цена 14 × 1,3 = 18,2 — итого 52,6 (берём 53, без дробного
   прыжка), плюс сама приписка 1,2 × её кегль. Замер на 1024: блок цены из
   трёх строк 49,5 px, запас 49,8.
   Держим у всех карточек списка, где такая выгода есть хоть у одной, а не
   только у неё самой: так цены и фасовки в ряду стоят на одной линии.
   Признак — класс .has-volume-deal у блока цены (печатает product-card.php).
   Ячейка .pgrid-cell — общий признак списка и в каталоге, и на главной, и она
   же контейнер запроса (см. раздел про --cp выше); 290 — ширина её
   содержимого, без полей ячейки. Порог по самой широкой цене: цифра «0» в
   этом шрифте широкая, и «20 000 ₸» (Мексика Чабела декаф) переносит
   приписку вплоть до 278 px — это ширина 1280. Цены вида «30 000» и
   «40 000» проверены там же; на 1366 (295 px) не переносится ни одна.
   Замер 16.09.2026: на 1100–1280 переносит только «20 000 ₸», на 900
   переноса нет ни у одной цены — там запас (около 14 px) держится зря,
   это пустота под ценой, а не прыжок. Списки без
   такой выгоды (дрип-пакеты, чай) не меняются вовсе. */
@container (max-width:290px){
  .pcard:has(.has-volume-deal) .pbuy,
  *:has(> .pgrid-cell .has-volume-deal) > .pgrid-cell > .pcard .pbuy{
    min-height:calc(53 * var(--cp) + 1.2 * max(11px, calc(12 * var(--cp))))}
}
.pacts{display:flex;align-items:center;gap:calc(8 * var(--cp))}
/* Клякса из эталона (53×52). clip-path:path() здесь не годится: путь в
   абсолютных пикселях и при кнопке меньше 53 px резал её в квадрат.
   Маска тем же контуром тянется на весь размер кнопки. */
.pact{width:calc(53 * var(--cp));height:calc(52 * var(--cp));flex:none;
  display:grid;place-items:center;
  -webkit-mask:url(img/action-shape.svg) center/100% 100% no-repeat;
  mask:url(img/action-shape.svg) center/100% 100% no-repeat;
  transition:background-color .2s ease}
.pact img{width:calc(26 * var(--cp));height:calc(24 * var(--cp));display:block}
.pact-cart{background:var(--green-brand)}
.pact-view{background:#8b2628}
@media(hover:hover){
  .pact-cart:hover{background:#8b2628}
  .pact-view:hover{background:var(--green-brand)}
}
/* Фокус с клавиатуры у клякс. Маска режет всё за контуром — и outline, и
   свечение drop-shadow (маска накладывается после фильтра), поэтому
   единственный силуэтный отклик здесь — тон самой заливки: те же числа,
   что у полей в блоке «Фокус — тон». Кнопка корзины — ссылка, без этого
   правила ей досталось бы кольцо a:focus-visible, невидимое под маской.
   Правило «без обводки», BRAND-RULES §3.2. */
.pcard .pacts .pact:focus-visible{
  outline:none;box-shadow:none;filter:brightness(.78) saturate(1.2)}
/* Подпись кнопки нужна только программе чтения с экрана: в макете это
   круглая иконка, а слова «В корзине» ложились поверх сумки. */
.pact-cart{position:relative}
.pact-cart [data-cart-label]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
/* Уже в корзине: сумка сменяется белой галочкой. Угловой значок здесь
   невозможен — кнопка режется кляксой, и всё за её контуром пропадает. */
.pact-cart.is-in-cart{filter:none;position:relative}
.pact-cart.is-in-cart img{visibility:hidden}
.pact-cart.is-in-cart::after{content:"";position:absolute;
  left:50%;top:50%;width:calc(18 * var(--cp));height:calc(9 * var(--cp));
  border-left:calc(3 * var(--cp)) solid #fff;
  border-bottom:calc(3 * var(--cp)) solid #fff;
  transform:translate(-50%,-65%) rotate(-45deg)}
.pact-cart.is-out{filter:grayscale(1);opacity:.45;cursor:default;pointer-events:none}


/* ==========================================================================
   ТЕСТ «ПОДБЕРЁМ КОФЕ» — макет «Desktop - 219», кадр 1440 с полями 40.

   Внутри секции свой «пиксель макета» --qu: ширина контейнера, делённая
   на 1360. Так числа из макета пишутся как есть, а блок держит пропорции
   на любой ширине. Раньше здесь считали в --u — доле окна, — и колонки
   расходились с макетом: вопрос стоял в колонке 325 вместо 440.
   ========================================================================== */
.quizsec > .mac{container-type:inline-size}
.quiz-row{--qu:calc(100cqw / 1360);
  position:relative;z-index:3;display:grid;align-items:start;
  grid-template-columns:calc(440 * var(--qu)) minmax(0,1fr);
  column-gap:calc(20 * var(--qu));row-gap:calc(24 * var(--qu));margin-top:0}

/* ---- левая колонка: номер, вопрос, дорожка ---- */
.quiz-aside{position:relative;width:auto;max-width:none;height:auto}
.quiz-aside > :not(.quiz-deco){position:relative;z-index:2}
.quizsec .q-step{width:calc(51 * var(--qu));height:calc(51 * var(--qu));
  font-size:calc(28 * var(--qu))}
.quizsec .q-title{margin-top:calc(12 * var(--qu));
  font-size:calc(40 * var(--qu));line-height:1.1;
  min-height:calc(88 * var(--qu));height:auto;width:100%}
/* position:relative, а не static: у дорожки есть ::before — соединительная
   линия, — и при static она отсчитывалась бы от колонки и перечёркивала
   вопрос во всю его ширину. */
.quizsec .q-prog{position:relative;width:calc(188 * var(--qu));
  margin-top:calc(16 * var(--qu));padding-left:0}
.quizsec .q-prog::before{left:calc(10 * var(--qu));right:calc(10 * var(--qu));
  height:calc(3 * var(--qu))}
.quizsec .q-prog i{width:calc(20 * var(--qu));height:calc(20 * var(--qu));
  border-width:calc(3 * var(--qu));margin:0}
.quizsec .q-prog i.on + i{margin-left:0}

/* ---- декор: орнамент с пачки «Кения» и фотография поверх него ----
   Координаты из макета: орнамент 420×468 в точке (18, 297), фотография
   419×467 в точке (23, 217) — оба отсчитываются от левого верхнего угла
   ряда, а он в макете стоит в (40, 24). */
.quiz-deco{position:absolute;left:0;top:0;width:0;height:0;z-index:0;
  pointer-events:none;transition:opacity .6s ease}
.quizsec.is-done .quiz-deco{opacity:.32}
.quiz-deco .d-orn{position:absolute;left:calc(-22 * var(--qu));top:calc(273 * var(--qu));
  width:calc(420 * var(--qu));height:calc(468 * var(--qu));max-width:none}
/* Фотография обрезана коробкой: в макете картинка выше коробки на 10,75 %
   и прижата к её низу. Такой же кадр даёт object-fit: cover снизу. */
.quiz-deco .d-man{position:absolute;left:calc(-17 * var(--qu));top:calc(193 * var(--qu));
  width:calc(419 * var(--qu));height:calc(467 * var(--qu));
  display:block;overflow:hidden}
.quiz-deco .d-man img{width:100%;height:100%;max-width:none;
  object-fit:cover;object-position:50% 100%}

/* ---- правая колонка: карточки ответов 900×184 ---- */
.quiz-main{min-height:0}
.qcards{gap:calc(20 * var(--qu))}
/* Слева иконка и текст одной группой с промежутком 20, стрелка прижата
   к правому краю. При space-between между всеми тремя промежуток
   расползался и текст уезжал на середину карточки. */
.qc{justify-content:flex-start;gap:calc(20 * var(--qu));
  min-height:calc(184 * var(--qu));
  padding:calc(16 * var(--qu)) calc(40 * var(--qu));
  border-radius:calc(32 * var(--qu))}
.qc .qc-go{margin-left:auto}
.qc .qc-ico{width:calc(117 * var(--qu));height:calc(117 * var(--qu))}
.qc .qc-txt{gap:calc(8 * var(--qu));width:calc(178 * var(--qu));flex:0 1 auto}
.qc .qc-t{font-size:calc(24 * var(--qu))}
.qc .qc-d{font-size:calc(14 * var(--qu))}
.qc .qc-go{width:calc(52 * var(--qu));height:calc(52 * var(--qu))}

/* На узком экране колонки складываются, декор убираем: он рассчитан на
   колонку 440 и в столбик не помещается. */
@media(max-width:1039px){
  .quiz-row{grid-template-columns:1fr}
  .quiz-row{--qu:calc(100cqw / 900)}
  .quiz-deco{display:none}
  .quizsec .q-title{font-size:calc(28 * var(--u));min-height:0}
  .quizsec .q-prog{width:calc(188 * var(--u))}
  .quizsec .q-prog i{width:calc(20 * var(--u));height:calc(20 * var(--u))}
  .qc{min-height:0;padding:calc(14 * var(--u)) calc(18 * var(--u));
    gap:calc(14 * var(--u));border-radius:calc(24 * var(--u))}
  .qc .qc-ico{width:calc(84 * var(--u));height:calc(84 * var(--u))}
  .qc .qc-txt{width:auto;flex:1 1 auto}
  .qc .qc-t{font-size:calc(20 * var(--u))}
  .qc .qc-go{width:calc(42 * var(--u));height:calc(42 * var(--u))}
}


/* ---- поиск в шапке: подсветка по форме поля ----
   Браузер рисует при фокусе прямоугольную рамку со скруглением 6 —
   внутри рисованной пилюли она читалась как второе поле. Убираем её и
   подсвечиваем саму фигуру: drop-shadow идёт по контуру картинки, а не
   по прямоугольнику элемента. */
.hd-search input:focus,
.hd-search input:focus-visible{outline:none;filter:none}   /* светится обёртка, не поле: иначе свечение двойное */
.hd-search{transition:filter .18s ease}
.hd-search:focus-within{filter:drop-shadow(0 0 calc(3 * var(--u)) rgba(0,114,59,.55))}

/* ---- фотография в тесте ----
   В макете снимок отражён: кофе в другой руке, взгляд в сторону вопросов.
   Файл лежит в исходном виде, поэтому отражаем на месте. */
.quiz-deco .d-man img{transform:scaleX(-1)}


/* ==========================================================================
   ВХОД, РЕГИСТРАЦИЯ, ВОССТАНОВЛЕНИЕ ПАРОЛЯ

   Страницы жили на старом шаблоне: бутстраповские поля, чужая типографика,
   своя шапка. Теперь это обычные страницы сайта, а форма — одна коробка
   по центру.
   ========================================================================== */
.auth{padding:calc(64 * var(--u)) 0 calc(90 * var(--u))}
.auth-box{max-width:calc(520 * var(--u));margin:0 auto}
.auth-h{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(40 * var(--u));line-height:1.1;color:var(--green-deep-2);margin:0}
.auth-lead{margin:calc(12 * var(--u)) 0 0;font-family:var(--font-ui);font-weight:400;
  font-size:calc(15 * var(--u));line-height:1.4;color:#000}

/* Ради чего регистрироваться. Цифра крупная — она и есть довод. */
.auth-bonus{display:flex;align-items:center;gap:calc(16 * var(--u));
  margin:calc(24 * var(--u)) 0 0;padding:calc(16 * var(--u)) calc(20 * var(--u));
  background:var(--green-pale);border-radius:calc(20 * var(--u))}
.auth-bonus b{flex:none;font-family:var(--font);font-weight:900;
  font-size:calc(34 * var(--u));line-height:1;color:var(--green-brand)}
.auth-bonus span{font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));line-height:1.35;color:#000}
.auth-bonus a{color:var(--green-brand);text-decoration:underline}

.auth-form{margin-top:calc(24 * var(--u));display:flex;flex-direction:column;
  gap:calc(16 * var(--u))}
.auth-f{display:flex;flex-direction:column;gap:calc(6 * var(--u))}
.auth-f > span{font-family:var(--font-ui);font-weight:500;
  font-size:calc(14 * var(--u));color:var(--ink-soft)}
/* Поле той же рисованной формы, что поиск в шапке: скруглённый
   прямоугольник фирменному стилю не соответствует. */
.auth-f input{--fh:calc(52 * var(--u));
  height:var(--fh);padding:0 calc(22 * var(--u));width:100%;
  border:0;border-radius:0;background:url(img/hd-shape-search.svg?v=2) no-repeat center/100% 100%;
  font-family:var(--font-ui);font-weight:400;font-size:calc(16 * var(--u));color:#000}
.auth-f input:focus{outline:none;filter:drop-shadow(0 0 calc(3 * var(--u)) rgba(0,114,59,.55))}
.auth-f input::placeholder{color:#9a9a9a}

.auth-agree{display:flex;align-items:flex-start;gap:calc(10 * var(--u));
  font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--u));
  line-height:1.35;color:#000;cursor:pointer}
.auth-agree input{flex:none;width:calc(18 * var(--u));height:calc(18 * var(--u));
  margin-top:calc(1 * var(--u));accent-color:var(--green-brand)}
.auth-agree a{color:var(--green-brand);text-decoration:underline}

.auth-submit{--btn-h:calc(54 * var(--u));width:100%;font-size:calc(18 * var(--u))}

.auth-cap{display:flex;align-items:flex-end;gap:calc(16 * var(--u))}
.auth-cap img{flex:none;border-radius:calc(10 * var(--u))}
.auth-cap .auth-f{flex:1 1 auto}

.auth-alt{margin-top:calc(20 * var(--u));text-align:center;
  font-family:var(--font-ui);font-weight:400;font-size:calc(15 * var(--u));color:#000}
.auth-alt a{color:var(--green-brand);text-decoration:underline}
.auth-sep{margin:0 calc(8 * var(--u));color:var(--ink-soft)}

.auth-err,.auth-ok{margin-top:calc(20 * var(--u));padding:calc(14 * var(--u)) calc(18 * var(--u));
  border-radius:calc(16 * var(--u));font-family:var(--font-ui);font-size:calc(15 * var(--u));
  line-height:1.4}
.auth-err{background:#fdeceb;color:#8b2628}
.auth-ok{background:var(--green-pale);color:var(--green-deep-2)}
/* Битрикс печатает свои сообщения своей разметкой — гасим её рамки. */
.auth-err .errortext,.auth-ok .notetext{color:inherit;background:none;border:0;padding:0}

@media(max-width:760px){
  .auth{padding:32px 0 56px}
  .auth-h{font-size:28px}
  .auth-bonus{flex-direction:column;align-items:flex-start;gap:8px}
}

/* ---- значки в шапке: рисованные из макета ----
   Метка, сердце и сумка нарисованы от руки, как весь набор бренда.
   Готовые геометрические иконки в этот ряд не вставали. */
.hd-ico-img{display:block;width:auto;max-width:none;height:calc(21 * var(--u))}
.hd-city-btn .hd-ico-img{height:calc(22 * var(--u))}


/* ---- программа лояльности ---- */
.loyal{padding:calc(56 * var(--u)) 0 calc(90 * var(--u))}
.loyal-h{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(40 * var(--u));line-height:1.1;color:var(--green-deep-2);margin:0}
.loyal-lead{margin:calc(14 * var(--u)) 0 0;max-width:calc(620 * var(--u));
  font-family:var(--font-ui);font-weight:400;font-size:calc(16 * var(--u));
  line-height:1.45;color:#000}

/* Своя ступень — крупно и первой: она интереснее общей таблицы. */
.loyal-mine{display:flex;flex-wrap:wrap;gap:calc(32 * var(--u));
  margin-top:calc(28 * var(--u));padding:calc(20 * var(--u)) calc(26 * var(--u));
  background:var(--green-pale);border-radius:calc(24 * var(--u))}
.loyal-mine span{display:block;font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));color:var(--ink-soft)}
.loyal-mine b{display:block;margin-top:calc(4 * var(--u));font-family:var(--font);
  font-weight:900;font-size:calc(28 * var(--u));line-height:1;color:var(--green-brand)}

.loyal-grid{display:grid;gap:calc(16 * var(--u));margin-top:calc(32 * var(--u));
  grid-template-columns:repeat(auto-fit,minmax(calc(180 * var(--u)),1fr))}
.loyal-step{padding:calc(22 * var(--u)) calc(24 * var(--u));background:#fff;
  border:calc(3 * var(--u)) solid var(--green-brand);border-radius:calc(24 * var(--u))}
.loyal-step b{display:block;font-family:var(--font);font-weight:900;
  font-size:calc(34 * var(--u));line-height:1;color:var(--green-brand)}
.loyal-step span{display:block;margin-top:calc(8 * var(--u));
  font-family:var(--font-ui);font-weight:400;font-size:calc(14 * var(--u));
  line-height:1.3;color:#000}
/* Скидка новичка стоит отдельной широкой плашкой, а не ступенью в общем
   ряду: в ряду её читают седьмой ступенью лестницы, а она разовая и со
   ступенью не складывается. Класс -start оставлен: им ещё пользуются
   старые страницы. */
.loyal-step-start{background:var(--green-brand);border-color:var(--green-brand)}
.loyal-step-start b,.loyal-step-start span{color:#fff}
.loyal-first{display:flex;align-items:baseline;gap:calc(20 * var(--u));
  flex-wrap:wrap;margin-top:calc(32 * var(--u));
  padding:calc(24 * var(--u)) calc(28 * var(--u));
  background:var(--green-brand);border-radius:calc(24 * var(--u))}
.loyal-first b{font-family:var(--font);font-weight:900;
  font-size:calc(40 * var(--u));line-height:1;color:#fff;white-space:nowrap}
.loyal-first span{flex:1 1 calc(240 * var(--u));font-family:var(--font-ui);
  font-weight:400;font-size:calc(15 * var(--u));line-height:1.4;color:#fff}

.loyal-h2{margin:calc(44 * var(--u)) 0 calc(14 * var(--u));font-family:var(--font);
  font-weight:900;text-transform:uppercase;font-size:calc(24 * var(--u));
  color:var(--green-deep-2)}
.loyal-rules{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;
  gap:calc(10 * var(--u));max-width:calc(680 * var(--u))}
.loyal-rules li{position:relative;padding-left:calc(22 * var(--u));
  font-family:var(--font-ui);font-weight:400;font-size:calc(16 * var(--u));
  line-height:1.45;color:#000}
.loyal-rules li::before{content:'▸';position:absolute;left:0;color:var(--green-brand)}
.loyal-cta{margin-top:calc(32 * var(--u))}
@media(max-width:760px){.loyal{padding:32px 0 56px}.loyal-h{font-size:28px}}

/* ---- значки шапки на одной линии ----
   У города была своя высота значка (22 против 21) и внутреннее поле
   кнопки сверху — из-за них подписи «г. Алматы», «Войти», «Избранное» и
   «Корзина» стояли на трёх разных высотах. Коробка значка теперь одна
   на все четыре, промежуток до подписи тоже. */
.hd-ico,.hd-city-btn{gap:calc(4 * var(--u))}
.hd-city-btn{padding:0}
.hd-ico > img,.hd-ico > svg,
.hd-city-btn > .hd-ico-img{display:block;flex:none;
  width:auto;max-width:none;height:calc(21 * var(--u))}


/* ==========================================================================
   ЛИЧНЫЙ КАБИНЕТ
   Слева разделы, справа содержимое. Компоненты кабинета от прежнего
   разработчика остались без шаблонов, поэтому страницы обычные.
   ========================================================================== */
.acc{padding:calc(48 * var(--u)) 0 calc(90 * var(--u))}
.acc-h{margin:0 0 calc(28 * var(--u));font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(40 * var(--u));line-height:1.1;
  color:var(--green-deep-2)}
.acc-row{display:grid;gap:calc(28 * var(--u));align-items:start;
  grid-template-columns:calc(240 * var(--u)) minmax(0,1fr)}

/* Меню кабинета «Обзор / Заказы / Избранное / Мои данные / Выйти».
   Герман 17.09.2026: «кнопки не нашей стилистики» — стояли скруглённые
   плашки (активная зелёная, остальные голым текстом). Теперь та же фигура,
   что у переключателя документов .doc-nav: набор 40 (колпачки kit/cap40-*,
   линия 0,05 роста), открытый раздел — заливкой (cap-tag-green), остальные —
   контуром; все пункты одной ширины и высоты (правило «ровно», §3.2).
   «Выйти» — тот же контур, текст приглушён. */
.acc-nav{display:flex;flex-direction:column;align-items:stretch;gap:calc(10 * var(--u))}
.acc-nav-i{
  --btn-h:calc(44 * var(--u));
  --cap:calc(var(--btn-h) * 0.56265);
  --line-h:calc(var(--btn-h) * 0.05);
  display:flex;align-items:center;justify-content:flex-start;
  box-sizing:border-box;min-height:var(--btn-h);padding:0 calc(26 * var(--u) - 1px);
  text-decoration:none;white-space:nowrap;
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--u));line-height:1.15;
  color:var(--green-deep-2);background:transparent;
  /* Контур — одной картинкой через border-image (kit/chip40-frame.svg), как
     чипсы подразделов на /catalog/: боковины с отдельными линиями давали
     волосяной шов у правого конца (снимок 17.09). */
  border-style:solid;border-width:0 1px;border-color:transparent;border-radius:0;
  border-image-source:url(img/kit/chip40-frame.svg);
  border-image-slice:0 22.506 fill;
  border-image-width:0 var(--cap);
  border-image-repeat:stretch;
  transition:filter .2s,transform .2s}
.acc-nav-i:hover{filter:brightness(1.06);transform:translateY(-2px)}
.acc-nav-i.on{color:#fff;cursor:default;border-image:none;
  background-repeat:no-repeat;
  background-image:url(img/cap-tag-green-l.svg),url(img/cap-tag-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand));
  background-position:left center,right center,center;
  background-size:auto 100%,auto 100%,calc(100% - 2 * var(--cap) + 2px) 100%}
.acc-nav-i.on:hover{filter:none;transform:none}
.acc-nav-out{margin-top:calc(14 * var(--u));color:var(--ink-soft)}
/* Фокус с клавиатуры — свечение по силуэту, без кольца ссылки (§3.2). */
.acc-nav-i:focus-visible{outline:none;border-radius:0;filter:drop-shadow(0 0 3px var(--green-brand))}

.acc-main{display:flex;flex-direction:column;gap:calc(24 * var(--u))}
.acc-card{padding:calc(24 * var(--u)) calc(28 * var(--u));background:#fff;
  border:calc(3 * var(--u)) solid var(--green-brand);border-radius:calc(24 * var(--u))}
.acc-h2{margin:0;font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(22 * var(--u));color:var(--green-deep-2)}

/* Карточка лояльности: три числа в строку, под ними полоска до следующей
   ступени. Полоску считаем от предыдущего порога, а не от нуля, — иначе у
   всех, кроме миллионеров, она почти пустая и ни к чему не подталкивает. */
.acc-loyal-top{display:flex;flex-wrap:wrap;gap:calc(34 * var(--u))}
.acc-loyal-top span{display:block;font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--u));color:var(--ink-soft)}
.acc-loyal-top b{display:block;margin-top:calc(4 * var(--u));font-family:var(--font);
  font-weight:900;font-size:calc(30 * var(--u));line-height:1;color:var(--green-brand)}
.acc-loyal-top i{display:block;margin-top:calc(3 * var(--u));font-style:normal;
  font-family:var(--font-ui);font-size:calc(13 * var(--u));color:var(--ink-soft)}
.acc-bar{height:calc(10 * var(--u));margin-top:calc(22 * var(--u));
  background:var(--green-pale);border-radius:999px;overflow:hidden}
.acc-bar i{display:block;height:100%;background:var(--green-brand);border-radius:999px}
.acc-bar-t{margin:calc(10 * var(--u)) 0 0;font-family:var(--font-ui);
  font-size:calc(15 * var(--u));color:#000}
.acc-bar-t b{font-weight:700;color:var(--green-deep-2)}
/* Условия скидки прямо в карточке (18.09.2026): срок и откат покупатель
   должен видеть там же, где число, а не только на странице программы.
   Список тот же, что на /loyalty/, поэтому меняем только отступ и кегль. */
.acc-loyal-rules{margin-top:calc(16 * var(--u));gap:calc(6 * var(--u))}
.acc-loyal-rules li{font-size:calc(14 * var(--u))}

/* Лесенка ступеней в кабинете (22.09.2026). Та же .loyal-grid/.loyal-step,
   что на /loyalty/, только мельче: кабинет — это карточка в колонке, и
   шесть крупных ступеней страницы программы в неё не входят в ряд.
   Отметки:
   • is-done — ступень уже пройдена: бледная, чтобы глаз шёл дальше;
   • is-on   — своя ступень: залита фирменным зелёным, как главный факт;
   • is-next — следующая: обычная, но подпись «осталось N ₸» жирная и
     бордовая, это и есть ответ на вопрос «сколько до следующего». */
.acc-ladder{margin-top:calc(22 * var(--u));gap:calc(10 * var(--u));
  grid-template-columns:repeat(auto-fit,minmax(calc(120 * var(--u)),1fr))}
.acc-ladder .loyal-step{padding:calc(14 * var(--u)) calc(16 * var(--u));
  border-width:calc(2 * var(--u));border-radius:calc(18 * var(--u))}
.acc-ladder .loyal-step b{font-size:calc(24 * var(--u))}
.acc-ladder .loyal-step span{margin-top:calc(6 * var(--u));font-size:calc(13 * var(--u))}
.acc-ladder .loyal-step.is-done{background:var(--green-pale);border-color:var(--green-pale)}
.acc-ladder .loyal-step.is-done b{color:var(--green-deep-2)}
.acc-ladder .loyal-step.is-done span{color:var(--ink-soft)}
.acc-ladder .loyal-step.is-on{background:var(--green-brand);border-color:var(--green-brand)}
.acc-ladder .loyal-step.is-on b,
.acc-ladder .loyal-step.is-on span{color:#fff}
.acc-ladder .loyal-step.is-next span{font-weight:700;color:#8b2628}
/* Сумму не рвём: «12 000» на одной строке, «₸» на другой читалось как
   обрыв. Переноситься может только слово «осталось» перед ней. */
.acc-ladder .loyal-step span b{display:inline;margin:0;font:inherit;color:inherit;white-space:nowrap}
.acc-loyal-note{margin:calc(14 * var(--u)) 0 0;font-family:var(--font-ui);
  font-size:calc(14 * var(--u))}
.acc-loyal-note a{color:var(--green-brand);text-decoration:underline}

.acc-orders{display:flex;flex-direction:column;gap:calc(14 * var(--u))}
.acc-order{padding:calc(18 * var(--u)) calc(22 * var(--u));background:#fff;
  border:calc(2 * var(--u)) solid var(--green-pale);border-radius:calc(20 * var(--u))}
.acc-order-h{display:flex;flex-wrap:wrap;align-items:baseline;
  gap:calc(14 * var(--u));font-family:var(--font-ui);font-size:calc(15 * var(--u))}
.acc-order-h > b:first-child{font-family:var(--font);font-weight:900;
  font-size:calc(18 * var(--u));color:var(--green-deep-2)}
.acc-order-h span{color:var(--ink-soft)}
.acc-status{font-style:normal;padding:calc(3 * var(--u)) calc(10 * var(--u));
  border-radius:999px;background:var(--green-pale);color:var(--green-deep-2);
  font-size:calc(13 * var(--u))}
.acc-status.ok{background:var(--green-brand);color:#fff}
.acc-order-sum{margin-left:auto;font-family:var(--font);font-weight:900;
  font-size:calc(18 * var(--u));color:var(--green-brand)}
.acc-order-items{margin:calc(10 * var(--u)) 0 0;font-family:var(--font-ui);
  font-size:calc(14 * var(--u));line-height:1.4;color:var(--ink-soft)}
.acc-order-list{margin:calc(12 * var(--u)) 0 0;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:calc(6 * var(--u))}
.acc-order-list li{display:flex;gap:calc(10 * var(--u));align-items:baseline;
  font-family:var(--font-ui);font-size:calc(14 * var(--u))}
.acc-order-list li i{font-style:normal;color:var(--ink-soft)}
.acc-order-list li b{margin-left:auto;font-weight:700}

/* ---------- Отмена заказа покупателем (23.09.2026) ----------
   Александра: «я заказала и оплатила, но передумала, мне как отмену
   сделать? Я не вижу кнопочки такой». Кнопка нарочно тихая, текстом, а не
   фирменной фигурой: главное действие на этой странице — смотреть заказы, а
   отмена нужна редко и не должна тянуть на себя взгляд. Подтверждение
   спрашиваем на месте, вторым шагом: строка заказа узкая, промахнуться
   пальцем легко, а отменённый заказ назад не вернёшь. */
.acc-order-cancel{margin-top:calc(12 * var(--u));font-family:var(--font-ui);
  font-size:calc(13.5 * var(--u));line-height:1.4}
.acc-cancel-open,.acc-cancel-yes,.acc-cancel-no{
  padding:0;border:0;background:none;cursor:pointer;
  font-family:inherit;font-size:inherit;text-decoration:underline}
.acc-cancel-open{color:var(--ink-soft)}
.acc-cancel-open:hover{color:var(--ink)}
.acc-cancel-open[hidden]{display:none}
.acc-cancel-ask{display:flex;flex-wrap:wrap;align-items:baseline;
  gap:calc(6 * var(--u)) calc(14 * var(--u));color:var(--ink)}
.acc-cancel-ask[hidden]{display:none}
.acc-cancel-yes{color:#8b2628;font-weight:700}
.acc-cancel-no{color:var(--ink-soft)}
/* Ответ сервера: пустой абзац не занимает места и не оставляет дыру. */
.acc-cancel-msg{margin:calc(6 * var(--u)) 0 0;color:var(--green-deep-2)}
.acc-cancel-msg:empty{display:none}
/* Свечение фокуса — только с клавиатуры, общим правилом из шапки файла. */
.acc-cancel-open:focus-visible,.acc-cancel-yes:focus-visible,.acc-cancel-no:focus-visible{
  outline:none;filter:drop-shadow(0 0 3px var(--green-brand))}

.acc-empty{text-align:center}
.acc-empty p{margin:0 0 calc(16 * var(--u));font-family:var(--font-ui);
  font-size:calc(16 * var(--u));color:var(--ink-soft)}
.acc-more{margin:0;font-family:var(--font-ui);font-size:calc(15 * var(--u))}
.acc-more a{color:var(--green-brand);text-decoration:underline}
.acc-sub{margin:calc(6 * var(--u)) 0 0;font-family:var(--font-ui);
  font-size:calc(14 * var(--u));color:var(--ink-soft)}

@media(max-width:860px){
  .acc{padding:32px 0 56px}
  .acc-h{font-size:28px}
  .acc-row{grid-template-columns:1fr}
  .acc-nav{flex-direction:row;flex-wrap:wrap;gap:8px}
  .acc-nav-i{--btn-h:44px;min-height:44px;padding:0 18px;font-size:15px;justify-content:center}
  .acc-nav-out{margin-top:0}
}

/* Форма данных в кабинете тянулась на всю ширину колонки — поле почты
   выходило на тысячу с лишним пикселей. Ширина та же, что у регистрации:
   строка ввода длиннее того, что в неё пишут, читается как ошибка. */
.acc-main .auth-form{max-width:calc(560 * var(--u))}


/* ==========================================================================
   МАСШТАБ И ШИРИНА — по эталонной вёрстке дизайнера (восстановлено:
   первая версия блока потерялась при переносе файла).

   Два макета: старый на 1800 и нынешний на 1440. --u калибровался под
   1800, и всё из новых кадров выходило на четверть мельче. --d — пиксель
   макета 1440: при окне 1440 равен единице. --u не трогаем: подвал и
   детальная считаны с макета 1800.
   ========================================================================== */
:root{--d:clamp(.68px, min(.063vw, .11vh), 1.19px)}

/* Коробку задаёт один слой. Тема оборачивает страницу в свой .container —
   ему и отдаём ширину с полями, а .mac внутри поля не добавляет: раньше
   их складывали двое, и содержимое стояло в 102 px от края вместо 40. */
/* body в селекторе не для красоты: правило каталога написано как
   `body:not(...) main.page-wrapper > .container` и весит (0,3,2) — без
   body наше весило бы (0,3,1) и проигрывало ему. */
body main.page-wrapper > .container:has(> .sc2026-page){max-width:calc(1440 * var(--d) + 80px);
  padding-left:calc(40 * var(--d));padding-right:calc(40 * var(--d))}
.container > .sc2026-page .mac{max-width:none;padding-left:0;padding-right:0}
.head-plate,.tb-in{max-width:calc(1440 * var(--d) + 80px);
  padding-left:calc(40 * var(--d));padding-right:calc(40 * var(--d))}

/* ---- шапка ---- */
.site-head{padding:calc(2.5 * var(--d)) 0 0}
.head-inner{height:calc(90 * var(--d));gap:0}
.hd-logo img{width:calc(144 * var(--d));height:calc(77 * var(--d));object-fit:contain}
/* height пишем прямо: у кнопки есть свои height-правила в двух файлах,
   и одна переменная --btn-h их не перебивает. */
.hd-cat{--btn-h:calc(54 * var(--d));height:calc(54 * var(--d));
  min-width:calc(167 * var(--d));margin-left:calc(40 * var(--d));
  font-size:calc(20 * var(--d));font-weight:500}
.hd-search{height:calc(54 * var(--d));margin-left:calc(20 * var(--d));
  flex:1 1 calc(580 * var(--d));max-width:calc(580 * var(--d));
  padding:0 calc(27 * var(--d));gap:calc(10 * var(--d))}
.hd-search-ico{width:calc(22 * var(--d));height:calc(22 * var(--d))}
.hd-search input{font-size:calc(20 * var(--d));font-weight:500}
.hd-tools{margin-left:auto;padding-left:calc(40 * var(--d));gap:calc(12 * var(--d))}
.hd-ico,.hd-city-btn{min-width:calc(78 * var(--d));min-height:calc(54 * var(--d));
  gap:calc(3 * var(--d));font-size:calc(17 * var(--d))}
.hd-ico > img,.hd-ico > svg,.hd-city-btn > .hd-ico-img{height:calc(22 * var(--d))}
.hd-city-wrap b{font-size:calc(17 * var(--d))}
/* Цифра у корзины — от значка, как в эталоне: top −10, right −13 от него.
   Столбец шире значка на подпись, поэтому считаем от середины столбца. */
.hd-ico .cnt{top:calc(-10 * var(--d));left:auto;right:calc(50% - 21.5 * var(--d));
  font-size:calc(17 * var(--d));font-weight:500}

/* ---- верхняя полоса ---- */
.topbar{height:calc(35 * var(--d));font-size:calc(17 * var(--d))}
.tb-in{gap:calc(20 * var(--d))}

/* ---- лента ---- */
.ticker-t span{font-family:var(--font);font-weight:900;
  font-size:calc(24 * var(--d));line-height:1.1;text-transform:uppercase}

/* ---- заголовок секции ----
   Правило каталога держало любой h2 страницы на 27 px — перебиваем весом. */
.hits.mac .hits-ttl h2{font-size:calc(40 * var(--d));color:#000;line-height:1.1}
.hits.mac .hits-ttl h2 em{color:var(--green-brand)}
.hits-ttl p{font-size:calc(14 * var(--d));max-width:calc(420 * var(--d))}
.hits-all{--btn-h:calc(54 * var(--d));font-size:calc(20 * var(--d));
  gap:calc(10 * var(--d));font-weight:500;text-transform:none}
.btn-arr{width:calc(22 * var(--d));height:calc(22 * var(--d))}
.hits-head{margin-bottom:calc(44 * var(--d))}

/* ---- плитки: размеры эталона ---- */
/* Высота фиксированная (388 из эталона), а не пропорция от ширины
   ячейки: на широком экране ячейка шире 325, и пропорция вытягивала
   плитку вниз, к квадрату. */
.entry{aspect-ratio:auto;height:calc(388 * var(--d));min-height:0;
  border-radius:calc(32 * var(--d));padding:calc(32 * var(--d))}
.entry h3{font-size:calc(24 * var(--d));max-width:calc(198 * var(--d));
  color:var(--green-brand)}
.entry ul{margin-top:calc(16 * var(--d))}
.entry li{font-size:calc(14 * var(--d));gap:calc(6 * var(--d));
  margin-bottom:0;color:#000}

/* ==========================================================================
   ПЛИТКИ — раскладка эталонной вёрстки дизайнера (first-section.css)

   Орнамент и фотография — два слоя по абсолютным координатам из эталона,
   пересчитанным в доли карточки 325×388. Стрелка — рисованный кружок из
   эталона. При наведении показывается кнопка «Узнать подробнее».
   ========================================================================== */
/* Прежние слои этой плитки больше не рисуем. */
.entry .wave{display:none}
.entry .more{display:none !important}
.entry::after{display:none}

.entry{overflow:hidden}
.entry .orn,.entry .pic{position:absolute;z-index:1;left:50%;pointer-events:none}
.entry .orn img,.entry .pic img{width:100%;height:auto;display:block;max-width:none}
.entry .pic{z-index:2;transition:transform .5s var(--ease)}
.entry:hover .pic{transform:translateX(-50%) translateY(-4px) scale(1.02)}

/* Координаты эталона, в долях карточки 325 × 388. */
.e-home  .orn{top:38.40%;width:90.15%;transform:translateX(-50%)}
.e-home  .pic{top:47.94%;width:100%;transform:translateX(-50%)}
.e-biz   .orn{top:27.32%;width:100%;transform:translateX(-50%)}
.e-biz   .pic{top:40.21%;width:100%;transform:translateX(-50%)}
.e-quiz  .orn{top:40.46%;width:100%;transform:translateX(-50%)}
.e-quiz  .pic{top:36.34%;width:100%;transform:translateX(-50%)}
.e-where .orn{top:37.89%;width:88.92%;transform:translateX(-50%)}
.e-where .pic{top:40.72%;width:100%;transform:translateX(-50%)}

/* Текст и стрелка над слоями. Отступы эталона: 32 от углов. */
.entry h3,.entry ul{position:relative;z-index:3}
.entry .go{position:absolute;z-index:4;top:calc(32 * var(--d));right:calc(32 * var(--d));
  width:calc(52 * var(--d));height:calc(52 * var(--d));display:block;
  transition:transform .25s var(--ease)}
.entry .go img{width:100%;height:100%;display:block}
.entry:hover .go{transform:translateX(4px)}

/* Кнопка «Узнать подробнее»: фирменная фигура 198×44, появляется при
   наведении под списком — как в эталоне. На устройствах без указателя её
   нет: вся плитка и так ссылка. */
.entry .entry-btn{position:absolute;z-index:3;left:calc(32 * var(--d));
  top:calc(150 * var(--d));width:calc(198 * var(--d));height:calc(44 * var(--d));
  display:none;align-items:center;justify-content:center;
  color:#fff;font-family:var(--font);font-weight:500;font-size:calc(17 * var(--d));
  line-height:1.15;white-space:nowrap;
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand));
  background-repeat:no-repeat;
  background-position:left center,right center,center;
  background-size:auto 100%,auto 100%,calc(100% - 48 * var(--d)) 100%;
  opacity:0;transform:translateY(8px);
  transition:opacity .18s ease,transform .24s ease}
@media(hover:hover){
  .entry .entry-btn{display:flex}
  .entry:hover .entry-btn{opacity:1;transform:none}
}


/* ==========================================================================
   ФОНОВЫЕ ОРНАМЕНТЫ ГЛАВНОЙ — узлы 1:19…1:23 из Фигмы

   Бежевые узоры по краям полотна. В макете они привязаны к абсолютным
   высотам, у живой страницы высоты другие — привязываем к секциям.
   Вылет за край окна режет обёртка страницы, полосы прокрутки не будет.
   ========================================================================== */
/* Узоры вылетают за край окна, как в макете (x от −66 до 1532 при холсте
   1440) — горизонтальный лишек режем по окну, а не по контейнеру. */
main.page-wrapper{overflow-x:clip}
.bg-orn{position:absolute;z-index:0;pointer-events:none;user-select:none}
.bg-orn img{width:100%;height:100%;display:block;max-width:none}
.entries,.hits,.quizsec{position:relative}
/* Содержимое секций — над узорами. */
.entries > .entry,.hits > *:not(.bg-orn),.quizsec > *:not(.bg-orn){position:relative;z-index:1}

/* Фоновые узоры главной — узлы 1:19…1:23 кадра 1:18 (макет 1440×3691).
   Цвет заливки #F8EFE2, файлы img/bg-orn-*.svg выгружены из Фигмы.

   ПОЧЕМУ ЧЕРЕЗ ЦЕНТР И ПОВОРОТ, А НЕ ЧЕРЕЗ right/top.
   Фигма отдаёт узел в ЛОКАЛЬНОМ кадре — без поворота с канвы. Габарит на
   канве (W×H) при этом известен из метаданных. Значит угол не надо
   подбирать на глаз, он решается из системы
        W = w·|cos| + h·|sin| ,  H = w·|sin| + h·|cos| ,
   где w×h — локальный размер из самого SVG. Для всех пяти узоров
   решение сошлось точно (cos²+sin² = 1,0000). Знак поворота определён
   сверкой с полноразмерным снимком кадра: доля видимого бежевого,
   попадающая в фигуру, у выбранного знака заметно выше.

   Поэтому коробка элемента — ЛОКАЛЬНОГО размера, её центр ставится в
   центр габарита (x + W/2, y + H/2), и уже потом идёт поворот. Так
   картинка садится ровно туда же, где стоит в макете, без подгонки.

   ОТСЧЁТ. По горизонтали — от БЛИЖНЕГО края содержимого, а не от левого:
   живая колонка шире макетной (при 1440 это 1314 px против 1360 единиц
   макета), и от левого края все четыре правых узора уехали бы внутрь.
   В макете они как раз уходят ЗА край, поэтому и держатся за него.
   По вертикали — от верха своей секции: живая страница по высоте с
   макетом не совпадает, привязка к абсолютным высотам макета уехала бы.
   Верх секций в макете: плитки 461, хиты 986, тест 1850.

   Числа в right/left/top — это положение НЕПОВЁРНУТОЙ коробки. Поворот
   не меняет разметку, поэтому к желаемому положению габарита добавлена
   половина разницы (W−w)/2 и (H−h)/2: так после поворота габарит встаёт
   ровно туда, где он в макете.

   ЗНАК ПОВОРОТА. Из габарита он не следует: +θ и −θ дают одинаковый
   габарит. Определён сверкой с полноразмерным снимком кадра — SVG
   рисовался в canvas обоими знаками и сравнивался с маской бежевого
   #F8EFE2 из снимка; побеждал тот, у которого в фигуру попадает больше
   видимого узора. Четыре знака из пяти совпали с прежней ручной
   подгонкой, а у .bg-orn-3 сошёлся и сам угол (было 31° на глаз против
   32,47° расчётных) — это и есть проверка метода. У .bg-orn-1 и
   .bg-orn-3 перевес небольшой: узор там наполовину закрыт содержимым.
   Если дизайнер увидит, что зеркально, — меняется один знак в rotate(). */
.bg-orn-1{width:calc(170.163 * var(--d));height:calc(210.093 * var(--d));
  right:calc(-86.06 * var(--d));top:calc(30.66 * var(--d));transform:rotate(-36.68deg)}
.bg-orn-2{width:calc(221.832 * var(--d));height:calc(371.253 * var(--d));
  right:calc(14.57 * var(--d));top:calc(-104.08 * var(--d));transform:rotate(74.86deg)}
.bg-orn-3{width:calc(524 * var(--d));height:calc(297 * var(--d));
  right:calc(-453.45 * var(--d));top:calc(729 * var(--d));transform:rotate(32.47deg)}
.bg-orn-4{width:calc(310.353 * var(--d));height:calc(426.042 * var(--d));
  left:calc(-14.64 * var(--d));top:calc(-65.67 * var(--d));transform:rotate(-74.63deg)}
.bg-orn-5{width:calc(142.116 * var(--d));height:calc(642.798 * var(--d));
  right:calc(179.02 * var(--d));top:calc(383.72 * var(--d));transform:rotate(66.22deg)}


/* ---- плашка «−15 % на первый заказ» ----
   Появляется гостю через полминуты, один раз в две недели. */
.promo15{position:fixed;inset:0;z-index:400;display:flex;
  align-items:center;justify-content:center;padding:20px}
.promo15[hidden]{display:none}
.promo15-back{position:absolute;inset:0;background:rgba(20,40,25,.45)}
.promo15-box{position:relative;width:min(calc(420 * var(--d)),92vw);
  padding:calc(36 * var(--d)) calc(36 * var(--d)) calc(28 * var(--d));
  background:#fff;border:calc(3 * var(--d)) solid var(--green-brand);
  border-radius:calc(28 * var(--d));text-align:center;
  animation:promoIn .35s cubic-bezier(.22,1,.36,1)}
@keyframes promoIn{from{opacity:0;transform:translateY(18px) scale(.97)}to{opacity:1;transform:none}}
.promo15-x{position:absolute;top:calc(10 * var(--d));right:calc(14 * var(--d));
  border:0;background:none;font-size:calc(30 * var(--d));line-height:1;
  color:var(--ink-soft);cursor:pointer}
.promo15-x:hover{color:#000}
.promo15-num{display:block;font-family:var(--font);font-weight:900;
  font-size:calc(64 * var(--d));line-height:1;color:var(--green-brand)}
.promo15-t{margin:calc(8 * var(--d)) 0 0;font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(22 * var(--d));line-height:1.15;color:#000}
.promo15-d{margin:calc(12 * var(--d)) 0 0;font-family:var(--font-ui);
  font-size:calc(15 * var(--d));line-height:1.4;color:var(--ink-soft)}
.promo15-go{margin-top:calc(20 * var(--d));width:100%;
  --btn-h:calc(52 * var(--d));font-size:calc(17 * var(--d))}
.promo15-later{display:block;margin:calc(12 * var(--d)) auto 0;border:0;
  background:none;font-family:var(--font-ui);font-size:calc(14 * var(--d));
  color:var(--ink-soft);text-decoration:underline;cursor:pointer}
.promo15-later:hover{color:#000}
@media(prefers-reduced-motion:reduce){.promo15-box{animation:none}}


/* ---- куки-плашка ----
   Текст остался прежним — он в тоне бренда. Вид приведён к набору:
   белая карточка с рисованным контуром (его рисует wavy.js) и кнопка
   фирменной формы. Прячется классом show, как и раньше. */
.cookie{position:fixed;left:calc(20 * var(--d));bottom:calc(20 * var(--d));
  z-index:250;max-width:calc(360 * var(--d));display:none;
  flex-direction:column;gap:calc(10 * var(--d));
  background:transparent;padding:calc(22 * var(--d)) calc(24 * var(--d))}
.cookie.show{display:flex;animation:promoIn .45s cubic-bezier(.22,1,.36,1)}
.cookie > :not(.wavy){position:relative;z-index:1}
.cookie b{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(16 * var(--d));line-height:1.15;color:var(--green-deep-2)}
.cookie span{font-family:var(--font-ui);font-weight:400;
  font-size:calc(14 * var(--d));line-height:1.4;color:#000}
.cookie button{align-self:flex-start;margin-top:calc(4 * var(--d));
  --cap:calc(24 * var(--d));height:calc(44 * var(--d));
  display:inline-flex;align-items:center;padding:0 var(--cap);
  border:0;border-radius:0;cursor:pointer;color:#fff;
  font-family:var(--font);font-weight:500;font-size:calc(15 * var(--d));
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand));
  background-repeat:no-repeat;
  background-position:left center,right center,center;
  background-size:auto 100%,auto 100%,calc(100% - 2 * var(--cap) + 2px) 100%;
  transition:filter .2s}
.cookie button:hover{filter:brightness(1.07)}
@media(max-width:520px){.cookie{left:12px;right:12px;max-width:none;bottom:76px}}


/* ---- скидка по программе в корзине ----
   Строка над итогом. До 18.09.2026 здесь было «Вернём бонусами»; теперь
   программа даёт скидку, и строка показывает её (basket/index.php).

   ПЛАШКИ БОЛЬШЕ НЕТ. Строка была зелёным прямоугольником со скруглением.
   Герман 21.09.2026: «в корзине тоже убери обводку зелёную и по всему сайту
   сделай так, как у нас в плашке при добавлении в корзину». Образец —
   .scp-loy в newdesign/cart-popover.css: ни фона, ни рамки, вес строке
   дают подпись пожирнее и зелёная сумма. Второй прямоугольник внутри
   карточки сводки был ровно тем, чего не велит правило «без обводки»
   (BRAND-RULES §3.2).

   Считаем в --u, а не в --d, как было у плашки: вся колонка сводки
   (.sc-cart .tl-sum, .cart-company) стоит на --u, и в одном ряду два
   масштаба давали разный кегль у соседних строк. */
.sc-cart .tl-cut{display:flex;align-items:baseline;justify-content:space-between;
  gap:calc(12 * var(--u));margin-bottom:calc(12 * var(--u))}
.sc-cart .tl-cut span{font-family:var(--font-ui);font-weight:700;
  font-size:calc(14 * var(--u));color:var(--green-deep-2)}
.sc-cart .tl-cut b{font-family:var(--font);font-weight:900;
  font-size:calc(18 * var(--u));color:var(--green-brand);white-space:nowrap}
.sc-cart .tl-cut-note{margin:0 0 calc(12 * var(--u));font-family:var(--font-ui);
  font-size:calc(13 * var(--u));line-height:1.4;color:var(--ink-soft)}
.sc-cart .tl-cut-note a{color:var(--green-brand);text-decoration:underline}

/* Пара цен у итога: старая зачёркнута рисованной чертой (img/cross.svg,
   класс .pcross — та же черта, что в карточке каталога и во всплывашке),
   новая крупная и зелёная. Отдельной строки «Товары:» над итогом больше
   нет: она печатала ровно ту сумму, что зачёркнута здесь. */
.sc-cart .tl-price{display:flex;flex-wrap:wrap;align-items:baseline;
  justify-content:flex-end;gap:calc(2 * var(--u)) calc(12 * var(--u))}
/* Обе суммы неразрывны: без этого узкая колонка отрывала «₸» от числа и
   переносила его третьей строкой. Не влезли рядом — старая цена встаёт
   строкой выше, обе прижаты вправо. */
.sc-cart .tl-price b{white-space:nowrap}
.sc-cart .tl-was{position:relative;text-decoration:none;white-space:nowrap;
  font-family:var(--font);font-weight:900;font-size:calc(18 * var(--u));color:#000}
.sc-cart .tl-was[hidden]{display:none}
/* Число внутри <s> лежит в <i> — единственный тег, который не ловят ни
   .tl-sum span, ни .tl-sum b. Наклона ему не надо. */
.sc-cart .tl-was i{font-style:normal}
.sc-cart .tl-was .pcross{position:absolute;left:calc(-2 * var(--u));top:50%;
  width:calc(100% + 4 * var(--u));max-width:none;height:auto;
  transform:translateY(-50%)}
/* Со скидкой итог — это и есть новая цена, поэтому цвет тот же, что у
   крупного числа во всплывашке. Без скидки строка остаётся прежней. */
.sc-cart .tl-sum-cut b{color:var(--green-brand)}


/* ---- оплата картой ----
   Страница оплаты заказа и страница возврата из банка. */
.epay-box{max-width:calc(460 * var(--d));margin:calc(24 * var(--d)) 0}
.epay-sum{margin:0 0 calc(14 * var(--d));font-family:var(--font-ui);
  font-size:calc(16 * var(--d));color:#000}
.epay-sum b{font-family:var(--font);font-weight:900;
  font-size:calc(26 * var(--d));color:var(--green-brand)}
.epay-go{width:100%;--btn-h:calc(54 * var(--d));font-size:calc(17 * var(--d))}
.epay-go[disabled]{opacity:.6;cursor:default}
.epay-note{margin:calc(12 * var(--d)) 0 0;font-family:var(--font-ui);
  font-size:calc(13 * var(--d));line-height:1.4;color:var(--ink-soft)}
.epay-err{margin:calc(16 * var(--d)) 0;padding:calc(14 * var(--d)) calc(18 * var(--d));
  background:rgba(137,36,41,.08);border-radius:calc(14 * var(--d));
  font-family:var(--font-ui);font-size:calc(15 * var(--d));line-height:1.45;color:var(--bordo)}

.epay-result{max-width:calc(720 * var(--d));padding:calc(40 * var(--d)) 0 calc(60 * var(--d))}
.epay-result-t{margin:calc(16 * var(--d)) 0 0;font-family:var(--font-ui);
  font-size:calc(17 * var(--d));line-height:1.5;color:#000}
.epay-result-n{margin:calc(14 * var(--d)) 0 0;padding:calc(12 * var(--d)) calc(16 * var(--d));
  background:rgba(253,185,19,.14);border-radius:calc(12 * var(--d));
  font-family:var(--font-ui);font-size:calc(14 * var(--d));line-height:1.45;color:#000}
.epay-result-a{display:flex;align-items:center;flex-wrap:wrap;
  gap:calc(20 * var(--d));margin-top:calc(26 * var(--d))}
.epay-result-more{font-family:var(--font-ui);font-size:calc(15 * var(--d));
  color:var(--green-brand);text-decoration:underline}


/* ---- окно адреса: фокус и кнопка «где я» ----

   Поля здесь нарисованы фирменной фигурой фоном. Прямоугольная рамка
   фокуса ложилась поверх неё вторым контуром — это и выглядело как
   двойное поле. Фокус показываем самой фигурой: её линия становится
   заметно толще, так что клавиатурному пользователю видно не хуже. */
.sc-addr-modal .sc-field input:focus,
.sc-addr-modal .sc-field input:focus-visible,
.sc-addr-modal .sc-field textarea:focus,
.sc-addr-modal .sc-field textarea:focus-visible,
.sc2026-page .sc-addr-modal .sc-field input:focus-visible,
.sc2026-page .sc-addr-modal .sc-field textarea:focus-visible{
  outline:none!important;box-shadow:none!important}


/* Комментарий фигурой не рисуется — ему рамку оставляем, но свою. */
.sc-addr-modal .sc-field textarea:focus{
  border-color:var(--green-brand)!important}

/* Кнопка «определить моё местоположение» — в углу карты, поверх неё. */
.sc-addr-geo{position:absolute;top:calc(16 * var(--u));left:calc(16 * var(--u));z-index:2;
  width:calc(38 * var(--u));height:calc(38 * var(--u));border-radius:50%;
  background:#fff;border:0;color:var(--green-deep-2);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 4px 14px rgba(20,40,20,.18);transition:color .2s,transform .2s}
.sc-addr-geo:hover{color:var(--green-brand);transform:scale(1.06)}
.sc-addr-geo.is-busy{color:var(--ink-soft);pointer-events:none}
.sc-addr-geo.is-busy svg{animation:scGeoSpin 1s linear infinite}
@keyframes scGeoSpin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.sc-addr-geo.is-busy svg{animation:none}}

.sc-addr-geo-note{margin:calc(-6 * var(--u)) 0 calc(12 * var(--u));
  font-family:var(--font-ui);font-size:calc(12.5 * var(--u));line-height:1.4;
  color:var(--green-deep-2)}
.sc-addr-geo-note.is-bad{color:var(--bordo)}
.sc-addr-geo-note[hidden]{display:none}

/* Действия окна адреса всегда на виду. Форма прокручивается, и стоило
   добавиться одной строке сообщения, как «Доставить сюда» уезжала за
   нижний край — кнопку приходилось искать прокруткой. */
.sc-addr-form{display:flex;flex-direction:column;padding-bottom:0}
/* Список найденных адресов, «не нашли» и отказ «слишком много поисков»
   не должны сжиматься: колонка с overflow:hidden сплющивала их до
   невидимости на ноутбуках, прокручивается сама форма. */
.sc-addr-form > .sc-addr-found{flex-shrink:0}
.sc-addr-form > .sc-addr-acts{position:sticky;bottom:0;z-index:1;margin-top:auto;
  background:#fff;padding:calc(12 * var(--u)) 0 calc(22 * var(--u))}


/* ==========================================================================
   ПОЛЯ ВВОДА — одно правило на весь сайт

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

   Форма собирается фоном в четыре слоя: две боковины и две линии между
   ними. Боковины — cap-fat-green (копия cap-lgreen с обводкой 2,6 вместо
   1,6, рамка картинки расширена на ту же прибавку). Брать боковины из
   линейного набора нельзя: они по ширине почти равны расчётной --cap,
   линия упирается в них встык, и недобор в полпикселя читается как разрыв.

   Высоту задаём здесь же: --cap считается от неё, и если высота уедет,
   линии перестанут сходиться с боковинами.
   ========================================================================== */
.sc-field input,
.auth-f input,
.sc-cart .promo-row input,
.sc-checkout .form-control,
.sc-checkout input[type=text],
.sc-checkout input[type=tel],
.sc-checkout input[type=email],
.sc-checkout select.form-control,
/* Старое правило оформления было частнее нашего и с !important — без этих
   двух строк поля заказа остались бы с прежними тонкими боковинами. */
.sc-checkout .bx-soa-section input.form-control,
.sc-checkout .bx-soa-section select.form-control,
.sc-checkout .bx-soa-customer input.form-control,
.b2b-form input:not([type=checkbox]):not([type=radio]),
.b2b-form select,
.sc-city-modal input[type=search]{
  --btn-h:calc(52 * var(--u));
  --cap:calc(var(--btn-h) * 0.5556);
  /* Толщина горизонтальных линий должна в точности совпадать с обводкой
     боковины, иначе на стыке видно ступеньку: линия уходит под боковину и
     там, где она кончается, толщина скачком меняется. В файле боковины
     обводка 2,6 при высоте 56,6 — отсюда и число. На обычном экране
     разница в четверть пикселя почти незаметна, на ретине — вдвое. */
  --cap-stroke:0.0459;
  width:100%;height:var(--btn-h);min-height:var(--btn-h);
  padding:0 calc(20 * var(--u));
  border:0!important;border-radius:0!important;box-shadow:none!important;
  font-family:var(--font-ui);font-weight:400;
  font-size:calc(15 * var(--u));color:#000;
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * var(--cap-stroke)),
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * var(--cap-stroke))!important;
  background-image:url(img/cap-fat-green-l.svg),url(img/cap-fat-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))!important}

/* Списки: своя стрелка внутри фигуры, штатная её ломает. */
.sc-checkout select.form-control,
.b2b-form select{appearance:none;-webkit-appearance:none;
  padding-right:calc(42 * var(--u))}

/* Фокус — тон, а не вторая рамка: фигура темнеет целиком, вместе с
   боковинами. Прямоугольный outline ложился поверх неё вторым контуром,
   и поле читалось как двойное. */
.sc-field input:focus,
.auth-f input:focus,
.sc-cart .promo-row input:focus,
.sc-checkout .form-control:focus,
.sc-checkout input[type=text]:focus,
.sc-checkout input[type=tel]:focus,
.sc-checkout input[type=email]:focus,
.sc-checkout select.form-control:focus,
.sc-checkout .bx-soa-section input.form-control:focus,
.sc-checkout .bx-soa-section select.form-control:focus,
.sc-checkout .bx-soa-customer input.form-control:focus,
.b2b-form input:focus,
.b2b-form select:focus,
.sc-city-modal input[type=search]:focus,
.sc2026-page .sc-field input:focus-visible,
.sc2026-page .auth-f input:focus-visible{
  outline:none!important;box-shadow:none!important;
  filter:brightness(.78) saturate(1.2)}

/* Многострочные фигурой не рисуем: растянутая по высоте, она читается как
   овал. Оставляем прямую рамку той же толщины и цвета. */
.sc-field textarea,
.auth-f textarea,
.sc-checkout textarea,
.b2b-form textarea{
  width:100%;height:auto;min-height:calc(96 * var(--u));
  padding:calc(14 * var(--u)) calc(20 * var(--u))!important;
  border:calc(2 * var(--u)) solid var(--green-brand)!important;
  border-radius:calc(16 * var(--u))!important;
  background:#fff!important;
  font-family:var(--font-ui);font-size:calc(15 * var(--u));color:#000}
.sc-field textarea:focus,
.auth-f textarea:focus,
.sc-checkout textarea:focus,
.b2b-form textarea:focus{outline:none!important;
  border-color:var(--green-deep-2)!important}

/* Подсказка внутри поля — одинаково серая везде. */
.sc-field input::placeholder,
.auth-f input::placeholder,
.sc-checkout .form-control::placeholder,
.b2b-form input::placeholder,
.sc-field textarea::placeholder{color:#9a9a9a}

/* Живую обводку в оформлении пробовали и отказались: заказчику ровные
   карточки здесь нравятся больше. Осталось только скрытие самовывоза. */

/* Самовывоз выбирается переключателем сверху, в списке он лишний:
   покупатель уже сказал, что забирает сам. Прячем, но не выключаем —
   переключатель по-прежнему выбирает эту службу. */
.sc-checkout .bx-soa-pp-company.sc-pickup-hidden{display:none!important}

/* ---- корзина: промокод и счётчик ----

   У поля и кнопки не было расстояния между собой: боковины фирменной
   формы выступают за габарит блока, и в макете они наезжали друг на
   друга — читалось как одна слипшаяся фигура. */
.sc-cart .promo-row{display:flex;flex-direction:column;align-items:flex-start;
  gap:calc(12 * var(--u))}

/* «Есть промокод» (21.09.2026). Поле и кнопка открываются галочкой, и до
   щелчка их нет — промокод есть далеко не у каждого, а поле с кнопкой в
   колонке спорили с «Оформить заказ».

   Галочку не заводим свою: это та же .cart-check, что у «Я юридическое
   лицо» строкой выше, вид ей задаёт блок «ГАЛОЧКИ». Второстепенность
   строка получает не мелким кеглем (он равен обычному тексту сводки), а
   тем, что у неё нет рамки-коробки, как у строки про юрлицо.

   Скрытому блоку нужен свой сторож: правило выше задаёт ему display:flex,
   а авторское правило сильнее браузерного [hidden]{display:none}. */
.sc-cart .promo-check + .promo-row{margin-top:calc(12 * var(--u))}
.sc-cart .promo-row[hidden]{display:none}
.sc-cart .cart-promo{margin-bottom:calc(18 * var(--u))}
.sc-cart .promo-row input{width:100%}
.sc-cart .promo-apply{flex:none}

/* Счётчик количества — той же толщины, что и поля: он такой же элемент
   ввода, только со стрелками вместо клавиатуры. */
.sc-cart .qty{
  --cap-stroke:0.0459;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * var(--cap-stroke)),
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * var(--cap-stroke));
  background-image:url(img/cap-fat-green-l.svg),url(img/cap-fat-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))}

/* ---- ещё два поля, что жили со своей формой ----

   Помол в карточке товара и поиск в шапке рисовались отдельными
   картинками (pdp-field-select и hd-shape-search): та же фигура, но
   тоньше. Рядом с новыми полями разница бросалась в глаза — приводим к
   общему виду. Габариты у обоих свои, поэтому меняем только слои фона,
   а высоту и отступы каждый держит сам. */
.sc2026-page .pdp-buy .buy-select select,
.hd-search{
  --cap-stroke:0.0459;
  --cap:calc(var(--btn-h) * 0.5556);
  background-color:transparent!important;
  background-repeat:no-repeat!important;
  background-position:left center, right center, center top, center bottom!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * var(--cap-stroke)),
    calc(100% - 2 * var(--cap)) calc(var(--btn-h) * var(--cap-stroke))!important;
  background-image:url(img/cap-fat-green-l.svg),url(img/cap-fat-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand)),
    linear-gradient(var(--green-brand),var(--green-brand))!important}

/* Высота у каждого своя — от неё считается ширина боковин. */
.sc2026-page .pdp-buy .buy-select select{--btn-h:calc(36 * var(--mp))}
.hd-search{--btn-h:calc(50 * var(--u))}

/* ---- счётчик количества — такое же поле ----

   Он был ниже остальных (44 против 52), а боковина — картинка и тянется
   по высоте вместе с обводкой: линия выходила 1,41 против 1,67 у соседнего
   промокода, и рядом это читалось как «одно поле жирнее другого».
   Уравниваем по высоте — он и есть поле ввода, только со стрелками.

   Поиску в шапке фиксированную толщину не навязываем: он крупнее прочих,
   и обводка у него пропорционально крупнее — это та же логика, а не
   исключение. Пробовали задать ему постоянную толщину — она разъезжается
   на других ширинах окна, потому что высота поиска плавающая. */
.sc-cart .qty{--btn-h:calc(52 * var(--u));height:var(--btn-h)}

/* ---- «Применить» — это кнопка ----
   Стояла контурной, и рядом с полем промокода читалась как второе поле.
   Действие должно выглядеть действием: заливка, а не контур. */
.sc-cart .promo-apply{
  --btn-h:calc(46 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  min-height:var(--btn-h);height:var(--btn-h);
  padding:0 calc(26 * var(--u));
  color:#fff!important;
  background-position:left center, right center, center!important;
  background-size:auto 100%, auto 100%,
    calc(100% - 2 * var(--cap) + 2px) 100%!important;
  background-image:url(img/cap-green-l.svg),url(img/cap-green-r.svg),
    linear-gradient(var(--green-brand),var(--green-brand))!important}
.sc-cart .promo-apply:hover{filter:brightness(1.07)}


/* «Отмена» в окне адреса — контурная кнопка той же формы, что и остальные.
   Раньше поверх формы лежала серая заливка со скруглением, и кнопка
   читалась как прямоугольная плашка. */
.sc-addr-acts .sc-addr-cancel{
  --btn-h:calc(50 * var(--u));--cap:calc(var(--btn-h) * 0.5556);
  height:var(--btn-h);min-height:var(--btn-h);
  background-color:transparent!important;
  border-radius:0!important}

/* ---- «Отмена»: контур одной картинкой ----
   Герман 21.09.2026: «у кнопки Отмена неровная обводка».

   ПОЧЕМУ БЫЛО НЕРОВНО. Общее правило контурных кнопок (выше, блок
   «контур») рисует фигуру четырьмя слоями: боковины картинками
   img/cap-lgreen-{l,r}.svg и две горизонтальные линии линейным градиентом.
   Числа там сходятся: в файле боковины обводка 1,6 при высоте 55,6, а
   линии заданы как 0,0288 от высоты — те же 1,6/55,6. Но сходится только
   арифметика: браузер растрирует обводку внутри SVG и полосу градиента
   разными путями, и на стыке у скоса одна и та же толщина ложится в
   пиксели по-разному. На полутора физических пикселях это и читается как
   «обводка то тоньше, то толще». Ровно из-за этого поля ввода ниже уже
   переведены на цельную картинку (блок «РАМКА ПОЛЯ — ОДНОЙ КАРТИНКОЙ»), а
   пункты кабинета .acc-nav-i — на kit/chip40-frame.svg.

   ЧТО ДЕЛАЕМ. Той же дорогой ведём и эту кнопку: рамку рисует одна
   картинка через border-image, боковины берутся из её краёв неискажёнными,
   середина тянется. Линия сходится с боковиной по построению, а не по
   подобранным числам, и толщина одинакова по всему периметру.

   Берём img/field-frame-green.svg — ту же рамку, что у полей окна адреса
   прямо над кнопкой: своей картинки под кнопку в наборе нет, а рядом с
   полями кнопка теперь одной с ними толщины (2,6 при высоте 56,6). Она
   заметнее прежней 1,6 — это и правильно: в ряду «Отмена» и «Доставить
   сюда» контур не должен теряться рядом с заливкой.

   ПРАВИМ ТОЧЕЧНО: общее правило контурных кнопок не трогаем, хотя шов у
   них тот же. Перевод всех кнопок сайта на цельную рамку — отдельная
   работа: у бордовых и белых контуров своих картинок-рамок нет, их надо
   рисовать.

   Вес селектора 0,3,0 нарочно: у interactions.css есть
   .sc-addr-cancel:active (0,2,0), который возвращает фон боковинами. Через
   border-image цвет нажатия не сменить (бордовой рамки-картинки нет),
   поэтому фон гасим во всех состояниях, а нажатие остаётся тем, что видно
   и так: кнопка проседает на 2 % (interactions.css). */
.sc-addr-acts .sc-addr-cancel.sc-addr-cancel{
  --frame-cap:calc(var(--btn-h) * 0.4947);
  background-image:none!important;
  border-style:solid!important;
  border-width:0 var(--frame-cap)!important;
  border-color:transparent!important;
  border-image-source:url(img/field-frame-green.svg)!important;
  border-image-slice:0 28 fill!important;
  border-image-width:0 var(--frame-cap)!important;
  border-image-repeat:stretch!important;
  border-image-outset:0!important;
  /* Боковины рамки — это и есть боковой отступ текста: своего padding
     кнопке хватает нулевого, иначе «Отмена» уезжает к середине. */
  padding-left:0!important;padding-right:0!important}
/* Цвет букв на нажатии тоже оставляем зелёным: бордовые буквы в зелёной
   рамке читались бы как ошибка. */
.sc-addr-acts .sc-addr-cancel.sc-addr-cancel:active{color:var(--green-deep-2)!important}

/* ---- пункты самовывоза ----
   Показываются вместо полей адреса, когда выбран самовывоз. */
.sc-pick[hidden]{display:none}
.sc-pick h3{font-family:var(--font);font-weight:900;font-size:calc(20 * var(--u));
  color:var(--ink);margin:calc(18 * var(--u)) 0 calc(12 * var(--u))}
.sc-pick-list{list-style:none;margin:0;padding:0;display:flex;
  flex-direction:column;gap:calc(10 * var(--u))}
.sc-pick-item{display:block;width:100%;text-align:left;cursor:pointer;
  background:#fff;border:calc(2 * var(--u)) solid var(--tile-line);
  border-radius:calc(16 * var(--u));
  padding:calc(14 * var(--u)) calc(16 * var(--u));
  transition:border-color .18s,background .18s}
.sc-pick-item:hover{border-color:var(--green-pale)}
.sc-pick-item.on{border-color:var(--green-brand);background:rgba(0,114,59,.05)}
.sc-pick-item b{display:block;font-family:var(--font-ui);font-weight:700;
  font-size:calc(15 * var(--u));line-height:1.3;color:#000}
.sc-pick-item span{display:block;margin-top:calc(6 * var(--u));
  font-family:var(--font-ui);font-size:calc(13 * var(--u));line-height:1.4;
  color:var(--ink-soft)}
.sc-pick-item em{display:block;margin-top:calc(4 * var(--u));font-style:normal;
  font-family:var(--font-ui);font-size:calc(13 * var(--u));color:var(--green-deep-2)}
.sc-pick-note{margin:calc(12 * var(--u)) 0 0;font-family:var(--font-ui);
  font-size:calc(13 * var(--u));line-height:1.45;color:var(--ink-soft)}

/* В самовывозе прячется «Куда доставить заказ?» — правило выше гасит все
   заголовки окна, а наш «Откуда заберёте?» должен остаться. */
.sc-addr-modal.is-pickup .sc-pick h3{display:block}

/* ==========================================================================
   РАМКА ПОЛЯ — ОДНОЙ КАРТИНКОЙ

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

   Теперь рамку рисует одна картинка через border-image: боковины берутся из
   её краёв неискажёнными, середина растягивается. Вертикальный масштаб у
   краёв и середины общий, поэтому линия сходится с боковиной по построению,
   а не по подобранным числам.
   ========================================================================== */
.sc-field input,
.auth-f input,
.sc-cart .promo-row input,
.sc-cart .qty,
.sc-checkout .form-control,
.sc-checkout input[type=text],
.sc-checkout input[type=tel],
.sc-checkout input[type=email],
.sc-checkout select.form-control,
.sc-checkout .bx-soa-section input.form-control,
.sc-checkout .bx-soa-section select.form-control,
.sc-checkout .bx-soa-customer input.form-control,
.b2b-form input:not([type=checkbox]):not([type=radio]),
.b2b-form select,
.sc-city-modal input[type=search],
.sc2026-page .pdp-buy .buy-select select,
.hd-search{
  /* Сколько от картинки отводится боковине. Закругление кончается на 26-й
     единице из 56,6, поэтому режем по 28 — с запасом, но без лишнего:
     при 40 боковины съедали по 29 px с каждой стороны, и короткие поля
     вроде счётчика количества раздувались вдвое. */
  --frame-cap:calc(var(--btn-h) * 0.4947);
  background-image:none!important;
  border-style:solid!important;
  border-width:0 var(--frame-cap)!important;
  border-color:transparent!important;
  border-image-source:url(img/field-frame-green.svg)!important;
  border-image-slice:0 28 fill!important;
  border-image-width:0 var(--frame-cap)!important;
  border-image-repeat:stretch!important;
  border-image-outset:0!important;
  /* Отступ текста считаем от края поля, а не от края рамки. */
  padding-left:calc(20 * var(--u) - var(--frame-cap))!important;
  padding-right:calc(20 * var(--u) - var(--frame-cap))!important}

/* Счётчик — короткий элемент: отступы не нужны, кнопки внутри жмём, иначе
   боковины рамки растаскивают его в широкую плашку. */
.sc-cart .qty{padding-left:0!important;padding-right:0!important}
.sc-cart .qty button{width:calc(26 * var(--u))}
.sc-cart .qty span{min-width:calc(26 * var(--u))}

/* Самовывоз выбран — способ доставки спрашивать незачем: покупатель уже
   сказал, что заберёт сам, и в списке всё равно осталась одна скрытая
   служба. Прячем весь раздел, чтобы не смущал пустотой. */
.sc-checkout.is-pickup #bx-soa-delivery,
.sc-checkout.is-pickup .bx-soa-section.bx-soa-delivery{display:none!important}

/* Окно оплаты банка. Свои стили Halyk вставляет в head в момент вызова —
   то есть позже наших, — поэтому перебиваем с !important. У них жёстко
   400 px и без кнопки закрытия: на телефоне это вылезало бы за экран. */
.widgetScreen{z-index:500!important}
.widgetScreen .iframeBox{
  width:min(440px, calc(100vw - 24px))!important;
  border-radius:calc(20 * var(--u))!important;overflow:hidden!important;
  box-shadow:0 30px 80px rgba(20,40,20,.35)!important}
.widgetScreen .iframeClass{height:min(90vh, 720px)!important}

/* Своя кнопка закрытия: у банка она в коде закомментирована, и выйти из
   окна иначе нельзя. */
.epay-widget-x{position:fixed;z-index:501;top:calc(50vh - min(45vh,360px) - 18px);
  left:50%;transform:translateX(calc(min(220px, 50vw - 12px) - 18px));
  width:36px;height:36px;border:0;border-radius:50%;background:#fff;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 14px rgba(20,40,20,.25);font-size:22px;line-height:1;color:#333}
.epay-fallback[hidden]{display:none}
.epay-fallback a{color:var(--green-brand);text-decoration:underline}

/* ---- страница «заказ оформлен» ----
   Пока не оплачено — говорим про последний шаг, а не поздравляем. */
.sc-order-step,
.sc-order-done{margin:calc(24 * var(--u)) 0 calc(28 * var(--u))}
.sc-order-step-h,
.sc-order-done-h{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(26 * var(--u));line-height:1.15;color:var(--ink);margin:0}
.sc-order-done-h{color:var(--green-deep-2)}
.sc-order-step-t{margin:calc(12 * var(--u)) 0 0;font-family:var(--font-ui);
  font-size:calc(16 * var(--u));line-height:1.5;color:#000;max-width:calc(640 * var(--u))}
.sc-order-step-a{display:flex;align-items:center;flex-wrap:wrap;
  gap:calc(20 * var(--u));margin-top:calc(22 * var(--u))}
.sc-order-more{font-family:var(--font-ui);font-size:calc(15 * var(--u));
  color:var(--green-brand);text-decoration:underline}

/* ---- страница оплаты заказа ----
   Сюда попадает тот, у кого не открылось окно банка, и тот, кто платит
   заказ позже. Раньше это была голая вёрстка Битрикса: заголовок, логотип
   в сто пикселей и ссылка. Приводим к виду остального сайта. */
.sc-pay-card{
  max-width:calc(560 * var(--d));
  margin:calc(24 * var(--d)) 0 calc(40 * var(--d));
  background:#fff;border-radius:calc(24 * var(--d));
  padding:calc(28 * var(--d)) calc(30 * var(--d));
  box-shadow:0 calc(10 * var(--d)) calc(30 * var(--d)) rgba(20,40,20,.07)}
.sc-pay-card-h{display:flex;align-items:center;gap:calc(14 * var(--d));
  padding-bottom:calc(18 * var(--d));margin-bottom:calc(20 * var(--d));
  border-bottom:1px solid var(--tile-line)}
.sc-pay-logo{flex:none;width:calc(52 * var(--d));height:calc(52 * var(--d));
  display:flex;align-items:center;justify-content:center;overflow:hidden;
  border-radius:calc(12 * var(--d));background:var(--bg-soft)}
.sc-pay-logo img{max-width:100%;max-height:100%;display:block}
.sc-pay-name{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:calc(18 * var(--d));line-height:1.15;color:var(--ink)}
.sc-pay-card-b .epay-box{margin:0}
.sc-pay-card-b .epay-sum{margin-bottom:calc(16 * var(--d))}

/* Заголовок «Оплата заказа» от компонента — в нашей типографике. */
.sc-checkout .pay_name{font-family:var(--font);font-weight:900;
  text-transform:uppercase;font-size:calc(22 * var(--d));
  color:var(--green-deep-2);margin:calc(28 * var(--d)) 0 0}

/* На странице заказа адрес менять уже поздно — заказ создан. Блок выбора
   адреса там только сбивает: он предлагает то, что ни на что не влияет. */
.sc-checkout.is-placed .sc-addr,
.sc-checkout.is-placed .sc-addr-modal{display:none!important}

/* Окно оплаты убрано: форма банка не работает ни в какой рамке — ни в
   своей короткой, ни в нашей. Ввод карты банк намеренно не пускает во
   фрейм, и это правильно. Оплата идёт отдельной страницей банка. */

/* ==========================================================================
   НАБОР ТЕКСТА — как в макете

   Дизайнер прислал правку: шрифт Gotham Pro и ровно шесть конфигураций
   текста, других быть не должно. Размер / межстрочное / начертание:

       H1  40 / 110 / Black      заголовок страницы
       H2  24 / 110 / Black      заголовок раздела
       H3  20 / 110 / Medium     заголовок карточки, плитки
       21  21 / 110 / Black      крупная цифра, цена
       Medium  17 / 115 / Medium подзаголовок, кнопка, подпись
       Regular 14 / 130 / Regular обычный текст

   Размеры здесь в единицах макета (--d), поэтому на экране они выходят
   меньше — это общий масштаб сайта, который заказчик просил уменьшить.
   Пропорции и межстрочные при этом ровно из макета.
   ========================================================================== */
:root{
  --t-h1:calc(40 * var(--d));  --t-h1-lh:1.1;
  --t-h2:calc(24 * var(--d));  --t-h2-lh:1.1;
  --t-h3:calc(20 * var(--d));  --t-h3-lh:1.1;
  --t-21:calc(21 * var(--d));  --t-21-lh:1.1;
  --t-md:calc(17 * var(--d));  --t-md-lh:1.15;
  --t-rg:calc(14 * var(--d));  --t-rg-lh:1.3;
}

/* Обычный текст: было 155 %, в макете 130 %. Расхождение видно в каждом
   абзаце, поэтому правим у корня, а не по месту. */
body{line-height:var(--t-rg-lh)}

.t-h1{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:var(--t-h1);line-height:var(--t-h1-lh)}
.t-h2{font-family:var(--font);font-weight:900;text-transform:uppercase;
  font-size:var(--t-h2);line-height:var(--t-h2-lh)}
.t-h3{font-family:var(--font);font-weight:500;
  font-size:var(--t-h3);line-height:var(--t-h3-lh)}
.t-21{font-family:var(--font);font-weight:900;
  font-size:var(--t-21);line-height:var(--t-21-lh)}
.t-md{font-family:var(--font);font-weight:500;
  font-size:var(--t-md);line-height:var(--t-md-lh)}
.t-rg{font-family:var(--font);font-weight:400;
  font-size:var(--t-rg);line-height:var(--t-rg-lh)}

/* ---- главная: приводим роли к набору ---- */
.sc2026-page .sec-title{font-size:var(--t-h2);line-height:var(--t-h2-lh);font-weight:900}
.sc2026-page .entry h3{font-size:var(--t-h3);line-height:var(--t-h3-lh);font-weight:900}
.sc2026-page .entry p,
.sc2026-page .entry li{font-size:var(--t-rg);line-height:var(--t-rg-lh);font-weight:400}
/* Здесь была моя ошибка: правила целились в `.qc b` и `.qc span`, а в
   карточке теста нет ни одного `b`, зато `span` — вообще всё, включая
   заголовок. В итоге и название, и описание получили один и тот же
   14-й кегль, и дизайнер справедливо написал «текст вообще не того
   размера, такого стиля даже не было». Целимся в свои классы. */
.sc2026-page .qc .qc-t{font-weight:900;line-height:var(--t-h2-lh)}
.sc2026-page .qc .qc-d{font-weight:500;line-height:var(--t-md-lh)}


/* ==========================================================================
   ОДИН ШРИФТ НА ВЕСЬ САЙТ

   Штатные компоненты Битрикса и остатки старой темы приносят свои
   font-family: Inter, Arial, Helvetica. Раньше их перебивали по месту,
   и на каждой новой странице вылезал чужой шрифт. Здесь одно правило на
   всё; наш файл подключён последним, поэтому оно и выигрывает.

   Иконочные шрифты исключены: у них в font-family лежит имя набора, и
   если его подменить, вместо значка выйдет пустой квадрат. По той же
   причине не трогаем виджет Битрикс24 — он рисует себя сам.
   ========================================================================== */
body,
body *:not(i):not([class*="fa-"]):not([class*="fa "]):not([class*="ui-icon"]):not([class*="b24"]):not([class*="bx-icon"]):not(code):not(pre):not(kbd):not(samp){
  font-family:var(--font);
}


/* ==========================================================================
   ПРАВКИ ДИЗАЙНЕРА ПО ГЛАВНОЙ (скрины 02.09)
   ========================================================================== */

/* «Отступ лишний» — у списков в плитках был отступ слева в 32 px, и
   маркеры уезжали от заголовка. В макете «▸ Зерновой кофе» начинается
   там же, где «ДЛЯ ДОМА». */
.entry ul{padding-left:0}

/* «Белая обводка не нужна у этих плашек» — с плашек «Новинка», «Хит»,
   «Под заказ» убираем белый кант. Он был нужен, пока плашка висела на
   зелёном контуре карточки; дизайнер его не хочет. */
.ptag{filter:none}

/* «Тут другие точки» — переключатель баннера был чёрточками, в макете
   круглые точки: активная залита, остальные обведены. */
.hero-dots{gap:calc(10 * var(--u))}
.hero-dots i{width:calc(11 * var(--u));height:calc(11 * var(--u));
  border-radius:50%;background:none;
  box-shadow:inset 0 0 0 calc(1.6 * var(--u)) rgba(255,255,255,.9)}
.hero-dots i.on{width:calc(11 * var(--u));background:#fff;box-shadow:none}
@media(max-width:1099px){
  .hero-dots i,.hero-dots i.on{width:9px;height:9px}
}

/* «Лучше картинка перемещается вправо» — это про наведение. Было:
   снимок наезжал на зрителя (подъём на 4 px и увеличение на 2 %).
   Стало: просто уезжает вправо, во всех четырёх плитках. Орнамент
   позади не трогаем — двигается только фотография. */
.entry:hover .pic{transform:translateX(-44%)}


/* «При наведении» — кнопка «Узнать подробнее» становится бордовой. */
.entry .entry-btn:hover{
  background-image:url(img/cap-bordo-l.svg),url(img/cap-bordo-r.svg),
    linear-gradient(var(--cart),var(--cart))}

/* «кения 3» — дизайнер прислал сборку целиком: кольцо и снимок одним
   файлом 420×532. Раньше это были два слоя, и низ кольца срезался краем
   секции. Кладём файл как есть, без обрезки и без отражения — он уже
   собран так, как нужно.

   Посадка считана по кольцу, чтобы кружок остался на прежнем месте: в
   старом орнаменте кольцо занимало 17..402 / 25..421 при коробке
   (-22, 273), центр приходился на (187,5; 496). В новом файле кольцо
   стоит на 17..402 / 89..485, центр (209,5; 287) — отсюда верх 209. */
.quiz-deco .d-man{left:calc(-22 * var(--qu));top:calc(209 * var(--qu));
  width:calc(420 * var(--qu));height:calc(532 * var(--qu));overflow:visible}
.quiz-deco .d-man img{width:100%;height:100%;object-fit:contain;transform:none}
/* Секция режет всё, что вылезает за её край. Содержимое сборки кончается
   на 695 — этой высоты колонке и хватает. */
.quiz-aside{min-height:calc(700 * var(--qu))}


/* Размер текста в карточках теста — по замечанию дизайнера «нужен 24».
   Остальной сайт живёт в долях макета и на экране выходит мельче
   нарисованного; здесь ставим настоящие пиксели, чтобы 24 были 24.
   Пара из таблицы: 24/110/Black — название, 17/115/Medium — описание. */
.qc .qc-t{font-size:24px;line-height:1.1}
.qc .qc-d{font-size:17px;line-height:1.15}
@media(max-width:1039px){
  .qc .qc-t{font-size:20px}
  .qc .qc-d{font-size:15px}
}


/* ==========================================================================
   ПРАВКИ ДИЗАЙНЕРА ПО ШАПКЕ И ФОНУ (скрин 02.09)
   ========================================================================== */

/* «Уровень разный» — город собран кнопкой с полями и прижат к верху,
   а «Войти», «Избранное» и «Корзина» — ссылки без полей. Пока названия
   городов короткие, ряд выглядел ровным; на длинном («г. Кокшетау»)
   расходился. Собираем все четыре одинаково. */
.hd-ico{justify-content:flex-start;
  padding:calc(6 * var(--d)) calc(10 * var(--d));
  border-radius:calc(12 * var(--d));
  transition:background-color .18s}
.hd-city-btn{padding:calc(6 * var(--d)) calc(10 * var(--d));
  border-radius:calc(12 * var(--d))}

/* «А также другая hover версия» — у города при наведении появлялась
   светло-зелёная плашка, у остальных значков только притухание. Теперь
   плашка у всех четырёх. */
.hd-ico:hover{opacity:1;background:var(--green-pale)}

/* «Вот этот узор убрать нужно» — перо справа от плитки «Наши точки». */
/* .bg-orn-1 раньше пряталась — заказчик просил убрать «перо» справа от
   плитки «Наши точки». Теперь просил перенести фон главной целиком,
   поэтому узор вернулся: он часть фона из макета. */


/* Ряд значков в шапке — по разбору дизайнера:
   один ряд, четыре столбца, подписи всех четырёх стоят на нижней кромке
   ряда, значок — на 8 над подписью. Раньше столбцы прижимались к верху,
   и подписи с разной высотой строки (у города кегль крупнее) вставали
   на разном уровне. Теперь равняем по низу, и высота значка или длина
   названия города на ряд уже не влияют. */
.hd-tools{align-items:flex-end}
.hd-city,
.hd-right,
.hd-right .bx-basket{display:flex;align-items:flex-end}
.hd-ico,
.hd-city-btn{justify-content:flex-end;gap:calc(8 * var(--d))}
/* У названия города межстрочное было 1,15, у соседних подписей 1 — при
   равном низу строка города всё равно сидела чуть иначе. Уравниваем. */
.hd-city-wrap{line-height:1}
.hd-city-wrap b{line-height:1}
/* «Цвета только разные как будто» — так и было: название города красилось
   ярким фирменным #00723B, а «Войти» и «Избранное» глубоким #22612B.
   Один цвет на все подписи, кроме корзины — она бордовая по макету. */
.hd-city-wrap b{color:var(--green-deep-2)}


/* ==========================================================================
   КАРТИНКА В ПЛИТКЕ НЕ РАСТЁТ ВМЕСТЕ С ПЛИТКОЙ

   Я проверял «увеличение» по свойству scale и не находил его — а росла
   не картинка сама по себе, а её ширина: снимок и орнамент заданы в
   процентах от плитки, и когда аккордеон раздвигал плитку с 390 до 900,
   вместе с ней раздувался и снимок.

   Теперь ширина слоёв считается от ряда, а не от плитки: ряд объявлен
   контейнером, и слой всегда шириной в одну «спокойную» плитку —
   (ширина ряда − три промежутка) / 4. Плитка раздвигается, снимок
   остаётся прежнего размера и просто уезжает вправо вместе с серединой
   плитки. У поджатых соседей он по той же причине не сжимается, а
   подрезается краем плитки.
   ========================================================================== */
@media(min-width:1000px) and (hover:hover){
  .entries{container-type:inline-size}
  .entry{--tile-w:calc((100cqw - 3 * 24px) / 4)}

  .entry .pic{width:var(--tile-w)}

  /* Ширина орнамента — своя доля плитки, как в макете. Держим её в
     переменной: она нужна ещё и для сдвига вправо. */
  .e-home  .orn{--orn-w:calc(var(--tile-w) * .9015)}
  .e-biz   .orn,
  .e-quiz  .orn{--orn-w:var(--tile-w)}
  .e-where .orn{--orn-w:calc(var(--tile-w) * .8892)}
  .entry .orn{width:var(--orn-w)}

  /* Наведённая плитка уводит снимок к правому краю: слева остаётся
     заголовок со списком, справа фотография. Двигаем не transform'ом, а
     left — сдвиг нужен на разницу ширин плитки и снимка, а проценты в
     translateX считаются от самого снимка и такой разницы не знают.
     Орнамент едет на столько же, иначе кольцо остаётся посередине, а
     фотография уходит от него вправо. */
  .entry .pic,
  .entry .orn{transition:transform .5s var(--ease),left .5s var(--ease)}
  .entries .entry:hover .pic{left:calc(100% - var(--tile-w));transform:none}
  .entries .entry:hover .orn{
    left:calc((100% - var(--orn-w)) / 2 + (100% - var(--tile-w)) / 2);
    transform:none}
}

/* Скрытые подсказки на странице оплаты. Правило .epay-note{display:...}
   перебивало атрибут hidden, и подсказка «окно банка не открылось?»
   висела на виду с самого начала. */
.epay-box [hidden],
.epay-done[hidden]{display:none !important}


/* ==========================================================================
   БЛОК ОПЛАТЫ — по «Гайду по кнопкам оплаты» Halyk

   Две кнопки: «в приложении Halyk» (главнее) и «картой любого банка» с
   иконками платёжных систем. Цвета банка #2AA65C / #EAF6EF, высота от 48,
   скругление 12, логотип Halyk обязателен. Своих скосов здесь нет
   намеренно: это кнопки банка, и узнаваться они должны как его.
   ========================================================================== */
.sc-epay{max-width:calc(520 * var(--d))}
.epay-loading{font-family:var(--font-ui);color:var(--ink-soft)}
.epay-pay .epay-sum{margin:0 0 calc(18 * var(--d));font-family:var(--font-ui);font-size:calc(17 * var(--d))}
.epay-pay .epay-sum b{font-family:var(--font);font-weight:900;font-size:calc(24 * var(--d))}
.epay-test{margin:calc(-8 * var(--d)) 0 calc(14 * var(--d));padding:calc(8 * var(--d)) calc(12 * var(--d));
  background:#fdf3e3;color:#7a5410;border-radius:12px;font-family:var(--font-ui);font-size:calc(14 * var(--d))}

.epay-btn{display:flex;align-items:center;justify-content:center;gap:calc(10 * var(--d));
  width:100%;min-height:48px;padding:0 calc(20 * var(--d));margin:0 0 calc(10 * var(--d));
  border:0;border-radius:12px;cursor:pointer;
  font-family:var(--font);font-weight:500;font-size:calc(17 * var(--d));line-height:1.15;
  transition:filter .18s ease,transform .18s var(--ease)}
.epay-btn:hover{filter:brightness(1.05);transform:translateY(-1px)}
.epay-btn[disabled]{opacity:.6;cursor:default;transform:none}
.epay-btn img{height:calc(24 * var(--d));width:auto;display:block}
.epay-btn-app{background:#2AA65C;color:#fff}
.epay-btn-card{background:#EAF6EF;color:#1a1a1a}
.epay-btn-card.is-primary{background:#2AA65C;color:#fff}
.epay-btn-card.is-primary .epay-btn-ico{filter:brightness(0) invert(1)}
.epay-btn-saved{background:var(--green-brand);color:#fff}

.epay-badges{display:flex;flex-wrap:wrap;gap:calc(6 * var(--d));margin:calc(-2 * var(--d)) 0 calc(14 * var(--d))}
.epay-badges img{height:calc(20 * var(--d));width:auto;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.08)}

/* Apple Pay — фирменная кнопка Safari (Apple требует свою, рисует её сам
   браузер). Кнопка есть в разметке только там, где есть ApplePaySession. */
.epay-btn-apple{-webkit-appearance:-apple-pay-button;appearance:-apple-pay-button;
  -apple-pay-button-type:check-out;-apple-pay-button-style:black;
  width:100%;height:48px;min-height:48px;margin:0 0 calc(8 * var(--d));padding:0;border:0;border-radius:12px;
  background:#000;color:#fff;cursor:pointer}
.epay-hint{margin:0 0 calc(14 * var(--d));font-family:var(--font-ui);font-size:calc(13 * var(--d));line-height:1.3;color:var(--ink-soft)}

.epay-saved{margin:0 0 calc(14 * var(--d))}
.epay-label{margin:0 0 calc(8 * var(--d));font-family:var(--font-ui);font-size:calc(14 * var(--d));color:var(--ink-soft)}
.epay-card{display:flex;align-items:center;gap:calc(10 * var(--d));padding:calc(10 * var(--d)) calc(14 * var(--d));
  margin:0 0 calc(8 * var(--d));border:1.5px solid var(--line);border-radius:12px;cursor:pointer;
  font-family:var(--font-ui);font-size:calc(15 * var(--d))}
.epay-card:has(input:checked){border-color:#2AA65C;background:#EAF6EF}
.epay-card input{accent-color:#2AA65C}
.epay-card img{height:calc(18 * var(--d));width:auto}
.epay-card i{margin-left:auto;font-style:normal;color:var(--ink-soft);font-size:calc(13 * var(--d))}
.epay-or{margin:calc(6 * var(--d)) 0 calc(10 * var(--d));text-align:center;font-family:var(--font-ui);color:var(--ink-soft);font-size:calc(14 * var(--d))}

.epay-save{display:flex;align-items:flex-start;gap:calc(8 * var(--d));margin:calc(4 * var(--d)) 0 0;
  font-family:var(--font-ui);font-size:calc(14 * var(--d));color:var(--ink-soft);cursor:pointer}
.epay-save input{margin-top:3px;accent-color:#2AA65C}

.epay-3ds iframe{width:100%;min-height:460px;border:1.5px solid var(--line);border-radius:12px;background:#fff}
.epay-3ds p{margin:calc(10 * var(--d)) 0;font-family:var(--font-ui)}

.epay-done{max-width:calc(620 * var(--d))}
.epay-done-h{margin:0;font-family:var(--font);font-weight:900;font-size:calc(24 * var(--d));line-height:1.1;text-transform:uppercase;color:var(--green-brand)}
.epay-done.is-fail .epay-done-h{color:#8b2628}
.epay-done-t{margin:calc(12 * var(--d)) 0 0;font-family:var(--font-ui);font-size:calc(17 * var(--d));line-height:1.3}
.epay-done-a{display:flex;align-items:center;flex-wrap:wrap;gap:calc(18 * var(--d));margin:calc(22 * var(--d)) 0 0}
.epay-more{font-family:var(--font-ui);font-size:calc(15 * var(--d));color:var(--green-brand);text-decoration:underline}

/* Заказ оформлен — блок на месте формы оформления. */
.sc-order-placed{padding:calc(10 * var(--d)) 0 calc(40 * var(--d))}
.sc-order-placed-h{margin:0 0 calc(18 * var(--d));font-family:var(--font);font-weight:900;font-size:calc(24 * var(--d));line-height:1.1;text-transform:uppercase}
.sc-epay [hidden]{display:none !important}

/* Сохранённые карты в кабинете. */
.acc-card-row{display:flex;align-items:center;gap:calc(12 * var(--u));padding:calc(10 * var(--u)) 0;border-bottom:1px solid var(--line);font-family:var(--font-ui)}
.acc-card-row:last-of-type{border-bottom:0}
.acc-card-row img{height:calc(20 * var(--u));width:auto}
.acc-card-row b{font-family:var(--font);font-weight:500}
.acc-card-row span{color:var(--ink-soft);font-size:calc(14 * var(--u))}
.acc-card-del{margin-left:auto;background:none;border:0;color:#8b2628;text-decoration:underline;cursor:pointer;font-family:var(--font-ui);font-size:calc(14 * var(--u))}
.acc-cards-empty,.acc-cards-note{margin:0;font-family:var(--font-ui);font-size:calc(14 * var(--u));color:var(--ink-soft)}
.acc-cards-note{margin-top:calc(10 * var(--u))}

/* Блок оплаты в правой колонке «Ваш заказ» — на месте кнопки оформления. */
.sc-epay-side{max-width:none;margin-top:calc(16 * var(--d))}
.sc-epay-side .epay-pay .epay-sum{font-size:calc(15 * var(--d))}
.sc-epay-side .epay-pay .epay-sum b{font-size:calc(20 * var(--d))}
.sc-epay-side .epay-btn{font-size:calc(15 * var(--d));padding:0 calc(12 * var(--d))}
.sc-epay-side .epay-badges img{height:calc(16 * var(--d))}
.sc-epay-side .epay-done-h{font-size:calc(20 * var(--d))}
.sc-epay-side .epay-done-t{font-size:calc(15 * var(--d))}
/* Оформленный заказ: левая колонка видна, но не живая. */
.sc-checkout [inert]{opacity:.85}


/* Способ получения и способ оплаты: логотип крупнее и в квадрате.
   Заказчик: «логотипы мелкие, сделаем крупнее и квадратными». Квадрат
   56×56 со скруглением 12, картинка внутри по центру целиком. */
.sc-checkout .bx-soa-pp-company-graf-container img{
  width:calc(56 * var(--u))!important;height:calc(56 * var(--u))!important;
  max-width:none!important;max-height:none!important;
  object-fit:contain;padding:calc(6 * var(--u));box-sizing:border-box;
  background:#fff;border:1px solid var(--line);border-radius:12px}
.sc-checkout .bx-soa-pp-company-selected img{
  width:calc(56 * var(--u));height:calc(56 * var(--u));max-width:none;object-fit:contain;
  padding:calc(6 * var(--u));box-sizing:border-box;background:#fff;border:1px solid var(--line);border-radius:12px}
/* Выходы из зависшей формы банка: подсказка должна быть видна поверх
   затемнения виджета, поэтому поднимаем блок над ним. */
.epay-alt{position:relative;z-index:2147483647;margin-top:calc(10 * var(--d));padding:calc(10 * var(--d)) calc(12 * var(--d));
  background:#fff;border:1px solid var(--line);border-radius:12px}
.epay-alt .epay-note{margin:0}
/* На время показа подсказка живёт на body — поверх подложки банка (её z-index 1000). */
.epay-alt.is-float{position:fixed;left:50%;bottom:calc(24 * var(--d));transform:translateX(-50%);z-index:2000;
  width:calc(100% - 32px);max-width:520px;margin:0;background:#fff;border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,.28)}
.epay-alt-a{display:flex;gap:calc(14 * var(--d));flex-wrap:wrap;margin:calc(8 * var(--d)) 0 0}
.epay-link{font-family:var(--font-ui);font-size:calc(14 * var(--d));color:var(--green-brand);text-decoration:underline}

/* Логотип службы доставки и способа оплаты приходит не картинкой, а
   фоном у .bx-soa-pp-company-image (предыдущее правило целилось в img и
   не срабатывало). Квадрат 56×56, скругление 12, логотип внутри целиком. */
.sc-checkout .bx-soa-pp-company-image{
  width:calc(56 * var(--u))!important;height:calc(56 * var(--u))!important;
  min-width:0;max-width:none;flex:none;
  background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;
  background-color:#fff;border:1px solid var(--line);border-radius:12px;
  box-sizing:border-box;padding:0;background-origin:content-box;
  background-clip:content-box;padding:calc(6 * var(--u))}
.sc-checkout .bx-soa-pp-company-graf-container{align-items:center}
.epay-wait{margin:calc(10 * var(--d)) 0 0;font-family:var(--font-ui);font-size:calc(14 * var(--d));color:var(--ink-soft)}

/* Товара нет в выбранном городе (плашку ставит stock.js).
   Герман 23.09.2026: не возить между городами дороже, а честно говорить
   «нет в наличии». Гасим покупку теми же стилями, что у товара, которого
   нет нигде: .pact-cart.is-out и .pbtn.is-out выше. */
.pcard.is-city-out .pact-cart,
.pdp-buy.is-city-out .pbtn.buy-cta{filter:grayscale(1);opacity:.45;cursor:default;pointer-events:none}
.pdp-buy.is-city-out .pbtn.buy-cta:hover{transform:none}
