/* ==========================================================================
   Bear's Bakery — დათვის საცხობი
   Vanilla CSS, no framework, no build step.
   Brand tokens come straight from Branding/Bears Bakery - Brandbook.pdf (pp. 9–10).
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Fonts

   BPG Guardian Egyp carries Georgian + Latin but NO Cyrillic, and its Latin is
   a slab serif that isn't the brand's Latin voice. So each face is restricted
   with unicode-range: Georgian resolves to BPG, Latin and Cyrillic fall through
   to Montserrat automatically. One font stack, correct result in all three
   languages, no per-language CSS.
   -------------------------------------------------------------------------- */

@font-face {
  font-family: "BPG Guardian Caps";
  src: url("../fonts/bpg-guardian-caps-bold.woff") format("woff");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+10A0-10FF, U+1C90-1CBF, U+20BE;
}

@font-face {
  font-family: "BPG Guardian";
  src: url("../fonts/bpg-guardian-regular.woff") format("woff");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+10A0-10FF, U+1C90-1CBF, U+20BE;
}

@font-face {
  font-family: "BPG Guardian";
  src: url("../fonts/bpg-guardian-bold.woff") format("woff");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+10A0-10FF, U+1C90-1CBF, U+20BE;
}

/* Montserrat is a variable font — one file covers 100–900. */
@font-face {
  font-family: "Montserrat";
  src: url("../fonts/montserrat-latin.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
    U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
    U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Montserrat";
  src: url("../fonts/montserrat-cyrillic.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* --------------------------------------------------------------------------
   2. Design tokens
   -------------------------------------------------------------------------- */

:root {
  /* Brand palette — brandbook pp. 9–10 */
  --brand-brown: #653319;
  --brand-tan: #a9723c;
  --brand-amber: #fbb040;
  --cream-200: #f2e2ce;
  --cream-100: #f3e4d2;
  --paper: #fffbfa;

  /* Derived tones */
  --brown-dark: #4a2512;
  --brown-soft: #8a5a33;
  --amber-dark: #e79a25;
  --line: #e4cfb4;
  --ink: #3b2415;
  --ink-muted: #7a6152;

  /* --brand-tan on cream is only 3.2:1 — fine for large display type (needs 3:1)
     but it fails WCAG AA for small text (needs 4.5:1). Use this darker tan for
     eyebrows, slogans, unit labels and anything else set small. */
  --tan-text: #8a5a33;

  /* Type */
  --font-head: "BPG Guardian Caps", "Montserrat", system-ui, sans-serif;
  --font-body: "BPG Guardian", "Montserrat", system-ui, sans-serif;

  /* Rhythm */
  --wrap: 1200px;
  --gutter: 20px;
  --radius: 18px;
  --radius-lg: 28px;
  --radius-pill: 999px;

  /* Elevation — warm, never grey */
  --shadow-sm: 0 2px 8px rgba(101, 51, 25, 0.07);
  --shadow-md: 0 8px 24px rgba(101, 51, 25, 0.1);
  --shadow-lg: 0 18px 48px rgba(101, 51, 25, 0.14);

  --header-h: 76px;
}

/* --------------------------------------------------------------------------
   2b. Language visibility

   Drives multilingual display from <html lang>, which is present in the markup
   before any script runs. Without this the browser paints all three languages
   stacked until main.js executes (a ~7000px flash), and the page would stay
   that way if JS ever failed to load. main.js still sets inline display on
   switch — the two agree, this just wins the race on first paint.
   -------------------------------------------------------------------------- */

html[lang="ka"] [data-lang]:not([data-lang="ka"]),
html[lang="en"] [data-lang]:not([data-lang="en"]),
html[lang="ru"] [data-lang]:not([data-lang="ru"]) {
  display: none !important;
}

/* --------------------------------------------------------------------------
   3. Reset & base
   -------------------------------------------------------------------------- */

*,
*::before,
*::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 17px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

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

a { color: var(--brand-brown); text-decoration: none; }
a:hover { color: var(--brand-tan); }

h1, h2, h3, h4 {
  font-family: var(--font-head);
  font-weight: 700;
  color: var(--brand-brown);
  line-height: 1.18;
  margin: 0 0 0.5em;
  letter-spacing: 0.01em;
}

h1 { font-size: clamp(2rem, 5.2vw, 3.4rem); }
h2 { font-size: clamp(1.55rem, 3.6vw, 2.5rem); }
h3 { font-size: clamp(1.1rem, 2vw, 1.35rem); }

p { margin: 0 0 1em; }
p:last-child { margin-bottom: 0; }

:focus-visible {
  outline: 3px solid var(--brand-amber);
  outline-offset: 3px;
  border-radius: 6px;
}

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

.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* Skip link */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 200;
  background: var(--brand-brown);
  color: var(--paper);
  padding: 12px 20px;
  border-radius: 0 0 var(--radius) 0;
}
.skip-link:focus { left: 0; color: var(--paper); }

/* --------------------------------------------------------------------------
   4. Buttons

   HOUSE RULE: <button> is reserved for GA4-tracked actions. Anything
   interactive but untracked (language switcher, filters, menu toggle, quantity
   steppers) is a <div role="button">. These classes style both, so the visual
   language stays consistent while the analytics stream stays clean.
   -------------------------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: var(--font-head);
  font-size: 1rem;
  font-weight: 700;
  line-height: 1;
  padding: 15px 30px;
  border: 2px solid transparent;
  border-radius: var(--radius-pill);
  cursor: pointer;
  text-align: center;
  transition: transform 0.15s ease, box-shadow 0.15s ease,
    background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
  -webkit-user-select: none;
  user-select: none;
}

.btn:hover { transform: translateY(-2px); }
.btn:active { transform: translateY(0); }

.btn--primary {
  background: var(--brand-amber);
  color: var(--brown-dark);
  box-shadow: var(--shadow-sm);
}
.btn--primary:hover {
  background: var(--amber-dark);
  color: var(--brown-dark);
  box-shadow: var(--shadow-md);
}

.btn--solid {
  background: var(--brand-brown);
  color: var(--paper);
}
.btn--solid:hover { background: var(--brown-dark); color: var(--paper); }

.btn--outline {
  background: transparent;
  color: var(--brand-brown);
  border-color: var(--brand-tan);
}
.btn--outline:hover {
  background: var(--brand-brown);
  border-color: var(--brand-brown);
  color: var(--paper);
}

.btn--on-dark {
  background: transparent;
  color: var(--paper);
  border-color: rgba(255, 251, 250, 0.5);
}
.btn--on-dark:hover {
  background: var(--paper);
  color: var(--brand-brown);
  border-color: var(--paper);
}

.btn--sm { padding: 11px 20px; font-size: 0.9rem; }
.btn--block { display: flex; width: 100%; }

.btn__icon { width: 18px; height: 18px; flex: none; }

/* --------------------------------------------------------------------------
   5. Header
   -------------------------------------------------------------------------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(255, 251, 250, 0.94);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--line);
}

.site-header__inner {
  display: flex;
  align-items: center;
  gap: 18px;
  min-height: var(--header-h);
}

.brand { display: flex; align-items: center; flex: none; }
.brand img { height: 52px; width: auto; }
.brand__ka, .brand__en { display: none; }

.site-nav {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-inline-start: auto;
}

.site-nav a {
  font-family: var(--font-head);
  font-size: 0.95rem;
  font-weight: 700;
  padding: 10px 13px;
  border-radius: var(--radius-pill);
  color: var(--brand-brown);
  transition: background-color 0.15s ease, color 0.15s ease;
}
.site-nav a:hover { background: var(--cream-100); }
.site-nav a[aria-current="page"] { background: var(--cream-200); }

.header-tools { display: flex; align-items: center; gap: 10px; flex: none; }

/* Language switcher — DIVs, deliberately not buttons (see house rule above).
   It sits inside .site-nav, so on desktop it renders at the end of the nav row
   and on mobile it travels into the burger menu with no duplicated markup. */
.lang-switcher {
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 3px;
  background: var(--cream-100);
  border-radius: var(--radius-pill);
}
.site-nav .lang-switcher { margin-inline-start: 10px; }

.lang-option {
  font-family: "Montserrat", sans-serif;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--brown-soft);
  padding: 6px 10px;
  border-radius: var(--radius-pill);
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
  -webkit-user-select: none;
  user-select: none;
}
.lang-option:hover { color: var(--brand-brown); }
.lang-option.is-active { background: var(--brand-brown); color: var(--paper); }

/* Cart button */
.cart-btn { position: relative; padding: 12px 18px; }
.cart-count {
  position: absolute;
  top: -6px;
  inset-inline-end: -6px;
  min-width: 22px;
  height: 22px;
  padding: 0 6px;
  display: none;
  align-items: center;
  justify-content: center;
  background: var(--brand-brown);
  color: var(--paper);
  font-family: "Montserrat", sans-serif;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1;
  border-radius: var(--radius-pill);
}
.cart-count.is-visible { display: inline-flex; }

/* Mobile menu toggle — a DIV: opening a menu isn't a conversion event. */
.nav-toggle {
  display: none;
  width: 46px;
  height: 46px;
  flex: none;
  align-items: center;
  justify-content: center;
  background: var(--cream-100);
  border-radius: var(--radius-pill);
  cursor: pointer;
}
.nav-toggle span {
  display: block;
  position: relative;
  width: 20px;
  height: 2px;
  background: var(--brand-brown);
  border-radius: 2px;
  transition: background-color 0.15s ease;
}
.nav-toggle span::before,
.nav-toggle span::after {
  content: "";
  position: absolute;
  left: 0;
  width: 20px;
  height: 2px;
  background: var(--brand-brown);
  border-radius: 2px;
  transition: transform 0.2s ease;
}
.nav-toggle span::before { top: -6px; }
.nav-toggle span::after { top: 6px; }
.nav-toggle.is-open span { background: transparent; }
.nav-toggle.is-open span::before { transform: translateY(6px) rotate(45deg); }
.nav-toggle.is-open span::after { transform: translateY(-6px) rotate(-45deg); }

/* --------------------------------------------------------------------------
   6. Sections
   -------------------------------------------------------------------------- */

.section { padding: clamp(56px, 8vw, 96px) 0; }

/* The header is sticky, so a bare #anchor jump parks the section top underneath
   it and eats --header-h pixels. Offset every jump target by the header plus a
   little breathing room. */
section[id],
main[id],
[id]:target { scroll-margin-top: calc(var(--header-h) + 16px); }
.section--cream { background: var(--cream-100); }
.section--tint { background: var(--cream-200); }

.section--brown {
  background: var(--brand-brown);
  color: var(--cream-100);
}
.section--brown h2,
.section--brown h3 { color: var(--paper); }

.section-head { max-width: 720px; margin: 0 auto clamp(30px, 4vw, 50px); text-align: center; }
.section-head p { color: var(--ink-muted); font-size: 1.05rem; }
.section--brown .section-head p { color: rgba(243, 228, 210, 0.82); }

.eyebrow {
  display: inline-block;
  font-family: var(--font-head);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--tan-text);
  margin-bottom: 12px;
}
.section--brown .eyebrow { color: var(--brand-amber); }

