/* TIMORA STOREFRONT CSS — VERSION 19 */
/* ==========================================================================
   TIMORA WATCHES — Storefront stylesheet  (v3, fully responsive)
   Single file, no framework. Light + dark theme via [data-theme] on <html>.

   Type   : Jost (display / logo) + Inter (UI + body)
   Brand  : #001E3F deep navy  ·  #2F6191 mid blue  ·  pure white
            --brand      decorative fills, buttons, rules
            --brand-ink  TEXT on light backgrounds (contrast-checked)
            --brand-grad the purple gradient used on media panels
   Stars  : #F5B301 (standard golden)

   RESPONSIVE MODEL
   ----------------
   Fluid first: containers, type and spacing scale with clamp(); grids use
   auto-fit/auto-fill so they reflow without a breakpoint. Breakpoints then
   handle structural changes only:
     1280  wide desktop cap
     1180  showcase tightens
     1080  sidebars narrow, footer 2-up
      940  nav → drawer, all 2-col layouts stack
      820  showcase / product detail single column tuning
      720  tablet-portrait → 2-up product cards
      560  small phones
      420  narrow phones
      360  very narrow phones
   ========================================================================== */

/* ---------- Design tokens ------------------------------------------------ */
:root {
  --brand: #001e3f;          /* deep navy — primary */
  --brand-deep: #00142b;     /* hover / pressed */
  --brand-soft: #2f6191;     /* mid navy-blue — secondary */
  --brand-ink: #001e3f;      /* text-safe on white */
  --brand-tint: #eaf1f8;     /* navy wash */
  --brand-tint-2: #d2e1f0;
  /* kept for decorative panels only — buttons are solid */
  --brand-grad: linear-gradient(140deg, #2f6191 0%, #10406c 45%, #001e3f 100%);
  --brand-grad-soft: linear-gradient(150deg, #eaf1f8 0%, #cddef0 100%);
  --on-brand: #ffffff;       /* text that sits ON a brand surface */
  --star: #f5b301;           /* golden — standard review star */
  --star-empty: #d5dee7;

  --bg: #ffffff;
  --bg-alt: #f7f5fc;
  --bg-elev: #ffffff;
  --surface: #ffffff;
  --border: #e8e4f2;
  --border-strong: #d3cbe6;

  --text: #1b1430;
  --text-soft: #524a68;
  --text-mute: #857ea0;
  --heading: #150f28;

  --footer-bg: #000000;
  --footer-text: rgba(255,255,255,.80);
  --footer-head: #ffffff;
  --footer-line: rgba(255,255,255,.14);

  --success: #16794f;
  --success-bg: #e7f5ef;
  --danger: #c0392b;
  --danger-bg: #fdeceb;
  --warn: #9a6100;
  --warn-bg: #fff4e2;

  --radius: 18px;
  --radius-sm: 10px;
  --radius-lg: 24px;
  --shadow-sm: 0 2px 6px rgba(0,20,45,.07), 0 1px 3px rgba(0,20,45,.06);
  --shadow: 0 10px 26px rgba(0,20,45,.12), 0 3px 8px rgba(0,20,45,.07);
  --shadow-lg: 0 30px 64px rgba(0,20,45,.26), 0 10px 22px rgba(0,20,45,.14);
  --shadow-xl: 0 40px 90px rgba(0,20,45,.32), 0 14px 30px rgba(0,20,45,.18);
  --shadow-brand: 0 12px 28px rgba(0,30,63,.34);

  --container: 1280px;
  --gutter: clamp(14px, 3.6vw, 24px);
  --header-h: 74px;
  --font-display: "Jost", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --ease: cubic-bezier(.4,0,.2,1);
}

[data-theme="dark"] {
  --brand: #7fb0dd;          /* light navy-blue leads in dark */
  --brand-deep: #9cc6ea;
  --brand-soft: #2f6191;
  --brand-ink: #9cc6ea;
  --brand-tint: #10243a;
  --brand-tint-2: #17324f;
  --brand-grad: linear-gradient(140deg, #7fb0dd 0%, #2f6191 55%, #001e3f 100%);
  --brand-grad-soft: linear-gradient(150deg, #10243a 0%, #1a3550 100%);
  --on-brand: #001424;
  --star: #f5b301;
  --star-empty: #33465a;

  --bg: #0a1420;
  --bg-alt: #0f1c2c;
  --bg-elev: #142434;
  --surface: #11202f;
  --border: #1f3346;
  --border-strong: #2c4459;

  --text: #e6edf5;
  --text-soft: #9fb0c2;
  --text-mute: #74889b;
  --heading: #ffffff;

  --footer-bg: #000000;
  --footer-text: rgba(255,255,255,.76);
  --footer-head: #ffffff;
  --footer-line: rgba(255,255,255,.12);

  --success: #4ade80;
  --success-bg: #12251c;
  --danger: #f87171;
  --danger-bg: #2a1717;
  --warn: #fbbf24;
  --warn-bg: #2a2113;

  --shadow-sm: 0 1px 2px rgba(0,0,0,.5);
  --shadow: 0 8px 22px rgba(0,0,0,.55);
  --shadow-lg: 0 28px 60px rgba(0,0,0,.70);
  --shadow-xl: 0 40px 90px rgba(0,0,0,.78);
  --shadow-brand: 0 12px 28px rgba(127,176,221,.26);
}

/* ---------- Reset -------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--text);
  font-size: 15px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
  min-height: 100vh;
}
img, video { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; color: inherit; max-width: 100%; }
button { cursor: pointer; background: none; border: 0; }
ul, ol { list-style: none; padding: 0; }
h1, h2, h3, h4 {
  font-family: var(--font-display);
  color: var(--heading);
  line-height: 1.18;
  font-weight: 600;
  letter-spacing: -.005em;
  overflow-wrap: break-word;
}
p, li, span, b { overflow-wrap: break-word; }
:focus-visible { outline: 2px solid var(--brand-soft); outline-offset: 2px; border-radius: 4px; }
::selection { background: var(--brand); color: #fff; }

/* ---------- Layout ------------------------------------------------------- */
.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--gutter); }
.section { padding: clamp(40px, 6vw, 68px) 0; }
.section-sm { padding: clamp(24px, 3.6vw, 38px) 0; }
.section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: clamp(20px, 3vw, 32px); flex-wrap: wrap; }
.section-head h2 { font-size: clamp(23px, 3.3vw, 37px); }
.section-head p { color: var(--text-soft); font-size: clamp(13px, 1.4vw, 14px); margin-top: 6px; }
.eyebrow {
  font-family: var(--font-body); font-size: 11px; letter-spacing: .2em;
  text-transform: uppercase; color: var(--brand-ink); font-weight: 700; margin-bottom: 9px;
}
.center { text-align: center; }
.grid { display: grid; gap: 20px; }

/* ---------- Buttons ------------------------------------------------------ */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 600;
  letter-spacing: .015em; border: 1px solid transparent; transition: all .18s var(--ease);
  white-space: nowrap; line-height: 1.2; text-align: center; min-height: 42px;
}
.btn:active { transform: translateY(1px); }
.btn-primary { background: var(--brand); color: var(--on-brand); }
.btn-primary:hover { background: var(--brand-deep); box-shadow: var(--shadow-brand); }
.btn-accent { background: var(--brand); color: var(--on-brand); font-weight: 700; }

.btn-accent:hover { background: var(--brand-deep); box-shadow: var(--shadow-brand); }
.btn-outline { border-color: var(--border-strong); color: var(--text); background: var(--surface); }
.btn-outline:hover { border-color: var(--brand); color: var(--brand-ink); background: var(--brand-tint); }
.btn-ghost { color: var(--text-soft); padding-inline: 12px; }
.btn-ghost:hover { color: var(--brand-ink); }
.btn-block { width: 100%; }
.btn-lg { padding: 15px 30px; font-size: 14.5px; min-height: 50px; }
.btn-sm { padding: 9px 16px; font-size: 13px; min-height: 38px; }
.btn:disabled, .btn.is-disabled { opacity: .5; pointer-events: none; }


/* ---------- Dark-theme button hardening ----------------------------------
   Some mobile browsers paint a default (white) background or a light 1px
   seam on <button>/<a class="btn"> elements. Pin the background explicitly
   for every button variant and remove tap highlights so no pale bar can show
   up beside a button in dark mode.                                        */
.btn, button, input, select, textarea { -webkit-tap-highlight-color: transparent; }
/* Only flatten inputs that we style ourselves. Checkboxes and radios MUST keep
   their native appearance or the tick/dot disappears entirely. */
