
/* ---- tokens.css ---- */
/* ==========================================================================
   Cartello — tokens.css
   Single source of truth for design variables (shared across all 3 demos).
   Per-demo files in /demos override only the brand/layout knobs below.

   Палітра нейтралів — не Tailwind defaults: власна тепло-нейтральна шкала
   з ледь помітним warm undertone, що читається як «зроблене руками»,
   а не як generic UI kit.
   ========================================================================== */

:root {
  /* --- Brand accent (overridden per demo) ------------------------------ */
  --accent:        #1E40FF;       /* custom electric blue, не #2563eb */
  --accent-600:    #1832D6;
  --accent-700:    #1428AD;
  --accent-soft:   #EEF0FF;
  --on-accent:     #ffffff;

  /* --- Neutral ramp — custom cool-neutral (NOT Tailwind gray) --------- */
  /* Pure white base + slight cool desaturation в midtones.
     Не warm/beige (то едіторіал), не plain Tailwind gray — між ними. */
  --white:   #ffffff;
  --paper:   #ffffff;             /* base bg — чистий білий */
  --gray-50: #F7F7F9;
  --gray-100:#EFEFF2;
  --gray-150:#E5E5E9;
  --gray-200:#D7D7DC;             /* borders */
  --gray-300:#BABABF;
  --gray-400:#85858C;             /* muted text */
  --gray-500:#5C5C64;             /* secondary text */
  --gray-600:#3D3D45;
  --gray-700:#27272D;
  --gray-800:#17171B;
  --gray-900:#0D0D10;
  --ink:     #08080B;             /* near-black, neutral */

  /* --- Semantic surface & text ----------------------------------------- */
  --color-bg:            var(--white);
  --color-bg-alt:        var(--gray-50);
  --color-bg-dark:       var(--gray-900);
  --color-dark:          var(--ink);
  --color-surface:       var(--white);
  --color-text:          #1A1A1E;
  --color-text-muted:    var(--gray-500);
  --color-heading:       var(--ink);
  --color-border:        var(--gray-200);
  --color-border-strong: var(--gray-300);
  --color-on-dark:       #E7E7EA;
  --color-on-dark-muted: #98989F;

  /* --- Status — tuned, not stock ramp --------------------------------- */
  --color-sale:     #C8362A;
  --color-sale-bg:  #F8E9E6;
  --color-success:  #2E7048;
  --color-success-bg:#E7F0EA;
  --color-star:     #D89A2C;
  --color-info:     var(--accent);

  /* --- Typography ------------------------------------------------------- */
  --font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-base: var(--font-sans);
  --font-heading: var(--font-sans);

  --fs-xs:   0.75rem;     /* 12 */
  --fs-sm:   0.8125rem;   /* 13 */
  --fs-sm2:  0.875rem;    /* 14 */
  --fs-base: 0.9375rem;   /* 15 — body */
  --fs-md:   1rem;        /* 16 */
  --fs-lg:   1.125rem;    /* 18 */
  --fs-xl:   1.375rem;    /* 22 */
  --fs-2xl:  1.75rem;     /* 28 */
  --fs-3xl:  clamp(1.875rem, 1.3rem + 2vw, 2.625rem);
  --fs-4xl:  clamp(2.25rem, 1.4rem + 3.4vw, 3.75rem);

  --fw-regular: 400;
  --fw-medium:  500;
  --fw-semibold:600;
  --fw-bold:    700;
  --fw-heavy:   800;

  --lh-tight:    1.08;     /* display — щільніше */
  --lh-snug:     1.28;
  --lh-base:     1.6;

  /* Tracking: окремі токени для display / body / caps — характер різний */
  --tracking-tighter: -0.035em;   /* hero display */
  --tracking-tight:   -0.02em;    /* h1/h2 */
  --tracking-snug:    -0.01em;    /* h3/h4 */
  --tracking-normal:  0;
  --tracking-wide:    0.04em;
  --tracking-caps:    0.14em;     /* eyebrow / micro-labels — ширше для опертя */

  /* --- Spacing scale (4px base) ---------------------------------------- */
  --space-1:  0.25rem;
  --space-2:  0.5rem;
  --space-3:  0.75rem;
  --space-4:  1rem;
  --space-5:  1.25rem;
  --space-6:  1.5rem;
  --space-8:  2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;
  --space-16: 4rem;
  --space-20: 5rem;
  --space-24: 6rem;
  --section-y: clamp(3rem, 2rem + 4vw, 5.5rem);

  /* --- Layout ----------------------------------------------------------- */
  --container:        1280px;
  --container-wide:   1480px;
  --container-narrow: 1040px;
  --gutter: clamp(1rem, 3vw, 2rem);
  --header-h: 70px;
  --announce-h: 40px;

  /* --- Shape (radius overridable per demo) ----------------------------- */
  --radius-sm: 4px;
  --radius:    8px;
  --radius-lg: 14px;
  --radius-xl: 20px;
  --radius-pill: 999px;
  --product-aspect: 1 / 1;   /* demos override: fashion 3/4, furniture 4/5 */

  /* --- Signature: hairlines & underlines ------------------------------- */
  --hairline: 1px solid var(--color-border);
  --hairline-strong: 1px solid var(--color-border-strong);
  --underline-offset: 0.22em;
  --underline-thickness: 1px;

  /* --- Elevation — layered, neutral shadows (depth, not box) ----------- */
  --shadow-xs: 0 1px 1px rgba(13, 13, 16, 0.04);
  --shadow-sm: 0 1px 2px rgba(13, 13, 16, 0.06),
               0 1px 3px rgba(13, 13, 16, 0.04);
  --shadow-md: 0 2px 6px rgba(13, 13, 16, 0.05),
               0 12px 28px -8px rgba(13, 13, 16, 0.12);
  --shadow-lg: 0 4px 12px rgba(13, 13, 16, 0.06),
               0 24px 56px -16px rgba(13, 13, 16, 0.18);
  --shadow-focus: 0 0 0 3px var(--accent-soft);

  /* --- Motion ----------------------------------------------------------- */
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --dur: 0.18s;
  --dur-md: 0.28s;
  --dur-lg: 0.4s;

  /* --- Z-index scale ---------------------------------------------------- */
  --z-header: 120;
  --z-overlay: 190;
  --z-drawer: 200;
  --z-modal: 300;
  --z-toast: 400;

  /* --- Icon fonts (st- system) ------------------------------------------ */
  --st-icon-font: "Phosphor";

  /* --- st-* аліаси (міст до нових назв, поки tokens.css не мігровано) --- */
  --st-accent: var(--accent);
  --st-muted:  var(--color-text-muted);
}

/* ---- demos/fashion.css ---- */
/* ==========================================================================
   Cartello — Demo config: FASHION
   Monochrome, editorial-clean, tall product imagery, sharp corners.
   Load AFTER tokens.css to override brand/layout knobs only.
   ========================================================================== */

:root {
  --accent:      #0F0F11;
  --accent-600:  #060607;
  --accent-700:  #000000;
  --accent-soft: #EEEEF0;
  --on-accent:   #ffffff;

  --color-bg-alt: #F6F6F4;   /* whisper-warm alt для виділених блоків — як у Cartello_2 */

  --radius-sm: 0px;
  --radius:    2px;
  --radius-lg: 2px;
  --radius-xl: 2px;

  --product-aspect: 3 / 4;

  --tracking-caps: 0.12em;
}

/* ---- schemes.css ---- */
/* ==========================================================================
   Cartello — schemes.css
   Selectable color schemes (admin → theme setting `color_scheme`).
   Applied via  <html data-scheme="...">  in header.twig.

   A scheme overrides ONLY the 8 brand knobs — accent family, tinted alt bg,
   and the two dark tones (chrome + deals panel). Layout knobs (radius,
   product-aspect) stay from the active demo (fashion), so the theme keeps its
   signature editorial shape across every vertical.

   Two dark tones, hand-tuned per scheme (NOT a mechanical darken of --accent):
     --color-dark     → topbar #top + .st-footer + dark sections / toasts
     --color-bg-dark  → .st-deals panel (kept a hair LIGHTER than --color-dark,
                        preserving the original chrome↔panel hierarchy)
   Some palettes read best warmer / cooler; a few (slate, rose, gold) sit
   better on a slightly lighter charcoal, not pure ink. White on-dark text
   (--color-on-dark #E7E7EA) keeps ample contrast on all.

   Load order:  tokens.css → demos/fashion.css → schemes.css
   Attribute selector (html[data-scheme]) outranks demo :root, so an empty
   scheme falls back to the fashion default (Noir) — existing sites unchanged.

   Кожна схема — власний приглушений відтінок у характері теми, не стокові
   Tailwind-кольори. Вертикалі: одяг / електроніка / меблі / декор / б'юті /
   косметика / ювелірка / wellness / аксесуари / premium.
   ========================================================================== */

/* --- 1. Noir — apparel, footwear, luxury, universal (= fashion default) --- */
html[data-scheme="noir"] {
  --accent:        #0F0F11;
  --accent-600:    #060607;
  --accent-700:    #000000;
  --accent-soft:   #EEEEF0;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F6F6F4;
  --color-dark:    #08080B;   /* neutral near-black */
  --color-bg-dark: #0D0D10;
}

/* --- 2. Electric — electronics, gadgets, tech ---------------------------- */
html[data-scheme="electric"] {
  --accent:        #1E40FF;
  --accent-600:    #1832D6;
  --accent-700:    #1428AD;
  --accent-soft:   #ECEEFF;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F4F6FA;
  --color-dark:    #0A0F1E;   /* deep navy-black — cool */
  --color-bg-dark: #0E1425;
}

/* --- 3. Sage — furniture, home, eco / organic --------------------------- */
html[data-scheme="sage"] {
  --accent:        #3D5A41;
  --accent-600:    #314A35;
  --accent-700:    #253929;
  --accent-soft:   #ECF0EC;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F5F4F1;
  --color-dark:    #10160F;   /* forest charcoal */
  --color-bg-dark: #151C13;
}

/* --- 4. Terracotta — ceramics, handmade, home decor --------------------- */
html[data-scheme="terracotta"] {
  --accent:        #C2623F;
  --accent-600:    #A44E30;
  --accent-700:    #833C24;
  --accent-soft:   #F8ECE6;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F7F3EE;
  --color-dark:    #211611;   /* warm espresso — a touch lighter, reads warm */
  --color-bg-dark: #291C16;
}

/* --- 5. Rose — beauty, cosmetics, lingerie ------------------------------ */
html[data-scheme="rose"] {
  --accent:        #C24A6B;
  --accent-600:    #A63A58;
  --accent-700:    #842C45;
  --accent-soft:   #FBEDF1;
  --on-accent:     #ffffff;
  --color-bg-alt:  #FBF5F6;
  --color-dark:    #241019;   /* soft dark plum — lighter, softer for beauty */
  --color-bg-dark: #2C1620;
}

/* --- 6. Plum — premium cosmetics, perfume, jewelry ---------------------- */
html[data-scheme="plum"] {
  --accent:        #7B2D8B;
  --accent-600:    #66246F;
  --accent-700:    #4F1C56;
  --accent-soft:   #F4E9F6;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F8F4F8;
  --color-dark:    #170D1B;   /* deep aubergine */
  --color-bg-dark: #1E1223;
}

/* --- 7. Gold — jewelry, gourmet, premium -------------------------------- */
html[data-scheme="gold"] {
  --accent:        #A66A16;
  --accent-600:    #8A5812;
  --accent-700:    #6E460E;
  --accent-soft:   #F7EFDD;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F8F4EB;
  --color-dark:    #1E1810;   /* warm dark brown — slightly lighter, cozy */
  --color-bg-dark: #261F15;
}

/* --- 8. Teal — wellness, spa, natural cosmetics ------------------------- */
html[data-scheme="teal"] {
  --accent:        #0E7C7B;
  --accent-600:    #0A6463;
  --accent-700:    #084E4D;
  --accent-soft:   #E2F2F1;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F0F6F5;
  --color-dark:    #08201F;   /* deep petrol */
  --color-bg-dark: #0C2827;
}

/* --- 9. Slate — minimal, unisex, accessories ---------------------------- */
html[data-scheme="slate"] {
  --accent:        #3E4C59;
  --accent-600:    #313D48;
  --accent-700:    #232D36;
  --accent-soft:   #ECEFF2;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F4F5F7;
  --color-dark:    #171D24;   /* dark slate charcoal — lighter, matches character */
  --color-bg-dark: #1D242D;
}

/* --- 10. Wine — wine, leather goods, premium fashion -------------------- */
html[data-scheme="wine"] {
  --accent:        #8C2F39;
  --accent-600:    #74262E;
  --accent-700:    #5A1D24;
  --accent-soft:   #F6E8E9;
  --on-accent:     #ffffff;
  --color-bg-alt:  #F7F2F2;
  --color-dark:    #1C0D10;   /* deep bordeaux-black */
  --color-bg-dark: #241216;
}

/* ─── Bold / high-energy — «на вогні», молодіжне ────────────────────────── */

/* --- 11. Flame — sport, streetwear, gaming, energy, aggressive sale ------ */
html[data-scheme="flame"] {
  --accent:        #F5390D;
  --accent-600:    #D42E08;
  --accent-700:    #A82305;
  --accent-soft:   #FDE9E2;
  --on-accent:     #ffffff;
  --color-bg-alt:  #FBF3EF;
  --color-dark:    #1A0B07;   /* charred warm black */
  --color-bg-dark: #22110B;
}

/* --- 12. Punch — youth, pop, music, bold beauty, streetwear ------------- */
html[data-scheme="punch"] {
  --accent:        #E6117A;
  --accent-600:    #C60E68;
  --accent-700:    #9E0B53;
  --accent-soft:   #FCE7F1;
  --on-accent:     #ffffff;
  --color-bg-alt:  #FBF2F7;
  --color-dark:    #1C0912;   /* deep magenta-black */
  --color-bg-dark: #241019;
}

/* ---- shapes.css ---- */
/* ==========================================================================
   Cartello — shapes.css
   Two independent look knobs, selectable in theme settings:
     data-radius  → corner roundness   (sharp / soft / rounded)
     data-border  → hairline contrast  (subtle / default / defined)

   Applied via  <html data-radius="…" data-border="…">  in header.twig.
   Load AFTER demos/fashion.css so the attribute selectors (specificity 0,1,1)
   outrank the demo :root (0,1,0). --radius-pill stays 999px in every preset.

   Defaults map to the current fashion look (sharp corners, default hairlines),
   so existing sites render identically until a preset is changed.
   ========================================================================== */

/* --- Corner radius ------------------------------------------------------- */

/* Sharp — editorial, current fashion default */
html[data-radius="sharp"] {
  --radius-sm: 0px;
  --radius:    2px;
  --radius-lg: 2px;
  --radius-xl: 2px;
}

/* Soft — balanced, gentle rounding */
html[data-radius="soft"] {
  --radius-sm: 4px;
  --radius:    8px;
  --radius-lg: 14px;
  --radius-xl: 20px;
}

/* Rounded — friendly, electronics / furniture feel */
html[data-radius="rounded"] {
  --radius-sm: 8px;
  --radius:    12px;
  --radius-lg: 18px;
  --radius-xl: 26px;
}
/* Buttons sit lower than cards, so the same radius reads less round on them —
   give the rounded preset a pill button so "Rounded" actually looks rounded. */
html[data-radius="rounded"] .st-btn { border-radius: var(--radius-pill); }

/* --- Hairline / border contrast ----------------------------------------- */

/* Subtle — airier, borders lifted toward the background */
html[data-border="subtle"] {
  --color-border:        #E5E5E9;
  --color-border-strong: #D2D2D8;
}

/* Default — current token values */
html[data-border="default"] {
  --color-border:        #D7D7DC;
  --color-border-strong: #BABABF;
}

/* Defined — darker, framed / structured look */
html[data-border="defined"] {
  --color-border:        #C2C2C9;
  --color-border-strong: #9C9CA4;
}

/* ---- base.css ---- */
/* ==========================================================================
   Cartello — base.css
   Modern reset, typography, accessibility & lightweight layout helpers.
   (Bootstrap 5 grid is loaded separately and used for column layout.)
   ========================================================================== */

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

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  -webkit-tap-highlight-color: transparent;
  /* НЕ ставимо overflow-x на html/body — це робить корінь скрол-контейнером і в Chrome
     ламає position: sticky хедера («кривий» стікі). Горизонтальний скрол прибираємо
     усуненням джерел переповнення (напр. перенос іконок оплати), а не маскуванням. */
}

body {
  font-family: var(--font-base);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  font-weight: var(--fw-regular);
  color: var(--color-text);
  background: var(--color-bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  /* overflow-x свідомо не задаємо — див. коментар у html: sticky-хедер має лишатись
     нативним, без штучного скрол-контейнера на корені сторінки. */
}

img, picture, svg, video, canvas {
  display: block;
  max-width: 100%;
  height: auto;
}

input, button, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: none; padding: 0; }

a { color: inherit; text-decoration: none; transition: color var(--dur) var(--ease); }

/* Prose / CMS content: links must be visually identifiable.
   Selector covers: information pages, sitemap, account, checkout messages,
   product description. :not([class]) avoids hitting buttons/nav/cards; the
   extra :not(.st-product-card a) guards card title links specifically —
   they're unclassed too, but already have their own gradient-underline
   hover effect (see .st-product-card__title a in components.css) and must
   never get this native underline layered on top. Same for :not(.pagination a):
   native OC {{ pagination }} links carry no class, they're styled as a
   component in components.css and must not inherit this prose underline. */
.st-prose a,
#content a:not([class]):not(.st-product-card a):not(.pagination a),
.st-pdp-section a:not([class]):not(.pagination a) {
  color: var(--accent);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}
/* Links on dark backgrounds (snackbar, toast) */
.st-snack a, .st-toast a {
  color: #fff;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

.st-prose a:hover,
#content a:not([class]):not(.st-product-card a):not(.pagination a):hover,
.st-pdp-section a:not([class]):not(.pagination a):hover {
  color: var(--accent-600);
  text-decoration-thickness: 2px;
}

/* ── .st-prose — rich-text / WYSIWYG typography ─────────────────────────── */
.st-prose {
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  color: var(--color-text);
}

.st-prose > * + * { margin-top: 1.25em; }

.st-prose h1,
.st-prose h2,
.st-prose h3,
.st-prose h4,
.st-prose h5,
.st-prose h6 {
  margin-top: 2em;
  margin-bottom: 0.6em;
  line-height: var(--lh-snug);
  color: var(--color-heading);
}
.st-prose h1 { font-size: var(--fs-2xl); letter-spacing: var(--tracking-tight); }
.st-prose h2 { font-size: var(--fs-xl);  letter-spacing: var(--tracking-snug); }
.st-prose h3 { font-size: var(--fs-lg);  letter-spacing: var(--tracking-snug); }
.st-prose h4 { font-size: var(--fs-md);  font-weight: var(--fw-semibold); }
.st-prose h5,
.st-prose h6 { font-size: var(--fs-sm2); font-weight: var(--fw-semibold); text-transform: uppercase; letter-spacing: var(--tracking-caps); }

.st-prose p { margin: 0; }
.st-prose p + p { margin-top: 1em; }

.st-prose ul,
.st-prose ol {
  padding-left: 1.6em;
  display: flex;
  flex-direction: column;
  gap: 0.4em;
}
.st-prose ul { list-style: disc; }
.st-prose ol { list-style: decimal; }
.st-prose li::marker { color: var(--accent); font-weight: var(--fw-semibold); }

.st-prose blockquote {
  border-left: 3px solid var(--accent);
  padding: var(--space-3) var(--space-5);
  margin: 0;
  background: var(--accent-soft);
  border-radius: 0 var(--radius) var(--radius) 0;
  color: var(--color-heading);
  font-style: italic;
}
.st-prose blockquote p { margin: 0; }

.st-prose hr {
  border: none;
  border-top: var(--hairline);
  margin-block: 2em;
}

.st-prose img {
  border-radius: var(--radius);
  max-width: 100%;
  height: auto;
}

.st-prose table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm2);
}
.st-prose table th,
.st-prose table td {
  padding: var(--space-3) var(--space-4);
  border-bottom: var(--hairline);
  text-align: left;
}
.st-prose table th {
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  background: var(--gray-50);
  font-size: var(--fs-xs);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
}
.st-prose table tbody tr:last-child td { border-bottom: none; }

.st-prose pre,
.st-prose code {
  font-family: ui-monospace, "Cascadia Code", "Fira Code", monospace;
  font-size: 0.875em;
}
.st-prose code {
  background: var(--gray-100);
  border-radius: var(--radius-sm);
  padding: 0.15em 0.4em;
  color: var(--color-heading);
}
.st-prose pre {
  background: var(--gray-900);
  color: var(--gray-100);
  padding: var(--space-5);
  border-radius: var(--radius);
  overflow-x: auto;
}
.st-prose pre code { background: none; padding: 0; color: inherit; }
ul, ol { list-style: none; padding: 0; }

:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 2px; }

h1, h2, h3, h4, h5 {
  font-family: var(--font-heading);
  font-weight: var(--fw-bold);
  line-height: var(--lh-tight);
  color: var(--color-heading);
  text-wrap: balance;
}
h1 { font-size: var(--fs-4xl); font-weight: var(--fw-heavy); letter-spacing: var(--tracking-tighter); }
h2 { font-size: var(--fs-3xl); letter-spacing: var(--tracking-tight); }
h3 { font-size: var(--fs-2xl); letter-spacing: var(--tracking-tight); }
h4 { font-size: var(--fs-xl); letter-spacing: var(--tracking-snug); }
h5 { letter-spacing: var(--tracking-snug); }

p { text-wrap: pretty; }
strong, b { font-weight: var(--fw-semibold); }

::selection { background: var(--accent); color: var(--on-accent); }

/* --- Layout container -------------------------------------------------- */
.st-container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.st-container--wide   { max-width: var(--container-wide); }
.st-container--narrow { max-width: var(--container-narrow); }

/* Bootstrap .container alias — normalized to design-system token.
   OC3 module templates use .container; see ARCHITECTURE §5.1.
   width:100% скидає BS3 breakpoint-width (750/970/1170px). */
.container {
  width: 100%;
  max-width: var(--container-wide);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* Мінімальна висота контентної зони — короткі сторінки (напр. 2 рядки тексту)
   не лишають білого простору під футером */
#main { min-height: 400px; }

/* --- Section rhythm ---------------------------------------------------- */
.st-section { padding-block: var(--section-y); }
.st-section--tight { padding-block: clamp(2rem, 1.5rem + 2vw, 3.5rem); }
.st-section--alt  { background: var(--color-bg-alt); }
.st-section--dark { background: var(--color-dark); color: var(--color-on-dark); }
.st-section--dark h1, .st-section--dark h2, .st-section--dark h3 { color: #fff; }

/* --- Eyebrow / kicker -------------------------------------------------- */
.st-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.7em;
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: var(--space-4);
}
.st-eyebrow::before {
  content: "";
  width: 1.8em;
  height: var(--underline-thickness);
  background: currentColor;
  flex: none;
}
.st-eyebrow--plain::before { display: none; }
.st-eyebrow--center { display: flex; justify-content: center; }

/* --- Utilities --------------------------------------------------------- */
.u-sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.u-noscroll { overflow: hidden; }
.u-text-center { text-align: center; }
.u-mt-0 { margin-top: 0 !important; }

.st-skip-link {
  position: absolute; left: 50%; top: -60px;
  transform: translateX(-50%);
  background: var(--accent); color: var(--on-accent);
  padding: var(--space-3) var(--space-5);
  border-radius: 0 0 var(--radius) var(--radius);
  z-index: var(--z-toast);
  transition: top var(--dur) var(--ease);
}
.st-skip-link:focus { top: 0; }

/* --- Reveal on scroll (progressive enhancement) ------------------------ */
/* Hidden ONLY when JS is active (html.js). No JS = always visible. */
.js [data-reveal] {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
  transition-delay: var(--reveal-delay, 0s);
}
.js [data-reveal].is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
  }
  .js [data-reveal] { opacity: 1 !important; transform: none !important; }
}

/* --- OC alerts (used by cart, review, checkout AJAX responses) --------- */
.alert {
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-sm);
  font-size: var(--fs-sm2);
  margin-bottom: var(--space-4);
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
}
.alert-success { background: var(--color-success-bg); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 20%, transparent); }
.alert-danger  { background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; }
.alert-warning { background: #fffbeb; color: #d97706; border: 1px solid #fed7aa; }
.alert-info    { background: var(--accent-soft); color: var(--accent); border: 1px solid color-mix(in srgb, var(--accent) 25%, transparent); }
#review-form .ph.ph-warning-circle { font-size: 22px; flex-shrink: 0; }
.alert-dismissible { position: relative; padding-right: var(--space-10); }
.alert-dismissible .close {
  position: absolute; top: var(--space-3); right: var(--space-3);
  background: none; border: none; font-size: 1.1rem;
  color: inherit; opacity: 0.6; cursor: pointer; line-height: 1;
}
.alert-dismissible .close:hover { opacity: 1; }

/* BS text-color utilities (grid-only Bootstrap ships no colors — OC core form errors,
   vendor modules like extension/module/custom use these directly). See design-system
   ARCHITECTURE.md §5.2 — shim on the Bootstrap class, don't rename it. */
.text-danger  { color: #dc2626 !important; }
.text-success { color: var(--color-success) !important; }
.text-warning { color: #d97706 !important; }
.text-info    { color: var(--accent) !important; }
.text-primary { color: var(--accent) !important; }
.text-muted   { color: var(--color-text-muted) !important; }

/* BS5 dismiss button (extension/module/custom, extension/total/* — Bootstrap 5 markup) */
.btn-close {
  width: 1em;
  height: 1em;
  padding: 0.3em;
  background: transparent
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3E%3C/svg%3E")
    center / 1em auto no-repeat;
  border: none;
  border-radius: var(--radius-sm);
  opacity: 0.5;
  cursor: pointer;
  transition: opacity var(--dur) var(--ease);
}
.btn-close:hover { opacity: 1; }

/* --- Bootstrap 5 Modal / Collapse — structural CSS only (bootstrap-grid.min.css
   is layout-only, no components); visuals/branding stay in page-specific CSS. --- */
.modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: none;
  outline: 0;
  overflow-x: hidden;
  overflow-y: auto;
}
.modal.show { display: block; }
.modal-dialog {
  position: relative;
  width: auto;
  margin: var(--space-4);
  pointer-events: none;
  transition: transform var(--dur-md) var(--ease-out);
  transform: translateY(-24px);
}
.modal.show .modal-dialog { transform: none; }
@media (min-width: 576px) {
  .modal-dialog { max-width: 500px; margin: var(--space-8) auto; }
  .modal-dialog-centered { min-height: calc(100% - var(--space-16)); }
}
.modal-dialog-centered {
  display: flex;
  align-items: center;
  min-height: calc(100% - var(--space-8));
}
.modal-content {
  position: relative;
  display: flex;
  flex-direction: column;
  width: 100%;
  pointer-events: auto;
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  outline: 0;
}
.modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-5);
  border-bottom: var(--hairline);
}
.modal-title { margin: 0; font-size: var(--fs-lg); font-weight: var(--fw-bold); }
.modal-body { position: relative; flex: 1 1 auto; padding: var(--space-5); }
.modal-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-2);
  padding: var(--space-4) var(--space-5);
  border-top: var(--hairline);
}
.modal-backdrop {
  position: fixed;
  inset: 0;
  z-index: calc(var(--z-modal) - 10);
  background: var(--ink);
  opacity: 0;
  transition: opacity var(--dur-md) var(--ease);
}
.modal-backdrop.show { opacity: 0.5; }
.modal-open { overflow: hidden; }

.collapse:not(.show) { display: none; }
.collapsing {
  height: 0;
  overflow: hidden;
  transition: height var(--dur-md) var(--ease);
}

/* ---- components.css ---- */
/* ==========================================================================
   Cartello — components.css
   Reusable BEM UI blocks. Minimalist, multipurpose, performance-minded.
   ========================================================================== */

/* --- Buttons (clear CTA hierarchy) -------------------------------------
   .btn-st-buy / .btn-st-ghost are aliases used by shared-vendor markup
   (extension/module/custom, extension/total/*, extension/module/st_cta) —
   same component, kept as a separate class name for that markup's own
   conventions rather than rewriting every twig to .st-btn. */
.st-btn, .btn-st-buy, .btn-st-ghost {
  --btn-bg: var(--accent);
  --btn-fg: var(--on-accent);
  --btn-bd: var(--accent);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.55em;
  padding: 0.85em 1.5em;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  line-height: 1.2;
  letter-spacing: 0.005em;
  color: var(--btn-fg);
  background: var(--btn-bg);
  border: 1px solid var(--btn-bd);
  border-radius: var(--radius);
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease),
              color var(--dur) var(--ease), box-shadow var(--dur) var(--ease),
              transform var(--dur) var(--ease);
}
.st-btn:hover, .btn-st-buy:hover { --btn-bg: var(--accent-600); --btn-bd: var(--accent-600); box-shadow: var(--shadow-md); }
.st-btn:active, .btn-st-buy:active, .btn-st-ghost:active { transform: translateY(1px); }
.st-btn__icon { font-size: 1.2em; line-height: 0; transition: transform var(--dur) var(--ease); }
.st-btn:hover .st-btn__icon { transform: translateX(2px); }