/* --------------------------------------------------------------------------
   7. Hero
   -------------------------------------------------------------------------- */

.hero {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(115% 90% at 92% 8%, var(--cream-200) 0%, transparent 60%),
    linear-gradient(175deg, var(--paper) 0%, var(--cream-100) 100%);
  padding: clamp(48px, 7vw, 88px) 0 clamp(56px, 8vw, 104px);
}

.hero__inner {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  gap: clamp(28px, 5vw, 64px);
  align-items: center;
}

.hero__slogan {
  font-family: var(--font-head);
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--tan-text);
  margin-bottom: 16px;
}

.hero h1 { margin-bottom: 18px; }
.hero h1 em {
  font-style: normal;
  color: var(--brand-tan);
  display: block;
}

.hero__lead {
  font-size: clamp(1.02rem, 1.6vw, 1.16rem);
  color: var(--ink-muted);
  max-width: 30em;
  margin-bottom: 30px;
}

.hero__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 34px; }

.hero__facts { display: flex; flex-wrap: wrap; gap: 30px; }
.hero__fact strong {
  display: block;
  font-family: var(--font-head);
  font-size: 1.7rem;
  color: var(--brand-brown);
  line-height: 1.1;
}
.hero__fact span { font-size: 0.9rem; color: var(--ink-muted); }