.btn, button, input:not([type="checkbox"]):not([type="radio"]), select, textarea {
  -webkit-appearance: none; appearance: none;
}
input[type="checkbox"], input[type="radio"] {
  -webkit-appearance: auto; appearance: auto;
  accent-color: var(--brand);
  width: 17px; height: 17px; flex: none; margin: 0; cursor: pointer;
}
.btn { background-color: transparent; background-clip: padding-box; }
.btn-primary { background-color: var(--brand); }
.btn-accent  { background-color: var(--brand); }
.btn-outline { background-color: var(--surface); }
.btn-ghost   { background-color: transparent; }
.newsletter .btn-accent { background-color: #fff; }
.hero .btn-outline { background-color: rgba(255,255,255,.06); }
/* the card itself: use an inset ring instead of a real border, so fractional
   card widths can never leave a light hairline on the edge */
.product-card { border: 0; box-shadow: var(--shadow-sm), inset 0 0 0 1px var(--border); }
.product-card:hover { box-shadow: var(--shadow-lg), inset 0 0 0 1px var(--border); }
.pc-foot .btn, .pc-foot .btn:hover { background-clip: padding-box; }

/* ---------- Announcement bar -------------------------------------------- */
.announce {
  background: var(--brand); color: #fff; font-size: clamp(11.5px, 2.5vw, 12.5px);
  text-align: center; padding: 9px var(--gutter); letter-spacing: .03em; line-height: 1.45;
}
[data-theme="dark"] .announce { background: var(--brand-grad); color: #fff; font-weight: 600; }

/* ---------- Header ------------------------------------------------------- */
.header { position: sticky; top: 0; z-index: 200; background: var(--bg); border-bottom: 1px solid var(--border); transition: box-shadow .2s var(--ease); }
.header.is-stuck { box-shadow: var(--shadow); }
.header-inner { display: flex; align-items: center; gap: clamp(10px, 1.6vw, 18px); height: var(--header-h); }
.logo { display: flex; flex-direction: column; line-height: 1; margin-right: auto; min-width: 0; }
.logo-text b { font-family: var(--font-display); font-size: clamp(12.5px, 1.5vw, 16px); font-weight: 500; letter-spacing: .2em; color: var(--heading); text-transform: uppercase; white-space: nowrap; }
.logo-text > span { font-family: var(--font-body); font-size: clamp(6px, .8vw, 7px); letter-spacing: .3em; text-transform: uppercase; color: var(--brand-ink); margin-top: 5px; font-weight: 600; white-space: nowrap; }


/* Logo mark + wordmark sit side by side. The image only appears once a logo
   is uploaded from the dashboard; the text is always there and stays editable. */
.logo { flex-direction: row; align-items: center; gap: 10px; }
.logo-text { display: flex; flex-direction: column; line-height: 1; min-width: 0; }
.logo-img { height: 52px; width: auto; max-width: 110px; object-fit: contain; flex: none; display: block; }
.footer .logo-img { height: 46px; max-width: 100px; }
[data-theme="dark"] .logo-img { filter: brightness(1.06); }
@media (max-width: 720px) { .logo-img { height: 40px; max-width: 78px; } .logo { gap: 8px; } }
@media (max-width: 420px) { .logo-img { height: 34px; max-width: 62px; } .logo { gap: 6px; } }
@media (max-width: 360px) { .logo-img { height: 30px; max-width: 52px; } }

.nav { display: flex; align-items: center; gap: clamp(14px, 2vw, 26px); }
.nav a { font-size: clamp(13px, 1.2vw, 14px); font-weight: 500; color: var(--text-soft); position: relative; padding: 6px 0; white-space: nowrap; }
.nav a::after { content: ""; position: absolute; left: 0; bottom: 0; height: 2px; width: 0; background: var(--brand); transition: width .22s var(--ease); }
.nav a:hover, .nav a.active { color: var(--text); }
.nav a:hover::after, .nav a.active::after { width: 100%; }

.header-actions { display: flex; align-items: center; gap: 4px; margin-left: 8px; flex: none; }
.icon-btn { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 50%; color: var(--text-soft); position: relative; transition: all .18s var(--ease); flex: none; }
.icon-btn:hover { background: var(--brand-tint); color: var(--brand-ink); }
.icon-btn svg { width: 20px; height: 20px; }
.cart-badge { position: absolute; top: 3px; right: 2px; min-width: 18px; height: 18px; padding: 0 5px; background: var(--brand); color: var(--on-brand); border-radius: 9px; font-size: 10.5px; font-weight: 800; display: grid; place-items: center; line-height: 1; }
.burger { display: none; }

/* search */
.search-wrap { position: relative; flex: 1 1 180px; max-width: 320px; min-width: 0; }
.search-wrap input { width: 100%; padding: 10px 14px 10px 38px; border: 1px solid var(--border); border-radius: 999px; background: var(--bg-alt); font-size: 13.5px; }
.search-wrap input:focus { outline: none; border-color: var(--brand-soft); background: var(--bg); }
.search-wrap svg { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; color: var(--text-mute); }
.search-results { position: absolute; top: calc(100% + 8px); left: 0; right: 0; background: var(--bg-elev); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow-lg); max-height: 380px; overflow-y: auto; display: none; z-index: 300; }
.search-results.open { display: block; }
.search-results a { display: flex; gap: 11px; padding: 10px 12px; align-items: center; border-bottom: 1px solid var(--border); }
.search-results a:last-child { border-bottom: 0; }
.search-results a:hover { background: var(--brand-tint); }
.search-results img { width: 44px; height: 44px; object-fit: cover; border-radius: 8px; flex: none; }
.search-results .sr-name { font-size: 13px; font-weight: 600; }
.search-results .sr-price { font-size: 12px; color: var(--brand-ink); font-weight: 700; }
.search-empty { padding: 16px; text-align: center; color: var(--text-mute); font-size: 13px; }

/* mobile drawer */
.mobile-nav { position: fixed; inset: 0 0 0 auto; width: min(330px, 86vw); background: var(--bg); border-left: 1px solid var(--border); transform: translateX(100%); transition: transform .28s var(--ease); z-index: 400; padding: 22px 20px calc(22px + env(safe-area-inset-bottom)); overflow-y: auto; -webkit-overflow-scrolling: touch; display: flex; flex-direction: column; gap: 2px; }
.mobile-nav.open { transform: translateX(0); }
.mobile-nav a { padding: 14px 4px; border-bottom: 1px solid var(--border); font-size: 15px; font-weight: 500; }
.mobile-nav .mn-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
.overlay { position: fixed; inset: 0; background: rgba(10,6,22,.6); opacity: 0; pointer-events: none; transition: opacity .25s; z-index: 350; }
.overlay.open { opacity: 1; pointer-events: auto; }
body.no-scroll { overflow: hidden; }

/* ---------- Hero --------------------------------------------------------- */
.hero {
  position: relative; min-height: clamp(360px, 60vh, 600px);
  display: grid; align-items: center; overflow: hidden; background: #000;
}
.hero-bg { position: absolute; inset: 0; background: #000; }
.hero-bg img { width: 100%; height: 100%; object-fit: cover; opacity: .92; }
/* Black wash — dark on the copy side, clearing toward the product. */
.hero-bg::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(95deg, rgba(0,0,0,.94) 0%, rgba(0,0,0,.80) 38%, rgba(0,0,0,.46) 68%, rgba(0,0,0,.22) 100%);
}
.hero-content { position: relative; z-index: 2; max-width: 640px; padding-block: clamp(46px, 7vw, 72px); color: #fff; }
.hero-content .eyebrow { color: #bdd6ec; }
.hero-content h1 { font-size: clamp(28px, 5.6vw, 58px); color: #fff; margin-bottom: 16px; font-weight: 600; letter-spacing: -.015em; }
.hero-content p { font-size: clamp(13.5px, 1.8vw, 17px); color: rgba(255,255,255,.88); margin-bottom: 28px; max-width: 500px; }
.hero-actions { display: flex; gap: 12px; flex-wrap: wrap; }
.hero-actions .btn { white-space: nowrap; }
.hero .btn-outline { background: rgba(255,255,255,.06); color: #fff; border-color: rgba(255,255,255,.5); }
.hero .btn-outline:hover { background: #fff; color: var(--brand); border-color: #fff; }

/* ==========================================================================
   MARQUEE ENGINE (trust strip + review rail)
   Two identical halves each animate 0 → -100%, so the loop is seamless at
   any item count or width.
   ========================================================================== */
.marquee { display: flex; overflow: hidden; }
.marquee-half { display: flex; flex: 0 0 auto; align-items: stretch; animation: marqueeSlide var(--mq-duration, 30s) linear infinite; will-change: transform; }
/* Once JS takes over the rail it positions the halves itself, so the keyframe
   animation is switched off to avoid two things moving the same element. */
.marquee.js-marquee .marquee-half { animation: none; }
@keyframes marqueeSlide { from { transform: translateX(0); } to { transform: translateX(-100%); } }
.marquee:not(.js-marquee):hover .marquee-half { animation-play-state: paused; }
@media (prefers-reduced-motion: reduce) {
  .marquee { overflow-x: auto; }
  .marquee-half { animation: none; }
  .marquee-half + .marquee-half { display: none; }
}

/* ---------- Trust strip -------------------------------------------------- */
.trust { border-bottom: 1px solid var(--border); background: var(--bg-alt); overflow: hidden; }
.trust-marquee .marquee-half { gap: 44px; padding: 13px 44px 13px 0; }
.trust-item { display: flex; gap: 10px; align-items: center; flex: 0 0 auto; }
.trust-item svg { width: 22px; height: 22px; color: var(--brand-ink); flex: none; }
.trust-item b { display: block; font-size: 13px; font-weight: 700; color: var(--heading); white-space: nowrap; }
.trust-item span { display: none; }
@media (min-width: 941px) {
  .trust-marquee { display: block; }
  .trust-marquee .marquee-half { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; padding: 13px 0; animation: none; }
  .trust-marquee .marquee-half:nth-child(2) { display: none; }
}

/* ==========================================================================
   SHOP BY CATEGORY — editorial tiles with a frosted label bar
   Flex + justify-content:center so an incomplete last row is CENTRED instead
   of leaving dead white space on the right.
   ========================================================================== */
.cat-grid {
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: clamp(12px, 1.6vw, 18px);
}
.cat-card {
  flex: 1 1 200px; max-width: 244px; min-width: 0;
  position: relative; display: block; aspect-ratio: 4/5; overflow: hidden;
  border-radius: 20px; background: var(--brand-grad-soft); box-shadow: var(--shadow-sm);
  transition: transform .35s var(--ease), box-shadow .35s var(--ease);
}
.cat-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }
.cat-card img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.cat-card:hover img { transform: scale(1.09); }
.cat-card::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(12,6,26,.76) 0%, rgba(12,6,26,.2) 42%, rgba(12,6,26,0) 70%);
  transition: opacity .35s var(--ease);
}
/* editorial index numeral */
.cat-index {
  position: absolute; top: 13px; left: 15px; z-index: 3;
  font-family: var(--font-display); font-size: 12.5px; font-weight: 500; letter-spacing: .16em;
  color: rgba(255,255,255,.85); text-shadow: 0 1px 6px rgba(0,0,0,.55);
}
/* frosted glass label bar */
.cat-bar {
  position: absolute; left: 10px; right: 10px; bottom: 10px; z-index: 3;
  display: flex; align-items: center; gap: 9px; padding: 11px 11px 11px 13px;
  border-radius: 14px; background: rgba(255,255,255,.93);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  box-shadow: 0 6px 18px rgba(0,20,45,.22);
  transition: background .3s var(--ease), transform .3s var(--ease);
}
[data-theme="dark"] .cat-bar { background: rgba(27,21,49,.93); }
.cat-card:hover .cat-bar { transform: translateY(-2px); }
.cat-bar-txt { min-width: 0; flex: 1; }
.cat-bar h3 { font-size: 14.5px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cat-bar span { font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-mute); font-weight: 600; }
.cat-go {
  width: 30px; height: 30px; border-radius: 50%; flex: none; display: grid; place-items: center;
  background: var(--brand-tint); color: var(--brand-ink); font-size: 14px; font-weight: 700;
  transition: all .3s var(--ease);
}
.cat-card:hover .cat-go { background: var(--brand); color: var(--on-brand); transform: translateX(3px); }

/* ==========================================================================
   PRODUCT CARD — media panel + clean info panel
   Title → rating → price → Add to cart. No chips, no description: the card
   stays short so a full row fits on screen at every width.
   The whole card is one click target (.pc-link is a stretched anchor); the
   Add to Cart button sits above it, so no nested-interactive HTML.
   ========================================================================== */
.product-grid {
  display: grid; gap: clamp(12px, 1.8vw, 24px);
  grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
}
.product-card {
  position: relative; background: var(--surface); border-radius: var(--radius);
  overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--shadow-sm);
  border: 1px solid var(--border);
  transition: transform .28s var(--ease), box-shadow .28s var(--ease);
}
.product-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }
.pc-link { position: absolute; inset: 0; z-index: 1; }
.pc-media { position: relative; aspect-ratio: 1/1; overflow: hidden; background: var(--brand-grad-soft); }
.pc-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.product-card:hover .pc-media img { transform: scale(1.05); }
.product-card.is-out .pc-media img { filter: grayscale(.7) opacity(.6); }
.badge {
  position: absolute; top: 10px; left: 10px; z-index: 3; max-width: calc(100% - 56px);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  padding: 5px 10px; border-radius: 8px; color: #fff; line-height: 1.3;
  background: rgba(0,0,0,.78); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
}
.pc-share {
  position: absolute; top: 10px; right: 10px; z-index: 3;
  width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center;
  background: rgba(255,255,255,.94); color: var(--brand); box-shadow: 0 3px 10px rgba(12,6,26,.2);
  transition: all .22s var(--ease);
}
[data-theme="dark"] .pc-share { background: rgba(27,21,49,.94); color: var(--brand-ink); }
.pc-share svg { width: 15px; height: 15px; }
.product-card:hover .pc-share { background: var(--brand); color: var(--on-brand); }
/* brief confirmation tick after the link is copied */
.pc-share.copied, .sc-icon.copied { background: var(--success); color: #fff; }
.pc-share.copied svg, .sc-icon.copied svg { display: none; }
.pc-share.copied::after, .sc-icon.copied::after { content: "\2713"; font-size: 15px; font-weight: 800; line-height: 1; }


/* Stock warnings live ON the image so every card keeps the same height. */
.badge-out { background: rgba(0,0,0,.82); }
.badge-low { background: rgba(154,97,0,.94); }
[data-theme="dark"] .badge-low { background: rgba(251,191,36,.95); color: #201400; }

.pc-body { padding: 13px 14px 0; display: flex; flex-direction: column; gap: 6px; flex: 1; }
.pc-title {
  font-family: var(--font-display); font-size: 15.5px; font-weight: 600; line-height: 1.32; color: var(--heading);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.pc-rating { display: flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--text-mute); }
.stars { display: inline-flex; gap: 1px; }
.star { color: var(--star-empty); font-size: 13px; line-height: 1; }
.star.full, .star.half { color: var(--star); }
.pc-left { font-size: 11.5px; font-weight: 700; color: var(--warn); }

.pc-foot { position: relative; z-index: 2; display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; padding: 12px 14px 14px; margin-top: auto; }
.pc-price-label { display: block; font-size: 9.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--text-mute); font-weight: 700; margin-bottom: 3px; }
.pc-price { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.price-now { font-size: 18px; font-weight: 800; color: var(--heading); letter-spacing: -.02em; }
.price-old { font-size: 12.5px; color: var(--text-mute); text-decoration: line-through; }
.price-off { font-size: 10.5px; font-weight: 700; color: var(--brand-ink); background: var(--brand-tint); padding: 3px 7px; border-radius: 5px; }

/* ==========================================================================
   PRODUCT SHOWCASE — split panel, compact
   Sized so the whole card fits inside a normal laptop viewport: the media
   panel is capped, the photo is square-ish, and the negative pull is small.
   Shadow is deliberately heavy so the card reads as elevated.
   ========================================================================== */
.showcase { padding: clamp(30px, 4vw, 46px) 0; }
.showcase-card {
  position: relative; display: grid; grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr);
  gap: clamp(24px, 3.4vw, 44px); align-items: center;
  background: var(--surface); border-radius: var(--radius-lg);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-xl); padding: clamp(24px, 3vw, 36px) clamp(22px, 3.4vw, 40px);
}
/* The media is a self-contained card (photo + thumb strip) pulled slightly
   up and out of the main card so it overlaps the corner. */
.sc-media {
  position: relative; background: var(--surface); border-radius: 20px;
  padding: 8px; box-shadow: var(--shadow-lg);
  margin: 0 auto; max-width: 360px; width: 100%; justify-self: center;
}
.showcase-card.reverse { grid-template-columns: minmax(0, 1.18fr) minmax(0, .82fr); }
.showcase-card.reverse .sc-media { order: 2; }
.showcase-card.reverse .sc-info { order: 1; }
/* The media panel used to be pulled outside the card edge, which made the
   left and right margins uneven. It now sits fully inside its own column,
   centred, with matching space on both sides at every width. */

.sc-photo {
  position: relative; border-radius: 15px; overflow: hidden; aspect-ratio: 1/1;
  background: var(--brand-grad);
}
.sc-photo img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.showcase-card:hover .sc-photo img { transform: scale(1.04); }
.sc-icon {
  position: absolute; top: 12px; width: 32px; height: 32px; border-radius: 50%; z-index: 3;
  display: grid; place-items: center; color: #fff; background: rgba(255,255,255,.22);
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); transition: all .2s var(--ease);
}
.sc-icon:hover { background: #fff; color: var(--brand); }
.sc-icon svg { width: 15px; height: 15px; }
.sc-share { left: 12px; }
.sc-fav { right: 12px; }

.sc-thumbs { display: flex; gap: 8px; margin-top: 8px; }
.sc-thumb { flex: 1 1 0; aspect-ratio: 1; border-radius: 10px; overflow: hidden; border: 2px solid var(--border); background: var(--bg-alt); transition: border-color .2s var(--ease); }
.sc-thumb.active, .sc-thumb:hover { border-color: var(--brand-soft); }
.sc-thumb img { width: 100%; height: 100%; object-fit: cover; }

.sc-info { min-width: 0; }
.sc-info h2 { font-size: clamp(21px, 2.5vw, 30px); margin-bottom: 4px; }
.sc-sku { font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--text-mute); font-weight: 600; }
.sc-price { display: flex; align-items: baseline; gap: 9px; margin: 16px 0 4px; flex-wrap: wrap; }
.sc-price .cur { font-size: 14px; font-weight: 700; color: var(--brand-ink); }
.sc-price .amt { font-family: var(--font-display); font-size: clamp(30px, 3.6vw, 42px); font-weight: 500; color: var(--brand); line-height: 1; letter-spacing: -.02em; }
[data-theme="dark"] .sc-price .amt { color: var(--brand-ink); }
.sc-price .was { font-size: 14px; color: var(--text-mute); text-decoration: line-through; }
.sc-save { font-size: 11px; font-weight: 700; color: var(--brand-ink); background: var(--brand-tint); padding: 4px 9px; border-radius: 6px; }