/* Hierarchy levels */
.st-btn--secondary {
  --btn-bg: var(--white); --btn-fg: var(--color-heading); --btn-bd: var(--color-border-strong);
}
.st-btn--secondary:hover { --btn-bg: var(--color-heading); --btn-fg: #fff; --btn-bd: var(--color-heading); }

.st-btn--ghost, .btn-st-ghost { --btn-bg: transparent; --btn-fg: var(--color-heading); --btn-bd: transparent; box-shadow: none; }
.st-btn--ghost:hover, .btn-st-ghost:hover { --btn-bg: var(--color-bg-alt); --btn-bd: transparent; box-shadow: none; }

.st-btn--soft { --btn-bg: var(--accent-soft); --btn-fg: var(--accent-700); --btn-bd: var(--accent-soft); }
.st-btn--soft:hover { --btn-bg: var(--accent); --btn-fg: #fff; --btn-bd: var(--accent); }

.st-btn--dark { --btn-bg: var(--color-dark); --btn-fg: #fff; --btn-bd: var(--color-dark); }
.st-btn--dark:hover { --btn-bg: #000; --btn-bd: #000; }

.st-btn--on-dark { --btn-bg: #fff; --btn-fg: var(--color-heading); --btn-bd: #fff; }
.st-btn--on-dark:hover { --btn-bg: rgba(255,255,255,0.85); --btn-bd: rgba(255,255,255,0.85); }
.st-btn--on-dark.st-btn--ghost { --btn-bg: transparent; --btn-fg: #fff; --btn-bd: rgba(255,255,255,0.35); }
.st-btn--on-dark.st-btn--ghost:hover { --btn-bg: #fff; --btn-fg: var(--color-heading); --btn-bd: #fff; }

.st-btn--block { width: 100%; }
.st-btn--lg { padding: 0.95em 1.8em; font-size: var(--fs-md); }
.st-btn--sm { padding: 0.55em 1em; font-size: var(--fs-sm); }
.st-btn--icon { padding: 0.75em; aspect-ratio: 1; }

/* Text link with arrow */
.st-arrow-link {
  display: inline-flex;
  align-items: center;
  gap: 0.45em;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
}
.st-arrow-link i { transition: transform var(--dur) var(--ease); }
.st-arrow-link:hover { color: var(--accent); }
.st-arrow-link:hover i { transform: translateX(4px); }

/* --- Icon action button ------------------------------------------------ */
.st-action {
  position: relative;
  display: inline-grid;
  place-items: center;
  width: 42px; height: 42px;
  border-radius: var(--radius);
  font-size: 1.3rem;
  color: var(--color-heading);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-action:hover { background: var(--color-bg-alt); color: var(--accent); }
.st-action__badge {
  position: absolute;
  top: 2px; right: 0;
  min-width: 17px; height: 17px;
  padding: 0 4px;
  display: grid; place-items: center;
  font-size: 0.625rem; font-weight: var(--fw-bold); line-height: 1;
  color: var(--on-accent); background: var(--accent);
  border-radius: var(--radius-pill);
}
.st-action__badge:empty { display: none; }

/* --- Badge ------------------------------------------------------------- */
.st-badge {
  display: inline-flex; align-items: center; gap: 0.35em;
  padding: 0.32em 0.6em;
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: 0.02em;
  border-radius: var(--radius-sm);
  background: var(--color-bg-alt);
  color: var(--color-heading);
}
.st-badge--sale { background: var(--color-sale); color: #fff; }
.st-badge--new  { background: var(--color-success); color: #fff; }
.st-badge--hot  { background: var(--accent); color: var(--on-accent); }
.st-badge--out  { background: var(--gray-600); color: #fff; }
.st-badge--soft { background: var(--accent-soft); color: var(--accent-700); }

/* --- Rating ------------------------------------------------------------ */
.st-rating { display: inline-flex; align-items: center; gap: 0.4rem; }
.st-rating__stars {
  display: inline-flex;
  font-size: 0.95rem;
  line-height: 1;
}
/* Inside st-rating: default = outline star, .is-on = fill star */
.st-rating__stars .ph-star::before      { font-family: "Phosphor"; }
.st-rating__stars .ph-star.is-on::before { font-family: "Phosphor-Fill"; }
.st-rating__stars .ph-star              { color: var(--gray-300); }
.st-rating__stars .ph-star.is-on        { color: var(--color-star); }
.st-rating__count { font-size: var(--fs-sm); color: var(--color-text-muted); }

/* --- Price (tabular-nums for numeric alignment — luxury detail) ------- */
.st-price {
  display: inline-flex; align-items: baseline; gap: 0.5rem;
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum", "lnum", "ss01";
}
.st-price__now {
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  color: var(--color-heading);
  letter-spacing: var(--tracking-tight);
}
.st-price__now--sale { color: var(--color-sale); }
.st-price__old { font-size: var(--fs-sm2); color: var(--color-text-muted); text-decoration: line-through; text-decoration-thickness: var(--underline-thickness); }
.st-price__save { font-size: var(--fs-xs); font-weight: var(--fw-semibold); color: var(--color-success); letter-spacing: 0.02em; }

/* Product cards on a dark section (e.g. st_viewed bg=dark) — text tokens default to ink, so remap to on-dark */
.st-section--dark .st-product-card__title a,
.st-section--dark .st-price__now { color: #fff; }
.st-section--dark .st-product-card__cat,
.st-section--dark .st-price__old,
.st-section--dark .st-eyebrow,
.st-section--dark .st-section-head__lead { color: var(--color-on-dark-muted); }

/* --- Section heading --------------------------------------------------- */
.st-section-head {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: var(--space-6);
  margin-bottom: var(--space-10);
  position: relative;
}
.st-section-head__title {
  font-size: var(--fs-3xl);
  letter-spacing: var(--tracking-tight);
  position: relative;
  padding-left: var(--space-4);
}
.st-section-head__title::before {
  content: "";
  position: absolute;
  left: 0; top: 0.18em; bottom: 0.18em;
  width: 3px;
  background: var(--accent);
}
.st-section-head__lead { margin-top: var(--space-3); color: var(--color-text-muted); max-width: 52ch; line-height: 1.55; }
.st-section-head--center { flex-direction: column; align-items: center; text-align: center; }
.st-section-head--center .st-section-head__title { padding-left: 0; }
.st-section-head--center .st-section-head__title::before {
  left: 50%; transform: translateX(-50%);
  top: auto; bottom: 100%; margin-bottom: var(--space-4);
  width: 32px; height: 3px;
}
.st-section-head--center .st-section-head__lead { margin-inline: auto; }
@media (max-width: 768px) {
  .st-section-head { flex-direction: column; align-items: flex-start; gap: var(--space-4); margin-bottom: var(--space-8); }
  .st-section-head--center { align-items: center; }
}

/* --- Product card ------------------------------------------------------ */
.st-product-card { position: relative; display: flex; flex-direction: column; height: 100%; }
.st-product-card--oos { opacity: .5; }
.st-product-card__media {
  position: relative;
  display: block;
  aspect-ratio: var(--product-aspect);
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--color-bg-alt);
}
.st-product-card__img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform var(--dur-lg) var(--ease), opacity var(--dur-md) var(--ease);
}
.st-product-card__img--alt { position: absolute; inset: 0; opacity: 0; }
.st-product-card--has-alt:hover .st-product-card__img--main { opacity: 0; }
.st-product-card--has-alt:hover .st-product-card__img--alt { opacity: 1; transform: scale(1.05); }
.st-product-card:not(.st-product-card--has-alt):hover .st-product-card__img--main { transform: scale(1.05); }

.st-product-card__badges {
  position: absolute; top: var(--space-3); left: var(--space-3);
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-2);
  z-index: 2;
}

.st-product-card__actions {
  position: absolute; top: var(--space-3); right: var(--space-3);
  display: flex; flex-direction: column; gap: var(--space-2);
  z-index: 2;
}
.st-product-card__act {
  display: grid; place-items: center;
  width: 40px; height: 40px;
  font-size: 1.2rem;
  color: var(--color-heading);
  background: var(--white);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  opacity: 0;
  transform: translateX(10px);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease),
              background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-product-card__act:nth-child(2) { transition-delay: 0.04s; }
.st-product-card__act:nth-child(3) { transition-delay: 0.08s; }
.st-product-card:hover .st-product-card__act,
.st-product-card:focus-within .st-product-card__act { opacity: 1; transform: none; }
.st-product-card__act:hover { background: var(--accent); color: var(--on-accent); }
.st-product-card__act.is-active { background: var(--color-sale); color: #fff; }

.st-product-card__cart {
  position: absolute; left: var(--space-3); right: var(--space-3); bottom: var(--space-3);
  z-index: 2;
  transform: translateY(12px);
  opacity: 0;
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.st-product-card:hover .st-product-card__cart,
.st-product-card:focus-within .st-product-card__cart { opacity: 1; transform: none; }

.st-product-card__body { padding-top: var(--space-4); display: flex; flex-direction: column; gap: 0.3rem; }
.st-product-card__cat {
  font-size: var(--fs-xs);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--color-text-muted);
  font-weight: var(--fw-semibold);
}
.st-product-card__title {
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-snug);
  letter-spacing: var(--tracking-snug);
}
.st-product-card__title a {
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 0% var(--underline-thickness);
  background-position: 0 100%;
  background-repeat: no-repeat;
  padding-bottom: var(--underline-offset);
  transition: background-size var(--dur-md) var(--ease-out), color var(--dur) var(--ease);
}
.st-product-card:hover .st-product-card__title a,
.st-product-card__title a:hover { background-size: 100% var(--underline-thickness); }
.st-product-card__row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); margin-top: var(--space-2); }
.st-product-card__body .st-stock-badge { font-size: var(--fs-xs); font-weight: var(--fw-semibold); align-self: flex-start; }
.st-product-card__swatches { display: inline-flex; gap: 0.35rem; }
.st-product-card__swatch { width: 16px; height: 16px; border-radius: 50%; border: 1px solid rgba(0,0,0,0.12); box-shadow: inset 0 0 0 2px #fff; cursor: pointer; }
.st-product-card__swatch.is-active { box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px var(--color-heading); }

@media (hover: none) {
  .st-product-card__act, .st-product-card__cart { opacity: 1; transform: none; }
}

/* --- Product rail (shared) --------------------------------------------- */
.st-product-rail { position: relative; }
.st-product-rail__nav { display: flex; gap: var(--space-2); }
.st-rail-btn { width: 42px; height: 42px; display: grid; place-items: center; border: 1px solid var(--color-border-strong); border-radius: var(--radius); font-size: 1.2rem; transition: all var(--dur) var(--ease); }
.st-rail-btn:hover { background: var(--color-heading); color: #fff; border-color: var(--color-heading); }
.st-rail-btn.swiper-button-disabled { opacity: 0.35; pointer-events: none; }

/* --- Product grid (shared between home & shop) ------------------------- */
.st-product-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-6) var(--space-5); }
@media (min-width: 640px) { .st-product-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 992px) { .st-product-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 992px) { .st-product-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 992px) { .st-product-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
@media (min-width: 992px) { .st-product-grid--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } }
@media (min-width: 992px) { .st-product-grid--6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } }

/* --- Product card list variant ----------------------------------------- */
.st-product-card--list { flex-direction: row; gap: var(--space-5); align-items: stretch; }
.st-product-card--list .st-product-card__media { width: 38%; flex: none; aspect-ratio: 1; }
.st-product-card--list .st-product-card__body { padding-top: 0; justify-content: center; }
.st-product-card--list .st-product-card__cart { position: static; opacity: 1; transform: none; width: max-content; margin-top: var(--space-4); }
@media (max-width: 560px) { .st-product-card--list { flex-direction: column; } .st-product-card--list .st-product-card__media { width: 100%; } }

/* --- Chip / filter pill ------------------------------------------------ */
.st-chip {
  display: inline-flex; align-items: center; gap: 0.4em;
  padding: 0.5em 0.9em;
  font-size: var(--fs-sm2); font-weight: var(--fw-medium);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  background: var(--white);
  transition: all var(--dur) var(--ease);
}
.st-chip:hover { border-color: var(--color-heading); }
.st-chip.is-active { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.st-chip__remove { font-size: 0.9em; opacity: 0.7; }

/* --- Quantity stepper -------------------------------------------------- */
.st-qty { display: inline-flex; align-items: center; border: 1px solid var(--color-border-strong); border-radius: var(--radius); overflow: hidden; }
.st-qty__btn { width: 42px; height: 46px; display: grid; place-items: center; font-size: 1.1rem; transition: background var(--dur) var(--ease); }
.st-qty__btn:hover { background: var(--color-bg-alt); color: var(--accent); }
.st-qty__input { width: 44px; height: 46px; text-align: center; border: none; outline: none; font-weight: var(--fw-semibold); -moz-appearance: textfield; }
.st-qty__input::-webkit-outer-spin-button, .st-qty__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* --- Tabs -------------------------------------------------------------- */
.st-tabs__nav { display: flex; flex-wrap: wrap; gap: var(--space-8); border-bottom: var(--hairline); margin-bottom: var(--space-6); }
.st-tabs__tab {
  position: relative; padding: var(--space-4) 0;
  font-size: var(--fs-md); font-weight: var(--fw-semibold);
  letter-spacing: var(--tracking-snug);
  color: var(--color-text-muted);
  transition: color var(--dur) var(--ease);
}
.st-tabs__tab::after {
  content: ""; position: absolute;
  left: 0; bottom: -1px; width: 100%;
  height: 1.5px;
  background: var(--color-heading);
  transform: scaleX(0); transform-origin: left;
  transition: transform var(--dur-md) var(--ease-out);
}
.st-tabs__tab:hover { color: var(--color-heading); }
.st-tabs__tab:hover::after { transform: scaleX(0.35); }
.st-tabs__tab.is-active { color: var(--color-heading); }
.st-tabs__tab.is-active::after { transform: scaleX(1); }
.st-tabs__panel { display: none; }
.st-tabs__panel.is-active { display: block; animation: fade-up var(--dur-md) var(--ease); }
@keyframes fade-up { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes ph-spin { to { transform: rotate(360deg); } }
.ph-spin::before { display: inline-block; animation: ph-spin 1s linear infinite; }

/* --- Breadcrumb -------------------------------------------------------- */
.st-breadcrumb { display: flex; flex-wrap: wrap; align-items: center; gap: 0.375rem 0.5rem; font-size: 0.6875rem; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.07em; }
.st-breadcrumb__sep { opacity: 0.45; }
.st-breadcrumb a:hover { color: var(--accent); }
.st-breadcrumb__current { color: var(--color-heading); font-weight: var(--fw-semibold); }

/* --- Pagination -------------------------------------------------------- */
/* Стандартний {{ pagination }} рендериться з core-бібліотеки system/library/pagination.php
   як <ul class="pagination"><li><a>…. Бібліотеку НЕ патчимо — стилізуємо нативну
   розмітку через контекст (див. skill opencart-theme: модифікація контекстом). */
.st-pagination { display: flex; align-items: center; justify-content: center; }
.pagination {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: 0.4rem; margin: 0; padding: 0; list-style: none;
}
.pagination > li > a,
.pagination > li > span {
  display: inline-grid; place-items: center;
  min-width: 44px; height: 44px; padding: 0 0.4rem;
  font-weight: var(--fw-semibold); font-size: var(--fs-sm2);
  color: var(--color-heading); text-decoration: none;
  border: 1px solid var(--color-border); border-radius: var(--radius);
  transition: all var(--dur) var(--ease);
}
.pagination > li > a:hover { border-color: var(--color-heading); text-decoration: none; }
.pagination > li.active > span { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }

/* --- Newsletter input -------------------------------------------------- */
.st-field-inline { display: flex; gap: var(--space-2); }
.st-field-inline__input {
  flex: 1; min-width: 0;
  padding: 0.85em 1.1em;
  font-size: var(--fs-sm2);
  color: var(--color-text);
  background: var(--white);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.st-field-inline__input:focus { border-color: var(--accent); box-shadow: var(--shadow-focus); }
.st-field-inline__input::placeholder { color: var(--color-text-muted); }

/* --- Modal (quickview, auth, search) ----------------------------------- */
.st-modal {
  position: fixed; inset: 0; z-index: var(--z-modal);
  display: grid; place-items: center;
  padding: var(--gutter);
  visibility: hidden; opacity: 0;
  transition: opacity var(--dur-md) var(--ease), visibility var(--dur-md);
}
.st-modal.is-open { visibility: visible; opacity: 1; }
.st-modal__backdrop { position: absolute; inset: 0; background: rgba(16,18,24,0.55); backdrop-filter: blur(2px); }
.st-modal__dialog {
  position: relative;
  width: min(960px, 100%);
  max-height: calc(100vh - 2 * var(--gutter));
  overflow: auto;
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  transform: translateY(16px) scale(0.98);
  transition: transform var(--dur-md) var(--ease-out);
}
.st-modal.is-open .st-modal__dialog { transform: none; }
.st-modal__close {
  position: absolute; top: var(--space-4); right: var(--space-4); z-index: 3;
  width: 40px; height: 40px; display: grid; place-items: center;
  font-size: 1.3rem; border-radius: 50%;
  background: var(--white); box-shadow: var(--shadow-sm);
}
.st-modal__close:hover { background: var(--color-heading); color: #fff; }

/* Auth modal layout */
.st-auth { display: grid; gap: var(--space-6); padding: var(--space-6); border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); }
@media (min-width: 640px) { .st-auth { grid-template-columns: 1fr 1fr; } }
.st-auth__title { font-size: var(--fs-xl); font-weight: var(--fw-bold); margin-bottom: var(--space-5); }
.st-auth__login { display: flex; flex-direction: column; gap: var(--space-4); }
.st-auth__register { display: flex; flex-direction: column; gap: var(--space-4); border-top: var(--hairline); padding-top: var(--space-6); }
@media (min-width: 640px) { .st-auth__register { border-top: none; border-left: var(--hairline); padding-top: 0; padding-left: var(--space-8); } }
.st-auth__forgot { font-size: var(--fs-sm2); color: var(--color-text-muted); margin-top: calc(-1 * var(--space-2)); }
.st-auth__forgot:hover { color: var(--accent); }
.st-auth__text { color: var(--color-text-muted); font-size: var(--fs-sm2); }
.st-field { display: flex; flex-direction: column; gap: var(--space-2); }
.st-field__label { font-size: var(--fs-sm2); font-weight: var(--fw-medium); color: var(--color-heading); }
.st-input {
  padding: 0.75em 1em;
  font-size: var(--fs-sm2);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  outline: none;
  background: var(--white);
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.st-input:focus { border-color: var(--accent); box-shadow: var(--shadow-focus); }

.st-select {
  display: block; width: 100%;
  padding: 0.75em 2.5em 0.75em 1em;
  font-size: var(--fs-sm2);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  outline: none;
  background-color: var(--white);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2385858C' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0.9em center;
  cursor: pointer;
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.st-select:focus { border-color: var(--accent); box-shadow: var(--shadow-focus); }

/* Search modal — compact drop-down під хедером (не fullscreen) */
.st-modal--search {
  align-items: flex-start;     /* панель зверху, не по центру */
  padding: 0;
}
.st-modal--search .st-modal__dialog {
  width: 100%;
  max-width: 640px;
  max-height: 80vh;
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
  transform: translateY(-16px);
}
.st-modal--search.is-open .st-modal__dialog { transform: none; }

.st-search-overlay__bar {
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border-bottom: 1px solid var(--color-border);
  font-size: var(--fs-lg);
}
.st-search-overlay__input {
  flex: 1; background: none; border: none; outline: none;
  font-size: inherit; color: var(--color-heading);
}
.st-search-overlay__input::placeholder { color: var(--color-text-muted); }
.st-search-overlay__suggest { padding: var(--space-4) var(--space-5); }
.st-search-overlay__label { font-size: var(--fs-xs); letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--color-text-muted); font-weight: var(--fw-semibold); margin-bottom: var(--space-3); }
.st-search-overlay__tags { display: flex; flex-wrap: wrap; gap: var(--space-2); }

/* --- Add-to-cart modal ------------------------------------------------- */
.st-modal--cart .st-modal__dialog { max-width: 400px; }
.st-atc-modal {
  display: flex; flex-direction: column; align-items: center;
  gap: var(--space-4); text-align: center;
  padding: var(--space-10) var(--space-8) var(--space-8);
}
.st-atc-modal__icon { font-size: 3rem; line-height: 1; color: var(--color-success); }
.st-atc-modal__img  { width: 88px; height: 88px; object-fit: cover; border-radius: var(--radius-md); }
.st-atc-modal__label { font-size: var(--fs-lg); font-weight: var(--fw-semibold); color: var(--color-heading); margin: 0; }
.st-atc-modal__name  { font-size: var(--fs-sm2); color: var(--color-text-muted); margin: 0; }
.st-atc-modal__total { font-size: var(--fs-sm2); font-weight: var(--fw-semibold); margin: 0; }
.st-atc-modal__actions { display: flex; gap: var(--space-3); flex-wrap: wrap; justify-content: center; width: 100%; margin-top: var(--space-2); }
.st-atc-modal__actions .st-btn { flex: 1; min-width: 0; }

/* --- Quick order modal (PDP) -------------------------------------------- */
.st-modal--quick-order .st-modal__dialog { max-width: 460px; }
.st-qo-dialog { padding: var(--space-8) var(--space-6) var(--space-6); }
.st-qo-title { font-size: var(--fs-lg); font-weight: var(--fw-bold); color: var(--color-heading); margin: 0 0 var(--space-4); padding-right: var(--space-8); }
.st-qo-product { display: flex; gap: var(--space-3); align-items: flex-start; padding-bottom: var(--space-4); margin-bottom: var(--space-4); border-bottom: var(--hairline); }
.st-qo-product__img { width: 64px; height: 85px; object-fit: cover; border-radius: var(--radius-md); flex-shrink: 0; }
.st-qo-product__body { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-2); min-width: 0; }
.st-qo-product__name { font-size: var(--fs-sm2); font-weight: var(--fw-medium); color: var(--color-heading); }
.st-qty--sm .st-qty__btn { width: 34px; height: 36px; font-size: 0.95rem; }
.st-qty--sm .st-qty__input { width: 38px; height: 36px; }
.st-qo-intro { font-size: var(--fs-sm2); color: var(--color-text-muted); margin: 0 0 var(--space-4); }
.st-qo-alert { font-size: var(--fs-sm2); padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); margin-bottom: var(--space-4); }
/* Options list: tighter gap between options than to the name field below it
   (which must match the space-3 gap already used between name and phone). */
#st-qo-options.st-pdp-variants { gap: var(--space-2); margin-bottom: var(--space-6); }
#st-qo-options .st-pdp-variant__label { margin-bottom: 0; }
.st-qo-alert--error { background: rgba(220,38,38,.08); color: #dc2626; border: 1px solid rgba(220,38,38,.25); }
.st-qo-agree { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--space-2); margin-top: var(--space-4); font-size: var(--fs-xs); color: var(--color-text-muted); cursor: pointer; }
.st-qo-agree input { margin-top: 3px; flex-shrink: 0; }
.st-qo-agree span { flex: 1 1 auto; min-width: 0; }
.st-qo-agree a { color: var(--accent); }
.st-qo-agree .text-danger { flex-basis: 100%; margin-top: 0; }
.st-qo-success { display: flex; flex-direction: column; align-items: center; gap: var(--space-4); text-align: center; padding: var(--space-10) var(--space-4); }
.st-qo-success i { font-size: 3rem; line-height: 1; color: var(--color-success); }
.st-qo-success p { margin: 0; font-size: var(--fs-md); color: var(--color-heading); }
#st-qo-form .st-field.required .st-field__label::after { content: " *"; color: #dc2626; }
#st-qo-form .st-input.has-error, #st-qo-form .st-select.has-error { border-color: #dc2626; }
#st-qo-form .has-error .text-danger,
#st-qo-form .st-field .text-danger { display: block; margin-top: 0; font-size: var(--fs-xs); }

/* --- Top snackbar (wishlist / compare feedback) ------------------------ */
.st-snack-stack {
  position: fixed; top: var(--space-5); left: 0; right: 0;
  z-index: var(--z-toast);
  display: flex; flex-direction: column; align-items: center; gap: var(--space-2);
  padding-inline: var(--space-4);
  pointer-events: none;
}
.st-snack {
  display: flex; align-items: center; gap: var(--space-3);
  max-width: 100%;
  padding: var(--space-3) var(--space-5);
  background: var(--color-dark); color: #fff;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  font-size: var(--fs-sm2);
  pointer-events: auto;
  opacity: 0; transform: translateY(-12px);
  transition: opacity var(--dur-md) var(--ease-out), transform var(--dur-md) var(--ease-out);
}
.st-snack.is-show { opacity: 1; transform: none; }
.st-snack__icon { font-size: 1.1rem; color: var(--color-success); flex-shrink: 0; }

/* --- Toast (internal use) ---------------------------------------------- */
.st-toast-stack { position: fixed; right: var(--space-5); bottom: var(--space-5); z-index: var(--z-toast); display: flex; flex-direction: column; gap: var(--space-3); }
.st-toast {
  display: flex; align-items: center; gap: var(--space-3);
  min-width: 260px; max-width: 360px;
  padding: var(--space-4) var(--space-5);
  /* Deliberately NOT --color-dark: that's also .st-footer's background, and
     the toast pops up right over the footer (subscribe form lives there) —
     same color on same color reads as invisible. gray-800 stays dark but
     distinct, plus a light border for an edge against any dark section. */
  background: var(--gray-800); color: #fff;
  border: 1px solid rgba(255,255,255,.1);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lg);
  transform: translateX(120%);
  transition: transform var(--dur-md) var(--ease-out);
}
.st-toast.is-show { transform: none; }
.st-toast__icon { font-size: 1.4rem; color: var(--color-success); }
.st-toast__text { font-size: var(--fs-sm2); }
.st-toast__text strong { font-weight: var(--fw-semibold); }

/* --- Loader skeleton --------------------------------------------------- */
.st-skeleton { position: relative; overflow: hidden; background: var(--gray-150); }
.st-skeleton::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent);
  transform: translateX(-100%);
  animation: shimmer 1.4s infinite;
}
@keyframes shimmer { 100% { transform: translateX(100%); } }

/* --- Datetimepicker widget --------------------------------------------
   Global chrome for OpenCart's bootstrap-datetimepicker. The vendor CSS
   (loaded per-page by the controllers that need it — account, checkout,
   affiliate, product options, paypal…) only styles the calendar grid; it
   relies on Bootstrap's `.dropdown-menu` for hide/position/background.
   Cartello ships grid-only Bootstrap, so we supply that chrome here once,
   globally, instead of per page. See project_bootstrap_grid_only_dropdown. */
.bootstrap-datetimepicker-widget.dropdown-menu {
  display: none;
  position: absolute;
  width: auto !important;
  min-width: 260px;
  padding: 0.5rem !important;
  background: var(--white);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
}
.bootstrap-datetimepicker-widget table td,
.bootstrap-datetimepicker-widget table th {
  color: var(--color-text);
  font-size: var(--fs-sm);
}
.bootstrap-datetimepicker-widget table th.picker-switch {
  font-weight: var(--fw-medium);
  color: var(--color-heading);
}
.bootstrap-datetimepicker-widget table td.day:hover,
.bootstrap-datetimepicker-widget table td span:hover,
.bootstrap-datetimepicker-widget table th:hover {
  background: var(--gray-100);
}
.bootstrap-datetimepicker-widget table td.active,
.bootstrap-datetimepicker-widget table td.active:hover,
.bootstrap-datetimepicker-widget table td span.active {
  background: var(--accent);
  color: var(--white);
  text-shadow: none;
}
.bootstrap-datetimepicker-widget table td.old,
.bootstrap-datetimepicker-widget table td.new,
.bootstrap-datetimepicker-widget table td.cw {
  color: var(--color-text-muted);
}

/* ---- layout.css ---- */
/* ==========================================================================
   Cartello — layout.css
   Announcement bar, header/nav, mega menu, drawers, search, footer.
   Mobile-first.
   ========================================================================== */

/* --- Top bar (#top) ---------------------------------------------------- */
#top {
  background: var(--color-dark);
  color: var(--color-on-dark);
  font-size: var(--fs-sm);
}
.st-topbar__inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); min-height: var(--announce-h); }
.st-topbar__side { display: none; align-items: center; gap: var(--space-5); }
.st-topbar__item { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--color-on-dark-muted); }
.st-topbar__item:hover { color: #fff; }
.st-topbar__item i { color: var(--accent); font-size: 1.05rem; }
.st-announce__rotator { flex: 1; text-align: center; height: 1.5em; overflow: hidden; position: relative; }
.st-announce__track { display: flex; flex-direction: column; transition: transform var(--dur-lg) var(--ease); }
.st-announce__msg { height: 1.5em; line-height: 1.5em; white-space: nowrap; }
.st-announce__msg strong { color: var(--accent); font-weight: var(--fw-bold); }
/* st-switch — компактний кастомний дропдаун для валюти/мови */
.st-switch { position: relative; }
.st-switch__toggle {
  display: inline-flex; align-items: center; gap: 0.35rem;
  padding: 0; background: none; border: none;
  color: var(--color-on-dark-muted); font-size: var(--fs-sm);
  cursor: pointer;
  transition: color var(--dur) var(--ease);
}
.st-switch__toggle:hover { color: #fff; }
.st-switch__toggle .ph-caret-down { font-size: 0.7rem; transition: transform var(--dur) var(--ease); }
.st-switch.is-open .st-switch__toggle { color: #fff; }
.st-switch.is-open .st-switch__toggle .ph-caret-down { transform: rotate(180deg); }
.st-switch__dropdown {
  position: absolute; top: calc(100% + 8px); left: 50%; transform: translateX(-50%) translateY(-4px);
  min-width: max-content;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  padding: var(--space-1);
  z-index: var(--z-overlay);
  opacity: 0; visibility: hidden;
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
}
.st-switch.is-open .st-switch__dropdown { opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0); }
.st-switch__option {
  display: flex; align-items: center; justify-content: flex-start; gap: var(--space-3);
  width: 100%;
  padding: 0.5rem var(--space-3);
  font-size: var(--fs-sm2); color: var(--color-text);
  border-radius: var(--radius-sm);
  transition: background var(--dur) var(--ease);
  cursor: pointer; white-space: nowrap;
}
.st-switch__option:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-switch__option.is-active { font-weight: var(--fw-semibold); color: var(--color-heading); }
.st-switch__option.is-active::after { content: "✓"; font-size: 0.8em; color: var(--accent); margin-left: auto; }
@media (min-width: 992px) { .st-topbar__side { display: flex; } }

/* --- Header ------------------------------------------------------------ */
.st-header { position: sticky; top: 0; z-index: var(--z-header); background: var(--color-bg); border-bottom: 1px solid var(--color-border); transition: box-shadow var(--dur) var(--ease); }
.st-header.is-stuck { box-shadow: var(--shadow-sm); }

.st-header__main { }
.st-header__inner { display: flex; align-items: center; gap: var(--space-5); min-height: var(--header-h); }

.st-header__burger { display: inline-grid; }
.st-header__logo { margin-right: auto; }
@media (min-width: 992px) {
  .st-header__burger { display: none; }
  .st-header__logo { margin-right: var(--space-10); }
}

.st-logo {
  display: inline-flex; align-items: center;
  font-size: 1.625rem;
  font-weight: var(--fw-heavy);
  letter-spacing: -0.035em;
  color: var(--color-heading);
}
.st-logo__dot { color: var(--accent); }
.st-logo img { display: block; height: var(--logo-height, 1.625rem); width: auto; }
.st-footer__brand .st-logo img { height: 1.75rem; }

/* Search (desktop inline) */
.st-header__search { display: none; flex: 1; max-width: 520px; position: relative; }
@media (min-width: 992px) {
  .st-header__search { display: block; }
}
.st-search {
  position: relative;
  display: flex; align-items: center;
  background: var(--gray-50);
  border: 1px solid transparent;
  border-radius: var(--radius);
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.st-search:hover { background: var(--gray-100); }
.st-search:focus-within {
  background: var(--white);
  border-color: var(--color-border-strong);
  box-shadow: var(--shadow-focus);
}
.st-search__icon {
  position: absolute;
  left: 14px; top: 50%; transform: translateY(-50%);
  color: var(--gray-400);
  font-size: 1.15rem;
  pointer-events: none;
}
.st-search:focus-within .st-search__icon { color: var(--color-heading); }
.st-search__input {
  flex: 1; min-width: 0;
  border: none; outline: none; background: none;
  padding: 0 var(--space-4) 0 2.6rem;
  height: 42px;
  font-size: var(--fs-sm2);
  color: var(--color-text);
}
.st-search__input::placeholder { color: var(--gray-400); }

/* Header actions */
.st-header__actions { display: flex; align-items: center; gap: 0.15rem; margin-left: auto; }

/* Mobile search toggle — hidden on desktop */
.st-action--search-m { }
@media (min-width: 992px) { .st-action--search-m { display: none; } }

/* Account toggle (icon on mobile, icon+label on wide desktop) */
.st-account__toggle span { display: none; font-size: var(--fs-sm2); font-weight: var(--fw-semibold); }
@media (min-width: 992px) {
  .st-account__toggle {
    display: inline-flex;
    align-items: center;
    width: auto;
    height: 42px;
    padding: 0 var(--space-3);
    gap: 0.4rem;
    white-space: nowrap;
  }
  .st-account__toggle span { display: inline; }
}
/* Caret indicator — завжди видно, що це dropdown */
.st-account__toggle::after {
  content: "";
  display: none;
  width: 0; height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid currentColor;
  opacity: 0.6;
  transition: transform var(--dur) var(--ease);
}
@media (min-width: 992px) {
  .st-account__toggle::after { display: block; }
}
.st-account.is-open .st-account__toggle::after { transform: rotate(180deg); }

/* Account logged-in dropdown */
.st-account { position: relative; }
.st-account__menu {
  position: absolute; top: calc(100% + 6px); right: 0;
  min-width: 200px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  padding: var(--space-2);
  z-index: var(--z-overlay);
  opacity: 0; visibility: hidden; transform: translateY(-6px);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
}
.st-account.is-open .st-account__menu { opacity: 1; visibility: visible; transform: none; }
.st-account__item {
  display: flex; align-items: center; gap: var(--space-3);
  padding: 0.6rem var(--space-3);
  font-size: var(--fs-sm2); color: var(--color-text);
  border-radius: var(--radius-sm);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-account__item:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-account__item i { font-size: 1rem; color: var(--color-text-muted); width: 1rem; text-align: center; }
.st-account__sep { border: none; border-top: 1px solid var(--color-border); margin: var(--space-2) 0; }

/* Search suggest dropdown */
.st-search { position: relative; }
.st-search__suggest {
  position: absolute; top: calc(100% + 6px); left: 0; right: 0;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  z-index: var(--z-overlay);
  overflow: hidden;
  opacity: 0; visibility: hidden; transform: translateY(-4px);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
}
.st-search__suggest.is-open { opacity: 1; visibility: visible; transform: none; }
/* У модалі пошуку (мобільний) підказки йдуть у потоці під полем, не абсолютом */
.st-search__suggest--overlay { position: static; margin-top: var(--space-4); box-shadow: none; transform: none; max-height: 60vh; overflow-y: auto; }
.st-search__suggest-section { padding: var(--space-3); }
.st-search__suggest-section + .st-search__suggest-section { border-top: 1px solid var(--color-border); }
.st-search__suggest-label {
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps); text-transform: uppercase;
  color: var(--color-text-muted);
  padding: 0 var(--space-2) var(--space-2);
}
.st-search__suggest-item {
  display: flex; align-items: center; gap: var(--space-3);
  padding: 0.5rem var(--space-2);
  font-size: var(--fs-sm2); color: var(--color-text);
  border-radius: var(--radius-sm);
  transition: background var(--dur) var(--ease);
}
.st-search__suggest-item:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-search__suggest-item i { color: var(--color-text-muted); font-size: 0.9rem; flex-shrink: 0; }
.st-search__suggest-item--product img {
  width: 40px; height: 40px; object-fit: cover;
  border-radius: var(--radius-sm); flex-shrink: 0;
}
.st-search__suggest-info { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; }
.st-search__suggest-name { font-weight: var(--fw-semibold); color: var(--color-heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-search__suggest-price { font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-search__suggest-empty { padding: var(--space-4) var(--space-3); font-size: var(--fs-sm); color: var(--color-text-muted); text-align: center; }

/* Topbar phone dropdown */
.st-topbar-phone { position: relative; }
.st-topbar-phone__toggle {
  display: inline-flex; align-items: center; gap: 0.4rem;
  cursor: pointer; background: none; border: none; padding: 0;
  color: var(--color-on-dark-muted); font-size: var(--fs-sm);
  transition: color var(--dur) var(--ease);
}
.st-topbar-phone__toggle:hover { color: #fff; }
.st-topbar-phone__toggle .ph-caret-down { font-size: 0.75rem; transition: transform var(--dur) var(--ease); }
.st-topbar-phone.is-open .st-topbar-phone__toggle .ph-caret-down { transform: rotate(180deg); }
.st-topbar-phone__dropdown {
  position: absolute; top: calc(100% + 8px); left: 0;
  min-width: 240px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  padding: var(--space-2);
  z-index: var(--z-overlay);
  opacity: 0; visibility: hidden; transform: translateY(-6px);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
}
.st-topbar-phone.is-open .st-topbar-phone__dropdown { opacity: 1; visibility: visible; transform: none; }
.st-topbar-phone__item {
  display: flex; align-items: center; gap: var(--space-3);
  padding: 0.6rem var(--space-3);
  font-size: var(--fs-sm2); color: var(--color-text);
  border-radius: var(--radius-sm);
  transition: background var(--dur) var(--ease);
}
.st-topbar-phone__item:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-topbar-phone__item i { color: var(--accent); font-size: 0.9rem; }

/* Minicart qty stepper */
.st-minicart__stepper {
  display: inline-flex; align-items: center; align-self: flex-start;
  border: 1px solid var(--color-border); border-radius: var(--radius-sm);
  overflow: hidden; margin-top: var(--space-2);
}
.st-minicart__stepper-btn {
  width: 28px; height: 28px;
  display: grid; place-items: center;
  font-size: 1rem; line-height: 1;
  color: var(--color-heading);
  transition: background var(--dur) var(--ease);
}
.st-minicart__stepper-btn:hover { background: var(--color-bg-alt); }
.st-minicart__stepper-num {
  min-width: 28px; text-align: center;
  font-size: var(--fs-sm2); font-weight: var(--fw-semibold);
  border-left: 1px solid var(--color-border);
  border-right: 1px solid var(--color-border);
  padding: 0 var(--space-2);
  line-height: 28px;
}

/* --- Primary nav bar (desktop) ----------------------------------------- */
.st-navbar { display: none; border-top: 1px solid var(--color-border); }
@media (min-width: 992px) { .st-navbar { display: block; } }
.st-navbar__inner { display: flex; align-items: center; gap: var(--space-6); min-height: 52px; }

/* Departments toggle */
.st-departments { position: relative; }
.st-departments__toggle {
  display: inline-flex; align-items: center; gap: 0.6rem;
  height: 52px; padding: 0 var(--space-5) 0 0;
  font-family: inherit;
  font-weight: var(--fw-semibold); font-size: var(--fs-sm2);
  color: var(--color-heading);
  background: none; border: 0;
  cursor: pointer;
  transition: color var(--dur) var(--ease);
}
.st-departments__toggle:hover { color: var(--accent); }
.st-departments__toggle i { font-size: 1.3rem; transition: transform var(--dur) var(--ease); }
.st-departments__toggle .fa-angle-down { font-size: 0.85rem; }
.st-departments.is-open .st-departments__toggle .fa-angle-down { transform: rotate(180deg); }
.st-departments__panel {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  min-width: 280px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  padding: var(--space-3);
  z-index: var(--z-overlay);
  opacity: 0;
  transform: translateY(-6px);
  visibility: hidden;
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
}
.st-departments.is-open .st-departments__panel { opacity: 1; transform: none; visibility: visible; }
.st-departments__list { display: flex; flex-direction: column; }
.st-departments__sep { height: 1px; background: var(--color-border); margin: var(--space-2) 0; }
.st-departments__link {
  display: flex; align-items: center; gap: var(--space-3);
  padding: 0.6rem var(--space-3);
  font-size: var(--fs-sm2); font-weight: var(--fw-medium);
  color: var(--color-text);
  border-radius: var(--radius-sm);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-departments__link:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-departments__link i:first-child { font-size: 1.1rem; color: var(--color-text-muted); flex: none; width: 1.2rem; text-align: center; }
.st-departments__link i:last-child { margin-left: auto; font-size: 0.9rem; opacity: 0.5; }
.st-departments__link-tag {
  margin-left: auto;
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-sale);
}

/* Primary nav */
.st-nav__list { display: flex; align-items: center; gap: var(--space-6); }
.st-nav__item { position: relative; }
.st-nav__link { display: inline-flex; align-items: center; gap: 0.3rem; height: 52px; font-size: var(--fs-sm2); font-weight: var(--fw-semibold); }
.st-nav__link i { font-size: 0.95rem; transition: transform var(--dur) var(--ease); }
.st-nav__link::after { content: ""; position: absolute; left: 0; bottom: 10px; width: 100%; height: 2px; background: var(--accent); transform: scaleX(0); transform-origin: left; transition: transform var(--dur) var(--ease); }
.st-nav__item:hover .st-nav__link::after,
.st-nav__item.is-active .st-nav__link::after { transform: scaleX(1); }
.st-nav__item:hover .st-nav__link i.is-caret { transform: rotate(180deg); }
.st-nav__tag { font-size: 0.55rem; font-weight: var(--fw-bold); letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-sale); vertical-align: super; }

/* Mega menu */
.st-mega {
  position: absolute; top: 100%; left: 0;
  width: max-content;
  max-width: 90vw;
  background: var(--white);
  border: 1px solid var(--color-border);
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
  box-shadow: var(--shadow-lg);
  padding: var(--space-8);
  display: flex; gap: var(--space-8);
  opacity: 0; visibility: hidden; transform: translateY(8px);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
  z-index: 5;
}
.st-nav__item--has-children:hover .st-mega { opacity: 1; visibility: visible; transform: none; }
.st-mega__cols { display: grid; grid-template-columns: repeat(3, minmax(180px, 220px)); gap: var(--space-8); }
.st-mega__title { font-size: var(--fs-xs); font-weight: var(--fw-bold); letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--color-text-muted); margin-top: var(--space-6); margin-bottom: var(--space-4); }
.st-mega__col > .st-mega__title:first-child { margin-top: 0; }
.st-mega__cols--single .st-mega__title { margin-top: var(--space-10); }
.st-mega__cols--single .st-mega__col > .st-mega__title:first-child { margin-top: 0; }
.st-mega__title a:hover { color: var(--accent); }
.st-mega__link { display: block; padding: 0.4rem 0; font-size: var(--fs-sm2); color: var(--color-text); }
.st-mega__link:hover { color: var(--accent); }
.st-mega__promo { position: relative; flex: none; width: 180px; border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end; padding: var(--space-5); color: #fff; background-size: cover; background-position: center; }
.st-mega__promo::after { content: ""; position: absolute; inset: 0; background: linear-gradient(transparent 30%, rgba(0,0,0,0.65)); }
.st-mega__promo > * { position: relative; z-index: 1; }
.st-mega__promo-kicker { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--tracking-caps); opacity: 0.85; }
.st-mega__promo-title { font-size: var(--fs-xl); color: #fff; margin: 0.3rem 0 var(--space-4); }

/* --- Drawer ------------------------------------------------------------ */
.st-drawer {
  position: fixed; inset: 0; z-index: var(--z-drawer);
  visibility: hidden;
  transition: visibility var(--dur-md);
}
.st-drawer.is-open { visibility: visible; }

.st-drawer__backdrop {
  position: absolute; inset: 0;
  background: rgba(16,18,24,0.45);
  opacity: 0;
  transition: opacity var(--dur-md) var(--ease);
}
.st-drawer.is-open .st-drawer__backdrop { opacity: 1; }

.st-drawer__panel {
  position: absolute; top: 0; bottom: 0;
  /* dvh — реальна висота viewport з урахуванням панелі браузера на мобільному,
     інакше низ (foot з кнопками) ховається під адрес-баром. bottom:0 — fallback */
  height: 100dvh;
  width: min(400px, 88vw);
  background: var(--color-surface);
  display: flex; flex-direction: column;
  transition: transform var(--dur-md) var(--ease-out);
}
.st-drawer--left  .st-drawer__panel { left: 0;  transform: translateX(-100%); }
.st-drawer--right .st-drawer__panel { right: 0; transform: translateX(100%); }
.st-drawer.is-open .st-drawer__panel { transform: none; }

.st-drawer__head { display: flex; align-items: center; justify-content: space-between; padding: var(--space-5); border-bottom: 1px solid var(--color-border); }
.st-drawer__title { font-size: var(--fs-lg); font-weight: var(--fw-bold); }
.st-drawer__body { flex: 1; overflow-y: auto; padding: var(--space-5); }
.st-drawer__foot { padding: var(--space-5); padding-bottom: max(var(--space-5), calc(env(safe-area-inset-bottom) + var(--space-3))); border-top: 1px solid var(--color-border); display: grid; gap: var(--space-3); }
.st-drawer__contact { display: flex; align-items: center; gap: 0.6rem; font-size: var(--fs-sm2); color: var(--color-text-muted); }
.st-drawer__contact i { color: var(--accent); font-size: 1.2rem; }
.st-drawer__phones { display: grid; gap: var(--space-2); padding-bottom: var(--space-3); margin-bottom: var(--space-1); border-bottom: 1px solid var(--color-border); }
/* .st-switch is styled for the dark topbar by default (color: var(--color-on-dark-muted)) — override for the white drawer */
.st-drawer__switches { display: flex; gap: var(--space-2); }
.st-drawer__switches > form,
.st-drawer__switches > .st-switch { flex: 1 1 0; min-width: 0; }
.st-drawer__switches .st-switch__toggle {
  width: 100%; justify-content: center; gap: 0.45rem;
  padding: 0.6rem var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-bg-alt);
  color: var(--color-text); font-size: var(--fs-sm2);
  transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.st-drawer__switches .st-switch__toggle img { border-radius: 2px; }
.st-drawer__switches .st-switch__toggle:hover,
.st-drawer__switches .st-switch.is-open .st-switch__toggle { color: var(--color-heading); border-color: var(--color-border-strong); }
/* Switches sit in the drawer foot near the bottom edge of the screen — open the dropdown upward instead of downward so it doesn't overflow off-screen */
.st-drawer__switches .st-switch__dropdown { top: auto; bottom: calc(100% + 8px); transform: translateX(-50%) translateY(4px); }
.st-drawer__switches .st-switch.is-open .st-switch__dropdown { transform: translateX(-50%) translateY(0); }

/* Mobile nav inside drawer */
.st-nav--mobile { display: flex; flex-direction: column; }
.st-nav__m-item { border-bottom: 1px solid var(--color-border); }
.st-nav__m-row {
  display: flex; align-items: center; justify-content: space-between;
  width: 100%;
  padding: var(--space-4) 0;
  font-size: var(--fs-md); font-weight: var(--fw-semibold);
  text-align: left;
}
.st-nav__m-row i { color: var(--color-text-muted); transition: transform var(--dur) var(--ease); }
.st-nav__m-row:hover { color: var(--accent); }
button.st-nav__m-row[aria-expanded="true"] i { transform: rotate(180deg); }
.st-nav__m-panel { display: none; padding-bottom: var(--space-3); }
.st-nav__m-panel.is-open { display: block; }
.st-nav__m-child { display: block; padding: 0.4rem var(--space-4); font-size: var(--fs-sm2); color: var(--color-text-muted); }
.st-nav__m-child:hover { color: var(--accent); }
.st-nav__m-child--all { font-weight: var(--fw-semibold); color: var(--color-heading); }

/* --- Cart minicart (inside drawer) ------------------------------------- */
.st-minicart__list { display: flex; flex-direction: column; }
.st-minicart__item { display: grid; grid-template-columns: 72px 1fr auto; gap: var(--space-4); padding: var(--space-4) 0; border-bottom: 1px solid var(--color-border); }
/* Flash the line that was just added via cart.add() — box-shadow/background only,
   never touches layout (no width/height/padding change) so nothing else shifts. */
.st-minicart__item.is-just-added { border-radius: var(--radius); animation: ctCartItemAdded 1.2s var(--ease); }
@keyframes ctCartItemAdded {
  0%, 70% { background: var(--accent-soft); box-shadow: 0 0 0 1px var(--accent-soft); }
  100%    { background: transparent; box-shadow: 0 0 0 1px transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .st-minicart__item.is-just-added { animation: none; background: var(--accent-soft); }
}
.st-minicart__media { aspect-ratio: 1; border-radius: var(--radius-sm); overflow: hidden; background: var(--color-bg-alt); }
.st-minicart__info { display: flex; flex-direction: column; gap: 0.2rem; }
.st-minicart__name { font-size: var(--fs-sm2); font-weight: var(--fw-semibold); line-height: var(--lh-snug); }
.st-minicart__opt { font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-minicart__qty { font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-minicart__side { display: flex; flex-direction: column; align-items: flex-end; }
.st-minicart__total { font-weight: var(--fw-bold); text-align: right; white-space: nowrap; }
.st-minicart__remove {
  width: 28px; height: 28px;
  margin-top: auto;
  border: none; background: none; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
  font-size: var(--fs-sm2);
  color: var(--color-text-muted);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
  padding: 0;
}
.st-minicart__remove:hover { background: #fee2e2; color: #dc2626; }
.st-minicart__totals { display: grid; gap: var(--space-2); font-size: var(--fs-sm2); }
.st-minicart__totals div { display: flex; justify-content: space-between; }
.st-minicart__totals dd { font-weight: var(--fw-bold); font-size: var(--fs-xl); }
.st-minicart__actions { display: grid; gap: var(--space-3); }
.st-minicart__empty { text-align: center; padding: var(--space-12) var(--space-4); color: var(--color-text-muted); }

.st-cart-progress { padding: var(--space-4); background: var(--accent-soft); border-radius: var(--radius); margin-bottom: var(--space-5); font-size: var(--fs-sm); }
.st-cart-progress__bar { height: 6px; border-radius: var(--radius-pill); background: var(--white); margin-top: var(--space-3); overflow: hidden; }
.st-cart-progress__fill { height: 100%; background: var(--accent); border-radius: inherit; transition: width var(--dur-lg) var(--ease); }

/* --- Footer ------------------------------------------------------------ */
.st-footer { background: var(--color-dark); color: var(--color-on-dark); }
.st-footer__perks { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-6); padding-block: var(--space-10); border-bottom: 1px solid rgba(255,255,255,0.1); }
.st-footer__perk { display: flex; align-items: center; gap: var(--space-4); }
.st-footer__perk i { font-size: 2rem; color: var(--accent); flex: none; }
.st-footer__perk-title { font-weight: var(--fw-semibold); color: #fff; }
.st-footer__perk-text { font-size: var(--fs-sm); color: var(--color-on-dark-muted); }
@media (min-width: 768px) { .st-footer__perks { grid-template-columns: repeat(4, 1fr); } }

.st-footer__main { display: grid; grid-template-columns: 1fr; gap: var(--space-8); padding-block: var(--space-12); }
@media (min-width: 640px) { .st-footer__main { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 992px) { .st-footer__main { grid-template-columns: 1.6fr repeat(3, 1fr); gap: var(--space-10); } }
.st-footer__brand .st-logo { color: #fff; font-size: 1.75rem; }
.st-footer__tagline { margin-top: var(--space-4); color: var(--color-on-dark-muted); max-width: 36ch; }
.st-footer__contact { margin-top: var(--space-5); display: grid; gap: var(--space-3); }
.st-footer__contact-item { display: flex; align-items: center; gap: 0.6rem; color: var(--color-on-dark); }
.st-footer__contact-item i { color: var(--accent); font-size: 1.3rem; }
.st-footer__col-title { font-size: var(--fs-sm2); font-weight: var(--fw-bold); color: #fff; margin-bottom: var(--space-5); }
.st-footer__link { display: block; padding: 0.35rem 0; color: var(--color-on-dark-muted); font-size: var(--fs-sm2); }
.st-footer__link:hover { color: #fff; }
.st-footer__news-title { font-size: var(--fs-sm2); font-weight: var(--fw-bold); color: #fff; margin-bottom: var(--space-3); }
.st-footer__news-text { font-size: var(--fs-sm); color: var(--color-on-dark-muted); margin-bottom: var(--space-4); }
.st-footer__subscribe-agree {
  display: flex; align-items: flex-start; gap: 0.5rem;
  margin-top: var(--space-3);
  font-size: var(--fs-xs); line-height: var(--lh-snug);
  color: var(--color-on-dark-muted);
  cursor: pointer;
}
.st-footer__subscribe-agree input { margin-top: 0.2em; accent-color: var(--accent); cursor: pointer; flex: none; }
.st-footer__subscribe-agree a { color: var(--color-on-dark); text-decoration: underline; }
.st-footer__subscribe-privacy { margin-top: var(--space-1); font-size: var(--fs-xs); color: var(--color-on-dark-muted); }
.st-footer__socials { display: flex; gap: var(--space-3); margin-top: var(--space-6); }
/* Messengers sit right under the contact list, so they need less air than the
   brand socials that close the column. */
.st-footer__socials--msg { margin-top: var(--space-4); }
/* Contacts and business hours share the brand column — each group gets its own
   heading, which needs top spacing the first column title never required. */
.st-footer__col-title--spaced { margin-top: var(--space-6); }
.st-footer__social { width: 42px; height: 42px; display: grid; place-items: center; border: 1px solid rgba(255,255,255,0.18); border-radius: var(--radius); font-size: 1.2rem; color: #fff; transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease), transform var(--dur) var(--ease); }
.st-footer__social:hover { background: var(--accent); border-color: var(--accent); transform: translateY(-2px); }

.st-footer__bottom { display: flex; flex-direction: column; gap: var(--space-4); align-items: center; padding-block: var(--space-6); border-top: 1px solid rgba(255,255,255,0.1); font-size: var(--fs-sm); color: var(--color-on-dark-muted); text-align: center; }
.st-footer__pay { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }
/* Натуральний розмір лого (у кожного своя ширина) — без апскейлу/розмиття.
   Глобальне правило img{max-width:100%} лишає їх у межах контейнера. */
.st-footer__pay-icon { width: auto; height: auto; border-radius: var(--radius-sm); opacity: 0.85; }
.st-footer__legal { display: flex; gap: var(--space-5); flex-wrap: wrap; justify-content: center; }
.st-footer__legal a:hover { color: #fff; }
@media (min-width: 768px) { .st-footer__bottom { flex-direction: row; justify-content: space-between; text-align: left; } }

/* ---- home.css ---- */
/* ==========================================================================
   Cartello — home.css
   Home-page section blocks shared by all 3 demos (composed differently).
   ========================================================================== */

/* --- Hero: base -------------------------------------------------------- */
.st-hero { position: relative; }
.st-hero__content { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-5); max-width: 32rem; }
.st-hero__eyebrow {
  display: inline-flex; align-items: center; gap: 0.7em;
  color: var(--accent); font-weight: var(--fw-bold);
  font-size: var(--fs-xs); letter-spacing: var(--tracking-caps); text-transform: uppercase;
}
.st-hero__eyebrow::before {
  content: ""; width: 1.8em; height: var(--underline-thickness);
  background: currentColor; flex: none;
}
.st-hero__title {
  font-size: var(--fs-4xl);
  font-weight: var(--fw-heavy);
  line-height: var(--lh-tight);
  letter-spacing: var(--tracking-tighter);
}
.st-hero__text { color: var(--color-text-muted); font-size: var(--fs-md); max-width: 44ch; line-height: 1.55; }
.st-hero__actions { display: flex; flex-wrap: wrap; gap: var(--space-3); }

/* Hero: split (fashion) */
.st-hero--split .st-hero__grid {
  display: grid;
  grid-template-columns: 1fr;
  background: var(--color-bg-alt);
  border-radius: var(--radius-lg);
  overflow: hidden;
}
.st-hero--split .st-hero__media { position: relative; aspect-ratio: 4/3; overflow: hidden; }
.st-hero--split .st-hero__media img { width: 100%; height: 100%; object-fit: cover; }
.st-hero--split .st-hero__body { display: flex; align-items: center; padding: var(--space-8) var(--space-6); }
@media (max-width: 991.98px) {
  .st-hero--split .st-hero__media { aspect-ratio: 1/1; order: 1; } /* was 4/5 — ~20% shorter on mobile */
  .st-hero--split .st-hero__body { padding-block: var(--space-8); order: 2; }
}
.st-hero__badge { position: absolute; bottom: var(--space-6); left: var(--space-6); background: var(--white); padding: var(--space-4) var(--space-5); border-radius: var(--radius); box-shadow: var(--shadow-md); }
.st-hero__badge strong { display: block; font-size: var(--fs-xl); color: var(--accent); }
.st-hero__badge span { font-size: var(--fs-sm); color: var(--color-text-muted); }
@media (min-width: 992px) {
  .st-hero--split .st-hero__grid { grid-template-columns: 1.05fr 1fr; min-height: 540px; }
  .st-hero--split .st-hero__media { aspect-ratio: auto; }
  .st-hero--split .st-hero__body { padding-inline: clamp(2rem, 4vw, 4rem); }
}

/* Hero: full slider */
.st-hero-slider { position: relative; }
.st-hero-slide { position: relative; min-height: clamp(420px, 60vh, 640px); display: flex; align-items: center; overflow: hidden; }
.st-hero-slide__bg { position: absolute; inset: 0; }
.st-hero-slide__bg img { width: 100%; height: 100%; object-fit: cover; }
.st-hero-slide__bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(16,18,24,0.62) 0%, rgba(16,18,24,0.15) 55%, transparent 100%); }
.st-hero-slide__inner { position: relative; z-index: 2; width: 100%; }
.st-hero-slide .st-hero__content { color: #fff; max-width: 34rem; }
.st-hero-slide .st-hero__title { color: #fff; }
.st-hero-slide .st-hero__text { color: rgba(255,255,255,0.85); }
.st-hero-slide--light .st-hero-slide__bg::after { background: linear-gradient(90deg, rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.4) 50%, transparent 100%); }
.st-hero-slide--light .st-hero__content, .st-hero-slide--light .st-hero__title { color: var(--color-heading); }
.st-hero-slide--light .st-hero__text { color: var(--color-text); }

/* Hero: split slider */
.st-hero-slider--split { background: var(--color-bg-alt); overflow-x: hidden; }
.st-hero-slider--split .st-hero__grid {
  display: grid; grid-template-columns: 1fr;
  min-height: clamp(420px, 62vh, 600px);
}
.st-hero-slider--split .st-hero__body { display: flex; align-items: center; padding: var(--space-8) var(--space-6) var(--space-8) 0; }
.st-hero-slider--split .st-hero__media { position: relative; aspect-ratio: 4/3; overflow: hidden; }
.st-hero-slider--split .st-hero__media img { width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 991.98px) {
  .st-hero-slider--split .st-hero__media { aspect-ratio: 4/5; order: 1; }
  .st-hero-slider--split .st-hero__body { order: 2; padding-block: var(--space-8); }
  .st-hero-slider--split .st-hero-slider__frame { padding-top: calc(var(--bs-gutter-x) * .7); }
}
@media (min-width: 992px) {
  .st-hero-slider--split .st-hero__grid { grid-template-columns: 1.05fr 1fr; min-height: 540px; }
  .st-hero-slider--split .st-hero__media { aspect-ratio: auto; }
  .st-hero-slider--split .st-hero__body { padding-inline: 0 clamp(2rem, 4vw, 4rem); }
}
.st-hero-slider--split .swiper-pagination { bottom: var(--space-5) !important; }
.st-hero-slider.st-hero-slider--split .swiper-pagination-bullet { background: var(--color-border-strong); }
.st-hero-slider.st-hero-slider--split .swiper-pagination-bullet-active { background: var(--accent); width: 28px; }
.st-hero-slider--split .st-hero-slider__frame { position: relative; }
.st-hero-slider--split .st-slider-nav { display: grid; }
.st-hero-slider--split .st-slider-nav--prev { left: var(--space-3); transform: translateY(-50%); }
.st-hero-slider--split .st-slider-nav--next { right: var(--space-3); transform: translateY(-50%); }
@media (max-width: 991.98px) {
  /* Фото завжди зверху (order:1) з фіксованим aspect-ratio 4/5 — центруємо
     стрілки по висоті фото, а не всієї картки (щоб не з'їжджали в текст
     на слайдах з довшим підписом). */
  .st-hero-slider--split .st-slider-nav {
    top: calc((100vw - 2 * var(--gutter)) * 0.625);
  }
}
@media (min-width: 992px) {
  .st-hero-slider--split .st-slider-nav--prev { left: -150px; transform: translateY(-50%); }
  .st-hero-slider--split .st-slider-nav--next { right: -150px; transform: translateY(-50%); }
}

/* Hero: promo grid (electronics) */
.st-hero-grid { display: grid; grid-template-columns: 1fr; gap: var(--space-4); }
.st-hero-grid__main { position: relative; min-height: 340px; border-radius: var(--radius-lg); overflow: hidden; display: flex; align-items: center; }
.st-hero-grid__aside { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
.st-hero-promo { position: relative; min-height: 160px; border-radius: var(--radius-lg); overflow: hidden; display: flex; align-items: flex-end; padding: var(--space-5); color: #fff; }
.st-hero-promo__bg, .st-hero-grid__main-bg { position: absolute; inset: 0; }
.st-hero-promo__bg img, .st-hero-grid__main-bg img { width: 100%; height: 100%; object-fit: cover; }
.st-hero-promo::after { content: ""; position: absolute; inset: 0; background: linear-gradient(transparent 35%, rgba(0,0,0,0.6)); }
.st-hero-grid__main-bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(16,18,24,0.6), transparent); }
.st-hero-promo > *:not(.st-hero-promo__bg), .st-hero-grid__main .st-hero__content { position: relative; z-index: 1; }
.st-hero-promo__kicker { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--tracking-caps); opacity: 0.85; }
.st-hero-promo__title { font-size: var(--fs-lg); color: #fff; margin-top: 0.2rem; }
.st-hero-grid__main .st-hero__content { padding: var(--space-8); color: #fff; }
.st-hero-grid__main .st-hero__title { color: #fff; font-size: var(--fs-3xl); }
.st-hero-grid__main .st-hero__text { color: rgba(255,255,255,0.85); }
@media (min-width: 992px) {
  .st-hero-grid { grid-template-columns: 1.7fr 1fr; }
  .st-hero-grid__aside { grid-template-columns: 1fr; }
  .st-hero-grid__main { min-height: 460px; }
}

/* Hero: promo grid — slider variant (st_slideshow, layout=with_banner) */
.st-hero-grid__main > .swiper { position: absolute; inset: 0; }

/* Hero: centered (furniture) */
.st-hero--centered { position: relative; min-height: clamp(460px, 66vh, 680px); display: grid; place-items: center; text-align: center; overflow: hidden; }
.st-hero--centered .st-hero-slide__bg::after { background: rgba(16,18,24,0.32); }
.st-hero--centered .st-hero__content { align-items: center; max-width: 40rem; color: #fff; }
.st-hero--centered .st-hero__title { color: #fff; font-size: var(--fs-4xl); }
.st-hero--centered .st-hero__text { color: rgba(255,255,255,0.9); }
.st-hero--centered .st-hero__actions { justify-content: center; }

/* Swiper hero controls */
.st-hero-slider .swiper-pagination { bottom: var(--space-6) !important; }
.st-hero-slider .swiper-pagination-bullet { width: 28px; height: 4px; border-radius: 0; background: rgba(255,255,255,0.5); opacity: 1; transition: background var(--dur) var(--ease); }
.st-hero-slider .swiper-pagination-bullet-active { background: #fff; }
.st-slider-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 5; width: 48px; height: 48px; display: grid; place-items: center; border-radius: 50%; background: rgba(255,255,255,0.9); color: var(--color-heading); font-size: 1.3rem; box-shadow: var(--shadow-sm); transition: background var(--dur) var(--ease), color var(--dur) var(--ease); }
.st-slider-nav:hover { background: var(--accent); color: #fff; }
.st-slider-nav--prev { left: var(--space-5); }
.st-slider-nav--next { right: var(--space-5); }
.st-slider-nav.swiper-button-disabled { opacity: 0; pointer-events: none; }
@media (max-width: 768px) { .st-slider-nav { display: none; } }

/* --- USP strip --------------------------------------------------------- */
.st-usp-strip {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-5);
}
.st-usp {
  display: flex; align-items: center;
  gap: var(--space-3);
  padding-block: var(--space-2);
}
.st-usp__icon { font-size: 1.5rem; color: var(--color-heading); flex: none; }
.st-usp__title { font-size: var(--fs-sm2); font-weight: var(--fw-semibold); color: var(--color-heading); letter-spacing: var(--tracking-snug); }
.st-usp__text { font-size: var(--fs-xs); color: var(--color-text-muted); margin-top: 2px; }
@media (min-width: 768px) {
  .st-usp-strip { grid-template-columns: repeat(4, 1fr); gap: 0; }
  .st-usp { padding: var(--space-2) var(--space-6); border-left: var(--hairline); }
  .st-usp:first-child { border-left: 0; padding-left: 0; }
  .st-usp:last-child  { padding-right: 0; }
}
.st-section--dark .st-usp__icon  { color: var(--color-on-dark); }
.st-section--dark .st-usp__title { color: var(--color-on-dark); }
.st-section--dark .st-usp__text  { color: var(--color-on-dark-muted); }
@media (min-width: 768px) {
  .st-section--dark .st-usp { border-left-color: rgba(255, 255, 255, 0.1); }
}

/* --- Category tiles ---------------------------------------------------- */
.st-cat-tiles { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-4); }
@media (min-width: 768px) { .st-cat-tiles { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 992px) { .st-cat-tiles--6 { grid-template-columns: repeat(6, 1fr); } }

.st-cat-tiles--bento {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-areas:
    "feature feature"
    "men     bags"
    "men     shoes";
  gap: var(--space-3);
}
.st-cat-tiles--bento .st-cat-tile { aspect-ratio: auto; }
.st-cat-tiles--bento .st-cat-tile--feature { grid-area: feature; aspect-ratio: 16 / 9; }
.st-cat-tiles--bento .st-cat-tile--feature + .st-cat-tile { grid-area: men; }
.st-cat-tiles--bento .st-cat-tile:nth-child(3) { grid-area: bags; aspect-ratio: 3 / 2; }
.st-cat-tiles--bento .st-cat-tile:nth-child(4) { grid-area: shoes; aspect-ratio: 3 / 2; }
@media (min-width: 992px) {
  .st-cat-tiles--bento {
    grid-template-columns: 2fr 1.5fr 1.5fr;
    grid-template-rows: repeat(2, 240px);
    grid-template-areas: none;
    gap: var(--space-4);
  }
  .st-cat-tiles--bento .st-cat-tile--feature { grid-column: 1; grid-row: 1 / span 2; aspect-ratio: auto; }
  .st-cat-tiles--bento .st-cat-tile--feature + .st-cat-tile { grid-column: 2; grid-row: 1 / span 2; }
  .st-cat-tiles--bento .st-cat-tile:nth-child(3),
  .st-cat-tiles--bento .st-cat-tile:nth-child(4) { grid-area: auto; aspect-ratio: auto; }
}

.st-cat-tile { position: relative; display: block; border-radius: var(--radius); overflow: hidden; aspect-ratio: 3/4; background: var(--color-bg-alt); }
.st-cat-tile--wide { grid-column: span 2; aspect-ratio: auto; }
.st-cat-tile__img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-lg) var(--ease); }
.st-cat-tile::after { content: ""; position: absolute; inset: 0; background: linear-gradient(transparent 45%, rgba(0,0,0,0.55)); }
.st-cat-tile:hover .st-cat-tile__img { transform: scale(1.06); }
.st-cat-tile__body {
  position: absolute; left: 0; right: 0; bottom: 0;
  z-index: 1;
  padding: var(--space-5);
  color: #fff;
  display: flex; flex-direction: column; gap: var(--space-2);
}
.st-cat-tile__count {
  display: inline-flex; align-items: center; gap: 0.7em;
  width: max-content;
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps); text-transform: uppercase;
  color: #fff; opacity: 0.85;
}
.st-cat-tile__count::before { content: ""; width: 1.8em; height: var(--underline-thickness); background: currentColor; flex: none; }
.st-cat-tile__name {
  display: inline-block; align-self: flex-start;
  font-size: var(--fs-xl); font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight); line-height: 1.1; color: #fff;
  background-image: linear-gradient(#fff, #fff);
  background-size: 0% var(--underline-thickness); background-position: 0 100%; background-repeat: no-repeat;
  padding-bottom: 0.18em;
  transition: background-size var(--dur-md) var(--ease-out);
}
.st-cat-tile:hover .st-cat-tile__name { background-size: 100% var(--underline-thickness); }
.st-cat-tile--feature .st-cat-tile__name { font-size: var(--fs-3xl); letter-spacing: var(--tracking-tighter); font-weight: var(--fw-heavy); }
.st-cat-tile--feature .st-cat-tile__body { padding: var(--space-8); gap: var(--space-3); }

/* Round category icons (electronics) */
.st-cat-icons { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-5); }
@media (min-width: 640px) { .st-cat-icons { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 992px) { .st-cat-icons { grid-template-columns: repeat(8, 1fr); } }
.st-cat-icon { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); text-align: center; }
.st-cat-icon__circle { width: 76px; height: 76px; display: grid; place-items: center; border-radius: 50%; background: var(--color-bg-alt); font-size: 2rem; color: var(--accent); transition: background var(--dur) var(--ease), color var(--dur) var(--ease), transform var(--dur) var(--ease); }
.st-cat-icon:hover .st-cat-icon__circle { background: var(--accent); color: var(--on-accent); transform: translateY(-4px); }
.st-cat-icon__name { font-size: var(--fs-sm); font-weight: var(--fw-medium); }

/* Tabs filter for product section */
.st-section-tabs { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.st-section-tabs__btn { padding: 0.5em 1.1em; font-size: var(--fs-sm2); font-weight: var(--fw-semibold); color: var(--color-text-muted); border-radius: var(--radius-pill); transition: all var(--dur) var(--ease); }
.st-section-tabs__btn:hover { color: var(--color-heading); }
.st-section-tabs__btn.is-active { background: var(--color-heading); color: #fff; }

/* --- Deals / flash sale ------------------------------------------------ */
.st-deals { background: var(--color-bg-dark); color: var(--color-on-dark); border-radius: var(--radius-lg); overflow: hidden; }
.st-deals__inner { display: grid; grid-template-columns: 1fr; }
.st-deals__intro { min-width: 0; padding: var(--space-10); display: flex; flex-direction: column; justify-content: center; gap: var(--space-5); }
.st-deals__title { color: #fff; font-size: var(--fs-3xl); }
.st-deals__intro .st-eyebrow { color: var(--color-on-dark); }
.st-deals__text { color: var(--color-on-dark-muted); }
.st-deals__rail { padding: var(--space-8); min-width: 0; overflow: hidden; }
.st-deals__rail .swiper { width: 100%; }
@media (min-width: 992px) { .st-deals__inner { grid-template-columns: 360px 1fr; } }

/* Countdown */
.st-countdown { display: flex; flex-wrap: wrap; gap: var(--space-3); }
.st-countdown__unit { display: flex; flex-direction: column; align-items: center; min-width: 62px; padding: var(--space-3) var(--space-2); background: rgba(255,255,255,0.08); border-radius: var(--radius); }
.st-countdown__num { font-size: var(--fs-2xl); font-weight: var(--fw-bold); line-height: 1; font-variant-numeric: tabular-nums; color: #fff; }
.st-countdown__label { font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-on-dark-muted); margin-top: 0.4rem; }

/* Desktop: вузька intro-колонка (360px) — 4 блоки не влазять при wrap, тож ділимо ширину порівну в один рядок */
@media (min-width: 992px) {
  .st-countdown { flex-wrap: nowrap; gap: var(--space-2); }
  .st-countdown__unit { flex: 1 1 0; min-width: 0; padding-inline: var(--space-2); }
}

/* Deals — mobile: тісний padding + гнучкий таймер, щоб нічого не вилазило за екран */
@media (max-width: 575px) {
  .st-deals__intro { padding: var(--space-6); }
  .st-deals__rail { padding: var(--space-5); }
  .st-countdown { gap: var(--space-2); }
  .st-countdown__unit { flex: 1 1 60px; min-width: 0; }
}

/* --- Promo banners ----------------------------------------------------- */
.st-promo-grid { display: grid; grid-template-columns: 1fr; gap: var(--space-5); }
@media (min-width: 768px) { .st-promo-grid--2 { grid-template-columns: repeat(2, 1fr); } .st-promo-grid--3 { grid-template-columns: repeat(3, 1fr); } }

.st-promo-banner {
  position: relative; display: grid; grid-template-columns: 1fr;
  border-radius: var(--radius-lg); overflow: hidden;
  background: var(--color-bg-alt); color: var(--color-heading);
}
.st-promo-banner__bg { position: relative; aspect-ratio: 16/10; overflow: hidden; }
.st-promo-banner__bg img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-lg) var(--ease); }
.st-promo-banner:hover .st-promo-banner__bg img { transform: scale(1.04); }
.st-promo-banner__body { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: var(--space-3); padding: var(--space-6); }
.st-promo-banner__kicker {
  display: inline-flex; align-items: center; gap: 0.7em;
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--color-text-muted);
}
.st-promo-banner__kicker::before { content: ""; width: 1.8em; height: var(--underline-thickness); background: currentColor; flex: none; }
.st-promo-banner__title { font-size: var(--fs-xl); font-weight: var(--fw-bold); letter-spacing: var(--tracking-tight); color: var(--color-heading); margin: 0; }
.st-promo-banner__cta { display: inline-flex; align-items: center; gap: 0.45em; margin-top: var(--space-2); font-size: var(--fs-sm2); font-weight: var(--fw-semibold); color: var(--color-heading); }
.st-promo-banner__cta i { transition: transform var(--dur) var(--ease); }
.st-promo-banner:hover .st-promo-banner__cta i { transform: translateX(4px); }
@media (min-width: 768px) {
  .st-promo-banner { grid-template-columns: 1.05fr 1fr; min-height: 280px; }
  .st-promo-banner__bg { aspect-ratio: auto; }
  .st-promo-banner__body { padding: var(--space-8); }
  .st-promo-banner__title { font-size: var(--fs-2xl); }
}

/* Variant: tall full-bleed */
.st-promo-banner--tall { display: flex; align-items: center; min-height: 420px; padding: var(--space-8); background: none; color: #fff; }
.st-promo-banner--tall .st-promo-banner__bg { position: absolute; inset: 0; aspect-ratio: auto; }
.st-promo-banner--tall::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(16,18,24,0.55), rgba(16,18,24,0.1)); pointer-events: none; }
.st-promo-banner--tall .st-promo-banner__body { position: relative; z-index: 1; padding: 0; max-width: 32ch; color: #fff; }
.st-promo-banner--tall .st-promo-banner__kicker { color: rgba(255,255,255,0.85); }
.st-promo-banner--tall .st-promo-banner__title { color: #fff; font-size: var(--fs-2xl); }
.st-promo-banner--tall .st-promo-banner__cta { color: #fff; }

/* --- Feature split ---------------------------------------------------- */
.st-feature-split { display: grid; grid-template-columns: 1fr; gap: var(--space-8); align-items: center; }
.st-feature-split__media { position: relative; aspect-ratio: 4/3; border-radius: var(--radius-lg); overflow: hidden; }
.st-feature-split__media img { width: 100%; height: 100%; object-fit: cover; }
.st-feature-split__body { display: flex; flex-direction: column; gap: var(--space-5); align-items: flex-start; }
.st-feature-list { display: grid; gap: var(--space-4); }
.st-feature-list__item { display: flex; gap: var(--space-4); }
.st-feature-list__icon { width: 48px; height: 48px; flex: none; display: grid; place-items: center; border-radius: var(--radius); background: var(--accent-soft); color: var(--accent-700); font-size: 1.4rem; }
.st-feature-list__title { font-weight: var(--fw-semibold); color: var(--color-heading); }
.st-feature-list__text { font-size: var(--fs-sm2); color: var(--color-text-muted); }
@media (min-width: 992px) { .st-feature-split { grid-template-columns: 1fr 1fr; gap: var(--space-16); } }

/* --- About module (feature-split extensions: stat cards, photo grid) --- */
.st-about__text { color: var(--color-text-muted); line-height: 1.6; }
.st-about__text--center { max-width: 60ch; margin-inline: auto; }

.st-about__photo-grid { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
.st-about__photo-item { border-radius: var(--radius-lg); overflow: hidden; aspect-ratio: 3/4; }
.st-about__photo-item img { width: 100%; height: 100%; object-fit: cover; }

.st-about__stat {
  position: absolute;
  display: flex; align-items: center; gap: var(--space-3);
  background: var(--white);
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  z-index: 1;
}
.st-about__stat--a { bottom: var(--space-5); left: var(--space-5); }
.st-about__stat--b { top: var(--space-5); right: var(--space-5); }
.st-about__stat--c { bottom: var(--space-5); right: var(--space-5); }
.st-about__stat--d { top: var(--space-5); left: var(--space-5); }
.st-about__stat-icon { font-size: 1.3rem; color: var(--accent); flex: none; }
.st-about__stat-value { display: block; font-size: var(--fs-xl); font-weight: var(--fw-semibold); color: var(--color-heading); line-height: 1.1; }
.st-about__stat-label { font-size: var(--fs-xs); color: var(--color-text-muted); }
@media (max-width: 576px) {
  .st-about__stat { padding: var(--space-2) var(--space-3); gap: var(--space-2); }
  .st-about__stat-value { font-size: var(--fs-md); }
}

/* --- CTA band ----------------------------------------------------------- */
.st-cta { max-width: 640px; margin-inline: auto; text-align: center; }
.st-cta__title { font-size: var(--fs-3xl); letter-spacing: var(--tracking-tight); }
.st-cta__desc { margin-top: var(--space-4); color: var(--color-on-dark-muted); line-height: 1.6; }
.st-cta__actions { display: flex; align-items: center; justify-content: center; gap: var(--space-3); flex-wrap: wrap; margin-top: var(--space-6); }

/* --- Newsletter section -------------------------------------------------- */
.st-newsletter { max-width: 640px; margin-inline: auto; text-align: center; }
.st-newsletter__form { max-width: 480px; margin: var(--space-6) auto 0; }
.st-newsletter__agree { display: flex; align-items: flex-start; gap: var(--space-2); margin-top: var(--space-4); font-size: var(--fs-xs); color: var(--color-text-muted); text-align: left; cursor: pointer; }
.st-newsletter__agree input { margin-top: 3px; flex: none; }
.st-newsletter__msg { margin-top: var(--space-4); font-size: var(--fs-sm2); font-weight: var(--fw-semibold); }
.st-newsletter__msg--success { color: var(--color-success); }
.st-newsletter__msg--error { color: var(--color-sale); }
.st-newsletter__privacy { margin-top: var(--space-4); font-size: var(--fs-xs); color: var(--color-text-muted); }

/* --- Sale banner ---------------------------------------------------------- */
.st-sale-banner__tag {
  display: inline-block;
  font-size: var(--fs-xs); font-weight: var(--fw-bold); text-transform: uppercase; letter-spacing: 0.04em;
  color: #fff; background: var(--color-sale);
  padding: 0.35em 0.9em; border-radius: var(--radius-pill);
  margin-bottom: var(--space-4);
}
.st-sale-banner__heading { font-size: var(--fs-3xl); letter-spacing: var(--tracking-tight); }
.st-sale-banner__desc { margin-top: var(--space-3); color: var(--color-text-muted); max-width: 48ch; line-height: 1.6; }
.st-sale-banner__actions { display: flex; align-items: center; gap: var(--space-4); flex-wrap: wrap; margin-top: var(--space-6); }
.st-sale-banner__img { width: 100%; max-width: 380px; border-radius: var(--radius-lg); box-shadow: var(--shadow-md); }

.st-sale-countdown { display: flex; align-items: center; gap: var(--space-2); }
.st-sale-countdown__icon { color: var(--color-sale); font-size: 1.2rem; }
.st-sale-countdown__label { font-size: var(--fs-sm); color: var(--color-text-muted); }
.st-sale-countdown__timer { font-variant-numeric: tabular-nums; font-weight: var(--fw-bold); font-size: var(--fs-md); color: var(--color-heading); }

/* --- Brand strip ------------------------------------------------------- */
.st-brands { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-6); align-items: center; }
@media (min-width: 640px) { .st-brands { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 992px) { .st-brands { grid-template-columns: repeat(6, 1fr); } }
.st-brand { display: grid; place-items: center; height: 56px; font-size: var(--fs-lg); font-weight: var(--fw-heavy); letter-spacing: -0.02em; color: var(--gray-400); transition: color var(--dur) var(--ease); }
.st-brand:hover { color: var(--color-heading); }

/* --- Testimonials ------------------------------------------------------ */
.st-review-card { background: var(--white); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-8); height: 100%; display: flex; flex-direction: column; gap: var(--space-4); }
.st-review-card__rating { color: var(--color-star); font-size: 1rem; letter-spacing: 0.1em; }
.st-review-card__quote { font-size: var(--fs-md); color: var(--color-text); flex: 1; }
.st-review-card__author { display: flex; align-items: center; gap: var(--space-3); }
.st-review-card__avatar { width: 46px; height: 46px; border-radius: 50%; object-fit: cover; background: var(--color-bg-alt); }
.st-review-card__name { font-weight: var(--fw-semibold); color: var(--color-heading); }
.st-review-card__role { font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-review-card__verified { margin-left: auto; display: inline-flex; align-items: center; gap: 0.3rem; font-size: var(--fs-xs); color: var(--color-success); }

/* --- Instagram / UGC --------------------------------------------------- */
.st-insta { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-3); }
@media (min-width: 640px) { .st-insta { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 992px) { .st-insta { grid-template-columns: repeat(6, 1fr); } }
.st-insta__item { position: relative; display: block; aspect-ratio: 1; overflow: hidden; border-radius: var(--radius-sm); }
.st-insta__item img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-lg) var(--ease); }
.st-insta__item:hover img { transform: scale(1.08); }
.st-insta__overlay { position: absolute; inset: 0; display: grid; place-items: center; background: rgba(16,18,24,0.4); color: #fff; font-size: 1.6rem; opacity: 0; transition: opacity var(--dur) var(--ease); }
.st-insta__item:hover .st-insta__overlay { opacity: 1; }

/* --- Blog -------------------------------------------------------------- */
.st-blog-grid { display: grid; grid-template-columns: 1fr; gap: var(--space-8); }
@media (min-width: 768px) { .st-blog-grid { grid-template-columns: repeat(3, 1fr); } }
.st-article-card { display: flex; flex-direction: column; gap: var(--space-4); }
.st-article-card__media { aspect-ratio: 16/10; border-radius: var(--radius); overflow: hidden; background: var(--color-bg-alt); }
.st-article-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-lg) var(--ease); }
.st-article-card:hover .st-article-card__media img { transform: scale(1.05); }
.st-article-card__meta { display: flex; align-items: center; gap: var(--space-3); font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-article-card__tag { color: var(--accent); font-weight: var(--fw-semibold); text-transform: uppercase; letter-spacing: 0.04em; }
.st-article-card__title { font-size: var(--fs-lg); font-weight: var(--fw-bold); line-height: var(--lh-snug); }
.st-article-card__title a:hover { color: var(--accent); }
.st-article-card__excerpt { font-size: var(--fs-sm2); color: var(--color-text-muted); }

/* --- SEO text block ---------------------------------------------------- */
.st-seo-block { color: var(--color-text-muted); }
.st-seo-block__title { font-size: var(--fs-xl); color: var(--color-heading); margin-bottom: var(--space-4); }
.st-seo-block__cols { columns: 2; column-gap: var(--space-10); font-size: var(--fs-sm2); line-height: 1.7; }
.st-seo-block__cols p { margin-bottom: var(--space-4); break-inside: avoid; }
.st-seo-block__more { max-height: 9.5rem; overflow: hidden; position: relative; transition: max-height var(--dur-lg) var(--ease); }
.st-seo-block__more::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 4rem; background: linear-gradient(transparent, var(--color-bg-alt)); }
.st-seo-block.is-expanded .st-seo-block__more { max-height: 80rem; }
.st-seo-block.is-expanded .st-seo-block__more::after { opacity: 0; }
.st-seo-block__toggle { margin-top: var(--space-4); }
@media (max-width: 640px) { .st-seo-block__cols { columns: 1; } }

/* --- Demo switcher widget (dev only, no st- prefix) -------------------- */
.demo-switch { position: fixed; right: 0; top: 40%; z-index: var(--z-toast); transform: translateX(100%); transition: transform var(--dur-md) var(--ease); }
.demo-switch.is-open { transform: none; }
.demo-switch__tab { position: absolute; left: -46px; top: 0; width: 46px; height: 46px; display: grid; place-items: center; background: var(--color-heading); color: #fff; font-size: 1.4rem; border-radius: var(--radius) 0 0 var(--radius); }
.demo-switch__panel { width: 200px; background: var(--white); border: 1px solid var(--color-border); border-right: none; border-radius: var(--radius) 0 0 var(--radius); box-shadow: var(--shadow-lg); padding: var(--space-5); }
.demo-switch__title { font-size: var(--fs-xs); font-weight: var(--fw-bold); text-transform: uppercase; letter-spacing: var(--tracking-caps); color: var(--color-text-muted); margin-bottom: var(--space-4); }
.demo-switch__links { display: grid; gap: var(--space-2); }
.demo-switch__link { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3); border-radius: var(--radius); font-size: var(--fs-sm2); font-weight: var(--fw-semibold); border: 1px solid var(--color-border); }
.demo-switch__link:hover, .demo-switch__link.is-active { border-color: var(--accent); color: var(--accent); }
.demo-switch__dot { width: 14px; height: 14px; border-radius: 50%; flex: none; }

/* ---- product.css ---- */
/* ==========================================================================
   Cartello — product.css
   Product Detail Page (PDP): gallery + thumbs, info column, variants,
   qty, info tabs, specs table, reviews, related products.
   Reuses st-product-card, st-price, st-rating, st-badge, st-qty, st-tabs,
   st-breadcrumb from components.css / layout.css.
   ========================================================================== */

/* --- Page head (compact breadcrumb only) ------------------------------- */
.st-page-head--compact { padding-block: var(--space-6) var(--space-5); }

/* --- PDP layout ------------------------------------------------------- */
.st-pdp { padding-block: var(--space-6) var(--space-16); }
.st-pdp__layout { display: grid; grid-template-columns: 1fr; gap: var(--space-8); }
@media (min-width: 992px) {
  .st-pdp__layout { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: var(--space-12); }
}

/* --- Gallery ---------------------------------------------------------- */
.st-pdp-gallery {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-3);
  min-width: 0;
}
@media (min-width: 768px) {
  .st-pdp-gallery { grid-template-columns: 88px minmax(0, 1fr); gap: var(--space-4); align-items: start; }
}

.st-pdp-gallery__main {
  position: relative;
  background: var(--color-bg-alt);
  border-radius: var(--radius);
  overflow: hidden;
  aspect-ratio: var(--product-aspect);
  min-width: 0;
  order: 1;
}
@media (min-width: 768px) { .st-pdp-gallery__main { order: 2; } }
.st-pdp-gallery__main .swiper,
.st-pdp-gallery__main .swiper-wrapper,
.st-pdp-gallery__main .swiper-slide { height: 100%; }
.st-pdp-gallery__main img { width: 100%; height: 100%; object-fit: cover; display: block; }
.st-pdp-gallery__main .swiper { cursor: zoom-in; }

.st-pdp-gallery__badges {
  position: absolute; top: var(--space-4); left: var(--space-4);
  display: flex; flex-direction: column; gap: 0.4rem; z-index: 2;
}
.st-pdp-gallery__zoom {
  position: absolute; top: var(--space-4); right: var(--space-4);
  width: 44px; height: 44px;
  display: grid; place-items: center;
  background: rgba(255,255,255,0.9); color: var(--color-heading);
  border-radius: 50%; z-index: 2; box-shadow: var(--shadow-xs);
  font-size: 1.2rem;
  transition: background var(--dur) var(--ease);
}
.st-pdp-gallery__zoom:hover { background: #fff; }

.st-pdp-gallery__nav {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 44px; height: 44px;
  display: grid; place-items: center;
  background: rgba(255,255,255,0.9); color: var(--color-heading);
  border-radius: 50%; z-index: 2; box-shadow: var(--shadow-xs);
  font-size: 1.1rem;
  transition: background var(--dur) var(--ease);
}
.st-pdp-gallery__nav:hover { background: #fff; }
.st-pdp-gallery__nav--prev { left: var(--space-3); }
.st-pdp-gallery__nav--next { right: var(--space-3); }
.st-pdp-gallery__nav.swiper-button-disabled { opacity: 0.4; pointer-events: none; }

.st-pdp-gallery__thumbs {
  display: flex; flex-direction: row;
  gap: var(--space-2); list-style: none; margin: 0; padding: 0;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: thin;
  order: 2;
}
@media (min-width: 768px) {
  .st-pdp-gallery__thumbs {
    flex-direction: column;
    overflow-x: hidden; overflow-y: auto;
    max-height: calc(var(--container-wide) * 0.55);
    order: 1;
  }
}
.st-pdp-gallery__thumb {
  flex: 0 0 auto; width: 80px; height: 106px;
  padding: 0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  background: var(--color-bg-alt);
  overflow: hidden; cursor: pointer;
  transition: border-color var(--dur) var(--ease);
}
@media (min-width: 768px) { .st-pdp-gallery__thumb { width: 100%; height: 110px; } }
.st-pdp-gallery__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.st-pdp-gallery__thumb:hover,
.st-pdp-gallery__thumb.is-active { border-color: var(--color-heading); }
.st-pdp-gallery__thumb.is-active { box-shadow: 0 0 0 1px var(--color-heading); }

/* --- Info column ------------------------------------------------------ */
.st-pdp-info { min-width: 0; display: flex; flex-direction: column; gap: var(--space-4); }
.st-pdp-info__brand {
  display: inline-flex; align-items: center; gap: 0.5rem;
  font-size: var(--fs-xs); text-transform: uppercase;
  letter-spacing: var(--tracking-caps); color: var(--color-text-muted); font-weight: var(--fw-semibold);
}
.st-pdp-info__brand a { color: var(--accent); }
.st-pdp-info__title { font-size: clamp(1.6rem, 1.2rem + 1.4vw, 2.25rem); line-height: 1.15; margin: 0; }
.st-pdp-info__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-4);
  font-size: var(--fs-sm2); color: var(--color-text-muted);
}
.st-pdp-info__meta a { text-decoration: underline; text-underline-offset: 3px; color: inherit; }
.st-pdp-info__meta a:hover { color: var(--color-heading); }
.st-pdp-info__sep { width: 1px; height: 14px; background: var(--color-border-strong); }
.st-pdp-info__price { display: flex; align-items: baseline; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-1); }
.st-pdp-info__price .st-price__now { font-size: clamp(1.5rem, 1.2rem + 0.8vw, 2rem); }
.st-pdp-info__price .st-price__old { font-size: var(--fs-lg); }
.st-pdp-info__price .st-price__save { font-size: var(--fs-sm2); padding: 0.2rem 0.55rem; background: var(--color-success-bg); border-radius: var(--radius-sm); }
.st-pdp-info__taxes { font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-pdp-info__desc { color: var(--color-text); line-height: 1.6; max-width: 56ch; }

/* --- Variants --------------------------------------------------------- */
.st-pdp-variants { display: flex; flex-direction: column; gap: var(--space-5); margin-top: var(--space-2); }
.st-pdp-variant__label {
  display: flex; align-items: center; justify-content: space-between;
  font-size: var(--fs-sm); font-weight: var(--fw-semibold);
  margin-bottom: var(--space-2);
  text-transform: uppercase; letter-spacing: 0.04em;
}
.st-pdp-variant__label-current { color: var(--color-text-muted); font-weight: var(--fw-regular); text-transform: none; letter-spacing: 0; }
.st-pdp-variant__size-guide {
  font-size: var(--fs-sm2); font-weight: var(--fw-regular);
  color: var(--color-text-muted); text-decoration: underline; text-underline-offset: 3px;
}
.st-pdp-variant__size-guide:hover { color: var(--color-heading); }
.st-pdp-variant__swatches { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.st-pdp-variant__swatch-label { display: inline-flex; cursor: pointer; }
/* Native radio stays in the DOM (focusable, keyboard/SR accessible, and
   what addToCart() actually serializes) but is visually replaced by the
   sibling .st-pdp-variant__swatch / .st-pdp-variant__size — same technique
   as .u-sr-only in base.css, kept local since these need :focus-visible
   wired to the sibling rather than to themselves. */
.st-pdp-variant__swatch-radio, .st-pdp-variant__size-radio {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.st-pdp-variant__swatch {
  width: 36px; height: 36px; border-radius: 50%;
  object-fit: cover;
  border: 1px solid rgba(0,0,0,0.12); box-shadow: inset 0 0 0 2px #fff;
  transition: box-shadow var(--dur) var(--ease);
}
.st-pdp-variant__swatch.is-active { box-shadow: inset 0 0 0 2px #fff, 0 0 0 2px var(--color-heading); }
.st-pdp-variant__swatch-radio:focus-visible + .st-pdp-variant__swatch { box-shadow: inset 0 0 0 2px #fff, 0 0 0 2px var(--accent); }
.st-pdp-variant__sizes { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.st-pdp-variant__size-label { display: inline-flex; cursor: pointer; }
.st-pdp-variant__size {
  min-width: 48px; height: 44px; padding: 0 0.85rem;
  display: inline-grid; place-items: center;
  border: 1px solid var(--color-border-strong); border-radius: var(--radius-sm);
  font-size: var(--fs-sm2); font-weight: var(--fw-semibold);
  background: var(--color-surface); color: var(--color-heading);
  transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease);
}
.st-pdp-variant__size:hover { border-color: var(--color-heading); }
.st-pdp-variant__size.is-active { background: var(--color-heading); border-color: var(--color-heading); color: #fff; }
.st-pdp-variant__size.is-out { opacity: 0.4; text-decoration: line-through; cursor: not-allowed; }
.st-pdp-variant__size-radio:focus-visible + .st-pdp-variant__size { box-shadow: 0 0 0 2px var(--accent); }

/* Checkbox-type option values */
.st-checkbox-label {
  display: flex; align-items: center; gap: var(--space-2);
  font-size: var(--fs-sm2); color: var(--color-text);
  cursor: pointer; margin-bottom: var(--space-2);
}
.st-checkbox-label:last-child { margin-bottom: 0; }
.st-checkbox-label input[type="checkbox"] {
  width: 16px; height: 16px; flex-shrink: 0;
  accent-color: var(--accent); cursor: pointer;
}
.st-pdp-variant__opt-img { width: 28px; height: 28px; object-fit: cover; border-radius: var(--radius-sm); flex-shrink: 0; }

/* Text / textarea / file / date / time / datetime option values —
   plain .form-group (not .st-pdp-variant), reuses the same label look. */
.st-pdp-variants .form-group { display: flex; flex-direction: column; gap: var(--space-2); }
.st-pdp-variants .form-group > label {
  font-size: var(--fs-sm); font-weight: var(--fw-semibold);
  text-transform: uppercase; letter-spacing: 0.04em;
}
.st-pdp-variants .st-input { width: 100%; }

/* Date/time/datetime: text input + calendar-icon button merged into one control */
.st-input-group { display: flex; }
.st-input-group .st-input { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.st-input-group .st-btn {
  flex-shrink: 0; padding: 0 1em; margin-left: -1px;
  border-radius: 0 var(--radius) var(--radius) 0;
}

/* --- Stock line ------------------------------------------------------- */
.st-pdp-stock { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-4); font-size: var(--fs-sm2); }
.st-pdp-stock__status { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--color-success); font-weight: var(--fw-semibold); }
.st-pdp-stock__status::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.st-pdp-stock__bar { flex: 1; min-width: 120px; height: 4px; background: var(--color-border); border-radius: 999px; overflow: hidden; }
.st-pdp-stock__bar-fill { display: block; height: 100%; background: var(--color-sale); border-radius: 999px; }
.st-pdp-stock__note { color: var(--color-text-muted); }

/* --- Actions ---------------------------------------------------------- */
.st-pdp-actions { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-2); }
.st-pdp-actions .st-qty { height: 52px; }
.st-pdp-actions .st-qty__btn { height: 52px; width: 48px; font-size: 1.2rem; }
.st-pdp-actions .st-qty__input { height: 52px; width: 52px; font-size: var(--fs-md); }
.st-pdp-actions__row { display: flex; flex-wrap: nowrap; gap: var(--space-3); flex: 1 1 280px; }
.st-pdp-actions__cart { flex: 1; min-width: 120px; height: 52px; }
.st-pdp-actions__cart .st-btn { height: 100%; width: 100%; }
.st-pdp-actions__icons { display: flex; gap: var(--space-3); flex-shrink: 0; }
.st-pdp-actions__wishlist,
.st-pdp-actions__compare {
  width: 52px; height: 52px;
  display: grid; place-items: center;
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  background: var(--color-surface); color: var(--color-heading);
  font-size: 1.3rem;
  transition: all var(--dur) var(--ease);
}
.st-pdp-actions__wishlist:hover,
.st-pdp-actions__wishlist.is-active,
.st-pdp-actions__compare:hover,
.st-pdp-actions__compare.is-active { border-color: var(--color-sale); color: var(--color-sale); }
.st-pdp-actions__buynow { flex-basis: 100%; height: 52px; }

/* --- Trust block ------------------------------------------------------ */
.st-pdp-trust {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-3); margin-top: var(--space-4);
  padding: var(--space-4) var(--space-5);
  border: 1px solid var(--color-border); border-radius: var(--radius);
  background: var(--color-bg-alt);
}
.st-pdp-trust__item { display: flex; align-items: flex-start; gap: 0.6rem; font-size: var(--fs-sm2); }
.st-pdp-trust__item i { font-size: 1.25rem; color: var(--accent); margin-top: 1px; flex-shrink: 0; }
.st-pdp-trust__item strong { display: block; color: var(--color-heading); margin-bottom: 0.15rem; }
.st-pdp-trust__item span { color: var(--color-text-muted); }

/* --- Meta line + share ------------------------------------------------ */
.st-pdp-meta-line {
  display: flex; flex-wrap: wrap; gap: var(--space-4);
  font-size: var(--fs-sm2); color: var(--color-text-muted);
  padding-top: var(--space-5); border-top: 1px solid var(--color-border); margin-top: var(--space-3);
}
.st-pdp-meta-line__row strong { color: var(--color-heading); font-weight: var(--fw-semibold); }

/* --- Sections + buybox wrapper ---------------------------------------- */
.st-pdp-body {
  margin-top: var(--space-16);
  padding-top: var(--space-12);
  border-top: 1px solid var(--color-border);
}

/* --- Always-visible product sections ---------------------------------- */
.st-pdp-section {
  padding-block: var(--space-12);
  border-bottom: 1px solid var(--color-border);
  max-width: 80ch;
  scroll-margin-top: 180px; /* header + sticky bar */
}
@media (max-width: 768px) {
  .st-pdp-section { padding-block: var(--space-10); }
}
.st-pdp-section--wide { max-width: none; }
.st-pdp-section:last-of-type { border-bottom: 0; }
.st-pdp-section h3 { font-size: var(--fs-xl); margin-bottom: var(--space-3); }
.st-pdp-section p { color: var(--color-text); line-height: 1.7; margin-bottom: var(--space-4); }
.st-bullets { padding-left: 1.2rem; margin-bottom: var(--space-4); }
.st-bullets li { list-style: disc; margin-bottom: 0.4rem; color: var(--color-text); }

.st-pdp-specs { width: 100%; border-collapse: collapse; font-size: var(--fs-sm2); }
.st-pdp-specs th, .st-pdp-specs td {
  text-align: left; padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border);
}
.st-pdp-specs th { color: var(--color-text-muted); font-weight: var(--fw-medium); width: 35%; }
.st-pdp-specs td { color: var(--color-heading); }

/* --- Reviews ---------------------------------------------------------- */
.st-pdp-reviews { display: grid; gap: var(--space-6); grid-template-columns: 1fr; }
@media (min-width: 768px) { .st-pdp-reviews { grid-template-columns: 280px minmax(0, 1fr); } }
.st-pdp-reviews__summary {
  border: 1px solid var(--color-border); border-radius: var(--radius);
  padding: var(--space-5); background: var(--color-bg-alt);
  display: flex; flex-direction: column; gap: var(--space-3);
}
.st-pdp-reviews__score { font-size: 2.5rem; font-weight: var(--fw-bold); line-height: 1; color: var(--color-heading); }
/* Empty state — коли відгуків ще немає (замість самотньої кнопки в порожньому стовпці) */
.st-pdp-reviews__norev { display: flex; flex-direction: column; align-items: center; text-align: center; gap: var(--space-2); padding: var(--space-4) var(--space-2) var(--space-2); }
.st-pdp-reviews__norev i { font-size: 2rem; color: var(--color-text-muted); opacity: 0.7; }
.st-pdp-reviews__norev-title { color: var(--color-text); font-size: var(--fs-sm2); line-height: 1.5; }
.st-pdp-reviews__bar { display: flex; align-items: center; gap: 0.5rem; font-size: var(--fs-sm2); color: var(--color-text-muted); }
.st-pdp-reviews__bar-label { width: 32px; }
.st-pdp-reviews__bar-track { flex: 1; height: 4px; background: var(--color-border); border-radius: 999px; overflow: hidden; }
.st-pdp-reviews__bar-fill { display: block; height: 100%; background: var(--color-star); border-radius: 999px; }
.st-pdp-reviews__bar-count { width: 28px; text-align: right; }

.st-pdp-review { padding: var(--space-5) 0; border-bottom: 1px solid var(--color-border); }
.st-pdp-review:last-of-type { border-bottom: 0; }
.st-pdp-review__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); margin-bottom: var(--space-2); }
.st-pdp-review__author { font-weight: var(--fw-semibold); color: var(--color-heading); }
.st-pdp-review__date { font-size: var(--fs-sm); color: var(--color-text-muted); margin-left: auto; }
.st-pdp-review__title { font-size: var(--fs-md); font-weight: var(--fw-semibold); margin-bottom: 0.4rem; }
.st-pdp-review__text { color: var(--color-text); line-height: 1.6; font-size: var(--fs-sm2); }
.st-pdp-review__verified { display: inline-flex; align-items: center; gap: 0.3rem; font-size: var(--fs-xs); color: var(--color-success); }

/* --- Sticky section nav (PDP) ----------------------------------------- */
.st-pdp-stickybar {
  position: sticky;
  top: 0; /* overridden by JS to header.offsetHeight */
  z-index: 105;
  background: var(--color-surface);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur) var(--ease);
}
.st-pdp-stickybar.is-stuck { border-bottom-color: var(--color-border); box-shadow: var(--shadow-sm); }

.st-pdp-stickybar__tabs {
  display: flex;
  align-items: center;
  gap: 2px;
  overflow-x: auto;
  scrollbar-width: none;
  padding-block: 6px;
}
.st-pdp-stickybar__tabs::-webkit-scrollbar { display: none; }

.st-pdp-stickybar__tab {
  flex-shrink: 0;
  padding: 0.7em var(--space-4);
  font-size: 0.95rem;
  font-weight: var(--fw-medium);
  color: var(--color-text);
  border-radius: var(--radius-sm);
  white-space: nowrap;
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-pdp-stickybar__tab:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-pdp-stickybar__tab.is-active { background: var(--color-bg-alt); color: var(--color-heading); font-weight: var(--fw-semibold); }
.st-pdp-stickybar__tab span { color: var(--color-text-muted); font-weight: var(--fw-regular); }

/* --- Sections + buybox two-col layout --------------------------------- */
.st-pdp-body {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  align-items: start;
}
@media (min-width: 992px) {
  .st-pdp-body { grid-template-columns: minmax(0, 1fr) 300px; gap: 0 var(--space-12); }
}

.st-pdp-body__main { min-width: 0; }

/* --- Desktop sticky buybox -------------------------------------------- */
.st-pdp-buybox { display: none; }
@media (min-width: 992px) {
  .st-pdp-buybox {
    display: block;
    position: sticky;
    top: 140px; /* set by JS: header + stickybar height */
  }
}
.st-pdp-buybox__inner {
  padding: var(--space-5);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
  box-shadow: var(--shadow-xs);
}
.st-pdp-buybox__head {
  display: flex; align-items: flex-start; gap: var(--space-3);
  margin-bottom: var(--space-1);
}
.st-pdp-buybox__img {
  width: 64px; height: 85px;
  object-fit: cover; border-radius: var(--radius-sm);
  flex-shrink: 0;
  border: 1px solid var(--color-border);
}
.st-pdp-buybox__title {
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  line-height: 1.3;
  margin: 0; padding-top: var(--space-1);
}

/* --- Mobile fixed buy bar --------------------------------------------- */
.st-pdp-buymobile {
  display: flex;
  position: fixed;
  /* bottom managed by JS visualViewport on iOS; fallback = 0 */
  bottom: 0; left: 0; right: 0;
  z-index: 110;
  background: var(--color-surface);
  border-top: 1px solid var(--color-border);
  box-shadow: 0 -2px 12px rgba(0,0,0,.08);
  transform: translateY(110%);
  transition: transform 0.28s var(--ease);
  /* safe area: home indicator on iPhone, gesture bar on Android */
  padding: var(--space-2) var(--space-3);
  padding-bottom: max(var(--space-2), env(safe-area-inset-bottom, 0px));
  box-sizing: border-box;
}
@media (min-width: 992px) { .st-pdp-buymobile { display: none; } }
.st-pdp-buymobile.is-visible { transform: translateY(0); }

.st-pdp-buymobile__inner {
  display: flex; align-items: center;
  gap: var(--space-2);
  width: 100%; min-width: 0;
}
.st-pdp-buymobile__info { flex: 1 1 0; min-width: 0; overflow: hidden; }
.st-pdp-buymobile__name {
  display: block;
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  font-size: var(--fs-sm2);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.st-pdp-buymobile__img {
  width: 40px;
  aspect-ratio: 3 / 4;
  object-fit: cover; border-radius: var(--radius-sm);
  flex: 0 0 40px; /* never grow, never shrink */
  border: 1px solid var(--color-border);
}
.st-pdp-buymobile__price { display: flex; align-items: baseline; gap: 0.35rem; margin-top: 0.1rem; }
.st-pdp-buymobile__price .st-price__now--sale { font-size: var(--fs-sm2); font-weight: var(--fw-bold); color: var(--color-sale); }
/* Button: fixed width so it never squishes on narrow phones */
.st-pdp-buymobile .st-btn {
  flex: 0 0 auto;
  white-space: nowrap;
  padding-inline: var(--space-4);
}
.st-pdp-buymobile__buynow {
  flex: 0 0 auto;
  width: 44px; height: 44px;
  display: grid; place-items: center;
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  background: var(--color-surface); color: var(--color-heading);
  font-size: 1.2rem;
}

/* --- Related products ------------------------------------------------- */
.st-pdp-related { margin-top: var(--space-16); }
.st-pdp-related .st-section-head { margin-bottom: var(--space-6); }

/* Grid display mode (vs the Swiper rail) — columns from --ct-rel-cols */
.st-pdp-related__grid {
  display: grid;
  grid-template-columns: repeat(var(--ct-rel-cols, 4), minmax(0, 1fr));
  gap: var(--space-6);
}
@media (max-width: 992px) {
  .st-pdp-related__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
  .st-pdp-related__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-4); }
}

/* content_bottom / content_top модулі (st_viewed…) везуть власний .container —
   прибираємо подвійний gutter, щоб їх ширина збігалася з #pdp-related */
.st-pdp > .container .container {
  width: auto;
  max-width: none;
  padding-inline: 0;
  margin-inline: 0;
}

/* --- Write review form ------------------------------------------------ */
.st-pdp-review-form {
  margin-top: var(--space-8);
  padding-top: var(--space-8);
  border-top: 1px solid var(--color-border);
}

.st-field { display: flex; flex-direction: column; gap: var(--space-2); margin-bottom: var(--space-5); }
.st-field--inline { flex-direction: row; align-items: center; gap: var(--space-4); }
.st-field-row { display: grid; grid-template-columns: 1fr; gap: var(--space-5); margin-bottom: var(--space-5); }
@media (min-width: 640px) { .st-field-row { grid-template-columns: 1fr 1fr; } }
.st-field__label { font-size: var(--fs-sm); font-weight: var(--fw-semibold); color: var(--color-heading); }
.st-field__input {
  width: 100%; padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  font-size: var(--fs-sm2); color: var(--color-heading);
  background: var(--color-surface);
  transition: border-color var(--dur) var(--ease);
  font-family: inherit;
}
.st-field__input:focus { outline: none; border-color: var(--color-heading); }
textarea.st-field__input { resize: vertical; min-height: 120px; }
.st-field__hint { font-size: var(--fs-xs); color: var(--color-text-muted); margin: 0; }

/* --- Star rating picker (RTL CSS trick) ------------------------------- */
.st-star-rating {
  display: inline-flex;
  flex-direction: row-reverse;
  gap: 0.2rem;
}
.st-star-rating input[type="radio"] { display: none; }
.st-star-rating label {
  font-size: 1.8rem;
  color: var(--color-border-strong);
  cursor: pointer;
  transition: color var(--dur) var(--ease);
}
/* hover: colour this star and all after it (= lower values, left side) */
.st-star-rating label:hover,
.st-star-rating label:hover ~ label { color: var(--color-star, #f59e0b); }
/* checked: colour checked star and all after it */
.st-star-rating input:checked ~ label { color: var(--color-star, #f59e0b); }

/* Same unicode code, different font-family (Phosphor outline vs Phosphor-Fill solid) */
.st-star-rating label .ph-star::before { font-family: "Phosphor"; content: "\e46a"; }
.st-star-rating label:hover .ph-star::before,
.st-star-rating label:hover ~ label .ph-star::before,
.st-star-rating input:checked ~ label .ph-star::before { font-family: "Phosphor-Fill"; content: "\e46a"; }

/* Review form error/success states */
.st-pdp-review-form .text-danger {
  font-size: var(--fs-xs); color: var(--color-sale);
  display: block; margin-top: var(--space-1);
}
.st-pdp-reviews__pagination { margin-top: var(--space-6); }
.st-pdp-reviews__empty { margin-top: var(--space-4); }

/* === Stock badge (minimal, fashion-friendly) === */
.st-stock-badge { display: inline-flex; align-items: center; gap: 4px; }
.st-stock-badge--success { color: var(--color-success, #2d7a4f); }
.st-stock-badge--warning { color: var(--color-warning, #a16207); }
.st-stock-badge--danger  { color: var(--color-danger,  #b91c1c); }
.st-stock-badge--muted   { color: inherit; }

/* ---- category.css ---- */
/* ==========================================================================
   Cartello — category.css
   Category / shop archive: page head, toolbar, sidebar facets,
   active-filter chips, list view, mobile filter drawer.
   Reuses st-product-card, st-breadcrumb, st-pagination, st-chip, st-btn.
   ========================================================================== */

/* --- Subcategories: page head already adds bottom spacing above this,
   so drop this section's own top padding to avoid stacking both. -------- */
.st-cat-subcats { padding-top: 0; }

/* --- Category description (shown after the product grid, inside
   .st-shop__main — same column as the grid, no separate layout needed).
   Photo floats so text wraps beside it; shows in full (no crop), capped
   at 600px, never upscaled past its natural size. */
.st-cat-description { margin-top: var(--section-y); }
.st-cat-description::after { content: ""; display: table; clear: both; }
.st-cat-description__image-wrap { max-width: min(600px, 100%); margin-bottom: var(--space-5); }
.st-cat-description__image { display: block; max-width: 100%; height: auto; border-radius: var(--radius-lg); }
@media (min-width: 768px) {
  .st-cat-description__image-wrap {
    float: left;
    max-width: min(45%, 600px);
    margin: 0 var(--space-6) var(--space-4) 0;
  }
}
.st-cat-description__text img { max-width: min(600px, 100%); width: auto; }

/* --- Subcategory buttons (ct_subcategory_style == 'buttons') ----------- */
.st-cat-buttons { display: flex; flex-wrap: wrap; gap: var(--space-3); }

/* --- Subcategory tiles (overlay style, scoped to --sub modifier) ------- */
.st-cat-tiles--sub {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: var(--space-4);
}
.st-cat-tiles--sub .st-cat-tile { aspect-ratio: 1; }
.st-cat-tiles--sub .st-cat-tile__img { width: 100%; height: 100%; object-fit: cover; }
.st-cat-tiles--sub .st-cat-tile__body { padding: var(--space-3) var(--space-4); gap: var(--space-1); }
.st-cat-tiles--sub .st-cat-tile__name { font-size: var(--fs-sm2); font-weight: var(--fw-semibold); }

/* --- All-categories wall ---------------------------------------------- */
.st-cat-wall {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-6);
}
@media (min-width: 768px)  { .st-cat-wall { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1200px) { .st-cat-wall { grid-template-columns: repeat(4, 1fr); } }

.st-cat-wall__card {
  display: flex; flex-direction: column;
  border-radius: var(--radius-lg); overflow: hidden;
  border: 1px solid var(--color-border);
  background: var(--color-surface);
  transition: box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.st-cat-wall__card:hover { box-shadow: var(--shadow-md); border-color: var(--color-border-strong); }

.st-cat-wall__img-wrap {
  position: relative; aspect-ratio: 4/3; overflow: hidden; display: block;
}
.st-cat-wall__img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--dur-lg) var(--ease);
}
.st-cat-wall__card:hover .st-cat-wall__img { transform: scale(1.05); }

.st-cat-wall__body {
  padding: var(--space-4) var(--space-5);
  display: flex; flex-direction: column; flex: 1; gap: var(--space-3);
}

.st-cat-wall__name {
  font-size: var(--fs-md); font-weight: var(--fw-bold);
  color: var(--color-heading); text-decoration: none; display: block;
  transition: color var(--dur) var(--ease);
}
.st-cat-wall__name:hover { color: var(--accent); }

.st-cat-wall__subs {
  list-style: none; padding: 0; margin: 0;
  display: flex; flex-direction: column; gap: 2px;
  flex: 1;
}
.st-cat-wall__sub {
  font-size: var(--fs-sm); color: var(--color-text-muted);
  text-decoration: none; padding-block: 3px;
  display: flex; align-items: center; gap: 0.5em;
  transition: color var(--dur) var(--ease);
}
.st-cat-wall__sub::before {
  content: ""; width: 4px; height: 4px;
  border-radius: 50%; background: var(--color-border-strong);
  flex: none; transition: background var(--dur) var(--ease);
}
.st-cat-wall__sub:hover { color: var(--accent); }
.st-cat-wall__sub:hover::before { background: var(--accent); }

.st-cat-wall__more {
  font-size: var(--fs-sm2); font-weight: var(--fw-semibold);
  color: var(--color-heading); text-decoration: none;
  display: inline-flex; align-items: center; gap: 0.4em;
  transition: color var(--dur) var(--ease);
}
.st-cat-wall__more:hover { color: var(--accent); }
.st-cat-wall__more .fa { font-size: 0.75em; transition: transform var(--dur) var(--ease); }
.st-cat-wall__more:hover .fa { transform: translateX(3px); }

/* --- Page head -------------------------------------------------------- */
.st-page-head { padding-block: var(--space-6) var(--space-6); }
.st-page-head__inner { display: flex; flex-direction: column; gap: var(--space-3); padding-block: var(--space-6); }
.st-page-head__crumbs { margin-bottom: var(--space-2); }
.st-page-head__title { font-size: var(--fs-3xl); margin: 0; }
.st-page-head__lead { color: var(--color-text-muted); max-width: 60ch; }
.st-page-head__meta { color: var(--color-text-muted); font-size: var(--fs-sm2); }
.st-page-head__meta strong { color: var(--color-heading); font-weight: var(--fw-semibold); }
/* Empty-category state (category.twig): the "no products" text and its
   "Continue" button are plain siblings with no wrapper, so with no margin
   between them they sat flush against each other. */
.st-page-head__meta + .st-btn { margin-top: var(--space-3); }
/* .st-page-head already carries its own bottom padding — a plain .st-section
   right after it doesn't need its own top padding on top of that (double gap).
   padding-block-start (not padding-top) so it composes cleanly with the
   padding-block shorthand on .st-section/.st-section--tight, only zeroing the
   top half. Scoped to the adjacent-sibling case only — .st-section keeps its
   full padding-block everywhere else (home modules, blog, etc.). */
.st-page-head + .st-section { padding-block-start: 0; }

/* --- Shop layout ------------------------------------------------------ */
.st-shop { padding-bottom: var(--space-16); }
/* Search page: the toolbar's white surface sits flush against the alt-bg
   search-form section above it with zero gap, so it visually merges into
   it. Only add breathing room when an --alt section directly precedes. */
.st-section--alt + .st-shop { padding-top: var(--space-8); }
.st-shop__layout { display: grid; grid-template-columns: 1fr; gap: var(--space-8); }
@media (min-width: 992px) {
  .st-shop__layout { grid-template-columns: 320px minmax(0, 1fr); gap: var(--space-10); }
}
.st-shop__main { min-width: 0; }

/* Category nav and the filter panel are merged into ONE sticky unit
   (.st-sidebar-sticky, built by JS — see product/category.twig) instead of
   two separate sticky elements. Two independently-sticky siblings stacked
   in the same column was tried and reliably failed in testing: whichever
   came second just ignored its own `top` and kept scrolling with the page
   (true in both a flex and a plain block #column-left) — so rather than
   fight that, category simply becomes a plain flex child of the one sticky
   box that's proven to work, on whichever side matches its original DOM
   order relative to the filter module (Admin → Design → Layout order is
   still respected either way). A generous top offset (well past --header-h,
   which only covers .st-header__inner — the sticky header's {{ menu }} row
   adds more) keeps a clear gap under the header once stuck. Long facet
   lists can get much taller than the product grid, so .st-sidebar-scroll is
   capped to share whatever's left of the sticky box's max-height (flex: 1
   + min-height: 0) with its own internal scroll; the apply button is a
   non-scrolling flex sibling, never under the scrollbar. */
@media (min-width: 992px) {
  .st-sidebar-sticky {
    position: sticky;
    top: calc(var(--ct-header-h, var(--header-h)) + var(--space-6));
    max-height: calc((100vh - var(--ct-header-h, var(--header-h)) - var(--space-6) - var(--space-8)) * 1.5);
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
  }
  .st-sidebar-sticky > .st-facet { flex-shrink: 0; }
  .st-sidebar-scroll {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 0; /* let a flex child shrink below its content height so overflow can kick in */
    scrollbar-width: thin;
    scrollbar-color: var(--color-border-strong) transparent;
  }
  .st-sidebar-scroll::-webkit-scrollbar { width: 6px; }
  .st-sidebar-scroll::-webkit-scrollbar-thumb { background: var(--color-border-strong); border-radius: var(--radius-pill); }
}

/* --- Toolbar ---------------------------------------------------------- */
.st-shop-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
  margin-bottom: var(--space-6);
}
.st-shop-toolbar__count { flex: 1 0 100%; font-size: var(--fs-sm2); color: var(--color-text-muted); }
.st-shop-toolbar__count strong { color: var(--color-heading); font-weight: var(--fw-semibold); }
.st-shop-toolbar__group { display: inline-flex; align-items: center; gap: var(--space-2); }
.st-shop-toolbar__label { font-size: var(--fs-sm2); color: var(--color-text-muted); }
.st-shop-toolbar__select {
  height: 38px;
  padding: 0 2rem 0 var(--space-3);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  background: var(--color-surface);
  font-size: var(--fs-sm2);
  color: var(--color-heading);
  appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path fill='none' stroke='%2316181d' stroke-width='1.5' d='M1 1l4 4 4-4'/></svg>");
  background-repeat: no-repeat;
  background-position: right var(--space-3) center;
  cursor: pointer;
}
.st-shop-toolbar__view {
  display: inline-flex;
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  overflow: hidden;
}
.st-shop-toolbar__view-btn {
  width: 38px; height: 38px;
  display: grid; place-items: center;
  color: var(--color-text-muted);
  border-right: 1px solid var(--color-border-strong);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-shop-toolbar__view-btn:last-child { border-right: 0; }
.st-shop-toolbar__view-btn:hover { color: var(--color-heading); }
.st-shop-toolbar__view-btn.is-active { background: var(--color-heading); color: #fff; }
.st-shop-toolbar__filter-btn {
  display: none;
  align-items: center;
  gap: 0.4rem;
  padding: 0.55em 1em;
  height: 38px;
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
}
@media (max-width: 991.98px) { .st-shop-toolbar__filter-btn { display: inline-flex; } }

/* Mobile: стекаємо контролі в повноширинні рядки, select не вилазить за екран.
   Порядок: рядок лічильника → Filters + перемикач вигляду → Sort → Limit → in-stock */
@media (max-width: 575px) {
  .st-shop-toolbar { gap: var(--space-3) var(--space-4); padding: var(--space-4); }
  .st-shop-toolbar__filter-btn,
  .st-shop-toolbar__view { order: 1; }
  .st-shop-toolbar__group { order: 2; flex: 1 0 100%; }
  .st-shop-toolbar__group .st-shop-toolbar__select { flex: 1; min-width: 0; width: 100%; }
  .st-shop-toolbar__view { margin-left: auto; }
}

/* --- Active filters --------------------------------------------------- */
.st-shop-active {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-5);
}
.st-shop-active__label { font-size: var(--fs-sm2); color: var(--color-text-muted); margin-right: var(--space-1); }
.st-shop-active__clear { margin-left: var(--space-2); font-size: var(--fs-sm2); color: var(--color-sale); text-decoration: underline; text-underline-offset: 3px; }
.st-shop-active__clear:hover { color: var(--color-heading); }

/* --- Sidebar / facets ------------------------------------------------- */
.st-shop__layout #column-left { min-width: 0; }
/* Section heading over the whole filter block (Розмір/Колір/Бренд groups),
   parallel to the "Категорії" card heading above it — without it the filter
   groups read as a loose continuation of the category card instead of their
   own section. */
.st-facets__head {
  font-size: var(--fs-sm); font-weight: var(--fw-semibold);
  letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--color-heading);
  margin-bottom: var(--space-4);
}
.st-facets { display: flex; flex-direction: column; gap: var(--space-3); }
.st-facets__apply { display: none; width: 100%; margin-top: var(--space-4); }
.st-shop__layout #column-left .st-facets__apply { display: block; }
/* Direct flex child of #column-left, a sibling of .st-sidebar-scroll (not
   inside it) — never scrolls with the facets, never sits under the scrollbar. */
@media (min-width: 992px) {
  .st-shop__layout #column-left .st-facets__apply {
    flex-shrink: 0;
    margin-top: 0;
    margin-bottom: var(--space-6); /* extra gap on top of the sticky box's own flex gap — visual break before categories */
    padding-top: var(--space-4);
    border-top: 1px solid var(--color-border);
  }
}

.st-facet { border-bottom: 1px solid var(--color-border); padding-block: var(--space-4); }
.st-facet:first-child { padding-top: 0; }

/* Category nav (flex child of .st-sidebar-sticky, full-size, never scrolls
   internally) vs filter groups (nested inside .st-sidebar-scroll
   [data-st-panel="filter"] .st-facets): both reuse .st-facet, but navigation
   (links, leaves the page) and filters (checkboxes, refines in place) are
   different actions — without a stronger visual break they read as one
   continuous list. A card treatment + generous own padding + a bigger
   margin than the sticky box's own flex gap sets categories clearly apart
   from the filters. */
.st-sidebar-sticky > .st-facet,
#column-left > .st-facet {
  /* Same recipe as .st-pdp-trust (product.css) — bg-alt + hairline border +
     the smaller --radius, not --radius-lg — an established "outlined card"
     pattern elsewhere in the theme, reused here instead of inventing a new
     one-off look. */
  background: var(--color-bg-alt);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: var(--space-6);
  margin-bottom: var(--space-6);
}
/* Fallback for when OCFilter (not the stock filter module) is active: the
   JS in category.twig that normally folds the category nav into the same
   .st-sidebar-sticky card as the filter panel keys off finding the stock
   module's [data-st-panel="filter"] wrapper, which doesn't exist when
   OCFilter has replaced it — so .st-facet is left as a bare, unwrapped
   sibling of .ocf-container inside #column-left instead of being moved
   into the card. Give it the same card look directly here rather than
   touching that relocation JS (it also drives the mobile filter-drawer
   move, higher risk to change). #column-left has no flex/gap of its own,
   so this also needs its own top margin to separate from OCFilter's card
   above it. */
#column-left > .st-facet { margin-top: var(--space-6); }
#column-left > .st-facet:first-child { padding-top: var(--space-6); margin-top: 0; }

.st-facet__head {
  width: 100%; display: flex; align-items: center; justify-content: space-between;
  text-align: left;
  font-size: var(--fs-sm); font-weight: var(--fw-semibold);
  letter-spacing: 0.04em; text-transform: uppercase;
  color: var(--color-heading);
  padding-bottom: var(--space-3);
}
.st-facet__head i { font-size: 1rem; color: var(--color-text-muted); transition: transform var(--dur) var(--ease); }
.st-facet.is-collapsed .st-facet__head i { transform: rotate(-90deg); }
.st-facet__body { display: block; }
.st-facet.is-collapsed .st-facet__body { display: none; }

/* Facet: checkbox list */
.st-facet__list { display: flex; flex-direction: column; gap: 0.55rem; }
.st-facet__option {
  display: flex; align-items: center; gap: 0.6rem;
  font-size: var(--fs-sm); color: var(--color-text);
  cursor: pointer; line-height: 1.3;
}
.st-facet__option input[type="checkbox"],
.st-facet__option input[type="radio"] {
  appearance: none;
  width: 16px; height: 16px;
  border: 1.5px solid var(--color-border-strong);
  border-radius: 3px;
  display: inline-grid; place-items: center;
  background: var(--color-surface);
  cursor: pointer; flex-shrink: 0;
  transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease);
}
.st-facet__option input[type="radio"] { border-radius: 50%; }
.st-facet__option input:checked { background: var(--accent); border-color: var(--accent); }
.st-facet__option input[type="checkbox"]:checked::before {
  content: "";
  width: 10px; height: 10px;
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'><path fill='none' stroke='white' stroke-width='2' d='M1 5l3 3 5-7'/></svg>") center/contain no-repeat;
}
.st-facet__option input[type="radio"]:checked::before {
  content: "";
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--on-accent);
}
.st-facet__option:hover { color: var(--color-heading); }
.st-facet__count { margin-left: auto; font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-facet__more {
  margin-top: var(--space-3);
  font-size: var(--fs-sm2); font-weight: var(--fw-semibold);
  color: var(--accent);
  display: inline-flex; align-items: center; gap: 0.3rem;
}

/* Facet: category nav links (sidebar category tree module) */
.st-facet__link {
  display: flex; align-items: center;
  font-size: var(--fs-sm2); color: var(--color-text);
  text-decoration: none; line-height: 1.3;
  transition: color var(--dur) var(--ease);
}
.st-facet__link:hover { color: var(--color-heading); }
.st-facet__link.is-active { color: var(--color-heading); font-weight: var(--fw-semibold); }
.st-facet__sublist {
  display: flex; flex-direction: column; gap: 0.4rem;
  margin-top: 0.4rem;
  padding-left: 0.9rem;
  border-left: 2px solid var(--color-border);
}
.st-facet__sublist .st-facet__link { font-size: var(--fs-xs); color: var(--color-text-muted); }
.st-facet__sublist .st-facet__link:hover,
.st-facet__sublist .st-facet__link.is-active { color: var(--color-heading); }

/* Facet: price range */
.st-facet-price { display: flex; flex-direction: column; gap: var(--space-3); }
.st-facet-price__track { position: relative; height: 4px; background: var(--color-border); border-radius: 999px; }
.st-facet-price__bar { position: absolute; inset: 0 30% 0 10%; background: var(--accent); border-radius: 999px; }
.st-facet-price__thumb {
  position: absolute; top: 50%;
  width: 16px; height: 16px;
  background: var(--color-surface); border: 2px solid var(--accent); border-radius: 50%;
  transform: translate(-50%, -50%); box-shadow: var(--shadow-xs);
}
.st-facet-price__thumb--lo { left: 10%; }
.st-facet-price__thumb--hi { left: 70%; }
.st-facet-price__inputs { display: flex; align-items: center; gap: var(--space-2); }
.st-facet-price__input {
  flex: 1; min-width: 0; height: 36px; padding: 0 0.7rem;
  border: 1px solid var(--color-border-strong); border-radius: var(--radius-sm);
  font-size: var(--fs-sm2); background: var(--color-surface);
  -moz-appearance: textfield;
}
.st-facet-price__input::-webkit-outer-spin-button,
.st-facet-price__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.st-facet-price__sep { color: var(--color-text-muted); }

/* Facet: color swatches */
.st-facet-swatches { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.st-facet-swatch {
  width: 26px; height: 26px; border-radius: 50%;
  border: 1px solid rgba(0,0,0,0.12); box-shadow: inset 0 0 0 2px #fff;
  cursor: pointer; position: relative;
  transition: box-shadow var(--dur) var(--ease);
}
.st-facet-swatch.is-active { box-shadow: inset 0 0 0 2px #fff, 0 0 0 2px var(--color-heading); }
.st-facet-swatch__label {
  position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%);
  background: var(--color-heading); color: #fff;
  font-size: var(--fs-xs); padding: 0.25rem 0.5rem; border-radius: var(--radius-sm);
  white-space: nowrap; opacity: 0; pointer-events: none;
  transition: opacity var(--dur) var(--ease);
}
.st-facet-swatch:hover .st-facet-swatch__label { opacity: 1; }

/* Facet: sizes */
.st-facet-sizes { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.st-facet-size {
  min-width: 40px; height: 36px; padding: 0 0.7rem;
  display: inline-grid; place-items: center;
  border: 1px solid var(--color-border-strong); border-radius: var(--radius-sm);
  font-size: var(--fs-sm2); font-weight: var(--fw-semibold);
  color: var(--color-heading); background: var(--color-surface);
  transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease);
  cursor: pointer;
}
.st-facet-size:hover { border-color: var(--color-heading); }
.st-facet-size.is-active { background: var(--color-heading); border-color: var(--color-heading); color: #fff; }
.st-facet-size.is-out { opacity: 0.4; text-decoration: line-through; cursor: not-allowed; }

/* Facet: rating rows */
.st-facet-rating { display: flex; flex-direction: column; gap: 0.45rem; }
.st-facet-rating__row {
  display: flex; align-items: center; gap: 0.5rem;
  font-size: var(--fs-sm2); color: var(--color-text-muted); cursor: pointer;
}
.st-facet-rating__row:hover { color: var(--color-heading); }

/* --- Product card: category-page extras (lead text + buy row) --------- */
.st-product-card__lead { display: none; }
.st-product-card__buy  { display: none; }

/* List view */
.st-shop-grid--list { grid-template-columns: 1fr !important; }
.st-shop-grid--list .st-product-card { flex-direction: row; align-items: stretch; gap: var(--space-5); }
.st-shop-grid--list .st-product-card__media { width: 220px; flex-shrink: 0; aspect-ratio: var(--product-aspect); }
.st-shop-grid--list .st-product-card__body { padding: 0; gap: var(--space-2); flex: 1; }
.st-shop-grid--list .st-product-card__lead { display: block; margin-top: var(--space-2); font-size: var(--fs-sm2); color: var(--color-text-muted); line-height: 1.5; }
.st-shop-grid--list .st-product-card__actions,
.st-shop-grid--list .st-product-card__cart { display: none; }
.st-shop-grid--list .st-product-card__row { margin-top: auto; }
.st-shop-grid--list .st-product-card__buy { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-3); }
@media (max-width: 640px) {
  .st-shop-grid--list .st-product-card { flex-direction: column; }
  .st-shop-grid--list .st-product-card__media { width: 100%; }
}

/* --- Pagination row --------------------------------------------------- */
.st-shop-foot {
  display: flex; flex-direction: column; align-items: center;
  gap: var(--space-4); margin-top: var(--space-10);
}
.st-shop-foot__hint { font-size: var(--fs-sm2); color: var(--color-text-muted); }

/* --- Filter drawer footer (2-column buttons) -------------------------- */
.st-drawer__foot--2col { grid-template-columns: 1fr 1fr; }

/* Desktop: hide filter drawer, show sidebar */
@media (min-width: 992px) {
  .st-drawer--filter { display: none; }
}
/* Mobile: hide sidebar, show drawer trigger */
@media (max-width: 991.98px) {
  .st-shop__layout #column-left { display: none; }
}

/* --- Manufacturer / brand list (product/manufacturer_list.twig) ------- */
.st-brand-index {
  display: flex; flex-wrap: wrap; gap: var(--space-2);
  margin-bottom: var(--space-8); padding-bottom: var(--space-5);
  border-bottom: var(--hairline);
}
.st-brand-index__link {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 32px; height: 32px; padding: 0 var(--space-2);
  border-radius: var(--radius-sm); background: var(--color-bg-alt);
  color: var(--color-text-muted); font-size: var(--fs-sm2); font-weight: var(--fw-semibold);
  text-decoration: none;
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-brand-index__link:hover { background: var(--accent); color: var(--white); }

.st-brand-group { scroll-margin-top: calc(var(--header-h) + var(--space-4)); margin-bottom: var(--space-8); }
.st-brand-group:last-child { margin-bottom: 0; }
.st-brand-group__letter {
  font-size: var(--fs-lg); font-weight: var(--fw-bold); color: var(--color-heading);
  margin-bottom: var(--space-4); padding-bottom: var(--space-2); border-bottom: var(--hairline);
}
.st-brand-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-3); }
@media (min-width: 576px) { .st-brand-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 992px) { .st-brand-grid { grid-template-columns: repeat(4, 1fr); } }
.st-brand-card {
  display: flex; align-items: center;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border); border-radius: var(--radius);
  color: var(--color-heading); font-size: var(--fs-sm2); font-weight: var(--fw-medium);
  text-decoration: none;
  transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.st-brand-card:hover { border-color: var(--accent); color: var(--accent); box-shadow: var(--shadow-focus); }

/* ---- ocfilter.css ---- */
/* ==========================================================================
   Cartello — ocfilter.css
   Visual re-skin for the "OCFilter" third-party module (system/library/ocfilter).
   We do NOT own this markup or its JS (core.js binds to .ocf-* classes and
   ids), so — same rule as the Bootstrap grid-only shims in components.css —
   classes stay vendor-named, we only repaint them with Cartello tokens.

   Cascade note: the module's own core.css is injected by the module's own
   template as an inline <link> wherever the module renders in the body,
   which in document order always comes AFTER this bundled stylesheet (it
   sits in <head>). To win regardless of that order (and without touching
   vendor twig/JS), every override below is !important — vendor core.css
   itself never uses !important on colors/borders/radius, so this is a safe,
   one-directional override with no specificity fights.

   Scope: visual properties only (color, background, border, radius,
   shadow, type). Layout/position/flex is left untouched — that's load-
   bearing for the plugin's JS (sliders, collapse, mobile drawer) and isn't
   contested by our design anyway.
   ========================================================================== */

/* --- Module card ------------------------------------------------------------
   Outline only, no fill: the Categories nav module right below it in the
   sidebar (category.css) owns the bg-alt + border "distinct card" look, so
   the filter groups here get just the border half of that same recipe —
   enough definition to not look like a naked list, but still visibly one
   step lighter than Categories, instead of two identical filled boxes
   stacked back to back. Desktop only (vendor's own 768px cutoff —
   system/library/ocfilter/helper.php mobile_max_width default 767). Below
   that, .ocf-content IS the sliding off-canvas panel itself: vendor requires
   it to stay 100% width/height with zero padding (mobile.css). Adding
   padding here widened the closed panel past its translateX(-100%) edge, so
   a sliver of it stayed on-screen even while "closed" and silently ate
   every tap meant for the fixed trigger button underneath — the
   "artifacts + button dies after first open" bug. */
@media (min-width: 768px) {
  .ocf-container .ocf-content {
    border: 1px solid var(--color-border) !important;
    border-radius: var(--radius) !important;
    padding: var(--space-6) !important;
  }
}
.ocf-container .ocf-header {
  color: var(--color-heading) !important;
  font-size: var(--fs-sm) !important;
  font-weight: var(--fw-semibold) !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  padding-bottom: var(--space-3) !important;
}
.ocf-container .ocf-header .ocf-sliders { display: none !important; } /* redundant with the section heading */
.ocf-container .ocf-body { padding-top: 0 !important; }

/* --- Filter group (accordion) --------------------------------------------- */
.ocf-container .ocf-filter {
  padding-block: var(--space-3) !important;
  border-bottom: 1px solid var(--color-border) !important;
}
.ocf-container .ocf-filter:first-child { padding-top: 0 !important; }
@media (max-width: 767px) {
  /* Mobile only: .ocf-content has zero padding there (it's the full-bleed
     sliding panel, see the "Module card" rule above), so .ocf-filter needs
     its own horizontal inset. Vendor insets each row via margin instead
     (mobile.css .ocf-filter{margin:0 20px}) — margin sits outside the
     border, so the border-bottom only ever spanned the row's own narrowed
     box, reading as inset from the panel edges instead of full-bleed like
     the nav drawer's list dividers. Moving it to padding fixes that (vendor
     does this same margin→padding swap itself for the .ocf-active state).
     On desktop .ocf-content already carries its own var(--space-6) padding,
     so adding this too doubled the indent — every filter row sat inset
     twice, once from .ocf-content's padding and again from this. */
  .ocf-container .ocf-filter {
    margin: 0 !important;
    padding-inline: var(--space-5) !important;
  }
}
/* Vendor's own mobile.css also adds .ocf-theme-light .ocf-filter + .ocf-filter
   { border-top: 1px solid #ebebeb } — stacked with our border-bottom above,
   every junction got two 1px lines instead of one, reading as one thick one. */
.ocf-container .ocf-filter + .ocf-filter { border-top: 0 !important; }
.ocf-container .ocf-filter-header {
  color: var(--color-heading) !important;
  font-size: var(--fs-sm) !important;
  font-weight: var(--fw-semibold) !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  padding-block: var(--space-3) !important;
}
/* Drilled-into sub-panel header (mobile "back + filter name" bar) — vendor's
   own theme-light default paints it #eceef2 (system/library/ocfilter's
   mobile.css .ocf-theme-light .ocf-open .ocf-filter-header), which never
   matched the flat/closed header we style above, so it stood out gray
   against our plain white panel background until now. */
.ocf-container .ocf-open .ocf-filter-header {
  background-color: var(--color-surface) !important;
  border-bottom: 1px solid var(--color-border) !important;
}
@media (max-width: 767px) {
  /* Vendor hardcodes this at a fixed 60px (its own 15px-padding header math)
     — different from our taller .ocf-header (see below), so drilling into a
     filter visibly jumped/resized the bar instead of just swapping content.
     Match it to the exact same height so the bar itself never moves. */
  .ocf-container .ocf-open .ocf-filter-header { height: calc(2 * var(--space-5) + 43px) !important; }
}

.ocf-container .ocf-filter-name,
.ocf-container .ocf-active-label { font: inherit !important; letter-spacing: inherit !important; text-transform: inherit !important; }
.ocf-container .ocf-active-label { color: var(--color-text-muted) !important; font-weight: var(--fw-normal, normal) !important; text-transform: none !important; letter-spacing: normal !important; }
.ocf-container .ocf-filter-description { color: var(--color-text-muted) !important; }

/* Reset/discard icon — vendor bakes it as a fixed-gray SVG background image
   (core.css .ocf-minus-circle, fill='%23666', not CSS-tunable) same as the
   close X. Recolor red: vendor's own desktop.css uses #d9534f as the hover
   border on its equivalent chip-discard control (.ocf-selected-discard),
   deliberately not the theme accent — "remove/clear" reads as a warning
   action, not a neutral one, so we follow that precedent here too. */
.ocf-container .ocf-filter-discard.ocf-icon {
  background: none !important;
  width: 22px !important;
  height: 22px !important;
  min-width: 0 !important;
  min-height: 0 !important;
  line-height: 22px !important;
  text-align: center !important;
  border-radius: var(--radius-pill) !important;
  border: 1px solid transparent !important;
  color: #d9534f !important;
  font-size: 1.15rem !important;
  font-weight: normal !important;
  transition: border-color var(--dur) var(--ease) !important;
}
.ocf-container .ocf-filter-discard.ocf-icon:hover { border-color: #d9534f !important; }
.ocf-container .ocf-filter-discard.ocf-icon::before {
  font-family: "Phosphor" !important;
  font-style: normal !important;
  content: "\e4f6" !important; /* ph-x — same glyph as the header close button; the
    documented ph-x-circle codepoint (\e504) actually renders as a paper-plane
    in this font build, see project_icon_system.md correction */
  vertical-align: middle !important;
}

/* --- Value list (checkbox / radio rows) --------------------------------- */
.ocf-container .ocf-value,
.ocf-container .ocf-value:visited {
  color: var(--color-text) !important;
  font-size: var(--fs-sm) !important;
}
.ocf-container .ocf-value:hover { color: var(--color-heading) !important; }
.ocf-container .ocf-value.ocf-disabled,
.ocf-container .ocf-value[disabled] { color: var(--color-text-muted) !important; }
.ocf-container .ocf-value-name { color: inherit !important; }

.ocf-container .ocf-value-count {
  background: transparent !important;
  color: var(--color-text-muted) !important;
  font-size: var(--fs-xs) !important;
  font-weight: normal !important;
  padding: 0 !important;
}
.ocf-container .ocf-value-count .ocf-num-abbr { color: inherit !important; font-weight: var(--fw-semibold) !important; }
.ocf-container .ocf-disabled .ocf-value-count { color: var(--color-text-muted) !important; opacity: 0.6; }

/* Custom checkbox / radio glyph (vendor builds it from ::before/::after on
   .ocf-value-input — we only repaint colors, the mechanism stays theirs) */
.ocf-container .ocf-value-input::before {
  background-color: var(--color-surface) !important;
  border-color: var(--color-border-strong) !important;
}
.ocf-container .ocf-value-input-checkbox::before { border-radius: 3px !important; }
.ocf-container .ocf-selected .ocf-value-input::before {
  background-color: var(--accent) !important;
  border-color: var(--accent) !important;
}
.ocf-container .ocf-value:active .ocf-value-input::before,
.ocf-container .ocf-value:active .ocf-value-input-checkbox::before {
  background-color: var(--accent) !important;
  border-color: var(--accent) !important;
  box-shadow: none !important;
}
.ocf-container .ocf-value:focus:not(:active) .ocf-value-input::before { border-color: var(--accent) !important; }
.ocf-container .ocf-value.ocf-disabled .ocf-value-input::before,
.ocf-container .ocf-value[disabled] .ocf-value-input::before { background-color: var(--color-bg-alt) !important; }

/* Color / image swatches */
.ocf-container .ocf-value-image,
.ocf-container .ocf-value-color { border-color: transparent !important; box-shadow: inset 0 0 0 2px var(--color-surface) !important; }
.ocf-container .ocf-selected .ocf-value-image,
.ocf-container .ocf-selected .ocf-value-color {
  box-shadow: inset 0 0 0 2px var(--color-surface) !important;
  border-color: var(--accent) !important;
}
.ocf-container .ocf-value-swatch__label,
.ocf-container .ocf-value-name { text-transform: none !important; }

/* --- Buttons ------------------------------------------------------------- */
.ocf-container .ocf-btn {
  background-color: var(--color-bg-alt) !important;
  color: var(--color-heading) !important;
  border-radius: var(--radius-sm) !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
}
.ocf-container .ocf-btn-link {
  color: var(--accent) !important;
  text-decoration: none !important;
}
.ocf-container .ocf-btn-link:hover,
.ocf-container .ocf-btn-link:focus { color: var(--color-heading) !important; text-decoration: underline !important; background: transparent !important; }
.ocf-container .ocf-search-btn-static,
.ocf-container .ocf-search-btn-popover,
.ocf-container .ocf-btn-mobile-fixed .ocf-btn {
  background-color: var(--accent) !important;
  color: var(--on-accent) !important;
}
.ocf-container .ocf-search-btn-static:hover,
.ocf-container .ocf-search-btn-static:focus,
.ocf-container .ocf-search-btn-popover:hover,
.ocf-container .ocf-search-btn-popover:focus {
  background-color: var(--color-heading) !important;
  color: var(--white, #fff) !important;
}
.ocf-container .ocf-search-btn-static.ocf-disabled,
.ocf-container .ocf-search-btn-popover.ocf-disabled { background-color: var(--color-border-strong) !important; color: var(--color-text-muted) !important; }

/* Form controls (min / max price inputs) */
.ocf-container .ocf-form-control {
  background-color: var(--color-surface) !important;
  border-color: var(--color-border-strong) !important;
  border-radius: var(--radius-sm) !important;
  color: var(--color-heading) !important;
  font-size: var(--fs-sm2) !important;
}
.ocf-container .ocf-form-control:focus { border-color: var(--accent) !important; box-shadow: none !important; }
.ocf-container .ocf-input-group-addon {
  background-color: var(--color-bg-alt) !important;
  border-color: var(--color-border-strong) !important;
  color: var(--color-text-muted) !important;
}

/* --- Price slider (noUiSlider) ------------------------------------------- */
.ocf-container .ocf-noUi-base::before { background-color: var(--color-border) !important; }
.ocf-container .ocf-noUi-connect::before,
.ocf-container .ocf-noUi-handle { background-color: var(--accent) !important; }
.ocf-container .ocf-noUi-connects::before,
.ocf-container .ocf-noUi-connects::after { background-color: var(--color-border) !important; }
.ocf-container .ocf-noUi-handle { border-color: var(--color-surface) !important; box-shadow: var(--shadow-xs) !important; }
.ocf-container .ocf-noUi-active { box-shadow: 0 0 0 6px color-mix(in srgb, var(--accent) 25%, transparent) !important; }
.ocf-container [disabled].ocf-noUi-handle,
.ocf-container [disabled] .ocf-noUi-handle,
.ocf-container [disabled] .ocf-noUi-connect::before { background-color: var(--color-border-strong) !important; }
.ocf-container .ocf-noUi-value { color: var(--color-text-muted) !important; }
.ocf-container .ocf-noUi-marker { background: var(--color-border) !important; }

/* --- "Show more filters/values" divider & toggle ------------------------- */
.ocf-container .ocf-hidden-filters-divider { background-color: var(--color-border) !important; }
.ocf-container .ocf-hidden-filters-divider > span {
  background-color: var(--color-bg-alt) !important;
  color: var(--color-text-muted) !important;
  box-shadow: 0 0 0 10px var(--color-surface) !important;
  font-size: var(--fs-xs) !important;
}
.ocf-container .ocf-hidden-filters-divider > span:hover { background-color: var(--color-border-strong) !important; color: var(--color-heading) !important; }
.ocf-container .ocf-collapse-value .ocf-value-list { border-top-color: var(--color-border) !important; }
.ocf-container .ocf-btn-show-filters,
.ocf-container .ocf-btn-show-values { color: var(--accent) !important; }

/* --- Footer (sticky apply bar inside the module) ------------------------- */
.ocf-container .ocf-footer {
  background-color: transparent !important;
  box-shadow: none !important;
  border-top: 0 !important;
  margin: var(--space-3) 0 0 !important;
  padding: 0 !important;
}
.ocf-container .ocf-footer::after { display: none !important; }
/* Vendor gives the plain .ocf-btn (Скасувати) 6px vertical padding but
   .ocf-btn-block/.ocf-search-btn-static (Виберіть фільтри) 9px — 32px vs
   38px tall, so the two footer buttons never lined up. Match them. */
.ocf-container .ocf-footer .ocf-btn { padding-block: var(--space-2) !important; }

/* --- Mobile floating trigger ---------------------------------------------
   Vendor owns position/rotation (mobile.css .ocf-btn-mobile-fixed — an
   edge tab, only the closed-state sliver shows until tapped) — only
   repainting it to match our palette here, not touching placement. */
.ocf-container .ocf-btn-mobile-fixed .ocf-btn {
  box-shadow: var(--shadow-md) !important;
}

/* --- Mobile slide-out panel — align to Cartello's own .st-drawer (menu/cart)
   instead of vendor's edge-to-edge default. Vendor's own breakpoint is
   mobile_max_width (helper.php, default 767) and it forces width:100vw at
   <=360px specifically (mobile.css) — both selectors below need the extra
   .ocf-mobile-1 class to out-specificity that and win reliably. */
@media (max-width: 767px) {
  .ocf-container.ocf-mobile-1 {
    width: min(400px, 88vw) !important;
  }
  /* Backdrop — vendor's own box-shadow trick, just recolored + restored
     (vendor zeroes it at <=360px). Same value as .st-drawer__backdrop
     (layout.css) — no shared token for it yet. */
  .ocf-container.ocf-mobile-active.ocf-mobile-1 {
    box-shadow: 0 0 0 100vmax rgba(16, 18, 24, 0.45) !important;
  }

  /* Header bar — swap the compact uppercase "sidebar card title" look (kept
     for desktop) for Cartello's own .st-drawer__head styling, so the slide-
     out reads as the same component as the nav/cart drawers. */
  .ocf-container .ocf-header {
    padding: var(--space-5) !important;
    border-bottom: 1px solid var(--color-border) !important;
    font-size: var(--fs-lg) !important;
    font-weight: var(--fw-bold) !important;
    text-transform: none !important;
    letter-spacing: normal !important;
  }
  /* Vendor hardcodes .ocf-body{top:60px} to match ITS OWN header's fixed
     15px-padding height — our taller var(--space-5) header + 42px close
     button (83px total) no longer matches that, so the filter list was
     rendering partly tucked under our header's bottom border. Keep this
     tied to the same padding var + button size so it can't silently drift
     if either changes. */
  .ocf-container .ocf-body { top: calc(2 * var(--space-5) + 43px) !important; }

  /* Close button — vendor draws it as a fixed-gray SVG background image
     (core.css .ocf-times, color baked into the data URI, not CSS-tunable);
     swap it for the theme's own Phosphor "x" glyph in a .st-action-style
     button so it matches .st-drawer__close instead of looking foreign. */
  .ocf-container .ocf-close-mobile {
    width: 42px !important;
    height: 42px !important;
    display: inline-grid !important;
    place-items: center !important;
    border-radius: var(--radius) !important;
    background: transparent !important;
    color: var(--color-heading) !important;
    transition: background var(--dur) var(--ease), color var(--dur) var(--ease) !important;
  }
  .ocf-container .ocf-close-mobile:hover { background: var(--color-bg-alt) !important; color: var(--accent) !important; }
  .ocf-container .ocf-close-mobile .ocf-icon.ocf-times {
    background: none !important;
    width: auto !important;
    height: auto !important;
    min-width: 0 !important;
    min-height: 0 !important;
    font-size: 1.3rem !important;
    font-weight: normal !important; /* inherits bold from .ocf-header otherwise */
    line-height: 1 !important;
  }
  .ocf-container .ocf-close-mobile .ocf-icon.ocf-times::before {
    font-family: "Phosphor" !important;
    font-style: normal !important;
    content: "\e4f6" !important;
  }
}

/* --- SEO page tag list ---------------------------------------------------- */
.ocf-container .ocf-category-page-list a { background-color: var(--color-bg-alt) !important; color: var(--color-text) !important; border-radius: var(--radius-pill) !important; }
.ocf-container .ocf-category-page-list .ocf-page-selected a { background-color: var(--color-heading) !important; color: var(--white, #fff) !important; }

/* ---- blog.css ---- */
/* ==========================================================================
   Cartello — Blog (journal listing, single article)
   Grid/card styles reuse .st-blog-grid / .st-article-card from home.css.
   Layout/toolbar/pagination/rating/product-card reuse category.css,
   components.css and product.css. This file only adds what those don't
   already cover: the article hero image and the downloads list.
   ========================================================================== */

/* Title→hero gap on the article page stacks .st-page-head bottom padding +
   .st-page-head__inner bottom padding + .st-section top padding = too much
   blank space above the hero image. Tighten just the top of this section. */
.st-section.st-section--article-top { padding-top: 0; }

.st-article-hero {
  margin: 0 0 var(--space-8);
  border-radius: var(--radius-lg);
  overflow: hidden;
  aspect-ratio: 16/9;
  max-height: 720px;
  background: var(--color-bg-alt);
}
.st-article-hero img { display: block; width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 767.98px) {
  .st-article-hero { aspect-ratio: 4/3; max-height: none; border-radius: var(--radius); }
}

.st-article-downloads { margin: var(--space-8) 0; }
.st-article-downloads__item {
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border: 1px solid var(--color-border); border-radius: var(--radius);
  margin-bottom: var(--space-3);
  font-size: var(--fs-sm2); color: var(--color-text);
  transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-article-downloads__item:last-child { margin-bottom: 0; }
.st-article-downloads__item:hover { border-color: var(--accent); color: var(--accent); }
.st-article-downloads__item i { color: var(--accent); font-size: 1.1em; flex-shrink: 0; }
.st-article-downloads__size { margin-left: auto; font-size: var(--fs-xs); color: var(--color-text-muted); }

/* .st-article-card__body groups meta+title+excerpt so the card can switch
   between a vertical layout (media on top) and a horizontal list-item
   layout (media on the side, text stacked next to it) without meta ever
   sitting beside the title. */
.st-article-card__body { display: flex; flex-direction: column; gap: var(--space-4); }

/* --- Sidebar context (#column-left / #column-right) ----------------------
   blog_latest / blog_featured render the same "section" markup whether
   they're placed in content_top/bottom (full width) or in a sidebar column
   (narrow). Here we strip the section/container chrome and force the grid
   into a single stacked list with compact, list-style cards. ------------- */
#column-left .st-section,
#column-right .st-section {
  padding-block: 0;
  background: none;
}
#column-left .st-section .container,
#column-right .st-section .container {
  width: auto;
  max-width: none;
  padding-inline: 0;
  margin-inline: 0;
}
#column-left .st-section-head,
#column-right .st-section-head {
  margin-bottom: var(--space-4);
}
#column-left .st-section-head__title,
#column-right .st-section-head__title {
  font-size: var(--fs-md);
}
#column-left .st-blog-grid,
#column-right .st-blog-grid {
  grid-template-columns: 1fr !important;
  gap: var(--space-4);
}
#column-left .st-article-card,
#column-right .st-article-card {
  flex-direction: row;
  align-items: flex-start;
  gap: var(--space-3);
  padding-bottom: var(--space-4);
  margin-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-border);
}
#column-left .st-article-card:last-child,
#column-right .st-article-card:last-child {
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: 0;
}
#column-left .st-article-card__media,
#column-right .st-article-card__media {
  width: 64px;
  height: 64px;
  flex-shrink: 0;
  aspect-ratio: 1/1;
}
#column-left .st-article-card__body,
#column-right .st-article-card__body {
  flex: 1;
  min-width: 0;
  gap: var(--space-1);
}
#column-left .st-article-card__meta,
#column-right .st-article-card__meta {
  font-size: var(--fs-xs);
  order: 2;
}
#column-left .st-article-card__title,
#column-right .st-article-card__title {
  font-size: var(--fs-sm2);
  order: 1;
}
#column-left .st-article-card__excerpt,
#column-right .st-article-card__excerpt {
  display: none;
}

/* ---- checkout.css ---- */
/* ==========================================================================
   Cartello — checkout.css
   Checkout page: step accordion + Bootstrap 3 form/button remapping.
   All rules scoped under #checkout-checkout.
   ========================================================================== */

/* ── Page ─────────────────────────────────────────────────────────────────── */
#checkout-checkout {
  padding-block: var(--space-6) var(--space-16);
}

/* Narrow focus column */
.st-checkout-inner {
  max-width: 760px;
}

#checkout-checkout h1 {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight);
  margin-bottom: var(--space-8);
}

/* ── Breadcrumb — override Bootstrap 3 .breadcrumb ──────────────────────── */
#checkout-checkout .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
  gap: 0;
}
#checkout-checkout .breadcrumb > li { display: flex; align-items: center; }
#checkout-checkout .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
  color: var(--color-text-muted);
}
#checkout-checkout .breadcrumb a { color: inherit; }
#checkout-checkout .breadcrumb a:hover { color: var(--accent); }
#checkout-checkout .breadcrumb > .active,
#checkout-checkout .breadcrumb > li:last-child a {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

/* ── Step accordion — override Bootstrap 3 .panel styles ────────────────── */
#checkout-checkout .panel-group {
  counter-reset: checkout-step;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-bottom: 0 !important;
}

#checkout-checkout .panel.panel-default {
  counter-increment: checkout-step;
  background: var(--color-surface) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: none !important;
  overflow: hidden;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}

/* Active step */
#checkout-checkout .panel.panel-default:has(.panel-collapse.in) {
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent),
              var(--shadow-sm) !important;
}

/* ── Panel heading ──────────────────────────────────────────────────────── */
#checkout-checkout .panel-heading {
  display: flex !important;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5) !important;
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  border-bottom: 1px solid transparent !important;
  transition: border-color var(--dur) var(--ease);
}
#checkout-checkout .panel.panel-default:has(.panel-collapse.in) .panel-heading {
  border-bottom-color: var(--color-border) !important;
}

