/* ============================================================
   «ХЕРОТА» — бар и закуски. Показ для клиента.

   Палитра взята с dekart-digital.ru: кремовый фон, петроль как
   основная краска, янтарь для акцентов. Фон отсылает к меню-борду
   заведения — светлое поле с пальмовыми листьями по краям.

   Листья намеренно бледные и уходят за край: на борде они рамка,
   а не картинка, и спорить с фотографиями блюд им нельзя.

   Контраст всех пар проверен до вёрстки.
   ============================================================ */

:root {
  --cream: #f1ede3;    /* фон, как на основном сайте */
  --cream-2: #f6f2ea;
  --card: #fdfbf6;
  --white: #ffffff;

  --ink: #14191c;      /* 15.2:1 на кремовом */
  --muted: #4a555c;    /* 6.5:1 */
  --dim: #636c73;      /* 4.6:1 */

  --petrol: #0b4f5e;   /* 7.8:1 на кремовом; белый на нём 9.2:1 */
  --petrol-2: #093f4b;
  --amber: #a35200;    /* 4.8:1 на кремовом */
  --amber-2: #8a4500;
  --line: #ddd6c6;

  --body: "Golos Text", -apple-system, "Segoe UI", Roboto, sans-serif;

  --gut: clamp(16px, 4.5vw, 56px);

  /* Ритм считается по СУММАРНОМУ зазору между соседними секциями:
     у соседей складываются padding-bottom и padding-top. Здесь
     паддинг — половина цели: 72px на телефоне, 120px на десктопе. */
  --sec-y: clamp(36px, 4.5vw, 60px);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--cream);
  color: var(--ink);
  font-family: var(--body);
  font-size: 16px;
  line-height: 1.6;
  overflow-x: hidden;
}

img { max-width: 100%; height: auto; display: block; }

/* `:where()` обнуляет специфичность: иначе селектор по атрибуту
   перебивал бы собственные отступы компонентов. */
:where(ul[class], ol[class]) { list-style: none; margin: 0; padding: 0; }

h1, h2, h3, h4 { margin: 0; font-weight: 700; line-height: 1.12; letter-spacing: -0.01em; }
p { margin: 0; }
a { color: inherit; }

.wrap { width: 100%; max-width: 1180px; margin-inline: auto; padding-inline: var(--gut); }

.skip { position: absolute; left: -9999px; background: var(--petrol); color: var(--white);
        padding: 10px 16px; z-index: 300; font-weight: 600; }
.skip:focus { left: 8px; top: 8px; }
:focus-visible { outline: 2px solid var(--petrol); outline-offset: 2px; }

.kicker { margin-bottom: 12px; color: var(--amber); font-size: 12px; font-weight: 700;
          letter-spacing: 0.16em; text-transform: uppercase; }
.lede { color: var(--muted); }
.dim { color: var(--dim); font-size: 14px; }

.blank { border-bottom: 1.5px dashed var(--amber); color: var(--amber); font-style: italic; }

/* ── Пальмовые листья ─────────────────────────────────────
   Декор фона. Зеркальная пара по краям — так же, как рамка на
   меню-борде. `pointer-events: none`, чтобы не мешать выделению
   текста, и `aria-hidden` не нужен: это фоновое изображение. */
.palms {
  position: absolute; inset: 0; overflow: hidden; pointer-events: none;
  color: var(--petrol);
}
.palms::before, .palms::after {
  content: ""; position: absolute; top: -6%;
  width: clamp(180px, 30vw, 420px); height: 112%;
  background: url("/assets/palms.svg") no-repeat;
  background-size: contain;
  opacity: 0.13;
}
.palms::before { left: -6%; }
.palms::after { right: -6%; transform: scaleX(-1); }
@media (max-width: 700px) {
  /* На узком экране лист, прижатый к краю, уходит за границу и
     пропадает совсем. Показываем один по центру и за содержимым:
     так он читается как фон, а не как обрезанный кусок.
     Непрозрачность держим низкой — текст лежит поверх, и фон не
     должен снижать его контраст. */
  .palms::after { display: none; }
  .palms::before {
    left: 50%; transform: translateX(-50%);
    width: min(125vw, 480px); opacity: 0.07;
  }
}

