/* ==========================================================================
   Grillsons Storefront — design system + components
   Ported faithfully from the Claude Design prototype (Grillsons Storefront.dc.html).
   This file is the visual source of truth; it doubles as the theme's
   design-system.css when ported into wordpress/grillsons-theme.
   ========================================================================== */

/* -------------------------------------------------------------------------
   1. Design tokens
   ------------------------------------------------------------------------- */
:root {
  /* Color */
  --bg: #141210;
  --bg-smoke: #17120F;
  --bg-deep: #121009;
  --bg-promo: #0E0C0A;
  --surface: #1E1A15;
  --surface-2: #1A1510;
  --surface-ink: #1A140C;
  --text: #EDE6D8;
  --text-bright: #F4EEE2;
  --text-2: #CBC0AE;
  --text-3: #B7AC9A;
  --text-dim: #9A8F7E;
  --control: #C9BEAC;
  --gold: #D4A24E;
  --gold-bright: #E7B24E;
  --gold-light: #EBB85A;
  --brick: #8C2F23;
  --green: #7BBF70;

  --hairline: rgba(237, 230, 216, 0.08);
  --hairline-2: rgba(237, 230, 216, 0.12);
  --hairline-3: rgba(237, 230, 216, 0.16);

  /* Type */
  --font-display: 'Bricolage Grotesque', system-ui, sans-serif;
  --font-body: 'Hanken Grotesk', system-ui, sans-serif;
  --font-mono: 'Space Mono', ui-monospace, monospace;

  /* Layout */
  --maxw: 1240px;
  --maxw-hero: 1320px;
  --pad-x: 26px;

  /* Radius */
  --r-card: 16px;
  --r-img: 14px;
  --r-btn: 10px;
  --r-pill: 999px;

  /* Shadow */
  --sh-card-hover: 0 30px 64px rgba(0, 0, 0, 0.55);
  --sh-cta: 0 8px 22px rgba(212, 162, 78, 0.3);
  --sh-header: 0 14px 40px rgba(0, 0, 0, 0.4);

  /* Motion */
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
}

/* -------------------------------------------------------------------------
   2. Base / reset
   ------------------------------------------------------------------------- */
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
::selection { background: var(--gold); color: var(--surface-ink); }
img { max-width: 100%; display: block; }
/* AVIF/WebP wrapper around a product photograph (inc/images.php): no box of
   its own, so the <img> lays out exactly as it did without it. */
.gs-pic { display: contents; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; cursor: pointer; }
input, button, select, textarea { font-family: inherit; }
/* Suppress the ring for POINTER focus only. A blanket `input:focus { outline:
   none }` also killed it for keyboard users — it out-specifies the
   :focus-visible rule below on the same elements — leaving no visible caret
   position anywhere in checkout. `:not(:focus-visible)` keeps mouse clicks
   clean while the keyboard ring survives. */
input:focus:not(:focus-visible),
textarea:focus:not(:focus-visible),
select:focus:not(:focus-visible) { outline: none; }
h1, h2, h3, p { margin: 0; }
:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; border-radius: 4px; }

.gs-container { max-width: var(--maxw); margin: 0 auto; padding-left: var(--pad-x); padding-right: var(--pad-x); }
.gs-eyebrow {
  font-family: var(--font-mono); font-size: 11px; font-weight: 700;
  letter-spacing: 0.26em; text-transform: uppercase; color: var(--text-dim);
}
.gs-mono { font-family: var(--font-mono); }

/* -------------------------------------------------------------------------
   3. Keyframes (from prototype head)
   ------------------------------------------------------------------------- */
@keyframes gs-rise { from { opacity: 0; transform: translateY(14px);} to { opacity: 1; transform: translateY(0);} }
@keyframes gs-kenburns { from { transform: scale(1.02);} to { transform: scale(1.14);} }
@keyframes gs-emberglow { 0%,100% { filter: drop-shadow(0 0 2px rgba(212,162,78,0.4));} 50% { filter: drop-shadow(0 0 7px rgba(230,140,60,0.7));} }
@keyframes gs-sway { 0%,100% { transform: rotate(-1.5deg);} 50% { transform: rotate(1.5deg);} }
@keyframes gs-heroprog { from { transform: scaleX(0);} to { transform: scaleX(1);} }

.gs-rise { animation: gs-rise 0.6s var(--ease-out) both; }
.gs-kb { animation: gs-kenburns 16s ease-in-out infinite alternate; }
.gs-flame { transform-origin: 50% 90%; animation: gs-sway 4.5s ease-in-out infinite, gs-emberglow 3.6s ease-in-out infinite; }
.gs-grain { background-image: radial-gradient(rgba(237,230,216,0.05) 1px, transparent 1px); background-size: 4px 4px; }

/* -------------------------------------------------------------------------
   4. Buttons
   ------------------------------------------------------------------------- */
.gs-btn { display: inline-flex; align-items: center; gap: 12px; border: none; border-radius: var(--r-pill); font-weight: 700; font-size: 15px; transition: transform .2s, box-shadow .3s; will-change: transform; }
.gs-btn--gold { background: var(--gold); color: var(--surface-ink); padding: 0 10px 0 26px; height: 58px; box-shadow: 0 10px 30px rgba(212,162,78,0.26); }
.gs-btn--gold:hover { transform: translateY(-2px); box-shadow: 0 14px 38px rgba(212,162,78,0.42); }
.gs-btn--gold:active { transform: translateY(0) scale(0.98); }
.gs-btn__ico { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: var(--r-pill); background: var(--surface-ink); color: var(--gold); }
.gs-btn--brick { background: var(--brick); color: var(--text-bright); border-radius: var(--r-btn); padding: 0 24px; height: 52px; gap: 9px; }
.gs-btn--outline { background: none; border: 1px solid var(--hairline-3); color: var(--text); border-radius: var(--r-btn); padding: 0 24px; height: 52px; }
.gs-btn--outline:hover { border-color: var(--gold); }
.gs-link-underline { background: none; border: none; color: var(--text); font-weight: 600; font-size: 15px; border-bottom: 1px solid rgba(237,230,216,0.45); padding: 0 0 3px; transition: border-color .2s; }
.gs-link-underline:hover { border-color: var(--gold); }
.gs-link-gold { display: inline-flex; align-items: center; gap: 6px; background: none; border: none; color: var(--gold); font-weight: 600; font-size: 14px; }

/* -------------------------------------------------------------------------
   5. Promo bar
   ------------------------------------------------------------------------- */
.gs-promo {
  display: flex; justify-content: center; align-items: center; gap: 26px; flex-wrap: wrap;
  background: var(--bg-promo); border-bottom: 1px solid rgba(237,230,216,0.06);
  padding: 9px 20px; font-family: var(--font-mono); font-size: 11px;
  letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim);
}
.gs-promo__hi { color: var(--gold); }
.gs-promo__sep { opacity: 0.4; }

/* -------------------------------------------------------------------------
   6. Header + nav
   ------------------------------------------------------------------------- */
.gs-header {
  position: sticky; top: 0; z-index: 50;
  background: rgba(20,18,16,0.82);
  backdrop-filter: blur(16px) saturate(1.3); -webkit-backdrop-filter: blur(16px) saturate(1.3);
  border-bottom: 1px solid var(--hairline);
  transition: background .35s ease, box-shadow .35s ease, border-color .35s ease;
}
.gs-header.is-scrolled { background: rgba(16,14,12,0.94); box-shadow: var(--sh-header); border-color: rgba(212,162,78,0.18); }
.gs-header__inner {
  max-width: 1280px; margin: 0 auto; padding: 15px 26px;
  display: flex; align-items: center; gap: 24px; transition: padding .35s ease;
}
.gs-header.is-scrolled .gs-header__inner { padding-top: 9px; padding-bottom: 9px; }
.gs-logo { display: flex; align-items: center; gap: 13px; cursor: pointer; flex-shrink: 0; }
.gs-logo__mark { display: inline-flex; align-items: flex-end; justify-content: center; width: 28px; height: 33px; }
.gs-logo__name { font-family: var(--font-display); font-weight: 700; font-size: 27px; letter-spacing: -0.015em; color: var(--text); line-height: 1; }
.gs-logo__sub { display: block; font-family: var(--font-mono); font-size: 8.5px; letter-spacing: 0.34em; text-transform: uppercase; color: var(--text-dim); margin-top: 4px; }

.gs-nav { position: relative; display: flex; align-items: center; gap: 2px; margin-left: 14px; }
.gs-nav__ind {
  position: absolute; top: 50%; left: 0; height: 38px; width: 0; transform: translateY(-50%);
  border-radius: var(--r-pill); background: rgba(42,33,23,0.92); border: 1px solid rgba(212,162,78,0.55);
  box-shadow: 0 6px 18px rgba(0,0,0,0.3); opacity: 0; pointer-events: none; z-index: 0;
  transition: transform .45s var(--ease-spring), width .45s var(--ease-spring), opacity .28s ease;
}
.gs-nav__item {
  position: relative; z-index: 1; background: none; border: none; color: #CFC4B2;
  font-family: var(--font-display); font-size: 15px; font-weight: 600; letter-spacing: -0.006em;
  padding: 9px 16px; border-radius: var(--r-pill); transition: color .3s ease; white-space: nowrap;
}
.gs-nav__item:hover { color: var(--gold-bright); }

.gs-header__actions { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.gs-iconbtn {
  display: flex; align-items: center; justify-content: center; width: 42px; height: 42px;
  background: none; border: 1px solid var(--hairline-3); border-radius: var(--r-pill);
  color: #CFC4B2; transition: all .28s var(--ease-spring);
}
.gs-iconbtn:hover { background: var(--text); color: var(--surface-ink); border-color: var(--text); transform: translateY(-2px); }
.gs-cart {
  display: flex; align-items: center; gap: 10px; background: linear-gradient(120deg, var(--gold-light), var(--gold));
  border: none; border-radius: var(--r-pill); color: var(--surface-ink);
  font-family: var(--font-display); font-weight: 700; font-size: 14px;
  padding: 0 8px 0 17px; height: 42px; box-shadow: 0 8px 22px rgba(212,162,78,0.32);
  transition: transform .25s ease-out, box-shadow .3s ease; will-change: transform;
}
.gs-cart:hover { box-shadow: 0 12px 30px rgba(212,162,78,0.5); }
.gs-cart__total { font-family: var(--font-mono); font-size: 13px; font-weight: 700; }
.gs-cart__count { background: var(--surface-ink); color: var(--gold-light); font-size: 11px; font-weight: 700; min-width: 24px; height: 24px; border-radius: var(--r-pill); display: inline-flex; align-items: center; justify-content: center; padding: 0 6px; }

/* -------------------------------------------------------------------------
   7. Hero (slider shell + variants)

   Every slide fits the first screen: the hero is exactly the viewport height
   minus the promo bar and header (--gs-chrome-h, measured by main.js; the
   fallbacks below match the CSS heights), and the type is clamped on BOTH
   width and height so a short laptop screen (1280x720) gets smaller type
   instead of a cut-off slide. Phones (mobile.css) subtract the tab bar too.
   ------------------------------------------------------------------------- */
:root { --gs-chrome-h: 123px; }
.gs-hero {
  position: relative;
  --gs-hero-h: clamp(500px, calc(100vh - var(--gs-chrome-h)), 1000px);
  --gs-hero-h: clamp(500px, calc(100svh - var(--gs-chrome-h)), 1000px);
  --gs-hero-pad-b: clamp(20px, 4.4vh, 64px);
  --gs-hero-pad-s: clamp(24px, 4.4vw, 80px);
  --gs-hero-pad-e: clamp(16px, 2.6vw, 44px);
}
.gs-hero__slide { display: none; }
.gs-hero__slide.is-active { display: block; }

/* Hero toggle control: 01 Grill / 02 Gallery */
.gs-herotoggle {
  position: absolute; top: clamp(12px, 2.4vh, 22px); right: 26px; z-index: 3;
  display: inline-flex; align-items: center; gap: 2px;
  background: rgba(14,12,10,0.72); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border: 1px solid var(--hairline-2); border-radius: var(--r-pill); padding: 5px 6px;
}
.gs-herotoggle__arrow { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border: none; background: none; color: var(--text-dim); border-radius: var(--r-pill); transition: color .2s, background .2s; }
.gs-herotoggle__arrow:hover { color: var(--text); background: rgba(237,230,216,0.08); }
.gs-herotoggle__tab { position: relative; display: inline-flex; align-items: baseline; gap: 7px; background: none; border: none; font-family: var(--font-mono); font-size: 10px; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-dim); padding: 7px 12px; border-radius: var(--r-pill); transition: color .3s; }
.gs-herotoggle__tab:hover { color: var(--text); }
.gs-herotoggle__tab.is-active { color: var(--gold); }
.gs-herotoggle__n { font-size: 9px; letter-spacing: 0.06em; opacity: .6; }
.gs-herotoggle__prog { position: absolute; left: 10px; right: 10px; bottom: 3px; height: 2px; background: rgba(212,162,78,0.2); border-radius: 2px; overflow: hidden; }
.gs-herotoggle__prog::after { content: ""; position: absolute; inset: 0; background: var(--gold); transform-origin: left; transform: scaleX(0); }
/* The bar fills over the slide's own dwell (main.js: 3 s on the lead, 7 s on the Gallery). */
.gs-herotoggle__prog.is-running::after { animation: gs-heroprog var(--gs-hero-dwell, 7s) linear forwards; }

/* Shared hero copy atoms */
.gs-tick { display: flex; align-items: center; gap: 13px; margin-bottom: clamp(10px, 2.6vh, 30px); }
.gs-tick__line { width: 42px; height: 1px; background: var(--gold); }
.gs-tick__label { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.34em; text-transform: uppercase; color: var(--gold); }
.gs-h1 { font-family: var(--font-display); font-weight: 500; font-size: clamp(48px, 6.6vw, 96px); line-height: 0.9; letter-spacing: -0.035em; color: var(--text-bright); margin: 0; }
.gs-h1 b { font-weight: 800; }
.gs-h1 i { font-style: italic; font-weight: 600; color: var(--gold); }
.gs-hero__lede { font-size: 18px; line-height: 1.55; color: var(--text-2); max-width: 430px; margin: 30px 0 0; }
.gs-hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 20px; margin-top: 40px; }

/* Hero B — the grill (lead): copy column + photograph */
.gs-heroB {
  position: relative; display: grid; grid-template-columns: minmax(0, 48fr) minmax(0, 52fr);
  height: var(--gs-hero-h); min-height: 0; overflow: hidden;
  border-bottom: 1px solid var(--hairline); background: #191310;
}
.gs-heroB__copy {
  grid-column: 1; grid-row: 1; position: relative; z-index: 1; min-height: 0;
  display: flex; flex-direction: column; justify-content: center;
  padding: var(--gs-hero-pad-b) var(--gs-hero-pad-e) var(--gs-hero-pad-b) var(--gs-hero-pad-s);
}
.gs-heroB__copy::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(80% 72% at 0% 100%, rgba(230,140,60,0.26), transparent 60%), radial-gradient(50% 50% at 90% 0%, rgba(212,162,78,0.10), transparent 60%);
}
.gs-heroB__inner { position: relative; max-width: 600px; }
.gs-heroB__media { grid-column: 2; grid-row: 1; position: relative; overflow: hidden; min-height: 0; margin-inline-start: -7vw; }
.gs-heroB__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 50%; }
.gs-heroB__media::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    linear-gradient(90deg, #191310 0%, rgba(25,19,16,0.82) 10%, rgba(25,19,16,0.3) 22%, rgba(25,19,16,0) 36%),
    linear-gradient(0deg, rgba(14,12,10,0.45) 0%, rgba(14,12,10,0) 22%);
}
.gs-pill-eyebrow {
  display: inline-flex; align-items: center; gap: 10px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.26em;
  text-transform: uppercase; color: var(--gold); border: 1px solid rgba(212,162,78,0.4); border-radius: var(--r-pill);
  padding: 7px 14px; margin-bottom: clamp(12px, 2.6vh, 26px);
}
.gs-h1--b { font-weight: 800; font-size: clamp(34px, min(4.9vw, 8.6vh), 80px); line-height: 0.98; letter-spacing: -0.02em; }
.gs-h1--b i { font-weight: 700; }
/* The positioning line under the headline. */
.gs-hero__creed {
  margin: clamp(10px, 2vh, 20px) 0 0; font-family: var(--font-display); font-style: italic; font-weight: 600;
  font-size: clamp(15px, min(1.45vw, 2.6vh), 22px); line-height: 1.3; letter-spacing: -0.005em; color: var(--gold-bright);
}
.gs-hero__lede--b { font-size: clamp(14px, min(1.2vw, 2.2vh), 17px); line-height: 1.5; margin-top: clamp(8px, 1.6vh, 16px); max-width: 440px; }
.gs-hero__actions--b { gap: 12px; margin-top: clamp(16px, 3.4vh, 34px); }
.gs-hero__actions--b .gs-btn--gold { height: clamp(46px, 6.6vh, 56px); padding: 0 8px 0 24px; }
.gs-hero__actions--b .gs-btn--gold .gs-btn__ico { width: clamp(34px, 5vh, 40px); height: clamp(34px, 5vh, 40px); }
.gs-hero__actions--b .gs-btn--outline { height: clamp(44px, 6.2vh, 52px); }
.gs-stats { display: flex; gap: clamp(18px, 2.4vw, 30px); margin-top: clamp(16px, 3.6vh, 40px); border-top: 1px solid rgba(237,230,216,0.1); padding-top: clamp(12px, 2.2vh, 24px); }
.gs-stat__num { font-family: var(--font-display); font-size: clamp(18px, min(2vw, 3.4vh), 30px); color: var(--text); line-height: 1.2; }
.gs-stat__label { font-size: 12px; color: var(--text-dim); letter-spacing: 0.04em; }