/* Step number badge — auto-incremented via CSS counter */
.st-step-num {
  flex: none;
  width: 28px;
  height: 28px;
  display: grid;
  place-items: center;
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  line-height: 1;
  user-select: none;
  border-radius: 50%;
  background: var(--gray-100);
  color: var(--gray-500);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-step-num::before {
  content: counter(checkout-step);
}

/* Accessible / completed step */
#checkout-checkout .panel.panel-default:has(.accordion-toggle) .st-step-num {
  background: var(--color-success-bg);
  color: var(--color-success);
}
/* Active overrides completed (this rule comes after, same specificity) */
#checkout-checkout .panel.panel-default:has(.panel-collapse.in) .st-step-num {
  background: var(--accent) !important;
  color: var(--on-accent) !important;
}

/* Panel title text */
#checkout-checkout .panel-title {
  flex: 1;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  letter-spacing: var(--tracking-snug);
  color: var(--gray-400);
  margin: 0 !important;
  transition: color var(--dur) var(--ease);
}
#checkout-checkout .panel.panel-default:has(.panel-collapse.in) .panel-title,
#checkout-checkout .panel.panel-default:has(.accordion-toggle) .panel-title {
  color: var(--color-heading);
}

/* Accordion toggle (accessible/completed step heading) */
#checkout-checkout .panel-title a.accordion-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
  text-decoration: none !important;
  font-size: var(--fs-sm2);
}
#checkout-checkout .panel-title a.accordion-toggle:hover { color: var(--accent); }
#checkout-checkout .panel-title a.accordion-toggle i {
  font-size: 1rem;
  color: var(--color-text-muted);
  transition: transform var(--dur) var(--ease);
  flex: none;
}
/* Rotate caret when step is open */
#checkout-checkout .panel.panel-default:has(.panel-collapse.in) .accordion-toggle i {
  transform: rotate(180deg);
}