/* ── Кнопки ───────────────────────────────────────────── */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border: 1.5px solid transparent; border-radius: 4px;
  background: transparent; /* иначе прозрачные варианты садятся на
                              системный серый buttonface */
  font-family: inherit; font-size: 14px; font-weight: 700;
  letter-spacing: 0.02em; text-decoration: none; white-space: nowrap; cursor: pointer;
  transition: background-color 0.2s, color 0.2s, border-color 0.2s;
}
.btn--amber { background: var(--petrol); color: var(--white); }
.btn--amber:hover { background: var(--petrol-2); }
.btn--ghost { border-color: var(--line); color: var(--ink); }
.btn--ghost:hover { border-color: var(--petrol); color: var(--petrol); }
.btn--lg { padding: 15px 28px; font-size: 15px; }
.btn--sm { padding: 9px 16px; font-size: 13px; }
.btn--full { width: 100%; }

/* ── Шапка ────────────────────────────────────────────── */

.hdr { position: sticky; top: 0; z-index: 100;
       background: rgba(241, 237, 227, 0.93); backdrop-filter: blur(10px);
       border-bottom: 1px solid var(--line); }
.hdr__in { display: flex; align-items: center; gap: 14px; min-height: 64px; }

.brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; flex: none; }
/* Знак идёт без подложки: фон у файла вырезан, и эмблема ложится
   прямо на кремовый фон шапки — своего прямоугольника не создаёт. */
.brand__mark { width: 40px; height: 40px; flex: none; object-fit: contain; }
.brand__name { display: flex; flex-direction: column; line-height: 1.05;
               font-weight: 900; font-size: 17px; letter-spacing: 0.04em; }
.brand__sub { font-size: 9.5px; font-weight: 400; letter-spacing: 0.2em;
              text-transform: uppercase; color: var(--dim); }

.nav { display: none; gap: 22px; margin-left: auto; font-size: 14.5px; }
.nav a { color: var(--muted); text-decoration: none; }
.nav a:hover { color: var(--petrol); }

.hdr__act { display: flex; align-items: center; gap: 10px; margin-left: auto; }
.hdr__tel { display: none; font-weight: 700; text-decoration: none; white-space: nowrap; font-size: 14.5px; }
.hdr__tel:hover { color: var(--petrol); }
.hdr__cta { display: none; }

.burger { flex: none; width: 42px; height: 42px; padding: 0; border: 1.5px solid var(--line);
          border-radius: 4px; background: transparent; cursor: pointer; }
.burger span { display: block; width: 16px; height: 1.5px; margin: 3.5px auto;
               background: var(--ink); transition: transform 0.2s, opacity 0.2s; }
.burger--x span:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.burger--x span:nth-child(2) { opacity: 0; }
.burger--x span:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }

.menu-m { display: grid; padding: 6px var(--gut) 16px; border-top: 1px solid var(--line); }
.menu-m a { padding: 12px 0; text-decoration: none; border-bottom: 1px solid var(--line); }
.menu-m a:last-child { border-bottom: 0; color: var(--petrol); font-weight: 700; }

@media (min-width: 900px) {
  .nav { display: flex; }
  .hdr__tel, .hdr__cta { display: inline-flex; }
  .hdr__act { margin-left: 0; }
  .burger { display: none; }
  .menu-m { display: none !important; }
}

/* ── Первый экран ─────────────────────────────────────── */

.hero { position: relative; overflow: hidden;
        padding-block: clamp(32px, 5vw, 64px) clamp(28px, 3.5vw, 48px);
        background: var(--cream-2); border-bottom: 1px solid var(--line); }
