/* ═══════════════════════════════════════════════════════════════════════════
   storefront.css — customer-facing design system (ott24x7 port)
   Ported from the owner's ott24x7.com base template (railway_final/web/
   templates/public/base.html) into a single shared stylesheet.

   ACCENT (v2 — theme skins): pages emit
     html:root{--accent;--accent2;--accent-dark;--on-accent}
   inline in <head> from the active skin (src/skins.js) — this file never
   defines --accent/--accent2. --accent-dark colors accent TEXT in light
   mode (≥4.5:1 on white); --on-accent is the text color placed on accent
   gradients (white, or dark for very light skins like amber).

   Sections:
     1. Design tokens (dark default + light theme)
     2. Base element styles
     3. Animated background (.bg-fx: aurora / orbs / beams / grid / grain /
        pointer-reactive shapegrid canvas)
     4. Buttons + theme toggle
     5. Header (floating pill navbar) + nav dropdown + condense-on-scroll
     6. Hero (split), brand stage, ticker
     7. Sections / sec-head / ScrollFloat
     8. Category chips + cat-toggle
     9. Product cards (.card / .thumb / .card-body / .cbtn-buy)
    10. Feature cards, glass bar, fields, prose/FAQ, CTA band
    11. Footer (.fcard glass panel + .ftrust payment pills)
    12. Side drawer + scrim, mobile dock
    13. Blog cards (.bh-*), about accordion, toast
    14. Motion layer (hero stagger, navbar condense) + reduced motion
    15. Mobile compact + scroll-performance rules
    16. Legacy compatibility layer (design-system.css names used by
        existing page-local CSS: --fg/--bg-raised/… vars, .sk-btn,
        .neu-card, .badge, .glass-modal, …)
   ═══════════════════════════════════════════════════════════════════════ */

/* ═══════════════ 1. DESIGN TOKENS ═══════════════ */
:root{
  --font-display:'Sora',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';
  --font-body:'Plus Jakarta Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';
  --maxw:1160px; --r:20px;
}
/* Dark (default — applies with or without data-theme attr) */
:root, html[data-theme="dark"]{
  --bg:#0c0e13; --bg2:#0f1219;
  --surface:#151a23; --surface2:#1a2029;
  --text:#eef2f8; --muted:#98a2b6; --faint:#6b7488;
  --edge:rgba(255,255,255,.06); --edge2:rgba(255,255,255,.10);
  --hi:rgba(255,255,255,.08);
  --neu-dark:#05070b; --neu-light:rgba(255,255,255,.04);
  --glass:rgba(18,22,30,.55); --glass-strong:rgba(18,22,30,.78);
  --glass-edge:rgba(255,255,255,.10);
  --shadow-lg:0 30px 60px -20px rgba(0,0,0,.7);
  --btn-text:#04120a;
}
/* Light — cool neutral ground, white surfaces, DEFINITE slate borders.
   Contrast targets: body text ≥4.5:1 (#16202e ≈ 13.9:1 on #fff), secondary
   ≥4.5:1 (#4b5768 ≈ 7.1:1), faint ≥3:1 (#7a8496 ≈ 3.5:1). Borders use slate
   rgba so card edges stay visible on white — never white-on-white. */
html[data-theme="light"]{
  --bg:#eef1f6; --bg2:#f4f6fa;
  --surface:#ffffff; --surface2:#fbfcfe;
  /* --faint is used for 11–13px meta text, so it is held at ≥4.5:1 on white
     (#667085 ≈ 4.9) rather than the ≥3 the brief allows for secondary. */
  --text:#16202e; --muted:#4b5768; --faint:#667085;
  --edge:rgba(15,23,42,.12); --edge2:rgba(15,23,42,.16);
  --hi:rgba(15,23,42,.05);
  --neu-dark:#c9d1de; --neu-light:#ffffff;
  --glass:rgba(255,255,255,.75); --glass-strong:rgba(255,255,255,.88);
  --glass-edge:rgba(15,23,42,.12);
  --shadow-lg:0 8px 24px rgba(15,23,42,.08),0 28px 60px -34px rgba(15,23,42,.2);
  --btn-text:#04120a;
}
/* Theme-aware aliases for ACCENT TEXT and DANGER TEXT. Use these instead of
   raw --accent / #fca5a5 wherever colour is applied to text, so light mode
   automatically gets the darkened, readable variant. */
:root, html[data-theme="dark"]{--accent-text:var(--accent); --danger-text:#fca5a5}
html[data-theme="light"]{--accent-text:var(--accent-dark,var(--accent2)); --danger-text:#b91c1c}
/* Clean soft shadows */
:root{
  --neu-out:0 1px 3px rgba(0,0,0,.14), 0 12px 30px -16px rgba(0,0,0,.45);
  --neu-out-sm:0 1px 2px rgba(0,0,0,.12), 0 6px 16px -10px rgba(0,0,0,.4);
  --neu-in:inset 0 1px 2px rgba(0,0,0,.28);
}
html[data-theme="light"]{
  --neu-out:0 1px 2px rgba(15,23,42,.06), 0 8px 24px rgba(15,23,42,.08);
  --neu-out-sm:0 1px 2px rgba(15,23,42,.05), 0 5px 14px -6px rgba(15,23,42,.1);
  --neu-in:inset 0 1px 2px rgba(15,23,42,.1);
}

/* ═══════════════ 2. BASE ═══════════════ */
*{box-sizing:border-box;margin:0;padding:0}
/* NB: no global `scroll-behavior:smooth` — on mobile Chrome it makes the browser
   ANIMATE scroll-restoration on refresh (page paints at top, then slides to the saved
   position over ~1–2s), which looks like the whole page is "stuck upward" then settling.
   Anchor links get smooth scroll via JS instead. */
html{scroll-behavior:auto}
body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:16px;line-height:1.65;
     -webkit-font-smoothing:antialiased;overflow-x:clip;transition:background .4s ease,color .4s ease}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.02em;line-height:1.12}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 22px}

/* ═══════════════ 3. ANIMATED BACKGROUND ═══════════════ */
.bg-fx{position:fixed;inset:0;z-index:-2;overflow:hidden;background:
      radial-gradient(120% 80% at 50% -10%,var(--bg2),var(--bg) 60%)}
.bg-fx .shapegrid{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;opacity:.38}
/* Light mode: strokes read as light gray texture, never colored */
html[data-theme="light"] .bg-fx .shapegrid{opacity:.1;filter:saturate(0) brightness(.55)}
.bg-fx .orb{position:absolute;border-radius:50%;filter:blur(80px);opacity:.56;
      animation:drift 20s ease-in-out infinite;will-change:transform}
/* Light mode: orbs at ~20% of dark strength + extra blur — subtle tint only */
html[data-theme="light"] .bg-fx .orb{opacity:.12;filter:blur(110px)}
.orb.a{width:560px;height:560px;background:radial-gradient(circle,var(--accent),transparent 62%);top:-160px;left:-120px}
.orb.b{width:520px;height:520px;background:radial-gradient(circle,var(--accent2),transparent 62%);bottom:-180px;right:-100px;animation-delay:-6s}
.orb.c{width:440px;height:440px;background:radial-gradient(circle,color-mix(in srgb,var(--accent) 60%,#6d5efc),transparent 62%);top:38%;left:52%;animation-delay:-12s}
.bg-fx .aurora{position:absolute;inset:-35%;z-index:-1;pointer-events:none;filter:blur(64px);opacity:.6;
      background:conic-gradient(from 0deg at 50% 50%,transparent 0deg,
        color-mix(in srgb,var(--accent) 26%,transparent) 60deg,transparent 130deg,
        color-mix(in srgb,var(--accent2) 24%,transparent) 210deg,transparent 300deg,
        color-mix(in srgb,var(--accent) 20%,transparent) 360deg);
      animation:aurora-spin 38s linear infinite;will-change:transform}
html[data-theme="light"] .bg-fx .aurora{opacity:.11;filter:blur(90px)}
@keyframes drift{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(50px,-40px) scale(1.12)}66%{transform:translate(-40px,30px) scale(.92)}}
@keyframes aurora-spin{to{transform:rotate(360deg)}}
.bg-fx .grain{position:absolute;inset:0;opacity:.035;pointer-events:none}
html[data-theme="light"] .bg-fx .grain{opacity:.008}
.bg-fx .grain{
      background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.bg-fx .fxgrid{position:absolute;inset:0;pointer-events:none;opacity:.6;
      background-image:
        linear-gradient(to right, color-mix(in srgb,var(--accent) 9%,transparent) 1px, transparent 1px),
        linear-gradient(to bottom, color-mix(in srgb,var(--accent) 9%,transparent) 1px, transparent 1px);
      background-size:64px 64px;
      -webkit-mask:radial-gradient(130% 90% at 50% 0%, #000 28%, transparent 74%);
              mask:radial-gradient(130% 90% at 50% 0%, #000 28%, transparent 74%);
      animation:fx-grid-pan 8s linear infinite;will-change:background-position}
html[data-theme="light"] .bg-fx .fxgrid{opacity:.16;filter:saturate(.25) brightness(.75)}
@keyframes fx-grid-pan{to{background-position:64px 64px}}
.bg-fx .fxbeams{position:absolute;inset:0;pointer-events:none;overflow:hidden}
html[data-theme="light"] .bg-fx .fxbeams{opacity:.2}
.bg-fx .fxbeams i{position:absolute;top:0;width:1px;height:44vh;border-radius:2px;opacity:0;
      background:linear-gradient(to bottom, transparent, color-mix(in srgb,var(--accent) 75%,transparent) 45%, transparent);
      animation:fx-beam-fall 7s linear infinite;will-change:transform}
.bg-fx .fxbeams i:nth-child(1){left:12%;animation-delay:0s}
.bg-fx .fxbeams i:nth-child(2){left:33%;animation-delay:1.6s;background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--accent2) 75%,transparent) 45%,transparent)}
.bg-fx .fxbeams i:nth-child(3){left:57%;animation-delay:3.2s}
.bg-fx .fxbeams i:nth-child(4){left:75%;animation-delay:4.5s;background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--accent2) 75%,transparent) 45%,transparent)}
.bg-fx .fxbeams i:nth-child(5){left:90%;animation-delay:5.6s}
@keyframes fx-beam-fall{0%{transform:translateY(-120%);opacity:0}12%{opacity:.85}88%{opacity:.85}100%{transform:translateY(118vh);opacity:0}}
.pulse-ring{position:relative;display:inline-flex;width:9px;height:9px;flex:none}
.pulse-ring::before{content:"";position:absolute;inset:0;border-radius:50%;background:#2ecc71;
      box-shadow:0 0 0 0 rgba(46,204,113,.55);animation:fx-pulse-ring 2.2s cubic-bezier(.4,0,.6,1) infinite}
.pulse-ring::after{content:"";position:absolute;inset:1.5px;border-radius:50%;background:#2ecc71}
@keyframes fx-pulse-ring{0%{box-shadow:0 0 0 0 rgba(46,204,113,.55)}70%{box-shadow:0 0 0 9px rgba(46,204,113,0)}100%{box-shadow:0 0 0 0 rgba(46,204,113,0)}}
@media(prefers-reduced-motion:reduce){
  .bg-fx .aurora,.bg-fx .orb,.bg-fx .fxgrid{animation:none}
  .bg-fx .fxbeams{display:none}
  .pulse-ring::before{animation:none}
}

/* ═══════════════ 4. BUTTONS + THEME TOGGLE ═══════════════ */
.btn{position:relative;display:inline-flex;align-items:center;gap:9px;font-family:var(--font-display);
     font-weight:700;font-size:15px;letter-spacing:.01em;color:var(--btn-text);cursor:pointer;
     padding:14px 26px;border-radius:15px;border:1px solid rgba(255,255,255,.4);
     background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 92%,#fff) 0%,var(--accent) 42%,var(--accent2) 100%);
     box-shadow:inset 0 1px 0 rgba(255,255,255,.6),inset 0 -3px 8px rgba(0,60,20,.28),
                0 10px 22px -6px color-mix(in srgb,var(--accent2) 60%,transparent),0 2px 4px rgba(0,0,0,.3);
     transition:transform .12s ease,box-shadow .12s ease,filter .12s ease;text-decoration:none}
.btn::after{content:"";position:absolute;left:2px;right:2px;top:2px;height:44%;border-radius:13px 13px 60px 60px;
     background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,0));pointer-events:none}
.btn:hover{transform:translateY(-2px);filter:brightness(1.04);
     box-shadow:inset 0 1px 0 rgba(255,255,255,.65),inset 0 -3px 8px rgba(0,60,20,.28),
                0 16px 30px -8px color-mix(in srgb,var(--accent2) 65%,transparent),0 3px 6px rgba(0,0,0,.3)}
.btn:active{transform:translateY(1px) scale(.99);
     box-shadow:inset 0 2px 7px rgba(0,45,15,.5),inset 0 1px 0 rgba(255,255,255,.35),0 3px 8px rgba(0,0,0,.3)}
.btn.ghost{color:var(--text);background:linear-gradient(180deg,var(--surface2),var(--surface));
     border:1px solid var(--edge2);
     box-shadow:inset 0 1px 0 var(--hi),var(--neu-out-sm)}
.btn.ghost::after{opacity:.25}
.btn.ghost:hover{filter:none;border-color:color-mix(in srgb,var(--accent) 55%,var(--edge2))}
.btn.ghost:active{box-shadow:var(--neu-in)}
.btn.sm{padding:10px 18px;font-size:13.5px;border-radius:12px}
.btn.primary{color:var(--on-accent,#fff);background:linear-gradient(135deg,var(--accent),var(--accent2));box-shadow:0 18px 46px -12px color-mix(in srgb,var(--accent2) 70%,transparent)}
.btn.secondary{color:var(--text);background:color-mix(in srgb,var(--text) 6%,transparent);border:1px solid var(--edge);backdrop-filter:blur(16px)}
.btn:disabled,.btn[disabled]{opacity:.55;cursor:not-allowed;transform:none;filter:none}

.theme-toggle{position:relative;width:62px;height:32px;border-radius:999px;cursor:pointer;border:none;
     background:var(--surface);box-shadow:var(--neu-in);padding:0;flex:0 0 auto}
.theme-toggle .knob{position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;
     display:grid;place-items:center;font-size:13px;
     background:linear-gradient(180deg,#fff6de,var(--accent));
     box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 3px 6px rgba(0,0,0,.35);
     transition:transform .3s cubic-bezier(.5,1.6,.5,1),background .3s}
html[data-theme="light"] .theme-toggle .knob{transform:translateX(30px);
     background:linear-gradient(180deg,#eaf0ff,#9fb4d8)}
.theme-toggle .knob .sun{display:none}.theme-toggle .knob .moon{display:block}
html[data-theme="light"] .theme-toggle .knob .sun{display:block}
html[data-theme="light"] .theme-toggle .knob .moon{display:none}

/* ═══════════════ 5. HEADER + NAV (floating pill navbar) ═══════════════ */
header.site{position:sticky;top:0;z-index:60;background:transparent;padding-top:12px}
header.site::before{content:"";position:absolute;left:0;right:0;top:0;height:calc(100% + 20px);
  background:linear-gradient(var(--bg) 46%,color-mix(in srgb,var(--bg) 62%,transparent) 78%,transparent);
  z-index:-1;pointer-events:none}
.navbar{display:flex;align-items:center;justify-content:space-between;gap:14px;height:64px;padding:0 10px 0 14px;
     border-radius:20px;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--glass-edge));
     background:color-mix(in srgb,var(--surface) 74%,transparent);
     backdrop-filter:blur(22px) saturate(180%);-webkit-backdrop-filter:blur(22px) saturate(180%);
     box-shadow:0 18px 46px -22px rgba(0,0,0,.7),0 0 42px -20px color-mix(in srgb,var(--accent) 50%,transparent),inset 0 1px 0 rgba(255,255,255,.06)}
/* Brand link. The HEADER renders the logo alone (no brand text — that lives
   in the footer + drawer). Size/shape arrive as inline CSS vars from
   brandLogoHtml() in src/store.js: --logo-h, --logo-h-mob, --logo-radius. */
.logo{display:flex;align-items:center;gap:11px;font-family:var(--font-display);font-weight:800;font-size:19px;flex:none;min-width:0}
/* Wide wordmark logos (e.g. 280×80) must keep their aspect ratio: height is
   driven by --logo-h, width follows, and object-fit:contain stops the cap
   below from squashing anything wider than the allowance. */
.brand-logo{display:block;flex:none;height:var(--logo-h,34px);width:auto;max-width:min(280px,42vw);
     border-radius:var(--logo-radius,10px);object-fit:contain}
.brand-logo--mark{width:var(--logo-h,34px);display:grid;place-items:center;color:var(--on-accent,var(--btn-text));
     background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 88%,#fff),var(--accent2));
     box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 0 18px -2px color-mix(in srgb,var(--accent) 70%,transparent),0 6px 14px -4px color-mix(in srgb,var(--accent2) 60%,transparent)}
.brand-logo--mark svg{width:64%;height:64%}
.logo .brand-name{overflow-wrap:anywhere}
.logo:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:12px}
@media(max-width:900px){.brand-logo{height:var(--logo-h-mob,28px);max-width:min(200px,52vw)}
     .brand-logo--mark{width:var(--logo-h-mob,28px)}}
nav.links{display:flex;gap:3px;align-items:center;padding:5px;border-radius:15px;min-width:0;
     background:color-mix(in srgb,var(--text) 4%,transparent);border:1px solid var(--edge)}
nav.links a.nl,nav.links button.nl{color:var(--muted);font-weight:600;font-size:13.5px;padding:8px 14px;border-radius:11px;transition:.16s;white-space:nowrap}
nav.links a.nl:hover,nav.links button.nl:hover{color:var(--text);background:color-mix(in srgb,var(--accent) 15%,transparent)}
nav.links a.nl.active{color:var(--on-accent,var(--btn-text));background:linear-gradient(135deg,var(--accent),var(--accent2))}
/* "All Departments" — the primary catalog entry, first item in the nav pill */
nav.links button.nl-depts{display:inline-flex;align-items:center;gap:8px;cursor:pointer;border:0;font-family:inherit;
     color:var(--text);font-weight:700;background:color-mix(in srgb,var(--accent) 12%,transparent);
     box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 26%,transparent)}
nav.links button.nl-depts:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,transparent)}
nav.links button.nl-depts[aria-expanded="true"]{color:var(--on-accent,var(--btn-text));background:linear-gradient(135deg,var(--accent),var(--accent2))}
nav.links .nl-ic{width:15px;height:15px;flex:none}
/* Help & Info dropdown */
.nl-drop{position:relative}
.nl-trigger{display:inline-flex;align-items:center;gap:6px;background:none;border:0;cursor:pointer;font-family:inherit;
     color:var(--muted);font-weight:600;font-size:13.5px;padding:8px 13px;border-radius:11px;transition:.16s;white-space:nowrap}