/* ── Panel body ─────────────────────────────────────────────────────────── */
#checkout-checkout .panel-body {
  padding: var(--space-6) var(--space-5) !important;
  border-top: none !important;
}

/* ── Bootstrap 3 form → Cartello ─────────────────────────────────────────
   Applies to all injected sub-templates (payment_address, shipping_address,
   payment_method, etc.) which use .form-horizontal / .form-group / .form-control.
   ─────────────────────────────────────────────────────────────────────────── */

/* Default form-group: horizontal two-column (label | input) on ≥640px */
#checkout-checkout .form-group {
  display: grid !important;
  grid-template-columns: 1fr;
  gap: var(--space-1) 0;
  margin-bottom: var(--space-4) !important;
  float: none !important;
  clear: both;
}
@media (min-width: 640px) {
  #checkout-checkout .form-group {
    grid-template-columns: 152px 1fr;
    align-items: start;
    gap: 0 var(--space-5);
  }
}

/* Login step: always single-column (label on top, input below) */
#collapse-checkout-option .form-group {
  grid-template-columns: 1fr !important;
  gap: var(--space-1) 0 !important;
}

/* Reset Bootstrap grid inside form */
#checkout-checkout .form-group > [class*="col-"] {
  width: 100% !important;
  max-width: 100% !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  float: none !important;
}