/* Hero art — the logo bear on a soft blob, echoing the brandbook's social style */
.hero__art { position: relative; display: flex; justify-content: center; }
.hero__blob {
  position: absolute;
  inset: 4% -6% -4% 4%;
  background: var(--cream-200);
  border-radius: 58% 42% 47% 53% / 52% 46% 54% 48%;
  z-index: 0;
}
.hero__bear { position: relative; z-index: 1; width: min(100%, 380px); }

/* Decorative doodle band from the brandbook icon set */
.doodle-band {
  height: 62px;
  background-image: url("../svg/icons-products.svg");
  background-repeat: repeat-x;
  background-size: auto 100%;
  background-position: center;
  opacity: 0.16;
  pointer-events: none;
}

/* --------------------------------------------------------------------------
   8. Category tiles
   -------------------------------------------------------------------------- */

.cat-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 16px;
}

.cat-tile {
  position: relative;
  display: block;
  border-radius: var(--radius-lg);
  overflow: hidden;
  background: var(--brand-brown);
  box-shadow: var(--shadow-sm);
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.cat-tile:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }

.cat-tile img {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  opacity: 0.86;
  transition: transform 0.35s ease, opacity 0.2s ease;
}
.cat-tile:hover img { transform: scale(1.06); opacity: 0.7; }

.cat-tile__label {
  position: absolute;
  inset-inline: 0;
  inset-block-end: 0;
  padding: 34px 14px 14px;
  background: linear-gradient(to top, rgba(74, 37, 18, 0.92), transparent);
  color: var(--paper);
  font-family: var(--font-head);
  font-size: 1rem;
  font-weight: 700;
  text-align: center;
}