.nl-trigger .chev{width:14px;height:14px;transition:transform .18s}
.nl-drop:hover .nl-trigger,.nl-drop:focus-within .nl-trigger{color:var(--text);background:var(--hi)}
.nl-drop:hover .nl-trigger .chev,.nl-drop:focus-within .nl-trigger .chev{transform:rotate(180deg)}
.nl-menu{position:absolute;top:calc(100% + 6px);left:0;min-width:184px;z-index:70;display:flex;flex-direction:column;gap:2px;
     padding:7px;border:1px solid var(--glass-edge);border-radius:14px;
     background:var(--glass-strong);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);
     box-shadow:0 24px 54px -22px rgba(0,0,0,.55);
     opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .16s,transform .16s,visibility .16s}
.nl-menu::before{content:"";position:absolute;top:-8px;left:0;right:0;height:8px}
.nl-drop:hover .nl-menu,.nl-drop:focus-within .nl-menu{opacity:1;visibility:visible;transform:none}
.nl-menu a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;color:var(--text);font-weight:600;font-size:14px;white-space:nowrap}
.nl-menu a svg{width:18px;height:18px;flex:none;color:var(--muted)}
.nl-menu a:hover{background:var(--hi);color:var(--accent)}
.nl-menu a:hover svg{color:var(--accent)}
/* Actions cluster */
.nav-actions{display:flex;align-items:center;gap:9px;flex:none}
.acct-btn{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;color:var(--text);border:1px solid var(--edge);background:var(--surface);flex:none;transition:border-color .15s,color .15s}
.acct-btn:hover{border-color:var(--accent);color:var(--accent)}
.acct-btn svg{width:20px;height:20px}
.btn.shop-cta{flex:none;white-space:nowrap;padding:10px 20px;font-size:13.5px;height:44px;border-radius:999px;
     box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 0 0 1px color-mix(in srgb,var(--accent) 35%,transparent),0 10px 30px -8px color-mix(in srgb,var(--accent) 65%,transparent)}
.btn.shop-cta:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.55),0 0 0 1px color-mix(in srgb,var(--accent) 45%,transparent),0 14px 36px -8px color-mix(in srgb,var(--accent) 75%,transparent)}
.menu-btn{display:none;background:var(--surface);border:1px solid var(--edge);color:var(--text);
     font-size:20px;cursor:pointer;width:44px;height:44px;border-radius:12px;box-shadow:var(--neu-out-sm)}
/* NOTE: the header "ONLINE / OFFLINE" status pill was removed — the live
   /api/live-status poll now only drives the storefront offline banner and the
   Buy-Now buttons. @keyframes st-pulse stays — the product page's
   .pp-stock-dot (src/store.js) still animates with it. */
@keyframes st-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.7)}}
/* All-departments toggle — legacy standalone variant (kept for the mega-menu
   chip fallbacks); the header trigger is nav.links button.nl-depts above. */
.mm-toggle{display:inline-flex;align-items:center;gap:8px;min-height:42px;padding:8px 14px;font-size:.82rem;border-radius:12px;flex:none;white-space:nowrap;cursor:pointer;
     background:var(--surface);border:1px solid var(--edge);color:var(--text);font-family:inherit;font-weight:700;box-shadow:var(--neu-out-sm);transition:border-color .15s,color .15s}
.mm-toggle:hover{border-color:var(--accent);color:var(--accent)}

/* ═══════════════ 6. HERO (split) + BRAND STAGE + TICKER ═══════════════ */
.hero{position:relative;z-index:3;width:min(1180px,92vw);margin:26px auto 0;min-height:520px;display:grid;grid-template-columns:1.02fr .98fr;gap:40px;align-items:center;text-align:left;
     padding:46px 52px;overflow:hidden;border:1px solid color-mix(in srgb,var(--text) 12%,transparent);border-radius:32px;
     background:color-mix(in srgb,var(--surface) 44%,transparent);
     backdrop-filter:blur(20px) saturate(1.5);-webkit-backdrop-filter:blur(20px) saturate(1.5);
     box-shadow:0 40px 90px -40px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.16)}
.hero::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
     background:radial-gradient(75% 95% at 85% 10%,color-mix(in srgb,var(--accent) 22%,transparent),transparent 58%),radial-gradient(60% 80% at 10% 90%,color-mix(in srgb,var(--accent2) 16%,transparent),transparent 60%)}
.hero>*{position:relative;z-index:1}
.hero-copy{position:relative;z-index:2}
.hero .eyebrow{display:inline-flex;align-items:center;gap:8px;padding:9px 13px;border:1px solid var(--edge);background:color-mix(in srgb,var(--accent) 9%,transparent);backdrop-filter:blur(16px);border-radius:999px;color:var(--text);box-shadow:0 8px 26px rgba(0,0,0,.16);font-size:13px;font-weight:700;margin:0;letter-spacing:.02em;text-transform:uppercase}
.hero h1{font-size:clamp(38px,6vw,72px);line-height:.98;margin:22px 0 18px;letter-spacing:-2.5px;font-weight:800}
.hero .gradient{background:linear-gradient(100deg,var(--accent),var(--accent2) 72%);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.hero-sub{color:var(--muted);font-size:clamp(15px,1.9vw,19px);line-height:1.7;max-width:560px;margin:0 0 26px}
.hero-actions{display:flex;gap:13px;flex-wrap:wrap;margin-bottom:28px}
.hero-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;max-width:600px}
.hstat{background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 7%,var(--surface)),var(--surface));border:1px solid var(--edge);border-radius:18px;padding:15px 14px;box-shadow:var(--neu-out-sm)}
.hstat strong{display:block;font-size:24px;font-weight:900;font-family:var(--font-display)}
.hstat span{font-size:11.5px;color:var(--muted);font-weight:700}
/* Hero inline live search (feeds the client-side filter engine) */
.hero-search{position:relative;z-index:30;display:flex;align-items:center;gap:8px;max-width:520px;margin:2px 0 22px;
   background:var(--surface);border-radius:14px;padding:6px 6px 6px 14px;
   border:1.5px solid color-mix(in srgb,var(--accent) 48%,var(--edge));
   box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 12%,transparent),0 16px 40px -20px color-mix(in srgb,var(--accent) 45%,transparent);
   animation:searchGlow 3.4s ease-in-out infinite;transition:border-color .15s,box-shadow .15s}
@keyframes searchGlow{
  0%,100%{box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 10%,transparent),0 16px 40px -22px color-mix(in srgb,var(--accent) 40%,transparent)}
  50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--accent) 20%,transparent),0 18px 46px -18px color-mix(in srgb,var(--accent2) 55%,transparent)}
}
.hero-search:focus-within{border-color:color-mix(in srgb,var(--accent) 62%,var(--edge))}
.hero-search .hs-ic{width:20px;height:20px;flex:none;color:var(--accent)}
.hero-search input{flex:1;min-width:0;border:0;background:none;color:var(--text);font-size:15px;padding:11px 4px;outline:none;font-family:inherit}
.hero-search input::placeholder{color:var(--faint)}
.hs-btn{flex:none;border:0;border-radius:10px;padding:10px 18px;font-weight:800;font-size:14px;color:var(--on-accent,#fff);cursor:pointer;font-family:inherit;
   background:linear-gradient(135deg,var(--accent),var(--accent2));transition:filter .15s}
.hs-btn:hover{filter:saturate(1.1) brightness(1.03)}
@media(prefers-reduced-motion:reduce){.hero-search{animation:none}}
@media(max-width:560px){.hero-search{max-width:none}.hs-btn{padding:10px 14px}}
/* Brand stage — floating glass tiles */
.stage{position:relative;height:520px}
.brand-stage{display:grid;place-items:center}
.brand-glow{position:absolute;inset:0;z-index:0;pointer-events:none;background:
     radial-gradient(58% 58% at 62% 42%,color-mix(in srgb,var(--accent2) 26%,transparent),transparent 64%),
     radial-gradient(46% 46% at 28% 78%,rgba(124,58,237,.22),transparent 60%)}
.brand-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,1fr);gap:20px;width:100%;max-width:460px}
.brand-card{position:relative;aspect-ratio:1/1;border-radius:24px;display:grid;place-items:center;color:var(--text);font-weight:800;font-size:15px;text-decoration:none;cursor:pointer;font-family:inherit;
     background:color-mix(in srgb,var(--surface) 55%,transparent);border:1px solid color-mix(in srgb,var(--text) 12%,transparent);
     backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
     box-shadow:0 22px 50px -22px color-mix(in srgb,var(--bc,#7c3aed) 65%,transparent),inset 0 1px 0 rgba(255,255,255,.12);
     animation:brandFloat 5.6s ease-in-out infinite;transition:transform .2s}
.brand-card .bc-ic{display:grid;place-items:center;color:var(--bc,var(--accent))}
.brand-card .bc-ic svg{width:44px;height:44px}
.brand-card .bc-lab{position:absolute;bottom:10px;left:0;right:0;text-align:center;font-size:11.5px;font-weight:800;color:var(--muted);letter-spacing:.03em}
.brand-card:hover{transform:translateY(-5px)}
.brand-card.more{background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 24%,transparent),color-mix(in srgb,var(--surface) 40%,transparent));font-size:16px}
.brand-card:nth-child(3){animation-delay:.5s} .brand-card:nth-child(4){animation-delay:1.5s}
.brand-card:nth-child(5){animation-delay:.9s} .brand-card:nth-child(6){animation-delay:1.2s}
@keyframes brandFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
/* Ticker marquee */
.ticker{position:relative;z-index:4;margin:24px 0 0;padding:15px 0;overflow:hidden;border-top:1px solid var(--edge);border-bottom:1px solid var(--edge);background:color-mix(in srgb,var(--text) 3%,transparent);backdrop-filter:blur(12px)}
.ticker-track{display:flex;gap:16px;white-space:nowrap;width:max-content;animation:tickerScroll 28s linear infinite}
.ticker span{display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border-radius:999px;background:color-mix(in srgb,var(--accent) 8%,var(--surface));border:1px solid var(--edge);color:var(--text);font-weight:800;font-size:13px}
@keyframes tickerScroll{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.ticker-track,.brand-card{animation:none}}
@media(max-width:900px){
  .hero{grid-template-columns:minmax(0,1fr);gap:0;margin-top:8px;min-height:auto;padding:22px 18px 8px}
  .hero-copy{min-width:0;max-width:100%}
  .hero-copy *{max-width:100%}
  .stage{display:none}
  .hero h1{letter-spacing:-1.5px;overflow-wrap:anywhere}
  .hero-stats{max-width:none}
}
@media(max-width:640px){
  .hero{width:calc(100% - 26px);padding:24px 18px 22px;margin:14px auto 0;border-radius:22px}
  .hero .eyebrow{font-size:10px;padding:6px 11px;letter-spacing:.02em}
  .hero h1{font-size:29px;line-height:1.06;letter-spacing:-.8px;margin:13px 0 11px}
  .hero-sub{font-size:13.5px;line-height:1.55;margin-bottom:16px;max-width:none}
  .hero-actions{gap:9px;margin-bottom:18px}
  .hero-actions .btn{flex:1 1 100%;justify-content:center}
  .hero-stats{grid-template-columns:repeat(2,1fr);gap:8px}
  .hstat{padding:11px 10px;border-radius:14px}
  .hstat strong{font-size:18px}.hstat span{font-size:10px}
  .ticker{padding:10px 0;margin-top:16px}.ticker span{font-size:11px;padding:6px 11px}
}
@media(max-width:400px){.hero h1{font-size:26px}.hstat strong{font-size:16px}}

/* ═══════════════ 7. SECTIONS / SEC-HEAD / SCROLLFLOAT ═══════════════ */
section{padding:56px 0;position:relative}
main>section::after{content:"";position:absolute;left:6%;right:6%;bottom:-2px;height:60px;z-index:-1;
     background:radial-gradient(60% 100% at 50% 0%,rgba(0,0,0,.28),transparent 72%)}
html[data-theme="light"] main>section::after{background:radial-gradient(60% 100% at 50% 0%,rgba(90,110,140,.18),transparent 72%)}
/* Section header — SOLID high-contrast title with an accent bar.
   (It used to be gradient text via background-clip:text; combined with the
   ScrollFloat per-character split that painted as a solid block with the
   words clipped mid-glyph on some engines. Solid text + a flourish is both
   safer and more legible, and it can never fail invisible.) */
.sec-head{display:flex;align-items:center;justify-content:space-between;gap:12px 20px;margin-bottom:26px;flex-wrap:wrap;overflow:visible}
.sec-head>div:first-child{min-width:0;flex:1 1 min(100%,300px)}
.sec-head h1,.sec-head h2{position:relative;display:flex;align-items:center;gap:12px;flex-wrap:wrap;overflow:visible;
     font-family:var(--font-display);font-size:clamp(20px,3vw,30px);font-weight:800;line-height:1.22;letter-spacing:-.01em;
     color:var(--text);-webkit-text-fill-color:currentColor;background:none;overflow-wrap:anywhere}
/* 4px accent bar, full heading height */
.sec-head h1::before,.sec-head h2::before{content:"";flex:none;width:4px;align-self:stretch;min-height:1.1em;border-radius:999px;
     background:linear-gradient(180deg,var(--accent),var(--accent2));
     box-shadow:0 0 14px -3px color-mix(in srgb,var(--accent) 75%,transparent)}
