/* ============================================================================
   v3 · 01 ГЛАВНАЯ (Figma H4aeIVyjwU74kdBmeeTpAX, узел 8:3)
   ============================================================================
   Разметка — app/views/home.js и components/header.js под isV3(). Серверный первый
   экран (ssr.php, #ssr-first) рисует те же .head/.srch/.promo-slider — стилизуем и
   его, чтобы подмена на SPA не прыгала.
   Ритм: карточки во всю ширину, скругление 20, между ними 10, внутри 16.
   ========================================================================== */

/* Тёмная тема: у v2 нет тёмных --red-soft/--terra-soft (светлые пятна на тёмном) —
   переопределяем их в пределах главной. */
html.dv3.dk .v3-home{ --red-soft:#3a1f1e; --terra-soft:#33271d; }

/* ── Шапка ──────────────────────────────────────────────────────────────── */
html.dv3 :is(.v3-head, #ssr-first .head){ padding-bottom:14px; }
html.dv3 :is(.v3-head, #ssr-first .head) .loc .cap{
  font-size:12px; font-weight:400; line-height:15px; letter-spacing:0; text-transform:none; color:var(--on-head-2);
}
html.dv3 :is(.v3-head, #ssr-first .head) .loc b{
  display:flex; align-items:center; gap:4px; margin-top:1px;
  font-size:16px; font-weight:700; line-height:20px; color:var(--on-head);
}
html.dv3 .v3-head .loc .addr{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
html.dv3 .v3-head .v3-chev{ width:14px; height:14px; flex:none; color:var(--on-head-2); }
html.dv3 .v3-head .loc:focus-visible{ outline:2px solid var(--on-head-2); outline-offset:4px; border-radius:8px; }

/* Кнопка темы: круг 36, зона нажатия 44 (::after) */
html.dv3 .v3-head .iconbtn{
  position:relative; width:36px; height:36px; margin:2px; border-radius:50%; border:0; flex:none;
  background:rgba(255,255,255,.08); color:var(--on-head);
}
html.dv3 .v3-head .iconbtn::after{ content:''; position:absolute; inset:-4px; border-radius:50%; }
html.dv3 .v3-head .iconbtn svg{ width:18px; height:18px; color:currentColor; }
html.dv3 .v3-head .iconbtn:focus-visible{ outline:2px solid var(--on-head-2); outline-offset:2px; }

/* Поле поиска — белое (в тёмной теме — цвет карточки) */
html.dv3 :is(.v3-head, #ssr-first .head) .srch{
  display:flex; align-items:center; gap:8px;
  width:calc(100% - 32px); min-height:44px; margin:12px 16px 0; padding:0 14px;
  background:var(--paper); border-radius:var(--v3-r-ctl); border:0;
  color:var(--v3-sub); font-size:14px; font-weight:400; line-height:20px; text-align:left;
}
html.dv3 #ssr-first > .head .srch{ padding-left:40px; }       /* там нет лупы — текст на месте SPA */
html.dv3 .v3-head .srch svg{ width:18px; height:18px; flex:none; }
html.dv3 .v3-head .srch:focus-visible{ outline:2px solid var(--green); outline-offset:2px; }

/* Строка фактов: стоит, не едет; переносится, а не режется */
html.dv3 .v3-head .tick{ margin:12px 16px 0; padding:0; border:0; overflow:hidden; height:16px; }
/* Факты приходят позже шапки — место под строку держим с первого кадра (CLS), текст
   в одну строку фиксированной высоты: подстановка не меняет геометрию. */
html.dv3 .v3-head .tick[hidden]{ display:block; visibility:hidden; }
html.dv3 .v3-head .tick .run{
  display:flex; flex-wrap:nowrap; gap:2px 6px; padding:0; overflow:hidden;
  animation:none !important; transform:none; white-space:normal;
  -webkit-mask-image:none; mask-image:none;
}
html.dv3 .v3-head .tick span{
  font-size:12px; font-weight:500; line-height:16px; letter-spacing:0; text-transform:none;
  color:var(--on-head-2); white-space:nowrap;
}
html.dv3 .v3-head .tick span + span::before{ content:'·'; margin-right:6px; }
html.dv3 .v3-head .tick span:has(.v3-live){ color:#7fd6a4; }
html.dv3 .v3-head .tick .v3-live{
  display:inline-block; width:7px; height:7px; margin:0 6px 1px 0; border-radius:50%;
  background:currentColor; vertical-align:middle;
}

/* Фактов нет вовсе (ошибка сети, данных нет) — строку убираем совсем, а не держим пустую полосу */
html.dv3 .v3-head .tick.is-empty{ display:none !important; }
/* Пока факты грузятся — скелетон строки той же высоты, а не пустая тёмная полоса */
html.dv3 .v3-head .tick[hidden]:not(.is-empty){ visibility:visible; }
html.dv3 .v3-head .tick[hidden]:not(.is-empty)::before{
  content:''; display:block; width:150px; height:12px; margin-top:2px; border-radius:6px;
  background:rgba(255,255,255,.1);
}

/* ШАПКА ГЛАВНОЙ НА ТЕЛЕФОНЕ НЕ ЛИПНЕТ (жалоба владельца 30.09: при прокрутке наезжала на
   полки и съедала ~190 px экрана). v2 делал её липкой и по классу is-scrolled прятал строку
   фактов — высота шапки менялась посреди прокрутки, и контент под ней прыгал на 28 px.
   Здесь шапка уезжает вместе со страницей и её состав не меняется; поиск — вкладка «Каталог».
   Под часами (Capacitor, contentInset:never) — полоса цвета шапки, чтобы в вырезе не
   проезжали карточки. */
@media (max-width:1023px){
  html.dv3 .v3-home > .v3-head{ position:relative; top:auto; }
  html.dv3.is-scrolled .v3-home > .v3-head .srch{ display:flex; }
  html.dv3.is-scrolled .v3-home > .v3-head .tick{ display:block; }
  html.dv3 .v3-home::before{
    content:''; position:fixed; top:0; left:0; right:0; height:var(--safe-top, env(safe-area-inset-top, 0px));
    background:var(--head); z-index:30; pointer-events:none;
  }
}

/* SSR: сетки входов на сервере нет — держим под неё место, чтобы баннеры и магазины
   не съезжали вниз, когда SPA её дорисует (10 + 16 + 74 + 12 + 74 + 16). */
html.dv3 #ssr-first > .head{ margin-bottom:202px; }   /* только старый SSR; v3-SSR — .v3-home */

/* ── Сетка входов 2×5 ───────────────────────────────────────────────────── */
html.dv3 .v3-ents{
  display:grid; grid-template-columns:repeat(5, minmax(0, 1fr)); gap:12px 6px;
  margin-top:10px; padding:16px; background:var(--paper); border-radius:var(--v3-r-card);
}
html.dv3 .v3-ent{
  display:flex; flex-direction:column; align-items:center; gap:6px; min-width:0;
  color:var(--ink); text-decoration:none; -webkit-tap-highlight-color:transparent;
}
html.dv3 .v3-ent-ic{
  position:relative; overflow:hidden;
  display:grid; place-items:center; width:min(58px, 100%); aspect-ratio:1; border-radius:18px;
  background:var(--green-soft); color:var(--green);
}
html.dv3 .v3-ent-ic.is-red{ background:var(--red-soft); color:var(--red); }
html.dv3 .v3-ent-ic.is-terra{ background:var(--terra-soft); color:var(--terra); }
html.dv3 .v3-ent-ic .v3-i{ width:26px; height:26px; vertical-align:0; stroke-width:1.75; }
/* Служебные входы — иконка на мягком градиенте тона (светлее сверху, тон снизу) */
html.dv3 .v3-ent-ic.is-svc{
  background:linear-gradient(160deg, color-mix(in srgb, var(--green-soft) 40%, var(--paper)) 0%, var(--green-soft) 100%);
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--green) 10%, transparent);
}
html.dv3 .v3-ent-ic.is-svc.is-red{
  background:linear-gradient(160deg, color-mix(in srgb, var(--red-soft) 40%, var(--paper)) 0%, var(--red-soft) 100%);
  box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--red) 12%, transparent);
}
/* Продуктовые входы — фото товара рубрики поверх иконки: слой на всю плитку со своей
   подложкой, проявляется opacity 0→1 (геометрия плитки не меняется). Фото крупное, срезано снизу. */