/* --------------------------------------------------------------------------
   9. Product cards
   -------------------------------------------------------------------------- */

.product-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 22px;
}

.product-card {
  display: flex;
  flex-direction: column;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.product-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }

.product-card__media {
  position: relative;
  background: var(--cream-100);
  overflow: hidden;
}
.product-card__media img {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  transition: transform 0.35s ease;
}
.product-card:hover .product-card__media img { transform: scale(1.05); }

.product-card__tag {
  position: absolute;
  inset-block-start: 12px;
  inset-inline-start: 12px;
  background: var(--brand-amber);
  color: var(--brown-dark);
  font-family: var(--font-head);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 6px 12px;
  border-radius: var(--radius-pill);
}

.product-card__body {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 18px;
  flex: 1;
}

.product-card__title {
  font-family: var(--font-head);
  font-size: 1.02rem;
  font-weight: 700;
  color: var(--brand-brown);
  line-height: 1.3;
  margin: 0;
}

/* Price and Add button sit side by side when the card is wide enough. When it
   isn't — 2-up and 3-up grids get cards as narrow as ~160px, against ~215px of
   content — the button wraps onto its own line and fills it, instead of
   overflowing and being clipped by the card's overflow:hidden. Driven by the
   actual card width rather than a viewport breakpoint, so it holds at every
   size. */
.product-card__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: auto;
}
.product-card__foot .btn { flex: 1 1 auto; }

.price {
  font-family: var(--font-head);
  font-size: 1.22rem;
  font-weight: 700;
  color: var(--brand-brown);
  white-space: nowrap;
}
.price small { font-size: 0.72em; color: var(--tan-text); }

/* --------------------------------------------------------------------------
   10. Cards & feature lists
   -------------------------------------------------------------------------- */

.card {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  padding: clamp(22px, 3vw, 32px);
}
.section--brown .card {
  background: rgba(255, 251, 250, 0.07);
  border-color: rgba(255, 251, 250, 0.16);
}

.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(18px, 3vw, 32px); }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(18px, 3vw, 26px); }

.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(28px, 5vw, 64px);
  align-items: center;
}

.feature { display: flex; gap: 16px; align-items: flex-start; }
.feature__icon {
  flex: none;
  width: 52px;
  height: 52px;
  display: grid;
  place-items: center;
  background: var(--cream-200);
  border-radius: var(--radius-pill);
}
.feature__icon img { width: 26px; height: 26px; }
.section--brown .feature__icon { background: rgba(255, 251, 250, 0.1); }
.feature h3 { margin-bottom: 4px; }
.feature p { color: var(--ink-muted); font-size: 0.96rem; }
.section--brown .feature p { color: rgba(243, 228, 210, 0.8); }

/* Media frame for photo blocks */
.media-frame {
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
}
.media-frame img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }

.media-collage { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.media-collage img {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}
.media-collage img:first-child { grid-column: 1 / -1; aspect-ratio: 16 / 9; }

/* --------------------------------------------------------------------------
   11. Branches
   -------------------------------------------------------------------------- */

.branch { display: flex; flex-direction: column; gap: 16px; }
.branch__name {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-head);
  font-size: 1.15rem;
  color: var(--brand-brown);
}
.branch__name::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--brand-amber);
  flex: none;
}
.branch dl { display: grid; grid-template-columns: auto 1fr; gap: 8px 14px; margin: 0; }
.branch dt { color: var(--ink-muted); font-size: 0.9rem; }
.branch dd { margin: 0; font-weight: 600; }
.branch__actions { display: flex; flex-wrap: wrap; gap: 10px; }

.map-embed {
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--cream-200);
  aspect-ratio: 16 / 9;
  display: grid;
  place-items: center;
  color: var(--ink-muted);
  font-size: 0.9rem;
  text-align: center;
  padding: 16px;
  border: 1px dashed var(--brand-tan);
}

/* --------------------------------------------------------------------------
   12. Forms
   -------------------------------------------------------------------------- */

.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.field { display: flex; flex-direction: column; gap: 7px; }
.field--full { grid-column: 1 / -1; }

.field label {
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--brand-brown);
}