.sec-head h1 .sec-name,.sec-head h2 .sec-name{min-width:0;overflow-wrap:anywhere}
.sec-head p{color:var(--muted);font-size:14.5px;margin-top:8px;padding-left:16px}
.sec-badge{flex:none;font-family:var(--font-mono,ui-monospace,monospace);font-size:10px;font-weight:800;letter-spacing:.1em;
     color:var(--on-accent,#fff);background:linear-gradient(135deg,var(--accent),var(--accent2));
     border-radius:999px;padding:4px 9px;line-height:1;box-shadow:0 6px 16px -8px color-mix(in srgb,var(--accent) 80%,transparent)}
@media(max-width:640px){.sec-head p{font-size:12.5px;padding-left:16px}.sec-head h1::before,.sec-head h2::before{width:3px}}

/* Gradient text elsewhere (hero headline, blog kicker, PDP price) must never
   fail as a solid block — fall back to solid accent text when the engine has
   no background-clip:text. */
.hero .gradient,.grad-text{display:inline-block}
@supports not ((-webkit-background-clip:text) or (background-clip:text)){
  .hero .gradient,.grad-text,.pp-inr{background:none!important;color:var(--accent-dark,var(--accent))!important;
       -webkit-text-fill-color:currentColor!important}
}

/* ScrollFloat: never clip the words it splits (fail visible). */
[data-scroll-float]{overflow:visible}
[data-scroll-float] .sf-inner{display:inline-block}
[data-scroll-float] .char{display:inline-block;will-change:transform,opacity}
[data-scroll-float].sf-pending .char{opacity:0}

/* ═══════════════ 8. CATEGORY CHIPS + CAT-TOGGLE ═══════════════ */
.chips{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:30px}
.chip{padding:11px 18px;border-radius:14px;color:var(--text);font-weight:700;font-size:14px;cursor:pointer;font-family:inherit;
     background:color-mix(in srgb,var(--accent) 9%,var(--surface));box-shadow:var(--neu-out-sm);
     border:1px solid color-mix(in srgb,var(--accent) 32%,var(--edge));transition:.16s}
.chip:hover{color:var(--text);transform:translateY(-1px);background:color-mix(in srgb,var(--accent) 17%,var(--surface));
     border-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.chip b{color:var(--accent);opacity:1;font-weight:700}
.chip.active{color:var(--on-accent,#fff);box-shadow:var(--neu-in),inset 0 1px 0 rgba(255,255,255,.4);
     background:linear-gradient(135deg,var(--accent),var(--accent2));border-color:transparent}
.chip.active b{color:var(--on-accent,#fff);opacity:.8}
.cat-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;gap:14px;cursor:pointer;text-align:left;font-family:inherit;
     background:linear-gradient(165deg,color-mix(in srgb,var(--accent) 8%,var(--surface)),var(--surface));
     border:1px solid color-mix(in srgb,var(--accent) 42%,var(--edge));border-radius:16px;padding:15px 20px;color:var(--text);box-shadow:var(--neu-out-sm);transition:border-color .2s}
.cat-toggle:hover{border-color:color-mix(in srgb,var(--accent) 55%,transparent)}
.cat-toggle b{font-family:var(--font-display);font-size:19px;font-weight:800;display:block;color:var(--accent)}
.cat-toggle i{font-style:normal;color:var(--muted);font-size:13.5px}
.cat-caret{font-size:20px;color:var(--accent);transition:transform .25s;flex:none}
.cat-toggle.open .cat-caret{transform:rotate(180deg)}
.cat-panel{margin-top:16px}
.cat-panel[hidden]{display:none!important}

/* ═══════════════ 9. PRODUCT CARDS ═══════════════ */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:20px}
.card{position:relative;border-radius:18px;border:1px solid var(--edge);padding:0;overflow:hidden;
     display:flex;flex-direction:column;box-shadow:var(--neu-out);min-width:0;
     background:linear-gradient(165deg,color-mix(in srgb,var(--accent) 8%,var(--surface)),var(--surface) 58%);
     transition:transform .18s ease,box-shadow .22s ease,border-color .22s ease}
.card:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--accent) 42%,var(--edge));
     box-shadow:var(--neu-out),0 22px 42px -22px color-mix(in srgb,var(--accent2) 55%,transparent)}
.card:active{transform:translateY(-1px);box-shadow:var(--neu-out-sm)}
.card .thumb{position:relative;width:100%;aspect-ratio:1/1;border-radius:0;display:grid;place-items:center;font-size:64px;overflow:hidden;background:#0c0e16}
.card .thumb img{width:100%;height:100%;object-fit:cover;border-radius:0;display:block}
.card .thumb a{display:block;width:100%;height:100%}
.new-badge{position:absolute;top:10px;left:10px;z-index:2;font-size:10px;font-weight:800;letter-spacing:.06em;
  color:#052e16;background:linear-gradient(135deg,#4ade80,#22c55e);padding:4px 9px;border-radius:999px;
  box-shadow:0 4px 12px -3px rgba(34,197,94,.55);text-transform:uppercase}
.card .thumb::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;z-index:2;
     background:linear-gradient(90deg,var(--accent),var(--accent2));opacity:.85}
.card .thumb::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
     background:linear-gradient(115deg,transparent 34%,rgba(255,255,255,.12) 48%,transparent 62%);
     transform:translateX(-130%);transition:transform .7s ease}
.card:hover .thumb::after{transform:translateX(130%)}
@media(prefers-reduced-motion:reduce){.card .thumb::after{transition:none;display:none}}
/* Body sits on a darker surface than the art panel above it. */
.card-body{display:flex;flex-direction:column;gap:9px;padding:14px 15px 16px;flex:1;min-width:0;
     background:color-mix(in srgb,var(--bg2) 78%,var(--surface))}