/* Hero D — every cut, up close: a scrolling price board + the photograph */
.gs-heroD {
  position: relative; display: grid; grid-template-columns: minmax(0, 44fr) minmax(0, 56fr);
  height: var(--gs-hero-h); min-height: 0; overflow: hidden;
  border-bottom: 1px solid var(--hairline); background: var(--bg-deep);
}
.gs-heroD__list {
  grid-column: 1; grid-row: 1; position: relative; z-index: 1; min-height: 0;
  display: flex; flex-direction: column; justify-content: center;
  padding: var(--gs-hero-pad-b) var(--gs-hero-pad-e) var(--gs-hero-pad-b) var(--gs-hero-pad-s);
}
.gs-h1--d { font-size: clamp(32px, min(4.2vw, 7.4vh), 68px); line-height: 0.94; letter-spacing: -0.03em; }
.gs-h1--d i { font-weight: 800; }
.gs-hero__lede--d { font-size: clamp(14px, min(1.1vw, 2vh), 16px); margin: clamp(8px, 1.6vh, 16px) 0 clamp(12px, 2.4vh, 24px); max-width: 400px; }
.gs-heroD__rows {
  flex: 0 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
  border-bottom: 1px solid var(--hairline-2); scrollbar-width: thin; scrollbar-color: rgba(212,162,78,.45) transparent;
}
.gs-heroD__rows.is-scrollable { -webkit-mask-image: linear-gradient(180deg, #000 calc(100% - 34px), transparent); mask-image: linear-gradient(180deg, #000 calc(100% - 34px), transparent); }
.gs-heroD__rows.is-scrollable.is-end { -webkit-mask-image: none; mask-image: none; }
.gs-heroD__rows::-webkit-scrollbar { width: 4px; }
.gs-heroD__rows::-webkit-scrollbar-thumb { background: rgba(212,162,78,.45); border-radius: 4px; }
.gs-heroD__row {
  display: grid; grid-template-columns: 2.6em minmax(0, 1fr) auto; align-items: baseline; column-gap: 10px;
  padding: clamp(7px, 1.25vh, 13px) 4px clamp(7px, 1.25vh, 13px) 2px; border-top: 1px solid var(--hairline-2);
  color: var(--text-dim); text-decoration: none; transition: color .25s, padding .3s var(--ease-out);
}
.gs-heroD__row:first-child { border-top: 0; }
.gs-heroD__row.is-active, .gs-heroD__row:hover, .gs-heroD__row:focus-visible { color: var(--gold-bright); }
.gs-heroD__row.is-active { padding-inline-start: 10px; }
.gs-heroD__rown { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.08em; color: rgba(212,162,78,.55); }
.gs-heroD__rowname { font-family: var(--font-display); font-size: clamp(17px, min(1.9vw, 3.2vh), 28px); font-weight: 700; letter-spacing: -0.01em; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gs-heroD__rowp { font-family: var(--font-mono); font-size: 12.5px; letter-spacing: 0.02em; color: var(--text-dim); direction: ltr; unicode-bidi: isolate; }
.gs-heroD__row.is-active .gs-heroD__rowp { color: var(--gold); }
.gs-heroD__all {
  display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; margin-top: clamp(10px, 2vh, 20px); min-height: 40px;
  font-family: var(--font-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--gold);
}
.gs-heroD__all:hover { color: var(--gold-bright); }
.gs-heroD__media { grid-column: 2; grid-row: 1; position: relative; overflow: hidden; min-height: 0; }
.gs-heroD__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gs-heroD__shade { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(90deg, #121009 0%, rgba(18,16,9,0.18) 22%, transparent 48%), linear-gradient(0deg, rgba(18,16,9,0.88), transparent 46%); }
/* The caption stays clear of the WhatsApp button in the bottom corner. */
.gs-heroD__caption { position: absolute; left: clamp(22px, 2.8vw, 40px); right: clamp(22px, 2.8vw, 40px); bottom: clamp(20px, 4vh, 42px); z-index: 2; }
.gs-heroD__cutline { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--gold-bright); margin-bottom: 10px; }
.gs-heroD__row2 { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px 20px; flex-wrap: wrap; }
.gs-heroD__name { font-family: var(--font-display); font-size: clamp(28px, min(3.6vw, 6.2vh), 56px); font-weight: 800; letter-spacing: -0.025em; color: var(--text-bright); line-height: 0.98; max-width: 62%; }
.gs-heroD__shop { display: inline-flex; align-items: center; gap: 10px; background: var(--gold); border-radius: var(--r-pill); color: var(--surface-ink); font-weight: 700; font-size: 15px; padding: 14px 22px; box-shadow: 0 10px 28px rgba(212,162,78,0.35); white-space: nowrap; will-change: transform; transition: transform .2s, box-shadow .3s; }
.gs-heroD__shop:hover { box-shadow: 0 14px 34px rgba(212,162,78,0.5); }

/* Right-to-left: the grid mirrors on its own; the fades and the toggle follow. */
[dir="rtl"] .gs-herotoggle { right: auto; left: 26px; }
[dir="rtl"] .gs-heroB__copy { padding: var(--gs-hero-pad-b) var(--gs-hero-pad-s) var(--gs-hero-pad-b) var(--gs-hero-pad-e); }
[dir="rtl"] .gs-heroD__list { padding: var(--gs-hero-pad-b) var(--gs-hero-pad-s) var(--gs-hero-pad-b) var(--gs-hero-pad-e); }
[dir="rtl"] .gs-heroB__copy::before { background: radial-gradient(80% 72% at 100% 100%, rgba(230,140,60,0.26), transparent 60%), radial-gradient(50% 50% at 10% 0%, rgba(212,162,78,0.10), transparent 60%); }
[dir="rtl"] .gs-heroB__media::after { background: linear-gradient(270deg, #191310 0%, rgba(25,19,16,0.82) 10%, rgba(25,19,16,0.3) 22%, rgba(25,19,16,0) 36%), linear-gradient(0deg, rgba(14,12,10,0.45) 0%, rgba(14,12,10,0) 22%); }
[dir="rtl"] .gs-heroD__shade { background: linear-gradient(270deg, #121009 0%, rgba(18,16,9,0.18) 22%, transparent 48%), linear-gradient(0deg, rgba(18,16,9,0.88), transparent 46%); }
[dir="rtl"] .gs-herotoggle__prog::after { transform-origin: right; }

/* Not over the hero: the WhatsApp button and the install prompt wait until
   the visitor has scrolled past it (main.js toggles the class). */
.gs-wa-float, .gs-install { transition: opacity .3s ease, transform .35s var(--ease-out); }
body.gs-hero-in-view .gs-wa-float { opacity: 0; transform: translateY(18px) scale(.9); pointer-events: none; }

/* -------------------------------------------------------------------------
   8. Featured / product cards
   ------------------------------------------------------------------------- */
.gs-section { max-width: var(--maxw); margin: 0 auto; padding: 64px var(--pad-x) 24px; }
.gs-section__head { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 26px; gap: 20px; }
.gs-section__title { font-family: var(--font-display); font-weight: 700; font-size: 32px; color: var(--text); margin: 0; }
.gs-section__eyebrow { margin-bottom: 8px; }

.gs-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 18px; }

.gs-card { position: relative; background: var(--surface); border: 1px solid rgba(237,230,216,0.09); border-radius: var(--r-card); overflow: hidden; cursor: pointer; display: flex; flex-direction: column; transition: transform .4s var(--ease-out), border-color .35s, box-shadow .35s; will-change: transform; }
.gs-card:hover { transform: translateY(-10px); border-color: rgba(212,162,78,0.55); box-shadow: var(--sh-card-hover), 0 0 0 1px rgba(212,162,78,0.18); }
.gs-card__media { position: relative; aspect-ratio: 1/1; overflow: hidden; }
.gs-card__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .65s var(--ease-out); }
.gs-card:hover .gs-card__img { transform: scale(1.09); }
.gs-card__ov { position: absolute; inset: 0; background: linear-gradient(180deg, transparent 42%, rgba(16,12,8,0.6)); opacity: 0; transition: opacity .4s; pointer-events: none; }
.gs-card:hover .gs-card__ov { opacity: 1; }
.gs-card__sheen { position: absolute; top: -20%; left: 0; width: 38%; height: 140%; background: linear-gradient(90deg, transparent, rgba(255,244,222,0.24), transparent); transform: translateX(-160%) skewX(-18deg); transition: transform .75s var(--ease-out); pointer-events: none; }
.gs-card:hover .gs-card__sheen { transform: translateX(260%) skewX(-18deg); }
.gs-card__badge { position: absolute; top: 12px; left: 12px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; padding: 5px 9px; border-radius: var(--r-pill); background: rgba(20,16,12,0.72); color: var(--gold-bright); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); }
.gs-card__badge--frozen { background: rgba(20,32,44,0.72); color: #9AC7E7; }
.gs-card__qa { position: absolute; left: 10px; right: 10px; bottom: 10px; display: flex; align-items: center; justify-content: space-between; gap: 8px; background: rgba(20,18,16,0.8); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1px solid var(--hairline-3); border-radius: 12px; padding: 8px 8px 8px 14px; transform: translateY(120%); opacity: 0; transition: transform .42s var(--ease-out), opacity .3s; }
.gs-card:hover .gs-card__qa { transform: translateY(0); opacity: 1; }
.gs-card__qa-label { font-family: var(--font-display); font-size: 13px; font-weight: 600; color: var(--text); }
.gs-card__qa-btn { display: flex; align-items: center; gap: 6px; background: var(--gold); border: none; border-radius: 9px; color: var(--surface-ink); font-weight: 700; font-size: 12.5px; padding: 8px 12px; white-space: nowrap; transition: transform .15s; }
.gs-card__qa-btn:active { transform: scale(0.92); }
.gs-card__body { padding: 16px 16px 18px; display: flex; flex-direction: column; gap: 5px; flex: 1; }
.gs-card__cut { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-dim); }
.gs-card__name { font-family: var(--font-display); font-size: 19px; font-weight: 600; color: var(--text); line-height: 1.2; }
.gs-card__foot { margin-top: auto; display: flex; align-items: center; justify-content: space-between; padding-top: 12px; }
.gs-card__price { font-family: var(--font-mono); font-size: 18px; color: var(--text-bright); }
.gs-card__weight { font-size: 12px; color: var(--text-dim); }
.gs-card__view { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.04em; color: var(--gold); display: flex; align-items: center; gap: 5px; }

/* -------------------------------------------------------------------------
   9. Trust strip
   ------------------------------------------------------------------------- */
.gs-trust { max-width: var(--maxw); margin: 0 auto; padding: 48px var(--pad-x); }
.gs-trust__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-card); overflow: hidden; }
.gs-trust__cell { background: #17130F; padding: 26px 22px; }
.gs-trust__ico { color: var(--gold); margin-bottom: 14px; }
.gs-trust__title { font-family: var(--font-display); font-size: 17px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.gs-trust__desc { font-size: 13.5px; line-height: 1.5; color: #A89D8B; }

/* -------------------------------------------------------------------------
   10. Who we are (the grill story)
   ------------------------------------------------------------------------- */
.gs-story { max-width: var(--maxw); margin: 0 auto; padding: 24px var(--pad-x) 72px; }
.gs-story__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: stretch; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 18px; overflow: hidden; }
.gs-story__copy { padding: clamp(28px,4vw,52px); display: flex; flex-direction: column; justify-content: center; }
.gs-story__title { font-family: var(--font-display); font-weight: 700; font-size: clamp(26px,3vw,38px); line-height: 1.1; color: var(--text-bright); margin: 0; }
.gs-story__lede { font-family: var(--font-display); font-weight: 400; font-size: clamp(17px, 1.6vw, 21px); line-height: 1.48; letter-spacing: -0.01em; color: var(--text-2); margin: 20px 0 0; max-width: 480px; }
.gs-story__lede strong { font-weight: 700; color: var(--gold); }
.gs-story__media { position: relative; min-height: 340px; }
.gs-story__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gs-story__media picture { position: absolute; inset: 0; }
.gs-story__eyebrow { color: var(--gold); margin-bottom: 16px; }
.gs-story__cta { align-self: flex-start; margin-top: 28px; height: auto; min-height: 46px; padding: 13px 22px; border-radius: 10px; color: var(--gold); border-color: rgba(212,162,78,0.5); }
[dir="rtl"] .gs-story__cta { align-self: flex-start; }

/* Who we cut for: the positioning section. An editorial spread, not a banner:
   the promise on the left, the reasons on the right, ruled like a price board. */
.gs-who {
  position: relative; margin: 40px 0 8px; border-top: 1px solid var(--hairline); border-bottom: 1px solid var(--hairline);
  background:
    radial-gradient(70% 120% at 0% 100%, rgba(140,47,35,0.16), transparent 60%),
    radial-gradient(50% 80% at 100% 0%, rgba(212,162,78,0.07), transparent 60%),
    var(--bg-smoke);
}
.gs-who::before { content: ""; position: absolute; left: 0; right: 0; top: -1px; height: 1px; background: linear-gradient(90deg, transparent, rgba(212,162,78,.5) 20%, rgba(212,162,78,.5) 80%, transparent); }
.gs-who__inner { max-width: var(--maxw); margin: 0 auto; padding: clamp(48px, 7vw, 96px) var(--pad-x); display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: clamp(28px, 5vw, 80px); align-items: start; }
.gs-who__eyebrow { color: var(--gold); margin-bottom: 18px; }
.gs-who__title { font-family: var(--font-display); font-weight: 800; font-size: clamp(34px, 4.4vw, 62px); line-height: 1.02; letter-spacing: -0.025em; color: var(--text-bright); margin: 0; }
.gs-who__title i { font-style: italic; font-weight: 700; color: var(--gold); }
.gs-who__kicker { display: flex; align-items: center; gap: 14px; margin: clamp(18px, 2.4vw, 28px) 0 0; font-family: var(--font-display); font-weight: 600; font-size: clamp(17px, 1.6vw, 22px); line-height: 1.3; color: var(--text); }
.gs-who__kicker::before { content: ""; flex: none; width: 34px; height: 1px; background: var(--gold); }
.gs-who__lede { font-size: clamp(16px, 1.3vw, 18px); line-height: 1.65; color: var(--text-2); margin: 0; max-width: 620px; }
.gs-who__marks { list-style: none; margin: clamp(22px, 3vw, 34px) 0 0; padding: 0; border-bottom: 1px solid var(--hairline-2); }
.gs-who__marks li { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 4px 12px; padding: 16px 0; border-top: 1px solid var(--hairline-2); font-size: 15px; line-height: 1.55; color: var(--text-3); }
.gs-who__n { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.06em; color: var(--gold); padding-top: 3px; }
.gs-who__marks b { font-family: var(--font-display); font-weight: 700; font-size: 16.5px; color: var(--text-bright); }
.gs-rtl .gs-who__title, .gs-rtl .gs-who__kicker { letter-spacing: 0; }
@media (max-width: 900px) {
  .gs-who__inner { grid-template-columns: 1fr; }
}

/* -------------------------------------------------------------------------
   11. Footer
   ------------------------------------------------------------------------- */
.gs-footer { border-top: 1px solid var(--hairline); background: var(--bg-promo); }
.gs-footer__top { max-width: var(--maxw); margin: 0 auto; padding: 54px var(--pad-x) 30px; display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr; gap: 36px; }
.gs-footer__brand { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.gs-footer__brand-name { font-family: var(--font-display); font-weight: 700; font-size: 20px; color: var(--text); }
.gs-footer__tagline { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; color: var(--gold); margin: 0 0 12px; }
.gs-footer__blurb { font-size: 13.5px; line-height: 1.6; color: #8A8073; max-width: 300px; }
.gs-footer__h { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 14px; }
.gs-footer__links { display: flex; flex-direction: column; gap: 10px; font-size: 13.5px; color: var(--text-3); }
.gs-footer__links a:hover { color: var(--gold); }
.gs-footer__wa { display: inline-flex; align-items: center; gap: 8px; font-size: 13.5px; color: #9FD18F; margin-bottom: 12px; }
.gs-footer__hours { font-size: 13px; color: #8A8073; }
.gs-footer__bar { border-top: 1px solid rgba(237,230,216,0.07); }
.gs-footer__bar-inner { max-width: var(--maxw); margin: 0 auto; padding: 18px var(--pad-x); display: flex; flex-wrap: wrap; gap: 12px; justify-content: space-between; align-items: center; font-size: 12px; color: #6E6557; }
.gs-footer__pay { font-family: var(--font-mono); letter-spacing: 0.06em; }
.gs-footer__legal { display: flex; flex-wrap: wrap; gap: 6px 16px; }
.gs-footer__legal a { color: inherit; text-decoration: none; }
.gs-footer__legal a:hover, .gs-footer__legal a:focus-visible { color: var(--text-2); text-decoration: underline; }

/* -------------------------------------------------------------------------
   12. Responsive
   ------------------------------------------------------------------------- */
@media (max-width: 1080px) {
  .gs-nav { display: none; }
}
@media (max-width: 900px) {
  .gs-story__grid { grid-template-columns: 1fr; }
  .gs-story__media { min-height: 240px; order: -1; }
  .gs-footer__top { grid-template-columns: 1fr 1fr; gap: 28px; }
}
@media (max-width: 560px) {
  :root { --pad-x: 18px; }
  .gs-promo { gap: 14px; font-size: 10px; }
  .gs-promo span:nth-child(n+5) { display: none; }
  .gs-header__inner { gap: 12px; padding-left: var(--pad-x); padding-right: var(--pad-x); }
  .gs-header__actions { gap: 6px; }
  .gs-logo__sub { display: none; }
  .gs-cart__total { display: none; }
  .gs-section { padding: 44px var(--pad-x) 16px; }
  .gs-section__title { font-size: 26px; }
  .gs-stats { gap: 18px; flex-wrap: wrap; }
  .gs-footer__top { grid-template-columns: 1fr; }
  .gs-herotoggle__tab { display: none; }
}
/* Theme addition: with the hamburger in the actions row, the search icon and
   the language pill no longer fit on the narrowest phones. Hide both so
   logo + account + cart + hamburger share ~375px with no horizontal overflow
   (search lives on the shop page; language is still switchable in the drawer).
   The lang pill is the FIRST action child, so the old :first-child rule hid it
   instead of the search icon — the search anchor now carries its own class. */
@media (max-width: 420px) {
  .gs-iconbtn--search,
  .gs-header__actions > .gs-langtoggle { display: none; }
  .gs-header__inner { gap: 10px; }
  .gs-header__actions { gap: 5px; }
  .gs-logo { gap: 9px; }
  .gs-logo__name { font-size: 22px; }
  .gs-cart { gap: 8px; padding: 0 7px 0 13px; }
}

/* -------------------------------------------------------------------------
   14. Shop / catalog
   ------------------------------------------------------------------------- */
.gs-shop { max-width: var(--maxw); margin: 0 auto; padding: 40px var(--pad-x) 72px; }
.gs-shop__title { font-family: var(--font-display); font-weight: 700; font-size: clamp(28px, 3.4vw, 38px); letter-spacing: -0.01em; color: var(--text-bright); margin: 6px 0 0; }
.gs-shop__toolbar { display: flex; gap: 12px; margin: 22px 0; flex-wrap: wrap; }
.gs-search { position: relative; flex: 1; min-width: 240px; }
.gs-search svg { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); color: var(--text-dim); pointer-events: none; }
.gs-input, .gs-select { height: 46px; background: var(--surface-2); border: 1px solid var(--hairline-2); border-radius: var(--r-btn); color: var(--text); font-size: 14px; }
.gs-search .gs-input { width: 100%; padding: 0 14px 0 42px; }
.gs-input::placeholder { color: var(--text-dim); }
.gs-input:focus, .gs-select:focus { border-color: rgba(212, 162, 78, 0.55); }
.gs-select {
  padding: 0 38px 0 14px; appearance: none; -webkit-appearance: none; cursor: pointer;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239A8F7E' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 14px center;
}
.gs-shop__body { display: grid; grid-template-columns: 236px 1fr; gap: 22px; align-items: start; }
.gs-facets { position: sticky; top: 86px; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 14px; padding: 18px; display: flex; flex-direction: column; gap: 20px; }
.gs-facets__h { font-family: var(--font-mono); font-size: 10.5px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 10px; }
.gs-chip { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 8px 10px; border: none; background: none; border-radius: 8px; color: var(--control); font-size: 13.5px; text-align: left; transition: background .2s, color .2s; }
.gs-chip:hover { color: var(--text); background: rgba(237,230,216,0.05); }
.gs-chip.is-active { background: rgba(212,162,78,0.12); color: #E7C078; font-weight: 600; }
.gs-chip__count { font-family: var(--font-mono); font-size: 10.5px; color: var(--text-dim); }
.gs-pills { display: flex; gap: 6px; flex-wrap: wrap; }
.gs-pill { padding: 7px 13px; border-radius: var(--r-pill); border: 1px solid var(--hairline-2); background: none; color: var(--control); font-size: 12.5px; font-weight: 600; transition: all .2s; }
.gs-pill:hover { border-color: rgba(212,162,78,0.4); color: var(--text); }
.gs-pill.is-active { background: var(--gold); border-color: var(--gold); color: var(--surface-ink); font-weight: 700; }
.gs-range input[type="range"] { width: 100%; accent-color: var(--gold); cursor: pointer; }
.gs-range__labels { display: flex; justify-content: space-between; font-family: var(--font-mono); font-size: 10.5px; color: var(--text-dim); margin-top: 4px; }
.gs-tags { display: flex; gap: 6px; flex-wrap: wrap; }
.gs-tag { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.06em; color: var(--text-dim); border: 1px solid var(--hairline); border-radius: var(--r-pill); padding: 4px 10px; }
.gs-shop__count { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 14px; }
.gs-empty { text-align: center; padding: 70px 20px; border: 1px dashed var(--hairline-2); border-radius: var(--r-card); }
.gs-empty__t { font-family: var(--font-display); font-size: 22px; font-weight: 600; color: var(--text); margin-bottom: 6px; }
.gs-empty__d { font-size: 14px; color: var(--text-dim); margin-bottom: 18px; }
.gs-card__badge--fresh { background: rgba(123,191,112,0.16); color: #9FD18F; }
.gs-card__media { display: block; }
.gs-card__name { display: block; }
.gs-card__img--ph { display: flex; align-items: center; justify-content: center; background: linear-gradient(160deg, #241D15, #1A1510); }
.gs-card__img--ph span { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); }
.gs-nav__item { display: inline-block; }
@media (max-width: 900px) {
  .gs-shop__body { grid-template-columns: 1fr; }
  .gs-facets { position: static; }
}
/* Theme addition: on narrow phones the search field takes its own row and
   the sort/filter selects split the second so nothing overflows --pad-x. */
@media (max-width: 560px) {
  .gs-shop__toolbar { gap: 10px; }
  .gs-search { flex-basis: 100%; min-width: 0; }
  .gs-shop__toolbar .gs-select { flex: 1 1 auto; min-width: 0; }
}

/* -------------------------------------------------------------------------
   15. Product page
   ------------------------------------------------------------------------- */
.gs-pdp { max-width: var(--maxw); margin: 0 auto; padding: 24px var(--pad-x) 72px; }
.gs-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 13px; color: var(--text-dim); margin-bottom: 24px; }
.gs-crumbs a { color: var(--text-3); transition: color .2s; }
.gs-crumbs a:hover { color: var(--gold); }
.gs-crumbs .current { color: var(--text); }
.gs-pdp__layout { display: grid; grid-template-columns: 1.1fr 1fr; gap: 34px; align-items: start; }
.gs-pdp__gallery { position: sticky; top: 86px; }
.gs-pdp__main { position: relative; aspect-ratio: 4/5; border-radius: var(--r-card); overflow: hidden; border: 1px solid var(--hairline-2); background: var(--surface-2); }
.gs-pdp__main img { width: 100%; height: 100%; object-fit: cover; }
.gs-pdp__main .gs-card__badge { top: 14px; left: 14px; font-size: 11px; }
.gs-pdp__ph { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: linear-gradient(160deg, #241D15, #1A1510); }
.gs-pdp__ph span { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-dim); }
.gs-pdp__thumbs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-top: 10px; }
.gs-pdp__thumb { aspect-ratio: 1/1; border-radius: 10px; overflow: hidden; border: 2px solid transparent; padding: 0; background: var(--surface-2); cursor: pointer; transition: border-color .2s; }
.gs-pdp__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gs-pdp__thumb.is-active, .gs-pdp__thumb:hover { border-color: rgba(212,162,78,0.65); }
.gs-pdp__meta { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 10px; }
.gs-pdp__title { font-family: var(--font-display); font-weight: 800; font-size: clamp(30px, 3.6vw, 40px); line-height: 1.05; letter-spacing: -0.02em; color: var(--text-bright); margin: 0 0 14px; }
.gs-pdp__price { margin-bottom: 16px; }
.gs-pdp__price > span:first-child { font-family: var(--font-mono); font-size: 30px; color: var(--gold); }
.gs-pdp__per { font-size: 14px; color: var(--text-dim); }
.gs-pdp__blurb { font-size: 15.5px; line-height: 1.6; color: var(--text-3); margin: 0 0 22px; }
.gs-pdp__packs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.gs-pdp__pack { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; min-width: 86px; padding: 10px 14px; background: var(--surface); border: 1.5px solid var(--hairline-2); border-radius: 11px; cursor: pointer; transition: all .2s; }
.gs-pdp__pack:hover { border-color: rgba(212,162,78,0.45); }
.gs-pdp__pack.is-active { border-color: var(--gold); background: rgba(212,162,78,0.1); }
.gs-pdp__pack-l { font-weight: 700; font-size: 14px; color: var(--text); }
.gs-pdp__pack-p { font-family: var(--font-mono); font-size: 12px; color: var(--text-dim); }
.gs-pdp__pack.is-active .gs-pdp__pack-p { color: var(--gold-bright); }
.gs-pdp__buyrow { display: flex; gap: 12px; margin-bottom: 20px; }
.gs-stepper { display: flex; align-items: center; background: var(--surface); border: 1px solid var(--hairline-2); border-radius: 11px; overflow: hidden; }
.gs-stepper__btn { width: 46px; height: 54px; background: none; border: none; color: var(--text); font-size: 20px; cursor: pointer; transition: background .15s; }
.gs-stepper__btn:hover { background: rgba(237,230,216,0.06); }
.gs-stepper__val { min-width: 34px; text-align: center; font-family: var(--font-mono); font-size: 15px; color: var(--text); }
.gs-pdp__add { flex: 1; height: 54px; background: var(--gold); border: none; border-radius: 11px; color: var(--surface-ink); font-weight: 700; font-size: 15.5px; cursor: pointer; box-shadow: var(--sh-cta); transition: transform .2s, box-shadow .3s, opacity .2s; }
.gs-pdp__add:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(212,162,78,0.45); }
.gs-pdp__add:disabled { opacity: 0.85; transform: none; cursor: default; }
.gs-pdp__trust { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 24px; }
.gs-pdp__trust-cell { display: flex; align-items: center; gap: 10px; padding: 12px 14px; background: var(--surface-2); border: 1px solid var(--hairline); border-radius: 12px; font-size: 12.5px; font-weight: 600; color: var(--text-2); line-height: 1.35; }
.gs-pdp__trust-cell svg { color: var(--gold); flex-shrink: 0; }
.gs-pdp__trust-cell em { font-style: normal; font-weight: 400; font-size: 11.5px; color: var(--text-dim); }
.gs-acc { border-top: 1px solid var(--hairline); }
.gs-acc:last-child { border-bottom: 1px solid var(--hairline); }
.gs-acc__head { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 15px 2px; background: none; border: none; color: var(--text); font-family: var(--font-display); font-size: 15.5px; font-weight: 600; cursor: pointer; }
.gs-acc__ico { font-size: 18px; color: var(--text-dim); transition: transform .25s var(--ease-out); }
.gs-acc.is-open .gs-acc__ico { transform: rotate(45deg); color: var(--gold); }
.gs-acc__body { padding: 0 2px 16px; font-size: 14.5px; line-height: 1.65; color: var(--text-3); }
/* How to cook (per item) */
.gs-cook { margin-top: 56px; display: grid; grid-template-columns: 1fr 1.15fr; gap: 0; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 18px; overflow: hidden; }
.gs-cook__video { grid-column: 1 / -1; display: grid; gap: 14px; justify-items: center; padding: clamp(18px,2.6vw,30px); background: #0E0C0A; border-bottom: 1px solid var(--hairline); }
.gs-cook__video-head { width: 100%; max-width: 560px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.gs-cook__video-tabs { display: inline-flex; padding: 3px; gap: 3px; background: var(--bg); border: 1px solid var(--hairline-2); border-radius: 999px; }
.gs-cook__video-tab { min-height: 40px; padding: 0 16px; border: 0; border-radius: 999px; background: transparent; color: var(--text-2); font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; cursor: pointer; }
.gs-cook__video-tab[aria-pressed="true"] { background: var(--gold, #D4A24E); color: #141210; font-weight: 700; }
.gs-cook__video-tab:focus-visible { outline: 2px solid var(--gold, #D4A24E); outline-offset: 2px; }
.gs-cook__video-one { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--gold, #D4A24E); }
.gs-cook__player { width: 100%; max-width: 560px; aspect-ratio: 1 / 1; display: block; background: #000; border-radius: 14px; box-shadow: 0 18px 40px rgba(0,0,0,0.45); }
.gs-cook__intro { padding: clamp(24px,3vw,38px); background: linear-gradient(150deg, rgba(140,47,35,0.12), var(--surface-2) 55%); border-right: 1px solid var(--hairline); }
.gs-cook__title { font-family: var(--font-display); font-size: clamp(24px,2.6vw,32px); font-weight: 800; color: var(--text-bright); margin: 8px 0 12px; line-height: 1.1; }
.gs-cook__method { font-size: 15.5px; line-height: 1.6; color: var(--text-2); margin: 0 0 22px; }
.gs-cook__specs { display: flex; flex-wrap: wrap; gap: 10px; }
.gs-cook__spec { display: flex; flex-direction: column; gap: 3px; min-width: 92px; padding: 11px 14px; background: var(--bg); border: 1px solid var(--hairline-2); border-radius: 11px; }
.gs-cook__spec-k { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-dim); }
.gs-cook__spec-v { font-family: var(--font-mono); font-size: 15px; color: var(--gold-bright); }
.gs-cook__steps { padding: clamp(24px,3vw,38px); }
.gs-cook__steps-h { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin: 0 0 14px; }
.gs-cook__steps ol { margin: 0; padding-left: 22px; counter-reset: step; list-style: none; }
.gs-cook__steps li { position: relative; padding: 0 0 16px 8px; font-size: 14.5px; line-height: 1.6; color: var(--text-2); }
.gs-cook__steps li::before { counter-increment: step; content: counter(step); position: absolute; left: -22px; top: -1px; width: 22px; height: 22px; border-radius: 50%; background: rgba(212,162,78,0.14); border: 1px solid rgba(212,162,78,0.4); color: var(--gold-bright); font-family: var(--font-mono); font-size: 11px; display: flex; align-items: center; justify-content: center; }
.gs-cook__tip { margin-top: 8px; padding: 13px 16px; background: rgba(212,162,78,0.07); border: 1px solid rgba(212,162,78,0.22); border-radius: 11px; font-size: 13.5px; line-height: 1.55; color: var(--text-2); }
.gs-cook__tip span { display: block; font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gold-bright); margin-bottom: 5px; }
[dir="rtl"] .gs-cook__intro { border-right: none; border-left: 1px solid var(--hairline); }
[dir="rtl"] .gs-cook__steps ol { padding-left: 0; padding-right: 22px; }
[dir="rtl"] .gs-cook__steps li { padding: 0 8px 16px 0; }
[dir="rtl"] .gs-cook__steps li::before { left: auto; right: -22px; }
@media (max-width: 760px) {
  .gs-cook { grid-template-columns: 1fr; }
  .gs-cook__intro { border-right: none; border-bottom: 1px solid var(--hairline); }
  [dir="rtl"] .gs-cook__intro { border-left: none; }
}

.gs-pdp__related { margin-top: 64px; padding-top: 40px; border-top: 1px solid var(--hairline); }
.gs-pdp__related-h { font-family: var(--font-display); font-weight: 700; font-size: 26px; color: var(--text); margin: 0 0 22px; }
@media (max-width: 900px) {
  .gs-pdp__layout { grid-template-columns: 1fr; gap: 26px; }
  .gs-pdp__gallery { position: static; }
  .gs-pdp__main { aspect-ratio: 1/1; }
}
@media (max-width: 560px) {
  .gs-pdp__buyrow { flex-direction: column; }
  .gs-stepper { justify-content: center; }
  .gs-pdp__trust { grid-template-columns: 1fr; }
}

/* -------------------------------------------------------------------------
   16. Cart & Checkout
   ------------------------------------------------------------------------- */
.gs-cartpg, .gs-copg { max-width: 1100px; margin: 0 auto; padding: 40px var(--pad-x) 72px; }
.gs-cartpg__title, .gs-copg__title { font-family: var(--font-display); font-weight: 700; font-size: clamp(28px, 3.4vw, 36px); color: var(--text-bright); margin: 6px 0 24px; }
.gs-cart-layout, .gs-co-layout { display: grid; grid-template-columns: 1fr 360px; gap: 22px; align-items: start; }
/* Woo inserts this before the form columns after validation fails. */
.gs-co-layout > .woocommerce-NoticeGroup { grid-column: 1 / -1; min-width: 0; order: 0; }
.gs-co-layout > .gs-co-forms, .gs-co-layout > .gs-summary-col { min-width: 0; }
.gs-delivery-calendar { display: grid; gap: 10px; margin-bottom: 14px; }
.gs-slotgrid.gs-slot-region { display: block; }
.gs-delivery-calendar input[type="date"] { width: 100%; min-width: 0; max-width: 100%; padding: 12px; border: 1px solid var(--hairline); border-radius: 9px; background: var(--surface); color: var(--text); font: inherit; color-scheme: dark; }
.gs-delivery-days { display: flex; flex-wrap: wrap; gap: 8px; }
.gs-delivery-date-grid { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:6px; margin:8px 0; }
.gs-delivery-date-grid .gs-slot { display:grid; gap:4px; min-width:0; min-height:48px; padding:8px 4px; font-size:12px; line-height:1.35; text-align:center; white-space:normal; }
.gs-delivery-date-grid .gs-slot span { min-width:0; white-space:normal; overflow-wrap:anywhere; }
.gs-delivery-date-grid small { font-size:10px; }
.gs-delivery-date-grid .gs-slot:disabled, .gs-delivery-days .gs-slot:disabled { opacity:.45; cursor:not-allowed; filter:grayscale(1); }
@media(max-width:600px) { .gs-delivery-date-grid { grid-template-columns:repeat(4,minmax(0,1fr)); } }
.gs-delivery-days .gs-slot { min-height: 42px; padding: 10px 18px; }
.gs-delivery-feedback:empty { display: none; }
.gs-summary-col { position: sticky; top: 86px; display: flex; flex-direction: column; gap: 12px; }

.gs-freebar { background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 12px; padding: 14px 16px; margin-bottom: 14px; }
.gs-freebar__row { display: flex; align-items: center; gap: 10px; font-size: 13.5px; color: var(--text-2); margin-bottom: 10px; }
.gs-freebar__row svg { color: var(--gold); flex-shrink: 0; }
.gs-freebar__row b { color: var(--text); }
.gs-freebar__track { height: 6px; background: var(--bg-promo); border-radius: 99px; overflow: hidden; }
.gs-freebar__fill { height: 100%; background: linear-gradient(90deg, var(--brick), var(--gold)); border-radius: 99px; transition: width .4s var(--ease-out); }

.gs-lines { background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 14px; overflow: hidden; }
.gs-line { display: flex; gap: 16px; padding: 18px; border-bottom: 1px solid rgba(237,230,216,0.07); }
.gs-line:last-child { border-bottom: none; }
.gs-line__img { width: 84px; height: 84px; border-radius: 10px; overflow: hidden; flex-shrink: 0; background: #241D15; }
.gs-line__img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gs-line__ph { display: block; width: 100%; height: 100%; background: linear-gradient(160deg, #241D15, #1A1510); }
.gs-line__body { flex: 1; min-width: 0; }
.gs-line__top { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.gs-line__name { font-family: var(--font-display); font-size: 18px; font-weight: 600; color: var(--text); }
.gs-line__name:hover { color: var(--gold-bright); }
.gs-line__total { font-family: var(--font-mono); font-size: 17px; color: var(--text-bright); }
.gs-line__sub { font-size: 12.5px; color: var(--text-dim); margin-top: 3px; }
/* One item-data entry per line (Source · Freshness · the weight line). */
.gs-line__meta { display: block; }
.gs-line__ctl { display: flex; align-items: center; gap: 14px; margin-top: 12px; }
.gs-line__stepper { display: inline-flex; align-items: center; background: #262019; border-radius: 9px; overflow: hidden; }
.gs-line__stepper button { width: 34px; height: 34px; background: none; border: none; color: var(--text); font-size: 16px; cursor: pointer; }
.gs-line__stepper button:hover { background: rgba(237,230,216,0.07); }
.gs-line__stepper span { min-width: 28px; text-align: center; font-family: var(--font-mono); font-size: 14px; }
.gs-line__remove { display: inline-flex; align-items: center; gap: 6px; background: none; border: none; color: var(--text-dim); font-size: 12.5px; cursor: pointer; transition: color .2s; }
.gs-line__remove:hover { color: #E07A6A; }
.gs-addmore { margin-top: 16px; height: 46px; font-size: 14px; border-radius: 10px; }

.gs-summary { background: var(--surface); border: 1px solid rgba(237,230,216,0.1); border-radius: 14px; padding: 22px; }
.gs-summary__div { height: 1px; background: var(--hairline); margin: 16px 0; }
.gs-summary__row { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; font-size: 14px; color: var(--text-2); padding: 4px 0; }
.gs-summary__row .gs-mono { font-family: var(--font-mono); color: var(--text); }
.gs-summary__row--good, .gs-summary__row--good .gs-mono { color: #9FD18F; }
.gs-summary__free { color: #7BBF70; font-weight: 700; }
.gs-summary__row--total { font-size: 16px; font-weight: 600; color: var(--text); }
.gs-summary__grand { font-size: 24px; color: var(--gold) !important; }
.gs-summary__cta { display: block; width: 100%; text-align: center; margin-top: 14px; padding: 15px; background: var(--gold); border: none; border-radius: 11px; color: var(--surface-ink); font-weight: 700; font-size: 15.5px; cursor: pointer; box-shadow: var(--sh-cta); transition: transform .2s, box-shadow .3s; }
.gs-summary__cta:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(212,162,78,0.45); }
.gs-summary__cta--place { background: var(--brick); color: var(--text-bright); box-shadow: 0 8px 22px rgba(140,47,35,0.35); }
.gs-summary__cta--place:hover { box-shadow: 0 12px 30px rgba(140,47,35,0.5); }
.gs-summary__note { display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 12px; color: var(--text-dim); text-align: center; margin-top: 12px; }

.gs-slotgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.gs-slotgrid--wide { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.gs-slot { padding: 11px 10px; background: var(--bg); border: 1.5px solid var(--hairline-2); border-radius: 10px; color: var(--control); font-family: var(--font-mono); font-size: 11.5px; cursor: pointer; transition: all .2s; white-space: nowrap; }
.gs-slot:hover { border-color: rgba(212,162,78,0.45); color: var(--text); }
.gs-slot.is-active { border-color: var(--gold); background: rgba(212,162,78,0.1); color: var(--gold-bright); font-weight: 700; }

.gs-coupon { display: flex; gap: 8px; }
.gs-coupon .gs-input { flex: 1; min-width: 0; height: 44px; text-transform: uppercase; }
.gs-coupon .gs-input::placeholder { text-transform: none; }
.gs-coupon__btn { padding: 0 18px; height: 44px; background: none; border: 1px solid rgba(212,162,78,0.5); border-radius: 10px; color: var(--gold); font-weight: 600; font-size: 13.5px; cursor: pointer; transition: all .2s; }
.gs-coupon__btn:hover { background: rgba(212,162,78,0.1); }
.gs-coupon__applied { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 11px 14px; background: rgba(123,191,112,0.1); border: 1px solid rgba(123,191,112,0.35); border-radius: 10px; font-size: 13.5px; color: #9FD18F; }
.gs-coupon__applied button { background: none; border: none; color: #9FD18F; font-size: 18px; cursor: pointer; line-height: 1; }
.gs-coupon__err { font-size: 12.5px; color: #E07A6A; margin-top: 8px; }

.gs-wa-card { display: flex; align-items: center; justify-content: center; gap: 9px; background: var(--surface-2); border: 1px solid rgba(123,191,112,0.32); border-radius: 11px; padding: 14px; color: #9FD18F; font-weight: 600; font-size: 13.5px; transition: border-color .2s; }
.gs-wa-card:hover { border-color: rgba(123,191,112,0.6); }

.gs-copg__head { display: flex; align-items: center; gap: 14px; margin-bottom: 24px; }
.gs-copg__head .gs-copg__title { margin: 0; }
.gs-cosec { background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 14px; padding: 22px; }
.gs-cosec + .gs-cosec { margin-top: 14px; }
.gs-cosec__h { display: flex; align-items: center; gap: 8px; font-family: var(--font-display); font-size: 18px; font-weight: 600; color: var(--text); margin: 0 0 16px; }
.gs-cosec__h span { font-family: var(--font-mono); font-size: 13px; color: var(--gold); }
.gs-cogrid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.gs-cogrid .gs-input { width: 100%; padding: 0 14px; background: var(--bg); }
.gs-cogrid .full { grid-column: 1 / -1; }
.gs-pay { display: flex; flex-direction: column; gap: 10px; }
.gs-pay__opt { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; padding: 14px 16px; border-radius: 11px; border: 1.5px solid var(--hairline-2); background: var(--bg); color: var(--text); cursor: pointer; text-align: left; }
.gs-pay__opt.is-active { border-color: var(--gold); background: rgba(212,162,78,0.08); }
.gs-pay__opt.is-disabled { opacity: 0.55; cursor: default; }
.gs-pay__l { display: flex; align-items: center; gap: 12px; }
.gs-pay__l svg { color: var(--text-dim); flex-shrink: 0; }
.gs-pay__opt.is-active .gs-pay__l svg { color: var(--gold); }
.gs-pay__t { display: flex; flex-direction: column; gap: 2px; }
.gs-pay__t b { font-size: 14.5px; }
.gs-pay__t small { font-size: 12px; color: var(--text-dim); font-weight: 400; }
.gs-pay__radio { width: 18px; height: 18px; border-radius: 50%; border: 5px solid var(--gold); background: var(--bg); flex-shrink: 0; }
.gs-pay__soon { font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.1em; color: var(--text-dim); border: 1px solid var(--hairline-2); border-radius: 99px; padding: 3px 8px; }
.gs-pay__opt:not(.is-active) .gs-pay__radio { border-width: 2px; border-color: var(--hairline-3); }
.gs-pay__note { font-size: 12.5px; line-height: 1.55; color: var(--text-dim); background: var(--bg); border: 1px dashed var(--hairline-2); border-radius: 10px; padding: 10px 12px; }
.gs-notes { width: 100%; min-height: 70px; margin-top: 4px; background: var(--bg); border: 1px solid var(--hairline-2); border-radius: 10px; color: var(--text); font-size: 14px; padding: 12px 14px; resize: vertical; }
.gs-notes::placeholder { color: var(--text-dim); }

.gs-sline { display: flex; align-items: center; gap: 12px; padding: 7px 0; }
.gs-sline__img { width: 48px; height: 48px; border-radius: 8px; overflow: hidden; flex-shrink: 0; background: #241D15; }
.gs-sline__img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gs-sline__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.gs-sline__body b { font-size: 13.5px; font-weight: 600; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gs-sline__body small { font-size: 11.5px; color: var(--text-dim); }
.gs-sline__total { font-size: 14px; color: var(--text); }

.gs-points { padding: 12px 14px; background: rgba(212,162,78,0.07); border: 1px solid rgba(212,162,78,0.25); border-radius: 11px; margin-bottom: 14px; font-size: 13px; color: var(--text-2); }
.gs-points__earn b { color: var(--gold-bright); }
.gs-points__redeem { display: flex; align-items: center; gap: 8px; margin-top: 8px; cursor: pointer; color: var(--text); font-weight: 600; }
.gs-points__redeem input { accent-color: var(--gold); width: 15px; height: 15px; }
.gs-points__bal { color: var(--text-dim); font-weight: 400; }

.gs-success { grid-column: 1 / -1; text-align: center; padding: 70px 24px; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 18px; }
.gs-success__badge { width: 64px; height: 64px; margin: 0 auto 18px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: rgba(123,191,112,0.14); border: 1.5px solid rgba(123,191,112,0.5); color: #9FD18F; font-size: 28px; }
.gs-success__t { font-family: var(--font-display); font-size: 32px; font-weight: 800; color: var(--text-bright); margin: 0 0 6px; }
.gs-success__id { color: var(--text-dim); font-size: 14px; margin-bottom: 16px; }
.gs-success__d { font-size: 15px; line-height: 1.7; color: var(--text-2); margin: 0 0 16px; }
.gs-success__pts { display: inline-block; font-size: 13px; color: var(--gold-bright); background: rgba(212,162,78,0.1); border: 1px solid rgba(212,162,78,0.3); border-radius: 99px; padding: 8px 16px; margin-bottom: 26px; }
.gs-success__actions { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; }

@media (max-width: 900px) {
  .gs-cart-layout, .gs-co-layout { grid-template-columns: 1fr; }
  .gs-summary-col { position: static; }
}
/* Theme additions: sub-768 polish for cart/checkout. */
@media (max-width: 700px) {
  .gs-cogrid { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .gs-cartpg, .gs-copg { padding-top: 26px; }
  .gs-copg__head { flex-wrap: wrap; }
  .gs-line { padding: 14px; gap: 12px; }
  .gs-line__img { width: 64px; height: 64px; }
  .gs-line__name { font-size: 16px; }
  .gs-line__top { flex-wrap: wrap; }
  .gs-cosec { padding: 16px; }
}

/* -------------------------------------------------------------------------
   17. Account / Rewards
   ------------------------------------------------------------------------- */
.gs-acct { max-width: 1100px; margin: 0 auto; padding: 40px var(--pad-x) 72px; }
.gs-acct__title { font-family: var(--font-display); font-weight: 700; font-size: clamp(28px, 3.4vw, 36px); color: var(--text-bright); margin: 6px 0 24px; }
.gs-acct__layout { display: grid; grid-template-columns: 220px 1fr; gap: 22px; align-items: start; }
.gs-acct__nav { position: sticky; top: 86px; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 14px; padding: 10px; display: flex; flex-direction: column; }
.gs-acct__nav a { display: flex; align-items: center; gap: 9px; padding: 11px 14px; border-radius: 9px; font-size: 14px; font-weight: 500; color: var(--control); transition: background .2s, color .2s; }
.gs-acct__nav a:hover { color: var(--text); background: rgba(237,230,216,0.05); }
.gs-acct__nav a.is-active { font-weight: 600; color: #E7C078; background: rgba(212,162,78,0.12); }
.gs-acct__navdiv { height: 1px; background: var(--hairline); margin: 8px 12px; }
.gs-acct__signout { color: var(--text-dim) !important; }
.gs-acct__h2 { font-family: var(--font-display); font-size: 18px; font-weight: 600; color: var(--text); margin: 24px 0 14px; }

.gs-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px; margin-bottom: 22px; }
.gs-statcard { background: var(--surface); border: 1px solid rgba(237,230,216,0.1); border-radius: 14px; padding: 18px; }
.gs-statcard__l { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 8px; }
.gs-statcard__v { font-family: var(--font-display); font-size: 30px; font-weight: 700; color: var(--text); line-height: 1; }
.gs-statcard__v--gold { color: var(--gold); }

.gs-orders { background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 14px; overflow: hidden; }
.gs-orders__head { font-family: var(--font-display); font-size: 18px; font-weight: 600; color: var(--text); padding: 18px 20px; border-bottom: 1px solid rgba(237,230,216,0.08); }
.gs-order { display: flex; align-items: center; gap: 16px; padding: 18px 20px; border-bottom: 1px solid rgba(237,230,216,0.07); flex-wrap: wrap; }
.gs-order:last-child { border-bottom: none; }
.gs-order__id { min-width: 120px; display: flex; flex-direction: column; gap: 2px; }
.gs-order__id .gs-mono { font-family: var(--font-mono); font-size: 13px; color: var(--text); }
.gs-order__id small { font-size: 12px; color: var(--text-dim); }
.gs-order__items { flex: 1; min-width: 180px; font-size: 13.5px; color: var(--text-3); display: flex; flex-direction: column; gap: 2px; }
.gs-order__items small { font-size: 11.5px; color: var(--text-dim); }
.gs-status { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; border-radius: 99px; padding: 4px 10px; }
.gs-status--ok { color: #7BBF70; background: rgba(123,191,112,0.12); }
.gs-status--new { color: var(--gold-bright); background: rgba(212,162,78,0.12); }
.gs-order__total { font-family: var(--font-mono); font-size: 16px; color: var(--text-bright); min-width: 74px; text-align: right; }
.gs-reorder { background: #262019; border: 1px solid rgba(212,162,78,0.4); border-radius: 9px; color: var(--gold); font-weight: 600; font-size: 13px; padding: 9px 16px; cursor: pointer; transition: all .2s; }
.gs-reorder:hover { background: rgba(212,162,78,0.15); }

.gs-addr-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.gs-addr { background: var(--surface); border: 1px solid rgba(237,230,216,0.1); border-radius: 14px; padding: 18px; }
.gs-addr__top { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.gs-addr__label { font-family: var(--font-display); font-size: 16px; font-weight: 600; color: var(--text); }
.gs-addr__def { font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gold); border: 1px solid rgba(212,162,78,0.45); border-radius: 99px; padding: 3px 8px; }
.gs-addr__line { font-size: 13.5px; line-height: 1.5; color: #A89D8B; }

.gs-rewards-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.gs-reward-card { background: var(--surface); border: 1px solid rgba(237,230,216,0.1); border-radius: 14px; padding: 22px; }
.gs-reward-card--tier { background: linear-gradient(140deg, rgba(212,162,78,0.14), var(--surface) 60%); border-color: rgba(212,162,78,0.35); }
.gs-reward-card--refer { grid-column: 1 / -1; }
.gs-reward-card__eyebrow { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 10px; }
.gs-reward-card__big { font-family: var(--font-display); font-size: 34px; font-weight: 800; color: var(--gold); line-height: 1; margin-bottom: 8px; }
.gs-reward-card__big small { font-size: 16px; font-weight: 600; color: var(--text-dim); }
.gs-reward-card__sub { font-size: 13.5px; line-height: 1.55; color: var(--text-2); }
.gs-reward-card__sub b { color: var(--gold-bright); }
.gs-reward-card__perks { margin: 14px 0 0; padding: 0 0 0 18px; font-size: 13.5px; line-height: 1.9; color: var(--text-2); }
.gs-reward-bar { height: 6px; background: var(--bg-promo); border-radius: 99px; overflow: hidden; margin: 12px 0 14px; }
.gs-reward-bar div { height: 100%; background: linear-gradient(90deg, var(--brick), var(--gold)); border-radius: 99px; }
.gs-reward-hist__row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 0; border-top: 1px solid var(--hairline); font-size: 13px; color: var(--text-2); }
.gs-reward-hist__row span:first-child { display: flex; flex-direction: column; gap: 1px; }
.gs-reward-hist__row small { font-size: 11px; color: var(--text-dim); }
.gs-reward-hist__row .is-pos { color: #9FD18F; }
.gs-reward-hist__row .is-neg { color: #E07A6A; }
.gs-refer-code { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: var(--bg); border: 1px dashed rgba(212,162,78,0.5); border-radius: 10px; padding: 12px 14px; margin: 14px 0 10px; }
.gs-refer-code .gs-mono { font-family: var(--font-mono); font-size: 15px; color: var(--gold-bright); letter-spacing: 0.06em; }
.gs-refer-code button { background: none; border: 1px solid var(--hairline-2); border-radius: 8px; color: var(--text-2); font-size: 12.5px; font-weight: 600; padding: 7px 12px; cursor: pointer; transition: all .2s; }
.gs-refer-code button:hover { color: var(--text); border-color: var(--gold); }

@media (max-width: 900px) {
  .gs-acct__layout { grid-template-columns: 1fr; }
  .gs-acct__nav { position: static; flex-direction: row; flex-wrap: wrap; }
  .gs-acct__navdiv { display: none; }
  .gs-rewards-grid, .gs-addr-grid { grid-template-columns: 1fr; }
}

/* -------------------------------------------------------------------------
   19. Recipes hub
   ------------------------------------------------------------------------- */
.gs-recipespg { max-width: var(--maxw); margin: 0 auto; padding: 40px var(--pad-x) 72px; }
.gs-recipes-hero { max-width: 720px; margin-bottom: 28px; }
.gs-recipes-hero__title { font-family: var(--font-display); font-weight: 800; font-size: clamp(34px, 5vw, 60px); line-height: 1.0; letter-spacing: -0.03em; color: var(--text-bright); margin: 12px 0 16px; }
.gs-rintro { font-size: 15px; line-height: 1.6; color: var(--text-3); max-width: 560px; margin: 12px 0 0; }
.gs-recipes-bar { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 42px 0 20px; }
.gs-recipes-bar__h { font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--text); margin: 0; }
.gs-recipes-bar .gs-rchips { margin: 0; }

.gs-rfeat { display: grid; grid-template-columns: 1.15fr 1fr; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.1); border-radius: 18px; overflow: hidden; transition: border-color .35s, box-shadow .35s; }
.gs-rfeat:hover { border-color: rgba(212,162,78,0.5); box-shadow: var(--sh-card-hover); }
.gs-rfeat__media { position: relative; min-height: 320px; overflow: hidden; }
.gs-rfeat__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .65s var(--ease-out); }
.gs-rfeat:hover .gs-rfeat__media img { transform: scale(1.05); }
.gs-rfeat__tag { position: absolute; top: 16px; left: 16px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--surface-ink); background: var(--gold); padding: 5px 12px; border-radius: 99px; }
.gs-rfeat__body { padding: clamp(26px, 3.5vw, 44px); display: flex; flex-direction: column; justify-content: center; }
.gs-rfeat__title { font-family: var(--font-display); font-size: clamp(26px, 3vw, 40px); font-weight: 800; letter-spacing: -0.02em; line-height: 1.05; color: var(--text-bright); margin: 10px 0 14px; }
.gs-rfeat__excerpt { font-size: 16px; line-height: 1.6; color: var(--text-3); margin: 0 0 24px; }
.gs-rfeat__cta { align-self: flex-start; height: 52px; padding: 0 12px 0 24px; }
[dir="rtl"] .gs-rfeat__tag { left: auto; right: 16px; }
@media (max-width: 760px) { .gs-rfeat { grid-template-columns: 1fr; } .gs-rfeat__media { min-height: 220px; } }
.gs-rchips { display: flex; gap: 6px; flex-wrap: wrap; margin: 22px 0 26px; }
.gs-rgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 18px; }
.gs-rcard { background: var(--surface); border: 1px solid rgba(237,230,216,0.09); border-radius: var(--r-card); overflow: hidden; cursor: pointer; transition: transform .4s var(--ease-out), border-color .35s, box-shadow .35s; }
.gs-rcard:hover { transform: translateY(-8px); border-color: rgba(212,162,78,0.5); box-shadow: var(--sh-card-hover); }
.gs-rcard__media { position: relative; aspect-ratio: 16/10; overflow: hidden; }
.gs-rcard__media img { width: 100%; height: 100%; object-fit: cover; transition: transform .65s var(--ease-out); }
.gs-rcard:hover .gs-rcard__media img { transform: scale(1.07); }
.gs-rcard__time { position: absolute; top: 12px; left: 12px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.08em; padding: 5px 10px; border-radius: 99px; background: rgba(20,16,12,0.75); color: var(--gold-bright); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); }
.gs-rcard__body { padding: 16px 16px 18px; display: flex; flex-direction: column; gap: 6px; }
.gs-rcard__title { font-family: var(--font-display); font-size: 19px; font-weight: 700; color: var(--text); margin: 0; line-height: 1.25; }
.gs-rcard__excerpt { font-size: 13.5px; line-height: 1.55; color: var(--text-3); margin: 0 0 6px; }
.gs-rback { background: none; border: none; color: var(--gold); font-weight: 600; font-size: 14px; cursor: pointer; margin-bottom: 18px; }
.gs-rdetail { display: grid; grid-template-columns: 1fr 1.1fr; gap: 0; background: var(--surface-2); border: 1px solid rgba(237,230,216,0.09); border-radius: 18px; overflow: hidden; }
.gs-rdetail__media { position: relative; min-height: 340px; }
.gs-rdetail__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gs-rdetail__film { position: absolute; left: 14px; right: 14px; bottom: 14px; font-size: 12px; line-height: 1.5; color: var(--text-2); background: rgba(14,12,10,0.82); border: 1px dashed rgba(212,162,78,0.4); border-radius: 10px; padding: 9px 12px; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.gs-rdetail__body { padding: clamp(22px, 3vw, 36px); }
.gs-rdetail__title { font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 34px); font-weight: 800; color: var(--text-bright); margin: 6px 0 12px; line-height: 1.1; }
.gs-rdetail__meta { display: flex; flex-wrap: wrap; gap: 14px; font-size: 12.5px; color: var(--text-dim); margin-bottom: 14px; }
.gs-rdetail__meta b { color: var(--gold-bright); font-family: var(--font-mono); font-weight: 700; }
.gs-rdetail__intro { font-size: 14.5px; line-height: 1.6; color: var(--text-2); margin: 0 0 18px; }
.gs-rdetail__cols { display: grid; grid-template-columns: 1fr 1.2fr; gap: 20px; margin-bottom: 22px; }
.gs-rdetail__cols h4 { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin: 0 0 10px; }
.gs-rdetail__cols ul, .gs-rdetail__cols ol { margin: 0; padding-left: 18px; font-size: 13.5px; line-height: 1.7; color: var(--text-2); }
.gs-rdetail__cols li { margin-bottom: 7px; }
.gs-rdetail__shop { height: 52px; padding: 0 10px 0 22px; font-size: 14.5px; }
@media (max-width: 900px) {
  .gs-rdetail { grid-template-columns: 1fr; }
  .gs-rdetail__cols { grid-template-columns: 1fr; }
}

/* -------------------------------------------------------------------------
   20. Auth (sign in / create account)
   ------------------------------------------------------------------------- */
.gs-auth { max-width: 560px; margin: 0 auto; padding: 48px var(--pad-x) 80px; }
.gs-auth__card { background: var(--surface-2); border: 1px solid rgba(237,230,216,0.1); border-radius: 18px; padding: clamp(22px, 4vw, 34px); }
.gs-auth__tabs { display: flex; gap: 4px; background: var(--bg); border-radius: 12px; padding: 4px; margin-bottom: 22px; }
.gs-auth__tab { flex: 1; padding: 11px; background: none; border: none; border-radius: 9px; color: var(--text-dim); font-family: var(--font-display); font-weight: 600; font-size: 14.5px; cursor: pointer; transition: all .2s; }
.gs-auth__tab.is-active { background: var(--gold); color: var(--surface-ink); font-weight: 700; }
.gs-auth__panel { display: none; }
.gs-auth__panel.is-active { display: block; }
.gs-auth__grid { display: grid; gap: 12px; }
.gs-auth__grid .gs-input { width: 100%; padding: 0 14px; background: var(--bg); }
.gs-auth__cta { width: 100%; margin-top: 6px; padding: 15px; background: var(--gold); border: none; border-radius: 11px; color: var(--surface-ink); font-weight: 700; font-size: 15.5px; cursor: pointer; box-shadow: var(--sh-cta); transition: transform .2s, box-shadow .3s; }
.gs-auth__cta:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(212,162,78,0.45); }
.gs-auth__hint { font-size: 12.5px; color: var(--text-dim); text-align: center; margin-top: 14px; line-height: 1.55; }
.gs-auth__err { font-size: 13px; color: #E07A6A; margin-top: 10px; display: none; }
.gs-auth__err.is-on { display: block; }
.gs-auth__step-eyebrow { margin-bottom: 12px; }
.gs-paypref { display: flex; gap: 8px; flex-wrap: wrap; }
.cf-turnstile { margin: 2px 0; min-height: 65px; }

/* -------------------------------------------------------------------------
   21. Language toggle + Arabic RTL
   ------------------------------------------------------------------------- */
.gs-langtoggle {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 42px; height: 42px; padding: 0 12px;
  background: none; border: 1px solid var(--hairline-3); border-radius: var(--r-pill);
  color: #CFC4B2; font-family: var(--font-mono); font-size: 13px; font-weight: 700;
  cursor: pointer; transition: all .28s var(--ease-spring);
}
.gs-langtoggle:hover { background: var(--text); color: var(--surface-ink); border-color: var(--text); transform: translateY(-2px); }

/* Arabic: swap the type system to Tajawal via the design tokens; keep mono
   (prices, weights) Latin so numbers never reorder. */
.gs-rtl {
  --font-display: 'Tajawal', 'Bricolage Grotesque', system-ui, sans-serif;
  --font-body: 'Tajawal', 'Hanken Grotesk', system-ui, sans-serif;
}
.gs-rtl body, .gs-rtl { font-family: var(--font-body); }
[dir="rtl"] .gs-h1, [dir="rtl"] .gs-shop__title, [dir="rtl"] .gs-pdp__title { letter-spacing: 0; }

/* Keep numeric / Latin runs left-to-right inside RTL flow */
[dir="rtl"] .gs-mono, [dir="rtl"] .gs-cart__total, [dir="rtl"] .gs-card__price,
[dir="rtl"] .gs-pdp__price > span:first-child, [dir="rtl"] .gs-stat__num,
[dir="rtl"] .gs-order__total, [dir="rtl"] .gs-line__total, [dir="rtl"] .gs-summary__grand,
[dir="rtl"] .gs-refer-code .gs-mono { direction: ltr; unicode-bidi: isolate; }

/* Decorative absolutely-positioned elements that don't auto-mirror with dir */
[dir="rtl"] .gs-search svg { left: auto; right: 15px; }
[dir="rtl"] .gs-search .gs-input { padding: 0 42px 0 14px; }
[dir="rtl"] .gs-select { padding: 0 14px 0 38px; background-position: left 14px center; }
[dir="rtl"] .gs-card__badge { left: auto; right: 12px; }
[dir="rtl"] .gs-pdp__main .gs-card__badge { left: auto; right: 14px; }
[dir="rtl"] .gs-rcard__time { left: auto; right: 12px; }
[dir="rtl"] .gs-freebar__fill, [dir="rtl"] .gs-reward-bar div { background: linear-gradient(270deg, var(--brick), var(--gold)); }
[dir="rtl"] .gs-cosec__h span, [dir="rtl"] .gs-acct__nav a svg { transform: scaleX(-1); }
[dir="rtl"] .gs-nav { margin-left: 0; margin-right: 14px; }

/* -------------------------------------------------------------------------
   22. PWA install banner
   ------------------------------------------------------------------------- */
.gs-install {
  position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 200;
  max-width: 460px; margin: 0 auto;
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  background: rgba(26,21,16,0.96); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(212,162,78,0.35); border-radius: 14px; padding: 13px 14px 13px 18px;
  box-shadow: 0 20px 50px rgba(0,0,0,0.5);
  transform: translateY(140%); opacity: 0; transition: transform .4s var(--ease-out), opacity .3s;
}
.gs-install.is-in { transform: translateY(0); opacity: 1; }
.gs-install__txt { display: flex; flex-direction: column; gap: 2px; }
.gs-install__txt b { font-family: var(--font-display); font-size: 14.5px; font-weight: 700; color: var(--text-bright); }
.gs-install__txt span { font-size: 12px; color: var(--text-dim); }
.gs-install__act { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.gs-install__go { background: var(--gold); border: none; border-radius: 9px; color: var(--surface-ink); font-weight: 700; font-size: 13.5px; padding: 10px 16px; cursor: pointer; }
.gs-install__x { background: none; border: none; color: var(--text-dim); font-size: 22px; line-height: 1; cursor: pointer; padding: 0 6px; }
[dir="rtl"] .gs-install { flex-direction: row-reverse; }
/* Wide screens: a small card in the bottom-left corner, clear of the
   WhatsApp button (bottom-right in both languages); and it steps aside
   whenever the hero is back on screen. */
@media (min-width: 861px) {
  .gs-install { left: 20px; right: auto; margin: 0; max-width: 420px; }
}
body.gs-hero-in-view .gs-install.is-in { opacity: 0; transform: translateY(140%); pointer-events: none; }

/* -------------------------------------------------------------------------
   23. Landing copy sections — manifesto / doneness / quotes
   ------------------------------------------------------------------------- */
.gs-manifesto { border-top: 1px solid var(--hairline); border-bottom: 1px solid var(--hairline); background: radial-gradient(120% 150% at 50% 0%, rgba(140,47,35,0.16), transparent 60%), var(--bg-smoke); }
.gs-manifesto__inner { max-width: 1000px; margin: 0 auto; padding: clamp(48px,7vw,72px) var(--pad-x); text-align: center; }
.gs-manifesto__line { font-family: var(--font-display); font-weight: 800; font-size: clamp(28px,4.6vw,52px); line-height: 1.08; letter-spacing: -0.02em; color: var(--text-bright); margin: 16px 0 0; }
.gs-manifesto__line em { font-style: italic; color: var(--gold); }
.gs-manifesto__line span { display: block; color: var(--gold); margin-top: 4px; }
.gs-manifesto__sub { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); margin-top: 22px; }

.gs-doneness .gs-section__head { align-items: flex-end; }
.gs-done__legend { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-dim); white-space: nowrap; }
.gs-done-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px,1fr)); gap: 10px; align-items: stretch; }
@media (min-width: 1000px) { .gs-done-grid { grid-template-columns: repeat(7, 1fr); } }
.gs-done { display: flex; flex-direction: column; gap: 5px; padding: 20px 18px; background: var(--surface-2); border: 1px solid var(--hairline); border-radius: 14px; position: relative; }
.gs-done--pick { border-color: rgba(212,162,78,0.5); background: linear-gradient(160deg, rgba(212,162,78,0.12), var(--surface-2) 60%); }
.gs-done--pick::after { content: 'Our pick'; position: absolute; top: 14px; right: 14px; font-family: var(--font-mono); font-size: 8.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--surface-ink); background: var(--gold); padding: 3px 8px; border-radius: 99px; }
.gs-done__temp { font-family: var(--font-mono); font-size: 15px; color: var(--gold-bright); }
.gs-done__name { font-family: var(--font-display); font-size: 18px; font-weight: 700; color: var(--text); }
.gs-done__note { font-size: 12.5px; line-height: 1.45; color: var(--text-dim); }
.gs-done--joke { border-style: dashed; border-color: rgba(140,47,35,0.45); background: rgba(140,47,35,0.05); }
.gs-done--joke .gs-done__temp { color: #C77461; }
.gs-done--joke .gs-done__name { color: var(--text-3); }
.gs-done__foot { margin-top: 16px; font-size: 13.5px; color: var(--text-3); }
[dir="rtl"] .gs-done--pick::after { right: auto; left: 14px; }

.gs-quote-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(255px,1fr)); gap: 14px; }
.gs-quote { margin: 0; padding: 26px 24px 22px; background: var(--surface); border: 1px solid var(--hairline); border-radius: 16px; position: relative; overflow: hidden; }
.gs-quote::before { content: '\201C'; position: absolute; top: 2px; left: 16px; font-family: var(--font-display); font-size: 72px; line-height: 1; color: rgba(212,162,78,0.16); pointer-events: none; }
.gs-quote p { position: relative; font-family: var(--font-display); font-size: 18px; font-weight: 500; line-height: 1.35; color: var(--text-bright); margin: 0 0 14px; }
.gs-quote cite { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--gold); font-style: normal; }
[dir="rtl"] .gs-quote::before { left: auto; right: 16px; }

/* -------------------------------------------------------------------------
   24. House rules + product promise (more personality)
   ------------------------------------------------------------------------- */
.gs-rules__list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-card); overflow: hidden; }
.gs-rules__list li { display: flex; gap: 16px; align-items: flex-start; padding: 22px 24px; background: var(--surface-2); }
.gs-rules__list li:last-child:nth-child(odd) { grid-column: 1 / -1; }
.gs-rules__n { font-family: var(--font-mono); font-size: 13px; color: var(--gold); padding-top: 2px; flex-shrink: 0; }
.gs-rules__list p { margin: 0; font-size: 15px; line-height: 1.5; color: var(--text-2); }
.gs-rules__list strong { color: var(--text-bright); font-weight: 700; }
@media (max-width: 640px) { .gs-rules__list { grid-template-columns: 1fr; } }

.gs-promise { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 20px; }
.gs-promise__item { padding: 16px 18px; background: var(--surface-2); border: 1px solid var(--hairline); border-radius: 12px; font-size: 13px; line-height: 1.5; color: var(--text-dim); }
.gs-promise__item b { display: block; font-family: var(--font-display); font-size: 14.5px; color: var(--gold-bright); margin-bottom: 3px; }
@media (max-width: 700px) { .gs-promise { grid-template-columns: 1fr; } }

/* -------------------------------------------------------------------------
   25. Admin (backend simulation) + closed delivery slots
   ------------------------------------------------------------------------- */
.gs-admin { max-width: 720px; margin: 0 auto; padding: 34px 24px 90px; }
.gs-admin__bar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 20px; border-bottom: 1px solid var(--hairline); margin-bottom: 28px; }
.gs-admin__badge { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--gold); border: 1px solid rgba(212,162,78,0.4); border-radius: 99px; padding: 5px 11px; }
.gs-admin__card { background: var(--surface-2); border: 1px solid var(--hairline); border-radius: 16px; padding: 26px; }
.gs-admin__h { font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--text-bright); margin: 0 0 6px; }
.gs-admin__sub { font-size: 13.5px; line-height: 1.55; color: var(--text-dim); margin: 0 0 18px; }
.gs-slotrow { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 0; border-top: 1px solid var(--hairline); }
.gs-slotrow__l { display: flex; flex-direction: column; gap: 4px; }
.gs-slotrow__label { font-size: 15px; font-weight: 600; color: var(--text); }
.gs-slotrow__status { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; }
.gs-slotrow__status.is-open { color: #7BBF70; }
.gs-slotrow__status.is-closed { color: var(--text-dim); }
.gs-admin__actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 22px; }
.gs-admin__note { font-size: 12.5px; line-height: 1.65; color: var(--text-dim); margin-top: 22px; padding: 15px 16px; background: var(--bg); border: 1px solid var(--hairline); border-radius: 10px; }
.gs-admin__note code { font-family: var(--font-mono); font-size: 11.5px; color: var(--gold-bright); }

.gs-loyfield { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; }
.gs-loyfield input { width: 92px; height: 38px; text-align: right; background: var(--bg); border: 1px solid var(--hairline-2); border-radius: 8px; color: var(--text); font-family: var(--font-mono); font-size: 14px; padding: 0 10px; }
.gs-loyfield input:focus { border-color: rgba(212,162,78,0.55); }
.gs-loyfield__suf { font-family: var(--font-mono); font-size: 11px; color: var(--text-dim); min-width: 22px; }
.gs-admin__saved { color: #7BBF70; font-size: 13px; align-self: center; font-weight: 600; }

/* Toggle switch */
.gs-toggle { position: relative; display: inline-block; width: 46px; height: 26px; flex-shrink: 0; }
.gs-toggle input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.gs-toggle__track { position: absolute; inset: 0; background: #3a322a; border-radius: 99px; transition: background .2s; pointer-events: none; }
.gs-toggle__track::before { content: ""; position: absolute; width: 20px; height: 20px; left: 3px; top: 3px; background: #cfc4b2; border-radius: 50%; transition: transform .2s, background .2s; }
.gs-toggle input:checked + .gs-toggle__track { background: var(--gold); }
.gs-toggle input:checked + .gs-toggle__track::before { transform: translateX(20px); background: var(--surface-ink); }

/* Closed slot state on storefront cart/checkout */
.gs-slot.is-closed { opacity: 0.5; cursor: not-allowed; }
.gs-slot.is-closed > :first-child, .gs-slot.is-closed { text-decoration: none; }
.gs-slot__x { display: block; font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.1em; text-transform: uppercase; color: #C77461; margin-top: 3px; }
.gs-slot__none { grid-column: 1 / -1; font-size: 13px; line-height: 1.5; color: #D98B7B; padding: 11px 13px; background: rgba(140,47,35,0.09); border: 1px solid rgba(140,47,35,0.32); border-radius: 10px; }
.gs-summary__cta:disabled, .gs-summary__cta.is-disabled { opacity: 0.5; cursor: not-allowed; transform: none !important; box-shadow: none !important; }

.gs-houserule { max-width: var(--maxw); margin: 0 auto; padding: 15px var(--pad-x); display: flex; align-items: center; justify-content: center; gap: 12px; flex-wrap: wrap; text-align: center; border-top: 1px solid var(--hairline); font-size: 13px; color: var(--text-3); }
.gs-houserule__label { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--gold); white-space: nowrap; }
.gs-houserule__text { font-style: italic; }

.gs-cowelcome { display: block; padding: 12px 16px; margin-bottom: 14px; background: rgba(212,162,78,0.1); border: 1px solid rgba(212,162,78,0.3); border-radius: 11px; font-size: 13.5px; line-height: 1.5; color: var(--text-2); }
.gs-cowelcome b { color: var(--gold-bright); }


/* -------------------------------------------------------------------------
   13. Reduced motion
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; }
  .gs-herotoggle__prog.is-running::after { animation: none; transform: scaleX(1); }
}

/* ==========================================================================
   WordPress / WooCommerce integration layer
   Appended to the ported design system. Maps Woo's default notice, form and
   pagination markup onto the Grillsons palette + tokens above. The prototype
   component classes (.gs-*) are untouched; this only tames Woo defaults.
   ========================================================================== */

/* Screen-reader-only helper (WP core expects this class) */
.screen-reader-text {
  border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%);
  height: 1px; width: 1px; margin: -1px; overflow: hidden; padding: 0;
  position: absolute; word-wrap: normal !important;
}

/* Theme main wrapper — keeps Woo pages inside the site gutter/rhythm */
.gs-main { display: block; }
.gs-shell {
  max-width: var(--maxw); margin: 0 auto; padding: 40px var(--pad-x) 72px;
}

/* WooCommerce notices (success / info / error) */
.woocommerce-message,
.woocommerce-info,
.woocommerce-error,
.woocommerce-noreviews,
.wc-block-components-notice-banner {
  list-style: none;
  margin: 0 0 22px; padding: 15px 18px;
  border: 1px solid var(--hairline-2); border-left-width: 3px;
  border-radius: var(--r-btn);
  background: var(--surface); color: var(--text);
  font-size: 14px; line-height: 1.5;
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px;
}
.woocommerce-message { border-left-color: var(--green); }
.woocommerce-info { border-left-color: var(--gold); }
.woocommerce-error { border-left-color: var(--brick); }
.woocommerce-error li { list-style: none; }
.woocommerce-message .button,
.woocommerce-info .button {
  margin-left: auto;
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--gold); color: var(--surface-ink);
  border: none; border-radius: var(--r-btn);
  padding: 9px 16px; font-weight: 700; font-size: 13px;
  text-decoration: none; cursor: pointer;
}

/* WooCommerce forms — inputs, selects, textareas */
.woocommerce form .form-row,
.woocommerce-page form .form-row { margin: 0 0 16px; }
.woocommerce form .form-row label,
.woocommerce-page form .form-row label {
  display: block; margin-bottom: 6px;
  font-family: var(--font-mono); font-size: 11px;
  letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-3);
}
.woocommerce input.input-text,
.woocommerce textarea,
.woocommerce select,
.woocommerce-page input.input-text,
.woocommerce-page textarea,
.woocommerce-page select,
.gs-input {
  width: 100%; background: var(--surface-2); color: var(--text);
  border: 1px solid var(--hairline-2); border-radius: var(--r-btn);
  padding: 12px 14px; font-family: var(--font-body); font-size: 15px;
  transition: border-color .2s;
}
.woocommerce input.input-text:focus,
.woocommerce textarea:focus,
.woocommerce select:focus,
.woocommerce-page input.input-text:focus {
  border-color: var(--gold);
}
/* Pointer focus only — the keyboard ring must survive on checkout fields. */
.woocommerce input.input-text:focus:not(:focus-visible),
.woocommerce textarea:focus:not(:focus-visible),
.woocommerce select:focus:not(:focus-visible),
.woocommerce-page input.input-text:focus:not(:focus-visible) {
  outline: none;
}

/* WooCommerce generic buttons → gold CTA */
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit,
.woocommerce .button.alt,
.wc-block-components-button {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  background: var(--gold); color: var(--surface-ink) !important;
  border: none; border-radius: var(--r-btn);
  padding: 12px 22px; font-family: var(--font-body); font-weight: 700;
  font-size: 15px; line-height: 1; cursor: pointer; text-decoration: none;
  box-shadow: var(--sh-cta); transition: transform .2s, box-shadow .3s;
}
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce .button.alt:hover { transform: translateY(-2px); box-shadow: 0 14px 38px rgba(212,162,78,0.42); }
.woocommerce a.button.gs-btn--outline,
.woocommerce button.gs-btn--outline {
  background: transparent; color: var(--text) !important;
  border: 1px solid var(--hairline-3); box-shadow: none;
}

/* Breadcrumb (Woo) mapped onto .gs-crumbs look */
.woocommerce-breadcrumb {
  font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--text-dim); margin: 0 0 22px;
}
.woocommerce-breadcrumb a { color: var(--text-3); text-decoration: none; }
.woocommerce-breadcrumb a:hover { color: var(--gold); }

/* Pagination */
.woocommerce nav.woocommerce-pagination ul { border: none; display: flex; gap: 8px; justify-content: center; margin: 40px 0 0; }
.woocommerce nav.woocommerce-pagination ul li { border: none; }
.woocommerce nav.woocommerce-pagination ul li a,
.woocommerce nav.woocommerce-pagination ul li span {
  border: 1px solid var(--hairline-2); border-radius: var(--r-btn);
  padding: 9px 14px; color: var(--text-2); background: var(--surface-2);
}
.woocommerce nav.woocommerce-pagination ul li span.current { background: var(--gold); color: var(--surface-ink); border-color: var(--gold); }

/* Quantity input */
.woocommerce .quantity .qty {
  width: 72px; text-align: center; background: var(--surface-2);
  border: 1px solid var(--hairline-2); border-radius: var(--r-btn);
  color: var(--text); padding: 10px 8px;
}

/* Hide Woo's default star-rating noise on a dark theme where unstyled */
.woocommerce .star-rating { color: var(--gold); }

/* ------------------------------------------------------------------ *
 * Single product (PDP) — skin the NATIVE WooCommerce summary so the
 * default title / price / variations / quantity / add-to-cart markup
 * reads like the prototype's .gs-pdp panel. Keeps live variation
 * pricing and stock handling intact (no custom form).
 * ------------------------------------------------------------------ */

/* Panel column = the second cell of .gs-pdp__layout. */
.gs-pdp__panel { min-width: 0; }
.gs-pdp__panel > .price,
.gs-pdp__panel .woocommerce-product-details__short-description { margin: 0; }

/* Title (woocommerce_template_single_title) → .gs-pdp__title look. */
.gs-pdp__panel .product_title {
  font-family: var(--font-display); font-weight: 800;
  font-size: clamp(30px, 3.6vw, 40px); line-height: 1.05;
  letter-spacing: -0.02em; color: var(--text-bright); margin: 0 0 14px;
}

/* Price (single + variation) → .gs-pdp__price gold mono. */
.gs-pdp__panel > .price,
.gs-pdp__panel .woocommerce-variation-price { margin: 0 0 16px; }
.gs-pdp__panel .price .woocommerce-Price-amount,
.gs-pdp__panel .woocommerce-variation-price .woocommerce-Price-amount {
  font-family: var(--font-mono); font-size: 30px; color: var(--gold);
}
.gs-pdp__panel .price del { opacity: .5; font-size: 20px; margin-right: 8px; }
.gs-pdp__panel .price ins { text-decoration: none; }
.gs-pdp__panel .price .woocommerce-price-suffix {
  font-family: var(--font-body); font-size: 14px; color: var(--text-dim);
}

/* Short description → .gs-pdp__blurb. */
.gs-pdp__panel .woocommerce-product-details__short-description {
  font-size: 15.5px; line-height: 1.6; color: var(--text-3); margin: 0 0 22px;
}
.gs-pdp__panel .woocommerce-product-details__short-description p { margin: 0 0 10px; }

/* Variations table → stacked pack-style selectors. */
.gs-pdp__panel .variations { width: 100%; margin: 0 0 18px; border-collapse: collapse; }
.gs-pdp__panel .variations tr { display: block; margin-bottom: 12px; }
.gs-pdp__panel .variations td,
.gs-pdp__panel .variations th { display: block; padding: 0; border: none; text-align: left; }
.gs-pdp__panel .variations .label label {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim);
  margin-bottom: 8px; display: block;
}
.gs-pdp__panel .variations select {
  width: 100%; padding: 12px 14px; background: var(--surface);
  border: 1.5px solid var(--hairline-2); border-radius: 11px;
  color: var(--text); font-size: 14px; font-weight: 600; cursor: pointer;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23A9A08F' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 14px center;
  transition: border-color .2s;
}
.gs-pdp__panel .variations select:hover { border-color: rgba(212,162,78,0.45); }
.gs-pdp__panel .variations select:focus { border-color: var(--gold); }
.gs-pdp__panel .variations select:focus:not(:focus-visible) { outline: none; }
.gs-pdp__panel .reset_variations {
  display: inline-block; margin-top: 8px; font-size: 12px; color: var(--text-dim);
}
.gs-pdp__panel .reset_variations:hover { color: var(--gold); }

/* Buy row: quantity stepper + add-to-cart, matching .gs-pdp__buyrow. */
.gs-pdp__panel form.cart { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 0 0 22px; }
.gs-pdp__panel form.cart .quantity {
  display: flex; align-items: center; background: var(--surface);
  border: 1px solid var(--hairline-2); border-radius: 11px; overflow: hidden;
}
.gs-pdp__panel form.cart .quantity .qty {
  width: 54px; height: 54px; text-align: center; background: none;
  border: none; border-radius: 0; color: var(--text);
  font-family: var(--font-mono); font-size: 15px; padding: 0;
  -moz-appearance: textfield;
}
.gs-pdp__panel form.cart .quantity .qty::-webkit-outer-spin-button,
.gs-pdp__panel form.cart .quantity .qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.gs-pdp__panel form.cart .single_add_to_cart_button {
  flex: 1; min-width: 180px; height: 54px; padding: 0 24px;
  background: var(--gold); border: none; border-radius: 11px;
  color: var(--surface-ink); font-weight: 700; font-size: 15.5px;
  cursor: pointer; box-shadow: var(--sh-cta);
  transition: transform .2s, box-shadow .3s, opacity .2s;
}
.gs-pdp__panel form.cart .single_add_to_cart_button:hover {
  transform: translateY(-2px); box-shadow: 0 12px 30px rgba(212,162,78,0.45);
}
.gs-pdp__panel form.cart .single_add_to_cart_button:disabled,
.gs-pdp__panel form.cart .single_add_to_cart_button.disabled {
  opacity: .5; transform: none; box-shadow: none; cursor: not-allowed;
}
.gs-pdp__panel .woocommerce-variation-add-to-cart { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.gs-pdp__panel .woocommerce-variation-add-to-cart .quantity { order: 0; }
.gs-pdp__panel .woocommerce-variation.single_variation { margin: 0 0 14px; }
.gs-pdp__panel .woocommerce-variation-availability p,
.gs-pdp__panel .stock { font-size: 13px; color: var(--text-dim); margin: 4px 0 0; }
.gs-pdp__panel .stock.out-of-stock { color: var(--brick); }

/* Details / trust sit below the form. */
.gs-pdp__panel .gs-pdp__trust { margin-top: 4px; }

@media (max-width: 700px) {
  .gs-pdp__panel form.cart { flex-direction: column; align-items: stretch; }
  .gs-pdp__panel form.cart .quantity { justify-content: center; }
  .gs-pdp__panel .woocommerce-variation-add-to-cart { flex-direction: column; align-items: stretch; }
}

/* Mobile nav drawer (theme addition — the prototype hides .gs-nav at 1080px
   with no mobile menu; the theme adds a brand drawer at the same breakpoint).
   Charcoal panel, gold accents, matches the header chrome above. */
.gs-navtoggle {
  display: none; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: var(--r-pill);
  background: none; border: 1px solid var(--hairline-3);
  color: #CFC4B2; cursor: pointer; transition: all .28s var(--ease-spring);
}
.gs-navtoggle:hover { background: var(--text); color: var(--surface-ink); border-color: var(--text); }
body.gs-nav-open { overflow: hidden; }

.gs-navscrim {
  position: fixed; inset: 0; z-index: 70; /* above .gs-wa-float (60) */
  background: rgba(14,12,10,0.62);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  opacity: 0; visibility: hidden;
  transition: opacity .3s ease, visibility 0s linear .3s;
}
body.gs-nav-open .gs-navscrim { opacity: 1; visibility: visible; transition: opacity .3s ease; }

.gs-drawer {
  position: fixed; inset: 0 0 0 auto; z-index: 75; /* above the scrim */
  width: min(86vw, 360px);
  display: flex; flex-direction: column;
  background: var(--bg-promo);
  border-left: 1px solid rgba(212,162,78,0.22);
  box-shadow: -24px 0 60px rgba(0,0,0,0.55);
  transform: translateX(100%); visibility: hidden;
  transition: transform .32s var(--ease-out), visibility 0s linear .32s;
  overflow-y: auto; -webkit-overflow-scrolling: touch; outline: none;
}
body.gs-nav-open .gs-drawer { transform: none; visibility: visible; transition: transform .32s var(--ease-out); }

.gs-drawer__head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 18px 20px; border-bottom: 1px solid var(--hairline);
}
.gs-drawer__brand { display: inline-flex; align-items: center; gap: 10px; }
.gs-drawer__brand-name { font-family: var(--font-display); font-weight: 700; font-size: 19px; color: var(--text); }
.gs-drawer__close {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; background: none;
  border: 1px solid var(--hairline-3); border-radius: var(--r-pill);
  color: #CFC4B2; cursor: pointer; transition: color .2s, border-color .2s;
}
.gs-drawer__close:hover { color: var(--gold-bright); border-color: rgba(212,162,78,0.5); }

.gs-drawer__nav { display: flex; flex-direction: column; gap: 2px; padding: 14px 10px; }
.gs-drawer__link {
  display: block; padding: 13px 14px; border-radius: 10px;
  font-family: var(--font-display); font-size: 18px; font-weight: 600; letter-spacing: -0.006em;
  color: var(--text-2); transition: color .2s, background .2s;
}
.gs-drawer__link:hover { color: var(--gold-bright); background: rgba(212,162,78,0.07); }
.gs-drawer__link.is-current { color: var(--gold); }

.gs-drawer__foot {
  margin-top: auto; padding: 18px 20px 22px;
  border-top: 1px solid var(--hairline);
  display: flex; flex-direction: column; gap: 12px;
}
.gs-drawer__cart {
  display: flex; align-items: center; gap: 10px; height: 48px; padding: 0 16px;
  background: linear-gradient(120deg, var(--gold-light), var(--gold));
  border-radius: 11px; color: var(--surface-ink);
  font-family: var(--font-display); font-weight: 700; font-size: 15px;
  box-shadow: var(--sh-cta);
}
.gs-drawer__cart .gs-cart__count {
  background: var(--surface-ink); color: var(--gold-light);
  font-size: 11px; font-weight: 700; min-width: 22px; height: 22px;
  border-radius: var(--r-pill); display: inline-flex; align-items: center;
  justify-content: center; padding: 0 6px;
}
.gs-drawer__cart-total { margin-left: auto; font-family: var(--font-mono); font-size: 13px; font-weight: 700; }
.gs-drawer__wa {
  display: flex; align-items: center; justify-content: center; gap: 9px; height: 46px;
  border: 1px solid rgba(123,191,112,0.32); border-radius: 11px;
  color: #9FD18F; font-weight: 600; font-size: 13.5px; transition: border-color .2s;
}
.gs-drawer__wa:hover { border-color: rgba(123,191,112,0.6); }
.gs-drawer__lang { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.gs-drawer__lang-h { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); }
.gs-drawer__lang-opts { display: inline-flex; gap: 6px; }
/* Scope the prototype's `transition: all` down inside the drawer — `all`
   picks up the inherited visibility flip from the drawer show/hide and the
   spring easing strands the buttons at visibility:hidden (unfocusable). */
.gs-drawer__lang .gs-langtoggle { min-width: 40px; height: 36px; font-size: 12px; transition: color .2s, background .2s, border-color .2s; }
.gs-drawer__lang .gs-langtoggle.is-active { background: var(--gold); border-color: var(--gold); color: var(--surface-ink); }
.gs-drawer__lang .gs-langtoggle[disabled] { opacity: .45; cursor: default; }
.gs-drawer__lang .gs-langtoggle[disabled]:hover { background: none; color: #CFC4B2; border-color: var(--hairline-3); transform: none; }

@media (max-width: 1080px) {
  .gs-navtoggle { display: inline-flex; }
}
[dir="rtl"] .gs-drawer {
  inset: 0 auto 0 0;
  border-left: none; border-right: 1px solid rgba(212,162,78,0.22);
  box-shadow: 24px 0 60px rgba(0,0,0,0.55);
  transform: translateX(-100%);
}
[dir="rtl"] .gs-drawer__cart-total { margin-left: 0; margin-right: auto; }
@media (prefers-reduced-motion: reduce) {
  .gs-drawer, .gs-navscrim { transition: none; }
}

/* --------------------------------------------------------------------------
   My Account (WooCommerce) — a few helper classes used by the myaccount/*
   template overrides that aren't in the ported prototype. They reuse existing
   tokens so the dashboard/orders/address/rewards screens match account.html.
   -------------------------------------------------------------------------- */

/* Woo wraps endpoint content in .woocommerce-MyAccount-content; make it the
   prototype's .gs-acct__content column so the grid + spacing line up. */
.woocommerce-account .woocommerce-MyAccount-content { min-width: 0; }

/* Dashboard welcome line (echoed above the stat cards) */
.gs-statcard__welcome {
  font-family: var(--font-display); font-size: 15px; color: var(--text-2);
  margin: 0 0 14px;
}
.gs-statcard__welcome strong { color: var(--text-bright); font-weight: 700; }

/* Reorder anchor variant used on order rows / address cards */
a.gs-reorder { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
.gs-addr__edit { margin-top: 12px; padding: 8px 14px; font-size: 12.5px; }

/* Address screen intro copy */
.gs-acct__addr-intro { margin: 0 0 16px; }
.gs-acct__addr-intro p { font-size: 13.5px; line-height: 1.55; color: var(--text-dim); margin: 0; }

/* Orders pagination */
.gs-acct__pager { display: flex; gap: 10px; margin-top: 18px; }

/* Woo edit-address / account-details forms → prototype input styling */
.woocommerce-account .woocommerce-address-fields .form-row,
.woocommerce-account .woocommerce-EditAccountForm .form-row {
  display: flex; flex-direction: column; gap: 6px; margin: 0 0 14px;
}
.woocommerce-account .woocommerce-address-fields label,
.woocommerce-account .woocommerce-EditAccountForm label {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim);
}
.woocommerce-account .woocommerce-address-fields .input-text,
.woocommerce-account .woocommerce-EditAccountForm .input-text,
.woocommerce-account .woocommerce-address-fields select,
.woocommerce-account .woocommerce-EditAccountForm select {
  height: 46px; width: 100%; padding: 0 14px;
  background: var(--bg); border: 1px solid var(--hairline-2);
  border-radius: var(--r-btn); color: var(--text); font-size: 14px;
}
.woocommerce-account .woocommerce-address-fields .input-text:focus,
.woocommerce-account .woocommerce-EditAccountForm .input-text:focus,
.woocommerce-account .woocommerce-address-fields select:focus,
.woocommerce-account .woocommerce-EditAccountForm select:focus {
  border-color: rgba(212, 162, 78, 0.55); outline: none;
}
.woocommerce-account .woocommerce-address-fields button[type="submit"],
.woocommerce-account .woocommerce-EditAccountForm button[type="submit"] {
  display: inline-block; margin-top: 8px; padding: 15px 28px;
  background: var(--gold); border: none; border-radius: 11px;
  color: var(--surface-ink); font-weight: 700; font-size: 15.5px;
  cursor: pointer; box-shadow: var(--sh-cta);
  transition: transform .2s, box-shadow .3s;
}
.woocommerce-account .woocommerce-address-fields button[type="submit"]:hover,
.woocommerce-account .woocommerce-EditAccountForm button[type="submit"]:hover {
  transform: translateY(-2px); box-shadow: 0 12px 30px rgba(212,162,78,0.45);
}

/* ---- WooCommerce / grillsons-core integration classes (added post-audit) ---- */
.gs-wa-float { position: fixed; right: 20px; bottom: 20px; z-index: 60; width: 56px; height: 56px; border-radius: 50%; background: #25D366; color: #fff; display: inline-flex; align-items: center; justify-content: center; box-shadow: 0 10px 30px rgba(37,211,102,0.4); transition: transform .2s, box-shadow .2s; }
.gs-wa-float:hover { transform: translateY(-3px) scale(1.05); box-shadow: 0 14px 38px rgba(37,211,102,0.55); }
.gs-wa-link { display: inline-flex; align-items: center; gap: 8px; color: #9FD18F; font-weight: 600; }
.gs-wa-link:hover { color: #b8e0ac; }
.gs-btn--wa { background: #25D366; color: #fff; border: none; border-radius: 10px; padding: 0 20px; height: 48px; display: inline-flex; align-items: center; gap: 8px; font-weight: 700; cursor: pointer; }
.gs-btn--wa:hover { background: #1fb457; }
.gs-wa-order { display: inline-flex; align-items: center; gap: 8px; margin-top: 12px; color: #9FD18F; font-weight: 600; }
.gs-co-forms { display: flex; flex-direction: column; gap: 14px; }
.gs-co-totals { margin-top: 4px; }
.gs-cart-main { display: flex; flex-direction: column; }
.gs-pdp__details { margin-top: 4px; }
.gs-line__qty-single { font-family: var(--font-mono); font-size: 14px; color: var(--text-2); padding: 0 6px; }
@media (prefers-reduced-motion: reduce) { .gs-wa-float { transition: none; } }

/* Recipes hub (WP layer) — the prototype's .gs-rcard is a JS-clickable
   <article>; in WordPress it is a real permalink <a>, so give the anchor its
   block box. .gs-rback likewise becomes a link instead of a button. */
a.gs-rcard { display: block; }
a.gs-rback { display: inline-block; }

/* Offline fallback page (PWA layer) — served at /offline/ by inc/pwa.php.
   Ported from the prototype offline.html; its inline styles live here so the
   template stays markup-only. */
.gs-offline { min-height: 100vh; display: flex; align-items: center; justify-content: center; text-align: center; padding: 24px; }
.gs-offline__box { max-width: 420px; }
.gs-offline__flame { margin-bottom: 20px; }
.gs-offline__title { font-family: var(--font-display); font-size: 30px; font-weight: 800; color: var(--text-bright); margin: 0 0 10px; }
.gs-offline__copy { font-size: 15px; line-height: 1.6; color: var(--text-3); margin: 0 0 24px; }
.gs-offline__retry { height: 50px; padding: 0 24px; }
.gs-offline__brand { margin-top: 24px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-dim); }

/* ---- PACK SIZE picker (progressive enhancement over Woo's variation select) ----
   main.js renders .gs-pdp__packs cards and moves the native <select> here. The
   select stays reachable for assistive tech and is the no-JS fallback, so it is
   clipped rather than display:none'd. */
.gs-visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  clip: rect(0 0 0 0); clip-path: inset(50%);
  overflow: hidden; white-space: nowrap;
}
.gs-pdp__packs { margin-top: 4px; }
.gs-pdp__pack:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
/* Woo prints a "Clear" link under the variations table; the cards replace it. */
.variations_form .reset_variations { display: none; }
/* The variations form is a flex-wrap row, so both the label and the card row
   must claim a full line of their own or they sit beside the cards. */
.gs-pdp__packs-label {
  flex: 0 0 100%; width: 100%;
  font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.16em;
  text-transform: uppercase; color: var(--text-dim); margin: 6px 0 8px;
}
.gs-pdp__packs { flex: 0 0 100%; width: 100%; }

/* =========================================================================
   Checkout: skin the WooCommerce widgets the theme never claimed.
   WooCommerce enhances the country/state selects with Select2, which ships
   its own light-theme stylesheet — on a charcoal page those rendered as
   glaring white boxes. Payment methods also came through as a bulleted <ul>.
   ========================================================================= */

/* ---- Select2 (country / region / state) ---- */
.select2-container--default .select2-selection--single {
  background: var(--surface-2);
  border: 1.5px solid var(--hairline-2);
  border-radius: 11px;
  height: 50px;
  display: flex;
  align-items: center;
  padding: 0 14px;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
  color: var(--text);
  line-height: 1.4;
  padding: 0;
}
.select2-container--default .select2-selection--single .select2-selection__placeholder { color: var(--text-dim); }
.select2-container--default .select2-selection--single .select2-selection__arrow { height: 48px; right: 8px; }
.select2-container--default .select2-selection--single .select2-selection__arrow b { border-top-color: var(--text-dim); }
.select2-container--default.select2-container--open .select2-selection--single { border-color: var(--gold); }
/* The dropdown is portalled to <body>, so it needs its own rules. */
.select2-dropdown {
  background: var(--surface-2);
  border: 1.5px solid var(--hairline-2);
  border-radius: 11px;
  overflow: hidden;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
  background: var(--surface);
  border: 1px solid var(--hairline-2);
  border-radius: 8px;
  color: var(--text);
  padding: 8px 10px;
}
.select2-container--default .select2-results__option { color: var(--text-2); }
.select2-container--default .select2-results__option--highlighted[aria-selected],
.select2-container--default .select2-results__option--highlighted[data-selected] {
  background: rgba(212, 162, 78, 0.16);
  color: var(--text-bright);
}
.select2-container--default .select2-results__option[aria-selected="true"],
.select2-container--default .select2-results__option[data-selected="true"] {
  background: rgba(212, 162, 78, 0.1);
  color: var(--gold-bright);
}

/* ---- Payment methods: cards, not bullets ---- */
.woocommerce-checkout .wc_payment_methods,
.woocommerce-checkout ul.payment_methods {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 10px;
  border: 0;
}
.woocommerce-checkout ul.payment_methods li {
  list-style: none;
  background: var(--surface-2);
  border: 1.5px solid var(--hairline-2);
  border-radius: 12px;
  padding: 14px 16px;
  transition: border-color .2s, background .2s;
}
.woocommerce-checkout ul.payment_methods li:hover { border-color: rgba(212, 162, 78, 0.45); }
/* :has() lets the whole card react to its own radio without extra markup. */
.woocommerce-checkout ul.payment_methods li:has(input:checked) {
  border-color: var(--gold);
  background: rgba(212, 162, 78, 0.09);
}
.woocommerce-checkout ul.payment_methods li label {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-weight: 700;
  color: var(--text);
  cursor: pointer;
  margin: 0;
}
.woocommerce-checkout ul.payment_methods input[type="radio"] { accent-color: var(--gold); }
.woocommerce-checkout .payment_box {
  background: transparent;
  padding: 8px 0 0 28px;
  margin: 0;
  font-size: 13px;
  color: var(--text-dim);
}
.woocommerce-checkout .payment_box::before { display: none; }

/* ---- Coupon toggle: a quiet line, not a shouty notice ---- */
.woocommerce-form-coupon-toggle .woocommerce-info {
  background: var(--surface-2);
  border: 1px solid var(--hairline);
  border-left: 3px solid var(--gold);
  border-radius: 10px;
  color: var(--text-2);
  font-size: 13.5px;
  padding: 12px 16px;
}
.woocommerce-form-coupon-toggle .woocommerce-info::before { display: none; }
.woocommerce-form-coupon-toggle a { color: var(--gold); }

/* Auth card: remember-me row + Woo's own button/label resets inside the card. */
.gs-auth__remember { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-dim); }
.gs-auth__remember input { accent-color: var(--gold); }
.gs-auth .woocommerce-form-row { margin: 0; padding: 0; }
.gs-auth .cf-turnstile { margin: 2px 0; }
.gs-auth__grid .gs-input { height: 50px; }

/* WordPress injects its own password-reveal toggle; unstyled it renders as a
   stray grey 16x6 nub floating above the field. Anchor it inside the input. */
/* Woo wraps the field in <span class="password-input">; that is the anchor. */
.gs-auth .password-input { position: relative; display: block; }
.gs-auth .password-input .gs-input { width: 100%; padding-right: 44px; }
.gs-auth .show-password-input {
  position: absolute; top: 50%; right: 12px; transform: translateY(-50%);
  width: 26px; height: 26px; padding: 0;
  background: transparent; border: 0; border-radius: 6px; cursor: pointer;
}
.gs-auth .show-password-input::after {
  content: "👁"; font-size: 14px; line-height: 1; opacity: .55;
}
.gs-auth .show-password-input.display-password::after { opacity: 1; }
.gs-auth .show-password-input:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }

/* =========================================================================
   Location picker — the aggregator pattern (Talabat/Toters/Careem).
   The pin is painted at the CENTRE of the frame and never moves; the customer
   drags the MAP underneath it. One-handed, and the thumb never covers the
   thing it is placing.
   ========================================================================= */
.gs-locpick {
  position: relative;
  width: 100%;
  height: min(64vh, 520px);
  border-radius: var(--r-card, 16px);
  overflow: hidden;
  border: 1px solid var(--hairline-2);
  background: var(--surface-2);
  touch-action: none; /* the map owns the gesture */
}
.gs-locpick__map { position: absolute; inset: 0; }
.gs-locpick .leaflet-container { background: #14110e; font-family: inherit; }
.gs-locpick .leaflet-control-attribution {
  background: rgba(20, 18, 16, .78); color: var(--text-dim); font-size: 9px;
}
.gs-locpick .leaflet-control-attribution a { color: var(--gold); }

/* The fixed centre pin. pointer-events:none so every gesture reaches the map.
   It sits half its own height above centre so the TIP is the exact point. */
.gs-locpick__pin {
  position: absolute; left: 50%; top: 50%;
  transform: translate(-50%, -100%);
  pointer-events: none; z-index: 500;
  transition: transform .18s cubic-bezier(.2,.8,.3,1);
  filter: drop-shadow(0 6px 10px rgba(0,0,0,.55));
}
/* Lift the pin while the map moves — the shorthand "you are placing this" cue. */
.gs-locpick.is-moving .gs-locpick__pin { transform: translate(-50%, -118%); }
/* A small ground dot marks the true point under the lifted pin. */
.gs-locpick__stem {
  position: absolute; left: 50%; bottom: -5px; transform: translateX(-50%);
  width: 8px; height: 4px; border-radius: 50%;
  background: rgba(0,0,0,.5); box-shadow: 0 0 0 1px rgba(212,162,78,.45);
}

.gs-locpick__gps {
  position: absolute; right: 12px; z-index: 600;
  bottom: calc(var(--gs-locpick-sheet, 132px) + 12px);
  width: 42px; height: 42px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--surface); color: var(--gold);
  border: 1px solid var(--hairline-2); cursor: pointer;
  box-shadow: 0 4px 14px rgba(0,0,0,.4);
}
.gs-locpick__gps:active { transform: scale(.94); }
.gs-locpick__gps.is-busy { opacity: .6; animation: gs-pulse 1s ease-in-out infinite; }
@keyframes gs-pulse { 50% { opacity: 1; } }

.gs-locpick__sheet {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 600;
  background: linear-gradient(180deg, rgba(20,18,16,.86), var(--surface) 38%);
  border-top: 1px solid var(--hairline-2);
  padding: 12px 14px 14px;
  backdrop-filter: blur(6px);
}
.gs-locpick__label {
  font-family: var(--font-mono); font-size: 10px; letter-spacing: .16em;
  text-transform: uppercase; color: var(--text-dim); margin-bottom: 4px;
}
.gs-locpick__addr {
  font-weight: 700; font-size: 15px; color: var(--text-bright);
  line-height: 1.3; min-height: 1.3em;
}
.gs-locpick__addr.is-loading { opacity: .5; }
.gs-locpick__coords {
  font-family: var(--font-mono); font-size: 10.5px; color: var(--text-dim); margin-top: 2px;
}
.gs-locpick__warn {
  margin-top: 6px; font-size: 12px; color: #E07A6A;
  border: 1px solid rgba(224,122,106,.4); border-radius: 8px; padding: 6px 8px;
}
.gs-locpick__confirm {
  width: 100%; margin-top: 10px; padding: 13px;
  background: var(--gold); color: var(--surface-ink);
  font-weight: 700; font-size: 15px; border: 0; border-radius: 11px; cursor: pointer;
  box-shadow: var(--sh-cta);
}
.gs-locpick__confirm:disabled { opacity: .45; box-shadow: none; cursor: not-allowed; }

@media (max-width: 640px) {
  .gs-locpick { height: 72vh; border-radius: 0; border-left: 0; border-right: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .gs-locpick__pin { transition: none; }
  .gs-locpick__gps.is-busy { animation: none; }
}

/* Leaflet paints its own controls against the container edges, which put the
   zoom buttons and the attribution underneath the confirm sheet. Lift both
   above it and mirror the zoom stack opposite the GPS button. */
.gs-locpick .leaflet-bottom.leaflet-left,
.gs-locpick .leaflet-bottom.leaflet-right {
  bottom: calc(var(--gs-locpick-sheet, 132px) + 8px);
}
.gs-locpick .leaflet-control-zoom { margin-left: 12px; border: 0; box-shadow: 0 4px 14px rgba(0,0,0,.4); }
.gs-locpick .leaflet-control-zoom a {
  background: var(--surface); color: var(--gold);
  border: 1px solid var(--hairline-2); width: 34px; height: 34px; line-height: 32px;
}
.gs-locpick .leaflet-control-zoom a:hover { background: var(--surface-2); }
.gs-locpick .leaflet-control-zoom a:first-child { border-radius: 9px 9px 0 0; }
.gs-locpick .leaflet-control-zoom a:last-child { border-radius: 0 0 9px 9px; border-top: 0; }
/* Attribution is required by the tile licence — keep it legible but out of the way. */
.gs-locpick .leaflet-control-attribution {
  margin: 0 6px 2px 0; border-radius: 6px; padding: 1px 6px;
}

/* Delivery-slot pills (checkout) — prototype parity. The native select stays
   in the DOM as the submitted field and the no-JS fallback; these drive it. */
.gs-slotgrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 8px; }
.gs-slot {
  display: flex; flex-direction: column; gap: 2px; align-items: flex-start;
  padding: 11px 14px; background: var(--surface); border: 1.5px solid var(--hairline-2);
  border-radius: 11px; cursor: pointer; text-align: left; transition: all .2s;
}
.gs-slot:hover { border-color: rgba(212,162,78,.45); }
.gs-slot.is-active { border-color: var(--gold); background: rgba(212,162,78,.1); }
.gs-slot__day { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-dim); }
.gs-slot.is-active .gs-slot__day { color: var(--gold-bright); }
.gs-slot__win { font-weight: 700; font-size: 14.5px; color: var(--text); }
.gs-slot:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
@media (max-width: 480px) { .gs-slotgrid { grid-template-columns: 1fr; } }

/* One price, not two.
   WooCommerce prints the parent's min–max RANGE under the title and, once a
   variation resolves, its own single price again below the pack cards — so the
   panel showed "$17.60 – $61.44" AND "$32.00". The design shows one price, in
   the header slot. Hide the range whenever a variation is active (the
   variations form gets .gs-has-variation from main.js) and suppress the
   duplicate block that Woo renders lower down. */
.gs-pdp__panel .gs-has-variation ~ .price,
.gs-pdp__panel.gs-var-selected > .price { display: none; }
.gs-pdp__panel .woocommerce-variation-price { display: none; }
/* …and promote the resolved price into the header slot instead. */
.gs-pdp__price--live {
  font-family: var(--font-mono); font-size: 30px; color: var(--gold);
  margin: 0 0 16px; display: block;
}
.gs-pdp__price--live .unit { font-family: var(--font-body); font-size: 14px; color: var(--text-dim); margin-left: 6px; }

/* ---- Address map (checkout + My Account → Addresses) ---- */
.gs-addrmap { margin: 0 0 18px; }
.gs-addrmap__head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px; }
.gs-addrmap__title {
  font-family: var(--font-mono); font-size: 11px; letter-spacing: .16em;
  text-transform: uppercase; color: var(--text-dim);
}
.gs-addrmap__state { font-size: 12px; color: var(--text-dim); opacity: 0; transition: opacity .2s; }
.gs-addrmap__state.is-on { opacity: 1; color: var(--gold-bright); }
.gs-addrmap__mount .gs-locpick { height: min(46vh, 340px); }
.gs-addrmap__hint { font-size: 12.5px; line-height: 1.5; color: var(--text-dim); margin: 8px 0 0; }
@media (max-width: 640px) { .gs-addrmap__mount .gs-locpick { height: 54vh; border-radius: 12px; } }

/* ---- Quantity stepper (cart + product) ----
   Wraps WooCommerce's own input so cart updates and add-to-cart still POST the
   same field; the buttons only drive its value. */
.gs-qty { display: inline-flex; align-items: stretch; border: 1.5px solid var(--hairline-2);
  border-radius: 11px; overflow: hidden; background: var(--surface); }
.gs-qty input.qty {
  width: 54px; text-align: center; border: 0; background: transparent; color: var(--text);
  font-family: var(--font-mono); font-size: 15px; -moz-appearance: textfield; padding: 0;
}
.gs-qty input.qty::-webkit-outer-spin-button,
.gs-qty input.qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.gs-qty__btn {
  width: 40px; min-height: 44px; border: 0; background: transparent; cursor: pointer;
  color: var(--gold); font-size: 18px; line-height: 1; display: grid; place-items: center;
  transition: background .15s;
}
.gs-qty__btn:hover { background: rgba(212,162,78,.12); }
.gs-qty__btn:active { background: rgba(212,162,78,.2); }
.gs-qty__btn:focus-visible { outline: 2px solid var(--gold); outline-offset: -2px; }

/* Cart actions row — the theme renders .gs-cart__actions > .gs-coupon + update.
   Untargeted, the promo input and Apply button overflowed the card and the
   update button rendered as an empty box. (An earlier attempt styled
   WooCommerce's default .coupon class, which this template never emits.) */
.gs-cart__actions {
  display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
  margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--hairline);
}
.gs-coupon { display: flex; gap: 8px; align-items: center; flex: 1 1 320px; min-width: 0; }
.gs-coupon .gs-input {
  flex: 1; min-width: 0; height: 46px; padding: 0 14px;
  background: var(--surface-2); border: 1.5px solid var(--hairline-2);
  border-radius: 11px; color: var(--text);
}
.gs-coupon__btn {
  flex: 0 0 auto; height: 46px; padding: 0 20px; border: 0; border-radius: 11px;
  background: var(--gold); color: var(--surface-ink); font-weight: 700; cursor: pointer;
}
.gs-coupon__btn:hover { background: var(--gold-bright); }
.gs-cart__update {
  flex: 0 0 auto; height: 46px; padding: 0 20px; cursor: pointer;
  background: transparent; border: 1.5px solid var(--hairline-2);
  border-radius: 11px; color: var(--text-2); font-weight: 600;
}
.gs-cart__update:disabled { opacity: .45; cursor: default; }
.gs-cart__update:not(:disabled):hover { border-color: var(--gold); color: var(--gold); }
@media (max-width: 560px) {
  .gs-cart__actions { flex-direction: column; align-items: stretch; }
  .gs-coupon { flex: 1 1 auto; }
  .gs-cart__update { width: 100%; }
}

/* ---- Logo: bigger, per owner direction ----
   The flame mark and wordmark carried the header at 28px/27px; at real viewing
   distance on a phone that reads small against the cart pill next to it. Scaled
   up ~25% on desktop and ~18% on mobile, keeping the optical relationship
   between mark, wordmark and the descriptor line. */
.gs-logo { gap: 15px; }
.gs-logo__mark { width: 36px; height: 42px; }
.gs-logo__name { font-size: 34px; }
.gs-logo__sub { font-size: 9.5px; letter-spacing: 0.32em; margin-top: 5px; }
@media (max-width: 900px) {
  .gs-logo { gap: 11px; }
  .gs-logo__mark { width: 31px; height: 36px; }
  .gs-logo__name { font-size: 26px; }
}
@media (max-width: 420px) {
  .gs-logo__mark { width: 28px; height: 33px; }
  .gs-logo__name { font-size: 23px; }
}

/* =========================================================================
   MOBILE DEFECT FIXES — from a critical review across iPhone SE/14/15 Pro Max,
   Pixel 8 and Galaxy S24 Ultra. Each rule below fixes a measured overflow or
   an unusable control, not a hypothetical.
   ========================================================================= */

/* 1. Cart quantity input. The template also carries .gs-line__stepper, a rule
      authored for a flex WRAPPER; landing on the input it left it unsized. */
.gs-qty input.gs-line__stepper,
.gs-qty input.qty { width: 54px; font-size: 16px; }

/* 2. Add-to-cart collapsed to ~16px tall on every product page: under 700px the
      buy row becomes a COLUMN, and `flex:1` there means flex-basis:0 on the
      BLOCK axis, which beat the declared height. Every product is variable, so
      this hit 100% of PDPs. */
@media (max-width: 700px) {
  .gs-pdp__panel form.cart .single_add_to_cart_button {
    flex: 0 0 auto; width: 100%; min-height: 54px; height: 54px;
  }
}

/* 3. .gs-visually-hidden did not collapse: width:1px (0-1-0) lost to
      `.gs-input/select{width:100%}` (0-1-1), leaving a viewport-wide absolutely
      positioned <select> pushing 52px of horizontal scroll on checkout and 18px
      on every PDP. Make the clip authoritative and pin it to the origin. */
.gs-visually-hidden {
  position: absolute !important;
  width: 1px !important; height: 1px !important;
  left: 0 !important; top: auto !important;
  margin: -1px !important; padding: 0 !important; border: 0 !important;
  clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important;
  overflow: hidden !important; white-space: nowrap !important;
}

/* 4. Header overflowed at 320px — the hamburger was sliced by the screen edge
      on every page. Tighten the lockup and gaps below 360px. */
@media (max-width: 360px) {
  :root { --pad-x: 12px; }
  .gs-logo__name { font-size: 19px; }
  .gs-logo__mark { width: 24px; height: 28px; }
  .gs-logo { gap: 8px; }
  .gs-header__actions { gap: 4px; }
}

/* 5. Checkout/cart grid computed a 334px track inside a 248px box, so every
      section rendered wider than the phone. `1fr` resolves to minmax(auto,1fr),
      and the auto minimum was the fixed 300px Turnstile widget. */
@media (max-width: 900px) {
  .gs-cart-layout,
  .gs-co-layout { grid-template-columns: minmax(0, 1fr); }
}
.cf-turnstile { max-width: 100%; overflow-x: auto; }

/* 6. Homepage scrolled 56px sideways: the doneness legend is nowrap inside a
      nowrap flex header, so it pushed the row past the viewport. */
@media (max-width: 700px) {
  .gs-section__head { flex-wrap: wrap; row-gap: 6px; }
  .gs-done__legend { white-space: normal; }
}

/* ---- Category badges, styled like Fresh/Frozen ----
   The Fresh (green) and Frozen (blue) pills were the only styled badges; every
   category fell back to plain gold text. Same pill treatment, tinted per
   category so the badge tells you something at a glance. Arabic slugs (-ar)
   map to the same colour family in PHP. */
.gs-card__badge--cat {
  border: 1px solid transparent;
  backdrop-filter: blur(3px);
}
.gs-card__badge--cat-beef        { background: rgba(140,47,35,.22);  color: #E39485; border-color: rgba(140,47,35,.45); }
.gs-card__badge--cat-lamb        { background: rgba(176,106,74,.20); color: #E0A98A; border-color: rgba(176,106,74,.42); }
.gs-card__badge--cat-poultry     { background: rgba(212,162,78,.18); color: #E7C07A; border-color: rgba(212,162,78,.42); }
.gs-card__badge--cat-seafood     { background: rgba(96,150,178,.20); color: #9FC8DC; border-color: rgba(96,150,178,.42); }
.gs-card__badge--cat-sausages    { background: rgba(154,110,60,.22); color: #DCB183; border-color: rgba(154,110,60,.44); }
/* Fresh/Frozen get the same border treatment so the set reads as one family. */
.gs-card__badge--fresh  { border: 1px solid rgba(123,191,112,.42); }
.gs-card__badge--frozen { border: 1px solid rgba(110,160,192,.45); }

/* ---- 4 · Payment — Woo's gateway list wearing the prototype's card look ----
   woocommerce_checkout_payment() still renders it (so gateways, radios, the
   Place Order button and terms all behave natively); this only restyles it
   from a bulleted list into one large tappable option per method. */
.gs-cosec--pay .wc_payment_methods,
.gs-cosec--pay ul.payment_methods {
  list-style: none; margin: 0; padding: 0; border: 0;
  display: flex; flex-direction: column; gap: 10px;
}
.gs-cosec--pay ul.payment_methods > li {
  list-style: none; margin: 0;
  border: 1.5px solid var(--hairline-2); border-radius: 11px;
  background: var(--bg); padding: 0; overflow: hidden;
  transition: border-color .2s, background .2s;
}
.gs-cosec--pay ul.payment_methods > li:hover { border-color: rgba(212,162,78,.45); }
.gs-cosec--pay ul.payment_methods > li:has(input:checked) {
  border-color: var(--gold); background: rgba(212,162,78,.08);
}
/* The whole row is the target — not just the 14px radio. */
.gs-cosec--pay ul.payment_methods > li > label {
  display: flex; align-items: center; gap: 12px;
  padding: 15px 16px; min-height: 60px; margin: 0; cursor: pointer;
  font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--text);
}
.gs-cosec--pay ul.payment_methods input[type="radio"] {
  width: 20px; height: 20px; accent-color: var(--gold); flex-shrink: 0; margin: 0;
}
.gs-cosec--pay ul.payment_methods > li:has(input:checked) > label { color: var(--text-bright); }
/* Gateway blurb sits under the title, quiet, like the design's <small>. */
.gs-cosec--pay .payment_box {
  background: transparent; border: 0; margin: 0;
  padding: 0 16px 14px 48px; font-size: 12.5px; line-height: 1.5; color: var(--text-dim);
}
.gs-cosec--pay .payment_box::before { display: none; }
.gs-cosec--pay .payment_box p:last-child { margin-bottom: 0; }
.gs-cosec--pay .woocommerce-terms-and-conditions-wrapper { margin-top: 14px; }
.gs-cosec--pay #place_order {
  width: 100%; min-height: 54px; margin-top: 14px;
  background: var(--gold); color: var(--surface-ink); border: 0; border-radius: 11px;
  font-family: var(--font-display); font-weight: 700; font-size: 16px; cursor: pointer;
  box-shadow: var(--sh-cta);
}
.gs-cosec--pay #place_order:hover { background: var(--gold-bright); }

/* The closed off-canvas nav drawer is parked off-screen with a transform.
   Even as position:fixed it still extended the document's scroll area, so every
   page carried ~18px of phantom horizontal scroll. `clip` rather than `hidden`:
   hidden on the root creates a scroll container and breaks position:sticky,
   which the header depends on. */
html { overflow-x: clip; }
@supports not (overflow-x: clip) {
  /* Older engines: contain the drawer instead of clipping the root. */
  .gs-drawer:not(.is-open) { display: none; }
}

/* ---- My Account → Account details (branded panel) ---- */
.gs-acctform { display: flex; flex-direction: column; gap: 16px; }
.gs-acctform__card {
  background: var(--surface-2); border: 1px solid var(--hairline-2);
  border-radius: var(--r-card, 16px); padding: clamp(16px, 3vw, 24px);
}
.gs-acctform__h {
  font-family: var(--font-display); font-weight: 700; font-size: 17px;
  color: var(--text-bright); margin: 0 0 4px;
}
.gs-acctform__note { font-size: 13px; color: var(--text-dim); margin: 0 0 14px; }
.gs-acctform__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 14px; margin-top: 12px; }
.gs-acctform__field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.gs-acctform__field--wide { grid-column: 1 / -1; }
.gs-acctform__field > span {
  font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--text-dim);
}
.gs-acctform__field em { color: var(--brick); font-style: normal; }
.gs-acctform__field .gs-input { width: 100%; height: 48px; padding: 0 14px; font-size: 16px; }
.gs-acctform__field small { font-size: 12px; color: var(--text-dim); }
.gs-acctform__actions { display: flex; }
.gs-acctform__save {
  min-height: 52px; padding: 0 28px; border: 0; border-radius: 11px;
  background: var(--gold); color: var(--surface-ink);
  font-family: var(--font-display); font-weight: 700; font-size: 15.5px;
  cursor: pointer; box-shadow: var(--sh-cta);
}
.gs-acctform__save:hover { background: var(--gold-bright); }
@media (max-width: 640px) {
  .gs-acctform__grid { grid-template-columns: 1fr; }
  .gs-acctform__save { width: 100%; }
}

/* ─────────────────────────────────────────────────────────────────────────
   Tap targets

   An audit at phone width found 18 controls under 40px — including the
   quick-add button, every footer link and the "VIEW" link on a product card.
   These are all comfortable to click with a cursor and awkward to hit with a
   thumb, which is the only way most of this shop will ever be used.

   Two techniques, chosen per case rather than applied uniformly:

   - Real padding where the control sits in a stack and neighbours can simply
     move apart (footer links, buttons). The extra space is also an
     improvement to read.
   - A transparent ::after overlay where the layout is tight and padding would
     shift the design (inline links inside a card). This grows only the hit
     area, leaving every visible edge exactly where it was.

   Hit areas must never OVERLAP. Two 44px targets 20px apart means half the
   taps on one land on the other — measurably worse than the small target it
   replaced. So horizontal growth is used sparingly, and where items sit close
   together on one line the vertical axis is grown instead: that is the axis a
   thumb actually misses.
   ───────────────────────────────────────────────────────────────────────── */

/* Quick-add: a primary action at 35px tall. */
.gs-card__qa-btn { min-height: 44px; padding: 10px 14px; }

/* Quick add was a HOVER reveal: the panel sits at opacity 0, translated 120%
   down, and slides up when the card is hovered. That is a nice desktop
   flourish and it means the feature does not exist on a phone -- there is no
   hover, so the panel never appears. Worse, it stayed pointer-active while
   invisible, so an invisible button sat across the top of the product title
   and could swallow a tap meant to open the product.

   On any device whose primary input cannot hover, the panel is simply part of
   the card: always visible, always where the thumb expects it. */
@media (hover: none) {
  /* Reveal it in place — do NOT change its position.
     An earlier attempt also set position:static, which moved the panel to the
     TOP of the card above the photo and buried the category badge behind it.
     That was chasing a phantom: the panel appeared to overlap the product
     title only because its HIDDEN state is translateY(120%), which parks it
     below the image. Measuring the hidden state and "fixing" the result broke
     a layout that was correct. It is absolutely positioned against
     .gs-card__media by design and belongs at the bottom of the photo. */
  .gs-card__qa {
    transform: translateY(0);
    opacity: 1;
    /* The transition exists only to animate the hover reveal; with no hover
       there is nothing to animate, and leaving it makes the panel fade
       whenever the card is tapped. */
    transition: none;
  }
}

/* Belt and braces for anything that still renders it hidden: a control at
   opacity 0 must not be tappable. */
.gs-card__qa[style*="opacity: 0"],
.gs-card:not(:hover) .gs-card__qa { pointer-events: none; }
@media (hover: none) {
  .gs-card:not(:hover) .gs-card__qa { pointer-events: auto; }
}

/* Product name inside a card — grow the hit area, keep the type where it is. */
.gs-card__name { position: relative; }
.gs-card__name::after { content: ''; position: absolute; inset: -9px 0; }

/* "VIEW" — 47x17. Grown both ways; it sits alone on its row. */
.gs-card__view { position: relative; min-height: 20px; }
/* -11px, not more: the title sits 21px above this, and two overlays that each
   claimed 13px met in the middle -- a tap on the gap would have been a coin
   flip between opening the product and opening the product a different way. */
.gs-card__view::after { content: ''; position: absolute; inset: -11px -12px; }

/* Footer link column: 21px rows in a vertical stack, so padding is free. */
.gs-footer__links a { display: block; padding: 11px 0; }
.gs-footer__links { gap: 0; }          /* padding now provides the rhythm */
.gs-footer__wa { padding: 11px 0; margin-bottom: 4px; }

/* Breadcrumbs sit on one line, so growing them sideways would overlap the
   neighbour. Vertical only, plus a wider gap so the separators still read. */
.gs-crumbs { gap: 10px; }
.gs-crumbs a { position: relative; display: inline-block; }
.gs-crumbs a::after { content: ''; position: absolute; inset: -14px -5px; }

/* Header logo at 36px — the most-tapped link on the site. */
.gs-logo { min-height: 44px; }

/* Variation labels ("Pack size") are label[for], so they are tappable and
   focus the control. Cheap to make them worth aiming at. */
.variations th.label label,
.gs-variations th.label label { display: inline-block; padding: 12px 0; }

/* Shop filters — the chips and pills are the most-tapped controls on the
   busiest page, and both landed at 36px. They sit in a stack (chips) and a
   wrapping row (pills), so real padding is safe: neighbours just move apart,
   and the extra breathing room reads better at a glance too. */
.gs-chip { min-height: 44px; padding: 10px; }
.gs-pill { min-height: 44px; padding: 10px 15px; }
/* The pill row wraps; keep a gap wide enough that two 44px targets on adjacent
   lines cannot be confused for one another. */
.gs-pills, .gs-filters__pills { row-gap: 10px; }

/* Pagination — a 39px box for a link people hit repeatedly while browsing. */
.woocommerce-pagination .page-numbers { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }

/* Price slider. The native track is 16px tall, which is a thin thing to catch
   with a thumb — and unlike a button you have to land on it AND drag. Give the
   control a 44px touch height while leaving the track looking as slim as it
   did, and enlarge the handle itself, which is the part being grabbed. */
.gs-range input[type="range"] {
  height: 44px;
  background: transparent;   /* the 44px is touch area, not a visible bar */
  -webkit-appearance: none;
  appearance: none;
}
.gs-range input[type="range"]::-webkit-slider-runnable-track {
  height: 4px; border-radius: 2px;
  background: linear-gradient(to right, var(--gold), var(--hairline-2));
}
.gs-range input[type="range"]::-moz-range-track {
  height: 4px; border-radius: 2px; background: var(--hairline-2);
}
.gs-range input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 24px; height: 24px; border-radius: 50%;
  background: var(--gold); border: 2px solid var(--surface-ink);
  margin-top: -10px;         /* centre the 24px handle on the 4px track */
  box-shadow: 0 2px 8px rgba(0,0,0,0.45);
}
.gs-range input[type="range"]::-moz-range-thumb {
  width: 24px; height: 24px; border-radius: 50%;
  background: var(--gold); border: 2px solid var(--surface-ink);
  box-shadow: 0 2px 8px rgba(0,0,0,0.45);
}

/* Cart line controls.

   The steppers declare width:40px but measured 22px on a phone: .gs-qty is an
   inline-flex row and the buttons were shrinking to fit beside a 54px number
   field. flex-shrink is the actual bug — a declared width means nothing to a
   flex item that is allowed to give it up. These are the most-tapped controls
   in the cart and the two of them sit side by side, so a miss is not a
   near-miss; it changes the quantity in the wrong direction. */
.gs-qty__btn { flex: 0 0 44px; width: 44px; min-width: 44px; }
.gs-qty input.qty { flex: 0 1 auto; min-width: 44px; }

/* "Remove" was 20px tall. It is also destructive, so it deserves to be
   deliberate rather than merely reachable — padding, not an invisible overlay
   the customer cannot see the edges of. */
.gs-line__remove { padding: 12px 4px; }

/* Line-item title: grow the hit area without moving the type. */
.gs-line__name { position: relative; display: inline-block; }
.gs-line__name::after { content: ''; position: absolute; inset: -10px 0; }

/* The stepper must not be shrunk below its own contents. It sits in a flex row
   with "Remove", was flex:0 1 auto, and gave up 22px — which .gs-qty's
   overflow:hidden then CLIPPED, so the minus button was sliced in half and
   read as a stray dot. Widening the buttons alone made that worse; the
   container is the thing that has to stop shrinking. */
.gs-qty { flex: 0 0 auto; min-width: fit-content; }
/* With a full-width stepper the row can exceed the line on a narrow phone, so
   let "Remove" drop to its own line rather than squeezing the stepper again. */
.gs-line__ctl { flex-wrap: wrap; row-gap: 10px; }

/* The floating WhatsApp button is fixed bottom-right at 56px and sits ON TOP of
   whatever the page happens to rest under it — on the cart that is the promo
   "Apply" button, on checkout it covered the Turnstile widget. A support
   shortcut is not worth blocking a control the customer is trying to press.

   Two parts: keep it clear of the very bottom of the document (so the last
   action on any page is never trapped beneath it), and shift it out of the way
   on narrow screens where the gap either side is smallest. */
body { padding-bottom: 92px; }
@media (min-width: 900px) { body { padding-bottom: 0; } }  /* desktop has room */

/* Anything the customer must be able to press near the bottom-right gets a
   reserved lane on phones. */
@media (max-width: 899px) {
  .gs-cart__actions, .gs-coupon { padding-right: 0; }
  .gs-coupon { flex-basis: 100%; }        /* promo + Apply take a full row … */
  .gs-cart__actions .button, .gs-cart__actions .gs-btn { flex-basis: 100%; }
}

/* Leaflet's own zoom buttons are 30px — below target on the one screen where
   the customer is pinning their front door, and the map is the thing the whole
   address depends on. Leaflet ships these unstyled by design. */
/* !important because leaflet.css is a vendored stylesheet enqueued after the
   design system, and its own .leaflet-touch .leaflet-bar a rule sets 30px.
   Overriding vendor CSS is what this is for. */
.leaflet-touch .leaflet-bar a,
.leaflet-bar a,
.leaflet-control-zoom a {
  width: 44px !important; height: 44px !important;
  line-height: 44px !important; font-size: 20px !important;
}

/* WooCommerce's "have a coupon? click here" toggle is a bare inline link. */
.woocommerce-form-coupon-toggle a,
a.showcoupon { display: inline-block; padding: 12px 4px; }

/* NOT padded, deliberately: <label> elements stacked above their own input.
   They are 18px tall and they are not what anyone aims at — the 46px field
   directly beneath is. Growing every form label would add ~200px to checkout
   to fix a problem no customer has. Labels that ARE the control (checkboxes,
   radios, the payment method rows) are sized where they are defined. */

/* Checkboxes rendered at 13px — the browser default, never restyled. "Create
   an account?" and "Ship to a different address?" are both decisions that
   change what happens to the order, and both were a 13px square. The wrapping
   label is tappable too, but the box is what people aim at. */
.woocommerce-form__input-checkbox,
input[type="checkbox"] {
  width: 22px; height: 22px;
  accent-color: var(--gold);
  flex: 0 0 auto;
}
/* Make the whole row the target, not just the box. */
.woocommerce-form__label-for-checkbox,
label.checkbox {
  display: flex; align-items: center; gap: 10px;
  min-height: 44px; cursor: pointer;
}

/* Turnstile.

   The widget renders a fixed 300px box. The card it sits in is 257px wide on a
   375px phone, so on the login form and at checkout it was cut off down the
   right-hand side with its own little scrollbar under it — a verification
   control that looks broken, on the two screens where a customer is deciding
   whether to trust the site with their details.

   data-size="flexible" is requested in the markup, but Cloudflare's script
   still lays it out at 300px, so scale it down to fit rather than clipping it.
   Clipping would hide part of a control the customer has to interact with;
   scaling keeps all of it visible and clickable. 300 x 0.85 = 255, inside 257.
   The wrapper's height is corrected to match so it does not leave a gap. */
.cf-turnstile { max-width: 100%; }
@media (max-width: 430px) {
  .cf-turnstile {
    transform: scale(0.85);
    transform-origin: left center;
    /* 65px widget scaled to ~55px — reclaim the 10px the transform leaves behind. */
    margin-bottom: -10px;
  }
}

/* Social row.

   Sits under "Get in touch" beside the WhatsApp link. Icon-only, because the
   marks are recognised faster than the words and the footer column is narrow —
   the destination is carried in aria-label for anyone who cannot see them.
   44px targets like every other control on the site. */
.gs-social { display: flex; gap: 10px; margin: 4px 0 12px; }
.gs-social__link {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; border-radius: 50%;
  border: 1px solid var(--hairline-2);
  color: var(--text-3);
  transition: color .2s, border-color .2s, transform .2s;
}
.gs-social__link:hover {
  color: var(--gold);
  border-color: rgba(212, 162, 78, 0.45);
  transform: translateY(-2px);
}
.gs-social__link:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
/* Each platform lights up in its own colour on hover — recognisable without
   painting the footer in brand colours that are not ours. */
.gs-social__link--instagram:hover { color: #E1306C; border-color: rgba(225, 48, 108, 0.5); }
.gs-social__link--facebook:hover  { color: #1877F2; border-color: rgba(24, 119, 242, 0.5); }
@media (prefers-reduced-motion: reduce) { .gs-social__link:hover { transform: none; } }

/* Thank-you page — when and where, right under the order overview. */
.gs-thanks-delivery { margin: 22px 0; padding: 18px 20px; border: 1px solid var(--hairline-2); border-inline-start: 3px solid var(--gold); border-radius: 12px; background: var(--surface); }
.gs-thanks-delivery h2 { font-size: 18px; margin: 0 0 10px; }
.gs-thanks-delivery dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; margin: 0 0 10px; }
.gs-thanks-delivery dt { color: var(--text-dim); font-family: var(--font-mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; padding-top: 3px; }
.gs-thanks-delivery dd { margin: 0; font-size: 16px; color: var(--text); }
.gs-thanks-delivery p { margin: 0; font-size: 13px; }

/* Order-received page: WooCommerce's own overview, order table and address
   blocks printed as bare browser defaults under the styled delivery card --
   a bulleted list, an unruled table, italic addresses. Same card language as
   .gs-thanks-delivery; totals line up as figures; the grand total reads first. */
.woocommerce-order-received .woocommerce-thankyou-order-received { font-family: var(--font-display); font-size: 22px; font-weight: 700; color: var(--text-bright); margin: 0 0 16px; text-wrap: balance; }
.woocommerce-order-received .woocommerce-order-overview { list-style: none; margin: 0 0 8px; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 1px; background: var(--hairline-2); border: 1px solid var(--hairline-2); border-radius: 12px; overflow: hidden; }
.woocommerce-order-received .woocommerce-order-overview li { margin: 0; padding: 12px 14px; background: var(--surface); font-family: var(--font-mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-dim); }
.woocommerce-order-received .woocommerce-order-overview li strong { display: block; margin-top: 4px; font-family: var(--font-body); font-size: 16px; letter-spacing: 0; text-transform: none; color: var(--text); font-variant-numeric: tabular-nums; }
.woocommerce-order-received .woocommerce-order-overview + p { margin: 10px 0 0; font-size: 13px; color: var(--text-3); }
.woocommerce-order-received .woocommerce-order-details,
.woocommerce-order-received .woocommerce-customer-details { margin: 22px 0 0; padding: 18px 20px; border: 1px solid var(--hairline-2); border-radius: 12px; background: var(--surface); }
.woocommerce-order-received .woocommerce-order-details__title,
.woocommerce-order-received .woocommerce-column__title { font-size: 18px; margin: 0 0 12px; }
.woocommerce-order-received .woocommerce-table--order-details { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
.woocommerce-order-received .woocommerce-table--order-details th,
.woocommerce-order-received .woocommerce-table--order-details td { padding: 10px 0; border-bottom: 1px solid var(--hairline); text-align: start; vertical-align: top; font-weight: 400; }
.woocommerce-order-received .woocommerce-table--order-details thead th { padding-top: 0; font-family: var(--font-mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-dim); }
.woocommerce-order-received .woocommerce-table--order-details td:last-child,
.woocommerce-order-received .woocommerce-table--order-details th:last-child { text-align: end; padding-inline-start: 12px; white-space: nowrap; }
.woocommerce-order-received .woocommerce-table--order-details .product-name a { color: var(--text); text-decoration: none; }
.woocommerce-order-received .woocommerce-table--order-details .product-quantity { color: var(--text-dim); font-weight: 400; }
.woocommerce-order-received .woocommerce-table--order-details .wc-item-meta { list-style: none; margin: 4px 0 0; padding: 0; font-size: 12px; color: var(--text-dim); }
.woocommerce-order-received .woocommerce-table--order-details .wc-item-meta p { display: inline; margin: 0; }
.woocommerce-order-received .woocommerce-table--order-details tfoot th { color: var(--text-3); }
.woocommerce-order-received .woocommerce-table--order-details tfoot tr:last-child th,
.woocommerce-order-received .woocommerce-table--order-details tfoot tr:last-child td { border-bottom: 0; }
.woocommerce-order-received .woocommerce-table--order-details tfoot tr:has(.gs-grand-total) th,
.woocommerce-order-received .woocommerce-table--order-details tfoot tr:has(.gs-grand-total) td { font-weight: 700; font-size: 17px; color: var(--gold-bright); border-top: 1px solid var(--hairline-3); }
.woocommerce-order-received .woocommerce-customer-details .col2-set { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 20px; }
.woocommerce-order-received .woocommerce-customer-details .col2-set > * { float: none; width: auto; min-width: 0; }
.woocommerce-order-received .woocommerce-customer-details address { font-style: normal; line-height: 1.6; color: var(--text-2); overflow-wrap: anywhere; }
.woocommerce-order-received .woocommerce-customer-details address p { margin: 6px 0 0; }
/* Phone numbers and emails are left-to-right even on the Arabic page; without
   isolation "+961..." rendered as "961...+". */
.woocommerce-order-received .woocommerce-customer-details--phone,
.woocommerce-order-received .woocommerce-customer-details--email { direction: ltr; unicode-bidi: isolate; text-align: start; }
.gs-rtl.woocommerce-order-received .woocommerce-customer-details--phone,
.gs-rtl.woocommerce-order-received .woocommerce-customer-details--email { text-align: right; }
.woocommerce-order-received .gs-wa-order { margin-top: 20px; }

/* Checkout and the order-received page carry their own WhatsApp links (the
   delivery-area note, "Message us about this order"); on a phone the floating
   bubble only ever sat over the totals and the Place order button. */
@media (max-width: 768px) {
  body.woocommerce-checkout .gs-wa-float { display: none; }
}

/* The cart-actions rule that gives every .button a full row (to keep it clear
   of the WhatsApp bubble) also caught the promo Apply button: the input shrank
   to a stub and Apply ran off the edge. The coupon row keeps its own shape. */
.gs-coupon { display: flex; gap: 8px; align-items: center; }
.gs-coupon .gs-input { flex: 1 1 auto; min-width: 0; }
.gs-cart__actions .gs-coupon .button,
.gs-coupon .gs-coupon__btn { flex: 0 0 auto; width: auto; min-height: 46px; padding: 0 18px; }
.gs-summary__from { font-size: 13px; color: var(--text-3); }

/* ==========================================================================
   Site-audit fixes (October 2026)
   ========================================================================== */

/* Prices built in the browser (pack cards, live header price, buy bar) are an
   isolated left-to-right run, so "$35.00" keeps its shape in an Arabic line. */
.gs-money { direction: ltr; unicode-bidi: isolate; }

/* Cart: quantities save themselves (main.js initCartAutoUpdate). The Update
   button stays in the markup as the no-JavaScript path. */
html.gs-cart-auto .woocommerce-cart-form button.gs-cart__update { display: none; }
.woocommerce-cart-form.is-updating .gs-summary,
.woocommerce-cart-form.is-updating .gs-line__total,
.woocommerce-cart-form.is-updating .gs-freebar,
.woocommerce-cart-form.is-updating .gs-actionbar__v { opacity: .5; transition: opacity .15s ease; }
/* The Checkout buttons are submit buttons now (WooCommerce "proceed": save the
   quantities on screen, then go to checkout). Same look as the old links. */
.wc-proceed-to-checkout { margin: 0; padding: 0; }
button.gs-summary__cta,
button.gs-actionbar__go { font: inherit; font-weight: 700; border: 0; cursor: pointer; }
button.gs-summary__cta { font-size: 15.5px; }

/* Breadcrumbs: every link a target at least 24px square (WCAG 2.5.8). */
.woocommerce-breadcrumb a,
.gs-crumbs a { display: inline-flex; align-items: center; min-height: 24px; min-width: 24px; vertical-align: middle; }

/* Footer bottom bar (© line, payments): #6E6557 was 3.4:1 on the footer
   charcoal; #8F8574 is 5.4:1 and still reads as the quiet line. */
.gs-footer__bar-inner { color: #8F8574; }

/* Recipes hub on an Arabic page: the note that the recipes are English. */
.gs-rintro--lang { margin-top: 10px; font-size: 14px; color: var(--text-dim); }
/* The live price's unit sits after the price in either direction. */
.gs-pdp__price--live .unit { margin-left: 0; margin-inline-start: 6px; }

/* -------------------------------------------------------------------------
   Product choices: source · marbling · chilled/frozen · pack (main.js
   initPackPicker, inc/variations.php). Mobile-first; WooCommerce's selects
   stay underneath.
   ------------------------------------------------------------------------- */
/* The variations form is a flex-wrap row (quantity + button): the picker takes
   a full line of its own and one column that never grows past the panel.
   Without the full line it shrank to its content where a product has no
   source cards (Wagyu Ribeye), and the marbling chips stacked as wide boxes. */
.gs-varpick { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px; margin: 4px 0 18px; flex: 0 0 100%; width: 100%; min-width: 0; }
.gs-varpick .gs-pdp__packs { margin-bottom: 0; }
.gs-vp__h { margin: 0 0 8px; }

/* Source: three cards */
.gs-vp__sources { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.gs-src {
  position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 4px; min-width: 0;
  padding: 12px 12px 11px; text-align: start; cursor: pointer;
  background: var(--surface); border: 1px solid var(--hairline-3); border-radius: 12px; color: var(--text);
  transition: border-color .2s, background .2s, box-shadow .2s;
}
.gs-src:hover:not(:disabled) { border-color: rgba(212,162,78,0.5); }
.gs-src__name { font-family: var(--font-display); font-weight: 700; font-size: 15px; line-height: 1.15; color: var(--text-bright); padding-inline-end: 18px; }
.gs-src__blurb { font-size: 12px; line-height: 1.4; color: var(--text-dim); }
.gs-src__from { margin-top: auto; padding-top: 4px; font-family: var(--font-mono); font-size: 11.5px; letter-spacing: 0.02em; color: var(--gold); }
.gs-src.is-active {
  border-color: var(--gold); box-shadow: inset 0 0 0 1px var(--gold), 0 10px 24px rgba(0,0,0,0.35);
  background: linear-gradient(160deg, rgba(212,162,78,0.16), var(--surface) 70%);
}
.gs-src.is-active::after,
.gs-tog.is-active::after { content: none; }
.gs-src.is-active::before {
  content: ""; position: absolute; top: 10px; inset-inline-end: 10px; width: 16px; height: 16px; border-radius: 50%;
  background: var(--gold) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231A140C' stroke-width='3.2'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / 10px no-repeat;
}
.gs-src:disabled, .gs-tog:disabled, .gs-pdp__pack:disabled { opacity: 0.38; cursor: not-allowed; box-shadow: none; }
.gs-src:focus-visible, .gs-tog:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }

/* Chilled / frozen: a two-way toggle */
.gs-vp__toggle {
  display: grid; grid-template-columns: 1fr 1fr; gap: 4px; max-width: 380px; padding: 4px;
  background: var(--surface-2); border: 1px solid var(--hairline-3); border-radius: var(--r-pill);
}
.gs-tog {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 0 14px;
  background: none; border: 0; border-radius: var(--r-pill); color: var(--text-2); font-weight: 600; font-size: 14.5px; cursor: pointer;
  transition: background .2s, color .2s;
}
.gs-tog svg { flex: none; opacity: 0.8; }
/* Fresh gold, Frozen cream: the same two colours as the cards' pills. */
.gs-tog.is-active { background: #D4A24E; color: #141210; box-shadow: 0 6px 16px rgba(0,0,0,0.35); }
.gs-tog.is-active[data-frozen] { background: #F4EEE2; color: #141210; }
.gs-vp__hint { margin: 8px 0 0; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }

/* Pack chips: unavailable and sold-out states */
.gs-pdp__pack.is-soldout .gs-pdp__pack-p { color: #C77461; }

/* Marbling (pa_grade): chips lower to higher, the price of each beside it,
   and "Higher score = more marbling" under the heading. Shown only when the
   chosen source has two grades or more; one grade is a quiet line instead.
   (The cream spec card — source / kept / net wt / SKU / price — that sat
   here was removed, owner October 2026: the price per kg and the estimate
   lead the page, and the choices say the rest.) */
.gs-vp__note { margin: -4px 0 8px; font-size: 12.5px; line-height: 1.4; color: var(--text-dim); }
/* Compact chips side by side — two or three a row on every screen, like the
   pack chips, never full-width boxes stacked (round 3). */
.gs-varpick .gs-vp__grades,
.gs-varpick--multi .gs-vp__grades {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(118px, 1fr)); gap: 8px;
}
.gs-vp__grades .gs-pdp__pack { min-width: 0; padding: 9px 12px; gap: 2px; }
.gs-vp__grades .gs-pdp__pack-l { direction: ltr; unicode-bidi: isolate; white-space: nowrap; font-size: 15px; }
.gs-vp__grades .gs-pdp__pack-p { white-space: nowrap; font-size: 11.5px; }
.gs-grade__only { font-size: 11px; line-height: 1.3; color: var(--text-dim); }
.gs-grade__only[hidden] { display: none; }
.gs-pdp__pack.is-active .gs-grade__only { color: var(--text-2); }
/* Phones: the chosen chip is cream (mobile.css), so its note is in ink. */
@media (max-width: 860px) {
  .gs-pdp__pack.is-active .gs-grade__only { color: #5A4F40; }
}
.gs-pdp__pack[hidden] { display: none; }
.gs-vp__gradenote { margin: -6px 0 0; font-size: 13.5px; line-height: 1.45; color: var(--text-2); }
.gs-vp__gradenote[hidden] { display: none; }
.gs-vp__desc { max-width: 560px; font-size: 14.5px; line-height: 1.6; color: var(--text-2); }
.gs-vp__desc p { margin: 0 0 8px; }
.gs-vp__desc p:last-child { margin-bottom: 0; }
/* WooCommerce prints the same description above the button: ours is enough. */
.gs-varpick--multi ~ .single_variation_wrap .woocommerce-variation-description { display: none; }
/* The kilo price, clearly beside the piece price (not small print). */
.gs-pdp__perkg {
  display: inline-flex; align-items: baseline; gap: 2px; margin-inline-start: 12px; vertical-align: 0.25em;
  padding: 4px 10px; border: 1px solid var(--hairline-3); border-radius: var(--r-pill);
  font-family: var(--font-mono); font-size: 15px; font-weight: 700; letter-spacing: 0.01em; color: var(--text); white-space: nowrap;
}
/* Sold by weight: kilo price leads, then the usual weights and the note. */
.gs-pdp__est { display: block; margin-top: 8px; font-family: var(--font-body); font-size: 14.5px; line-height: 1.45; color: var(--text-2); }
.gs-pdp__est bdi { font-family: var(--font-mono); font-size: 13.5px; color: var(--text); }
.gs-pdp__weighnote {
  display: block; margin-top: 8px; padding-inline-start: 12px; border-inline-start: 2px solid var(--gold);
  font-family: var(--font-body); font-size: 13.5px; line-height: 1.45; color: var(--text-dim);
}
/* Cart / checkout: an estimate until it is cut. */
.gs-est__approx { color: var(--gold); }
.gs-est__note { font-size: 11.5px; color: var(--text-dim); font-weight: 400; font-family: var(--font-body); white-space: normal; }

/* Phones: sources stack as rows (name + from price, the line under). */
@media (max-width: 600px) {
  .gs-vp__sources { grid-template-columns: 1fr; gap: 6px; }
  .gs-src { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 12px; row-gap: 2px; padding: 11px 14px; }
  .gs-src__name { grid-column: 1; padding-inline-end: 0; }
  .gs-src__from { grid-column: 2; grid-row: 1; margin: 0; padding: 0; white-space: nowrap; }
  .gs-src__blurb { grid-column: 1 / -1; }
  .gs-src.is-active::before { top: auto; bottom: 10px; }
  .gs-vp__toggle { max-width: none; }
}

/* Cards: the sources a cut comes in, as small chips under its name. */
.gs-card__sources { list-style: none; display: flex; flex-wrap: wrap; gap: 4px; margin: 4px 0 2px; padding: 0; }
.gs-card__sources li {
  font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.06em; text-transform: uppercase; line-height: 1;
  padding: 4px 7px; border-radius: var(--r-pill); border: 1px solid rgba(212,162,78,0.35); color: var(--gold-bright); background: rgba(212,162,78,0.06);
}
.gs-rtl .gs-card__sources li { font-family: var(--font-body); letter-spacing: 0; font-size: 11px; }
.gs-vp__hint[hidden], .gs-vp__desc[hidden] { display: none; }
/* Pack chips in the beef picker read "300 g piece": one line, not shouted. */
.gs-varpick--multi .gs-pdp__packs { display: grid; grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); gap: 8px; }
.gs-varpick--multi .gs-pdp__pack { min-width: 0; }
.gs-varpick--multi .gs-pdp__pack-l { text-transform: none; white-space: nowrap; font-size: 15px; letter-spacing: 0; }
.gs-vp[hidden] { display: none; }
/* Arabic: no letter-spacing or mono face on Arabic words (it breaks the joins). */
.gs-rtl .gs-src__from, .gs-rtl .gs-pdp__packs-label { font-family: var(--font-body); letter-spacing: 0; text-transform: none; }
.gs-rtl .gs-src__from { font-size: 12.5px; }
.gs-rtl .gs-src__from .gs-money { font-family: var(--font-mono); }
/* An Arabic grade name ("درجة تعريق 4–5") reads right to left; its figures are isolated. */
.gs-rtl .gs-vp__grades .gs-pdp__pack-l { direction: rtl; font-family: var(--font-body); font-size: 14px; }
.gs-rtl .gs-grade__only { font-size: 12px; }

/* -------------------------------------------------------------------------
   Calmer product page (Oct 2026): essentials first, the rest folded.
   ------------------------------------------------------------------------- */
.gs-pdp__assure { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 14px 0 18px; font-size: 13px; color: var(--text-dim); }
.gs-pdp__assure span { display: inline-flex; align-items: center; gap: 7px; }
.gs-pdp__assure svg { color: var(--gold); flex: none; }
/* "How to cook it" is Version 1's open section again (the .gs-cook rules
   above): the video shows straight away, with its charcoal / pan tabs. */
/* Arabic in the hero gallery: body face, no letter-spacing. */
.gs-rtl .gs-heroD__all, .gs-rtl .gs-heroD__cutline, .gs-rtl .gs-herotoggle__tab { font-family: var(--font-body); letter-spacing: 0; text-transform: none; }
.gs-rtl .gs-heroD__all { font-size: 13px; }
.gs-heroD__shop bdi { font-family: var(--font-mono); }
.gs-card__from { font-family: var(--font-body); font-size: 11.5px; color: var(--text-dim); margin-inline-end: 2px; }
/* On the cream pack label (phones) the sources read as one quiet ink line. */
@media (max-width: 860px) {
  .gs-card__sources { flex-wrap: nowrap; overflow: hidden; gap: 3px; margin: 0 0 3px; }
  .gs-card__sources li { flex: none; padding: 2px 5px; font-size: 8.5px; letter-spacing: 0.04em; color: #6E6557; border-color: #DCCFB8; background: none; }
  .gs-rtl .gs-card__sources li { font-size: 10px; }
}

/* -------------------------------------------------------------------------
   Fresh / Frozen pills (Oct 2026, final site). The original small rounded
   pill on the card photo, top-left, two side by side when a cut is sold both
   ways — made clean, in the brand's colours (owner): Fresh a solid GOLD pill,
   Frozen a solid CREAM pill, charcoal text and icon, a hairline border.
   No transparency, no backdrop-filter, no glow, no text-shadow, no gradient;
   whole-pixel sizes and the browser's default font smoothing, so they stay
   sharp at 1x and 2x on dark and light photographs. Same pills on every card
   (home, shop, related); the product page photo has none (its Fresh / Frozen
   toggle uses the same two colours, below). Markup:
   grillsons_card_temps_html() in inc/template-helpers.php.
   ------------------------------------------------------------------------- */
.gs-card__temps {
  position: absolute; top: 12px; left: 12px; z-index: 1;
  display: flex; flex-wrap: wrap; gap: 6px; max-width: calc(100% - 24px);
  pointer-events: none;
}
[dir="rtl"] .gs-card__temps { left: auto; right: 12px; }
.gs-card__temp {
  display: inline-flex; align-items: center; gap: 5px;
  height: 22px; padding: 0 8px 0 7px; border: 1px solid rgba(20, 18, 16, .15); border-radius: 999px;
  font-family: var(--font-mono); font-size: 11px; font-weight: 700; line-height: 1;
  letter-spacing: 0.12em; text-transform: uppercase; white-space: nowrap; color: #141210;
}
[dir="rtl"] .gs-card__temp { padding: 0 7px 0 8px; }
.gs-card__temp svg { flex: none; display: block; width: 11px; height: 11px; }
.gs-card__temp--fresh  { background: #D4A24E; }
.gs-card__temp--frozen { background: #F4EEE2; }
.gs-rtl .gs-card__temp { font-family: var(--font-body); font-size: 12px; letter-spacing: 0; text-transform: none; padding: 0 9px; }
/* The older Fresh / Frozen / "Keep cold" badges (a cut with no category, a
   chilled jar): the same two solid colours. */
.gs-card__badge--fresh,
.gs-card__badge--frozen {
  -webkit-backdrop-filter: none; backdrop-filter: none; color: #141210; font-weight: 700;
  border: 1px solid rgba(20, 18, 16, .15);
}
.gs-card__badge--fresh  { background: #D4A24E; }
.gs-card__badge--frozen { background: #F4EEE2; }
/* Phones: a size smaller, same corner as the category badge. */
@media (max-width: 860px) {
  .gs-card__temps { top: 8px; left: 8px; gap: 4px; max-width: calc(100% - 16px); }
  [dir="rtl"] .gs-card__temps { left: auto; right: 8px; }
  .gs-card__temp { height: 20px; padding: 0 6px 0 6px; gap: 4px; font-size: 10.5px; letter-spacing: 0.1em; }
  .gs-card__temp svg { width: 10px; height: 10px; }
  .gs-rtl .gs-card__temp { font-size: 11.5px; letter-spacing: 0; padding: 0 8px; }
}

/* Product page add-to-cart (Oct 2026, final site): one line. "Add to cart ·
   EST. $79.00" with a small "est." before the price; where that does not fit
   (a phone, beside the quantity stepper) main.js adds .gs-buybtn--tight and
   the button says only "Add to cart" (the sticky bar shows the estimate). */
.gs-pdp__panel form.cart .single_add_to_cart_button { white-space: nowrap; overflow: hidden; text-overflow: clip; }
/* Phones: the buy row is the screen's width. contain: inline-size keeps the
   one-line text from widening the button (and the row, and the page): the
   button takes the room beside the stepper, and main.js reads whether the
   words fit. */
@media (max-width: 860px) {
  .gs-pdp__panel form.cart .single_add_to_cart_button { contain: inline-size; }
}
.gs-buybtn__est { font-size: 0.7em; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.72; }
.gs-rtl .gs-buybtn__est { font-size: 0.82em; letter-spacing: 0; text-transform: none; }
.gs-buybtn--tight .gs-buybtn__price { display: none; }