.sc-block { margin-top: 16px; }
.sc-block h4 { font-family: var(--font-body); font-size: 10.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--text-mute); font-weight: 700; margin-bottom: 9px; }
.sc-swatches { display: flex; gap: 9px; flex-wrap: wrap; }
.sc-swatch { width: 40px; height: 40px; border-radius: 10px; overflow: hidden; border: 2px solid var(--border); background: var(--bg-alt); transition: all .2s var(--ease); flex: none; }
.sc-swatch.active { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-tint); }
.sc-swatch:hover { border-color: var(--brand-soft); }
.sc-swatch img { width: 100%; height: 100%; object-fit: cover; }
.sc-benefits li { position: relative; padding-left: 20px; font-size: 13px; color: var(--text-soft); margin-bottom: 6px; }
.sc-benefits li::before { content: ""; position: absolute; left: 0; top: 8px; width: 7px; height: 7px; border-radius: 50%; background: var(--brand-soft); }
.sc-actions { display: flex; gap: 10px; margin-top: 20px; flex-wrap: wrap; }
.sc-actions .btn { min-width: 156px; flex: 1 1 auto; }
.sc-note {
  color: var(--text-mute); margin-top: 12px;
  /* one line at every width — the type shrinks rather than wrapping */
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  font-size: clamp(8.5px, 2.75vw, 12px); letter-spacing: -.01em;
}
@media (min-width: 941px) { .sc-note { font-size: 12px; } }