/* Label */
#checkout-checkout .control-label {
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-medium) !important;
  color: var(--color-heading) !important;
  text-align: left !important;
  padding-top: 0.78em;
  line-height: 1.4;
}
/* On mobile (single col), labels don't need top padding */
@media (max-width: 639px) {
  #checkout-checkout .control-label { padding-top: 0; }
}

/* Required star */
#checkout-checkout .form-group.required .control-label::after,
.st-page-form .form-group.required .control-label::after {
  content: " *";
  color: var(--color-sale);
}

/* Input / select / textarea */
#checkout-checkout .form-control {
  display: block !important;
  width: 100% !important;
  padding: 0.72em 0.95em !important;
  font-size: var(--fs-sm2) !important;
  font-family: inherit !important;
  color: var(--color-text) !important;
  background: var(--white) !important;
  border: 1px solid var(--color-border-strong) !important;
  border-radius: var(--radius) !important;
  box-shadow: none !important;
  outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
  line-height: 1.5;
  height: auto !important;
  -webkit-appearance: none;
  appearance: none;
}
#checkout-checkout .form-control:focus {
  border-color: var(--accent) !important;
  box-shadow: var(--shadow-focus) !important;
}
#checkout-checkout .form-control::placeholder { color: var(--gray-400); }

/* Custom select arrow */
#checkout-checkout select.form-control {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2385858C' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 0.9em center !important;
  padding-right: 2.5em !important;
  cursor: pointer;
}