.field input,
.field select,
.field textarea {
  font-family: var(--font-body);
  font-size: 1rem;
  color: var(--ink);
  background: var(--paper);
  border: 1.5px solid var(--line);
  border-radius: var(--radius);
  padding: 13px 16px;
  width: 100%;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.field textarea { min-height: 120px; resize: vertical; }

.field input:focus,
.field select:focus,
.field textarea:focus {
  outline: none;
  border-color: var(--brand-amber);
  box-shadow: 0 0 0 3px rgba(251, 176, 64, 0.25);
}

.field .hint { font-size: 0.8rem; color: var(--ink-muted); }

.form-note { font-size: 0.85rem; color: var(--ink-muted); }

.form-success {
  display: block;
  margin: 0;
  padding: 14px 18px;
  background: var(--cream-200);
  border-inline-start: 4px solid var(--brand-amber);
  border-radius: var(--radius);
  color: var(--brand-brown);
  font-weight: 600;
  font-size: 0.95rem;
}
/* .form-success sets display:block, which would otherwise defeat [hidden]. */
.form-success[hidden] { display: none; }

/* --------------------------------------------------------------------------
   12b. Cart rows — rendered by shop.js on cart.html / checkout.html (Phase 2)
   -------------------------------------------------------------------------- */

.cart-row {
  display: grid;
  grid-template-columns: 72px 1fr auto auto auto;
  align-items: center;
  gap: 16px;
  padding: 16px 0;
  border-bottom: 1px solid var(--line);
}
.cart-row img { border-radius: var(--radius); object-fit: cover; }
.cart-row__info { min-width: 0; }
.cart-row__info .price { font-size: 0.95rem; color: var(--ink-muted); }
.cart-row__sum { min-width: 6ch; text-align: end; }

.qty {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  background: var(--cream-100);
  border-radius: var(--radius-pill);
  padding: 3px;
}
.qty__btn {
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-pill);
  cursor: pointer;
  font-weight: 700;
  color: var(--brand-brown);
  -webkit-user-select: none;
  user-select: none;
}
.qty__btn:hover { background: var(--paper); }
.qty__value { min-width: 2.2ch; text-align: center; font-weight: 700; }

.cart-row__remove {
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-pill);
  cursor: pointer;
  font-size: 1.3rem;
  line-height: 1;
  color: var(--ink-muted);
}
.cart-row__remove:hover { background: var(--cream-200); color: var(--brand-brown); }

/* The checkout summary column is only ~360px wide, so the five-column row above
   overflows it at any viewport size. Rows rendered inside a summary always use
   the compact two-line layout. */
.cart-summary .cart-row {
  grid-template-columns: 56px 1fr auto;
  grid-template-areas:
    "img info remove"
    "img qty  sum";
  gap: 8px 10px;
}
.cart-summary .cart-row img { grid-area: img; width: 56px; height: 56px; align-self: start; }
.cart-summary .cart-row__info { grid-area: info; }
.cart-summary .cart-row__info .product-card__title { font-size: 0.92rem; }
.cart-summary .qty { grid-area: qty; }
.cart-summary .cart-row__sum { grid-area: sum; }
.cart-summary .cart-row__remove { grid-area: remove; }

@media (max-width: 720px) {
  .cart-row {
    grid-template-columns: 64px 1fr auto;
    grid-template-areas:
      "img info remove"
      "img qty  sum";
    gap: 8px 12px;
  }
  .cart-row img { grid-area: img; align-self: start; }
  .cart-row__info { grid-area: info; }
  .qty { grid-area: qty; }
  .cart-row__sum { grid-area: sum; }
  .cart-row__remove { grid-area: remove; }
}

/* --------------------------------------------------------------------------
   13. Footer
   -------------------------------------------------------------------------- */

.site-footer {
  background: var(--brand-brown);
  color: rgba(243, 228, 210, 0.86);
  padding: clamp(48px, 6vw, 72px) 0 0;
}
.site-footer a { color: rgba(243, 228, 210, 0.86); }
.site-footer a:hover { color: var(--brand-amber); }

.footer-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
  gap: clamp(24px, 4vw, 48px);
  padding-bottom: 44px;
}

.footer-brand img { height: 96px; width: auto; margin-bottom: 16px; }
.footer-brand p { font-size: 0.94rem; max-width: 30ch; }

.site-footer h3 {
  font-size: 0.95rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--brand-amber);
  margin-bottom: 16px;
}

.footer-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; font-size: 0.95rem; }

.social-row { display: flex; gap: 10px; margin-top: 18px; }
.social-row a {
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  background: rgba(255, 251, 250, 0.1);
  border-radius: var(--radius-pill);
  transition: background-color 0.15s ease, transform 0.15s ease;
}
.social-row a:hover { background: var(--brand-amber); transform: translateY(-2px); }
.social-row img { width: 20px; height: 20px; }

.footer-bottom {
  border-top: 1px solid rgba(255, 251, 250, 0.14);
  padding: 22px 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 24px;
  justify-content: space-between;
  font-size: 0.86rem;
}

/* --------------------------------------------------------------------------
   14. Floating chat launcher
   -------------------------------------------------------------------------- */

.chat-fab {
  position: fixed;
  inset-block-end: 22px;
  inset-inline-end: 22px;
  z-index: 90;
  display: flex;
  flex-direction: column-reverse;
  align-items: flex-end;
  gap: 12px;
}