/* ---------- Promo banners ------------------------------------------------ */
.promo-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: clamp(14px, 1.8vw, 20px); }
.promo { position: relative; border-radius: var(--radius-lg); overflow: hidden; min-height: clamp(200px, 26vw, 260px); display: flex; align-items: center; box-shadow: var(--shadow-sm); }
.promo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.promo::after { content: ""; position: absolute; inset: 0; background: linear-gradient(100deg, rgba(0,0,0,.88), rgba(0,30,63,.55)); }
.promo-body { position: relative; z-index: 2; padding: clamp(22px, 3vw, 32px) clamp(20px, 2.6vw, 30px); color: #fff; max-width: 340px; }
.promo-body h3 { color: #fff; font-size: clamp(21px, 2.6vw, 27px); margin-bottom: 9px; }
.promo-body p { font-size: 13.5px; color: rgba(255,255,255,.85); margin-bottom: 18px; }

/* ---------- Reviews ------------------------------------------------------ */
.review-marquee .marquee-half { gap: 18px; padding-right: 18px; }
.review-card { flex: 0 0 300px; width: 300px; height: 428px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column; }
.review-media { height: 188px; flex: none; background: var(--bg-alt); overflow: hidden; }
.review-media img, .review-media video { width: 100%; height: 100%; object-fit: cover; }
.review-quote { height: 188px; flex: none; display: grid; place-items: center; position: relative; background: var(--brand-grad-soft); border-bottom: 1px solid var(--border); }
.review-quote::before { content: "\201C"; font-family: var(--font-display); font-size: 130px; line-height: .8; color: var(--brand-soft); opacity: .45; margin-top: 34px; }
.review-quote .rq-badge { position: absolute; bottom: 14px; left: 50%; transform: translateX(-50%); font-size: 10.5px; letter-spacing: .16em; text-transform: uppercase; font-weight: 700; color: var(--brand-ink); white-space: nowrap; }
.review-body { padding: 15px 16px 16px; display: flex; flex-direction: column; gap: 7px; flex: 1; min-height: 0; }
.review-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.review-body .r-title { font-size: 13.5px; font-weight: 700; color: var(--heading); }
.review-body p { font-size: 13px; color: var(--text-soft); line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.review-meta { display: flex; align-items: center; gap: 10px; margin-top: auto; padding-top: 8px; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: var(--brand); color: #fff; display: grid; place-items: center; font-weight: 800; font-size: 13px; flex: none; }
.review-meta b { font-size: 13px; display: block; }
.review-meta span { font-size: 11.5px; color: var(--text-mute); display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px; }
.verified { font-size: 10.5px; color: var(--success); font-weight: 700; display: inline-flex; align-items: center; gap: 3px; }
.review-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: clamp(14px, 1.8vw, 20px); }
.review-grid .review-card { flex: initial; width: auto; }

/* ---------- Product detail ---------------------------------------------- */
.pd-wrap { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(24px, 3.4vw, 44px); }
.pd-gallery { position: sticky; top: calc(var(--header-h) + 18px); align-self: start; min-width: 0; }
.pd-main { border-radius: var(--radius); overflow: hidden; background: var(--brand-grad-soft); aspect-ratio: 1/1; box-shadow: var(--shadow); }
.pd-main img { width: 100%; height: 100%; object-fit: cover; }
.pd-thumbs { display: flex; gap: 10px; margin-top: 12px; overflow-x: auto; padding-bottom: 4px; -webkit-overflow-scrolling: touch; }
.pd-thumb { flex: 0 0 68px; height: 68px; border-radius: 12px; overflow: hidden; border: 2px solid transparent; background: var(--bg-alt); transition: border-color .18s; }
.pd-thumb.active { border-color: var(--brand); }
.pd-thumb img { width: 100%; height: 100%; object-fit: cover; }

.pd-info { min-width: 0; }
.pd-info h1 { font-size: clamp(21px, 3vw, 32px); margin-bottom: 10px; }
.pd-price { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin: 16px 0; }
.pd-price .price-now { font-size: clamp(26px, 3.4vw, 33px); color: var(--brand); }
[data-theme="dark"] .pd-price .price-now { color: var(--brand-ink); }
.pd-price .price-old { font-size: 16px; }
.pd-meta { display: flex; flex-wrap: wrap; gap: 8px 22px; font-size: 13px; color: var(--text-soft); padding: 14px 0; border-block: 1px solid var(--border); margin-bottom: 18px; }
.pd-meta b { color: var(--text); font-weight: 600; }
.qty-row { display: flex; align-items: center; gap: 14px; margin: 18px 0; flex-wrap: wrap; }
.qty { display: inline-flex; align-items: center; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); overflow: hidden; background: var(--surface); }
.qty button { width: 44px; height: 46px; font-size: 18px; color: var(--text-soft); }
.qty button:hover { background: var(--brand-tint); color: var(--brand-ink); }
.qty input { width: 52px; height: 46px; text-align: center; border: 0; background: transparent; font-weight: 700; -moz-appearance: textfield; }
.qty input::-webkit-outer-spin-button, .qty input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.pd-buttons { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px; }
.pd-features { margin: 22px 0; }
.pd-features li { position: relative; padding-left: 24px; font-size: 14px; color: var(--text-soft); margin-bottom: 8px; }
.pd-features li::before { content: "✓"; position: absolute; left: 0; top: 0; color: var(--brand-ink); font-weight: 800; }
.pd-usp { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px,1fr)); gap: 12px; margin-top: 22px; padding: 18px; background: var(--brand-tint); border-radius: var(--radius); }
.pd-usp div { display: flex; gap: 9px; align-items: center; font-size: 12.5px; color: var(--text-soft); }
.pd-usp svg { width: 20px; height: 20px; color: var(--brand-ink); flex: none; }

.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 22px; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.tab { padding: 12px 18px; font-size: 14px; font-weight: 600; color: var(--text-mute); border-bottom: 2px solid transparent; white-space: nowrap; }
.tab.active { color: var(--text); border-bottom-color: var(--brand); }
.tab-panel { display: none; font-size: 14.5px; color: var(--text-soft); line-height: 1.75; }
.tab-panel.active { display: block; }
.tab-panel p { margin-bottom: 12px; }