html.dv3 .v3-ent-ph{
  position:absolute; inset:0; background:var(--v3-photo); opacity:0; transition:opacity .2s ease;
}
html.dv3 .v3-ent-ph.is-in{ opacity:1; }
html.dv3 .v3-ent-ph img{
  position:absolute; left:-6%; bottom:-14%; width:112%; height:112%; max-width:none;
  object-fit:contain; object-position:center bottom; mix-blend-mode:multiply;
}
/* Тёмная: снимок с белым фоном не растворить — даём ему всю плитку, без «окна» внутри */
html.dv3.dk .v3-ent-ph img{ mix-blend-mode:normal; left:0; bottom:0; width:100%; height:100%; object-fit:cover; object-position:center; }
@media (prefers-reduced-motion:reduce){ html.dv3 .v3-ent-ph{ transition:none; } }
html.dv3 .v3-ent-l{
  max-width:100%; font-size:12px; font-weight:500; line-height:1.35; text-align:center;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
html.dv3 .v3-ent:active .v3-ent-ic{ opacity:.7; }
html.dv3 .v3-ent:focus-visible{ outline:none; }
html.dv3 .v3-ent:focus-visible .v3-ent-ic{ outline:2px solid var(--green); outline-offset:2px; }
/* Лента историй в v3 выше скелетона v2 (96 → 106): держим итоговую высоту сразу, без сдвига */
html.dv3 [data-view="home"] .js-stories-strip{ min-height:106px !important; }
/* 320–359: «Магазины» должны влезть в колонку без многоточия */
@media (max-width:359px){
  html.dv3 .v3-ents{ padding:16px 8px; column-gap:2px; }
  html.dv3 .v3-ent-l{ letter-spacing:-.01em; }
}

/* ── Статус заказа ──────────────────────────────────────────────────────── */
html.dv3 .v3-home .order-banner{ margin:10px 0 0; padding:14px 16px; border:0; border-radius:var(--v3-r-card); }

/* ── Районная плашка ────────────────────────────────────────────────────── */
html.dv3 .v3-dstrip{
  display:flex; align-items:center; gap:10px; margin-top:10px; padding:12px 14px;
  background:var(--green-soft); border-radius:var(--v3-r-card);
}
html.dv3 .v3-dstrip-ic{ width:25px; height:25px; color:var(--ink); vertical-align:0; }
html.dv3 .v3-dstrip > div{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
html.dv3 .v3-dstrip-t{ font-size:13px; font-weight:600; line-height:1.3; color:var(--green); }
html.dv3 .v3-dstrip-s{ font-size:12px; line-height:1.35; color:var(--muted); }

/* ── Баннеры: карусель с краем следующего слайда ────────────────────────── */
html.dv3 :is(.v3-home, #ssr-first) .promo-slider{ margin:10px 0 0; }
html.dv3 :is(.v3-home, #ssr-first) .promo-track{
  gap:8px; padding:0 16px; scroll-padding-inline:16px;
}
html.dv3 :is(.v3-home, #ssr-first) .promo-slide{ flex:0 0 calc(100% - 56px); }
html.dv3 :is(.v3-home, #ssr-first) .promo-slider--single .promo-slide{ flex-basis:100%; }
html.dv3 :is(.v3-home, #ssr-first) .promo-banner{ border-radius:var(--v3-r-photo); }
html.dv3 :is(.v3-home, #ssr-first) .promo-dots{ display:none; }

/* ── Сторис: на серой земле, без лишнего воздуха ────────────────────────── */
html.dv3 .v3-home > .js-stories-strip .story-strip{ padding:14px 16px 4px; }

/* ── Карточка-секция: магазины, «рядом», полки, «О нас» ─────────────────── */
html.dv3 .v3-home :is(.v3-sec, .js-content > .coll, .js-content > .home-values){
  margin:10px 0 0; padding:16px 0; border:0; border-radius:var(--v3-r-card);
  background:var(--paper); scroll-margin-top:96px;
}
html.dv3 .v3-home .js-content > .coll-field{ background:var(--green-soft); }
html.dv3 .v3-home .js-content{ padding-bottom:0; }
html.dv3 .v3-home .coll-hdr{
  display:flex; align-items:flex-start; justify-content:space-between; gap:12px; flex-wrap:nowrap;
  padding:0 16px;
}
html.dv3 .v3-home .coll-hdr > div:first-child{ display:flex; flex-direction:column; min-width:0; gap:0; }
html.dv3 .v3-home .coll-hdr h2{
  margin:0; font-size:17px; font-weight:700; line-height:20px; letter-spacing:-.01em; max-width:none; color:var(--ink);
}
html.dv3 .v3-home .coll-hdr a{
  flex:none; font-size:13px; font-weight:600; line-height:20px; letter-spacing:0; text-transform:none;
  color:var(--green); text-decoration:none; white-space:nowrap;
}
html.dv3 .v3-home :is(.v3-sec-sub, .coll-hdr .kick){
  order:2; margin-top:8px; font-size:12px; font-weight:400; line-height:1.35;
  letter-spacing:0; text-transform:none; color:var(--v3-sub);
}
html.dv3 .v3-home .coll-hdr .kick:empty{ display:none; }
html.dv3 .v3-home .coll .muted[style]{ margin:8px 16px 0 !important; font-size:12px !important; color:var(--v3-sub) !important; }
html.dv3 .v3-home .coll-row{ padding:12px 16px 0; gap:10px; }

/* Адрес не указан — приглашение карточкой */
html.dv3 .v3-addr{
  display:flex; align-items:center; gap:12px; width:100%; margin-top:10px; padding:14px 16px;
  border:0; border-radius:var(--v3-r-card); background:var(--paper); color:var(--ink);
  font:inherit; text-align:left; cursor:pointer;
}
html.dv3 .v3-addr-ic{ display:grid; place-items:center; flex:none; width:40px; height:40px; border-radius:12px; background:var(--green-soft); color:var(--green); }
html.dv3 .v3-addr b{ display:block; font-size:15px; font-weight:600; line-height:1.3; }
html.dv3 .v3-addr b + span{ display:block; margin-top:2px; font-size:12px; line-height:1.35; color:var(--muted); }
html.dv3 .v3-addr-chev{ margin-left:auto; color:var(--v3-sub); }
html.dv3 .v3-addr:focus-visible{ outline:2px solid var(--green); outline-offset:2px; }

/* ── Магазины у вашего дома: строки ─────────────────────────────────────── */
html.dv3 .v3-hshop-list{ display:flex; flex-direction:column; gap:10px; padding:10px 16px 0; }
html.dv3 .v3-hshop{
  display:flex; align-items:center; gap:12px; width:100%; height:72px; box-sizing:border-box; padding:6px 0;
  border:0; background:transparent; color:var(--ink); font:inherit; text-align:left; cursor:pointer;
}
html.dv3 .v3-hshop:active{ opacity:.7; }
html.dv3 .v3-hshop:focus-visible{ outline:2px solid var(--green); outline-offset:2px; border-radius:12px; }
html.dv3 .v3-hshop-logo{
  display:grid; place-items:center; flex:none; width:52px; height:52px; border-radius:12px; overflow:hidden;
  background:var(--v3-photo);
}
html.dv3 .v3-mono.v3-hshop-logo{ font-size:24px; }
html.dv3 .v3-mono.v3-hshop-logo:not(.is-green):not(.is-blue):not(.is-grey){ background:var(--terra-soft); }
html.dv3 .v3-mono.is-green.v3-hshop-logo{ background:var(--green-soft); }
html.dv3 .v3-mono.is-blue.v3-hshop-logo{ background:#eaf0f6; }
html.dv3.dk .v3-mono.is-blue.v3-hshop-logo{ background:#1d2833; }
html.dv3 .v3-mono.is-grey.v3-hshop-logo{ background:var(--bg); }
html.dv3 .v3-hshop-logo img{ width:100%; height:100%; object-fit:cover; display:block; }
html.dv3 .v3-hshop-tx{ display:flex; flex-direction:column; align-items:flex-start; gap:3px; flex:1; min-width:0; }
html.dv3 .v3-hshop-nm{
  max-width:100%; font-size:15px; font-weight:600; line-height:1.25;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
html.dv3 .v3-hshop-meta{ max-width:100%; font-size:12px; line-height:1.3; color:var(--muted);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* Скелетон строк магазинов (до ответа shops.php): та же разметка и высота строки */
html.dv3 .v3-hshops.is-sk :is(.v3-hshop-nm, .v3-hshop-meta, .v3-pill){ background:var(--bg); border-radius:6px; color:transparent; }
html.dv3 .v3-hshops.is-sk .v3-hshop-nm{ width:55%; }
html.dv3 .v3-hshops.is-sk .v3-hshop-meta{ width:75%; }
html.dv3 .v3-hshops.is-sk .v3-pill{ width:72px; }
html.dv3 .v3-hshop .v3-pill{ padding:2px 6px; font-weight:500; }
html.dv3 .v3-hshop.is-closed .v3-hshop-meta{ color:var(--v3-sub); }
html.dv3 .v3-hshop.is-closed .v3-hshop-logo{ opacity:.6; }

/* ── Товар в полках главной (Figma 8:111): 118 × фото 110, цена 15 → имя 12 в 2 строки →
   «⚡ Рядом · ~N мин». Сама карточка — 21-card.css (.v3-pcard); здесь только размер полки. */
html.dv3 .v3-home .coll-row .card{ flex:0 0 118px; min-width:118px; width:118px; }
html.dv3 .v3-home .coll-row .card .img{ height:110px; aspect-ratio:auto; border-radius:12px; }
html.dv3 .v3-home .coll-row .card.v3-pcard .img img{ padding:0; object-fit:cover; }  /* фото на всю ячейку, как в каталоге */
html.dv3 .v3-home .coll-row .card.v3-pcard .buy{ right:6px; bottom:6px; }
html.dv3 .v3-home .coll-row .card.v3-pcard .info{ padding-top:5px; }
html.dv3 .v3-home .coll-row .card.v3-pcard .pr .now{ font-size:15px; }
html.dv3 .v3-home .coll-row .card.v3-pcard .pr .old{ font-size:11px; }
html.dv3 .v3-home .coll-row .card.v3-pcard .nm{ margin-top:5px; font-size:12px; }
html.dv3 .v3-home .coll-row .card.v3-pcard .tags .mt{ font-size:11px; color:var(--v3-sub); }
html.dv3 .v3-home .coll-row .card.v3-pcard .v3-src{ margin-top:5px; font-size:11px; }
html.dv3 .v3-home .coll-row .card .v3-near{
  display:inline-flex; align-items:center; gap:4px; min-width:0;
  font-size:11px; font-weight:500; line-height:1.3; color:var(--green); white-space:nowrap;
}
html.dv3 .v3-home .coll-row .card .v3-near.is-far{ color:var(--terra); }
html.dv3 .v3-home .coll-row .card .v3-near .v3-i{ width:12px; height:12px; vertical-align:0; }
/* Наборы (своя разметка .card без .v3-pcard): фото-коллаж на подложке, без рамок */
html.dv3 .v3-home .home-bundles .card{ background:transparent; border:0; box-shadow:none; border-radius:0; overflow:visible; }
html.dv3 .v3-home .home-bundles .card .img{ background:var(--v3-photo); overflow:hidden; }
html.dv3 .v3-home .home-bundles .card .info{ padding:5px 0 0; }
html.dv3 .v3-home .home-bundles .card .nm{ order:2; min-height:0; margin-top:5px; font-size:12px; font-weight:400; line-height:1.35; -webkit-box-pack:start; }
html.dv3 .v3-home .home-bundles .card .pricerow{ order:1; }
html.dv3 .v3-home .home-bundles .card .tags{ order:3; margin:4px 0 0; min-height:0; }
html.dv3 .v3-home .home-bundles .card .mt{ min-height:0; padding:0; background:none; font-size:11px; color:var(--v3-sub); }

/* ── Рецепты и истории ──────────────────────────────────────────────────── */
html.dv3 .v3-home .home-posts .posts{ padding:12px 16px 0; gap:10px; }
html.dv3 .v3-home .home-posts .post-card{ background:var(--bg); border:0; border-radius:var(--v3-r-photo); }
html.dv3 .v3-home .home-posts .post-card h3{ font-size:15px; font-weight:600; letter-spacing:0; line-height:1.3; margin-top:4px; }
html.dv3 .v3-home .home-posts .post-card p{ font-size:13px; margin-top:6px; }
html.dv3 .v3-home .home-posts .posts-all{ margin:12px 16px 0; font-size:13px; color:var(--green); border:0; }

/* ── О нас ──────────────────────────────────────────────────────────────── */
html.dv3 .v3-home .home-values .values{ grid-template-columns:1fr 1fr; gap:10px; padding:12px 16px 0; }
html.dv3 .v3-home .home-values .val-card{ padding:14px; border:0; border-radius:var(--v3-r-photo); background:var(--bg); }
html.dv3 .v3-home .home-values .val-card:last-child:nth-child(odd){ grid-column:1 / -1; }
html.dv3 .v3-home .home-values .vc-icon{
  width:40px; height:40px; margin-bottom:10px; border-radius:12px; background:var(--green-soft); color:var(--green);
}
html.dv3 .v3-home .home-values .vc-icon .v3-i{ width:20px; height:20px; vertical-align:0; }
html.dv3 .v3-home .home-values .vc-title{ font-size:14px; font-weight:600; line-height:1.25; }
html.dv3 .v3-home .home-values .vc-sub{ font-size:12px; line-height:1.35; color:var(--muted); }

/* ── Подвал ─────────────────────────────────────────────────────────────── */
html.dv3 .v3-home .home-foot{ margin-top:16px !important; }

/* ── Оверлеи главной (истории, состав набора, выбор города): фон стоит ──────────────
   body{overflow:hidden} на iOS фон не держит — класс v3-lock на <html> ставят сами оверлеи
   (stories.js, home.js, header.js) и снимают при закрытии; прокрутка внутри шторки не
   утягивает страницу (overscroll-behavior). */
html.dv3.v3-lock, html.dv3.v3-lock body{ overflow:hidden; overscroll-behavior:none; }
html.dv3 :is(.story-overlay, .bundle-sheet, .cityp){ overscroll-behavior:contain; }
html.dv3 .bundle-sheet > div{ overscroll-behavior:contain; padding-bottom:calc(24px + env(safe-area-inset-bottom)) !important; }
html.dv3 .bundle-sheet .js-close{ display:grid; place-items:center; width:40px !important; height:40px !important; border-radius:50% !important; color:var(--ink); }
html.dv3 .bundle-sheet .js-close .v3-i{ width:18px; height:18px; }
html.dv3 .cityp__x{ display:grid; place-items:center; width:40px; height:40px; padding:0; }
html.dv3 .cityp__sheet{ overscroll-behavior:contain; padding-bottom:calc(16px + env(safe-area-inset-bottom)); }

/* «+» набора — как «+» товара (белый круг, зелёный плюс), зона нажатия 40 */
html.dv3 .v3-home .home-bundles .js-bundle-add{
  position:relative; width:32px !important; height:32px !important; border-radius:50% !important;
  background:var(--paper) !important; color:var(--green) !important; box-shadow:var(--v3-shadow-btn); font-weight:500;
}
html.dv3 .v3-home .home-bundles .js-bundle-add::after{ content:''; position:absolute; inset:-4px; }
html.dv3 .v3-home .home-bundles .pricerow b{ white-space:nowrap; }

/* «Все →» у полок: текст 20 px, зона нажатия 40 */
html.dv3 .v3-home .coll-hdr a{ padding:10px 0 10px 12px; margin:-10px 0; }

/* Рецепты: обложка 16:9, а не квадрат на пол-экрана */
html.dv3 .v3-home .home-posts .post-card-img{ position:relative; flex:none; aspect-ratio:16/9; height:auto; min-height:0; overflow:hidden; }
html.dv3 .v3-home .home-posts .post-card-img img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
html.dv3 .v3-home .home-posts .posts-all{ display:inline-flex; align-items:center; min-height:40px; margin-top:4px; }
/* Ссылки подвала: зона нажатия 40 по высоте */
html.dv3 .v3-home .home-foot nav{ gap:0 18px !important; }
html.dv3 .v3-home .home-foot nav a{ display:inline-flex; align-items:center; min-height:40px; }
html.dv3 .v3-head .loc{ min-height:40px; justify-content:center; }

/* Баннер «установить» — в системе v3: карточка, главная кнопка тёмная/зелёная, «Закрыть» ≥ 40 */
html.dv3 .v3-home .pwa-banner{ margin:10px 0 0; border-radius:var(--v3-r-card); }
html.dv3 .v3-home .pwa-banner .pwa-dismiss{ min-height:44px; padding:0 12px; }

/* Полки не загрузились — карточка с повтором */
html.dv3 .v3-home .v3-home-err{ margin-top:10px; padding:20px 16px; border-radius:var(--v3-r-card); background:var(--paper); text-align:center; }
html.dv3 .v3-home .v3-home-err-t{ font-size:17px; font-weight:700; color:var(--ink); }
html.dv3 .v3-home .v3-home-err-s{ margin-top:4px; font-size:13px; color:var(--muted); }
html.dv3 .v3-home .v3-home-err .v3-btn{ width:100%; margin-top:14px; }

/* Плашка срока на фото узкой карточки полки (118): в общем правиле ей оставлено 118−56 = 62 px,
   и «~40 мин» резалось в «~40 ми». Здесь плюс ближе к краю — плашке 66 px и поджатые поля. */
html.dv3 .v3-home .coll-row .card.v3-pcard .img .v3-when{
  left:6px; bottom:6px; gap:2px; padding:3px 4px; letter-spacing:-.01em; max-width:calc(100% - 52px); text-overflow:clip;
}

/* ── 01.10 · Входы: каждая плитка — свой мягкий сочный цвет; фото рубрики — fit-квадрат на всю
   плитку (cover, по центру, одинаковый масштаб, без полос); нажатие — пружинка. ──────────── */
html.dv3 .v3-ents{ gap:14px 8px; }
html.dv3 .v3-ent-ic{
  width:100%; max-width:64px; border-radius:20px; box-shadow:none !important;
  --t:#e3f4e6; --i:#1f8a4c;
  background:var(--t) !important; color:var(--i) !important;
  transition:transform .25s cubic-bezier(.3,1.8,.5,1);
}
html.dv3 .v3-ent:nth-child(1) .v3-ent-ic{ --t:#ffe1e6; --i:#e23a59; }   /* Акции — арбузный */
html.dv3 .v3-ent:nth-child(2) .v3-ent-ic{ --t:#dff3ea; --i:#178a5a; }   /* Магазины — мята */
html.dv3 .v3-ent:nth-child(3) .v3-ent-ic{ --t:#ffe8d6; --i:#d9692a; }   /* Продукты — персик */
html.dv3 .v3-ent:nth-child(4) .v3-ent-ic{ --t:#e0f0ff; --i:#2f7fd0; }   /* Молочное — небо */
html.dv3 .v3-ent:nth-child(5) .v3-ent-ic{ --t:#ffe1e6; --i:#c8364f; }   /* Мясо — арбузный */
html.dv3 .v3-ent:nth-child(6) .v3-ent-ic{ --t:#ffeccc; --i:#c7771a; }   /* Напитки — абрикос */
html.dv3 .v3-ent:nth-child(7) .v3-ent-ic{ --t:linear-gradient(135deg,#fff1c9,#e4f5cf); --i:#4f9a1f; }   /* Овощи и фрукты (База Билибина) — манго+лайм */
html.dv3 .v3-ent:nth-child(8) .v3-ent-ic{ --t:#e6f2df; --i:#3f8a3a; }   /* Для дома — шалфей */
html.dv3 .v3-ent:nth-child(9) .v3-ent-ic{ --t:#f6e3fb; --i:#a347c2; }   /* Подарки — сирень */
html.dv3 .v3-ent:nth-child(10) .v3-ent-ic{ --t:#1f8a4c; --i:#fff; }     /* Каталог — бренд */
html.dv3.dk .v3-ent-ic{ --t:#1f3326; --i:#7fd6a4; }
html.dv3.dk .v3-ent:nth-child(1) .v3-ent-ic{ --t:#3d1d25; --i:#ff7f95; }
html.dv3.dk .v3-ent:nth-child(2) .v3-ent-ic{ --t:#173328; --i:#6fd3a5; }
html.dv3.dk .v3-ent:nth-child(3) .v3-ent-ic{ --t:#3a3018; --i:#ffcc4d; }
html.dv3.dk .v3-ent:nth-child(4) .v3-ent-ic{ --t:#26331a; --i:#a6dc6a; }
html.dv3.dk .v3-ent:nth-child(5) .v3-ent-ic{ --t:#33223a; --i:#dc9cf2; }
html.dv3.dk .v3-ent:nth-child(6) .v3-ent-ic{ --t:#1b2a3a; --i:#86bff5; }
html.dv3.dk .v3-ent:nth-child(7) .v3-ent-ic{ --t:#3a2719; --i:#ffab73; }
html.dv3.dk .v3-ent:nth-child(8) .v3-ent-ic{ --t:#22301e; --i:#9ed08f; }
html.dv3.dk .v3-ent:nth-child(9) .v3-ent-ic{ --t:#3a2c17; --i:#ffc070; }
html.dv3.dk .v3-ent:nth-child(10) .v3-ent-ic{ --t:#2a9a5c; --i:#fff; }
html.dv3 .v3-ent-ic .v3-i{ width:28px; height:28px; stroke-width:1.9; }
html.dv3 .v3-ent-ph{ background:var(--t); }
html.dv3 .v3-ent-ph img, html.dv3.dk .v3-ent-ph img{
  position:absolute; inset:0; left:0; bottom:0; width:100%; height:100%; max-width:none;
  object-fit:cover; object-position:center; mix-blend-mode:normal; padding:0; border:0;
}
html.dv3 .v3-ent-l{ font-weight:600; color:var(--ink); }
html.dv3 .v3-ent:active .v3-ent-ic{ opacity:1; transform:scale(.88); transition-duration:.08s; }
@media (prefers-reduced-motion:reduce){ html.dv3 .v3-ent-ic{ transition:none; } html.dv3 .v3-ent:active .v3-ent-ic{ transform:none; opacity:.7; } }

/* ── Логотипы магазинов: один формат для всех — белый квадрат r14 с тонкой обводкой,
   знак целиком по центру (contain + поля), а не «у кого как получилось». ─────────────────── */
html.dv3 .v3-hshop-logo{ position:relative; width:52px; height:52px; border-radius:14px; background:#fff; }
html.dv3 .v3-hshop-logo::after{ content:''; position:absolute; inset:0; border-radius:inherit; box-shadow:inset 0 0 0 1px rgba(16,40,24,.09); pointer-events:none; }
html.dv3 .v3-hshop-logo img{ object-fit:cover; padding:0; }
html.dv3 .v3-hshop{ transition:transform .18s cubic-bezier(.3,1.6,.5,1); }
html.dv3 .v3-hshop:active{ opacity:1; transform:scale(.98); }
/* Вырезка товара (без фона) — крупно по центру на цвете плитки, чуть «выходит» вниз */
html.dv3 .v3-ent-ph.is-cut img, html.dv3.dk .v3-ent-ph.is-cut img{
  inset:8% 6% 2%; width:88%; height:90%; object-fit:contain; object-position:center bottom;
  filter:drop-shadow(0 3px 4px rgba(0,0,0,.12));
}
/* Полка одного магазина — без повторов его имени под каждой карточкой */
html.dv3 .v3-home .coll.is-shop .card.v3-pcard .v3-src{ display:none; }
/* Горизонтальные ленты едут ТОЛЬКО вбок: overflow-y:auto давал ленте вертикальный «люфт» от
   любого выступа (тень, сжатие карточки, брызги «+»). Вертикальный жест уходит странице. */
html.dv3 :is(.v3-home, #ssr-first) :is(.coll-row, .promo-track, .story-strip){ overflow-y:hidden; overscroll-behavior-x:contain; }

/* ── Миссия: одна тихая строка под входами → #about ─────────────────────── */
html.dv3 .v3-mission{
  display:flex; align-items:center; justify-content:center; gap:4px; min-height:36px; padding:8px 16px;
  font-size:12.5px; font-weight:500; line-height:1.3; color:var(--v3-sub); text-decoration:none; text-align:center;
}
html.dv3 .v3-mission .v3-i{ width:14px; height:14px; flex:none; }
html.dv3 .v3-mission:active{ opacity:.6; }
html.dv3 .v3-mission:focus-visible{ outline:2px solid var(--green); outline-offset:-2px; border-radius:12px; }

/* ── «Ваша обычная корзина»: фото-ряд прошлого заказа + «Повторить» ──────── */
html.dv3 .v3-usual-row{ display:flex; gap:8px; padding:12px 16px 0; overflow-x:auto; scrollbar-width:none; }
html.dv3 .v3-usual-row::-webkit-scrollbar{ display:none; }
html.dv3 .v3-usual-it{ position:relative; flex:none; display:flex; flex-direction:column; align-items:center; gap:4px; width:56px; }
html.dv3 .v3-usual-ph{
  display:grid; place-items:center; width:56px; height:56px; border-radius:14px; overflow:hidden;
  background:var(--v3-photo); font-size:13px; font-weight:600; color:var(--v3-sub);
}
html.dv3 .v3-usual-ph img{ width:100%; height:100%; object-fit:cover; display:block; }
html.dv3 .v3-usual-ph .v3-mono{ width:100%; height:100%; display:grid; place-items:center; font-size:20px; }
html.dv3 .v3-usual-q{
  position:absolute; top:-4px; right:-4px; min-width:20px; height:20px; padding:0 5px; border-radius:10px;
  display:grid; place-items:center; background:var(--paper); color:var(--ink); box-shadow:var(--v3-shadow-btn);
  font-size:11px; font-weight:700; font-variant-numeric:tabular-nums;
}
html.dv3 .v3-usual-it.is-out .v3-usual-ph{ opacity:.45; filter:grayscale(1); }
html.dv3 .v3-usual-out{ font-size:10px; line-height:1.1; color:var(--v3-sub); text-align:center; }
html.dv3 .v3-usual-btn{
  display:flex; align-items:center; justify-content:center; gap:8px; width:calc(100% - 32px); min-height:48px;
  margin:14px 16px 0; border:0; border-radius:var(--v3-r-ctl); background:var(--green); color:#fff;
  font:inherit; font-size:15px; font-weight:600; cursor:pointer;
}
html.dv3 .v3-usual-btn .v3-i{ width:18px; height:18px; }
html.dv3 .v3-usual-btn:active{ transform:scale(.98); }
html.dv3 .v3-usual-btn:disabled{ opacity:.7; }
html.dv3 .v3-usual-btn:focus-visible{ outline:2px solid var(--green); outline-offset:3px; }

/* ── Полка под погоду: мороз — тёплая подложка, лето — зелёная ──────────── */
html.dv3 .v3-home .js-weather > .v3-weather.is-warm{ background:linear-gradient(180deg, var(--terra-soft), var(--paper) 96px); }
html.dv3 .v3-home .js-weather > .v3-weather:is(.is-dacha, .is-ysyakh){ background:linear-gradient(180deg, var(--green-soft), var(--paper) 96px); }

/* ── Знакомьтесь, производитель: карточки-истории ─────────────────────────── */
html.dv3 .v3-makers-row{ display:flex; gap:10px; padding:12px 16px 0; overflow-x:auto; scroll-snap-type:x mandatory; scroll-padding-inline:16px; scrollbar-width:none; }
html.dv3 .v3-makers-row::-webkit-scrollbar{ display:none; }
html.dv3 .v3-maker-card{
  flex:0 0 220px; scroll-snap-align:start; display:flex; flex-direction:column; gap:3px;
  color:var(--ink); text-decoration:none;
}
html.dv3 .v3-maker-ph{
  display:grid; place-items:center; height:132px; margin-bottom:6px; border-radius:var(--v3-r-photo); overflow:hidden;
  background:var(--green-soft); color:var(--green);
}
html.dv3 .v3-maker-ph img{ width:100%; height:100%; object-fit:cover; display:block; }
html.dv3 .v3-maker-ph .v3-i{ width:32px; height:32px; }
html.dv3 .v3-maker-card b{ font-size:14px; font-weight:600; line-height:1.3; }
html.dv3 .v3-maker-where{ font-size:12px; line-height:1.3; color:var(--green); }
html.dv3 .v3-maker-tx{
  font-size:12.5px; line-height:1.4; color:var(--muted);
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
}
html.dv3 .v3-maker-card:focus-visible{ outline:2px solid var(--green); outline-offset:2px; border-radius:var(--v3-r-photo); }

/* Плашка производителя на карточке товара «Местное» (product-card.js) */
html.dv3 .v3-maker{
  display:flex; align-items:center; gap:3px; margin-top:3px; min-width:0;
  font-size:11px; font-weight:500; line-height:14px; color:var(--green);
}
html.dv3 .v3-maker .v3-i{ width:12px; height:12px; flex:none; }
html.dv3 .v3-maker{ align-items:flex-start; }
html.dv3 .v3-maker .v3-i{ margin-top:1px; }
html.dv3 .v3-maker span{ min-width:0; overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
/* Плашка производителя уже говорит «местное» — отдельная метка рядом была бы повтором */
html.dv3 .v3-pcard .v3-maker ~ .tags .v3-local{ display:none; }

/* ── 03.10 · Раздел «База Билибина»: овощи и фрукты от официального партнёра. Тёплое поле
   (манго → лайм, те же тона, что у плитки входа); срок — спокойная плашка с часами. ───────── */
html.dv3 .v3-home .js-content > .coll-baza{ background:linear-gradient(160deg,#fff1c9 0%,#e4f5cf 100%); }
html.dv3 .coll-baza .coll-hdr h2{ font-size:20px; line-height:24px; }
html.dv3 .v3-home .coll-baza .muted[style]{ color:#3d4a2c !important; }
html.dv3.dk .v3-home .js-content > .coll-baza{ background:linear-gradient(160deg,#3b3314 0%,#21361a 100%); }
html.dv3.dk .v3-home .coll-baza .muted[style]{ color:#d5dcc6 !important; }
html.dv3.dk .baza-pills .v3-pill{ background:rgba(0,0,0,.28); color:#bfe6a0; }
/* Подпись плитки входа — до двух строк: «Овощи и фрукты» в одну не помещается. */
html.dv3 .v3-ent-l{ white-space:normal; display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-height:1.2; }
html.dv3 .baza-pills{ display:flex; flex-wrap:wrap; gap:6px; margin:2px 16px 12px; }
html.dv3 .baza-pills .v3-pill{ font-weight:600; background:rgba(255,255,255,.75); color:#2f6b12; }
html.dv3 .baza-pills .baza-eta{ color:var(--ink); }
html.dv3 .baza-pills .v3-i{ width:13px; height:13px; }