.chat-fab__toggle {
  width: 58px;
  height: 58px;
  border: none;
  border-radius: var(--radius-pill);
  background: #25d366;
  box-shadow: var(--shadow-lg);
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: transform 0.15s ease;
}
.chat-fab__toggle:hover { transform: scale(1.06); }
.chat-fab__toggle img { width: 30px; height: 30px; }

.chat-fab__menu {
  display: none;
  flex-direction: column;
  gap: 8px;
  background: var(--paper);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lg);
  padding: 12px;
  min-width: 230px;
}
.chat-fab__menu.is-open { display: flex; }
.chat-fab__menu strong {
  font-family: var(--font-head);
  font-size: 0.85rem;
  color: var(--brand-brown);
}
.chat-fab__menu .btn { justify-content: flex-start; }

/* --------------------------------------------------------------------------
   15. Toast (add-to-cart confirmation)
   -------------------------------------------------------------------------- */

.toast {
  position: fixed;
  inset-block-end: 24px;
  inset-inline-start: 50%;
  transform: translate(-50%, 140%);
  z-index: 120;
  background: var(--brand-brown);
  color: var(--paper);
  padding: 14px 24px;
  border-radius: var(--radius-pill);
  box-shadow: var(--shadow-lg);
  font-weight: 600;
  font-size: 0.95rem;
  transition: transform 0.28s cubic-bezier(0.2, 0.9, 0.3, 1.2);
  pointer-events: none;
  max-width: calc(100vw - 40px);
  text-align: center;
}
.toast.is-visible { transform: translate(-50%, 0); }

/* --------------------------------------------------------------------------
   16. Notice band (placeholder flags for the client/programmer)
   -------------------------------------------------------------------------- */

.notice {
  background: var(--brand-amber);
  color: var(--brown-dark);
  font-size: 0.86rem;
  text-align: center;
  padding: 9px var(--gutter);
  font-weight: 600;
}

/* --------------------------------------------------------------------------
   16b. Inner pages
   -------------------------------------------------------------------------- */

/* Breadcrumb + page heading */
.breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding-block: 18px 0;
  font-size: 0.88rem;
  color: var(--ink-muted);
}
.breadcrumb span[aria-hidden] { color: var(--brand-tan); }

.page-head { padding: clamp(26px, 4vw, 44px) 0 clamp(18px, 3vw, 30px); }
.page-head h1 { margin-bottom: 14px; }
.page-head__lead {
  font-size: clamp(1rem, 1.5vw, 1.12rem);
  color: var(--ink-muted);
  max-width: 62ch;
}

/* Catalogue filters — all DIVs / inputs, never <button>s */
.filter-bar {
  display: grid;
  grid-template-columns: minmax(200px, 1fr) auto;
  align-items: center;
  gap: 16px 24px;
  padding: 18px;
  margin-bottom: 30px;
  background: var(--cream-100);
  border-radius: var(--radius-lg);
}
.filter-bar__search input {
  width: 100%;
  font-family: var(--font-body);
  font-size: 1rem;
  padding: 12px 18px;
  border: 1.5px solid var(--line);
  border-radius: var(--radius-pill);
  background: var(--paper);
  color: var(--ink);
}
.filter-bar__search input:focus {
  outline: none;
  border-color: var(--brand-amber);
  box-shadow: 0 0 0 3px rgba(251, 176, 64, 0.25);
}

.filter-bar__price {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 0.9rem;
  color: var(--ink-muted);
}
.filter-bar__price label { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.filter-bar__price strong { color: var(--brand-brown); font-family: var(--font-head); }
.filter-bar__price input[type="range"] { accent-color: var(--brand-amber); width: 140px; }

.chip-row {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.chip {
  font-family: var(--font-head);
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--brand-brown);
  background: var(--paper);
  border: 1.5px solid var(--line);
  border-radius: var(--radius-pill);
  padding: 9px 18px;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
  -webkit-user-select: none;
  user-select: none;
}
.chip:hover { border-color: var(--brand-tan); }
.chip.is-active {
  background: var(--brand-brown);
  border-color: var(--brand-brown);
  color: var(--paper);
}

.empty-state {
  text-align: center;
  padding: 40px 20px;
  color: var(--ink-muted);
  font-size: 1.05rem;
}

/* Product detail */
.product-detail {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(26px, 4vw, 56px);
  align-items: start;
}
.thumb-row { display: flex; gap: 10px; margin-top: 14px; }
.thumb-row img {
  width: 80px;
  height: 80px;
  object-fit: cover;
  border-radius: var(--radius);
  border: 1.5px solid var(--line);
  background: var(--cream-100);
}

.price--lg { font-size: 2rem; margin-bottom: 18px; }

.spec { display: grid; grid-template-columns: auto 1fr; gap: 10px 18px; margin: 24px 0; }
.spec dt { color: var(--ink-muted); font-size: 0.9rem; }
.spec dd { margin: 0; }

.buy-row { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; margin: 26px 0; }

.tick-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.tick-list li { position: relative; padding-inline-start: 28px; color: var(--ink-muted); }
.tick-list li::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  top: 0.55em;
  width: 12px;
  height: 6px;
  border-inline-start: 2px solid var(--brand-amber);
  border-block-end: 2px solid var(--brand-amber);
  transform: rotate(-45deg);
}