/* ---------- Shop / filters ---------------------------------------------- */
.shop-layout { display: grid; grid-template-columns: 250px minmax(0,1fr); gap: clamp(20px, 2.6vw, 34px); align-items: start; }
.filters { position: sticky; top: calc(var(--header-h) + 18px); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 18px; }
.filter-group { padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px solid var(--border); }
.filter-group:last-child { border-bottom: 0; margin-bottom: 0; padding-bottom: 0; }
.filter-group h4 { font-family: var(--font-body); font-size: 11.5px; text-transform: uppercase; letter-spacing: .12em; color: var(--text-mute); margin-bottom: 11px; font-weight: 700; }
.filter-group label { display: flex; align-items: center; gap: 9px; font-size: 13.5px; padding: 6px 0; cursor: pointer; color: var(--text-soft); }
.filter-group label:hover { color: var(--brand-ink); }
.filter-group input[type=checkbox], .filter-group input[type=radio] { accent-color: var(--brand); width: 16px; height: 16px; flex: none; }
.shop-bar { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; }
.shop-bar .count { font-size: 13.5px; color: var(--text-soft); }
select.input, input.input, textarea.input { width: 100%; padding: 12px 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); font-size: 16px; transition: border-color .16s, box-shadow .16s; }
select.input { padding-right: 34px; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23857ea0' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 11px center; background-size: 16px; }
.input:focus { outline: none; border-color: var(--brand-soft); box-shadow: 0 0 0 3px var(--brand-tint); }
.input.w-auto { width: auto; }
.filter-toggle { display: none; }
@media (min-width: 941px) { select.input, input.input, textarea.input { font-size: 14px; } }

.pagination { display: flex; gap: 6px; justify-content: center; margin-top: 36px; flex-wrap: wrap; }
.pagination a, .pagination span { min-width: 42px; height: 42px; display: grid; place-items: center; padding: 0 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 14px; font-weight: 600; }
.pagination a:hover { border-color: var(--brand); color: var(--brand-ink); background: var(--brand-tint); }
.pagination .current { background: var(--brand); color: var(--on-brand); border-color: var(--brand); }

/* ---------- Cart / Checkout --------------------------------------------- */
.cart-layout { display: grid; grid-template-columns: minmax(0,1fr) 360px; gap: clamp(20px, 2.6vw, 34px); align-items: start; }
.cart-item { display: grid; grid-template-columns: 96px minmax(0,1fr) auto; gap: 16px; padding: 18px 0; border-bottom: 1px solid var(--border); align-items: center; }
.cart-item img { width: 96px; height: 96px; object-fit: cover; border-radius: 14px; background: var(--bg-alt); }
.ci-name { font-size: 14.5px; font-weight: 600; line-height: 1.4; margin-bottom: 4px; }
.ci-meta { font-size: 12.5px; color: var(--text-mute); }
.ci-right { text-align: right; display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }
.ci-total { font-size: 16px; font-weight: 800; }
.link-danger { color: var(--danger); font-size: 12.5px; font-weight: 600; }
.link-danger:hover { text-decoration: underline; }

.summary { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 22px; position: sticky; top: calc(var(--header-h) + 18px); }
.summary h3 { font-size: 18px; margin-bottom: 16px; }
.sum-row { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; padding: 8px 0; color: var(--text-soft); }
.sum-row.total { border-top: 1px solid var(--border); margin-top: 10px; padding-top: 14px; font-size: 18px; font-weight: 800; color: var(--heading); }
.sum-row.discount { color: var(--success); font-weight: 600; }
.coupon-row { display: flex; gap: 8px; margin: 14px 0; flex-wrap: wrap; }
.coupon-row .input { flex: 1 1 150px; }

.checkout-layout { display: grid; grid-template-columns: minmax(0,1fr) 400px; gap: clamp(24px, 3.2vw, 44px); align-items: start; }
.co-block { margin-bottom: 26px; }
.co-block h3 { font-size: 17px; margin-bottom: 14px; display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.field { margin-bottom: 12px; }
.field label { display: block; font-size: 12.5px; font-weight: 600; color: var(--text-soft); margin-bottom: 6px; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.radio-card { display: flex; gap: 10px; align-items: flex-start; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 14px; cursor: pointer; margin-bottom: 10px; transition: all .16s; }
.radio-card:hover { border-color: var(--border-strong); }
.radio-card.selected { border-color: var(--brand); background: var(--brand-tint); }
.radio-card input { accent-color: var(--brand); margin-top: 3px; flex: none; }
.radio-card b { font-size: 14px; display: block; }
.radio-card span { font-size: 12.5px; color: var(--text-soft); }
.checkbox-line { display: flex; gap: 9px; align-items: center; font-size: 13px; color: var(--text-soft); margin: 8px 0; cursor: pointer; }
.checkbox-line input { accent-color: var(--brand); width: 16px; height: 16px; flex: none; }
.mini-item { display: flex; gap: 12px; align-items: center; padding: 10px 0; }
.mini-item img { width: 54px; height: 54px; border-radius: 11px; object-fit: cover; background: var(--bg-alt); }
.mini-item .mi-qty { position: relative; flex: none; }
.mini-item .qbadge { position: absolute; top: -6px; right: -6px; background: var(--brand); color: var(--on-brand); border-radius: 50%; width: 20px; height: 20px; font-size: 11px; display: grid; place-items: center; font-weight: 700; }
.mini-item b { font-size: 13px; font-weight: 600; line-height: 1.35; }

/* ---------- Alerts / empty ---------------------------------------------- */
.alert { padding: 13px 16px; border-radius: var(--radius-sm); font-size: 13.5px; margin-bottom: 18px; border: 1px solid transparent; }
.alert-success { background: var(--success-bg); color: var(--success); border-color: color-mix(in srgb, var(--success) 26%, transparent); }
.alert-error { background: var(--danger-bg); color: var(--danger); border-color: color-mix(in srgb, var(--danger) 26%, transparent); }
.alert-warn { background: var(--warn-bg); color: var(--warn); border-color: color-mix(in srgb, var(--warn) 26%, transparent); }
.empty { text-align: center; padding: clamp(46px, 8vw, 70px) 20px; }
.empty svg { width: 62px; height: 62px; color: var(--border-strong); margin: 0 auto 18px; }
.empty h3 { font-size: 20px; margin-bottom: 8px; }
.empty p { color: var(--text-soft); font-size: 14px; margin-bottom: 22px; }

/* ---------- Page head / breadcrumb -------------------------------------- */
.page-head { background: var(--bg-alt); border-bottom: 1px solid var(--border); padding: clamp(26px, 4vw, 38px) 0; }
.page-head h1 { font-size: clamp(23px, 3.4vw, 38px); }
.crumb { font-size: 12.5px; color: var(--text-mute); margin-bottom: 8px; }
.crumb a:hover { color: var(--brand-ink); }

/* ---------- Auth / account ---------------------------------------------- */
.auth-card { max-width: 430px; margin: clamp(28px, 5vw, 50px) auto; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: clamp(22px, 4vw, 34px); box-shadow: var(--shadow); }
.auth-card h1 { font-size: clamp(22px, 3vw, 26px); margin-bottom: 6px; text-align: center; }
.auth-card > p { text-align: center; color: var(--text-soft); font-size: 13.5px; margin-bottom: 24px; }
.account-layout { display: grid; grid-template-columns: 240px minmax(0,1fr); gap: clamp(18px, 2.4vw, 30px); align-items: start; }
.account-nav { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 10px; }
.account-nav a { display: flex; gap: 10px; align-items: center; padding: 12px 13px; border-radius: var(--radius-sm); font-size: 14px; color: var(--text-soft); }
.account-nav a:hover { background: var(--brand-tint); }
.account-nav a.active { background: var(--brand); color: var(--on-brand); font-weight: 600; }
.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: clamp(16px, 2.4vw, 22px); }
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
table.data { width: 100%; border-collapse: collapse; font-size: 13.5px; min-width: 520px; }
table.data th { text-align: left; padding: 11px 12px; font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-mute); border-bottom: 1px solid var(--border); white-space: nowrap; }
table.data td { padding: 13px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; }
table.data tr:last-child td { border-bottom: 0; }
.pill { display: inline-block; padding: 4px 10px; border-radius: 999px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
.pill-pending   { background: var(--warn-bg); color: var(--warn); }
.pill-confirmed { background: var(--brand-tint); color: var(--brand-ink); }
.pill-packed    { background: var(--brand-tint-2); color: var(--brand-ink); }
.pill-shipped   { background: #e6f6fb; color: #0a7ea4; }
.pill-delivered { background: var(--success-bg); color: var(--success); }
.pill-cancelled { background: var(--danger-bg); color: var(--danger); }
.pill-returned  { background: var(--bg-alt); color: var(--text-soft); }

/* ---------- Timeline ------------------------------------------------------ */
.timeline { position: relative; padding-left: 30px; }
.timeline::before { content: ""; position: absolute; left: 9px; top: 6px; bottom: 6px; width: 2px; background: var(--border); }
.tl-item { position: relative; padding-bottom: 22px; }
.tl-item::before { content: ""; position: absolute; left: -26px; top: 4px; width: 12px; height: 12px; border-radius: 50%; background: var(--border-strong); border: 2px solid var(--bg); }
.tl-item.done::before { background: var(--brand); }
.tl-item b { font-size: 14px; display: block; }
.tl-item span { font-size: 12.5px; color: var(--text-mute); }

/* ---------- Newsletter --------------------------------------------------- */
.newsletter { position: relative; background: var(--brand); color: #fff; border-radius: var(--radius-lg); padding: clamp(30px, 5vw, 50px) clamp(20px, 3.4vw, 34px); text-align: center; overflow: hidden; }
.newsletter::after { content: ""; position: absolute; width: 420px; height: 420px; border-radius: 50%; background: radial-gradient(circle, rgba(47,97,145,.55), transparent 65%); top: -180px; right: -120px; }
[data-theme="dark"] .newsletter { background: linear-gradient(135deg, #10304f, #071624); border: 1px solid var(--border); }
.newsletter h2, .newsletter p, .newsletter form { position: relative; z-index: 2; }
.newsletter h2 { color: #fff; font-size: clamp(21px, 3vw, 32px); margin-bottom: 9px; }
.newsletter p { color: rgba(255,255,255,.8); font-size: 14px; margin-bottom: 22px; }
.newsletter form { display: flex; gap: 10px; max-width: 460px; margin-inline: auto; flex-wrap: wrap; }
.newsletter input { flex: 1 1 190px; min-width: 0; height: 48px; padding: 0 16px; line-height: normal;
  border-radius: var(--radius-sm); border: 1px solid rgba(255,255,255,.24);
  background: rgba(255,255,255,.13); color: #fff; -webkit-appearance: none; appearance: none; box-sizing: border-box; }
.newsletter input::placeholder { color: rgba(255,255,255,.6); }
.newsletter input:focus { outline: none; border-color: #fff; background: rgba(255,255,255,.2); }
.newsletter .btn-accent { background: #fff; color: var(--brand); }
.newsletter .btn-accent:hover { background: var(--brand-tint); }

/* ---------- Footer — solid black, white text ----------------------------- */
.footer { position: relative; background: var(--footer-bg); color: var(--footer-text); padding: clamp(38px, 5vw, 58px) 0 0; margin-top: 0; }
.footer::before { content: ""; position: absolute; inset: 0 0 auto; height: 3px; background: var(--brand-grad); }
.footer-grid { display: grid; grid-template-columns: 1.6fr repeat(3, 1fr); gap: clamp(24px, 3vw, 34px); padding-bottom: 36px; }
.footer h4 { font-family: var(--font-body); font-size: 11.5px; text-transform: uppercase; letter-spacing: .16em; margin-bottom: 16px; color: var(--footer-head); font-weight: 700; }
.footer li { margin-bottom: 10px; }
.footer a { font-size: 13.5px; color: var(--footer-text); transition: color .16s; }
.footer a:hover { color: #ffffff; }
.footer .logo-text b { color: #ffffff; }
.footer .logo-text > span { color: #a8c6e2; }
.footer-about p { font-size: 13.5px; color: var(--footer-text); margin: 14px 0 18px; max-width: 320px; }
.socials { display: flex; gap: 9px; flex-wrap: wrap; }
.socials a { width: 38px; height: 38px; border-radius: 50%; border: 1px solid rgba(255,255,255,.26); display: grid; place-items: center; color: rgba(255,255,255,.85); transition: all .18s; }
.socials a:hover { background: var(--brand-soft); border-color: transparent; color: #ffffff; }
.socials svg { width: 16px; height: 16px; }
.footer-bottom { border-top: 1px solid var(--footer-line); padding: 18px 0 calc(18px + env(safe-area-inset-bottom)); display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; font-size: 12.5px; color: rgba(255,255,255,.62); }
.pay-badges { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.pay-badge { font-size: 10.5px; font-weight: 600; border: 1px solid rgba(255,255,255,.24); border-radius: 6px; padding: 4px 9px; color: rgba(255,255,255,.75); letter-spacing: .03em; }

/* ---------- Floating WhatsApp / toast ------------------------------------ */
.wa-float { position: fixed; right: 16px; bottom: calc(16px + env(safe-area-inset-bottom)); width: 54px; height: 54px; border-radius: 50%; background: #25d366; color: #fff; display: grid; place-items: center; z-index: 300; box-shadow: 0 6px 22px rgba(37,211,102,.44); transition: transform .2s var(--ease); }
.wa-float:hover { transform: scale(1.08); }
.wa-float svg { width: 28px; height: 28px; }
.wa-float::after { content: ""; position: absolute; inset: 0; border-radius: 50%; border: 2px solid #25d366; animation: pulse 2.2s infinite; }
@keyframes pulse { 0% { transform: scale(1); opacity: .8 } 100% { transform: scale(1.6); opacity: 0 } }

.toast-wrap { position: fixed; right: 16px; bottom: calc(80px + env(safe-area-inset-bottom)); z-index: 500; display: flex; flex-direction: column; gap: 10px; align-items: flex-end; max-width: calc(100vw - 32px); }
.toast { background: var(--brand); color: var(--on-brand); padding: 12px 18px; border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 600; box-shadow: var(--shadow-lg); max-width: 300px; animation: toastIn .25s var(--ease); }
.toast.error { background: var(--danger); color: #fff; }
@keyframes toastIn { from { opacity: 0; transform: translateY(12px) } to { opacity: 1; transform: none } }

/* ---------- Utilities ---------------------------------------------------- */
.divider { height: 1px; background: var(--border); margin: 26px 0; }
.text-mute { color: var(--text-mute); }
.text-soft { color: var(--text-soft); }
.text-accent { color: var(--brand-ink); }
.mt-0{margin-top:0}.mt-1{margin-top:8px}.mt-2{margin-top:16px}.mt-3{margin-top:24px}
.mb-0{margin-bottom:0}.mb-1{margin-bottom:8px}.mb-2{margin-bottom:16px}.mb-3{margin-bottom:24px}
.flex { display: flex; } .between { justify-content: space-between; } .items-center { align-items: center; }
.gap-1 { gap: 8px } .gap-2 { gap: 16px } .wrap { flex-wrap: wrap }
.fs-13 { font-size: 13px } .fs-12 { font-size: 12px } .fw-700 { font-weight: 700 }
.hide { display: none !important; }

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

/* --- Large desktop --------------------------------------------------- */
@media (max-width: 1180px) {
  .showcase-card { padding: 30px 30px; gap: 30px; }
  .sc-media { max-width: 330px; }
}

/* --- Small desktop / large tablet landscape --------------------------- */
@media (max-width: 1080px) {
  .shop-layout { grid-template-columns: 210px minmax(0,1fr); gap: 22px; }
  .checkout-layout { grid-template-columns: minmax(0,1fr) 330px; gap: 28px; }
  .cart-layout { grid-template-columns: minmax(0,1fr) 320px; }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .product-grid { grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); }
}

/* --- Tablet: nav becomes a drawer, all two-column layouts stack -------- */
@media (max-width: 940px) {
  .nav, .search-wrap { display: none; }
  .burger { display: grid; }
  .header-actions { margin-left: auto; }

  .pd-wrap { grid-template-columns: 1fr; gap: 24px; }
  .pd-gallery { position: static; max-width: 520px; margin-inline: auto; width: 100%; }

  .cart-layout, .checkout-layout, .account-layout { grid-template-columns: 1fr; }
  .summary { position: static; }
  .checkout-layout .summary { order: -1; }

  .filters { position: fixed; inset: 0 0 0 auto; width: min(320px, 88vw); z-index: 400; border-radius: 0; transform: translateX(100%); transition: transform .28s var(--ease); overflow-y: auto; -webkit-overflow-scrolling: touch; }
  .filters.open { transform: none; }
  .filter-toggle { display: inline-flex; }
  .shop-layout { grid-template-columns: 1fr; }

  /* Showcase stacks: image first, details below — same order both variants. */
  .showcase-card, .showcase-card.reverse { grid-template-columns: 1fr; gap: 22px; padding: 22px 20px 26px; }
  .showcase-card .sc-media, .showcase-card.reverse .sc-media { order: 1; margin: 0 auto; max-width: 340px; width: 100%; justify-self: center; }
  .showcase-card .sc-info, .showcase-card.reverse .sc-info { order: 2; }
  .showcase { padding: 44px 0 26px; }
  .sc-info { text-align: left; }
}

/* --- Small tablet ------------------------------------------------------ */
@media (max-width: 820px) {
  .product-grid { grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); }
  .cat-card { flex: 1 1 168px; max-width: 220px; }
  .promo-grid { grid-template-columns: 1fr; }
}

/* --- Phones (landscape) / tablet portrait ----------------------------- */
@media (max-width: 720px) {
  :root { --header-h: 66px; }

  .product-grid { grid-template-columns: repeat(2, minmax(0,1fr)); gap: 12px; }
  .pc-body { padding: 11px 12px 0; gap: 5px; }
  .pc-title { font-size: 13.8px; -webkit-line-clamp: 2; }
  .pc-foot { flex-direction: column; align-items: stretch; gap: 9px; padding: 10px 12px 12px; }
  .pc-foot .btn { width: 100%; }
  .price-now { font-size: 16px; }
  .pc-share { width: 29px; height: 29px; }
  .pc-share svg { width: 13px; height: 13px; }

  .cat-grid { gap: 10px; }
  .cat-card { flex: 1 1 calc(50% - 10px); max-width: calc(50% - 5px); }
  .cat-bar { left: 7px; right: 7px; bottom: 7px; padding: 8px 8px 8px 11px; border-radius: 12px; }
  .cat-bar h3 { font-size: 12.5px; }
  .cat-bar span { font-size: 9px; }
  .cat-go { width: 25px; height: 25px; font-size: 12px; }

  .pd-buttons { grid-template-columns: 1fr; }
  .field-row { grid-template-columns: 1fr; }
  .cart-item { grid-template-columns: 72px minmax(0,1fr); }
  .cart-item img { width: 72px; height: 72px; }
  .ci-right { grid-column: 1 / -1; flex-direction: row; justify-content: space-between; align-items: center; width: 100%; }
  /* Shop / Quick Links / Support sit two-up on phones — one long column left
     a big empty gap beside the short lists and made the footer very tall. */
  .footer-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 18px; }
  .footer-about { grid-column: 1 / -1; }
  .footer-about p { max-width: none; margin: 12px 0 14px; }
  .footer li { margin-bottom: 8px; }
  .footer a { font-size: 13px; }
  .footer h4 { margin-bottom: 12px; }
  /* Support is the odd one out with only two link columns above it, so let it
     span the full width and run its own two columns — no dead space, and the
     footer stays short. */
  .footer-support { grid-column: 1 / -1; }
  .footer-support ul { column-count: 2; column-gap: 18px; }
  .footer-support li { break-inside: avoid; }
  .footer-bottom { flex-direction: column; align-items: flex-start; }
  .hero { min-height: 380px; }
  .review-card { flex-basis: 262px; width: 262px; height: 406px; }
  .review-media, .review-quote { height: 172px; }
  .sc-actions .btn { min-width: 0; flex: 1 1 100%; }
  .section-head { gap: 12px; }
  .section-head > a.btn { align-self: flex-start; }
}

/* --- Phones ------------------------------------------------------------ */
@media (max-width: 560px) {
  :root { --header-h: 62px; }
  body { font-size: 14.5px; }

  .header-actions { gap: 0; margin-left: 4px; }
  .icon-btn { width: 38px; height: 38px; }
  .icon-btn svg { width: 19px; height: 19px; }

  .trust-marquee .marquee-half { gap: 32px; padding: 10px 32px 10px 0; }
  .trust-item svg { width: 20px; height: 20px; }

  /* side by side, never full width — two short buttons read cleaner than
     two stacked bars on a phone */
  .hero-actions { flex-wrap: nowrap; gap: 9px; }
  .hero-actions .btn { flex: 1 1 0; min-width: 0; padding-inline: 10px; font-size: 13px; }
  .hero-content p { margin-bottom: 22px; }

  .sc-swatch { width: 36px; height: 36px; }
  .sc-thumbs { gap: 6px; }
  .showcase-card .sc-media, .showcase-card.reverse .sc-media { max-width: 300px; margin-top: 0; }

  .pd-thumb { flex-basis: 60px; height: 60px; }
  .pd-meta { gap: 6px 16px; font-size: 12.5px; }
  .shop-bar { gap: 10px; }
  .shop-bar > * { flex: 1 1 auto; }
  .newsletter form { flex-direction: column; align-items: stretch; }
  /* flex-basis 190px on a column flex item was being read as a HEIGHT hint by
     some mobile browsers, which stretched the email box. Pin it instead. */
  .newsletter input { flex: 0 0 auto; width: 100%; height: 46px; }
  .newsletter form .btn { width: 100%; flex: 0 0 auto; }
  .pagination a, .pagination span { min-width: 38px; height: 38px; padding: 0 9px; font-size: 13px; }
  .wa-float { width: 50px; height: 50px; right: 13px; }
  .wa-float svg { width: 26px; height: 26px; }
  .toast-wrap { right: 13px; left: 13px; align-items: stretch; }
  .toast { max-width: none; }
}

/* --- Narrow phones ------------------------------------------------------ */
@media (max-width: 420px) {
  .footer-grid { gap: 18px 14px; }
  .footer a { font-size: 12.5px; }
  .product-grid { gap: 10px; }
  .pc-title { font-size: 13px; }
  .price-now { font-size: 15px; }
  .pc-price-label { font-size: 9px; letter-spacing: .14em; }
  .pc-foot .btn-sm { padding: 9px 10px; font-size: 12.5px; }
  .cat-grid { gap: 9px; }
  .cat-card { flex: 1 1 calc(50% - 9px); max-width: calc(50% - 4.5px); }
  .section-head h2 { font-size: 21px; }
  .hero-content h1 { font-size: 27px; }
  .showcase-card, .showcase-card.reverse { padding: 18px 15px 22px; }
  .showcase-card .sc-media, .showcase-card.reverse .sc-media { max-width: 100%; margin-top: 0; padding: 6px; }
  .sc-price .amt { font-size: 30px; }
  .review-card { flex-basis: 238px; width: 238px; height: 392px; }
  .review-media, .review-quote { height: 158px; }
}

/* --- Very narrow phones (Galaxy Fold etc.) ------------------------------ */
@media (max-width: 360px) {
  .logo-text b { font-size: 15px; letter-spacing: .15em; }
  .logo-text > span { font-size: 6.5px; letter-spacing: .2em; }
  .icon-btn { width: 34px; height: 34px; }
  .icon-btn svg { width: 18px; height: 18px; }
  .product-grid { grid-template-columns: 1fr; }
  .cat-card { flex: 1 1 100%; max-width: 100%; aspect-ratio: 3/2; }
  .btn-lg { padding: 13px 20px; font-size: 14px; }
}

/* --- Landscape phones: keep the hero from eating the whole screen ------- */
@media (max-height: 520px) and (orientation: landscape) {
  .hero { min-height: 320px; }
  .hero-content { padding-block: 34px; }
}

/* ---------- Print -------------------------------------------------------- */
@media print {
  .header, .footer, .wa-float, .announce, .no-print { display: none !important; }
  body { background: #fff; color: #000; }
}

/* ==========================================================================
   V7 — review videos play on demand
   The poster frame is the video's own first frame (preload="metadata"), with a
   clear play button on top. Clicking swaps to native controls and plays.
   ========================================================================== */
.review-media.is-video { position: relative; cursor: pointer; }
.review-media.is-video video { width: 100%; height: 100%; object-fit: cover; display: block; background: #000; }
.review-media.inline-video { height: 200px; border-radius: 9px; overflow: hidden; margin-top: 10px; }

.rv-play {
  position: absolute; inset: 0; margin: auto; width: 54px; height: 54px; border-radius: 50%;
  display: grid; place-items: center; color: var(--brand);
  background: rgba(255,255,255,.94); box-shadow: 0 6px 20px rgba(12,6,26,.36);
  transition: transform .18s var(--ease), background .18s var(--ease), opacity .18s;
  z-index: 3;
}
.rv-play svg { width: 24px; height: 24px; margin-left: 2px; }
.review-media.is-video:hover .rv-play { transform: scale(1.08); background: #fff; }
.review-media.is-video.playing .rv-play { opacity: 0; pointer-events: none; }
/* dim the frame slightly so the white button stays legible on light footage */
.review-media.is-video::after {
  content: ""; position: absolute; inset: 0; background: rgba(0,0,0,.18);
  transition: opacity .18s; pointer-events: none; z-index: 2;
}
.review-media.is-video.playing::after { opacity: 0; }
@media (max-width: 560px) { .rv-play { width: 46px; height: 46px; } .rv-play svg { width: 20px; height: 20px; } }

/* ==========================================================================
   V8 — filter rows show what is selected at a glance
   ========================================================================== */
.filter-group label {
  display: flex; align-items: center; gap: 10px; padding: 7px 9px; margin: 1px 0;
  border-radius: 8px; cursor: pointer; color: var(--text-soft); font-size: 13.5px;
  transition: background .14s var(--ease), color .14s var(--ease);
}
.filter-group label:hover { background: var(--brand-tint); color: var(--brand-ink); }
/* :has() lets the whole row react to its own input being checked */
.filter-group label:has(input:checked) {
  background: var(--brand-tint); color: var(--brand-ink); font-weight: 600;
}
.filter-group label:has(input:checked)::after {
  content: "\2713"; margin-left: auto; font-weight: 800; color: var(--brand-ink); font-size: 13px;
}
/* Fallback for browsers without :has() — the native tick still shows, and the
   server marks the active row so it is never ambiguous. */
.filter-group label.is-on { background: var(--brand-tint); color: var(--brand-ink); font-weight: 600; }
.filter-group label.is-on::after { content: "\2713"; margin-left: auto; font-weight: 800; font-size: 13px; }
.filter-active-note { font-size: 12px; color: var(--brand-ink); font-weight: 600; margin-bottom: 8px; }

/* ---- product description: tighter, more readable line spacing ---- */
.tab-panel { line-height: 1.55; font-size: 14px; }
.tab-panel p { margin-bottom: 7px; }
.tab-panel p:empty { display: none; margin: 0; }
.tab-panel ul, .tab-panel ol { margin: 6px 0 10px; }
.tab-panel li { margin-bottom: 4px; line-height: 1.5; }
.tab-panel h3, .tab-panel h4, .tab-panel b, .tab-panel strong { display: block; margin: 12px 0 5px; }
.tab-panel > *:first-child { margin-top: 0; }

/* ---- storefront theme toggle: moon in light mode, sun in dark ---- */
.theme-btn .ico-sun  { display: none; }
.theme-btn .ico-moon { display: block; }
[data-theme="dark"] .theme-btn .ico-sun  { display: block; }
[data-theme="dark"] .theme-btn .ico-moon { display: none; }
.theme-btn svg { width: 20px; height: 20px; }

/* ---- review video: make the frame obviously a video ---- */
.review-media.is-video { background: #000; }
.review-media.is-video video { min-height: 100%; }

/* ==========================================================================
   V10 — VIDEO WALL
   Portrait-first tiles (9:16) so phone footage fills the frame instead of
   sitting letterboxed inside a landscape box. Tiles idle with a slow float,
   and the animation stops on the one that is playing.
   ========================================================================== */
.video-wall { background: var(--bg-alt); }
/* Flex + a max width per tile: with auto-fit a single video stretched across
   the whole row and became enormous. Tiles now keep a sane size and the row
   stays centred however many there are. */
.vw-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: clamp(12px,1.8vw,20px); }
.vw-item {
  position: relative; margin: 0; border-radius: 18px; overflow: hidden;
  aspect-ratio: 9 / 16; background: #000; cursor: pointer;
  border: 1px solid var(--border);
  box-shadow: var(--shadow); transition: transform .3s var(--ease), box-shadow .3s var(--ease);
  animation: vwFloat 6s ease-in-out infinite;
}
.vw-item:nth-child(2n) { animation-delay: -2s; }
.vw-item:nth-child(3n) { animation-delay: -4s; }
@keyframes vwFloat { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }
.vw-item:hover { transform: translateY(-9px); box-shadow: var(--shadow-lg); animation-play-state: paused; }
.vw-item.playing { animation: none; transform: none; box-shadow: var(--shadow-lg); cursor: default; }
@media (prefers-reduced-motion: reduce) { .vw-item { animation: none; } }

.vw-item video { width: 100%; height: 100%; object-fit: cover; display: block; background: #000; }
/* once playing, show the whole frame rather than cropping it */
.vw-item.playing video { object-fit: contain; }

.vw-play {
  position: absolute; inset: 0; margin: auto; width: 56px; height: 56px; border-radius: 50%;
  display: grid; place-items: center; color: var(--brand); background: rgba(255,255,255,.94);
  box-shadow: 0 6px 20px rgba(0,20,45,.4); z-index: 3;
  transition: transform .18s var(--ease), opacity .18s;
}
.vw-play svg { width: 24px; height: 24px; margin-left: 3px; }
.vw-item:hover .vw-play { transform: scale(1.09); }
.vw-item.playing .vw-play { opacity: 0; pointer-events: none; }
.vw-item::after {
  content: ""; position: absolute; inset: auto 0 0 0; height: 45%; z-index: 1;
  background: linear-gradient(to top, rgba(0,0,0,.78), transparent);
  transition: opacity .2s; pointer-events: none;
}
.vw-item.playing::after { opacity: 0; }
.vw-cap {
  position: absolute; left: 12px; right: 12px; bottom: 11px; z-index: 2; color: #fff;
  transition: opacity .2s;
}
.vw-cap b { display: block; font-size: 13.5px; font-weight: 700; }
.vw-cap span { font-size: 11.5px; opacity: .82; }
.vw-item.playing .vw-cap { opacity: 0; }
@media (max-width: 560px) {
  .vw-grid { gap: 10px; }
  .vw-item { flex: 0 1 calc(50% - 10px); max-width: calc(50% - 5px); }
  .vw-play { width: 46px; height: 46px; }
  .vw-play svg { width: 20px; height: 20px; }
}

/* ==========================================================================
   V10 — REVIEW RAIL: static and centred when it fits, scrolling when it doesn't
   JS adds .is-static once it measures that the row is narrower than the track.
   ========================================================================== */
.marquee.is-static { justify-content: center; }
.marquee.is-static .marquee-half { animation: none; }
.marquee.is-static .marquee-half + .marquee-half { display: none; }
.marquee.is-static .marquee-half { flex-wrap: wrap; justify-content: center; padding-right: 0; }

/* ==========================================================================
   V10 — SPOTLIGHT CARD: wider on laptops, themed border, centred on mobile
   ========================================================================== */
.showcase-card {
  border: 2px solid var(--brand);
  max-width: 1180px; margin-inline: auto;
}
[data-theme="dark"] .showcase-card { border-color: var(--brand-soft); }
@media (min-width: 1100px) {
  /* push it further out so it does not look cramped on a laptop */
  .showcase .container { max-width: min(1400px, 96vw); }
  .showcase-card { max-width: none; padding: clamp(28px, 3vw, 40px) clamp(28px, 3.6vw, 48px); }
  .sc-media { max-width: 390px; }
}
@media (max-width: 940px) {
  .showcase-card { max-width: 620px; margin-inline: auto; text-align: center; }
  .showcase-card .sc-info, .showcase-card.reverse .sc-info { text-align: center; }
  .showcase-card .sc-price, .showcase-card .sc-actions,
  .showcase-card .sc-swatches, .showcase-card .sc-thumbs { justify-content: center; }
  .showcase-card .sc-benefits { display: inline-block; text-align: left; }
}

/* ---- V11: drag the review rail by hand ---- */
.marquee.js-marquee { cursor: grab; touch-action: pan-y; }
.marquee.js-marquee.dragging { cursor: grabbing; }
.marquee.js-marquee.dragging * { user-select: none; }
.marquee.is-static { cursor: default; }

/* ---- V11: spotlight media sits centred inside the card, equal margins ---- */
.sc-media { margin: 0 auto !important; justify-self: center !important; }
.showcase-card, .showcase-card.reverse { align-items: center; }
@media (max-width: 940px) {
  /* stacked: image centred above the details, same gap left and right */
  .showcase-card .sc-media, .showcase-card.reverse .sc-media {
    margin: 0 auto !important; max-width: min(340px, 100%);
  }
}

/* ==========================================================================
   V15 — product photos fill their frame
   Studio shots usually have a margin of white around the watch. object-fit
   already stretches the FILE to the box, but that white margin is part of the
   file, so the product still floats with gaps at the sides. A small scale
   pushes the padding outside the frame, which is cropped away — the watch
   fills the tile instead of sitting in the middle of it.
   ========================================================================== */
.pc-media, .sc-photo, .sc-thumb, .pd-main, .pd-thumb, .cat-card, .promo { overflow: hidden; }

.pc-media img,
.sc-photo img,
.sc-thumb img,
.pd-main img,
.pd-thumb img {
  transform: scale(1.12);
  transform-origin: center center;
  transition: transform .5s var(--ease);
}
/* keep the hover lift working on top of the base zoom */
.product-card:hover .pc-media img { transform: scale(1.18); }
.showcase-card:hover .sc-photo img { transform: scale(1.16); }
.pd-thumb.active img { transform: scale(1.12); }

/* the built-in placeholder is drawn to fit exactly — never zoom that */
.pc-media img[src^="data:image/svg"],
.sc-photo img[src^="data:image/svg"],
.sc-thumb img[src^="data:image/svg"],
.pd-main img[src^="data:image/svg"],
.pd-thumb img[src^="data:image/svg"],
.cat-card img[src^="data:image/svg"] { transform: none !important; }

/* ==========================================================================
   V15 — trust strip: fixed on laptop and desktop, scrolling only on phones
   ========================================================================== */
@media (min-width: 941px) {
  .trust-marquee,
  .trust-marquee .marquee-half { transform: none !important; animation: none !important; }
  .trust-marquee .marquee-half {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
    padding: 13px 0; width: 100%;
  }
  .trust-marquee .marquee-half:nth-child(2) { display: none; }
  .trust-marquee { cursor: default; }
  .trust-item { justify-content: flex-start; }
}

/* ==========================================================================
   V16 — VIDEO WALL: one continuous row
   Never wraps to a second row at any width. It loops by itself, can be
   dragged by hand, and stops drifting while a clip is playing.
   ========================================================================== */
.video-marquee { padding-block: 4px; cursor: grab; }
.video-marquee.dragging { cursor: grabbing; }
.video-marquee .marquee-half {
  display: flex; flex-wrap: nowrap;          /* the key: never wrap */
  gap: clamp(12px, 1.6vw, 18px);
  padding-right: clamp(12px, 1.6vw, 18px);
  align-items: stretch;
}
.video-marquee .vw-item {
  flex: 0 0 auto;
  width: clamp(150px, 17vw, 215px);
  margin: 0; animation: none;                 /* no float while it scrolls */
}
.video-marquee .vw-item:hover { transform: translateY(-6px); }
.video-marquee .vw-item.playing { transform: none; }
@media (max-width: 560px) {
  .video-marquee .vw-item { width: 150px; }
}

/* ==========================================================================
   V16 — REVIEW WALL: compact looping testimonial cards
   ========================================================================== */
.review-wall { background: var(--bg-alt); overflow: hidden; }
.rw-head { text-align: center; margin-bottom: clamp(18px, 3vw, 30px); }
.rw-head h2 { font-size: clamp(24px, 3.4vw, 38px); }
.rw-score { color: var(--text-soft); font-size: 14px; margin-top: 6px; }
.rw-score b { color: var(--heading); }

.review-marquee { padding-block: 7px; cursor: grab; }
.review-marquee.dragging { cursor: grabbing; }
.review-marquee .marquee-half {
  display: flex; flex-wrap: nowrap; gap: 14px; padding-right: 14px; align-items: stretch;
}

.rv-card {
  flex: 0 0 auto; width: clamp(270px, 30vw, 380px);
  display: flex; align-items: center; gap: 13px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 999px; padding: 11px 20px 11px 11px;
  box-shadow: var(--shadow-sm);
}
.rv-avatar {
  width: 52px; height: 52px; border-radius: 50%; overflow: hidden; flex: none;
  background: var(--brand); color: #fff; display: grid; place-items: center;
  font-weight: 700; font-size: 18px;
}
.rv-avatar img { width: 100%; height: 100%; object-fit: cover; }
.rv-body { min-width: 0; }
.rv-top { display: flex; align-items: center; gap: 5px; margin-bottom: 2px; }
.rv-top b { font-size: 14px; color: var(--heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 130px; }
.rv-tick { width: 15px; height: 15px; color: var(--brand); flex: none; }
.rv-stars .star { font-size: 12.5px; }
.rv-stars { display: inline-flex; }
.rv-body p {
  font-size: 13px; color: var(--text-soft); line-height: 1.45;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
@media (max-width: 560px) {
  .rv-card { width: 265px; padding: 9px 16px 9px 9px; }
  .rv-avatar { width: 44px; height: 44px; font-size: 16px; }
  .rv-body p { font-size: 12.5px; }
}

/* ==========================================================================
   V17 — a rail that fits never moves, and a rail that moves never gaps
   ========================================================================== */
.marquee.is-static { justify-content: center; }
.marquee.is-static .marquee-half { animation: none !important; transform: none !important; }
.marquee.is-static .marquee-half + .marquee-half { display: none !important; }
/* centre the items inside the single remaining half too */
.video-marquee.is-static .marquee-half,
.review-marquee.is-static .marquee-half {
  justify-content: center; width: 100%; padding-right: 0;
}

/* ==========================================================================
   V18 — developer credit bar (sits directly above the footer)
   ========================================================================== */
.dev-bar { background: var(--bg-alt); border-top: 1px solid var(--border); padding: 7px 0; }
.dev-bar-inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 10px; flex-wrap: wrap;
}
.dev-by { font-size: 12px; color: var(--text-soft); }
.dev-by b { color: var(--heading); font-weight: 700; letter-spacing: .01em; }
.dev-actions { display: flex; gap: 7px; flex-wrap: wrap; }
.dev-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px; border-radius: 999px; font-size: 11.5px; font-weight: 600;
  border: 1px solid var(--border-strong); color: var(--text);
  background: var(--surface); transition: all .16s var(--ease); white-space: nowrap;
}
.dev-btn svg { width: 14px; height: 14px; flex: none; }
.dev-btn:hover { transform: translateY(-1px); box-shadow: var(--shadow-sm); }
.dev-wa { border-color: transparent; background: #25d366; color: #fff; }
.dev-wa:hover { background: #1eb857; }
.dev-port { border-color: var(--brand); color: var(--brand-ink); }
.dev-port:hover { background: var(--brand); color: var(--on-brand); border-color: var(--brand); }
@media (max-width: 640px) {
  .dev-bar-inner { justify-content: center; text-align: center; }
  .dev-by { flex: 1 1 100%; }
  .dev-actions { justify-content: center; }
  .dev-btn { font-size: 11px; padding: 5px 10px; }
}


/* ==========================================================================
   V19 — PERFORMANCE + "CONTENT CAN NEVER STAY INVISIBLE"

   1. The reveal-on-scroll animation used to be applied with inline styles
      (opacity:0) set by JavaScript and only removed again by the observer.
      If the main thread was busy, or the observer never fired, whole sections
      of the homepage stayed blank. It is now a class on <html> that JS drops
      after 2.5s no matter what, so the worst case is "no animation", never
      "no content".
   2. will-change:transform on a rail row several thousand pixels wide asks
      the browser for an enormous composited layer. Dropped; the rails are
      moved by transform anyway, which is already cheap.
   ========================================================================== */
.product-card,
.cat-card,
.review-grid .review-card {
  transition: opacity .45s ease, transform .45s ease;
}
html.tv-reveal .product-card,
html.tv-reveal .cat-card,
html.tv-reveal .review-grid .review-card {
  opacity: 0;
  transform: translateY(14px);
}
html.tv-reveal .product-card.is-revealed,
html.tv-reveal .cat-card.is-revealed,
html.tv-reveal .review-grid .review-card.is-revealed {
  opacity: 1;
  transform: none;
}
/* The hover lift must still win once the card is on screen. */
html.tv-reveal .product-card.is-revealed:hover { transform: translateY(-6px); }

.marquee { contain: paint; }
.marquee-half { will-change: auto; }

/* A media rail that does not fill the screen is centred and still — it is
   never padded out with duplicate video tiles any more. */
.video-marquee.is-static { cursor: default; }
.video-marquee.is-static .marquee-half { flex-wrap: wrap; gap: clamp(12px, 1.6vw, 18px); }

/* Unplayed tiles load no data, so give them a solid panel rather than a
   transparent hole while the visitor has not asked for the clip. */
.vw-item { background: #0b0f14; }