.card h3{font-size:15.5px;font-weight:700;line-height:1.3;font-family:var(--font-body);min-width:0;
     display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card h3 a:hover{color:var(--accent)}
.card .cat{display:flex;align-items:center;gap:6px;min-width:0;font-size:11px;color:var(--faint);font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.card .cat .cat-ic{flex:none;display:grid;place-items:center;color:var(--muted);opacity:.85}
.card .cat .cat-ic svg{width:14px;height:14px;display:block}
.card .cat .cat-lab{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card .desc{font-size:13px;color:var(--muted);min-width:0;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card .row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:4px;flex-wrap:wrap;min-width:0}
.card-btns{display:flex;gap:8px;margin-top:11px;min-width:0}
.cbtn-cart{width:44px;height:44px;flex:none;display:grid;place-items:center;border:1px solid var(--edge2);background:var(--surface);color:var(--text);border-radius:12px;cursor:pointer;transition:.15s;text-decoration:none}
.cbtn-cart:hover{border-color:var(--accent);color:var(--accent)}
.cbtn-cart svg{width:20px;height:20px}
.cbtn-buy{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:7px;height:44px;border:0;border-radius:12px;cursor:pointer;font-weight:800;font-size:14px;color:var(--on-accent,#fff);font-family:inherit;background:linear-gradient(135deg,var(--accent),var(--accent2));box-shadow:0 10px 24px -12px color-mix(in srgb,var(--accent2) 70%,transparent);transition:transform .12s,filter .15s}
.cbtn-buy:hover{transform:translateY(-1px);filter:saturate(1.08)}
.cbtn-buy:active{transform:scale(.98)}
.cbtn-buy:disabled,.cbtn-buy.is-offline{background:linear-gradient(135deg,#3a1a1a,#1c0a0a);color:#fca5a5;cursor:not-allowed;box-shadow:none;transform:none;filter:none}
.price{font-family:var(--font-display);font-weight:800;font-size:20px;line-height:1.15;min-width:0}
.price small{color:var(--muted);font-weight:600;font-size:12px;margin-left:4px}
.pill{font-size:11px;font-weight:700;color:var(--accent);padding:5px 11px;border-radius:999px;white-space:nowrap;
     background:var(--surface);box-shadow:var(--neu-out-sm)}
.pill.warn{color:#fbbf24}
.pill--cid{color:#3b2f00;background:linear-gradient(135deg,#fde047,#f5b301);box-shadow:0 4px 12px -5px rgba(245,158,11,.8)}
/* Delivery label: full wording on roomy layouts, short wording in 2-up. */
.pill .pill-short{display:none}
@media(max-width:380px){.cbtn-buy{font-size:13px}}


/* ═══════════════ 9b. PRODUCT CAROUSELS (scroll-snap rails) ═══════════════
   Every landing-page product section renders as a horizontal rail:
   4 cards on desktop / 3 ≥900 / 2 ≥600 / 1.2 (peek) below, snapping on card
   starts. The SAME track becomes a wrapping grid when it gets .is-expanded
   ("View all N", or automatically while a filter is active) so hidden cards
   never leave holes in a mandatory snap track. */
.sec-tools{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding-bottom:5px}
.sec-viewall{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;cursor:pointer;
     font-weight:700;font-size:13px;color:var(--accent);padding:9px 15px;border-radius:999px;
     background:color-mix(in srgb,var(--accent) 9%,var(--surface));box-shadow:var(--neu-out-sm);
     border:1px solid color-mix(in srgb,var(--accent) 32%,var(--edge));transition:.16s}
.sec-viewall:hover{text-decoration:none;transform:translateY(-1px);
     background:color-mix(in srgb,var(--accent) 17%,var(--surface));border-color:color-mix(in srgb,var(--accent) 55%,transparent)}

.car-shell{position:relative}
.car-track{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 16.8px)/1.2);gap:14px;
     overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;
     overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;
     scrollbar-width:none;-ms-overflow-style:none;
     padding:6px 2px 14px;margin:-6px -2px -8px}
.car-track::-webkit-scrollbar{width:0;height:0;display:none}
.car-track>.card{scroll-snap-align:start;min-width:0}
.car-track:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r)}
@media(min-width:600px){.car-track{grid-auto-columns:calc((100% - 14px)/2)}}
@media(min-width:900px){.car-track{gap:20px;grid-auto-columns:calc((100% - 40px)/3)}}
@media(min-width:1100px){.car-track{grid-auto-columns:calc((100% - 60px)/4)}}

/* Round accent arrows live in the shell's own gutter — they never overlap a
   card, and the gutter collapses (with the arrows) on touch/narrow screens. */
.car-nav{position:absolute;top:50%;margin-top:-21px;z-index:6;display:none;place-items:center;
     width:42px;height:42px;border-radius:50%;border:0;cursor:pointer;padding:0;
     color:var(--on-accent,#fff);background:linear-gradient(135deg,var(--accent),var(--accent2));
     box-shadow:inset 0 1px 0 rgba(255,255,255,.35),0 12px 26px -12px color-mix(in srgb,var(--accent2) 85%,transparent);
     transition:transform .14s,opacity .16s,filter .16s}
.car-nav svg{width:20px;height:20px}
.car-nav:hover:not(:disabled){transform:scale(1.07)}
.car-nav:disabled{opacity:.26;cursor:default;filter:grayscale(.5)}
.car-prev{left:0}.car-next{right:0}
@media(min-width:900px){
  .car-shell{padding:0 50px}
  .car-nav{display:grid}
}
@media(hover:none){.car-shell{padding:0}.car-nav{display:none}}
.car-shell.is-static .car-nav{opacity:.26}
.cat-section.is-expanded .car-nav{display:none}
@media(min-width:900px){.cat-section.is-expanded .car-shell{padding:0}}

/* Expanded: the rail turns back into the normal wrapping product grid. */
.car-track.is-expanded{grid-auto-flow:row;grid-auto-columns:auto;
     grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:20px;
     overflow:visible;scroll-snap-type:none;padding:0;margin:0}
.car-track.is-expanded>.card{scroll-snap-align:none}
@media(prefers-reduced-motion:reduce){.car-track{scroll-behavior:auto}}
@media(max-width:640px){.car-track.is-expanded{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}

/* ── Phones: no rails. Every section is a plain 2-up grid, like the app.
   The carousel IIFE watches the same 600px query and skips its arrow/scroll
   logic while this is in force, so the two never fight. ─────────────────── */
@media(max-width:600px){
  /* Phones keep the SWIPEABLE rail (resellkeys pattern): two cards per view,
     swipe sideways for more, dots below showing position. Two columns are
     visible at every phone width — including sub-360px devices (large
     "display size" setting), where an old 1-col override used to collapse
     the row to a single card. Cards just get narrower. */
  .car-track{grid-auto-flow:column;grid-auto-columns:calc((100% - 10px)/2);gap:10px;
       overflow-x:auto;scroll-snap-type:x mandatory;padding:2px 0 10px;margin:0}
  .car-track>.card{scroll-snap-align:start}
  /* "View all" still switches the rail to a wrapping 2-up grid. */
  .car-track.is-expanded{grid-auto-flow:row;grid-auto-columns:auto;
       grid-template-columns:repeat(2,minmax(0,1fr));
       overflow:visible;scroll-snap-type:none}
  .car-shell{padding:0}
  .car-nav{display:none!important}      /* touch swipes instead of arrows */
  /* Plain product grids (related products, filtered sections) default to
     auto-fill minmax(230px,…), which fits only ONE column on a phone. */
  .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  /* Tighten card internals so two columns stay comfortable. */
  .card .card-body{padding:10px}
  .card h3{font-size:13px}
  .card .price{font-size:15px}
}
@media(max-width:340px){
  .car-track{gap:8px;grid-auto-columns:calc((100% - 8px)/2)}
  .car-track.is-expanded{gap:8px}
  .card .card-body{padding:8px}
}

/* ── Dot pagination (mobile rails) ───────────────────────────────────────── */
.car-dots{display:none;justify-content:center;align-items:center;gap:7px;margin:2px 0 4px}
.car-dots button{width:7px;height:7px;padding:0;border:0;border-radius:50%;cursor:pointer;
     background:var(--edge2,rgba(148,163,184,.35));transition:width .2s,background .2s;
     position:relative}
/* 44px tap area without changing the visual dot size */
.car-dots button::after{content:"";position:absolute;left:50%;top:50%;
     width:34px;height:34px;transform:translate(-50%,-50%)}
.car-dots button[aria-current="true"]{width:20px;border-radius:999px;
     background:linear-gradient(90deg,var(--accent),var(--accent2))}
@media(max-width:600px){
  .car-shell:not(.is-static) .car-dots{display:flex}
  .cat-section.is-expanded .car-dots{display:none}
}

/* ═══════════════ 9c. GET CID (free phone-activation tool) ═══════════════ */
nav.links a.nl-cid{color:#facc15;font-weight:800;
     background:linear-gradient(100deg,rgba(250,204,21,.15),rgba(250,204,21,.04));
     border:1px solid rgba(250,204,21,.4)}
nav.links a.nl-cid:hover{color:#fde047;background:linear-gradient(100deg,rgba(250,204,21,.28),rgba(250,204,21,.09))}
html[data-theme="light"] nav.links a.nl-cid{color:#8a6100;border-color:rgba(161,98,7,.42);
     background:linear-gradient(100deg,rgba(250,204,21,.32),rgba(250,204,21,.12))}
.nl-cid-tag{font-family:var(--font-mono,ui-monospace,monospace);font-size:9px;font-weight:800;letter-spacing:.08em;
     background:#facc15;color:#3b2f00;border-radius:999px;padding:2px 6px;margin-left:2px;flex:none}
.side a.side-cid{color:#facc15;font-weight:800}
.side a.side-cid svg{color:#facc15}
/* Drawer row variant — amber tile + amber label, distinct from the accent
   rows and from the reseller lane. */
.side a.side-cid .side-ic{color:#facc15;background:rgba(250,204,21,.14);border-color:rgba(250,204,21,.36)}
.side a.side-cid:hover .side-ic{background:rgba(250,204,21,.24);border-color:rgba(250,204,21,.5)}
.side a.side-cid .side-tx b{color:#facc15}
html[data-theme="light"] .side a.side-cid{color:#8a6100}
html[data-theme="light"] .side a.side-cid svg{color:#8a6100}
html[data-theme="light"] .side a.side-cid .side-ic{color:#8a6100;background:rgba(250,204,21,.3);border-color:rgba(161,98,7,.4)}
html[data-theme="light"] .side a.side-cid .side-tx b{color:#8a6100}
.fcols a.f-cid{color:#eab308;font-weight:700}
.fcols a.f-cid:hover{color:#facc15}
html[data-theme="light"] .fcols a.f-cid{color:#8a6100}

/* ═══════════════ 9d. RESELLER TRACK (nav item + mobile header button) ═══
   "For Resellers" is a primary nav item, deliberately NOT a dropdown child.
   It reads as a separate lane via a thin accent underline + an API chip —
   loud enough to find in two seconds, quiet enough not to shout at retail
   shoppers. */
nav.links a.nl-resell{position:relative;display:inline-flex;align-items:center;gap:7px;
     color:var(--text);font-weight:700}
nav.links a.nl-resell::after{content:"";position:absolute;left:14px;right:14px;bottom:4px;height:2px;border-radius:2px;
     background:linear-gradient(90deg,var(--accent),var(--accent2));opacity:.85;transition:opacity .16s}
nav.links a.nl-resell:hover{background:color-mix(in srgb,var(--accent) 15%,transparent)}
nav.links a.nl-resell:hover::after{opacity:1}
nav.links a.nl-resell.active::after{display:none}

/* ── Product-page warranty panel ───────────────────────────────
   Three states with distinct icon shapes AND colour, so the state survives
   colour-blindness, greyscale printing and forced-colours mode. */
.pp-wty{margin-top:22px;padding:16px 18px;border-radius:14px;border:1px solid var(--edge);
  background:color-mix(in srgb,var(--text) 3%,transparent)}
.pp-wty-head{display:flex;gap:12px;align-items:flex-start}
.pp-wty-ic{flex:none;display:grid;place-items:center;width:40px;height:40px;border-radius:11px}
.pp-wty-title{display:block;font-family:Sora,system-ui,sans-serif;font-size:15px;line-height:1.3}
.pp-wty-tag{display:inline-block;margin-top:4px;padding:2px 9px;border-radius:999px;
  font-size:11px;font-weight:700;letter-spacing:.02em}
.pp-wty-body{margin:12px 0 10px;color:var(--muted);font-size:14px;line-height:1.65}
.pp-wty-list{margin:0 0 12px;padding-left:18px;color:var(--muted);font-size:13.5px;line-height:1.7}
.pp-wty-list li{margin:2px 0}
.pp-wty-link{font-size:13px;font-weight:600;text-decoration:none}
.pp-wty-link:hover{text-decoration:underline}
.pp-wty--good{border-color:color-mix(in srgb,#22c55e 34%,transparent)}
.pp-wty--good .pp-wty-ic{color:#22c55e;background:color-mix(in srgb,#22c55e 14%,transparent)}
.pp-wty--good .pp-wty-tag{color:#22c55e;background:color-mix(in srgb,#22c55e 15%,transparent)}
.pp-wty--good .pp-wty-link{color:#22c55e}
.pp-wty--warn{border-color:color-mix(in srgb,#f59e0b 38%,transparent)}
.pp-wty--warn .pp-wty-ic{color:#f59e0b;background:color-mix(in srgb,#f59e0b 14%,transparent)}
.pp-wty--warn .pp-wty-tag{color:#f59e0b;background:color-mix(in srgb,#f59e0b 15%,transparent)}
.pp-wty--warn .pp-wty-link{color:#f59e0b}
.pp-wty--none{border-color:color-mix(in srgb,#ef4444 34%,transparent)}
.pp-wty--none .pp-wty-ic{color:#ef4444;background:color-mix(in srgb,#ef4444 13%,transparent)}
.pp-wty--none .pp-wty-tag{color:#ef4444;background:color-mix(in srgb,#ef4444 14%,transparent)}
.pp-wty--none .pp-wty-link{color:var(--muted)}
@media (max-width:420px){.pp-wty{padding:14px}.pp-wty-ic{width:34px;height:34px}}
/* AI Tools — a subtle violet tint so it reads as a distinct shelf next to the
   accent-coloured reseller link, without competing with it for attention. */
nav.links a.nl-ai{position:relative;display:inline-flex;align-items:center;gap:6px;font-weight:700}
nav.links a.nl-ai::before{content:"✨";font-size:12px;line-height:1}
nav.links a.nl-ai:hover{background:color-mix(in srgb,#a78bfa 16%,transparent)}
nav.links a.nl-ai.active{color:#c4b5fd}
/* Hero CTA for the AI shelf. Distinct from .primary (the main shop CTA) so the
   page still has ONE dominant action, with this as a clear second. */
.hero-actions .btn.btn-ai{color:#fff;border:1px solid rgba(167,139,250,.5);
  background:linear-gradient(135deg,#7c3aed,#a78bfa);box-shadow:0 6px 22px rgba(124,58,237,.32)}
.hero-actions .btn.btn-ai:hover{filter:brightness(1.07);transform:translateY(-1px)}
:root[data-theme="light"] .hero-actions .btn.btn-ai{box-shadow:0 6px 18px rgba(124,58,237,.28)}
.side-row.side-ai .side-ic{color:#a78bfa;background:color-mix(in srgb,#a78bfa 16%,transparent)}
@media (prefers-reduced-motion:reduce){.hero-actions .btn.btn-ai:hover{transform:none}}
.nl-api-chip{font-family:var(--font-mono,ui-monospace,monospace);font-size:9px;font-weight:800;letter-spacing:.09em;
     line-height:1;flex:none;padding:3px 6px;border-radius:999px;
     color:var(--on-accent,var(--btn-text));background:linear-gradient(135deg,var(--accent),var(--accent2))}
nav.links a.nl-resell.active .nl-api-chip{color:var(--accent-text,var(--accent));background:var(--surface)}
/* Mobile header button — the owner asked for a Resellers entry in the header
   row itself, not only in the drawer. Hidden on desktop (the nav pill covers
   it); ≤900px it sits between the logo and the theme toggle. */
.resell-btn{display:none;align-items:center;gap:7px;flex:none;height:44px;padding:0 12px;border-radius:999px;
     font-family:var(--font-display);font-weight:800;font-size:12.5px;letter-spacing:-.1px;white-space:nowrap;
     color:var(--accent-text,var(--accent));
     background:color-mix(in srgb,var(--accent) 12%,var(--surface));
     border:1px solid color-mix(in srgb,var(--accent) 38%,transparent);
     -webkit-tap-highlight-color:transparent}
.resell-btn svg{width:17px;height:17px;flex:none}
.resell-btn:active{background:color-mix(in srgb,var(--accent) 20%,var(--surface))}
.resell-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media(max-width:900px){
  .resell-btn{display:inline-flex}
  /* Header row = logo + Resellers + theme + hamburger. The logo has to be
     allowed to shrink or a wide wordmark pushes the row into a wrap. */
  .navbar .logo{min-width:0;flex:0 1 auto;overflow:hidden}
  .navbar .brand-logo{max-width:min(150px,32vw)}
}
@media(max-width:412px){
  .resell-btn{padding:0 10px;gap:6px;font-size:12px}
  .navbar .brand-logo{max-width:min(112px,26vw)}
}
@media(max-width:359px){
  /* Sub-360px the label is the first thing to go — the glyph + accent ring
     still reads as the reseller entry and nothing wraps. */
  .resell-btn{width:44px;padding:0;justify-content:center}
  .resell-btn .rsl-lab{display:none}
}

/* ═══════════════ 10. FEATURES / GLASS BAR / FIELDS / PROSE / CTA ═══════ */
.features{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:22px}
.feat{position:relative;overflow:hidden;border-radius:var(--r);border:1px solid var(--edge);padding:28px;box-shadow:var(--neu-out);
     background:linear-gradient(165deg,color-mix(in srgb,var(--accent) 9%,var(--surface)),var(--surface) 60%);
     transition:transform .2s ease,box-shadow .25s ease,border-color .25s ease}
.feat::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent2))}
.feat:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--accent) 45%,transparent);box-shadow:var(--neu-out),0 18px 40px -16px color-mix(in srgb,var(--accent2) 55%,transparent)}
.feat .ic{width:54px;height:54px;border-radius:15px;display:grid;place-items:center;margin-bottom:16px;
     background:linear-gradient(135deg,var(--accent),var(--accent2));color:var(--on-accent,#fff);box-shadow:0 12px 26px -8px color-mix(in srgb,var(--accent2) 70%,transparent)}
.feat .ic svg{width:26px;height:26px}
.feat h3{font-size:17.5px;margin-bottom:7px;font-family:var(--font-display);font-weight:700}
.feat p{color:var(--muted);font-size:14px}

.glass-bar{background:var(--glass);backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);
     border:1px solid var(--glass-edge);border-radius:18px;padding:18px 20px;box-shadow:var(--shadow-lg)}
.field{width:100%;background:var(--surface);border:1px solid var(--edge);border-radius:14px;color:var(--text);
     font-family:var(--font-body);font-size:15px;padding:13px 16px;box-shadow:var(--neu-in);outline:none}
.field::placeholder{color:var(--faint)}
.field:focus{box-shadow:var(--neu-in),0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent)}

.prose{max-width:800px;margin:0 auto}
.prose h1{font-size:clamp(28px,4vw,40px);margin-bottom:10px}
.prose h2{font-size:22px;margin:30px 0 12px}
.prose p,.prose li{color:var(--muted);margin-bottom:13px}
.prose ul{padding-left:22px}
.faq-item{background:var(--surface);border:1px solid var(--edge);border-radius:16px;padding:22px 24px;margin-bottom:16px;box-shadow:var(--neu-out-sm)}
.faq-item h3{font-size:17px;margin-bottom:9px;font-family:var(--font-display);font-weight:700}
.faq-item p{color:var(--muted)}

.cta-band{position:relative;border-radius:26px;padding:52px 40px;text-align:center;margin:34px 0;overflow:hidden;
     background:var(--glass);backdrop-filter:blur(20px) saturate(170%);-webkit-backdrop-filter:blur(20px) saturate(170%);
     border:1px solid var(--glass-edge);box-shadow:var(--shadow-lg)}
.cta-band::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;
     background:radial-gradient(60% 120% at 20% 0%,color-mix(in srgb,var(--accent) 40%,transparent),transparent 60%),
               radial-gradient(60% 120% at 90% 100%,color-mix(in srgb,var(--accent2) 40%,transparent),transparent 60%)}
.cta-band h2{font-size:clamp(24px,3.6vw,36px);margin-bottom:12px}
.cta-band p{color:var(--muted);margin-bottom:26px}
.cta-band .cta{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}

.breadcrumb{color:var(--faint);font-size:13px;margin-bottom:20px}
.breadcrumb a:hover{color:var(--text)}

/* ═══════════════ 11. FOOTER (.fcard glass panel) ═══════════════ */
footer.site{position:relative;border:0;padding:0 0 30px;margin-top:56px;background:transparent}
.fcard{position:relative;overflow:hidden;border-radius:28px;padding:40px 40px 24px;
     border:1px solid color-mix(in srgb,var(--accent) 18%,var(--edge2));
     background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 6%,var(--surface)),var(--bg2) 72%);
     box-shadow:0 40px 90px -50px rgba(0,0,0,.85),0 0 70px -34px color-mix(in srgb,var(--accent) 42%,transparent),inset 0 1px 0 rgba(255,255,255,.05)}
.fcard::before{content:"";position:absolute;inset:0;pointer-events:none;
     background:radial-gradient(120% 80% at 100% 0%,color-mix(in srgb,var(--accent) 12%,transparent),transparent 55%)}
.fcard>*{position:relative}
@media(max-width:640px){.fcard{padding:26px 20px 20px;border-radius:22px}}
.fcols{display:grid;grid-template-columns:1.8fr 1fr 1fr;gap:28px;align-items:start}
/* Footer keeps the brand NAME next to the logo (the header is logo-only).
   .fcols a{display:block} would otherwise stack the mark above the name. */
.fbrand .logo{display:flex;align-items:center;gap:11px;margin-bottom:12px}
.fbrand .logo .brand-name{color:var(--text)}
.fbrand .logo:hover .brand-name{color:var(--accent)}
.fbrand p{color:var(--muted);font-size:13.5px;line-height:1.6;max-width:340px;margin:0}
.fbrand-cta{display:flex;align-items:center;gap:14px;margin-top:16px;flex-wrap:wrap}
.fbrand-cta .btn.sm{padding:9px 16px;font-size:13px}
.fsupport{color:var(--muted);font-weight:700;font-size:13.5px}
.fsupport:hover{color:var(--accent)}
.fcols h4{font-size:12px;text-transform:uppercase;letter-spacing:.7px;color:var(--faint);margin-bottom:13px;font-family:var(--font-display)}
.fcols a{display:block;color:var(--muted);margin-bottom:9px;font-size:14px;transition:color .14s}
.fcols a:not(.logo):not(.btn):hover{color:var(--accent)}
.copyright{border-top:1px solid var(--edge);margin-top:26px;padding-top:18px;color:var(--faint);font-size:13px;
     display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
.fbottom{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center}
.fbottom a{color:var(--faint);font-size:13px}
.fbottom a:hover{color:var(--text)}
.ftrust{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;
     margin-top:24px;padding-top:20px;border-top:1px solid var(--edge)}
.fpays{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.fpay{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--muted);
     background:var(--surface);border:1px solid var(--edge);border-radius:9px;padding:6px 11px}
.fpay svg{width:15px;height:15px}
.fsocial{display:flex;align-items:center;gap:9px}
.fsoc{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;color:var(--muted);
     border:1px solid var(--edge2);background:var(--surface);transition:.16s}
.fsoc:hover{color:var(--on-accent,#fff);border-color:transparent;background:linear-gradient(135deg,var(--accent),var(--accent2));transform:translateY(-2px);
     box-shadow:0 0 22px -4px color-mix(in srgb,var(--accent) 75%,transparent)}
.fsoc svg{width:19px;height:19px}
@media(max-width:820px){.fcols{grid-template-columns:1fr 1fr}}
@media(max-width:600px){
  .ftrust{flex-direction:column;align-items:center;text-align:center;gap:16px}
  .fpays{justify-content:center}
  .fsocial{flex-wrap:wrap;justify-content:center;gap:12px}
}

/* ═══════════════ 12. SIDE DRAWER + SCRIM + MOBILE DOCK ═══════════════ */
.scrim{position:fixed;inset:0;z-index:70;background:rgba(2,4,10,.6);
     -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
     opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s}
.scrim.open{opacity:1;visibility:visible}
/* Full-height opaque panel sliding in from the right. Deliberately NOT glass:
   translucency made the menu unreadable over the product grid behind it. */
.side{position:fixed;top:0;right:0;width:min(330px,86vw);height:100%;height:100dvh;z-index:80;
     padding:18px 16px calc(20px + env(safe-area-inset-bottom));overflow-y:auto;overscroll-behavior:contain;
     background:var(--panel,var(--surface));border-left:1px solid var(--edge2);
     border-radius:20px 0 0 20px;box-shadow:-24px 0 70px rgba(0,0,0,.45);
     display:flex;flex-direction:column;gap:2px;
     transform:translateX(105%);visibility:hidden;
     /* visibility flips instantly on open and only AFTER the slide-out on
        close, so the panel is focusable the moment .open lands but stays out
        of the tab order while it is parked off-screen. */
     transition:transform .3s cubic-bezier(.5,0,.2,1),visibility 0s linear .3s}
.side.open{transform:none;visibility:visible;
     transition:transform .3s cubic-bezier(.5,0,.2,1),visibility 0s linear 0s}
@media(prefers-reduced-motion:reduce){
  .side,.side.open{transition:none}
  .scrim{transition:none}
}
html.menu-open{overflow:hidden}
/* Header row: brand (logo + NAME, since the site header is logo-only) + close */
.side-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
     padding-bottom:14px;margin-bottom:8px;border-bottom:1px solid var(--edge2)}
.side a.side-brand{display:flex;align-items:center;gap:11px;min-width:0;padding:4px 2px;border-radius:12px;
     font-family:var(--font-display);font-weight:800;font-size:17px;color:var(--text)}
.side a.side-brand:hover{background:none;color:var(--accent)}
.side a.side-brand .brand-logo{height:var(--logo-h,34px)}
.side a.side-brand .brand-logo--mark{width:var(--logo-h,34px)}
.side a.side-brand .brand-logo--mark svg{width:64%;height:64%;color:inherit}
.side a.side-brand .brand-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side .close{flex:none;background:var(--surface2,var(--surface));border:1px solid var(--edge2);color:var(--text);
     width:42px;height:42px;border-radius:12px;font-size:19px;cursor:pointer;box-shadow:var(--neu-out-sm)}
.side .close:hover{border-color:var(--accent);color:var(--accent)}
/* Primary rows: 48px+ tap targets, leading icon in an accent-tinted tile,
   grouped under small section labels (Shop / Account / Company). The ACTIVE
   route is filled with accent tint and carries a left accent bar so you can
   tell where you are without reading. */
.side-nav{display:flex;flex-direction:column;gap:2px}
.side-lab{margin:14px 4px 6px;font-family:var(--font-display);font-size:10.5px;font-weight:800;
     letter-spacing:.16em;text-transform:uppercase;color:var(--faint)}
.side-lab:first-of-type{margin-top:4px}
.side a{display:flex;align-items:center;gap:12px;min-height:48px;color:var(--text);font-weight:600;font-size:15.5px;padding:10px 12px;border-radius:14px}
.side a:hover,.side a:focus-visible{background:var(--hi)}
.side a svg{width:20px;height:20px;flex:none;color:var(--muted)}
.side a:hover svg{color:var(--accent)}
/* Icon tile */
.side-ic{flex:none;width:36px;height:36px;border-radius:11px;display:grid;place-items:center;
     color:var(--accent-text,var(--accent));
     background:color-mix(in srgb,var(--accent) 13%,transparent);
     border:1px solid color-mix(in srgb,var(--accent) 22%,transparent);
     transition:background .15s,border-color .15s,color .15s}
.side a .side-ic svg,.side-group>summary .side-ic svg{width:19px;height:19px;color:inherit}
.side-ic.is-ms{background:var(--hi);border-color:var(--edge2)}
.side a .side-ic.is-ms svg{width:17px;height:17px}
.side a:hover .side-ic{background:color-mix(in srgb,var(--accent) 20%,transparent);
     border-color:color-mix(in srgb,var(--accent) 38%,transparent)}
.side a:hover .side-ic svg{color:inherit}
/* Label + optional sub-line */
.side-tx{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.side-tx b{font-weight:700;font-size:15px;line-height:1.25;letter-spacing:-.1px;
     overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-tx i{font-style:normal;font-size:11.5px;font-weight:500;color:var(--faint);line-height:1.3;
     overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Active route */
.side a.side-row.is-active{position:relative;color:var(--text);
     background:color-mix(in srgb,var(--accent) 14%,transparent);
     box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 26%,transparent)}
.side a.side-row.is-active::before{content:"";position:absolute;left:0;top:11px;bottom:11px;width:3px;
     border-radius:0 3px 3px 0;background:linear-gradient(180deg,var(--accent),var(--accent2))}
.side a.side-row.is-active .side-tx b{color:var(--accent-text,var(--accent))}
.side a.side-row.is-active .side-ic{background:linear-gradient(140deg,var(--accent),var(--accent2));
     border-color:transparent;color:var(--on-accent,var(--btn-text))}
/* Reseller row — its own lane, accent-outlined so it reads as a second track */
.side a.side-resell{background:linear-gradient(100deg,color-mix(in srgb,var(--accent) 12%,transparent),transparent 72%);
     box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 30%,transparent)}
.side a.side-resell .side-tx b{color:var(--accent-text,var(--accent))}
.side a.side-resell:hover{background:linear-gradient(100deg,color-mix(in srgb,var(--accent) 20%,transparent),transparent 72%)}
/* Departments disclosure keeps the same row shape */
.side-group{display:flex;flex-direction:column}
.side-group>summary{display:flex;align-items:center;gap:12px;min-height:48px;color:var(--text);font-weight:600;font-size:15.5px;padding:10px 12px;border-radius:14px;cursor:pointer;list-style:none}
.side-group>summary::-webkit-details-marker{display:none}
.side-group>summary:hover{background:var(--hi)}
.side-group>summary:hover .side-ic{background:color-mix(in srgb,var(--accent) 20%,transparent);
     border-color:color-mix(in srgb,var(--accent) 38%,transparent)}
.side-group>summary .g-ic{width:20px;height:20px;flex:none;display:grid;place-items:center;color:var(--muted)}
.side-group>summary .g-ic svg{width:20px;height:20px}
.side-group>summary .chev{width:16px;height:16px;flex:none;margin-left:auto;color:var(--muted);transition:transform .2s}
.side-group[open]>summary .chev{transform:rotate(180deg)}
.side-group a{padding-left:26px;font-size:14.5px;min-height:44px}
.side-group a svg{width:18px;height:18px}
.side-group a .g-ic{width:18px;height:18px;flex:none;display:grid;place-items:center;color:var(--muted)}
.side-count{margin-left:auto;flex:none;font-size:11px;font-weight:800;color:var(--muted);
     background:color-mix(in srgb,var(--text) 7%,transparent);border-radius:999px;padding:2px 8px}
/* Secondary block: smaller, no icons, two per row (legacy — kept for callers
   that still render .side-sec) */
.side-div{border:0;border-top:1px solid var(--edge2);margin:10px 0 8px;width:100%}
.side-sec{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.side-sec a{min-height:44px;font-size:13.5px;font-weight:600;color:var(--muted);padding:10px 14px}
.side-sec a:hover{color:var(--accent)}
/* Theme row — a proper labelled setting, not a stray switch */
.side-theme{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;
     padding:9px 12px;min-height:56px;border-radius:14px;border:1px solid var(--edge2);background:var(--surface2,var(--surface))}
.side-theme-lab{display:flex;align-items:center;gap:12px;min-width:0}
.side-theme-lab>svg{width:19px;height:19px;flex:none;color:var(--muted)}
.side-theme-lab>span{display:flex;flex-direction:column;gap:1px;min-width:0}
.side-theme>span{font-weight:700;font-size:14.5px;color:var(--text)}
.side-theme-lab i{font-style:normal;font-size:11.5px;font-weight:500;color:var(--faint);display:block}
.side-foot{margin:14px 2px 0;padding-top:12px;border-top:1px solid var(--edge2);
     display:flex;flex-direction:column;gap:2px;text-align:center}
.side-foot b{font-family:var(--font-display);font-weight:800;font-size:13px;color:var(--text)}
.side-foot span{font-size:11.5px;color:var(--faint)}

@media(max-width:760px){
  .cta-band{padding:36px 22px}
}

/* ── Mobile bottom dock ─────────────────────────────────────────────────
   Home · Shop · [CART] · Track · Account. The cart is a RAISED circular
   accent action lifted above the bar with a soft outer glow and a count
   badge. Geometry is a 5-column grid whose centre column is a fixed 76px,
   so nothing overflows between 340px and 430px. Every animation is ≤300ms
   and is switched off wholesale under prefers-reduced-motion (§ below). */
.dock{display:none}
@media(max-width:900px){
  /* --dock-bg is the single source of truth for the bar's fill: the raised
     cart's cut-out ring and the badge border must match it EXACTLY or a seam
     shows. The no-backdrop-filter fallbacks further down override this var,
     never `background` directly. */
  .dock{--dock-bg:var(--panel);
       display:grid;grid-template-columns:1fr 1fr 76px 1fr 1fr;align-items:end;gap:2px;
       position:fixed;left:50%;transform:translateX(-50%);z-index:60;
       bottom:calc(10px + env(safe-area-inset-bottom,0px));
       width:min(420px,calc(100vw - 20px));
       padding:8px 6px 9px;border-radius:24px;
       background:var(--dock-bg);border:1px solid var(--panel-edge);
       -webkit-backdrop-filter:blur(18px) saturate(1.4);backdrop-filter:blur(18px) saturate(1.4);
       box-shadow:var(--panel-shadow)}
  /* Subtle accent hairline along the top edge of the bar. */
  .dock::before{content:"";position:absolute;left:18%;right:18%;top:0;height:1px;pointer-events:none;
       background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 60%,transparent),transparent);
       opacity:.75}

  .dock-item{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
       min-height:48px;padding:5px 2px;border-radius:14px;
       color:var(--muted);text-decoration:none;cursor:pointer;background:none;border:0;
       transition:color .18s ease,background .18s ease;
       -webkit-tap-highlight-color:transparent;outline:none}
  .dock-ic{display:grid;place-items:center;width:24px;height:24px;opacity:.9;
       transition:transform .2s cubic-bezier(.34,1.4,.64,1),opacity .18s ease}
  .dock-item svg{width:22px;height:22px;display:block}
  /* Icon-only dock (owner's call). Labels stay in the DOM as the accessible
     name for each control — visually hidden, not deleted, so screen readers
     and voice control still announce "Home", "Cart" etc. */
  .dock-lab{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
       overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
  .dock-item{gap:0}
  .dock-ic{width:26px;height:26px}
  .dock-item svg{width:24px;height:24px}
  .dock-item.active,.dock-item.is-active{
       color:var(--accent-text);background:color-mix(in srgb,var(--accent) 13%,transparent)}
  .dock-item.is-active .dock-ic{transform:scale(1.12);opacity:1}
  .dock-item.is-active .dock-lab{opacity:1}
  .dock-item:active .dock-ic{transform:scale(.9)}
  .dock-item:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 45%,transparent)}

  /* Raised centre cart. The circle IS .dock-cart-ic, so the label stays in
     normal flow and lines up with the other dock labels. */
  .dock-cart{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;
       justify-self:center;margin-top:-26px;padding:0;border:0;background:none;cursor:pointer;
       -webkit-tap-highlight-color:transparent;outline:none}
  .dock-cart-ring{position:absolute;top:-10px;left:50%;width:78px;height:78px;margin-left:-39px;
       border-radius:50%;pointer-events:none;opacity:.5;
       background:radial-gradient(circle,color-mix(in srgb,var(--accent) 45%,transparent) 0%,transparent 68%);
       transition:opacity .25s ease,transform .25s ease}
  .dock-cart-ic{position:relative;display:grid;place-items:center;width:58px;height:58px;border-radius:50%;
       color:var(--on-accent,#04120a);
       background:linear-gradient(145deg,var(--accent),var(--accent2));
       box-shadow:0 0 0 5px var(--dock-bg),
                  0 12px 26px -8px color-mix(in srgb,var(--accent) 70%,transparent),
                  0 0 30px -4px color-mix(in srgb,var(--accent) 45%,transparent);
       transition:transform .2s cubic-bezier(.34,1.4,.64,1),box-shadow .25s ease}
  .dock-cart-ic svg{width:25px;height:25px;stroke-width:2.1}
  .dock-cart:active .dock-cart-ic{transform:scale(.9)}
  .dock-cart:focus-visible .dock-cart-ic{
       box-shadow:0 0 0 5px var(--dock-bg),0 0 0 8px color-mix(in srgb,var(--accent) 60%,transparent)}
  .dock-lab--cart{color:var(--muted);font-size:10.5px;font-weight:700;line-height:1}

  .dock-cart-badge{position:absolute;top:-3px;right:-4px;z-index:2;min-width:21px;height:21px;padding:0 5px;
       display:grid;place-items:center;border-radius:11px;
       background:var(--text);color:var(--bg);
       border:2px solid var(--dock-bg);
       font-family:var(--font-display);font-size:11px;font-weight:800;line-height:1;
       font-variant-numeric:tabular-nums}
  .dock-cart-badge[hidden]{display:none}

  /* Micro-animation: badge pops on add, the cart glows on any count change. */
  .dock-cart-badge.is-pop{animation:dockBadgePop .26s cubic-bezier(.34,1.5,.64,1)}
  .dock-cart.is-bump .dock-cart-ic{animation:dockCartBump .3s cubic-bezier(.34,1.4,.64,1)}
  .dock-cart.is-bump .dock-cart-ring{animation:dockCartGlow .3s ease-out}
  @keyframes dockBadgePop{0%{transform:scale(.4);opacity:.4}60%{transform:scale(1.22)}100%{transform:scale(1);opacity:1}}
  @keyframes dockCartBump{0%{transform:scale(1)}45%{transform:scale(1.12)}100%{transform:scale(1)}}
  @keyframes dockCartGlow{0%{opacity:.5;transform:scale(1)}45%{opacity:1;transform:scale(1.14)}100%{opacity:.5;transform:scale(1)}}

  body{padding-bottom:96px}
  /* ≤900px the pill bar holds exactly three things — logo, a CIRCULAR theme
     toggle and the hamburger. Departments / Products / Microsoft / Blog /
     Get CID / Track / Account all live in the drawer and the bottom dock. */
  nav.links{display:none}
  .menu-btn{display:grid;place-items:center}
  .nav-actions .shop-cta,.nav-actions .acct-btn{display:none}
  .navbar{gap:10px;padding:0 10px}
  /* Pinned mobile nav = clean flush SOLID bar. The floating rounded pill leaves a 12px
     top gap + rounded-corner notches + translucent edges, so as content scrolls under it
     you see through those gaps → the nav looks "stuck" with a gap. On phones: square it,
     drop the top gap + fade, make it fully opaque edge-to-edge. */
  header.site{padding-top:0}
  header.site::before{display:none}
  .navbar{border-radius:0;border:0;border-bottom:1px solid var(--edge);background:var(--surface)!important}
  html[data-theme="light"] .navbar{background:var(--surface)!important}
  /* The 62×32 sliding switch becomes a 44×44 icon button on phones. */
  .nav-actions .theme-toggle{width:44px;height:44px;border-radius:50%;flex:none;
       background:var(--surface);border:1px solid var(--edge);box-shadow:var(--neu-out-sm)}
  .nav-actions .theme-toggle .knob{position:static;width:100%;height:100%;border-radius:50%;
       font-size:17px;background:none!important;box-shadow:none;transform:none!important}
}

/* ═══════════════ 13. BLOG CARDS + ABOUT ACCORDION + TOAST ═══════════════ */
.blog-home{padding:22px 0 10px}
.bh-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px}
.bh-eyebrow{display:inline-block;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.bh-head h2{font-size:clamp(22px,3.6vw,30px);margin:0;letter-spacing:-.5px}
.grad-text{background:linear-gradient(120deg,var(--accent),var(--accent2));-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.bh-all{display:inline-flex;align-items:center;gap:7px;flex:none;font-weight:700;font-size:14px;color:var(--accent);padding:9px 14px;border:1px solid var(--edge);border-radius:12px;transition:.15s}
.bh-all:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.bh-all svg{width:16px;height:16px;transition:transform .15s}.bh-all:hover svg{transform:translateX(3px)}
.bh-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.bh-card{display:flex;flex-direction:column;border:1px solid var(--edge);background:var(--surface);border-radius:18px;overflow:hidden;transition:transform .22s cubic-bezier(.2,.8,.3,1),box-shadow .22s,border-color .22s}
.bh-card:hover{transform:translateY(-6px);border-color:color-mix(in srgb,var(--accent) 45%,var(--edge));box-shadow:0 30px 60px -32px color-mix(in srgb,var(--accent2) 70%,transparent)}
.bh-cover{position:relative;aspect-ratio:1200/630;overflow:hidden;background:#0c0e16}
.bh-cover img{width:100%;height:100%;object-fit:cover;transition:transform .35s ease}
.bh-card:hover .bh-cover img{transform:scale(1.06)}
.bh-cover::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 55%,rgba(0,0,0,.35));pointer-events:none}
.bh-tag{position:absolute;top:12px;left:12px;z-index:1;background:linear-gradient(135deg,var(--accent),var(--accent2));color:var(--on-accent,#fff);font-size:11px;font-weight:800;letter-spacing:.03em;padding:4px 11px;border-radius:999px;box-shadow:0 6px 16px -6px color-mix(in srgb,var(--accent2) 70%,transparent)}
.bh-body{display:flex;flex-direction:column;flex:1;padding:16px 17px 15px}
.bh-body h3{font-size:16.5px;line-height:1.35;margin:0 0 8px;letter-spacing:-.2px;
   display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bh-body p{color:var(--muted);font-size:13.5px;line-height:1.55;margin:0 0 14px;
   display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.bh-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:11px;border-top:1px solid var(--edge)}
.bh-date{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
.bh-read{display:inline-flex;align-items:center;gap:6px;color:var(--accent);font-weight:800;font-size:13.5px}
.bh-read svg{width:15px;height:15px;transition:transform .15s}.bh-card:hover .bh-read svg{transform:translateX(3px)}
.bh-all-mob{display:none}
@media(max-width:880px){.bh-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){
  .bh-grid{grid-template-columns:1fr;gap:14px}
  .bh-all{display:none}
  .bh-all-mob{display:block;text-align:center;margin-top:16px;color:var(--accent);font-weight:800;font-size:14.5px}
}
.about-sec{padding:6px 0 26px}
.about-acc{max-width:760px;margin:0 auto;border:1px solid var(--edge);border-radius:18px;background:var(--surface);overflow:hidden;transition:box-shadow .2s}
.about-acc[open]{box-shadow:0 20px 50px -30px rgba(0,0,0,.5)}
.about-sum{display:flex;align-items:center;gap:11px;padding:16px 20px;cursor:pointer;font-weight:800;font-size:16px;color:var(--text);list-style:none;user-select:none}
.about-sum::-webkit-details-marker{display:none}
.about-sum>svg:first-child{width:20px;height:20px;color:var(--accent);flex:none}
.about-sum .chev{width:18px;height:18px;margin-left:auto;color:var(--muted);transition:transform .25s ease;flex:none}
.about-acc[open] .about-sum .chev{transform:rotate(180deg)}
.about-sum:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}
.about-body{padding:2px 22px 22px;animation:aboutIn .3s ease}
@keyframes aboutIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.about-body h2{font-size:clamp(19px,3vw,25px);margin:6px 0 12px;font-weight:800;letter-spacing:-.4px}
.about-body p{color:var(--muted);font-size:15px;line-height:1.75;margin:0 0 12px}
.about-body p:last-child{margin-bottom:0}
.about-body a{color:var(--accent);font-weight:600}
.gtoast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(20px);background:var(--surface);border:1px solid var(--accent);color:var(--text);padding:11px 18px;border-radius:12px;font-weight:600;font-size:14px;box-shadow:0 14px 34px rgba(0,0,0,.4);z-index:70;opacity:0;visibility:hidden;transition:.25s}
.gtoast.show{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}

/* ═══════════════ 14. MOTION LAYER ═══════════════ */
/* Hero: sequenced load-in. CSS-only with fill-mode both and a visible
   resting state — motion must fail visible. */
html.js-motion .hero-copy>*{animation:heroIn .8s cubic-bezier(.16,1,.3,1) both;
  animation-delay:calc(.08s + var(--h,0) * .085s)}
@keyframes heroIn{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
/* Sticky header condenses once the page scrolls */
header.site{transition:box-shadow .35s ease,backdrop-filter .35s ease}
.navbar{transition:height .3s cubic-bezier(.16,1,.3,1)}
html.scrolled .navbar{height:58px;box-shadow:0 22px 50px -22px rgba(0,0,0,.8),0 0 46px -20px color-mix(in srgb,var(--accent) 55%,transparent),inset 0 1px 0 rgba(255,255,255,.06)}
@media(min-width:900px){section{padding:76px 0}}
@media(prefers-reduced-motion:reduce){
  html.js-motion .hero-copy>*{opacity:1!important;transform:none!important;animation:none!important}
  .navbar{transition:none}
}

/* ═══════════════ 15. MOBILE COMPACT + SCROLL PERFORMANCE ═══════════════ */
@media(max-width:640px){
  section{padding:26px 0}
  .wrap{padding:0 13px}
  .sec-head{margin-bottom:16px;gap:10px 14px}
  .sec-head h1,.sec-head h2{font-size:20px;gap:10px}
  .chips{gap:8px;margin-bottom:22px}
  .chip{padding:8px 12px;font-size:12.5px}
  .cat-toggle{padding:12px 15px}.cat-toggle b{font-size:16px}.cat-toggle i{font-size:12px}
  .features{grid-template-columns:1fr 1fr;gap:10px}
  .feat{padding:15px 13px}
  .feat .ic{width:40px;height:40px;margin-bottom:9px}
  .feat h3{font-size:14px}.feat p{font-size:12px}
  .cta-band{padding:26px 16px;border-radius:20px;margin:18px 0}
  .cta-band h2{font-size:21px}.cta-band p{font-size:13px}
  .cta-band .cta{flex-direction:column}.cta-band .cta .btn{width:100%;justify-content:center}
  footer.site{padding:30px 0 22px;margin-top:34px}
  .fcols{grid-template-columns:1fr 1fr;gap:20px 16px}
  .fcols>div:first-child{grid-column:1 / -1;text-align:center;padding-bottom:16px;border-bottom:1px solid var(--edge)}
  .fcols>div:first-child .logo{justify-content:center;margin-bottom:10px!important}
  .fcols>div:first-child p{max-width:none;font-size:12.5px;margin:0 auto}
  .fbrand-cta{justify-content:center;margin-top:14px}
  .fcols h4{font-size:12px;margin-bottom:10px}
  .fcols a{font-size:13px;margin-bottom:8px}
  .copyright{flex-direction:column;text-align:center;gap:6px;margin-top:22px;padding-top:16px;font-size:12px}
}
@media(max-width:400px){.card h3{font-size:12px}}
@media(max-width:380px){.grid{gap:10px}.card-body{padding:10px}.wrap{padding:0 12px}}
/* .grid stays 2-up on every phone width — see the carousel note above. */

/* backdrop-filter re-blurs every scroll frame on phones; the fixed animated
   aurora repaints continuously — drop both on touch devices. */
@media(max-width:900px), (hover:none) and (pointer:coarse){
  .hero,.eyebrow,.btn.secondary,.ticker,.feat,.navbar,.dock,.nl-menu,.glass-bar,.cta-band{
    backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
  .hero{background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 12%,var(--surface)),var(--surface) 66%)!important}
  .eyebrow{background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}
  .ticker{background:var(--surface)!important}
  .navbar{background:color-mix(in srgb,var(--surface) 94%,var(--bg))!important}
  .dock{--dock-bg:color-mix(in srgb,var(--surface) 96%,var(--bg))}
  .bg-fx .orb,.bg-fx .aurora,.bg-fx .grain,.bg-fx .fxbeams,.bg-fx .fxgrid{display:none!important}
  body{overscroll-behavior-y:none;-webkit-overflow-scrolling:touch}
}

/* ═══════════════ 16. LEGACY COMPATIBILITY LAYER ═══════════════
   Maps the previous design-system.css vocabulary onto the ported tokens so
   every existing page-local style block keeps working (and gains the light
   theme for free). */
:root{
  --fg:var(--text); --fg-muted:var(--muted); --fg-faint:var(--faint);
  --bg-raised:var(--surface); --bg-sunken:var(--bg2);
  --border:var(--edge); --border-soft:var(--edge); --border-strong:var(--edge2);
  --line:var(--edge);
  --glass-bg:var(--glass); --glass-bg-heavy:var(--glass-strong);
  --glass-border:var(--glass-edge); --glass-blur:blur(20px) saturate(170%);
  --card:var(--surface); --bg-soft:var(--bg2);
  --r-sm:12px; --r-md:16px; --r-lg:20px;
  --font-ui:var(--font-body);
  --font-mono:ui-monospace,'Cascadia Code','SF Mono',Consolas,monospace;
  --transition:.18s ease;
  --accent-soft:color-mix(in srgb,var(--accent) 12%,transparent);
  --accent-strong:var(--accent2); --accent-dark:var(--accent2);
  --neu-in-sm:var(--neu-in);
}
/* Legacy button classes → ported button look */
.sk-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--font-display);
  font-weight:700;font-size:14px;color:var(--text);cursor:pointer;padding:11px 20px;border-radius:12px;
  border:1px solid var(--edge2);background:linear-gradient(180deg,var(--surface2),var(--surface));
  box-shadow:inset 0 1px 0 var(--hi),var(--neu-out-sm);text-decoration:none;
  transition:transform .12s ease,box-shadow .12s ease,border-color .15s ease}
.sk-btn:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 55%,var(--edge2));text-decoration:none;color:var(--text)}
.sk-btn:active{transform:translateY(1px);box-shadow:var(--neu-in)}
.sk-btn:disabled{opacity:.55;cursor:not-allowed;transform:none}
.sk-btn--primary{color:#fff;border:1px solid rgba(255,255,255,.25);
  background:linear-gradient(135deg,var(--accent),var(--accent2));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35),0 10px 24px -10px color-mix(in srgb,var(--accent2) 70%,transparent)}
.sk-btn--primary:hover{filter:saturate(1.08);color:#fff}
/* Legacy surfaces + inputs */
.neu-card{background:var(--surface);border:1px solid var(--edge);border-radius:var(--r);box-shadow:var(--neu-out)}
.neu-input{width:100%;background:var(--surface);border:1px solid var(--edge);border-radius:14px;color:var(--text);
  font-family:var(--font-body);font-size:15px;padding:12px 15px;box-shadow:var(--neu-in);outline:none}
.neu-input::placeholder{color:var(--faint)}
.neu-input:focus{box-shadow:var(--neu-in),0 0 0 2px color-mix(in srgb,var(--accent) 55%,transparent)}
/* Legacy badges */
.badge{display:inline-flex;align-items:center;gap:5px;font-size:.68rem;font-weight:800;letter-spacing:.04em;
  padding:3px 10px;border-radius:999px;border:1px solid transparent;white-space:nowrap}
.badge--ok{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}
.badge--warn{background:rgba(245,158,11,.12);color:#d97706;border-color:rgba(245,158,11,.35)}
html[data-theme="dark"] .badge--warn{color:#fbbf24}
:root:not([data-theme="light"]) .badge--warn{color:#fbbf24}
.badge--bad{background:rgba(239,68,68,.12);color:#dc2626;border-color:rgba(239,68,68,.35)}
:root:not([data-theme="light"]) .badge--bad{color:#fca5a5}
.badge--muted{background:color-mix(in srgb,var(--text) 6%,transparent);color:var(--muted);border-color:var(--edge)}
/* Legacy glass header (blog/pages fallback chrome) */
.glass-header{position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:14px;
  background:var(--glass-strong);backdrop-filter:blur(22px) saturate(180%);-webkit-backdrop-filter:blur(22px) saturate(180%);
  border-bottom:1px solid var(--glass-edge)}
.glass-header .spacer{flex:1}
/* Legacy modal */
.modal-overlay{position:fixed;inset:0;background:rgba(2,4,10,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:120;display:none;align-items:center;justify-content:center;padding:16px}
.modal-overlay.open{display:flex}
.glass-modal{background:var(--glass-strong);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--glass-edge);border-radius:20px;max-width:560px;width:100%;max-height:92dvh;overflow-y:auto;box-shadow:0 24px 70px rgba(0,0,0,.65)}
.modal-head{padding:16px 20px;border-bottom:1px solid var(--glass-edge);display:flex;align-items:center;justify-content:space-between;gap:10px;position:sticky;top:0;background:var(--glass-strong);z-index:2}
.modal-head h3{font-size:1.02rem;font-weight:700;margin:0;color:var(--text)}
.modal-body{padding:20px}
.empty-state{text-align:center;padding:56px 20px;color:var(--muted);font-size:.95rem}
@media(max-width:480px){
  .modal-overlay{padding:0;align-items:flex-end}
  .glass-modal{max-height:96dvh;border-radius:18px 18px 0 0;max-width:100%}
}

/* ═══════════════ 17. LIGHT THEME AUDIT LAYER ═══════════════
   Per-component light-mode fixes (v2 light redesign). Placed last so they
   win the cascade over the dark-default component rules above.

   Accent TEXT in light mode uses --accent-dark (emitted per skin by the
   server) so links/chips/prices keep ≥4.5:1 on white surfaces; gradients
   keep the vivid --accent/--accent2 pair. */

/* ── Accent-colored text → darkened accent ── */
html[data-theme="light"] .chip b,
html[data-theme="light"] .cat-toggle b,
html[data-theme="light"] .cat-caret,
html[data-theme="light"] .pill,
html[data-theme="light"] .card h3 a:hover,
html[data-theme="light"] .cbtn-cart:hover,
html[data-theme="light"] .acct-btn:hover,
html[data-theme="light"] .mm-toggle:hover,
html[data-theme="light"] .nl-menu a:hover,
html[data-theme="light"] .nl-menu a:hover svg,
html[data-theme="light"] .side a:hover svg,
html[data-theme="light"] .dock-item.active,
html[data-theme="light"] .dock-item.is-active,
html[data-theme="light"] .bh-all,
html[data-theme="light"] .bh-read,
html[data-theme="light"] .bh-all-mob,
html[data-theme="light"] .about-body a,
html[data-theme="light"] .fsupport:hover,
html[data-theme="light"] .fcols a:not(.logo):not(.btn):hover,
html[data-theme="light"] .hero-search .hs-ic,
html[data-theme="light"] .badge--ok{color:var(--accent-dark,var(--accent2))}
/* Page-local accent text (landing mega-menu, filter chips, product page —
   classes ship from src/store.js but are themed here for light parity) */
html[data-theme="light"] .fb-chip,
html[data-theme="light"] .mm-ic,
html[data-theme="light"] .mm-dept.is-active > .mm-dept-btn,
html[data-theme="light"] .mm-dept-btn:hover,
html[data-theme="light"] .mm-dept-btn:focus-visible,
html[data-theme="light"] .mm-sub-btn:hover,
html[data-theme="light"] .mm-sub-btn:focus-visible,
html[data-theme="light"] .dept-ic,
html[data-theme="light"] .pd-price,
html[data-theme="light"] .pp-eyebrow,
html[data-theme="light"] .pp-eyebrow:hover,
html[data-theme="light"] .pp-crumbs a:hover,
html[data-theme="light"] .pp-share-btn:hover,
html[data-theme="light"] .pp-side-links a:hover,
/* PDP v3 accent tiles/glyphs (trust cards, checklist ticks, pay pills,
   sidebar icons) — page-local CSS points them at --accent-text, this keeps
   the darkened accent authoritative on white for any stray inherit. */
html[data-theme="light"] .pp-trust-ic,
html[data-theme="light"] .pp-check,
html[data-theme="light"] .pp-side-ic,
html[data-theme="light"] .pp-pay-pill svg{color:var(--accent-dark,var(--accent2))}

/* ── Status colors re-derived for light surfaces ── */
html[data-theme="light"] .pill.warn{color:#92400e}
html[data-theme="light"] .cbtn-buy:disabled,
html[data-theme="light"] .cbtn-buy.is-offline{
  background:#fee2e2;color:#b91c1c}
html[data-theme="light"] .badge--ok{
  background:color-mix(in srgb,var(--accent) 10%,#ffffff);
  border-color:color-mix(in srgb,var(--accent-dark,var(--accent2)) 35%,transparent)}
/* success chips (e.g. delivered states in legacy pages) */
html[data-theme="light"] .badge--warn{background:#fef3c7;color:#92400e;border-color:rgba(146,64,14,.3)}
html[data-theme="light"] .badge--bad{background:#fee2e2;color:#b91c1c;border-color:rgba(185,28,28,.3)}

/* ── Header / navbar: light glass with a visible edge ── */
html[data-theme="light"] .navbar{
  border-color:rgba(15,23,42,.12);
  background:rgba(255,255,255,.78);
  box-shadow:0 8px 24px rgba(15,23,42,.08),inset 0 1px 0 rgba(255,255,255,.9)}
html.scrolled[data-theme="light"] .navbar{
  box-shadow:0 10px 28px rgba(15,23,42,.12),inset 0 1px 0 rgba(255,255,255,.9)}
html[data-theme="light"] .nl-menu{box-shadow:0 16px 44px -18px rgba(15,23,42,.28)}
html[data-theme="light"] .side{box-shadow:-16px 0 44px rgba(15,23,42,.18)}

/* ── Hero / brand stage / ticker ── */
html[data-theme="light"] .hero{
  background:rgba(255,255,255,.72);
  box-shadow:0 8px 24px rgba(15,23,42,.08),0 34px 70px -44px rgba(15,23,42,.25),inset 0 1px 0 rgba(255,255,255,.9)}
html[data-theme="light"] .hero::after{opacity:.45}
html[data-theme="light"] .brand-glow{opacity:.4}
html[data-theme="light"] .brand-card{
  background:rgba(255,255,255,.85);
  box-shadow:0 14px 34px -18px color-mix(in srgb,var(--bc,#7c3aed) 40%,transparent),inset 0 1px 0 rgba(255,255,255,.9)}
html[data-theme="light"] .ticker{background:rgba(255,255,255,.6)}
html[data-theme="light"] .hero .eyebrow{box-shadow:0 4px 16px rgba(15,23,42,.08)}

/* ── Product / feature / blog cards: white with definite edges ── */
html[data-theme="light"] .card,
html[data-theme="light"] .feat{
  background:linear-gradient(165deg,color-mix(in srgb,var(--accent) 4%,#ffffff),#ffffff 58%)}
html[data-theme="light"] .card .thumb{background:#e9edf4}
html[data-theme="light"] .bh-cover{background:#e9edf4}
html[data-theme="light"] .bh-card:hover{
  box-shadow:0 22px 48px -28px color-mix(in srgb,var(--accent2) 45%,rgba(15,23,42,.35))}
html[data-theme="light"] .card:hover{
  box-shadow:var(--neu-out),0 16px 36px -22px color-mix(in srgb,var(--accent2) 40%,rgba(15,23,42,.3))}
html[data-theme="light"] .hstat{
  background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 4%,#ffffff),#ffffff)}

/* ── Footer card + toast ── */
html[data-theme="light"] .fcard{
  background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 4%,#ffffff),var(--bg2) 72%);
  box-shadow:0 8px 24px rgba(15,23,42,.08),0 30px 70px -50px rgba(15,23,42,.3),inset 0 1px 0 rgba(255,255,255,.9)}
html[data-theme="light"] .gtoast{box-shadow:0 10px 28px rgba(15,23,42,.16)}

/* ── Mobile no-backdrop-filter fallbacks keep readable light surfaces ── */
@media(max-width:900px), (hover:none) and (pointer:coarse){
  html[data-theme="light"] .hero{background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 6%,#ffffff),#ffffff 66%)!important}
  html[data-theme="light"] .eyebrow{background:color-mix(in srgb,var(--accent) 8%,#ffffff)!important}
  html[data-theme="light"] .ticker{background:#ffffff!important}
  html[data-theme="light"] .navbar{background:rgba(255,255,255,.96)!important}
  html[data-theme="light"] .dock{--dock-bg:rgba(255,255,255,.97)}
}

/* ═══════════════ 18. DELIVERY NOTE (shared strip) ═══════════════
   One subtle note per product-section heading + one on the PDP.
   Markup ships from src/store.js (DELIVERY_NOTE constant). */
.deliv-note{display:flex;align-items:flex-start;gap:8px;margin:-14px 0 22px;padding:9px 13px;
     border:1px solid var(--edge);border-radius:12px;
     background:color-mix(in srgb,var(--text) 3%,var(--surface));
     color:var(--muted);font-size:12.5px;line-height:1.55}
.deliv-note svg{width:15px;height:15px;flex:none;margin-top:2px;color:var(--accent)}
html[data-theme="light"] .deliv-note{background:#f6f8fb}
html[data-theme="light"] .deliv-note svg{color:var(--accent-dark,var(--accent2))}
.deliv-note--pdp{margin:10px 0 0;max-width:560px}
@media(max-width:640px){.deliv-note{font-size:11.5px;margin:-4px 0 16px;padding:8px 11px}}

/* ═══════════════ 19. OPAQUE OVERLAY LAYER ═══════════════
   BUG FIX: floating panels inherited --glass/--glass-strong, which are
   translucent enough that page content (H1s, product art) read straight
   through them. Every panel that floats ABOVE content now gets a
   near-solid fill; backdrop-filter is an enhancement, never the thing
   that makes text legible. Each panel also gets a definite 1px border and
   a real drop shadow so it reads as a distinct layer.

   Covers: header dropdown (.nl-menu), departments mega-menu panel,
   side drawer, mobile dock, modals (.glass-modal, checkout .co-box,
   product-detail modal), toasts and the sticky filter bar. */
:root{
  --panel:rgba(13,18,28,.97);
  --panel-edge:rgba(255,255,255,.14);
  --panel-shadow:0 24px 60px -12px rgba(0,0,0,.7),0 2px 8px rgba(0,0,0,.5);
}
html[data-theme="light"]{
  --panel:rgba(255,255,255,.98);
  --panel-edge:rgba(15,23,42,.16);
  --panel-shadow:0 20px 48px -12px rgba(15,23,42,.28),0 2px 8px rgba(15,23,42,.12);
}

.nl-menu,
.mm-panel,
.side,
.glass-modal,
.co-box,
.toast,
.gtoast{
  background:var(--panel)!important;
  border:1px solid var(--panel-edge);
  box-shadow:var(--panel-shadow)}
/* Sticky sub-heads inside scrolling panels must match the panel fill,
   otherwise rows scroll visibly underneath them. */
.glass-modal .modal-head,.co-head,.mm-head{
  background:var(--panel)!important;
  border-bottom:1px solid var(--panel-edge)}
/* Panels sit above page content AND above the bg-fx/shapegrid canvas. */
.nl-menu{z-index:80}
.mm-overlay{z-index:120}
.mm-panel{z-index:121}
.side{z-index:130}
.scrim{z-index:125}
.modal-overlay,.co-overlay{z-index:140}
.glass-modal,.co-box{z-index:141}
.toast-stack,.gtoast{z-index:1000}
/* Scrims: dim the page enough that the panel clearly wins focus. */
.co-overlay,.modal-overlay,.mm-overlay{background:rgba(2,4,10,.62)}
html[data-theme="light"] .co-overlay,
html[data-theme="light"] .modal-overlay,
html[data-theme="light"] .mm-overlay{background:rgba(15,23,42,.42)}
/* No backdrop-filter support (older Firefox, some Android WebViews) →
   fully solid so nothing is ever readable through a panel. */
@supports not (backdrop-filter: blur(1px)){
  .nl-menu,.mm-panel,.side,.glass-modal,.co-box,.toast,.gtoast,
  .glass-modal .modal-head,.co-head,.mm-head,.navbar{
    background:#0f141f!important}
  .dock{--dock-bg:#0f141f}
  html[data-theme="light"] .nl-menu,
  html[data-theme="light"] .mm-panel,
  html[data-theme="light"] .side,
  html[data-theme="light"] .glass-modal,
  html[data-theme="light"] .co-box,
  html[data-theme="light"] .toast,
  html[data-theme="light"] .gtoast,
  html[data-theme="light"] .glass-modal .modal-head,
  html[data-theme="light"] .co-head,
  html[data-theme="light"] .mm-head,
  html[data-theme="light"] .navbar{background:#ffffff!important}
  html[data-theme="light"] .dock{--dock-bg:#ffffff}
}
/* Header + dock are sticky over content — keep them near-opaque too. */
.navbar{background:color-mix(in srgb,var(--surface) 93%,var(--bg))}
html[data-theme="light"] .navbar{background:rgba(255,255,255,.95)}
@media(max-width:900px){
  .dock{--dock-bg:color-mix(in srgb,var(--surface) 95%,var(--bg))}
  html[data-theme="light"] .dock{--dock-bg:rgba(255,255,255,.97)}
}
/* Sticky filter bar (landing) — ships from src/store.js, opaque here. */
.filter-bar,.fb-bar{
  background:var(--panel);border-bottom:1px solid var(--panel-edge);
  box-shadow:0 6px 18px -10px rgba(0,0,0,.5)}

/* ═══════════════ 20. CONTENT SCRIM + UI AUDIT FIXES ═══════════════ */

/* ── Scrim: calms the animated bg behind long-form content areas so body
   text always sits on a stable ground (product/track/account/blog/legal). */
.pp-wrap::before,.prose::before,.pg-wrap::before,.acct-wrap::before,
.trk-wrap::before,.post-body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(120% 70% at 50% 30%,var(--bg) 42%,color-mix(in srgb,var(--bg) 70%,transparent) 100%)}

/* ── Cards that float over bg-fx: solid fill + definite edge, both themes */
.faq-item,.about-acc,.bh-card,.card,.feat,.hstat,.test-card,.glass-bar{
  border-color:var(--edge2)}
html[data-theme="light"] .faq-item,
html[data-theme="light"] .about-acc,
html[data-theme="light"] .bh-card,
html[data-theme="light"] .test-card{background:#ffffff}
html[data-theme="dark"] .faq-item,
html[data-theme="dark"] .about-acc,
html[data-theme="dark"] .bh-card,
html[data-theme="dark"] .test-card,
:root:not([data-theme="light"]) .faq-item,
:root:not([data-theme="light"]) .about-acc,
:root:not([data-theme="light"]) .bh-card,
:root:not([data-theme="light"]) .test-card{background:#121826}
/* Long-form prose gets a real card instead of floating on the bg */
.prose .faq-item,.about-body{position:relative}

/* ── Focus visibility: a ring on EVERY interactive control, in both themes.
   Never removed — :focus-visible only, so mouse users see nothing. */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,
textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
html[data-theme="light"] a:focus-visible,
html[data-theme="light"] button:focus-visible,
html[data-theme="light"] input:focus-visible,
html[data-theme="light"] select:focus-visible,
html[data-theme="light"] textarea:focus-visible,
html[data-theme="light"] summary:focus-visible,
html[data-theme="light"] [tabindex]:focus-visible{outline-color:var(--accent-dark,var(--accent2))}

/* ── Interaction states: hover/active/disabled parity for every control ── */
.chip:active,.cbtn-cart:active,.mm-toggle:active,.acct-btn:active,
.bh-all:active,.pp-share-btn:active{transform:translateY(1px)}
.chip:disabled,.cbtn-cart:disabled,.mm-toggle:disabled,.hs-btn:disabled,
.co-btn:disabled,.pp-buy:disabled,.btn:disabled{
  opacity:.55;cursor:not-allowed;transform:none;filter:none}
/* Disabled/busy buttons must stay READABLE — .55 opacity on a gradient
   dropped contrast below 3:1, so disabled buttons get a flat surface. */
.btn:disabled,.btn[disabled],.co-btn:disabled,.hs-btn:disabled,.pp-buy:disabled{
  background:var(--surface2)!important;color:var(--muted)!important;
  border:1px solid var(--edge2)!important;box-shadow:none!important;opacity:1}
.btn:disabled::after{display:none}

/* ── Touch targets ≥44px on every tappable control ── */
.chip,.bh-all,.fsoc,.acct-btn,.menu-btn,.cbtn-cart,.cbtn-buy,.dock-item,
.nl-trigger,nav.links a.nl,nav.links button.nl,.side a,.mm-toggle,.hs-btn,.nl-menu a,
.fb-select,.side .close,.btn.sm,.hero-search input{min-height:44px}
/* NB: do NOT add a `display` to .btn.sm here — it is already flex, and a
   same-specificity display would beat the ≤900px rules that hide
   .nav-actions .acct-btn / .theme-toggle, crowding the navbar on phones. */
.chip,nav.links a.nl,nav.links button.nl,.nl-trigger{display:inline-flex;align-items:center}
.logo{min-height:44px}
/* The theme switch stays visually 62×32 but gets a 44px-tall hit area. */
.theme-toggle{position:relative}
.theme-toggle::after{content:"";position:absolute;left:0;right:0;top:50%;
  height:44px;transform:translateY(-50%)}
/* Footer link columns: comfortable tap rhythm on touch layouts. */
@media(max-width:900px){
  .fcols a:not(.logo):not(.btn){min-height:44px;display:flex;align-items:center}
}
@media(max-width:640px){
  /* compact mobile chips kept tappable */
  .chip{min-height:44px;padding:8px 14px}
}

/* Accent-tinted surfaces eat the contrast margin for accent text — in light
   mode these panels go plain white so --accent-dark hits its full ratio. */
html[data-theme="light"] .cat-toggle,
html[data-theme="light"] .chip,
html[data-theme="light"] .ticker span,
html[data-theme="light"] .hero .eyebrow{background:#ffffff}

/* ── Pills / badges legibility (both themes) ── */
.pill{border:1px solid var(--edge2)}
.pill.warn{background:#2a1c05;color:#fcd34d;border-color:rgba(245,158,11,.5)}
html[data-theme="light"] .pill.warn{background:#fef3c7;color:#92400e;border-color:rgba(146,64,14,.35)}
html[data-theme="light"] .pill{background:#ffffff;color:var(--accent-dark,var(--accent2))}
.new-badge{color:#052e16}

/* ── No horizontal scroll at any breakpoint ── */
html,body{max-width:100%}
/* MUST be `clip`, never `hidden`.
   `overflow-x:hidden` on body makes body a scroll container, which breaks
   `position:sticky` on every descendant — the header stopped sticking to the
   viewport and jammed against the body's scroll box instead ("nav goes up and
   gets stuck" while scrolling on mobile). `clip` prevents the same sideways
   overflow WITHOUT creating a scroll container, so sticky keeps working. */
body{overflow-x:clip}
@supports not (overflow-x:clip){
  /* Ancient engines: accept the sideways guard rather than a broken layout,
     but keep it off body so sticky survives where possible. */
  html{overflow-x:hidden}
}
.wrap,.pp-wrap,.prose{min-width:0}
.grid,.features,.bh-grid,.fcols,.hero-stats,.pp-details,.pp-hero,.car-shell,.car-track{min-width:0}
.grid>*,.features>*,.bh-grid>*,.pp-details>*,.pp-hero>*{min-width:0}
/* Long unbroken strings (order ids, keys, URLs) must not widen the page */
.card h3,.bh-body h3,.pp-title,.prose p,.prose li,.co-track-link{overflow-wrap:anywhere}

/* ── Reduced motion: catch the animations added in v2 ── */
@media(prefers-reduced-motion:reduce){
  /* .pp-media-col::before is the PDP hero aura (pp-aura keyframes, page-local
     CSS in src/store.js) — killed here too so the catch-all below never has
     to be the only thing stopping it. */
  .deliv-note,.pp-stock-dot,.pp-media-col::before{animation:none!important}
  .pp-share-btn:hover,.pp-trust li:hover{transform:none!important}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
}

/* ═══════════════ 21. LIGHT-MODE STATUS COLOURS FOR SIBLING PAGES ═══════════
   /track, /account, /blog and the legal pages ship page-local CSS from
   src/track.js, src/store-account.js, src/blog.js and src/pages.js — modules
   outside this workstream. Their status colours are dark-theme values
   (#fca5a5 / #fbbf24 / #4ade80) that drop under 3:1 on white, so they are
   corrected here rather than by editing those modules. Error/success TEXT
   must never be the least-readable thing on the page. */
html[data-theme="light"] .tk-err,
html[data-theme="light"] .ac-err,
html[data-theme="light"] .tl-name,
html[data-theme="light"] .bad{color:#b91c1c}
html[data-theme="light"] .ac-ok,
html[data-theme="light"] .bot,
html[data-theme="light"] .ok{color:#15803d}
html[data-theme="light"] .warn,
html[data-theme="light"] .admin,
html[data-theme="light"] .ac-processing{color:#92400e}
html[data-theme="light"] .ac-spin{border-top-color:#92400e}
/* Their cards/panels float over bg-fx too — give them a solid ground. */
html[data-theme="light"] .tk-card,html[data-theme="light"] .tk-box,
html[data-theme="light"] .ac-card,html[data-theme="light"] .ac-box,
html[data-theme="light"] .post-card,html[data-theme="light"] .pg-card{
  background:#ffffff;border:1px solid var(--edge2);box-shadow:var(--neu-out)}

/* ═══════════ 22. MOBILE PRODUCT CARD (2-up app layout) ═══════════
   Last in the file on purpose: it has to win over the section-9 card rules,
   the .pill panel/status colours and the legacy compact-mobile block. */
/* ── Mobile: 2-up product grid, app-style compact card ───────────────────── */
@media(max-width:600px){
  .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .card{border-radius:16px}
  .card-body{padding:10px 11px 12px;gap:6px}
  .card h3{font-size:13px;line-height:1.28}
  .card .cat{font-size:9.5px;gap:5px}
  .card .cat .cat-ic svg{width:12px;height:12px}
  .card .desc{display:none}
  /* Price left (₹ big, USDT small underneath), delivery label right — never
     wrapping, so every card in the 2-up grid lines up identically. */
  .card .row{gap:6px;padding-top:2px;flex-wrap:nowrap;align-items:flex-start}
  .price{font-size:16px;flex:1 1 auto}
  .price small{display:block;margin-left:0;font-size:10.5px;white-space:nowrap}
  .card .pill{flex:0 1 auto;white-space:normal;text-align:right;line-height:1.35}
  /* Delivery label reads as plain accent text next to the price — no chip.
     .pill.warn (manual delivery) needs the same specificity to lose its fill. */
  .card .pill,.card .pill.warn,
  html[data-theme="light"] .card .pill,html[data-theme="light"] .card .pill.warn{
       font-size:10px;padding:3px 0;background:none;box-shadow:none;border:0}
  .pill .pill-full{display:none}
  .pill .pill-short{display:inline}
  .pill--cid{display:none}
  .card-btns{margin-top:9px;gap:6px}
  .cbtn-buy{font-size:13px;gap:5px}
  .new-badge{top:7px;left:7px;font-size:9px;padding:3px 7px}
}
/* .grid stays 2-up on every phone width — see the carousel note above. */

/* ═══════════════ 17. RESELLER BAND (homepage, above the footer) ═══════════
   The ONE wholesale surface on the retail site. Nothing about wholesale
   pricing appears on product cards, product pages or checkout — a retail
   buyer must never suspect they are on the wrong price list. */
.resell-band{padding:26px 0 6px}
.rb-card{position:relative;display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);
     gap:26px;align-items:center;overflow:hidden;
     border-radius:26px;padding:34px 34px;
     border:1px solid color-mix(in srgb,var(--accent) 26%,var(--edge2));
     background:linear-gradient(120deg,color-mix(in srgb,var(--accent) 11%,var(--surface)),var(--surface) 58%,var(--bg2));
     box-shadow:0 26px 60px -30px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.05)}
.rb-card::before{content:"";position:absolute;right:-70px;top:-90px;width:280px;height:280px;border-radius:50%;
     background:radial-gradient(circle,color-mix(in srgb,var(--accent) 34%,transparent),transparent 68%);
     pointer-events:none;filter:blur(12px);opacity:.7}
.rb-main{position:relative;min-width:0}
.rb-eyebrow{display:inline-flex;align-items:center;gap:8px;margin-bottom:12px;
     font-family:var(--font-display);font-size:11.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
     color:var(--accent-text,var(--accent))}
.rb-eyebrow svg{width:16px;height:16px;flex:none}
.rb-card h2{font-size:clamp(23px,3.4vw,33px);line-height:1.14;letter-spacing:-.7px;margin:0 0 12px}
.rb-margin{font-size:15.5px;line-height:1.55;color:var(--text);margin:0 0 8px;max-width:56ch}
.rb-margin b{color:var(--accent-text,var(--accent));font-weight:800}
.rb-api{font-size:13.5px;line-height:1.6;color:var(--muted);margin:0 0 20px;max-width:58ch}
/* Three selling points under the margin line: auto-delivery is the headline
   capability resellers care about, so it leads. */
.rb-feats{list-style:none;display:grid;gap:12px;margin:0 0 20px;padding:0;
     grid-template-columns:repeat(auto-fit,minmax(210px,1fr));max-width:70ch}
.rb-feats li{display:grid;grid-template-columns:26px 1fr;gap:3px 10px;align-items:start}
.rb-feats svg{width:18px;height:18px;grid-row:span 2;margin-top:2px;
     color:var(--accent-text,var(--accent))}
.rb-feats b{font-size:13.5px;font-weight:700;color:var(--text)}
.rb-feats span{font-size:12.5px;line-height:1.55;color:var(--muted)}
.rb-actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.rb-cta{white-space:nowrap}
/* Texture, not content: a single copy-shaped curl line. */
.rb-side{position:relative;min-width:0}
.rb-term{border-radius:15px;overflow:hidden;border:1px solid var(--edge2);
     background:color-mix(in srgb,var(--bg2) 92%,#000);box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
html[data-theme="light"] .rb-term{background:#111826;border-color:rgba(15,23,42,.2)}
.rb-dots{display:flex;gap:6px;padding:10px 13px;border-bottom:1px solid rgba(255,255,255,.08)}
.rb-dots i{width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.18)}
.rb-dots i:first-child{background:color-mix(in srgb,var(--accent) 70%,transparent)}
.rb-term code{display:block;padding:14px 15px 16px;overflow-x:auto;white-space:pre;
     font-family:var(--font-mono,ui-monospace,SFMono-Regular,Menlo,monospace);
     font-size:12px;line-height:1.65;color:#c7d2e4}
@media(max-width:900px){
  .rb-card{grid-template-columns:1fr;gap:20px;padding:28px 24px}
}
@media(max-width:640px){
  .resell-band{padding:18px 0 2px}
  .rb-card{padding:22px 17px;border-radius:20px}
  .rb-card h2{font-size:21px}
  .rb-margin{font-size:14px}
  .rb-api{font-size:12.5px;margin-bottom:16px}
  .rb-actions .btn{width:100%;justify-content:center}
  .rb-term code{font-size:11px}
}

/* ═══════════════ 18. COMMUNITY JOIN POPUP (admin-configurable) ════════════
   Opaque --panel card so it is readable in both themes over any page, never
   emitted unless the admin enabled it AND set an invite URL, and it defers
   itself while a checkout / product modal / drawer is open. */
.cjoin{position:fixed;inset:0;z-index:135;display:flex;align-items:center;justify-content:center;padding:18px}
.cjoin[hidden]{display:none!important}
.cjoin-scrim{position:absolute;inset:0;background:rgba(2,4,10,.62);
     -webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}
html[data-theme="light"] .cjoin-scrim{background:rgba(15,23,42,.42)}
.cjoin-card{position:relative;width:100%;max-width:376px;max-height:92dvh;overflow-y:auto;text-align:center;
     padding:26px 24px 20px;border-radius:22px;
     background:var(--panel);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);
     border:1px solid color-mix(in srgb,var(--accent) 24%,var(--panel-edge));
     box-shadow:var(--panel-shadow),0 0 52px -24px color-mix(in srgb,var(--accent) 60%,transparent)}
.cjoin.is-open .cjoin-card{animation:cjoinIn .28s cubic-bezier(.16,1,.3,1) both}
@keyframes cjoinIn{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.cjoin.is-open .cjoin-card{animation:none}}
.cjoin-x{position:absolute;top:10px;right:10px;width:38px;height:38px;display:grid;place-items:center;
     border-radius:11px;border:1px solid var(--edge2);background:var(--surface2,var(--surface));
     color:var(--muted);font-size:15px;line-height:1;cursor:pointer;font-family:inherit;transition:.15s}
.cjoin-x:hover{color:var(--accent);border-color:var(--accent)}
.cjoin-media{margin:2px 0 14px;border-radius:14px;overflow:hidden;border:1px solid var(--edge2)}
.cjoin-media img{display:block;width:100%;max-height:150px;object-fit:cover}
.cjoin-mark{width:56px;height:56px;margin:6px auto 0;border-radius:17px;display:grid;place-items:center;overflow:hidden;
     color:var(--on-accent,var(--btn-text));
     background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 88%,#fff),var(--accent2));
     box-shadow:0 0 24px -6px color-mix(in srgb,var(--accent) 70%,transparent),inset 0 1px 0 rgba(255,255,255,.5)}
.cjoin-mark img{width:100%;height:100%;object-fit:cover}
.cjoin-mark svg{width:26px;height:26px}
.cjoin-tag{display:block;margin-top:12px;font-family:var(--font-display);font-size:10.5px;font-weight:800;
     letter-spacing:.2em;text-transform:uppercase;color:var(--accent-text,var(--accent))}
.cjoin-card h3{font-size:20px;line-height:1.25;letter-spacing:-.4px;margin:8px 0 8px;color:var(--text)}
.cjoin-card p{font-size:13.5px;line-height:1.6;color:var(--muted);margin:0 0 18px}
.cjoin-cta{width:100%;justify-content:center}
.cjoin-never{display:block;width:100%;margin-top:12px;padding:8px;background:none;border:0;cursor:pointer;
     font-family:inherit;font-size:12.5px;font-weight:600;color:var(--faint);text-decoration:underline;
     text-underline-offset:3px}
.cjoin-never:hover{color:var(--text)}
html.cjoin-open{overflow:hidden}
@media(max-width:420px){
  .cjoin{padding:14px}
  .cjoin-card{padding:22px 18px 16px;border-radius:20px}
  .cjoin-card h3{font-size:18px}
}

/* ═══════════════ 22. CART — add-to-cart affordances + drawer ═══════════════
   The cart is a real multi-item basket: a localStorage model (see
   cartScriptJs in src/store.js), an "Add" button alongside every Buy Now,
   and this right-side drawer. Buy Now is untouched — it stays the express
   single-item lane, so these styles only ever ADD a control next to it. */

/* ── Add-to-cart buttons ───────────────────────────────────────────────── */
/* Card variant: compact, secondary weight so Buy Now keeps visual primacy. */
.cbtn-atc{flex:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;
     height:44px;padding:0 12px;border-radius:12px;cursor:pointer;font-family:inherit;
     font-weight:800;font-size:13px;line-height:1;white-space:nowrap;
     color:var(--text);background:var(--surface);border:1px solid var(--edge2);
     transition:border-color .15s,color .15s,background .15s,transform .12s}
.cbtn-atc svg{width:17px;height:17px;flex:none}
.cbtn-atc:hover{border-color:var(--accent);color:var(--accent-text,var(--accent))}
.cbtn-atc:active{transform:scale(.97)}
.cbtn-atc:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:2px}
.cbtn-atc.in-cart{border-color:color-mix(in srgb,var(--accent) 45%,var(--edge2));
     background:color-mix(in srgb,var(--accent) 11%,transparent);color:var(--accent-text,var(--accent))}
.cbtn-atc.is-flash{border-color:color-mix(in srgb,var(--accent) 60%,transparent);
     background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent-text,var(--accent))}
/* A card cannot fit Details + Add + Buy Now on one row at ANY width — the
   card column is ~218px on desktop and ~148px on a 2-up phone grid, so a
   third control squeezes "⚡ Buy Now" into a cramped two-line wrap. The row
   therefore wraps at every width: Details + Add share line one, Buy Now gets
   a full-width line two. Buy Now stays the largest, most obvious target on
   the card — which is the point, it is the proven single-item path. */
.card-btns{flex-wrap:wrap}
.cbtn-atc{flex:1 1 auto;min-width:0}
.cbtn-buy{flex:1 0 100%;order:3;white-space:nowrap}
/* PDP variant: full-size secondary button beside the primary Buy Now. */
.pp-atc{display:inline-flex;align-items:center;justify-content:center;gap:9px;
     min-height:54px;font-size:1.02rem;border-radius:14px;flex:1 1 200px;max-width:260px}
.pp-atc svg{width:19px;height:19px;flex:none}
.pp-atc.in-cart{border-color:color-mix(in srgb,var(--accent) 45%,var(--edge2));
     background:color-mix(in srgb,var(--accent) 11%,transparent);color:var(--accent-text,var(--accent))}
/* Details-modal variant. */
.pd-cta{display:flex;gap:8px;align-items:stretch}
.pd-cta .pd-buy{flex:1}
.pd-atc{flex:none}

/* ── Drawer ────────────────────────────────────────────────────────────── */
.cart-scrim{position:fixed;inset:0;z-index:135;background:rgba(2,4,10,.62);
     opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s}
html[data-theme="light"] .cart-scrim{background:rgba(15,23,42,.42)}
.cart-scrim.show{opacity:1;visibility:visible}

/* Opaque --panel, never glass: the product grid behind must not read through.
   --panel is only 97% alpha and that last 3% is enough for a bright product
   tile to ghost through the drawer, so --panel is composited over a SOLID
   --surface. That is fully opaque everywhere without a backdrop-filter, which
   on a full-height fixed panel would repaint on every scroll frame. */
.cart-panel{position:fixed;top:0;right:0;z-index:136;
     width:min(400px,92vw);height:100%;height:100dvh;
     display:flex;flex-direction:column;
     background:linear-gradient(var(--panel),var(--panel)),var(--surface);
     border-left:1px solid var(--panel-edge);
     border-radius:20px 0 0 20px;box-shadow:var(--panel-shadow);
     transform:translateX(105%);visibility:hidden;
     transition:transform .3s cubic-bezier(.5,0,.2,1),visibility 0s linear .3s}
.cart-panel.open{transform:none;visibility:visible;
     transition:transform .3s cubic-bezier(.5,0,.2,1),visibility 0s linear 0s}
body.cart-lock{overflow:hidden}

.cart-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:10px;
     padding:18px 18px 14px;border-bottom:1px solid var(--panel-edge)}
.cart-head h2{display:flex;align-items:center;gap:10px;margin:0;
     font-family:var(--font-display);font-size:17px;font-weight:800;color:var(--text)}
.cart-head h2 svg{width:20px;height:20px;color:var(--accent-text,var(--accent))}
.cart-count-chip{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 7px;
     border-radius:11px;font-size:11.5px;font-weight:800;font-variant-numeric:tabular-nums;
     color:var(--on-accent,#04120a);background:linear-gradient(135deg,var(--accent),var(--accent2))}
.cart-count-chip[hidden]{display:none}
.cart-close{width:40px;height:40px;flex:none;display:grid;place-items:center;border-radius:11px;
     border:1px solid var(--edge2);background:var(--surface);color:var(--muted);
     font-size:16px;line-height:1;cursor:pointer;transition:.15s}
.cart-close:hover{color:var(--text);border-color:var(--accent)}
.cart-close:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:2px}

.cart-body{flex:1 1 auto;overflow-y:auto;overscroll-behavior:contain;padding:14px 14px 6px;min-height:0}
.cart-lines{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.cart-line{display:grid;grid-template-columns:56px 1fr auto;gap:12px;align-items:start;
     padding:12px;border-radius:14px;background:var(--surface);border:1px solid var(--edge2)}
.cart-thumb{width:56px;height:56px;flex:none;border-radius:11px;object-fit:cover;
     background:var(--surface2);border:1px solid var(--edge)}
.cart-line-main{min-width:0}
.cart-line-name{margin:0 0 3px;font-family:var(--font-display);font-size:13.5px;font-weight:700;
     line-height:1.35;color:var(--text);overflow-wrap:anywhere;
     display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cart-line-unit{margin:0 0 9px;font-size:11.5px;color:var(--muted)}

.cart-qty{display:inline-flex;align-items:center;gap:0;border-radius:10px;overflow:hidden;
     border:1px solid var(--edge2);background:var(--surface2)}
.cart-qty-btn{width:34px;height:34px;flex:none;display:grid;place-items:center;
     border:0;background:none;color:var(--text);font-size:16px;font-weight:700;line-height:1;
     cursor:pointer;font-family:inherit;transition:background .14s,color .14s}
.cart-qty-btn:hover{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent-text,var(--accent))}
.cart-qty-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:-2px}
.cart-qty-in{width:40px;height:34px;flex:none;text-align:center;border:0;
     border-left:1px solid var(--edge);border-right:1px solid var(--edge);
     background:none;color:var(--text);font-family:inherit;font-size:13px;font-weight:800;
     font-variant-numeric:tabular-nums;-moz-appearance:textfield}
.cart-qty-in::-webkit-outer-spin-button,.cart-qty-in::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.cart-qty-in:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:-2px}

.cart-line-end{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;
     gap:10px;height:100%;min-height:56px}
.cart-line-sub{font-family:var(--font-display);font-size:14px;font-weight:800;color:var(--text);
     white-space:nowrap;font-variant-numeric:tabular-nums}
.cart-rm{width:34px;height:34px;flex:none;display:grid;place-items:center;border-radius:10px;
     border:1px solid var(--edge2);background:none;color:var(--faint);cursor:pointer;transition:.15s}
.cart-rm svg{width:16px;height:16px}
.cart-rm:hover{color:var(--danger-text,#b91c1c);border-color:color-mix(in srgb,currentColor 45%,var(--edge2))}
.cart-rm:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:2px}

.cart-empty{padding:44px 20px;text-align:center}
.cart-empty-ic{display:grid;place-items:center;width:64px;height:64px;margin:0 auto 16px;border-radius:50%;
     color:var(--accent-text,var(--accent));
     background:color-mix(in srgb,var(--accent) 12%,transparent);
     border:1px solid color-mix(in srgb,var(--accent) 24%,transparent)}
.cart-empty-ic svg{width:28px;height:28px}
.cart-empty-t{margin:0 0 6px;font-family:var(--font-display);font-size:16px;font-weight:800;color:var(--text)}
.cart-empty-s{margin:0 0 20px;font-size:13px;line-height:1.6;color:var(--muted)}
.cart-empty-cta{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 20px}

.cart-foot{flex:none;padding:14px 16px calc(16px + env(safe-area-inset-bottom,0px));
     border-top:1px solid var(--panel-edge);
     background:linear-gradient(var(--panel),var(--panel)),var(--surface)}
.cart-foot[hidden]{display:none}
.cart-sum{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}
.cart-sum span{font-size:13px;font-weight:600;color:var(--muted)}
.cart-sum strong{font-family:var(--font-display);font-size:22px;font-weight:800;color:var(--text);
     font-variant-numeric:tabular-nums}
.cart-note{margin:0 0 12px;font-size:11.5px;line-height:1.5;color:var(--faint)}
.cart-checkout{width:100%;justify-content:center;min-height:50px;font-size:15px}
.cart-clear{display:block;width:100%;margin-top:9px;padding:9px;border:0;background:none;cursor:pointer;
     font-family:inherit;font-size:12.5px;font-weight:600;color:var(--faint);
     text-decoration:underline;text-underline-offset:3px}
.cart-clear:hover{color:var(--danger-text,#b91c1c)}

@media(max-width:420px){
  .cart-panel{width:100vw;border-radius:0;border-left:0}
  .cart-line{grid-template-columns:48px 1fr auto;gap:10px;padding:10px}
  .cart-thumb{width:48px;height:48px}
}

/* Nothing in the cart or the dock animates under reduced motion. */
@media(prefers-reduced-motion:reduce){
  .cart-panel,.cart-panel.open,.cart-scrim,.cbtn-atc,.cart-close,.cart-rm,.cart-qty-btn{
    transition:none!important;animation:none!important}
  .dock,.dock-item,.dock-ic,.dock-lab,.dock-cart,.dock-cart-ic,.dock-cart-ring,.dock-cart-badge{
    transition:none!important;animation:none!important}
  .dock-item.is-active .dock-ic,.dock-item:active .dock-ic,
  .dock-cart:active .dock-cart-ic{transform:none!important}
}

/* ═══════════════ 23. FOOTER v2 (premium block) ═══════════════
   Logo-only brand mark (site-wide the brand name was removed), one-line
   description, three link columns, trust pills, socials, bottom bar. The
   "Shop Now" button is deliberately gone. */
.fcard::after{content:"";position:absolute;left:0;right:0;top:0;height:1px;pointer-events:none;
     background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 55%,transparent) 22%,
                color-mix(in srgb,var(--accent) 55%,transparent) 78%,transparent);
     opacity:.6}
.fcols{grid-template-columns:1.7fr 1fr 1fr 1fr;gap:32px 26px;align-items:start}
.fbrand{display:flex;flex-direction:column;align-items:flex-start;gap:0}
.fbrand .logo.fbrand-logo{display:inline-flex;align-items:center;margin-bottom:14px}
.fbrand p.fbrand-desc{color:var(--muted);font-size:13.5px;line-height:1.65;max-width:320px;margin:0}
.fsupport{display:inline-flex;align-items:center;gap:8px;margin-top:16px;padding:9px 15px;
     border-radius:11px;border:1px solid var(--edge2);background:var(--surface);
     color:var(--muted);font-weight:700;font-size:13px;min-height:44px;
     transition:color .15s,border-color .15s,transform .12s}
.fsupport svg{width:16px;height:16px;flex:none}
.fsupport:hover{color:var(--accent-text,var(--accent));border-color:var(--accent);transform:translateY(-1px)}
.fcol{display:flex;flex-direction:column;min-width:0}
.fcols h4{font-family:var(--font-display);font-size:11.5px;font-weight:800;text-transform:uppercase;
     letter-spacing:.9px;color:var(--faint);margin:0 0 14px}
.fcols .fcol a{display:block;color:var(--muted);font-size:13.5px;line-height:1.45;
     padding:6px 0;margin:0;border-radius:6px;
     transition:color .14s,transform .14s;overflow-wrap:anywhere}
.fcard .fcols .fcol a:hover{color:var(--accent-text,var(--accent));transform:translateX(2px)}
.fcols .fcol a:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:2px}
.ftrust{margin-top:34px;padding-top:22px;border-top:1px solid var(--edge)}
.fpay{padding:7px 12px;border-radius:999px;border:1px solid var(--edge2);background:var(--surface)}
.copyright{margin-top:24px;padding-top:18px}
@media(prefers-reduced-motion:reduce){
  .fcols .fcol a,.fsupport,.fsoc{transition:none!important;transform:none!important}
}
@media(max-width:900px){
  .fcols{grid-template-columns:1fr 1fr 1fr;gap:26px 20px}
  .fbrand{grid-column:1 / -1}
}
@media(max-width:640px){
  .fcols{grid-template-columns:1fr 1fr;gap:24px 18px}
  .fbrand{grid-column:1 / -1;align-items:center;text-align:center;
       padding-bottom:20px;border-bottom:1px solid var(--edge)}
  .fbrand .logo.fbrand-logo{justify-content:center}
  .fbrand p.fbrand-desc{max-width:none;font-size:13px}
  .fcols .fcol a{font-size:13px}
}
@media(max-width:419px){
  .fcols{grid-template-columns:1fr;gap:22px}
  .fcol{padding-bottom:4px}
}