/* Error state */
#checkout-checkout .form-group.has-error .form-control {
  border-color: #dc2626 !important;
  box-shadow: 0 0 0 3px rgba(220, 38, 38, .12) !important;
}
#checkout-checkout .text-danger {
  font-size: var(--fs-xs) !important;
  color: #dc2626 !important;
  margin-top: var(--space-1);
  display: block;
}
/* Error on .st-field (login template) */
#checkout-checkout .st-field.has-error .form-control,
#checkout-checkout .st-field.has-error .st-input {
  border-color: #dc2626 !important;
  box-shadow: 0 0 0 3px rgba(220, 38, 38, .12) !important;
}

/* Input group (input + button, e.g. date picker) */
#checkout-checkout .input-group {
  display: flex !important;
  align-items: stretch;
}
#checkout-checkout .input-group .form-control {
  border-right: none !important;
  border-radius: var(--radius) 0 0 var(--radius) !important;
  flex: 1 1 auto !important;
  min-width: 0;
}
#checkout-checkout .input-group-btn { display: flex; }
#checkout-checkout .input-group-btn .btn {
  border-left: none;
  border-radius: 0 var(--radius) var(--radius) 0 !important;
  height: auto;
  display: flex;
  align-items: center;
  padding: 0.72em 1em !important;
}