/* Catering set cards */
.set-card img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: var(--radius);
  margin-bottom: 16px;
}
.set-card .price { display: block; margin-top: 12px; }

/* Blog */
.blog-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px; }
.blog-card {
  display: flex;
  flex-direction: column;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.blog-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.blog-card__media img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; }
.blog-card__body { padding: 20px; }
.blog-card__title { font-size: 1.15rem; margin: 6px 0 10px; }
.blog-card__body p { color: var(--ink-muted); font-size: 0.95rem; }

.post__wrap { max-width: 760px; margin-inline: auto; }
.post__meta { color: var(--ink-muted); font-size: 0.9rem; margin-bottom: 24px; }
.post .media-frame { margin-bottom: 28px; }
.post h2 { margin-top: 34px; }
.post blockquote {
  margin: 30px 0;
  padding: 20px 26px;
  border-inline-start: 4px solid var(--brand-amber);
  background: var(--cream-100);
  border-radius: var(--radius);
  font-family: var(--font-head);
  font-size: 1.15rem;
  color: var(--brand-brown);
}

/* Cart & checkout */
.cart-layout {
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: clamp(20px, 3vw, 34px);
  align-items: start;
}
.cart-summary { position: sticky; top: calc(var(--header-h) + 16px); }
.cart-summary h2 { font-size: 1.25rem; }
.cart-summary__lines { display: grid; grid-template-columns: 1fr auto; gap: 10px 16px; margin: 18px 0; }
.cart-summary__lines dt { color: var(--ink-muted); font-size: 0.92rem; }
.cart-summary__lines dd { margin: 0; text-align: end; font-weight: 600; }
.cart-summary__total {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 12px;
  padding-top: 16px;
  margin-bottom: 18px;
  border-top: 1px solid var(--line);
  font-family: var(--font-head);
  color: var(--brand-brown);
}
.cart-summary__total strong { font-size: 1.4rem; }

.radio-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 14px; }

/* Selected state uses the adjacent-sibling combinator (input:checked + span)
   rather than .radio-card:has(input:checked). Both work, but `:has()` needs
   Safari 15.4+ / Firefox 121+, while `+` has been universally supported for
   two decades — worth having on a customer-facing checkout. The native radio
   is visually replaced by a drawn dot but stays focusable and in the
   accessibility tree. */
.radio-card { display: block; position: relative; cursor: pointer; }

/* Kept in the accessibility tree and focusable — just visually replaced by the
   custom dot drawn on the card below. */
.radio-card > input {
  position: absolute;
  opacity: 0;
  width: 1px;
  height: 1px;
  margin: 0;
}