.hero > .wrap { position: relative; z-index: 1; }
.hero__grid { display: grid; gap: clamp(20px, 4vw, 52px); align-items: center; }
@media (min-width: 900px) { .hero__grid { grid-template-columns: 380px 1fr; } }

.hero__logo { margin: 0; }
.hero__logo img { width: min(70vw, 380px); height: auto; margin-inline: auto; }
@media (min-width: 900px) { .hero__logo img { margin-inline: 0; } }
.hero__slogan { margin-top: 20px; max-width: 22ch;
                font-size: clamp(1.15rem, 3.2vw, 1.7rem); font-weight: 600; line-height: 1.25; }
.hero__slogan em { font-style: normal; color: var(--amber); }
.hero__act { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }

.hero__marks { display: flex; flex-wrap: wrap; gap: 14px 32px; margin-top: 32px;
               padding-top: 22px; border-top: 1px solid var(--line); }
.hero__marks b { display: block; font-size: 15px; }
.hero__marks span { font-size: 13px; color: var(--muted); }

.age { margin-top: 22px; color: var(--muted); font-size: 12.5px; max-width: 52ch; }

/* ── Секции ───────────────────────────────────────────── */

.sec { padding-block: var(--sec-y); }
.sec--band { position: relative; overflow: hidden; background: var(--cream-2); }
.sec--band > .wrap { position: relative; z-index: 1; }
.sec__head { max-width: 60ch; margin-bottom: clamp(22px, 3vw, 34px); }
.sec__head h2 { font-size: clamp(1.6rem, 4.2vw, 2.5rem); }
.sec__head .lede { margin-top: 12px; }

/* ── Меню ─────────────────────────────────────────────── */

.mgroup + .mgroup { margin-top: clamp(32px, 4vw, 52px); }
.mgroup__head { margin-bottom: 16px; padding-bottom: 12px; border-bottom: 2px solid var(--petrol); }
.mgroup__head h3 { font-size: clamp(1.2rem, 3vw, 1.6rem); }
.mgroup__head p { margin-top: 6px; color: var(--muted); font-size: 14.5px; max-width: 58ch; }

.dishes { display: grid; gap: clamp(12px, 1.6vw, 18px);
          grid-template-columns: repeat(auto-fill, minmax(min(100%, 190px), 1fr)); }

.dish { display: flex; flex-direction: column; overflow: hidden;
        border: 1px solid var(--line); border-radius: 8px; background: var(--card);
        transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s; }
.dish:hover { border-color: var(--petrol); transform: translateY(-2px);
              box-shadow: 0 10px 26px rgba(11, 79, 94, 0.12); }
.dish__pic img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }

/* Заглушка для позиции без снимка: буква на фактуре, а не чужое блюдо. */
.dish__pic--none { display: grid; place-items: center; aspect-ratio: 4 / 3;
                   background: linear-gradient(135deg, #e7e0d0, #f2ece0); }
.dish__pic--none span { font-size: 2.6rem; font-weight: 900; color: #c9c0ab; }

.dish__body { display: flex; flex-direction: column; flex: 1; padding: 12px 13px 14px; }
.dish h4 { font-size: 14.5px; font-weight: 600; line-height: 1.3; }
.dish__p { margin-top: 4px; color: var(--dim); font-size: 12.5px; }
.dish__price { margin-top: auto; padding-top: 10px; color: var(--amber);
               font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; }
/* Подпись вместо цены — мельче ценника, это не сумма, а пояснение.
   Без opacity: прозрачность подмешивает фон и роняет контраст
   с 5,39 до 3,69 — ниже порога. Приглушаем размером, не альфой. */
.dish__price--ask { font-size: 14px; font-weight: 600; }

/* ── Напитки ──────────────────────────────────────────── */

.drinks { display: grid; gap: clamp(20px, 3vw, 36px); }
@media (min-width: 860px) { .drinks { grid-template-columns: 1.6fr 1fr; align-items: start; } }
.drinks h2 { font-size: clamp(1.5rem, 3.6vw, 2.1rem); }
.drinks p { margin-top: 14px; color: var(--muted); }
.drinks__note { padding: 14px 16px; border-left: 3px solid var(--amber);
                background: rgba(163, 82, 0, 0.07); font-size: 14px; }

.warn { padding: 20px; border: 1.5px solid var(--petrol); border-radius: 8px;
        background: var(--petrol); color: var(--cream); text-align: center; }
.warn b { display: block; margin-bottom: 8px; color: var(--cream); font-size: 26px; }
.warn p:last-child { color: #cfe0e4; font-size: 13.5px; line-height: 1.5; }

/* ── Мероприятия ──────────────────────────────────────── */

.events { display: grid; gap: clamp(14px, 2vw, 22px); }
@media (min-width: 720px) { .events { grid-template-columns: repeat(3, 1fr); } }
.events li { padding: 20px; border: 1px solid var(--line); border-radius: 8px; background: var(--card); }
.events__n { display: inline-block; margin-bottom: 12px; padding: 4px 10px; border-radius: 3px;
             background: var(--petrol); color: var(--cream);
             font-size: 11.5px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; }
.events h3 { margin-bottom: 8px; font-size: 17px; }
.events p { color: var(--muted); font-size: 14.5px; }

/* ── Бегущая строка отзывов ───────────────────────────── */

.ticker { position: relative; z-index: 1; overflow: hidden; padding-block: 4px;
          /* Края растворяются, чтобы лента не обрывалась резко. */
          mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
          -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.ticker__row { display: flex; width: max-content; animation: ticker 60s linear infinite; }
.ticker:hover .ticker__row { animation-play-state: paused; }
/* Пауза мышью выше закрывает только указатель. Кнопка (см. site.js) и
   вход фокуса внутрь ленты дают то же самое с клавиатуры — этого и
   требует WCAG 2.2.2 для контента, который движется сам. */
.ticker.is-paused .ticker__row,
.ticker:focus-within .ticker__row { animation-play-state: paused; }
.ticker__toggle { float: right; display: inline-flex; align-items: center; gap: 8px;
                  min-height: 44px; margin-left: 16px; padding: 0 14px;
                  border: 1px solid var(--line); border-radius: 8px;
                  background: var(--card); color: var(--petrol);
                  font: inherit; font-size: 12.5px; cursor: pointer; }
.ticker__toggle:hover { border-color: var(--petrol); }
.ticker__toggle:focus-visible { outline: 2px solid var(--petrol); outline-offset: 2px; }
/* Каждая копия — отдельный блок: сдвиг на -50% попадает ровно
   на её границу, поэтому шва при зацикливании не видно. */
.ticker__set { display: flex; gap: 16px; padding-right: 16px; }
@keyframes ticker { from { transform: translateX(0); } to { transform: translateX(-50%); } }

.rev { flex: 0 0 auto; width: min(78vw, 340px); margin: 0; padding: 18px 20px;
       border: 1px solid var(--line); border-radius: 8px; background: var(--card); }
.rev blockquote { margin: 0; font-size: 14.5px; line-height: 1.55; }
.rev figcaption { margin-top: 12px; color: var(--petrol); font-size: 13px; font-weight: 600; }
.rev figcaption span { color: var(--dim); font-weight: 400; }

.disclaimer { position: relative; z-index: 1; margin-top: 20px; color: var(--dim); font-size: 12.5px; }

/* ── Контакты и заявка ────────────────────────────────── */

.contacts { display: grid; gap: clamp(24px, 4vw, 48px); align-items: start; }
@media (min-width: 900px) { .contacts { grid-template-columns: 1fr 0.9fr; } }
.contacts h2 { font-size: clamp(1.6rem, 4vw, 2.3rem); }
.contacts .lede { margin-top: 14px; }

.contacts__list { margin-top: 26px; display: grid; gap: 12px; }
.contacts__list li { display: grid; grid-template-columns: 108px 1fr; gap: 12px;
                     padding-bottom: 12px; border-bottom: 1px solid var(--line); font-size: 15px; }
.contacts__list li > span:first-child { color: var(--dim); font-size: 13px; }
.contacts__list a { color: var(--petrol); text-decoration: none; font-weight: 600; }
.contacts__list a:hover { text-decoration: underline; }

.book { padding: 24px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); }
.book h3 { margin-bottom: 16px; font-size: 19px; }
.book label { display: block; margin-bottom: 13px; color: var(--muted); font-size: 13px; }
.book input {
  display: block; width: 100%; margin-top: 5px; padding: 11px 13px;
  border: 1.5px solid var(--line); border-radius: 5px;
  background: var(--white); color: var(--ink);
  font-family: inherit; font-size: 16px; /* 16px — иначе iOS зумит поле */
}
.book input:focus { outline: 2px solid var(--petrol); outline-offset: 0; border-color: var(--petrol); }
.book__legal { margin-top: 12px; color: var(--dim); font-size: 12px; line-height: 1.5; }
.book__legal a { color: var(--petrol); }

/* Ловушка для ботов — вне поля зрения и вне навигации. */
.hp { position: absolute; left: -9999px; width: 0; height: 0; overflow: hidden; }

/* ── Подвал ───────────────────────────────────────────── */

.foot { padding-block: clamp(28px, 3.5vw, 44px) 0; border-top: 1px solid var(--line);
        background: var(--cream-2); }
.foot__in { display: grid; gap: 20px; }
@media (min-width: 700px) { .foot__in { grid-template-columns: 1fr auto; align-items: start; } }
.foot__name { font-weight: 700; margin-bottom: 4px; letter-spacing: 0.04em; }
.foot__nav { display: grid; gap: 7px; font-size: 13.5px; }
.foot__nav a { color: var(--muted); text-decoration: none; }
.foot__nav a:hover { color: var(--petrol); text-decoration: underline; }
.legal { max-width: 1180px; margin: 24px auto 0; padding: 16px var(--gut) 28px;
         border-top: 1px solid var(--line); color: var(--muted); font-size: 12.5px; line-height: 1.55; }
.legal b { color: var(--ink); }

/* ── Подтверждение заявки ─────────────────────────────── */

.done { position: fixed; inset: 0; z-index: 260; display: grid; place-items: center;
        padding: 20px; background: rgba(20, 25, 28, 0.55); }
.done__in { max-width: 400px; padding: 30px 26px; border: 1px solid var(--line);
            border-radius: 12px; background: var(--white); text-align: center; }
.done__tick { width: 50px; height: 50px; margin: 0 auto 16px; display: grid; place-items: center;
              border-radius: 999px; background: var(--petrol); color: var(--cream);
              font-size: 24px; font-weight: 700; }
.done h2 { margin-bottom: 8px; font-size: 1.35rem; }
.done__no { color: var(--amber); font-weight: 700; font-variant-numeric: tabular-nums; }
/* `:where()` обнуляет специфичность: иначе это правило (0-1-1)
   перебивало собственный цвет .done__tick (0-1-0), и галочка
   красилась приглушённым по приглушённому кругу. */
.done :where(p) { margin-top: 8px; color: var(--muted); font-size: 14.5px; }
.done__tick { color: var(--cream); }
.done .btn { margin-top: 18px; }

/* ── Cookie ───────────────────────────────────────────── */

.cookie { position: fixed; z-index: 240; left: 12px; right: 12px; bottom: 12px;
          display: grid; gap: 12px; max-width: 640px; margin-inline: auto;
          padding: 16px 18px; border: 1px solid var(--line); border-radius: 10px;
          background: var(--white); box-shadow: 0 18px 50px rgba(20, 25, 28, 0.18);
          font-size: 13.5px; color: var(--muted); }
.cookie a { color: var(--petrol); }
.cookie__act { display: flex; flex-wrap: wrap; gap: 8px; }
@media (min-width: 620px) { .cookie { grid-template-columns: 1fr auto; align-items: center; } }

/* ── Служебная плашка показа ──────────────────────────── */

.demo-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px;
            padding: 7px var(--gut); background: #10333c; color: #f1ede3;
            font-size: 11px; line-height: 1.35; letter-spacing: 0.05em; }
.demo-bar__tag { padding: 3px 8px; background: #a35200; color: #fff;
                 font-weight: 700; text-transform: uppercase; }
.demo-bar__text { flex: 1 1 auto; color: #cfe0e4; }
.demo-bar__link { flex: none; color: #f1ede3; text-transform: uppercase; text-decoration: none;
                  border-bottom: 1px solid rgba(241, 237, 227, 0.45); padding-bottom: 2px; }
.demo-bar__link:hover { border-bottom-color: #f1ede3; }
@media (max-width: 700px) { .demo-bar__text { display: none; } }

[hidden] { display: none !important; }

@media (prefers-reduced-motion: reduce) {
  * { transition-duration: 0.01ms !important; }
  .ticker__row { animation: none; }
  /* Лента и так стоит — останавливать нечего. */
  .ticker__toggle { display: none; }
  .dish:hover { transform: none; }
}

/* ── Пальмы в остальных секциях ───────────────────────────
   На меню-борде рамка идёт по всему полю, поэтому листья есть
   в каждом блоке. В содержательных секциях они бледнее: там
   плотный текст и карточки, спорить с ними листу нельзя. */
.sec--palms { position: relative; overflow: hidden; }
.sec--palms > .wrap { position: relative; z-index: 1; }
.palms--soft::before, .palms--soft::after { opacity: 0.07; }
@media (max-width: 700px) { .palms--soft::before { opacity: 0.05; } }

/* ── Иллюстрации мероприятий ──────────────────────────── */

.events__pic {
  display: block; overflow: hidden;
  margin-bottom: 14px;
  border-radius: 6px;
  background: var(--cream);
}
/* `contain`, а не `cover`: это предметная съёмка на однотонном фоне,
   и обрезка отрезала барабану верх. Объект должен помещаться целиком
   и стоять по центру карточки. */
.events__pic img { width: 100%; aspect-ratio: 4 / 3; object-fit: contain;
                   object-position: center; }

/* ── Кнопка корзины в шапке ───────────────────────────── */

.cart-btn { position: relative; flex: none; width: 42px; height: 42px;
            display: grid; place-items: center;
            border: 1.5px solid var(--line); border-radius: 4px;
            background: transparent; color: var(--ink); cursor: pointer; }
.cart-btn svg { width: 21px; height: 21px; }
.cart-btn:hover { border-color: var(--petrol); color: var(--petrol); }
.cart-btn__n { position: absolute; top: -6px; right: -6px;
               min-width: 19px; height: 19px; padding: 0 5px;
               display: grid; place-items: center; border-radius: 999px;
               background: var(--amber); color: #fff;
               font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; }

/* ── Цена и кнопка в карточке блюда ───────────────────── */

.dish__foot { display: flex; flex-wrap: wrap; align-items: center;
              justify-content: space-between; gap: 8px;
              margin-top: auto; padding-top: 10px; }
.dish__foot .dish__price { margin-top: 0; padding-top: 0; }
.btn__q { font-variant-numeric: tabular-nums; opacity: 0.85; }
.btn__q:empty { display: none; }

/* ── Панель корзины ───────────────────────────────────────
   Геометрию (выезд справа, подложку) держит assets/shop.css —
   здесь только оформление под эту палитру. */

.cart__head { display: flex; align-items: center; justify-content: space-between;
              padding: 20px var(--gut) 15px; border-bottom: 1px solid var(--line); }
.cart__head h2 { font-size: 1.25rem; }
.cart__x { width: 36px; height: 36px; border: 1.5px solid var(--line); border-radius: 4px;
           background: transparent; color: var(--ink); font-size: 20px;
           line-height: 1; cursor: pointer; }
.cart__x:hover { background: var(--petrol); border-color: var(--petrol); color: var(--cream); }

.cart__body { display: flex; flex-direction: column; flex: 1; min-height: 0; }
.cart__empty { padding: 30px var(--gut); color: var(--muted); }
.cart__empty a { color: var(--petrol); font-weight: 600; }
/* Список позиций держит гарантированную долю панели и прокручивается
   внутри себя. Две крайности, через которые прошли: подвал с формой
   съедал всю высоту и список сжимался до строки; а когда панель
   пустили одной лентой — позиции уезжали вверх, и в корзине была
   видна только форма. Минимальная высота решает обе: ассортимент
   всегда на экране, форма всегда внизу.

   `min-height: 0` тут обязателен вторым свойством — без него элемент
   флекс-колонки не сжимается ниже содержимого и `overflow` не works. */
.cart__body { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; overflow: hidden; }
.cart__lines {
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; -webkit-overflow-scrolling: touch;
  padding: 6px var(--gut);
}

/* Подвал ограничен по высоте и прокручивается сам. Иначе он —
   способ получения, три суммы, три поля, согласие и кнопка —
   съедает всю панель, и от списка позиций остаётся одна строка:
   гость видит форму, но не видит, что заказывает. */
.cart__foot {
  flex: none; max-height: 62vh;
  overflow-y: auto; -webkit-overflow-scrolling: touch;
}

/* Шапка закреплена: при прокрутке списка должно оставаться видно,
   что это корзина и как её закрыть. */
.cart__head { position: sticky; top: 0; z-index: 2; background: var(--paper); }

.line { display: grid; grid-template-columns: 1fr auto auto; align-items: center;
        gap: 10px; padding: 13px 0; border-bottom: 1px solid var(--line); }
.line__i { min-width: 0; }
.line__i b { display: block; font-size: 14px; font-weight: 600; line-height: 1.3; }
.line__u { display: block; margin-top: 3px; color: var(--dim); font-size: 12px; }
.line__q { display: inline-flex; align-items: center; gap: 2px;
           border: 1.5px solid var(--line); border-radius: 999px; padding: 2px; }
.line__q button { width: 26px; height: 26px; border: 0; border-radius: 999px;
                  background: transparent; color: var(--ink);
                  font-size: 15px; line-height: 1; cursor: pointer; }
.line__q button:hover { background: var(--cream); color: var(--petrol); }
.line__q span { min-width: 20px; text-align: center; font-size: 13px;
                font-variant-numeric: tabular-nums; }
.line__p { font-size: 14px; font-weight: 700; font-variant-numeric: tabular-nums;
           white-space: nowrap; }
/* Кнопка удаления — своя колонка справа: на демо она однажды
   обрезалась, когда список получал чужой отступ. */
.line__x { grid-column: 3; width: 28px; height: 28px; border: 0; border-radius: 999px;
           background: transparent; color: var(--dim); font-size: 17px;
           line-height: 1; cursor: pointer; }
.line__x:hover { background: var(--cream); color: var(--amber); }

.cart__foot { padding: 14px var(--gut) 20px; border-top: 1px solid var(--line); }

/* На низком экране один только подвал корзины — способ получения,
   суммы, три поля, согласие и кнопка — выше окна, и кнопка оформления
   уходит за край. Там перестаём прижимать подвал и прокручиваем
   панель целиком: список позиций и подвал едут одной лентой. */
@media (max-height: 660px) {
  .cart { overflow-y: auto; -webkit-overflow-scrolling: touch; }
  .cart__body { flex: none; }
  .cart__lines { overflow: visible; }
}

/* Способ получения: две равнозначные кнопки, выбранная залита. */
.ship { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-bottom: 14px;
        padding: 4px; border: 1.5px solid var(--line); border-radius: 6px; }
.ship__b { padding: 9px 10px; border: 0; border-radius: 4px; background: transparent;
           color: var(--muted); font-family: inherit; font-size: 13.5px;
           font-weight: 600; cursor: pointer; }
.ship__b[data-on] { background: var(--petrol); color: var(--cream); }

.cart__min { margin-bottom: 8px; color: var(--amber); font-size: 13px; font-weight: 600; }
.cart__hint { margin-bottom: 8px; color: var(--muted); font-size: 12.5px; }

.cart__row { display: flex; align-items: baseline; justify-content: space-between;
             margin-bottom: 6px; color: var(--muted); font-size: 14px; }
.cart__row b { font-variant-numeric: tabular-nums; color: var(--ink); }
.cart__row--total { margin-top: 4px; padding-top: 10px;
                    border-top: 1px solid var(--line);
                    font-size: 16px; color: var(--ink); }
.cart__row--total b { font-size: 19px; font-weight: 700; }

.order { margin-top: 16px; }
.order label { display: block; margin-bottom: 12px; color: var(--muted); font-size: 13px; }
.order input { display: block; width: 100%; margin-top: 5px; padding: 11px 13px;
               border: 1.5px solid var(--line); border-radius: 5px;
               background: var(--white); color: var(--ink);
               font-family: inherit; font-size: 16px; }
.order input:focus { outline: 2px solid var(--petrol); outline-offset: 0;
                     border-color: var(--petrol); }
.order__legal { margin-top: 10px; color: var(--dim); font-size: 12px; line-height: 1.5; }

.done__sum { margin: 10px 0; color: var(--muted); font-size: 14px; }

/* ── Согласие на обработку данных ─────────────────────────
   Галочка по умолчанию снята, кнопка отправки до неё заблокирована.
   Согласие по 152-ФЗ должно быть конкретным и осознанным, а сноску
   «нажимая кнопку, вы соглашаетесь» человек не читает. */
.consent {
  display: grid; grid-template-columns: auto 1fr; gap: 10px;
  align-items: start;
  font-size: 13px; line-height: 1.45; font-weight: 400;
  cursor: pointer;
}
.consent input {
  width: 18px; height: 18px; margin: 1px 0 0; flex: none;
  accent-color: currentColor; cursor: pointer;
}
.consent a { text-decoration: underline; }

/* ── Карта ────────────────────────────────────────────────
   Высота привязана к экрану, а не к пропорции: при 16:9 карта на
   широком мониторе вырастает за 800px, а карточка адреса рисуется
   у верхнего края и уезжает выше области просмотра. */
.map {
  margin-top: clamp(20px, 3vw, 28px);
  border: 1px solid var(--line); border-radius: 8px;
  background: var(--paper); overflow: hidden;
}
.map__ph {
  display: flex; flex-direction: column; align-items: flex-start; gap: 10px;
  padding: clamp(18px, 2.6vw, 26px);
}
.map__addr { font-size: 16.5px; font-weight: 600; }
.map__ph .dim { max-width: 46em; }
.map__act { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 4px; }
.map--on { height: clamp(300px, 52vh, 500px); }
.map iframe { width: 100%; height: 100%; border: 0; display: block; }

@media (max-width: 700px) {
  /* На телефоне виджет показывает карточку нижней шторкой примерно
     на 250px — при короткой карте её кнопки обрезаются краем iframe. */
  .map--on { height: 500px; }
}

/* Условия доставки в подвале: их спрашивают до оформления, а не после,
   поэтому они стоят выше правовой оговорки и набраны читаемее её. */
.foot__terms { margin: 10px 0; font-size: 13.5px; color: var(--muted); max-width: 62ch; }