/* Radio / checkbox — custom accent-color + inline flex */
#checkout-checkout .radio,
#checkout-checkout .checkbox {
  margin: 0 0 var(--space-3) !important;
}
#checkout-checkout .radio label,
#checkout-checkout .checkbox label {
  display: inline-flex !important;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--fs-sm2) !important;
  cursor: pointer;
  padding-left: 0 !important;
}
#checkout-checkout .radio input[type="radio"],
#checkout-checkout .checkbox input[type="checkbox"] {
  accent-color: var(--accent);
  width: 16px;
  height: 16px;
  margin: 0 !important;
  cursor: pointer;
  flex: none;
  position: static !important;
}

/* ── Buttons — override Bootstrap 3 .btn-* ───────────────────────────── */

/* Reset Bootstrap button base */
#checkout-checkout .btn {
  font-family: inherit !important;
  line-height: 1.2 !important;
  box-shadow: none !important;
  text-shadow: none !important;
}

/* btn-primary */
#checkout-checkout .btn-primary {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.5em;
  padding: 0.82em 1.75em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  color: var(--on-accent) !important;
  background: var(--accent) !important;
  border: 1px solid var(--accent) !important;
  border-radius: var(--radius) !important;
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease),
              box-shadow var(--dur) var(--ease) !important;
  cursor: pointer;
}
#checkout-checkout .btn-primary:hover,
#checkout-checkout .btn-primary:focus {
  background: var(--accent-600) !important;
  border-color: var(--accent-600) !important;
  box-shadow: var(--shadow-md) !important;
  color: var(--on-accent) !important;
}

/* btn-default */
#checkout-checkout .btn-default {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.5em;
  padding: 0.82em 1.5em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  color: var(--color-heading) !important;
  background: var(--white) !important;
  border: 1px solid var(--color-border-strong) !important;
  border-radius: var(--radius) !important;
  transition: all var(--dur) var(--ease) !important;
  cursor: pointer;
}
#checkout-checkout .btn-default:hover,
#checkout-checkout .btn-default:focus {
  background: var(--color-heading) !important;
  color: #fff !important;
  border-color: var(--color-heading) !important;
}

/* btn-danger */
#checkout-checkout .btn-danger {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.72em 1em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  background: #fee2e2 !important;
  color: #dc2626 !important;
  border: 1px solid #fecaca !important;
  border-radius: var(--radius) !important;
  transition: all var(--dur) var(--ease) !important;
  cursor: pointer;
}
#checkout-checkout .btn-danger:hover,
#checkout-checkout .btn-danger:focus {
  background: #dc2626 !important;
  color: #fff !important;
  border-color: #dc2626 !important;
}

/* Loading state (Bootstrap 3 sets content via data-loading-text) */
#checkout-checkout .btn[disabled] { opacity: 0.6; cursor: not-allowed; }

/* Buttons row at bottom of each step */
#checkout-checkout .buttons {
  margin-top: var(--space-6);
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--space-3);
}
#checkout-checkout .buttons::after,
#checkout-checkout .buttons::before { display: none !important; } /* clearfix */
#checkout-checkout .buttons .pull-right {
  display: flex;
  gap: var(--space-3);
  margin-left: auto;
  float: none !important;
}
#checkout-checkout .buttons .pull-left {
  display: flex;
  gap: var(--space-3);
  float: none !important;
}

/* ── Login step (two-column card) ────────────────────────────────────────── */
#checkout-checkout .st-checkout-login-col {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding-bottom: var(--space-2);
}
#checkout-checkout .st-checkout-login-col h3 {
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-snug);
  margin-bottom: 0;
}
#checkout-checkout .st-checkout-login-col > p {
  color: var(--color-text-muted);
  font-size: var(--fs-sm2);
  margin-bottom: 0;
}
#checkout-checkout .st-checkout-login-col .st-field__label {
  font-size: var(--fs-sm2);
  font-weight: var(--fw-medium);
  color: var(--color-heading);
  display: block;
  margin-bottom: var(--space-1);
}
#checkout-checkout .st-checkout-forgot {
  display: inline-block;
  margin-top: var(--space-2);
  font-size: var(--fs-sm);
  color: var(--color-text-muted);
  text-decoration: none;
}
#checkout-checkout .st-checkout-forgot:hover { color: var(--accent); }

/* Divider between columns */
#collapse-checkout-option .row > [class*="col-"]:first-child {
  padding-bottom: var(--space-5);
  border-bottom: var(--hairline);
  margin-bottom: var(--space-5);
}
@media (min-width: 576px) {
  #collapse-checkout-option .row > [class*="col-"]:first-child {
    padding-bottom: 0;
    border-bottom: none;
    margin-bottom: 0;
    border-right: var(--hairline);
    padding-right: var(--space-6) !important;
  }
  #collapse-checkout-option .row > [class*="col-"]:last-child {
    padding-left: var(--space-6) !important;
  }
}

/* ── Confirm table ───────────────────────────────────────────────────────── */
#checkout-checkout .table-responsive {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: var(--hairline);
  border-radius: var(--radius);
  margin-bottom: var(--space-5);
}
#checkout-checkout .table {
  width: 100%;
  border-collapse: collapse !important;
  font-size: var(--fs-sm2);
  margin: 0 !important;
}
#checkout-checkout .table.table-bordered {
  border: none !important;
}
/* Remove all cell borders — we use row borders only */
#checkout-checkout .table.table-bordered > thead > tr > td,
#checkout-checkout .table.table-bordered > thead > tr > th,
#checkout-checkout .table.table-bordered > tbody > tr > td,
#checkout-checkout .table.table-bordered > tfoot > tr > td {
  border: none !important;
  border-bottom: var(--hairline) !important;
}

/* Header row */
#checkout-checkout .table thead tr td,
#checkout-checkout .table thead tr th {
  background: var(--gray-50) !important;
  font-size: var(--fs-xs) !important;
  font-weight: var(--fw-bold) !important;
  letter-spacing: var(--tracking-caps) !important;
  text-transform: uppercase !important;
  color: var(--color-text-muted) !important;
  padding: var(--space-3) var(--space-4) !important;
  border-bottom: 1px solid var(--color-border-strong) !important;
  white-space: nowrap;
}

/* Body rows */
#checkout-checkout .table tbody tr td {
  padding: var(--space-4) !important;
  border-bottom: var(--hairline) !important;
  vertical-align: middle;
}
#checkout-checkout .table tbody tr:last-child td {
  border-bottom: none !important;
}

/* Hover */
#checkout-checkout .table-hover tbody tr:hover td {
  background: var(--gray-50) !important;
}

/* Footer (totals) */
#checkout-checkout .table tfoot tr td {
  padding: var(--space-3) var(--space-4) !important;
  border-top: 1px solid var(--color-border-strong) !important;
  border-bottom: none !important;
  font-size: var(--fs-sm2);
}
#checkout-checkout .table tfoot tr:last-child td {
  font-weight: var(--fw-bold);
  font-size: var(--fs-md);
  color: var(--color-heading);
}

/* Payment details block below confirm table */
#checkout-checkout .panel-body > :not(.table-responsive) + * { margin-top: var(--space-4); }

/* ==========================================================================
   Cart page — #checkout-cart
   ========================================================================== */

/* ── Page ─────────────────────────────────────────────────────────────────── */
#checkout-cart {
  padding-block: var(--space-6) var(--space-16);
}

/* ── Breadcrumb ──────────────────────────────────────────────────────────── */
#checkout-cart .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
#checkout-cart .breadcrumb > li { display: flex; align-items: center; }
#checkout-cart .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
}
#checkout-cart .breadcrumb a { color: inherit; }
#checkout-cart .breadcrumb a:hover { color: var(--accent); }
#checkout-cart .breadcrumb > li:last-child a {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

/* ── Heading ─────────────────────────────────────────────────────────────── */
.st-cart-heading {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight);
  margin-bottom: var(--space-8);
}
.st-cart-weight {
  font-size: var(--fs-base);
  font-weight: var(--fw-regular);
  color: var(--color-text-muted);
  margin-left: var(--space-2);
}

/* ── Layout: main + sidebar ──────────────────────────────────────────────── */
.st-cart-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  align-items: start;
}
@media (min-width: 960px) {
  .st-cart-layout {
    grid-template-columns: 1fr 320px;
    gap: var(--space-8);
  }
}

/* ── Products table ──────────────────────────────────────────────────────── */
.st-cart-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: var(--hairline);
  border-radius: var(--radius-lg);
  margin-bottom: var(--space-6);
}

.st-cart-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm2);
}

/* Header */
.st-cart-table thead th {
  background: var(--gray-50);
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--color-text-muted);
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-border-strong);
  white-space: nowrap;
}

/* Body rows */
.st-cart-table tbody tr { transition: background var(--dur) var(--ease); }
.st-cart-table tbody tr:hover { background: var(--gray-50); }
.st-cart-table tbody td {
  padding: var(--space-4);
  border-bottom: var(--hairline);
  vertical-align: middle;
}
.st-cart-table tbody tr:last-child td { border-bottom: none; }

/* Image cell */
.st-cart-cell--img { width: 76px; }
.st-cart-thumb {
  width: 64px;
  height: 64px;
  object-fit: cover;
  border-radius: var(--radius);
  display: block;
}

/* Name cell */
.st-cart-name {
  font-weight: var(--fw-medium);
  color: var(--color-heading);
  display: block;
  margin-bottom: var(--space-1);
  transition: color var(--dur) var(--ease);
}
.st-cart-name:hover { color: var(--accent); }

.st-cart-no-stock {
  font-size: var(--fs-xs);
  color: var(--color-sale);
  font-weight: var(--fw-bold);
  margin-left: var(--space-1);
}

.st-cart-options {
  list-style: none;
  padding: 0;
  margin: var(--space-1) 0 0;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.st-cart-options li {
  font-size: var(--fs-xs);
  color: var(--color-text-muted);
}

.st-cart-meta {
  font-size: var(--fs-xs);
  color: var(--color-text-muted);
  margin-top: var(--space-1);
}

/* Model cell — hide on small screens */
.st-cart-col--model,
.st-cart-cell--model {
  display: none;
}
@media (min-width: 768px) {
  .st-cart-col--model,
  .st-cart-cell--model { display: table-cell; }
}

/* Qty cell */
.st-cart-cell--qty { white-space: nowrap; }

/* Cart-специфічний вигляд qty (окремі кнопки-боксики). Заскоуплено під #checkout-cart,
   інакше перебиває суцільний PDP-степер (.st-qty у components.css), бо checkout.css
   вантажиться в бандлі пізніше. */
#checkout-cart .st-qty {
  display: flex;
  align-items: center;
  gap: var(--space-1);
}

#checkout-cart .st-qty__input {
  width: 52px;
  padding: 0.5em 0.6em;
  font-size: var(--fs-sm2);
  font-family: inherit;
  text-align: center;
  color: var(--color-text);
  background: var(--white);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
  -webkit-appearance: none;
  appearance: none;
}
#checkout-cart .st-qty__input:focus {
  border-color: var(--accent);
  box-shadow: var(--shadow-focus);
}
#checkout-cart .st-qty__input:disabled {
  background: var(--gray-50);
  color: var(--color-text-muted);
  cursor: not-allowed;
}

#checkout-cart .st-qty__btn {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 0.95rem;
  border-radius: var(--radius);
  border: 1px solid var(--color-border-strong);
  background: var(--white);
  color: var(--color-text-muted);
  cursor: pointer;
  transition: all var(--dur) var(--ease);
  flex-shrink: 0;
}
#checkout-cart .st-qty__btn--update:hover {
  border-color: var(--accent);
  color: var(--accent);
  background: var(--accent-soft);
}
#checkout-cart .st-qty__btn--remove:hover {
  border-color: #dc2626;
  color: #dc2626;
  background: #fee2e2;
}

/* Price / total cells */
.st-cart-cell--price,
.st-cart-cell--total {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.st-cart-cell--total {
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
}

/* Mobile: рядок-таблиця не влазить → перетворюємо кожен рядок на картку (stacked) */
@media (max-width: 639px) {
  .st-cart-table-wrap { overflow-x: visible; border: none; border-radius: 0; margin-bottom: var(--space-4); }
  .st-cart-table thead { display: none; }
  .st-cart-table, .st-cart-table tbody, .st-cart-table tr, .st-cart-table td { display: block; }
  .st-cart-table tbody tr {
    display: grid;
    grid-template-columns: 64px 1fr;
    grid-template-areas:
      "img name"
      "img qty"
      "price total";
    gap: var(--space-2) var(--space-4);
    align-items: center;
    padding: var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    margin-bottom: var(--space-3);
  }
  .st-cart-table tbody tr:hover { background: none; }
  .st-cart-table tbody td { padding: 0; border: none; }
  .st-cart-cell--img  { grid-area: img; align-self: start; width: auto; }
  .st-cart-cell--name { grid-area: name; align-self: start; }
  .st-cart-cell--qty  { grid-area: qty; align-self: start; }
  .st-cart-cell--price { grid-area: price; text-align: left !important; color: var(--color-text-muted); }
  .st-cart-cell--price::before { content: attr(data-label); display: block; font-size: var(--fs-xs); color: var(--color-text-muted); }
  .st-cart-cell--total { grid-area: total; text-align: right !important; align-self: center; }
}

/* ── Modules (coupon / voucher / shipping estimator) ────────────────────── */
.st-cart-modules {
  margin-top: var(--space-2);
}

.st-cart-modules__label {
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--color-text-muted);
  border-bottom: var(--hairline);
  padding-bottom: var(--space-3);
  margin-bottom: var(--space-4);
}

.st-cart-modules__desc {
  font-size: var(--fs-sm2);
  color: var(--color-text-muted);
  margin-bottom: var(--space-5);
}

/* Remap extension/total/* output (coupon/voucher/reward/shipping-estimate —
   Bootstrap 5 markup: .st-total-panel / .st-panel-toggle, shared with
   extension/module/custom's .custom-modules-accordion). */
.st-cart-modules__list,
.custom-modules-accordion {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.st-total-panel {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: border-color var(--dur) var(--ease);
}
.st-total-panel:has(.collapse.show) { border-color: var(--accent); }
.st-panel-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  text-decoration: none;
}
.st-panel-toggle:hover { color: var(--accent); }
.st-panel-toggle i {
  color: var(--color-text-muted);
  transition: transform var(--dur) var(--ease);
  flex: none;
}
.st-panel-toggle:not(.collapsed) i { transform: rotate(180deg); }
.st-total-panel-body {
  padding: var(--space-4);
  border-top: var(--hairline);
}
.st-total-panel-body .form-label {
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-medium) !important;
  color: var(--color-heading) !important;
  margin-bottom: var(--space-1);
  display: block;
}
.st-total-panel-body .form-control,
.st-total-panel-body .form-select {
  display: block !important;
  width: 100% !important;
  padding: 0.72em 0.95em !important;
  font-size: var(--fs-sm2) !important;
  font-family: inherit !important;
  color: var(--color-text) !important;
  background: var(--white) !important;
  border: 1px solid var(--color-border-strong) !important;
  border-radius: var(--radius) !important;
  box-shadow: none !important;
  height: auto !important;
  outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
  -webkit-appearance: none;
  appearance: none;
}
.st-total-panel-body .form-control:focus,
.st-total-panel-body .form-select:focus {
  border-color: var(--accent) !important;
  box-shadow: var(--shadow-focus) !important;
}
.st-total-panel-body .input-group { display: flex !important; align-items: stretch; }
.st-total-panel-body .input-group .form-control {
  border-right: none !important;
  border-radius: var(--radius) 0 0 var(--radius) !important;
  flex: 1 1 auto !important;
  min-width: 0;
}
.st-total-panel-body .input-group .btn-st-buy {
  border-radius: 0 var(--radius) var(--radius) 0 !important;
}
.st-total-panel-body .form-check {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding-left: 0;
}
.st-total-panel-body .form-check-input {
  accent-color: var(--accent);
  width: 16px;
  height: 16px;
  margin: 0 !important;
  cursor: pointer;
  flex: none;
}
.st-total-panel-body .form-check-label { font-size: var(--fs-sm2); cursor: pointer; }
.st-total-panel-body .text-danger {
  font-size: var(--fs-xs) !important;
  color: #dc2626 !important;
  margin-top: var(--space-1);
  display: block;
}
.st-total-panel-body .btn-outline-secondary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.6em 1.2em;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  background: var(--white);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  cursor: pointer;
  transition: all var(--dur) var(--ease);
}
.st-total-panel-body .btn-outline-secondary:hover {
  background: var(--color-heading);
  color: #fff;
  border-color: var(--color-heading);
}

/* ── Sidebar ─────────────────────────────────────────────────────────────── */
.st-cart-sidebar {
  position: sticky;
  top: calc(var(--header-h) + var(--space-6));
}

/* ── Totals block ────────────────────────────────────────────────────────── */
.st-cart-totals {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  margin-bottom: var(--space-4);
}

.st-cart-totals__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-3) 0;
  border-bottom: var(--hairline);
  font-size: var(--fs-sm2);
}
.st-cart-totals__row:first-child { padding-top: 0; }
.st-cart-totals__row:last-child { border-bottom: none; padding-bottom: 0; }

.st-cart-totals__label { color: var(--color-text-muted); }
.st-cart-totals__value {
  font-variant-numeric: tabular-nums;
  color: var(--color-heading);
}

.st-cart-totals__row--grand .st-cart-totals__label {
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  font-size: var(--fs-base);
}
.st-cart-totals__row--grand .st-cart-totals__value {
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
}

/* ── Sidebar action buttons ───────────────────────────────────────────────── */
.st-cart-sidebar__actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.st-cart-btn-checkout {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5em;
  padding: 0.9em 1.5em;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--on-accent);
  background: var(--accent);
  border: 1px solid var(--accent);
  border-radius: var(--radius);
  transition: background var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
  text-align: center;
}
.st-cart-btn-checkout:hover {
  background: var(--accent-600);
  border-color: var(--accent-600);
  box-shadow: var(--shadow-md);
  color: var(--on-accent);
}
.st-cart-btn-checkout i { font-size: 1rem; transition: transform var(--dur) var(--ease); }
.st-cart-btn-checkout:hover i { transform: translateX(3px); }

.st-cart-btn-continue {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0.8em 1.5em;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  background: var(--white);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  transition: all var(--dur) var(--ease);
  text-align: center;
}
.st-cart-btn-continue:hover {
  background: var(--color-heading);
  color: #fff;
  border-color: var(--color-heading);
}

/* ── Empty cart state ────────────────────────────────────────────────────── */
.st-cart-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-5);
  padding: var(--space-20) var(--space-4);
  text-align: center;
}
.st-cart-empty i {
  font-size: 3.5rem;
  color: var(--color-border-strong);
}
.st-cart-empty p {
  font-size: var(--fs-lg);
  color: var(--color-text-muted);
}

/* ---- account.css ---- */
/* ==========================================================================
   Cartello — account.css
   All account/* pages: scoped under [id^="account-"].
   Remaps Bootstrap 3 form/button/table/well classes to the design system.
   ========================================================================== */

/* ── Page layout ─────────────────────────────────────────────────────────── */
[id^="account-"] {
  padding-block: var(--space-6) var(--space-16);
}

/* ── Account sidebar nav (extension/module/account) ──────────────────────── */
.st-account-nav {
  display: flex; flex-direction: column; gap: 2px;
  padding: var(--space-2);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
}
.st-account-nav__link {
  display: flex; align-items: center; gap: var(--space-3);
  padding: 0.62rem var(--space-3);
  border-radius: var(--radius-sm);
  font-size: var(--fs-sm2); color: var(--color-text);
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.st-account-nav__link i { font-size: 1.15rem; color: var(--color-text-muted); flex-shrink: 0; }
.st-account-nav__link:hover { background: var(--color-bg-alt); color: var(--color-heading); }
.st-account-nav__link:hover i { color: var(--color-heading); }
.st-account-nav__link--logout { margin-top: var(--space-2); border-top: 1px solid var(--color-border); border-radius: 0 0 var(--radius-sm) var(--radius-sm); color: #dc2626; }
.st-account-nav__link--logout i { color: #dc2626; }
.st-account-nav__link--logout:hover { background: #fef2f2; color: #dc2626; }

[id^="account-"] #content > h1,
[id^="account-"] #content > h2 {
  margin-bottom: var(--space-6);
}
[id^="account-"] #content > h1 {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight);
}
[id^="account-"] #content > h2 {
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-snug);
}

/* ── Breadcrumb — override Bootstrap 3 ──────────────────────────────────── */
[id^="account-"] .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
[id^="account-"] .breadcrumb > li { display: flex; align-items: center; }
[id^="account-"] .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
  color: var(--color-text-muted);
}
[id^="account-"] .breadcrumb a { color: inherit; }
[id^="account-"] .breadcrumb a:hover { color: var(--accent); }
[id^="account-"] .breadcrumb > li:last-child a,
[id^="account-"] .breadcrumb > .active {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

/* ── Fieldset / legend ───────────────────────────────────────────────────── */
[id^="account-"] fieldset {
  border: none;
  padding: 0;
  margin: 0 0 var(--space-8);
}

[id^="account-"] legend {
  display: block;
  width: 100%;
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--color-text-muted);
  border: none;
  border-bottom: var(--hairline);
  padding-bottom: var(--space-3);
  margin-bottom: var(--space-5);
}

/* ── Form — Bootstrap 3 → Cartello ──────────────────────────────────────── */
[id^="account-"] .form-group {
  display: grid !important;
  grid-template-columns: 152px 1fr;
  align-items: start;
  gap: 0 var(--space-5);
  margin-bottom: var(--space-4) !important;
  float: none !important;
}
@media (max-width: 639px) {
  [id^="account-"] .form-group {
    grid-template-columns: 1fr;
    gap: var(--space-1) 0;
  }
}

/* Login / forgotten / newsletter — always single-column */
#account-login .form-group,
#account-forgotten .form-group,
#account-newsletter .form-group {
  grid-template-columns: 1fr !important;
  gap: var(--space-1) 0 !important;
}

/* Reset Bootstrap col-* inside form-group */
[id^="account-"] .form-group > [class*="col-"] {
  width: 100% !important;
  max-width: 100% !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  float: none !important;
}

/* Label */
[id^="account-"] .control-label {
  font-size: var(--fs-base) !important;
  font-weight: var(--fw-medium) !important;
  color: var(--color-heading) !important;
  text-align: left !important;
  padding-top: 0.78em;
  line-height: 1.4;
}
@media (max-width: 639px) {
  [id^="account-"] .control-label { padding-top: 0; }
}
#account-login .control-label,
#account-forgotten .control-label {
  padding-top: 0 !important;
  margin-bottom: var(--space-1);
  display: block;
}

/* Required marker */
[id^="account-"] .form-group.required .control-label::after {
  content: "\00A0*";
  color: var(--color-sale);
}

/* Input / select / textarea */
[id^="account-"] .form-control {
  display: block !important;
  width: 100% !important;
  padding: 0.72em 0.95em !important;
  font-size: var(--fs-sm2) !important;
  font-family: inherit !important;
  color: var(--color-text) !important;
  background: var(--white) !important;
  border: 1px solid var(--color-border-strong) !important;
  border-radius: var(--radius) !important;
  box-shadow: none !important;
  outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
  line-height: 1.5;
  height: auto !important;
  -webkit-appearance: none;
  appearance: none;
}
[id^="account-"] .form-control:focus {
  border-color: var(--accent) !important;
  box-shadow: var(--shadow-focus) !important;
}
[id^="account-"] .form-control::placeholder { color: var(--gray-400); }

[id^="account-"] select.form-control {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2385858C' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 0.9em center !important;
  padding-right: 2.5em !important;
  cursor: pointer;
}

/* Textarea */
[id^="account-"] textarea.form-control {
  resize: vertical;
  min-height: 100px;
}

/* Validation */
[id^="account-"] .form-group.has-error .form-control {
  border-color: #dc2626 !important;
  box-shadow: 0 0 0 3px rgba(220, 38, 38, .12) !important;
}
[id^="account-"] .text-danger {
  font-size: var(--fs-xs) !important;
  color: #dc2626 !important;
  margin-top: var(--space-1);
  display: block;
}