.radio-card > input + span {
  display: block;
  padding: 16px 16px 16px 48px;
  border: 1.5px solid var(--line);
  border-radius: var(--radius);
  transition: border-color 0.15s ease, background-color 0.15s ease;
}
.radio-card > input + span::before {
  content: "";
  position: absolute;
  inset-inline-start: 18px;
  top: 20px;
  width: 18px;
  height: 18px;
  border: 2px solid var(--brand-tan);
  border-radius: 50%;
  background: var(--paper);
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.radio-card:hover > input + span { border-color: var(--brand-tan); }

.radio-card > input:checked + span {
  border-color: var(--brand-amber);
  background: var(--cream-100);
}
.radio-card > input:checked + span::before {
  border-color: var(--brand-brown);
  box-shadow: inset 0 0 0 3px var(--paper), inset 0 0 0 12px var(--brand-brown);
}
.radio-card > input:focus-visible + span {
  outline: 3px solid var(--brand-amber);
  outline-offset: 3px;
}

.radio-card span span { display: block; font-size: 0.92rem; color: var(--ink-muted); }
.radio-card strong { display: block; color: var(--brand-brown); font-family: var(--font-head); margin-bottom: 3px; }

.payment-stub {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 18px;
  padding: 14px 18px;
  background: var(--cream-200);
  border: 1px dashed var(--brand-tan);
  border-radius: var(--radius);
  font-size: 0.9rem;
  color: var(--ink-muted);
}

/* 404 */
.notfound { text-align: center; }
.notfound img { width: 120px; margin: 0 auto 18px; }
.notfound h1 { font-size: clamp(3rem, 12vw, 6rem); margin-bottom: 8px; }
.notfound p { color: var(--ink-muted); font-size: 1.1rem; }

/* --------------------------------------------------------------------------
   17. Responsive
   -------------------------------------------------------------------------- */

@media (max-width: 1120px) {
  .cat-grid { grid-template-columns: repeat(3, 1fr); }
  .product-grid { grid-template-columns: repeat(3, 1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .cart-layout { grid-template-columns: 1fr; }
  .cart-summary { position: static; }
  .blog-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 900px) {
  .product-detail { grid-template-columns: 1fr; }
  .filter-bar { grid-template-columns: 1fr; }
  .filter-bar__price { justify-content: space-between; }
  .filter-bar__price input[type="range"] { width: 100%; max-width: 220px; }
  .radio-row { grid-template-columns: 1fr; }
}

/* The Georgian nav labels are wide. With six links plus the language switcher
   inside the nav, brand + nav + cart measures ~1125px in Georgian (803px of nav
   alone) against ~629px in English. Collapse to the burger menu below 1200px so
   the widest language keeps real headroom. Kept separate from the layout
   breakpoint above so the hero and grids are unaffected. */
@media (max-width: 1200px) {
  .nav-toggle { display: flex; }

  .site-nav {
    position: fixed;
    inset-block-start: var(--header-h);
    inset-inline: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 2px;
    background: var(--paper);
    border-bottom: 1px solid var(--line);
    box-shadow: var(--shadow-md);
    padding: 12px var(--gutter) 20px;
    margin: 0;
    display: none;
  }
  .site-nav.is-open { display: flex; }
  .site-nav a { padding: 13px 14px; font-size: 1rem; }

  /* The collapsed nav is position:fixed, so its margin-inline-start:auto no
     longer pushes the tools to the right — move the auto margin onto them. */
  .header-tools { margin-inline-start: auto; }

  /* Language switcher inside the burger menu: full-width row under the links. */
  .site-nav .lang-switcher {
    margin: 12px 0 0;
    padding: 5px;
    justify-content: center;
    border-top: 1px solid var(--line);
    border-radius: var(--radius);
    background: transparent;
    padding-top: 14px;
  }
  .site-nav .lang-option {
    flex: 1 1 auto;
    text-align: center;
    background: var(--cream-100);
    font-size: 0.9rem;
  }
  .site-nav .lang-option.is-active { background: var(--brand-brown); }

  /* Cart collapses to the icon — the label would crowd the burger row. */
  .cart-btn span:not(.cart-count) { display: none; }
  .cart-btn { padding: 12px 16px; }
}

@media (max-width: 880px) {
  :root { --header-h: 66px; }

  .site-header__inner { gap: 10px; }
  .brand img { height: 44px; }

  .hero__inner { grid-template-columns: 1fr; text-align: center; }
  .hero__lead { margin-inline: auto; }
  .hero__actions, .hero__facts { justify-content: center; }
  .hero__art { order: -1; max-width: 320px; margin-inline: auto; }
  .hero__badge { inset-inline-end: -6px; }

  .split { grid-template-columns: 1fr; }
  .grid-2, .grid-3 { grid-template-columns: 1fr; }
}

@media (max-width: 720px) {
  body { font-size: 16px; }
  .cat-grid { grid-template-columns: repeat(2, 1fr); }
  .product-grid { grid-template-columns: repeat(2, 1fr); gap: 14px; }
  .form-grid { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr; }
  .product-card__body { padding: 14px; }
  .doodle-band { height: 46px; }

  /* Cards are narrowest here, so the foot always wraps — centre the price over
     the full-width button rather than leaving it hanging left. */
  .product-card__foot { justify-content: center; }
  .product-card__foot .price { flex: 1 1 100%; text-align: center; }

  .blog-grid { grid-template-columns: 1fr; }
  .thumb-row img { width: 64px; height: 64px; }
  .cart-summary__total strong { font-size: 1.2rem; }
}

/* Keep the custom (div-based) controls at a comfortable ~44px target wherever a
   finger is likely — on touch pointers, and on any narrow viewport.
   NOTE: this must stay ABOVE the 420px block, which trims the horizontal
   padding back down to fit the header row. Same specificity, so source order
   decides the winner. */
@media (pointer: coarse), (max-width: 1200px) {
  .lang-option { padding: 10px 12px; }
  .qty__btn { width: 40px; height: 40px; }
  .cart-row__remove { width: 42px; height: 42px; }
}

@media (max-width: 420px) {
  .hero__facts { gap: 18px; }

  /* With the switcher moved into the burger menu the header row is just
     logo + burger + cart icon, so it fits comfortably — only the badge needs
     pulling in so it can't graze the viewport edge. */
  .site-header__inner { gap: 8px; }
  .cart-count { inset-inline-end: -2px; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
}