/* Input group (date picker, etc.) */
[id^="account-"] .input-group {
  display: flex !important;
  align-items: stretch;
}
[id^="account-"] .input-group .form-control {
  border-right: none !important;
  border-radius: var(--radius) 0 0 var(--radius) !important;
  flex: 1 1 auto !important;
  min-width: 0;
}
[id^="account-"] .input-group-btn { display: flex; }
[id^="account-"] .input-group-btn .btn {
  border-radius: 0 var(--radius) var(--radius) 0 !important;
  height: auto;
  display: flex;
  align-items: center;
  padding: 0.72em 1em !important;
}

/* Radio / checkbox */
[id^="account-"] .radio,
[id^="account-"] .checkbox {
  margin: 0 0 var(--space-2) !important;
}
[id^="account-"] .radio label,
[id^="account-"] .checkbox label {
  display: inline-flex !important;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--fs-sm2) !important;
  cursor: pointer;
  padding-left: 0 !important;
}
[id^="account-"] .radio input[type="radio"],
[id^="account-"] .checkbox input[type="checkbox"] {
  accent-color: var(--accent);
  width: 16px; height: 16px;
  margin: 0 !important;
  cursor: pointer;
  flex: none;
  position: static !important;
}

/* Inline radio/checkbox (newsletter, address default) */
[id^="account-"] .radio-inline {
  display: inline-flex !important;
  align-items: center;
  gap: var(--space-2);
  padding: 0 !important;
  margin-right: var(--space-4) !important;
  font-size: var(--fs-sm2);
  cursor: pointer;
  font-weight: var(--fw-regular);
  vertical-align: middle;
}
[id^="account-"] .radio-inline input {
  accent-color: var(--accent);
  width: 15px; height: 15px;
  margin: 0 !important;
  cursor: pointer;
  position: static !important;
  flex: none;
}

/* ── Buttons ─────────────────────────────────────────────────────────────── */
[id^="account-"] .btn {
  font-family: inherit !important;
  line-height: 1.2 !important;
  box-shadow: none !important;
  text-shadow: none !important;
}

[id^="account-"] .btn-primary {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.5em;
  padding: 0.82em 1.75em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  color: var(--on-accent) !important;
  background: var(--accent) !important;
  border: 1px solid var(--accent) !important;
  border-radius: var(--radius) !important;
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease),
              box-shadow var(--dur) var(--ease) !important;
  cursor: pointer;
}
[id^="account-"] .btn-primary:hover,
[id^="account-"] .btn-primary:focus {
  background: var(--accent-600) !important;
  border-color: var(--accent-600) !important;
  box-shadow: var(--shadow-md) !important;
  color: var(--on-accent) !important;
}

[id^="account-"] .btn-default {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.5em;
  padding: 0.82em 1.5em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  color: var(--color-heading) !important;
  background: var(--white) !important;
  border: 1px solid var(--color-border-strong) !important;
  border-radius: var(--radius) !important;
  transition: all var(--dur) var(--ease) !important;
  cursor: pointer;
}
[id^="account-"] .btn-default:hover,
[id^="account-"] .btn-default:focus {
  background: var(--color-heading) !important;
  color: #fff !important;
  border-color: var(--color-heading) !important;
}

/* btn-info → soft accent variant (Edit, View buttons) */
[id^="account-"] .btn-info {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.55em 1em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  color: var(--accent-700) !important;
  background: var(--accent-soft) !important;
  border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent) !important;
  border-radius: var(--radius) !important;
  transition: all var(--dur) var(--ease) !important;
  cursor: pointer;
}
[id^="account-"] .btn-info:hover,
[id^="account-"] .btn-info:focus {
  background: var(--accent) !important;
  color: var(--on-accent) !important;
  border-color: var(--accent) !important;
}

[id^="account-"] .btn-danger {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.55em 1em !important;
  font-size: var(--fs-sm2) !important;
  font-weight: var(--fw-semibold) !important;
  background: #fee2e2 !important;
  color: #dc2626 !important;
  border: 1px solid #fecaca !important;
  border-radius: var(--radius) !important;
  transition: all var(--dur) var(--ease) !important;
  cursor: pointer;
}
[id^="account-"] .btn-danger:hover,
[id^="account-"] .btn-danger:focus {
  background: #dc2626 !important;
  color: #fff !important;
  border-color: #dc2626 !important;
}

/* Buttons bar */
[id^="account-"] .buttons {
  margin-top: var(--space-6);
  display: flex !important;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-3);
  justify-content: space-between;
}
[id^="account-"] .buttons::before,
[id^="account-"] .buttons::after { display: none !important; }
[id^="account-"] .buttons .pull-right {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin-left: auto;
  float: none !important;
}
[id^="account-"] .buttons .pull-left {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  float: none !important;
}

/* Terms & conditions agree checkbox alignment */
[id^="account-"] .buttons input[type="checkbox"] {
  accent-color: var(--accent);
  width: 15px; height: 15px;
  vertical-align: middle;
  cursor: pointer;
}

/* ── Tables ──────────────────────────────────────────────────────────────── */

/* All tables get an outer border; .table-responsive wrapper also adds one.
   Reset the table's own border when it is inside .table-responsive so the
   border only comes from the wrapper div. */
[id^="account-"] .table {
  width: 100%;
  border-collapse: collapse !important;
  font-size: var(--fs-sm2);
  margin-bottom: var(--space-4) !important;
  border: var(--hairline);
}
[id^="account-"] .table > thead > tr > td,
[id^="account-"] .table > thead > tr > th,
[id^="account-"] .table > tbody > tr > td,
[id^="account-"] .table > tfoot > tr > td {
  border: none !important;
  border-bottom: var(--hairline) !important;
}

/* .table-responsive wrapper — rounded border; table inside needs no border */
[id^="account-"] .table-responsive {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: var(--hairline);
  border-radius: var(--radius);
  margin-bottom: var(--space-5);
}
[id^="account-"] .table-responsive .table {
  border: none !important;
  margin: 0 !important;
}

/* Header row */
[id^="account-"] .table thead tr td,
[id^="account-"] .table thead tr th {
  background: var(--gray-50) !important;
  font-size: var(--fs-xs) !important;
  font-weight: var(--fw-bold) !important;
  letter-spacing: var(--tracking-caps) !important;
  text-transform: uppercase !important;
  color: var(--color-text-muted) !important;
  padding: var(--space-3) var(--space-4) !important;
  border-bottom: 1px solid var(--color-border-strong) !important;
  white-space: nowrap;
}

/* Body rows */
[id^="account-"] .table tbody tr td {
  padding: var(--space-4) !important;
  border-bottom: var(--hairline) !important;
  vertical-align: middle;
}
[id^="account-"] .table tbody tr:last-child td { border-bottom: none !important; }
[id^="account-"] .table-hover tbody tr:hover td { background: var(--gray-50) !important; }

/* Tfoot */
[id^="account-"] .table tfoot tr td {
  padding: var(--space-3) var(--space-4) !important;
  border-top: 1px solid var(--color-border-strong) !important;
  border-bottom: none !important;
}
[id^="account-"] .table tfoot tr:last-child td {
  font-weight: var(--fw-bold);
  font-size: var(--fs-md);
  color: var(--color-heading);
}

/* Product thumb in wishlist */
[id^="account-"] .table img {
  width: 56px;
  height: 56px;
  object-fit: cover;
  border-radius: var(--radius-sm);
  display: block;
}

/* Pagination row below tables */
[id^="account-"] .table + .row {
  margin-top: var(--space-4);
  font-size: var(--fs-sm2);
  color: var(--color-text-muted);
}

/* ── Bootstrap 3 pagination → Cartello ──────────────────────────────────── */
[id^="account-"] .pagination {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem;
  list-style: none;
  padding: 0 !important;
  margin: 0 !important;
}
[id^="account-"] .pagination > li > a,
[id^="account-"] .pagination > li > span {
  display: inline-grid;
  place-items: center;
  min-width: 40px;
  height: 40px;
  padding: 0 0.4rem;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading) !important;
  background: var(--white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius) !important;
  transition: all var(--dur) var(--ease);
  text-decoration: none !important;
}
[id^="account-"] .pagination > li > a:hover {
  border-color: var(--color-heading) !important;
  background: var(--color-heading) !important;
  color: #fff !important;
}
[id^="account-"] .pagination > li.active > a,
[id^="account-"] .pagination > li.active > span {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: var(--on-accent) !important;
}
[id^="account-"] .pagination > li.disabled > a,
[id^="account-"] .pagination > li.disabled > span {
  opacity: 0.4;
  pointer-events: none;
  background: var(--gray-50) !important;
}

/* ── Login page — .well → card ───────────────────────────────────────────── */
#account-login .well {
  background: var(--color-surface) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-lg) !important;
  padding: var(--space-8) !important;
  box-shadow: var(--shadow-sm) !important;
  margin-bottom: 0 !important;
}

#account-login .well h2 {
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-snug);
  margin-bottom: var(--space-3) !important;
}
#account-login .well > p {
  font-size: var(--fs-sm2);
  color: var(--color-text-muted);
  margin-bottom: var(--space-5) !important;
}
#account-login .well > p strong {
  color: var(--color-heading);
}

/* Forgotten link inside login form */
#account-login .well .form-group a {
  display: inline-block;
  margin-top: var(--space-2);
  font-size: var(--fs-sm);
  color: var(--color-text-muted);
}
#account-login .well .form-group a:hover { color: var(--accent); }

/* Forgot password page */
#account-forgotten #content {
  max-width: 520px;
}
#account-forgotten #content > p {
  color: var(--color-text-muted);
  margin-bottom: var(--space-6);
}

/* ── Account dashboard ───────────────────────────────────────────────────── */
.st-account-dash {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
}

.st-account-group__title {
  font-size: var(--fs-xs) !important;
  font-weight: var(--fw-bold) !important;
  letter-spacing: var(--tracking-caps) !important;
  text-transform: uppercase !important;
  color: var(--color-text-muted) !important;
  margin-bottom: var(--space-4) !important;
  padding-bottom: var(--space-3);
  border-bottom: var(--hairline);
}

.st-account-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-3);
}
@media (min-width: 480px) {
  .st-account-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 768px) {
  .st-account-grid { grid-template-columns: repeat(4, 1fr); }
}

.st-account-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  padding: var(--space-5) var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  text-align: center;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease),
              transform var(--dur) var(--ease), color var(--dur) var(--ease);
  color: var(--color-text);
  text-decoration: none !important;
}
.st-account-card:hover {
  border-color: var(--accent);
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
  color: var(--accent);
}
.st-account-card i {
  font-size: 1.75rem;
  color: var(--color-text-muted);
  transition: color var(--dur) var(--ease);
  line-height: 1;
}
.st-account-card:hover i { color: var(--accent); }
.st-account-card span {
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  line-height: 1.3;
  color: inherit;
}

/* ── Order info detail tables (no .table-responsive wrapper) ─────────────── */
#account-order .table {
  width: 100%;
  overflow-x: auto;
}

/* Order status badge */
#account-order .table tbody td:has(> b + br) {
  line-height: 1.8;
}

/* Order history heading */
#account-order h3 {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  margin: var(--space-6) 0 var(--space-3);
}

/* ── Wishlist price display ───────────────────────────────────────────────── */
[id^="account-"] .table .price {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.2rem;
}
[id^="account-"] .table .price b {
  font-size: var(--fs-md);
  color: var(--color-heading);
}
[id^="account-"] .table .price s {
  font-size: var(--fs-sm);
  color: var(--color-text-muted);
  text-decoration: line-through;
}

/* ── Register / edit forms — max-width on large screens ─────────────────── */
#account-register #content,
#account-edit #content,
#account-address #content,
#account-return #content,
#account-voucher #content {
  max-width: 860px;
}
#account-password #content,
#account-newsletter #content {
  max-width: 600px;
}

/* ── Text content paragraphs ─────────────────────────────────────────────── */
[id^="account-"] #content > p {
  color: var(--color-text-muted);
  margin-bottom: var(--space-5);
  font-size: var(--fs-sm2);
}

/* ---- information.css ---- */
/* ==========================================================================
   Cartello — information.css
   information/* pages: scoped under #information-information.
   ========================================================================== */

/* ── Page layout ─────────────────────────────────────────────────────────── */
#information-information {
  padding-block: var(--space-6) var(--space-16);
}

/* ── Breadcrumb ──────────────────────────────────────────────────────────── */
#information-information .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
#information-information .breadcrumb > li { display: flex; align-items: center; }
#information-information .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
}
#information-information .breadcrumb a { color: inherit; }
#information-information .breadcrumb a:hover { color: var(--accent); }
#information-information .breadcrumb > li:last-child a {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

/* ── Heading ─────────────────────────────────────────────────────────────── */
#information-information h1 {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight);
  margin-bottom: var(--space-8);
}

/* ── Content column — max-width for comfortable reading ──────────────────── */
#information-information #content {
  max-width: 860px;
}

/* ==========================================================================
   Status pages — #error-not-found, #common-success
   Shared .st-status-page component.
   ========================================================================== */

#error-not-found,
#common-success {
  padding-block: var(--space-6) var(--space-16);
}

#error-not-found .breadcrumb,
#common-success .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
#error-not-found .breadcrumb > li,
#common-success .breadcrumb > li { display: flex; align-items: center; }
#error-not-found .breadcrumb > li + li::before,
#common-success .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
}
#error-not-found .breadcrumb a,
#common-success .breadcrumb a { color: inherit; }
#error-not-found .breadcrumb a:hover,
#common-success .breadcrumb a:hover { color: var(--accent); }
#error-not-found .breadcrumb > li:last-child a,
#common-success .breadcrumb > li:last-child a {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

.st-status-page {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: var(--space-16) var(--space-4);
  max-width: 560px;
  margin-inline: auto;
  gap: var(--space-5);
}

.st-status-page__icon {
  width: 80px;
  height: 80px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--gray-100);
  color: var(--gray-400);
  font-size: 2.5rem;
}
.st-status-page__icon--success {
  background: var(--color-success-bg);
  color: var(--color-success);
}

.st-status-page__heading {
  font-size: var(--fs-xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-snug);
  color: var(--color-heading);
  margin: 0;
}

.st-status-page__text {
  font-size: var(--fs-sm2);
  color: var(--color-text-muted);
  margin: 0;
  line-height: 1.6;
}

.st-status-page__message {
  font-size: var(--fs-sm2);
  color: var(--color-text-muted);
  line-height: 1.7;
  text-align: left;
}
.st-status-page__message p { margin-bottom: var(--space-3); }
.st-status-page__message p:last-child { margin-bottom: 0; }

/* ==========================================================================
   Sitemap page — #information-sitemap
   ========================================================================== */

/* ── Page layout ─────────────────────────────────────────────────────────── */
#information-sitemap {
  padding-block: var(--space-6) var(--space-16);
}

/* ── Breadcrumb ──────────────────────────────────────────────────────────── */
#information-sitemap .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
#information-sitemap .breadcrumb > li { display: flex; align-items: center; }
#information-sitemap .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
}
#information-sitemap .breadcrumb a { color: inherit; }
#information-sitemap .breadcrumb a:hover { color: var(--accent); }
#information-sitemap .breadcrumb > li:last-child a {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

/* ── Heading ─────────────────────────────────────────────────────────────── */
#information-sitemap h1 {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight);
  margin-bottom: var(--space-8);
}

/* ── Two-column grid ─────────────────────────────────────────────────────── */
#information-sitemap #content > .row {
  gap: var(--space-6) 0;
}

/* ── Link lists — all levels ─────────────────────────────────────────────── */
#information-sitemap #content ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

/* Level 1 items */
#information-sitemap #content > .row > [class*="col"] > ul > li {
  border-bottom: var(--hairline);
}
#information-sitemap #content > .row > [class*="col"] > ul > li:first-child {
  border-top: var(--hairline);
}

#information-sitemap #content > .row > [class*="col"] > ul > li > a,
#information-sitemap #content > .row > [class*="col"] > ul > li > span {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3) 0;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  transition: color var(--dur) var(--ease);
}
#information-sitemap #content > .row > [class*="col"] > ul > li > span {
  cursor: default;
  color: var(--color-text-muted);
}
#information-sitemap #content > .row > [class*="col"] > ul > li > a::before {
  content: "";
  width: 3px;
  height: 3px;
  background: var(--accent);
  border-radius: 50%;
  flex-shrink: 0;
  opacity: 0;
  transition: opacity var(--dur) var(--ease);
}
#information-sitemap #content > .row > [class*="col"] > ul > li > a:hover {
  color: var(--accent);
}
#information-sitemap #content > .row > [class*="col"] > ul > li > a:hover::before {
  opacity: 1;
}

/* Level 2 items */
#information-sitemap #content ul ul {
  padding-left: var(--space-4);
  padding-bottom: var(--space-2);
  display: flex;
  flex-direction: column;
  gap: 0;
}

#information-sitemap #content ul ul > li > a {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) 0;
  font-size: var(--fs-sm);
  color: var(--color-text);
  transition: color var(--dur) var(--ease);
}
#information-sitemap #content ul ul > li > a::before {
  content: "—";
  font-size: 0.6em;
  color: var(--color-border-strong);
  flex-shrink: 0;
}
#information-sitemap #content ul ul > li > a:hover {
  color: var(--accent);
}
#information-sitemap #content ul ul > li > a:hover::before {
  color: var(--accent);
}

/* Level 3 items */
#information-sitemap #content ul ul ul {
  padding-left: var(--space-4);
}

#information-sitemap #content ul ul ul > li > a {
  font-size: var(--fs-sm);
  color: var(--color-text-muted);
  padding: var(--space-1) 0;
}
#information-sitemap #content ul ul ul > li > a::before {
  content: "·";
  color: var(--color-border-strong);
}
#information-sitemap #content ul ul ul > li > a:hover {
  color: var(--accent);
}

/* ---- contact.css ---- */
/* ==========================================================================
   Cartello — contact.css
   information/contact page. Scoped under #information-contact.
   ========================================================================== */

/* ── Page ─────────────────────────────────────────────────────────────────── */
#information-contact {
  padding-block: var(--space-6) var(--space-16);
}

/* ── Breadcrumb ──────────────────────────────────────────────────────────── */
#information-contact .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding: 0 !important;
  margin-bottom: var(--space-5) !important;
  background: none !important;
  border-radius: 0 !important;
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
#information-contact .breadcrumb > li { display: flex; align-items: center; }
#information-contact .breadcrumb > li + li::before {
  content: "/" !important;
  padding: 0 0.5rem !important;
  opacity: 0.4;
}
#information-contact .breadcrumb a { color: inherit; }
#information-contact .breadcrumb a:hover { color: var(--accent); }
#information-contact .breadcrumb > li:last-child a {
  color: var(--color-heading);
  font-weight: var(--fw-semibold);
}

/* ── Page heading ────────────────────────────────────────────────────────── */
.st-contact-heading {
  font-size: var(--fs-2xl);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-tight);
  color: var(--color-heading);
  margin: 0 0 var(--space-8);
}

/* ── Section eyebrow label ───────────────────────────────────────────────── */
.st-contact-section-label {
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--color-text-muted);
  border-bottom: var(--hairline);
  padding-bottom: var(--space-3);
  margin-bottom: var(--space-5);
}

/* ── Info cards grid ─────────────────────────────────────────────────────── */
.st-contact-info {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
  gap: var(--space-4);
  margin-bottom: var(--space-10);
}

.st-contact-info__card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
  padding: var(--space-5);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
}

.st-contact-info__icon {
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--accent-soft);
  border-radius: var(--radius);
  color: var(--accent);
  font-size: 1.1rem;
}

.st-contact-info__body {
  display: flex;
  flex-direction: column;
  min-width: 0;
  flex: 1;
}

.st-contact-info__label {
  font-size: var(--fs-xs);
  font-weight: var(--fw-bold);
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--color-text-muted);
  margin-bottom: var(--space-1);
}
.st-contact-info__label--push { margin-top: var(--space-4); }

.st-contact-info__store {
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  margin-bottom: var(--space-1);
}

.st-contact-info__address {
  font-size: var(--fs-sm2);
  color: var(--color-text);
  font-style: normal;
  line-height: 1.6;
  margin: 0;
}

.st-contact-info__value {
  font-size: var(--fs-sm2);
  color: var(--color-text);
  line-height: 1.6;
}

.st-contact-info__img {
  flex-shrink: 0;
  width: 64px;
  height: 64px;
  object-fit: cover;
  border-radius: var(--radius);
  margin-left: auto;
}

.st-contact-map-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.3em;
  margin-top: var(--space-3);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--accent);
  text-decoration: none;
  transition: opacity var(--dur) var(--ease);
}
.st-contact-map-btn:hover { opacity: 0.7; color: var(--accent); }

/* ── Locations accordion ─────────────────────────────────────────────────── */
.st-contact-locations {
  margin-bottom: var(--space-10);
}

.st-contact-accordion {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.st-contact-accordion__item {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: border-color var(--dur) var(--ease);
}
.st-contact-accordion__item[open] { border-color: var(--accent); }

.st-contact-accordion__trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  color: var(--color-heading);
  cursor: pointer;
  list-style: none;
  user-select: none;
}
.st-contact-accordion__trigger::-webkit-details-marker { display: none; }

.st-contact-accordion__caret {
  font-size: 1rem;
  color: var(--color-text-muted);
  transition: transform var(--dur) var(--ease);
  flex-shrink: 0;
}
.st-contact-accordion__item[open] .st-contact-accordion__caret {
  transform: rotate(180deg);
}

.st-contact-accordion__body {
  padding: 0 var(--space-5) var(--space-5);
}

.st-contact-info--nested {
  margin-bottom: 0;
}

.st-contact-info__card--img-only {
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
}

.st-contact-info__img-full {
  width: 100%;
  height: 140px;
  object-fit: cover;
  border-radius: var(--radius);
}

/* ── Contact form ─────────────────────────────────────────────────────────── */
.st-contact-form-wrap {
  max-width: 720px;
}

.st-contact-form__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 var(--space-5);
}
@media (max-width: 599px) {
  .st-contact-form__row { grid-template-columns: 1fr; }
}

.st-contact-form .form-group {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-bottom: var(--space-4) !important;
  float: none !important;
}

.st-contact-form label {
  font-size: var(--fs-sm2);
  font-weight: var(--fw-medium);
  color: var(--color-heading);
}

.st-contact-form .form-group.required label::after {
  content: " *";
  color: var(--color-sale);
}

.st-contact-form .form-control {
  display: block;
  width: 100%;
  padding: 0.72em 0.95em;
  font-size: var(--fs-sm2);
  font-family: inherit;
  color: var(--color-text);
  background: var(--white);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius);
  box-shadow: none;
  outline: none;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
  line-height: 1.5;
  height: auto;
  -webkit-appearance: none;
  appearance: none;
}
.st-contact-form .form-control:focus {
  border-color: var(--accent);
  box-shadow: var(--shadow-focus);
}
.st-contact-form .form-control::placeholder { color: var(--gray-400); }

.st-contact-form textarea.form-control {
  resize: vertical;
  min-height: 150px;
}

.st-contact-form .text-danger {
  font-size: var(--fs-xs);
  color: #dc2626;
}

.st-contact-form__actions {
  margin-top: var(--space-5);
}

.st-contact-form .btn-submit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.82em 2.25em;
  font-size: var(--fs-sm2);
  font-weight: var(--fw-semibold);
  font-family: inherit;
  color: var(--on-accent);
  background: var(--accent);
  border: 1px solid var(--accent);
  border-radius: var(--radius);
  cursor: pointer;
  line-height: 1.2;
  text-shadow: none;
  box-shadow: none;
  transition: background var(--dur) var(--ease), border-color var(--dur) var(--ease),
              box-shadow var(--dur) var(--ease);
}
.st-contact-form .btn-submit:hover,
.st-contact-form .btn-submit:focus {
  background: var(--accent-600);
  border-color: var(--accent-600);
  box-shadow: var(--shadow-md);
  color: var(--on-accent);
}

/* ---- cookie-consent.css ---- */
/* ==========================================================================
   Cartello — cookie-consent.css
   Styles for the st_cookie_consent banner (template extension/module/
   st_cookie_consent.twig). Loaded globally from header.twig — the banner is
   injected into the footer, so addStyle() from the module controller would run
   after <head> is already flushed.

   Buttons follow the theme radius preset (var(--radius)) and brand accent
   (var(--accent) / var(--on-accent)), so the banner stays consistent with
   theme_cartello_radius and the active color scheme.
   ========================================================================== */

/* ── Cookie Consent Banner ────────────────────────── */
.st-cc {
  position: fixed;
  inset: auto 0 0 0;
  z-index: 99999;
  padding: 20px 24px;
  background: #12121e;
  color: #d8d8e8;
  box-shadow: 0 -4px 32px rgba(0,0,0,.45);
  transform: translateY(110%);
  transition: transform .38s cubic-bezier(.4,0,.2,1);
  font-size: 14px;
  line-height: 1.55;
}
.st-cc.st-cc--visible {
  transform: translateY(0);
}

/* Backdrop */
.st-cc-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.5);
  z-index: 99998;
  opacity: 0;
  pointer-events: none;
  transition: opacity .3s;
}
.st-cc-backdrop.st-cc-backdrop--visible {
  opacity: 1;
  pointer-events: auto;
}

/* Inner layout */
.st-cc__inner {
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  gap: 24px;
  align-items: center;
  flex-wrap: wrap;
}
.st-cc__text { flex: 1; min-width: 220px; }
.st-cc__title {
  font-size: 16px;
  font-weight: 700;
  color: #fff;
  margin: 0 0 5px;
  letter-spacing: -.01em;
}
.st-cc__intro {
  margin: 0;
  color: #a8a8c0;
  font-size: 13px;
}
.st-cc__policy-link {
  /* Lightened so the accent reads on the near-black banner even for dark
     schemes (Noir/Sage/Wine) where the raw accent blends into the bg. */
  color: color-mix(in srgb, var(--accent, #c9a96e) 42%, #fff 58%);
  text-decoration: none;
  font-size: 12px;
  display: inline-block;
  margin-top: 4px;
  border-bottom: 1px solid transparent;
  transition: border-color .15s;
}
.st-cc__policy-link:hover { border-color: currentColor; }

/* Actions (three buttons in order: Decline | Settings | Accept All) */
.st-cc__actions {
  display: flex;
  gap: 10px;
  align-items: center;
  flex-shrink: 0;
  flex-wrap: wrap;
}

/* Decline — quiet ghost */
.st-cc__btn-decline {
  background: transparent;
  border: 1px solid rgba(255,255,255,.2);
  color: rgba(255,255,255,.55);
  padding: 9px 18px;
  border-radius: var(--radius);
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  transition: border-color .15s, color .15s;
  white-space: nowrap;
}
.st-cc__btn-decline:hover {
  border-color: rgba(255,255,255,.45);
  color: rgba(255,255,255,.85);
}

/* Settings — solid outline */
.st-cc__btn-settings {
  background: transparent;
  border: 1px solid rgba(255,255,255,.38);
  color: #fff;
  padding: 9px 18px;
  border-radius: var(--radius);
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  transition: border-color .15s, background .15s;
}
.st-cc__btn-settings:hover { border-color: rgba(255,255,255,.7); background: rgba(255,255,255,.06); }
.st-cc__btn-settings svg { transition: transform .25s; }
.st-cc__btn-settings.is-open svg { transform: rotate(180deg); }

/* Accept All — primary CTA. Solid brand accent + on-accent text (white in
   every scheme, so always legible). The hairline keeps a near-black accent
   (Noir) distinct from the banner's own near-black background. */
.st-cc__btn-accept {
  background: var(--accent);
  color: var(--on-accent, #fff);
  border: 1px solid rgba(255,255,255,.14);
  padding: 10px 28px;
  border-radius: var(--radius);
  cursor: pointer;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
  box-shadow: 0 4px 16px rgba(0,0,0,.35);
  transition: background .15s, transform .1s, box-shadow .15s;
}
.st-cc__btn-accept:hover  { background: var(--accent-600); box-shadow: 0 6px 20px rgba(0,0,0,.4); }
.st-cc__btn-accept:active { transform: scale(.97); }

/* ── Details drawer ─────────────────────────────── */
.st-cc__details {
  max-width: 1200px;
  margin: 0 auto;
  overflow: hidden;
  max-height: 0;
  transition: max-height .38s cubic-bezier(.4,0,.2,1), padding .25s;
  padding: 0;
}
.st-cc__details.is-open {
  max-height: 480px;
  padding: 16px 0 4px;
}
.st-cc__cats { display: flex; flex-direction: column; gap: 10px; }
.st-cc__cat {
  background: rgba(255,255,255,.05);
  border: 1px solid rgba(255,255,255,.1);
  border-radius: var(--radius);
  padding: 12px 16px;
  display: flex;
  gap: 14px;
  align-items: flex-start;
}
.st-cc__cat-check { padding-top: 2px; flex-shrink: 0; }
.st-cc__cat-check input[type=checkbox] {
  width: 18px; height: 18px; cursor: pointer;
  accent-color: var(--accent, #c9a96e);
}
.st-cc__cat-check input[type=checkbox]:disabled { opacity: .45; cursor: not-allowed; }
.st-cc__cat-info { flex: 1; }
.st-cc__cat-title {
  font-size: 13px; font-weight: 700; color: #fff; margin: 0 0 3px;
  display: flex; align-items: center; gap: 8px;
}
.st-cc__cat-badge {
  font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 99px;
  background: rgba(255,255,255,.12); color: rgba(255,255,255,.6);
  letter-spacing: .04em; text-transform: uppercase;
}
.st-cc__cat-desc { font-size: 12px; color: #8888aa; margin: 0; }

.st-cc__details-footer {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 12px;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid rgba(255,255,255,.08);
  flex-wrap: wrap;
}

/* Save prefs button (same weight as Accept All) */
.st-cc__btn-save {
  background: var(--accent);
  border: 1px solid rgba(255,255,255,.14);
  color: var(--on-accent, #fff);
  padding: 9px 24px;
  border-radius: var(--radius);
  cursor: pointer;
  font-size: 13px;
  font-weight: 700;
  transition: background .15s;
}
.st-cc__btn-save:hover { background: var(--accent-600); }

/* ── Simple mode ──────────────────────────────── */
/* Accept button sits right after the text on desktop, not pushed to the far edge. */
.st-cc--simple .st-cc__inner {
  justify-content: flex-start;
}
.st-cc--simple .st-cc__text { flex: 0 1 auto; }
.st-cc--simple .st-cc__actions { flex-shrink: 0; }
.st-cc--simple .st-cc__intro { color: #d8d8e8; }

@media (max-width: 640px) {
  .st-cc__inner { flex-direction: column; align-items: flex-start; }
  .st-cc__actions { width: 100%; justify-content: flex-end; }
  .st-cc__btn-accept { flex: 1; text-align: center; }
}

/* ---- custom.css ---- */
/* ============================================================
   custom.css — власні правки/перекриття поверх темового CSS.
   Завантажується ОСТАННІМ у бандлі, тому виграє каскад.
   Реєстрація: system/cartello.ocmod.xml ($ct_css_list)
              + common/header.twig (fallback <link>).
   ============================================================ */
