/* VMS Careline — prototype-faithful styles (standalone, no Tailwind) */
/* Fonts loaded by next/font in app/layout.tsx — no Google Fonts import needed here */

:root {
  --bg: #FFFFFF;
  --bg-2: #F4F5F6;
  --primary: #0B6E6E;
  --primary-2: #084f4f;
  --action: #1A9E8F;
  --info: #1B4F8A;
  --accent: #C9A227;
  --accent-2: #E8C45A;
  --text: #1C2B2B;
  --text-2: #4A5C5C;
  --text-3: #7C8A8A;
  --line: rgba(28,43,43,0.10);
  --line-2: rgba(28,43,43,0.18);
  --serif: 'DM Serif Display', Georgia, serif;
  --sans: 'DM Sans', system-ui, -apple-system, sans-serif;
  --ease: cubic-bezier(.2,.8,.2,1);
  --shadow-1: 0 1px 2px rgba(28,43,43,.04), 0 8px 24px rgba(28,43,43,.06);
  --shadow-2: 0 2px 6px rgba(28,43,43,.06), 0 24px 48px rgba(28,43,43,.10);
  /* Vertical rhythm between homepage sections.
     Sections stack, so the visible gap between two of them is the sum of one's
     padding-bottom and the next one's padding-top. Every section used to pick
     its own value (90px, 100px, 140px…), which added up to 190–230px bands of
     empty white — most visibly between Why Choose (80px) and Our Promise
     (140px). One token keeps every pair at 2 × --sec-y so the rhythm is even
     and there is a single number to tune. */
  --sec-y: 72px;
}

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

body.careline-storefront {
  background: var(--bg);
  color: var(--text);
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  margin: 0;
  padding: 0;
}

/* Backstop against sideways scroll on the storefront. `clip` rather than `hidden` so it
   never becomes a scroll container, which would break position:sticky descendants.
   Note the class sits on a wrapper div, not <body>, hence the bare class selector. */
.careline-storefront { overflow-x: clip; }

body.careline-storefront a { color: inherit; text-decoration: none; }
body.careline-storefront button { font: inherit; color: inherit; cursor: pointer; background: none; border: 0; padding: 0; }
body.careline-storefront img { max-width: 100%; display: block; }
body.careline-storefront em { font-style: italic; }
body.careline-storefront h1, body.careline-storefront h2, body.careline-storefront h3 {
  font-family: var(--serif); font-weight: 400; color: var(--text);
}

/* ─── Buttons ─── */
.c-btn {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 14px 22px; border-radius: 999px;
  font-family: var(--sans); font-weight: 500; font-size: 14px; letter-spacing: .01em;
  transition: transform .25s var(--ease), background .25s var(--ease), color .25s var(--ease), box-shadow .25s var(--ease);
  white-space: nowrap; cursor: pointer; border: 0; text-decoration: none;
  display: inline-flex; align-items: center;
}
.c-btn-primary {
  background: var(--action); color: #fff;
  box-shadow: 0 1px 0 rgba(255,255,255,.3) inset, 0 8px 18px rgba(26,158,143,.35);
}
.c-btn-primary:hover { background: #15897c; transform: translateY(-1px); box-shadow: 0 1px 0 rgba(255,255,255,.3) inset, 0 12px 28px rgba(26,158,143,.45); }
.c-btn-ghost { color: var(--text); border: 1px solid rgba(255,255,255,0.6); background: rgba(255,255,255,0.15); backdrop-filter: blur(6px); color: #fff; }
.c-btn-ghost:hover { background: rgba(255,255,255,0.25); }

/* ─── Section helpers ─── */
.c-section-eb {
  font-family: var(--sans); font-size: 11px; letter-spacing: .18em; text-transform: uppercase;
  color: var(--primary); margin-bottom: 14px; font-weight: 500;
}
.c-section-title {
  font-family: var(--serif); font-weight: 400;
  font-size: clamp(36px, 4.4vw, 62px); line-height: 1.02;
  margin: 0; letter-spacing: -0.01em;
  text-wrap: balance; color: var(--text);
}
.c-section-link {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 500; color: var(--primary); font-family: var(--sans);
  border-bottom: 1px solid currentColor; padding-bottom: 4px;
  transition: gap .2s var(--ease); text-decoration: none;
}
.c-section-link:hover { gap: 14px; }
.c-section-head {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 24px; margin-bottom: 40px; flex-wrap: wrap;
}

/* ─── Announcement bar ─── */
.c-annc {
  background: var(--accent); color: var(--text);
  font-size: 12.5px; letter-spacing: .01em;
  position: relative; z-index: 60;
  font-family: var(--sans);
}
.c-annc-inner {
  max-width: 1440px; margin: 0 auto; padding: 9px 28px;
  display: flex; align-items: center; justify-content: center; gap: 14px;
  position: relative;
}
.c-annc-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--text); flex-shrink: 0; }
.c-annc-rotator { position: relative; height: 18px; flex: 0 1 auto; min-width: 280px; text-align: center; overflow: hidden; }
.c-annc-line { position: absolute; inset: 0; opacity: 0; transform: translateY(8px); transition: opacity .5s var(--ease), transform .5s var(--ease); font-weight: 500; }
.c-annc-line.is-on { opacity: 1; transform: translateY(0); }
.c-annc-meta { position: absolute; right: 28px; top: 50%; transform: translateY(-50%); font-weight: 500; }

/* ─── Glass Navbar ─── */
.c-nav {
  position: fixed; top: 37px; left: 50%; transform: translateX(-50%);
  width: calc(100% - 32px); max-width: 1280px;
  z-index: 50;
  transition: top .3s var(--ease), background .3s var(--ease), box-shadow .3s var(--ease);
}
.c-nav-inner {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center;
  padding: 10px 18px;
  background: rgba(11,110,110,0.32);
  backdrop-filter: blur(18px) saturate(120%);
  -webkit-backdrop-filter: blur(18px) saturate(120%);
  border: 1px solid rgba(255,255,255,0.18);
  border-radius: 20px;
  box-shadow: 0 10px 40px rgba(11,110,110,.18), 0 1px 0 rgba(255,255,255,.12) inset;
}
.c-nav.is-scrolled { top: 14px; }
.c-nav.is-scrolled .c-nav-inner {
  background: rgba(255,255,255,0.96);
  border-color: rgba(28,43,43,0.10);
  box-shadow: 0 8px 28px rgba(28,43,43,.10);
}
.c-nav-left, .c-nav-right { display: flex; align-items: center; gap: 6px; }
.c-nav-right { justify-content: flex-end; }
.c-nav-link {
  color: rgba(255,255,255,.92); font-size: 13.5px; font-weight: 500;
  padding: 10px 14px; border-radius: 12px; font-family: var(--sans);
  transition: background .2s var(--ease), color .2s var(--ease); text-decoration: none;
}
.c-nav-link:hover { background: rgba(255,255,255,.12); color: #fff; }
.c-nav.is-scrolled .c-nav-link { color: var(--text); }
.c-nav.is-scrolled .c-nav-link:hover { background: rgba(11,110,110,.08); color: var(--primary); }

/* ─── Categories dropdown ─── */
.c-nav-cat { position: relative; display: inline-flex; }
.c-nav-cat-trigger {
  display: inline-flex; align-items: center; gap: 4px;
  background: none; border: 0; cursor: pointer; font: inherit;
  color: rgba(255,255,255,.92);
}
.c-nav.is-scrolled .c-nav-cat-trigger { color: var(--text); }
.c-nav-cat-caret { transition: transform .25s var(--ease); }
.c-nav-cat.is-open .c-nav-cat-caret { transform: rotate(180deg); }
.c-nav-dropdown {
  position: absolute; top: calc(100% + 10px); left: 0;
  min-width: 232px; padding: 8px;
  background: #fff; border: 1px solid rgba(28,43,43,0.10);
  border-radius: 16px; box-shadow: 0 18px 44px rgba(28,43,43,.16);
  display: flex; flex-direction: column; gap: 2px;
  opacity: 0; visibility: hidden; transform: translateY(6px);
  transition: opacity .15s var(--ease), transform .15s var(--ease), visibility .15s;
  z-index: 60;
}
/* invisible bridge so the cursor can cross the gap without closing the menu */
.c-nav-dropdown::before {
  content: ''; position: absolute; top: -10px; left: 0; right: 0; height: 10px;
}
.c-nav-cat.is-open .c-nav-dropdown {
  opacity: 1; visibility: visible; transform: translateY(0);
}
.c-nav-dropdown-item {
  padding: 9px 12px; border-radius: 10px;
  font-family: var(--sans); font-size: 13.5px; font-weight: 500;
  color: var(--text); text-decoration: none; white-space: nowrap;
  transition: background .15s var(--ease), color .15s var(--ease);
}
.c-nav-dropdown-item:hover { background: var(--bg-2); color: var(--primary); }

/* ─── Desktop subcategories · Client QA R2 Phase 2F ───
   An indented list inside the panel that already opens, not a second hover
   flyout: same open/close behaviour, same panel, and every entry stays
   reachable by Tab. Rendered only for categories that actually have filters,
   so a category without them looks exactly as it did before. */
.c-nav-dropdown-group + .c-nav-dropdown-group { margin-top: 2px; }
.c-nav-dropdown-sub {
  display: flex; flex-direction: column; gap: 1px;
  margin: 2px 0 4px 14px; padding-left: 10px;
  border-left: 1.5px solid var(--line);
}
.c-nav-dropdown-subitem {
  padding: 7px 10px; border-radius: 8px;
  font-family: var(--sans); font-size: 12.5px; font-weight: 500;
  color: var(--text-2); text-decoration: none; white-space: nowrap;
  transition: background .15s var(--ease), color .15s var(--ease);
}
.c-nav-dropdown-subitem:hover { background: var(--bg-2); color: var(--primary); }
.c-nav-dropdown-subitem:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }

.c-nav-logo { display: flex; align-items: center; justify-content: center; padding: 0 8px; }
.c-nav-logo img { height: 38px; width: auto; filter: brightness(0) invert(1); transition: filter .3s var(--ease); }
.c-nav.is-scrolled .c-nav-logo img { filter: none; }
.c-nav-icon {
  width: 40px; height: 40px; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  color: rgba(255,255,255,.92); background: none; border: 0; cursor: pointer;
  transition: background .2s var(--ease), color .2s var(--ease);
  position: relative;
}
/* Burger appears only once the inline links collapse (see the 800px breakpoint) */
.c-nav-burger { display: none; }
.c-nav-icon:hover { background: rgba(255,255,255,.14); }
.c-nav.is-scrolled .c-nav-icon { color: var(--text); }
.c-nav.is-scrolled .c-nav-icon:hover { background: rgba(11,110,110,.08); color: var(--primary); }
.c-nav-badge {
  position: absolute; top: 4px; right: 4px;
  min-width: 18px; height: 18px; padding: 0 5px;
  background: var(--accent); color: var(--text);
  border-radius: 9px; font-size: 10.5px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--sans);
}

/* ─── Hero ─── */
.c-hero {
  position: relative; min-height: auto;
  display: flex; align-items: center;
  overflow: hidden; isolation: isolate;
}
.c-hero-img {
  position: absolute; inset: 0;
  background-size: cover; background-position: center;
  transform: scale(1.04);
  animation: c-heroBreathe 18s var(--ease) infinite alternate;
  z-index: -3;
}
@keyframes c-heroBreathe { from { transform: scale(1.04); } to { transform: scale(1.10); } }
/* ── Hero environment · experiment E-1 ──────────────────────────────────────
   Gives the product a room to stand in rather than a flat gradient: a floor
   plane, one key light behind it, a contact shadow under the wheels, and a
   vignette. Pure CSS, so nothing is added to the LCP path.

   Contrast: the hero copy sits at x≈6–46%, and .c-hero-overlay's measured
   4.67:1 floor holds only while nothing lightens that band — the headroom over
   AA's 4.5:1 is 0.15, so even a few percent of white breaks it. The only
   lightening layer is the key light, which is centred at x=74% and reaches
   alpha 0 at x≈43.6% (worst case inside the copy band: 4.57:1, still AA). The
   full-width layers — horizon and vignette — therefore only ever DARKEN. The
   horizon originally carried an rgba(255,255,255,.05) highlight stop at
   y = hz+7%; full-width, it took the copy band to 4.45:1 and was removed. Keep
   that rule if these stops are retuned: nothing full-width may add white.
   Toggle via HERO_ENVIRONMENT in HeroSection.tsx. */
.c-hero-env {
  /* Focal point of the scene = where the product stands. Only these three move
     between breakpoints, so the gradient stack itself is written once. */
  --fx: 72%;   /* product centre, x */
  --fy: 78%;   /* product's ground contact, y */
  --hz: 60%;   /* horizon */
  position: absolute; inset: 0; z-index: -3; pointer-events: none;
  background:
    /* contact shadow, under the wheels */
    radial-gradient(20% 4.5% at var(--fx) var(--fy), rgba(10,44,44,.40) 0%, rgba(10,44,44,.16) 55%, rgba(10,44,44,0) 100%),
    /* key light behind the product */
    radial-gradient(46% 44% at calc(var(--fx) + 2%) 40%, rgba(255,255,255,.26) 0%, rgba(255,255,255,0) 66%),
    /* horizon — wall meets floor. Holds clear to hz+7%, then turns over in 2%,
       so the edge stays crisp without a white highlight (see contrast note). */
    linear-gradient(180deg,
      rgba(9,50,50,0) var(--hz),
      rgba(9,50,50,0) calc(var(--hz) + 7%),
      rgba(9,50,50,.10) calc(var(--hz) + 9%),
      rgba(9,50,50,.20) 100%),
    /* vignette */
    radial-gradient(120% 100% at 50% 45%, rgba(0,0,0,0) 58%, rgba(6,38,38,.26) 100%);
}
.c-hero-overlay {
  position: absolute; inset: 0; z-index: -2;
  background:
    linear-gradient(95deg, rgba(11,110,110,0.78) 0%, rgba(11,110,110,0.55) 38%, rgba(11,110,110,0.05) 70%, rgba(11,110,110,0) 100%),
    linear-gradient(180deg, rgba(11,110,110,0.30) 0%, rgba(11,110,110,0) 30%, rgba(11,110,110,0) 70%, rgba(28,43,43,0.45) 100%);
}
.c-hero-grain {
  position: absolute; inset: 0; z-index: -1;
  background-image: radial-gradient(rgba(255,255,255,0.04) 1px, transparent 1px);
  background-size: 3px 3px; mix-blend-mode: overlay; opacity: .5;
}
.c-hero-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  max-width: 1440px;
  margin: 0 auto;
  gap: 40px;
  position: relative;
  z-index: 10;
}
.c-hero-content {
  position: relative; flex: 1; max-width: 580px;
  margin-left: max(56px, 6vw); padding: 140px 0 50px; color: #fff;
}
.c-hero-image-wrapper {
  flex: 1.3;
  display: flex;
  justify-content: center;
  align-items: center;
  padding-right: max(56px, 6vw);
}
.c-hero-asset-image {
  max-width: 100%;
  height: auto;
  max-height: 80vh;
  object-fit: contain;
  transform: scale(1.5);
  filter: drop-shadow(0 30px 40px rgba(0,0,0,0.15));
}

@keyframes c-heroFloat {
  0% { transform: scale(1.2) translateY(0); filter: drop-shadow(0 30px 40px rgba(0,0,0,0.15)); }
  50% { transform: scale(1.2) translateY(-10px); filter: drop-shadow(0 40px 50px rgba(0,0,0,0.08)); }
  100% { transform: scale(1.2) translateY(0); filter: drop-shadow(0 30px 40px rgba(0,0,0,0.15)); }
}
.c-hero-eyebrow {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 6px 12px; border-radius: 999px;
  background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.22);
  backdrop-filter: blur(8px); font-size: 11.5px; letter-spacing: .04em; font-weight: 500;
  margin-bottom: 16px; font-family: var(--sans); color: #fff;
}
.c-hero-eb-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent-2); box-shadow: 0 0 10px var(--accent-2); }
.c-hero-title {
  font-family: var(--serif); font-weight: 400;
  font-size: clamp(38px, 4.8vw, 64px); line-height: 1.2; letter-spacing: -0.02em;
  margin: 0 0 24px; color: #ffffff !important;
  text-shadow: 0 2px 30px rgba(0,0,0,.18);
}
.c-hero-title em { font-style: italic; }
.c-hero-sub {
  font-size: 15px; line-height: 1.5; max-width: 480px; margin: 0 0 24px;
  color: rgba(255,255,255,0.88); font-family: var(--sans);
}
.c-hero-cta { display: flex; gap: 12px; margin-bottom: 28px; flex-wrap: wrap; }
.c-hero-trust {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  color: rgba(255,255,255,.85); font-size: 12.5px; font-family: var(--sans);
}
.c-hero-trust > div { display: inline-flex; align-items: center; gap: 8px; }
.c-hero-trust strong { color: #fff; font-weight: 700; font-size: 15px; }
.c-hero-trust .c-stars { color: var(--accent-2); display: inline-flex; gap: 1px; }
.c-hero-trust-sep { width: 1px; height: 14px; background: rgba(255,255,255,.3); }
.c-hero-scroll {
  position: absolute; bottom: 32px; left: 50%; transform: translateX(-50%);
  color: rgba(255,255,255,.7); font-size: 11px; letter-spacing: .2em; text-transform: uppercase;
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  text-decoration: none; font-family: var(--sans);
}
.c-hero-scroll-line {
  width: 1px; height: 36px;
  background: linear-gradient(to bottom, rgba(255,255,255,.6), transparent);
  position: relative; overflow: hidden;
}
.c-hero-scroll-line::after {
  content: ''; position: absolute; left: 0; top: -36px; width: 100%; height: 36px;
  background: linear-gradient(to bottom, transparent, var(--accent-2));
  animation: c-scrollDot 2s var(--ease) infinite;
}
@keyframes c-scrollDot { to { top: 36px; } }

/* ─── Marquee ─── */
.c-marquee { background: var(--text); color: var(--bg); overflow: hidden; border-top: 1px solid rgba(28,43,43,0.1); border-bottom: 1px solid rgba(28,43,43,0.1); }
.c-marquee-track { display: flex; white-space: nowrap; animation: c-marquee 50s linear infinite; padding: 16px 0; }
.c-marquee-item { display: inline-flex; align-items: center; gap: 28px; font-size: 13px; letter-spacing: .04em; padding: 0 20px; font-family: var(--sans); }
.c-marquee-dot { color: var(--accent-2); }
@keyframes c-marquee { to { transform: translateX(-33.33%); } }

/* ─── Categories — editorial split cards ─── */
.c-cats { max-width: 1440px; margin: 0 auto; padding: 60px max(28px, 4vw) 40px; }
/* Category grid — must stay clean and DENSE at 2, 4, 8, 12+ categories.
   A 300px track minimum resolves to ~4 columns across the desktop range
   (≈316px per card in a 1317px content box). The count is still decided by
   auto-fit from the available width — never hardcoded, and never a function of
   how many categories exist, which is what makes card size constant whether the
   client has 2 categories or 20.
   auto-fit (not auto-fill) is deliberate: it only collapses tracks that are
   empty across the WHOLE grid, so a lone trailing card occupies one track
   rather than stretching, while a single-category store still gets a full-width
   card.
   Below ~400px of TRACK width the split card switches to its existing compact
   layout — see the @container rule further down. */
.c-cat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 18px; }

/* Fifth column on very wide screens.
   Counter-intuitively the content box does NOT grow past ~1325px: the container
   is capped at max-width 1440px while its padding is max(28px, 4vw), so a wider
   viewport actually *shrinks* the usable width. A 5th 300px track therefore
   never fits on its own. Lowering the track FLOOR at this breakpoint is what
   lets auto-fit find room for one more column; auto-fit still decides the
   count, and the compact card layout already covers the narrower track. */
@media (min-width: 1800px) {
  .c-cat-grid { grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr)); }
}

/* The container-query container for each card. Layout-neutral by design: it is
   the grid item, and the card stretches to fill it. */
.c-cat-cell { container-type: inline-size; display: flex; }
@keyframes c-rise { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
.c-cat-card {
  position: relative; display: flex; align-items: stretch;
  width: 100%; /* fills its .c-cat-cell */
  min-height: 320px; border-radius: 22px; overflow: hidden;
  border: 1px solid var(--line); text-decoration: none; isolation: isolate;
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), border-color .35s var(--ease);
  animation: c-rise .7s var(--ease) both;
}
/* These nth-child selectors are anchored on the CELL, not the card.
   Each card is now the only child of its cell, so card-level :nth-child would
   always match 1 — collapsing the alternating tints to a single colour and
   flattening the entry stagger. Matching on the cell preserves both exactly as
   they were before the container-query wrapper was introduced. */
.c-cat-cell:nth-child(1) .c-cat-card { animation-delay: 0ms; }
.c-cat-cell:nth-child(2) .c-cat-card { animation-delay: 80ms; }
.c-cat-cell:nth-child(3) .c-cat-card { animation-delay: 160ms; }
.c-cat-cell:nth-child(4) .c-cat-card { animation-delay: 240ms; }
/* Cap the entry stagger past the fourth card. Without this every card from the
   5th on inherits a 0ms delay and the whole tail animates at once; capping also
   stops a 12-category grid from staggering for a second. Below the fold anyway. */
.c-cat-cell:nth-child(n+5) .c-cat-card { animation-delay: 300ms; }
.c-cat-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-2); border-color: transparent; }
/* Alternating soft-tinted panels: teal, then warm gold */
.c-cat-cell:nth-child(odd)  .c-cat-card { background: linear-gradient(135deg, #EAF4F3 0%, #D8ECEA 100%); }
.c-cat-cell:nth-child(even) .c-cat-card { background: linear-gradient(135deg, #F9F4E8 0%, #F0E7D2 100%); }
/* Oversized ghost numeral in the backdrop */
.c-cat-card::before {
  content: ''; position: absolute; right: -40px; bottom: -70px; width: 320px; height: 320px;
  border-radius: 50%; z-index: 0; pointer-events: none;
  transition: transform .5s var(--ease);
}
.c-cat-cell:nth-child(odd)  .c-cat-card::before { background: radial-gradient(circle, rgba(11,110,110,.10), transparent 65%); }
.c-cat-cell:nth-child(even) .c-cat-card::before { background: radial-gradient(circle, rgba(201,162,39,.14), transparent 65%); }
.c-cat-card:hover::before { transform: scale(1.25); }

.c-cat-info {
  position: relative; z-index: 1; flex: 1 1 52%; min-width: 0;
  display: flex; flex-direction: column; justify-content: center;
  padding: 40px 8px 40px 40px;
}
.c-cat-eb {
  font-family: var(--sans); font-size: 11px; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase;
  color: var(--primary); margin-bottom: 14px;
}
.c-cat-name {
  font-family: var(--serif); font-weight: 400;
  font-size: clamp(28px, 2.6vw, 38px); line-height: 1.05;
  color: var(--text); margin: 0 0 12px; letter-spacing: -0.01em;
}
.c-cat-desc {
  font-family: var(--sans); font-size: 14px; line-height: 1.6;
  color: var(--text-2); margin: 0 0 24px; max-width: 340px;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.c-cat-count { font-family: var(--sans); font-size: 12px; letter-spacing: .04em; color: var(--text-3); margin: -14px 0 22px; }
.c-cat-cta {
  display: inline-flex; align-items: center; gap: 10px; align-self: flex-start;
  font-family: var(--sans); font-size: 13.5px; font-weight: 600; color: var(--text);
}
.c-cat-arrow {
  width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0;
  background: var(--text); color: #fff;
  display: flex; align-items: center; justify-content: center;
  transition: background .3s var(--ease), transform .3s var(--ease);
}
.c-cat-card:hover .c-cat-arrow { background: var(--primary); transform: rotate(-45deg); }

.c-cat-visual {
  position: relative; z-index: 1; flex: 1 1 48%; min-width: 0;
  display: flex; align-items: center; justify-content: center; padding: 28px;
}
/* Fixed bounding box so every category image renders at the same visual size,
   regardless of the uploaded file's proportions */
.c-cat-visual img {
  width: 100%; height: 250px; object-fit: contain;
  filter: drop-shadow(0 24px 30px rgba(28,43,43,.18));
  transition: transform .6s var(--ease);
}
.c-cat-card:hover .c-cat-visual img { transform: scale(1.06) translateY(-4px); }
.c-cat-visual-ph { width: 70%; aspect-ratio: 1/1; border-radius: 50%; background: radial-gradient(circle, rgba(11,110,110,.14), transparent 70%); }

/* ─── Compact category card, driven by TRACK width (Client QA R1 Phase 2) ───
   Reuses the compact treatment that already existed for ≤640px viewports — the
   same stacked order, type sizes and image box. Nothing new is designed here.
   The trigger is the CARD's own width rather than the viewport's, because the
   denser grid makes cards narrow at desktop sizes too: 4 columns is ~316px and
   5 is ~240px, both far too tight for the side-by-side split, while the same
   card at 1 column on a tablet is 600px+ and should stay split. A viewport
   breakpoint cannot express that distinction; a container query can.
   400px is the threshold because the split layout needs roughly that much to
   fit a text panel beside the image without the heading collapsing. */
@container (max-width: 400px) {
  .c-cat-card { flex-direction: column-reverse; min-height: 0; border-radius: 16px; }
  .c-cat-info { padding: 0 20px 20px; }
  .c-cat-eb { margin-bottom: 8px; }
  .c-cat-name { font-size: 23px; margin-bottom: 8px; }
  .c-cat-desc { -webkit-line-clamp: 2; font-size: 13px; margin: 0 0 14px; max-width: none; }
  .c-cat-count { margin: -8px 0 14px; }
  .c-cat-cta { font-size: 13px; }
  .c-cat-arrow { width: 30px; height: 30px; }
  .c-cat-visual { padding: 18px 20px 6px; }
  .c-cat-visual img { height: 136px; }
}

/* ─── Products ─── */
/* `width: 100%` is load-bearing, not decoration.
   The storefront <main> is a flex column, and an `auto` CROSS-AXIS margin on a
   flex item cancels the default stretch — so this container was sized to its
   own content instead of to the viewport. A grid using
   `repeat(auto-fit, minmax(…, 1fr))` inside an indefinite-width parent can only
   ever resolve to ONE track, which is why /categories collapsed to a single
   narrow column as soon as it held more than a couple of categories, while
   /products (fixed `repeat(4, 1fr)`) looked fine. Giving the container a
   definite width restores stretch; max-width still caps it and the auto margins
   still centre it, so every page that already reached 1440px is unchanged.
   box-sizing: border-box (line 26) keeps the padding inside the 100%. */
.c-prods { width: 100%; max-width: 1440px; margin: 0 auto; padding: 60px max(28px, 4vw); }
/* ─── Category filter chips (Client QA R1 Phase 2) ───
   Reuses the existing pill vocabulary already used by pagination and the
   quote-form controls — same radius, border token, weight and hover feel — so
   the category page gains a control without gaining a new visual language.
   Wraps naturally, so a category with many filters degrades gracefully. */
.c-cat-filters {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin: 0 0 28px;
}
.c-cat-filter {
  display: inline-flex; align-items: center;
  padding: 8px 16px; border-radius: 999px;
  font-family: var(--sans); font-size: 13.5px; font-weight: 600;
  color: var(--text-2); background: #fff;
  border: 1px solid var(--line-2); text-decoration: none;
  transition: color .2s var(--ease), border-color .2s var(--ease), background .2s var(--ease);
}
.c-cat-filter:hover { color: var(--text); border-color: var(--text-3); }
.c-cat-filter.is-active {
  background: var(--primary); color: #fff; border-color: var(--primary);
}

.c-prod-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.c-prod {
  background: #fff; border-radius: 14px; overflow: hidden;
  border: 1px solid var(--line);
  /* Containing block for .c-prod-link::after (Phase 7E card-wide click target). */
  position: relative;
  transition: transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
  display: flex; flex-direction: column;
}
.c-prod:hover { transform: translateY(-4px); box-shadow: var(--shadow-2); border-color: transparent; }
.c-prod-img-wrap { position: relative; aspect-ratio: 1/1; background: #fff; overflow: hidden; border-bottom: 1px solid rgba(0,0,0,0.05); }
.c-prod-img-wrap img { width: 100%; height: 100%; object-fit: contain; padding: 24px; transition: transform .6s var(--ease); display: block; mix-blend-mode: multiply; }
.c-prod:hover .c-prod-img-wrap img { transform: scale(1.06); }
.c-prod-placeholder {
  width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--bg-2) 0%, #e8eaea 100%); color: var(--text-3);
  font-family: var(--sans); font-size: 13px;
}
.c-prod-badge {
  position: absolute; top: 12px; left: 12px;
  background: var(--text); color: var(--bg);
  font-size: 10.5px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase;
  padding: 5px 10px; border-radius: 999px; font-family: var(--sans);
}
.c-prod-badge--bestseller { background: var(--accent); color: var(--text); }
.c-prod-badge--new { background: var(--action); color: #fff; }
.c-prod-fav {
  /* Above .c-prod-link::after so the heart keeps its own click, not the card's. */
  z-index: 2;
  position: absolute; top: 10px; right: 10px; width: 34px; height: 34px; border-radius: 50%;
  background: rgba(255,255,255,.9); color: var(--text-2); border: 0; cursor: pointer;
  display: flex; align-items: center; justify-content: center; backdrop-filter: blur(6px);
  transition: color .2s var(--ease), transform .2s var(--ease);
}
.c-prod-fav:hover { color: #c0392b; transform: scale(1.1); }
.c-prod-fav.is-saved { color: #E25563; animation: c-heartpop .35s var(--ease); }
@keyframes c-heartpop { 0% { transform: scale(1); } 45% { transform: scale(1.35); } 100% { transform: scale(1); } }

/* Product-page wishlist heart — matches the 48px buy buttons beside it */
.c-pdp-fav {
  width: 48px; height: 48px; border-radius: 50%; flex-shrink: 0; align-self: center;
  display: flex; align-items: center; justify-content: center;
  background: #fff; color: var(--text-2); border: 1px solid var(--line-2); cursor: pointer;
  transition: color .2s var(--ease), border-color .2s var(--ease), background .2s var(--ease), transform .2s var(--ease);
}
.c-pdp-fav svg { width: 20px; height: 20px; }
.c-pdp-fav:hover { color: #E25563; border-color: #E25563; background: #FDEEF0; transform: scale(1.06); }
.c-pdp-fav.is-saved { color: #E25563; border-color: #E25563; background: #FDEEF0; animation: c-heartpop .35s var(--ease); }
.c-prod-body { padding: 14px; display: flex; flex-direction: column; flex: 1; }
.c-prod-cat { font-size: 10.5px; letter-spacing: .15em; text-transform: uppercase; color: var(--primary); margin-bottom: 6px; font-family: var(--sans); font-weight: 500; }
.c-prod-name { font-family: var(--serif); font-size: 16px; font-weight: 400; line-height: 1.2; margin: 0 0 4px; color: var(--text); }
.c-prod-benefit { font-size: 12px; color: var(--text-2); margin: 0 0 14px; line-height: 1.4; flex: 1; font-family: var(--sans); }
.c-prod-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.c-prod-prices { display: flex; align-items: baseline; gap: 8px; }
.c-prod-price { font-weight: 600; font-size: 17px; color: var(--text); font-family: var(--sans); }
.c-prod-mrp { font-size: 13px; color: var(--text-3); text-decoration: line-through; font-family: var(--sans); }
.c-prod-cta {
  /* Above .c-prod-link::after — keeps the CTA its own hit target and hover state. */
  position: relative; z-index: 2;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 9px 14px; border-radius: 999px;
  background: var(--bg); color: var(--text); border: 1px solid var(--line-2);
  font-size: 13px; font-weight: 500; font-family: var(--sans);
  transition: all .25s var(--ease); text-decoration: none;
}
.c-prod-cta:hover { background: var(--action); color: #fff; border-color: var(--action); }

/* ─── Card-wide click target (Client QA R1 Phase 7E) ───
   The product title is a real link; its ::after is stretched over the whole
   .c-prod so image / body / whitespace clicks navigate to the PDP too. Kept
   transparent and behind the interactive controls (z-index 1 vs their 2), so
   badges stay visible, hover/zoom still fire, and the wishlist heart and "View"
   CTA are untouched. */
.c-prod-link { color: inherit; text-decoration: none; }
.c-prod-link::after { content: ""; position: absolute; inset: 0; z-index: 1; }
/* Focus ring is drawn on the stretched area so keyboard focus outlines the whole
   card. Inset by 2px because .c-prod has overflow:hidden, which would clip an
   outward offset. */
.c-prod-link:focus-visible { outline: none; }
.c-prod-link:focus-visible::after {
  outline: 2px solid var(--primary); outline-offset: -2px; border-radius: 14px;
}

/* Trust row */
.c-trust-row {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 0; margin-top: 56px;
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  padding: 22px 0;
}
.c-trust-item { display: flex; align-items: center; gap: 14px; padding: 4px 22px; border-right: 1px solid var(--line); color: var(--primary); }
.c-trust-item:last-child { border-right: 0; }
.c-trust-item > div { display: flex; flex-direction: column; }
.c-trust-item strong { color: var(--text); font-size: 13.5px; font-weight: 600; font-family: var(--sans); }
.c-trust-item span { color: var(--text-2); font-size: 12.5px; font-family: var(--sans); }

/* ─── Statement ─── */
.c-stmt { text-align: center; padding: var(--sec-y) max(28px, 4vw); max-width: 1200px; margin: 0 auto; }
.c-stmt-eb { font-size: 12px; letter-spacing: .2em; text-transform: uppercase; color: var(--primary); margin-bottom: 28px; font-family: var(--sans); }
.c-stmt-text {
  font-family: var(--serif); font-weight: 400;
  font-size: clamp(40px, 6vw, 92px); line-height: 1.02; letter-spacing: -0.015em;
  color: var(--text); margin: 0 0 28px; text-wrap: balance;
}
.c-stmt-text em {
  background: linear-gradient(90deg, var(--primary), var(--action));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.c-stmt-sub { font-size: 16px; color: var(--text-2); max-width: 560px; margin: 0 auto; line-height: 1.6; font-family: var(--sans); }

/* ─── Testimonials ─── */
.c-testi { background: var(--bg-2); padding: var(--sec-y) max(28px, 4vw); }
.c-testi-head {
  max-width: 1280px; margin: 0 auto 40px;
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 24px; flex-wrap: wrap;
}
.c-testi-counter { display: inline-flex; align-items: baseline; gap: 6px; font-family: var(--serif); color: var(--text-2); }
.c-testi-num { font-size: 38px; color: var(--primary); }
.c-testi-sep { font-size: 24px; color: var(--text-3); }
.c-testi-tot { font-size: 22px; }
.c-testi-card {
  max-width: 1180px; margin: 0 auto; background: #fff; border-radius: 18px;
  display: grid; grid-template-columns: 1.15fr 1fr; overflow: hidden;
  box-shadow: 0 1px 2px rgba(28,43,43,.04), 0 20px 50px rgba(28,43,43,.07);
  border: 1px solid var(--line); height: 420px;
  animation: c-testiIn .5s var(--ease);
}
@keyframes c-testiIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }
.c-testi-quote-side { padding: 48px 56px; display: flex; flex-direction: column; justify-content: center; }
.c-testi-mark { font-family: var(--serif); font-size: 48px; line-height: 1; color: var(--info); margin-bottom: 18px; letter-spacing: -0.04em; }
.c-testi-title { font-family: var(--serif); font-size: 28px; line-height: 1.15; color: var(--text); margin: 0 0 16px; }
.c-testi-quote { font-family: var(--sans); font-style: italic; font-size: 14.5px; line-height: 1.6; color: var(--text-2); margin: 0 0 24px; max-width: 460px; }
.c-testi-name { color: var(--primary); font-weight: 600; font-size: 14.5px; font-family: var(--sans); }
.c-testi-role { color: var(--text-2); font-size: 13px; font-family: var(--sans); }
.c-testi-portrait { position: relative; background: var(--bg-2); overflow: hidden; }
.c-testi-portrait img { width: 100%; height: 100%; object-fit: cover; display: block; }
.c-testi-portrait-tag {
  position: absolute; bottom: 22px; right: 22px;
  background: rgba(255,255,255,.92); color: var(--text); backdrop-filter: blur(8px);
  padding: 8px 14px; border-radius: 999px; font-size: 12px; font-weight: 500;
  border: 1px solid rgba(255,255,255,.6); box-shadow: 0 6px 18px rgba(0,0,0,.08);
  font-family: var(--sans);
}
.c-testi-controls {
  max-width: 1280px; margin: 36px auto 0;
  display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap;
}
.c-testi-thumbs { display: flex; gap: 10px; flex-wrap: wrap; }
.c-testi-thumb {
  display: inline-flex; align-items: center; gap: 10px; padding: 6px 16px 6px 6px;
  background: #fff; border: 1px solid var(--line); border-radius: 999px;
  transition: all .25s var(--ease); cursor: pointer;
}
.c-testi-thumb img { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; filter: grayscale(.4); transition: filter .25s var(--ease); }
.c-testi-thumb-name { font-size: 13px; font-weight: 500; color: var(--text-2); transition: color .25s var(--ease); font-family: var(--sans); }
.c-testi-thumb:hover { border-color: var(--line-2); }
.c-testi-thumb:hover img { filter: grayscale(0); }
.c-testi-thumb.is-on { background: var(--primary); border-color: var(--primary); }
.c-testi-thumb.is-on img { filter: grayscale(0); }
.c-testi-thumb.is-on .c-testi-thumb-name { color: #fff; }
.c-testi-arrows { display: flex; gap: 10px; }
.c-testi-arrow {
  width: 48px; height: 48px; border-radius: 50%; background: #fff;
  border: 1px solid var(--line-2); display: flex; align-items: center; justify-content: center;
  color: var(--text); cursor: pointer; transition: all .25s var(--ease);
}
.c-testi-arrow:hover { background: var(--text); color: var(--bg); border-color: var(--text); }

/* ─── Social grid ─── */
.c-social { max-width: 1440px; margin: 0 auto; padding: var(--sec-y) max(28px, 4vw); }
.c-social-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 36px; flex-wrap: wrap; }
.c-social-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; max-width: 900px; }
.c-social-tile { position: relative; aspect-ratio: 4/3; border-radius: 12px; overflow: hidden; isolation: isolate; display: block; }
.c-social-tile::after { content: ''; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 60%, rgba(11,110,110,.4)); opacity: 0; transition: opacity .3s var(--ease); }
.c-social-tile:hover::after { opacity: 1; }
.c-social-tile img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); display: block; }
.c-social-tile:hover img { transform: scale(1.06); }

/* ─── Directors ─── */
.c-dir { max-width: 1440px; margin: 0 auto; padding: var(--sec-y) max(28px, 4vw); }
/* auto-fit collapses empty tracks, so N directors fill the row and stretch to
   equal widths: identical to repeat(5,1fr) for the current 5, but 4 fill evenly
   (no dead column) and 6+ add a column gracefully. min 120px keeps 5 on one row
   down to the 800px tablet breakpoint. */
.c-dir-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 22px; }
.c-dir-card { animation: c-rise .7s var(--ease) both; }
.c-dir-card:nth-child(1) { animation-delay: 0ms; }
.c-dir-card:nth-child(2) { animation-delay: 70ms; }
.c-dir-card:nth-child(3) { animation-delay: 140ms; }
.c-dir-card:nth-child(4) { animation-delay: 210ms; }
.c-dir-card:nth-child(5) { animation-delay: 280ms; }
.c-dir-photo {
  position: relative; aspect-ratio: 3/4; border-radius: 16px; overflow: hidden;
  background: var(--bg-2); isolation: isolate;
}
.c-dir-photo img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .6s var(--ease); }
.c-dir-card:hover .c-dir-photo img { transform: scale(1.05); }
.c-dir-meta { padding: 16px 4px 0; }
.c-dir-name { font-family: var(--serif); font-size: 19px; line-height: 1.2; color: var(--text); }
.c-dir-role { font-family: var(--sans); font-size: 12.5px; letter-spacing: .03em; color: var(--text-2); margin-top: 5px; }

/* ─── Certifications ─── */
/* padding-top stays 0 on purpose: the strip belongs to the Directors block above
   it, so the pair reads as one unit rather than two sections. */
.c-cert { max-width: 1440px; margin: 0 auto; padding: 0 max(28px, 4vw) var(--sec-y); }
/* ONE ROW, ALWAYS. The compliance logos are a trust strip, not a gallery: the
   old repeat(5, 1fr) grid put nine of them on 5 + 4 lines. flex-basis 0 with
   nowrap gives every card an equal share of the available width, so N logos
   stay on a single line; under 800px the same row scrolls sideways rather than
   wrapping (see the breakpoint below). */
.c-cert-grid {
  display: flex; flex-wrap: nowrap; gap: clamp(10px, 1.1vw, 16px);
  max-width: 1160px; margin: 0 auto;
}
.c-cert-grid:focus-visible { outline: 2px solid var(--primary); outline-offset: 4px; border-radius: 14px; }
.c-cert-card {
  flex: 1 1 0; min-width: 0;
  display: flex; align-items: center; justify-content: center;
  /* Fixed height rather than aspect-ratio: the logos are near-square, so a 3/2
     card capped their height at two-thirds of the column and shrank them to
     ~50px once nine shared the row. */
  height: 96px; padding: 12px; background: #fff;
  border: 1px solid var(--line); border-radius: 14px;
  transition: transform .25s var(--ease), box-shadow .25s var(--ease);
  animation: c-rise .7s var(--ease) both;
}
.c-cert-card:hover { transform: translateY(-4px); box-shadow: 0 12px 30px rgba(0,0,0,.07); }
.c-cert-card img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }

/* ─── Footer ─── */
.c-foot { background: var(--bg-2); padding: 80px max(28px, 4vw) 28px; }
.c-foot-top { max-width: 1440px; margin: 0 auto; display: grid; grid-template-columns: 1.4fr 2fr; gap: 60px; padding-bottom: 60px; }
.c-foot-brand { max-width: 380px; }
.c-foot-brandrow { display: flex; align-items: flex-start; flex-wrap: wrap; gap: 18px 28px; margin-bottom: 32px; }
/* Wrap the whole VMS block to its own line rather than squeezing its tagline. */
.c-foot-brandrow > * { flex: none; }
.c-foot-logo { height: 44px; width: auto; display: block; }
.c-foot-news { display: flex; border: 1px solid var(--line-2); border-radius: 999px; padding: 4px; background: #fff; margin-bottom: 28px; transition: border-color .2s var(--ease); }
.c-foot-news:focus-within { border-color: var(--primary); }
.c-foot-news input { flex: 1; border: 0; background: transparent; padding: 10px 16px; font: inherit; font-size: 13px; color: var(--text); outline: 0; }
.c-foot-news button { display: inline-flex; align-items: center; gap: 6px; background: var(--text); color: var(--bg); padding: 10px 18px; border-radius: 999px; font-size: 13px; font-weight: 500; transition: background .25s var(--ease); font-family: var(--sans); border: 0; cursor: pointer; }
.c-foot-news button:hover { background: var(--primary); }
.c-foot-helpline { display: flex; flex-direction: column; gap: 4px; padding: 16px 18px; border: 1px solid var(--line); border-radius: 14px; background: rgba(255,255,255,.5); }
.c-foot-helpline > span { font-size: 11.5px; color: var(--text-2); letter-spacing: .04em; text-transform: uppercase; font-family: var(--sans); }
.c-foot-helpline strong { font-family: var(--serif); font-size: 26px; color: var(--primary); font-weight: 400; }
.c-foot-helpline > span:last-child { text-transform: none; letter-spacing: normal; font-size: 12px; }
.c-foot-social { display: flex; gap: 10px; margin-top: 18px; }
.c-foot-social a { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 999px; border: 1px solid var(--line); background: rgba(255,255,255,.5); color: var(--text-2); transition: color .2s var(--ease), background .2s var(--ease), border-color .2s var(--ease); }
.c-foot-social a:hover { color: #fff; background: var(--primary); border-color: var(--primary); }
.c-foot-social a:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
/* 8px = (44px Careline mark − 28px VMS mark) / 2, so the two logos share an
   optical centreline while the VMS tagline hangs below. */
.c-foot-parent { margin-top: 8px; }
.c-foot-parent-logo { height: 28px; width: auto; display: block; opacity: .6; }
.c-foot-parent-tag { font-family: var(--sans); font-size: 11.5px; line-height: 1.4; color: var(--text-2); margin: 7px 0 0; }
.c-foot-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; }
.c-foot-col h4 { font-size: 11.5px; letter-spacing: .15em; text-transform: uppercase; color: var(--primary); margin: 6px 0 18px; font-weight: 600; font-family: var(--sans); }
.c-foot-col ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
.c-foot-col a, .c-foot-col .c-foot-link-btn { font-size: 14px; color: var(--text); transition: color .2s var(--ease); text-decoration: none; font-family: var(--sans); }
.c-foot-col a:hover, .c-foot-col .c-foot-link-btn:hover { color: var(--primary); }
/* Bulk / Hospital renders as a <button> (it opens a modal, not a route), so
   it needs the UA button chrome reset to read identically to its <a> siblings. */
.c-foot-col .c-foot-link-btn { display: inline-block; background: none; border: 0; padding: 0; margin: 0; cursor: pointer; text-align: left; }
.c-foot-bottom { max-width: 1440px; margin: 0 auto; display: flex; justify-content: space-between; gap: 24px; padding-top: 24px; border-top: 1px solid var(--line); font-size: 12px; color: var(--text-2); flex-wrap: wrap; font-family: var(--sans); }
.c-foot-legal { display: flex; flex-wrap: wrap; gap: 10px 18px; }
.c-foot-legal a { text-decoration: none; color: var(--text-2); transition: color .2s; }
.c-foot-legal a:hover { color: var(--primary); }

/* ─── Cart drawer ─── */
.c-drawer-scrim { position: fixed; inset: 0; background: rgba(16,32,32,.52); backdrop-filter: blur(6px) saturate(120%); -webkit-backdrop-filter: blur(6px) saturate(120%); opacity: 0; pointer-events: none; transition: opacity .4s var(--ease); z-index: 80; }
.c-drawer-scrim.is-on { opacity: 1; pointer-events: auto; }
.c-drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(468px, 100vw); background: var(--bg); border-radius: 24px 0 0 24px; overflow: hidden; transform: translateX(100%); transition: transform .46s var(--ease); z-index: 90; display: flex; flex-direction: column; box-shadow: -40px 0 90px rgba(11,58,58,.28), -8px 0 24px rgba(0,0,0,.10); }
.c-drawer.is-on { transform: translateX(0); }
@media (max-width: 520px) { .c-drawer { border-radius: 0; } }

/* Header — deep, refined teal with a soft gold glow */
.c-drawer-head { position: relative; padding: 24px 24px 22px; display: flex; justify-content: space-between; align-items: center; background: linear-gradient(155deg, #0a4a4a 0%, var(--primary) 100%); flex-shrink: 0; overflow: hidden; }
.c-drawer-head::before { content: ''; position: absolute; top: -60%; right: -8%; width: 260px; height: 260px; background: radial-gradient(circle, rgba(232,196,90,.22), transparent 70%); pointer-events: none; }
.c-drawer-head::after { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 1px; background: rgba(255,255,255,.16); }
.c-drawer-head-left { position: relative; display: flex; align-items: center; gap: 14px; }
.c-drawer-head-icon { width: 44px; height: 44px; border-radius: 14px; background: rgba(255,255,255,.12); border: 1px solid rgba(232,196,90,.5); display: flex; align-items: center; justify-content: center; color: #fff; flex-shrink: 0; box-shadow: inset 0 1px 0 rgba(255,255,255,.14); }
.c-drawer-head-title { font-family: var(--serif); font-size: 22px; font-weight: 400; color: #fff; line-height: 1; margin-bottom: 4px; letter-spacing: .01em; }
.c-drawer-head-sub { font-family: var(--sans); font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--accent-2); }
.c-drawer-close { position: relative; width: 38px; height: 38px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,.10); border: 1px solid rgba(255,255,255,.20); cursor: pointer; color: rgba(255,255,255,.9); transition: background .2s var(--ease), transform .3s var(--ease); }
.c-drawer-close:hover { background: rgba(255,255,255,.22); color: #fff; transform: rotate(90deg); }

/* Body */
.c-drawer-body { flex: 1; overflow-y: auto; padding: 0; scroll-behavior: smooth; background: linear-gradient(180deg, #fbfcfc, var(--bg) 140px); }
.c-drawer-body::-webkit-scrollbar { width: 5px; }
.c-drawer-body::-webkit-scrollbar-track { background: transparent; }
.c-drawer-body::-webkit-scrollbar-thumb { background: var(--line-2); border-radius: 4px; }

/* Empty state */
.c-drawer-empty { padding: 64px 32px 48px; text-align: center; display: flex; flex-direction: column; align-items: center; }
.c-drawer-empty-ic { width: 76px; height: 76px; border-radius: 50%; background: linear-gradient(135deg, #EBF8F7, #D0F0EE); display: flex; align-items: center; justify-content: center; margin: 0 auto 22px; color: var(--primary); box-shadow: 0 8px 24px rgba(11,110,110,.14); }
.c-drawer-empty-title { font-family: var(--serif); font-size: 23px; color: var(--text); margin-bottom: 10px; }
.c-drawer-empty p { font-size: 14px; line-height: 1.6; color: var(--text-2); margin: 0 0 28px; font-family: var(--sans); max-width: 260px; }
.c-drawer-browse-btn { display: inline-flex; align-items: center; gap: 8px; padding: 13px 28px; border-radius: 999px; background: var(--primary); color: #fff; font-size: 14px; font-weight: 500; font-family: var(--sans); text-decoration: none; transition: background .2s var(--ease), transform .2s var(--ease), box-shadow .25s var(--ease); box-shadow: 0 8px 20px rgba(11,110,110,.24); }
.c-drawer-browse-btn:hover { background: #0a5757; transform: translateY(-1px); box-shadow: 0 12px 26px rgba(11,110,110,.32); }

/* Cart items — floating cards */
.c-bag-list { padding: 16px 14px 6px; display: flex; flex-direction: column; gap: 8px; }
.c-bag-item { display: grid; grid-template-columns: 76px 1fr auto; gap: 14px; padding: 12px; border-radius: 16px; border: 1px solid transparent; align-items: start; transition: background .2s var(--ease), border-color .2s var(--ease), box-shadow .25s var(--ease); animation: c-rise .5s var(--ease) both; }
.c-bag-item:hover { background: #fff; border-color: var(--line); box-shadow: var(--shadow-1); }
.c-bag-item:nth-child(1) { animation-delay: .02s; }
.c-bag-item:nth-child(2) { animation-delay: .06s; }
.c-bag-item:nth-child(3) { animation-delay: .10s; }
.c-bag-item:nth-child(4) { animation-delay: .14s; }
.c-bag-item:nth-child(5) { animation-delay: .18s; }
.c-bag-thumb { position: relative; width: 76px; height: 76px; border-radius: 14px; overflow: hidden; background: var(--bg-2); border: 1px solid var(--line); flex-shrink: 0; }
.c-bag-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.c-bag-item:hover .c-bag-thumb img { transform: scale(1.06); }
.c-bag-thumb-ph { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: var(--text-3); }
.c-bag-meta { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.c-bag-name { font-family: var(--serif); font-size: 15.5px; line-height: 1.25; color: var(--text); text-decoration: none; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.c-bag-name:hover { color: var(--primary); }
.c-bag-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 12px; }
.c-bag-qty { display: inline-flex; align-items: center; border: 1px solid var(--line-2); border-radius: 999px; overflow: hidden; background: #fff; }
.c-bag-qty button { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; transition: background .15s var(--ease), color .15s var(--ease); border: 0; background: none; cursor: pointer; font-family: var(--sans); font-size: 16px; color: var(--text-2); }
.c-bag-qty button:hover:not(:disabled) { background: var(--primary); color: #fff; }
.c-bag-qty button:disabled { opacity: .3; cursor: not-allowed; }
.c-bag-qty span { padding: 0 10px; font-size: 13px; font-weight: 600; font-family: var(--sans); color: var(--text); min-width: 24px; text-align: center; }
.c-bag-price { font-weight: 700; font-size: 15px; font-family: var(--sans); color: var(--text); letter-spacing: .01em; }
.c-bag-x { width: 26px; height: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--text-3); background: none; border: 0; cursor: pointer; transition: background .15s, color .15s; flex-shrink: 0; }
.c-bag-x:hover { background: #FEE2E2; color: #DC2626; }

/* ── Suggested products ── */
/* ─── Cart email step · Client QA R2 Phase 2E ───────────────────────────────
   Layered on .c-drawer-empty rather than replacing it, so the email step
   inherits the drawer's existing centred layout, icon medallion and type scale
   — the drawer is not redesigned, it gains one more state. The field and button
   are .c-news-input / .c-news-btn, already defined for the newsletter form.
   Padding is tightened from the empty state's 64px because this step appears
   with a full bag behind it and should not push the fold. */
.c-cart-gate { padding: 40px 28px 32px; }
.c-cart-gate .c-drawer-empty p { margin-bottom: 20px; }
.c-cart-gate-form {
  display: flex; flex-direction: column; gap: 10px;
  width: 100%; max-width: 320px; margin: 0 auto;
}
/* The newsletter field is a ROW control: `.c-news-input { flex: 1 1 240px }`
   sets flex-BASIS, which resolves along the container's MAIN axis. In the
   footer that axis is horizontal, so 240px is a sensible min width. This form
   is `flex-direction: column`, so the same declaration set a 240px HEIGHT —
   a ~320x240 box carrying the newsletter's `border-radius: 999px`, which is
   why it rendered as a giant oval. The `width: 100%` below fixed the width and
   left the height untouched, so it never showed up as a width bug.

   Reset the flex so the field sizes to its own content, and give the pair the
   drawer's card radius (14px, as .c-bag-item/.c-suggest-card) rather than the
   newsletter's pill. Scoped to .c-cart-gate-form — the footer newsletter and
   every other input on the site are untouched. */
.c-cart-gate-form .c-news-input,
.c-cart-gate-form .c-news-btn {
  width: 100%;
  flex: 0 0 auto;
  min-height: 54px;
  border-radius: 14px;
}
.c-cart-gate-form .c-news-input[aria-invalid='true'] {
  border-color: #d14343; box-shadow: 0 0 0 4px rgba(209, 67, 67, .12);
}
/* Reserves its line so an appearing error does not shift the button under the
   shopper's finger mid-tap. */
.c-cart-gate-msg { min-height: 20px; margin-top: 10px; }
.c-cart-gate-err {
  margin: 0; font-family: var(--sans); font-size: 13px; font-weight: 600;
  color: #b3261e; line-height: 1.4;
}
.c-cart-gate-note {
  margin: 14px auto 0; max-width: 300px;
  font-family: var(--sans); font-size: 12px; line-height: 1.5; color: var(--text-3);
}
@media (max-width: 520px) {
  .c-cart-gate { padding: 32px 20px 28px; }
  /* Full-width controls on a phone, matching the hero and PDP conventions. */
  .c-cart-gate-form { max-width: none; }
}

.c-suggest { border-top: 1px solid var(--line); margin-top: 8px; padding: 20px 0 8px; background: linear-gradient(180deg, #fafbfb, var(--bg)); }
.c-suggest-hd { padding: 0 24px 14px; display: flex; align-items: center; gap: 12px; }
.c-suggest-hd span { font-size: 10.5px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--text-3); font-family: var(--sans); white-space: nowrap; }
.c-suggest-hd::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.c-suggest-row { display: flex; gap: 10px; overflow-x: auto; padding: 2px 24px 16px; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; }
.c-suggest-row::-webkit-scrollbar { height: 0; }

/* Suggestion cards — 108px wide, soft-elevated */
.c-suggest-card { flex-shrink: 0; width: 108px; display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 14px; overflow: hidden; background: #fff; scroll-snap-align: start; transition: border-color .2s var(--ease), box-shadow .25s var(--ease), transform .25s var(--ease); }
.c-suggest-card:hover { border-color: transparent; box-shadow: 0 10px 26px rgba(11,110,110,.16); transform: translateY(-3px); }
.c-suggest-card.is-added { border-color: #6EE7B7; box-shadow: 0 6px 18px rgba(5,150,105,.18); }

/* Image wrapper holds the img and the + badge */
.c-suggest-img-wrap { position: relative; }
.c-suggest-img { display: block; aspect-ratio: 1/1; background: var(--bg-2); overflow: hidden; }
.c-suggest-img img { width: 100%; height: 100%; object-fit: contain; padding: 8px; display: block; transition: transform .4s var(--ease); }
.c-suggest-card:hover .c-suggest-img img { transform: scale(1.05); }

/* Circular + button in bottom-right corner of image */
.c-suggest-add {
  position: absolute; bottom: 6px; right: 6px;
  width: 26px; height: 26px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--primary); color: #fff;
  border: 2px solid #fff; cursor: pointer;
  transition: background .2s var(--ease), transform .2s var(--ease);
  box-shadow: 0 2px 8px rgba(11,110,110,.35);
}
.c-suggest-add:hover { background: var(--primary-2); transform: scale(1.12); }
.c-suggest-add.is-added { background: #059669; cursor: default; transform: none; }

/* Card text */
.c-suggest-body { padding: 8px 9px 10px; }
.c-suggest-name { font-family: var(--sans); font-size: 11px; font-weight: 500; color: var(--text); line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-decoration: none; margin-bottom: 3px; min-height: 30px; }
.c-suggest-name:hover { color: var(--primary); }
.c-suggest-price { font-size: 12px; font-weight: 700; color: var(--primary); font-family: var(--sans); }

/* Skeleton shimmer */
.c-skel-block { animation: c-shimmer 1.4s ease-in-out infinite; background: var(--bg-2) !important; }
.c-skel-line { height: 11px; background: var(--line); border-radius: 4px; animation: c-shimmer 1.4s ease-in-out infinite; }
.c-skel-btn { height: 30px; border-radius: 999px; background: var(--line); animation: c-shimmer 1.4s ease-in-out infinite; margin-top: 4px; }
@keyframes c-shimmer { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }

/* Footer */
.c-drawer-foot { padding: 18px 22px 22px; border-top: 1px solid var(--line); background: #fff; flex-shrink: 0; box-shadow: 0 -10px 28px rgba(28,43,43,.05); }
.c-drawer-totals { margin-bottom: 16px; display: flex; flex-direction: column; gap: 8px; }
.c-drawer-line { display: flex; justify-content: space-between; align-items: baseline; font-size: 14px; font-family: var(--sans); color: var(--text-2); }
.c-drawer-line strong { font-weight: 400; font-size: 22px; color: var(--text); font-family: var(--serif); }
.c-drawer-line--sm { font-size: 12.5px; color: var(--text-3); }
/* Discount line — same row rhythm as the others, only the accent differs, so a
   discounted bag reads as the same summary rather than a new component. */
.c-drawer-line--discount { color: var(--primary); }
.c-drawer-line--discount strong { font-size: 13px; font-family: var(--sans); font-weight: 700; color: var(--primary); }

/* ─── Cart-drawer coupon (Client QA R1 Phase 3) ───
   Reuses the drawer's existing type scale, border token and radius language. */
.c-drawer-coupon { margin-bottom: 14px; }
.c-drawer-coupon-label {
  display: flex; align-items: center; gap: 6px;
  font-family: var(--sans); font-size: 11.5px; font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase;
  color: var(--text-3); margin-bottom: 7px;
}
.c-drawer-coupon-row { display: flex; gap: 8px; }
.c-drawer-coupon-input {
  flex: 1 1 auto; min-width: 0;
  padding: 10px 12px; border-radius: 10px;
  border: 1px solid var(--line-2); background: var(--bg);
  font-family: var(--sans); font-size: 13.5px; color: var(--text);
}
.c-drawer-coupon-input:focus { outline: 2px solid var(--primary); outline-offset: -1px; }
.c-drawer-coupon-apply {
  flex: 0 0 auto; padding: 10px 16px; border-radius: 10px; border: none;
  background: var(--text); color: #fff; cursor: pointer;
  font-family: var(--sans); font-size: 13px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center; min-width: 68px;
}
.c-drawer-coupon-apply:disabled { opacity: .45; cursor: not-allowed; }
.c-drawer-coupon-applied {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 9px 12px; border-radius: 10px;
  background: rgba(11,110,110,.08); border: 1px solid rgba(11,110,110,.22);
  font-family: var(--sans); font-size: 13px; font-weight: 700; color: var(--primary);
}
.c-drawer-coupon-applied > span { display: inline-flex; align-items: center; gap: 7px; }
.c-drawer-coupon-remove {
  background: none; border: none; cursor: pointer; padding: 4px;
  color: var(--primary); display: inline-flex; align-items: center; border-radius: 6px;
}
.c-drawer-coupon-remove:hover { background: rgba(11,110,110,.12); }
.c-drawer-coupon-error {
  margin: 7px 0 0; font-family: var(--sans); font-size: 12px; font-weight: 600; color: #DC2626;
}
.c-drawer-free { color: var(--action); font-weight: 700; font-size: 12.5px; }
.c-drawer-cta { position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 16px 22px; border-radius: 999px; background: linear-gradient(120deg, var(--action), #17a08f); color: #fff; font-size: 15px; font-weight: 600; font-family: var(--sans); letter-spacing: .01em; text-decoration: none; border: 0; cursor: pointer; transition: transform .2s var(--ease), box-shadow .3s var(--ease); box-shadow: 0 10px 26px rgba(26,158,143,.4); }
.c-drawer-cta::after { content: ''; position: absolute; top: 0; left: -60%; width: 40%; height: 100%; background: linear-gradient(100deg, transparent, rgba(255,255,255,.35), transparent); transform: skewX(-18deg); transition: left .6s var(--ease); }
.c-drawer-cta:hover { transform: translateY(-2px); box-shadow: 0 16px 36px rgba(26,158,143,.5); }
.c-drawer-cta:hover::after { left: 130%; }
.c-drawer-cta svg { position: relative; transition: transform .25s var(--ease); }
.c-drawer-cta:hover svg { transform: translateX(4px); }
.c-drawer-mini { font-size: 11.5px; color: var(--text-3); text-align: center; margin: 12px 0 0; font-family: var(--sans); line-height: 1.4; }

/* Respect reduced-motion preferences */
@media (prefers-reduced-motion: reduce) {
  .c-bag-item { animation: none; }
  .c-drawer, .c-drawer-scrim, .c-drawer-cta::after { transition-duration: .01ms; }
}

/* ─── Wishlist page ─── */
.c-wish { max-width: 1440px; margin: 0 auto; padding: 150px max(28px, 4vw) 90px; width: 100%; }
.c-wish-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 44px; flex-wrap: wrap; }
.c-wish-meta { font-family: var(--sans); font-size: 14px; color: var(--text-2); margin: 14px 0 0; }
.c-wish-meta strong { color: var(--text); font-weight: 700; }
.c-wish-addall {
  display: inline-flex; align-items: center; gap: 9px;
  padding: 13px 24px; border-radius: 999px;
  background: var(--text); color: #fff;
  font-family: var(--sans); font-size: 14px; font-weight: 600;
  border: 0; cursor: pointer;
  transition: background .25s var(--ease), transform .2s var(--ease), box-shadow .25s var(--ease);
}
.c-wish-addall:hover { background: var(--primary); transform: translateY(-1px); box-shadow: 0 10px 24px rgba(11,110,110,.28); }

/* Empty state */
.c-wish-empty { text-align: center; padding: 60px 24px 80px; display: flex; flex-direction: column; align-items: center; }
.c-wish-empty-ic {
  width: 84px; height: 84px; border-radius: 50%; color: #E25563;
  background: linear-gradient(135deg, #FDEEF0, #FADDE1);
  display: flex; align-items: center; justify-content: center; margin-bottom: 24px;
  box-shadow: 0 10px 28px rgba(226,85,99,.16);
}
.c-wish-empty h2 { font-family: var(--serif); font-size: 30px; font-weight: 400; color: var(--text); margin: 0 0 12px; }
.c-wish-empty p { font-family: var(--sans); font-size: 14.5px; line-height: 1.65; color: var(--text-2); max-width: 400px; margin: 0 0 30px; }
.c-wish-inline-heart {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%; background: #FDEEF0; color: #E25563;
  vertical-align: -5px; margin: 0 2px;
}

/* Grid */
.c-wish-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(270px, 100%), 1fr)); gap: 18px; }
.c-wish-card {
  position: relative; display: flex; flex-direction: column;
  background: #fff; border: 1px solid var(--line); border-radius: 18px; overflow: hidden;
  transition: transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
  animation: c-rise .6s var(--ease) both;
}
.c-wish-card:nth-child(2) { animation-delay: 60ms; }
.c-wish-card:nth-child(3) { animation-delay: 120ms; }
.c-wish-card:nth-child(4) { animation-delay: 180ms; }
.c-wish-card:nth-child(n+5) { animation-delay: 240ms; }
.c-wish-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-2); border-color: transparent; }
.c-wish-card.is-unavailable { opacity: .68; }
.c-wish-remove {
  position: absolute; top: 12px; right: 12px; z-index: 2;
  width: 30px; height: 30px; border-radius: 50%;
  background: rgba(255,255,255,.92); color: var(--text-3);
  border: 1px solid var(--line); cursor: pointer; backdrop-filter: blur(6px);
  display: flex; align-items: center; justify-content: center;
  transition: background .2s var(--ease), color .2s var(--ease), transform .2s var(--ease);
}
.c-wish-remove:hover { background: #FEE2E2; color: #DC2626; border-color: transparent; transform: scale(1.08); }
.c-wish-drop {
  position: absolute; top: 14px; left: 14px; z-index: 2;
  padding: 5px 11px; border-radius: 999px;
  background: var(--accent-2); color: var(--text);
  font-family: var(--sans); font-size: 10.5px; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase;
  box-shadow: 0 4px 12px rgba(201,162,39,.3);
}
.c-wish-drop--out { background: var(--bg-2); color: var(--text-2); box-shadow: none; }
.c-wish-img { display: block; aspect-ratio: 4/3; background: #fff; border-bottom: 1px solid var(--line); overflow: hidden; }
.c-wish-img img { width: 100%; height: 100%; object-fit: contain; padding: 22px; mix-blend-mode: multiply; transition: transform .5s var(--ease); }
.c-wish-card:hover .c-wish-img img { transform: scale(1.05); }
.c-wish-img-ph { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: var(--text-3); background: var(--bg-2); }
.c-wish-body { display: flex; flex-direction: column; flex: 1; padding: 16px 16px 18px; }
.c-wish-cat { font-family: var(--sans); font-size: 10.5px; font-weight: 500; letter-spacing: .15em; text-transform: uppercase; color: var(--primary); margin-bottom: 6px; }
.c-wish-name {
  font-family: var(--serif); font-size: 16.5px; line-height: 1.25; color: var(--text); text-decoration: none;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  margin-bottom: 8px; flex: 1;
}
.c-wish-name:hover { color: var(--primary); }
.c-wish-price { display: flex; align-items: baseline; gap: 8px; margin-bottom: 14px; font-family: var(--sans); }
.c-wish-price strong { font-size: 17px; font-weight: 700; color: var(--text); }
.c-wish-price s { font-size: 13px; color: var(--text-3); }
.c-wish-actions { display: flex; gap: 8px; }
.c-wish-add {
  flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 11px 16px; border-radius: 999px;
  background: var(--action); color: #fff;
  font-family: var(--sans); font-size: 13.5px; font-weight: 600;
  border: 0; cursor: pointer;
  transition: background .25s var(--ease), box-shadow .25s var(--ease);
  box-shadow: 0 6px 16px rgba(26,158,143,.28);
}
.c-wish-add:hover:not(:disabled) { background: #15897c; box-shadow: 0 10px 22px rgba(26,158,143,.36); }
.c-wish-add.is-added { background: #059669; }
.c-wish-add:disabled { background: var(--bg-2); color: var(--text-3); cursor: not-allowed; box-shadow: none; }
.c-wish-view {
  width: 42px; border-radius: 999px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--line-2); color: var(--text-2); text-decoration: none;
  transition: border-color .2s var(--ease), color .2s var(--ease), background .2s var(--ease);
}
.c-wish-view:hover { border-color: var(--primary); color: var(--primary); background: rgba(11,110,110,.05); }

/* Reassurance row */
.c-wish-trust {
  display: flex; align-items: center; justify-content: center; gap: 16px; flex-wrap: wrap;
  margin-top: 48px; padding-top: 28px; border-top: 1px solid var(--line);
  font-family: var(--sans); font-size: 12.5px; color: var(--text-2);
}
.c-wish-trust-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--line-2); }

/* ─── Search overlay ─── */
.c-search { position: fixed; inset: 0; z-index: 100; opacity: 0; pointer-events: none; transition: opacity .25s var(--ease); }
.c-search.is-on { opacity: 1; pointer-events: auto; }
.c-search-scrim { position: absolute; inset: 0; background: rgba(28,43,43,.55); backdrop-filter: blur(6px); }
.c-search-box { position: relative; max-width: 680px; margin: 80px auto 0; background: var(--bg); border-radius: 20px; overflow: hidden; border: 1px solid var(--line); box-shadow: 0 30px 80px rgba(0,0,0,.24); transform: translateY(-12px); transition: transform .3s var(--ease); }
.c-search.is-on .c-search-box { transform: translateY(0); }
.c-search-head { display: flex; align-items: center; gap: 14px; padding: 18px 22px; border-bottom: 1px solid var(--line); color: var(--text-2); }
.c-search-head input { flex: 1; border: 0; background: transparent; outline: 0; font: inherit; font-size: 16px; color: var(--text); font-family: var(--sans); }
.c-search-head button { color: var(--text-2); width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: background .15s var(--ease); border: 0; background: none; cursor: pointer; }
.c-search-head button:hover { background: var(--bg-2); }
.c-search-body { max-height: 60vh; overflow-y: auto; padding: 18px 22px 22px; }
.c-search-section { font-size: 11px; letter-spacing: .15em; text-transform: uppercase; color: var(--text-2); font-weight: 600; margin-bottom: 12px; font-family: var(--sans); }
.c-search-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.c-search-chip { padding: 8px 14px; border-radius: 999px; background: var(--bg-2); font-size: 13px; transition: background .2s var(--ease); border: 0; cursor: pointer; font-family: var(--sans); color: var(--text); text-decoration: none; }
.c-search-chip:hover { background: var(--primary); color: #fff; }

/* ── Live search suggestions ── */
.c-search-results { display: flex; flex-direction: column; gap: 2px; }
.c-search-result {
  display: flex; align-items: center; gap: 12px;
  padding: 7px 10px; border-radius: 12px;
  text-decoration: none; transition: background .15s var(--ease);
}
.c-search-result:hover { background: var(--bg-2); }
.c-search-result-img {
  width: 40px; height: 40px; border-radius: 10px; overflow: hidden; flex-shrink: 0;
  background: var(--bg-2); border: 1px solid var(--line);
  display: flex; align-items: center; justify-content: center; color: var(--text-3);
}
.c-search-result-img img { width: 100% !important; height: 100% !important; object-fit: cover; display: block; }
.c-search-result-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.c-search-result-name {
  font-family: var(--sans); font-size: 13.5px; font-weight: 500; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.c-search-result:hover .c-search-result-name { color: var(--primary); }
.c-search-result-cat { font-family: var(--sans); font-size: 11.5px; color: var(--text-3); }
.c-search-result-price { font-family: var(--sans); font-size: 13.5px; font-weight: 700; color: var(--primary); flex-shrink: 0; }
.c-search-all {
  display: block; margin-top: 8px; padding: 12px;
  border-top: 1px solid var(--line); text-align: center;
  font-family: var(--sans); font-size: 13px; font-weight: 600; color: var(--primary);
  text-decoration: none;
}
.c-search-all:hover { text-decoration: underline; }
.c-search-none { text-align: center; padding: 20px 0 10px; }
.c-search-none p { font-family: var(--sans); font-size: 14px; color: var(--text-2); margin: 0 0 16px; }
.c-search-none .c-search-chip { display: inline-block; }

/* ─── Mobile menu ─── */
.c-mobile-menu {
  display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 45;
  background: rgba(255,255,255,0.98);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
  padding: 104px 20px calc(28px + env(safe-area-inset-bottom, 0px));
  flex-direction: column; gap: 20px;
  overflow-y: auto; overscroll-behavior: contain;
}
.c-mobile-menu.is-on { display: flex; }

.c-mobile-nav { display: flex; flex-direction: column; }

/* One tap-target per line — 56px tall, hairline separated */
.c-mobile-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; min-height: 56px; padding: 8px 4px;
  font-family: var(--sans); font-weight: 500; font-size: 17px;
  color: var(--text); text-decoration: none; text-align: left;
  background: none; border: 0; border-bottom: 1px solid var(--line);
  cursor: pointer;
}
.c-mobile-row:active { color: var(--primary); }

/* Categories accordion — starts collapsed, expands on tap */
.c-mobile-acc-caret { color: var(--text-3); transition: transform .25s var(--ease); flex-shrink: 0; }
.c-mobile-acc.is-open .c-mobile-acc-caret { transform: rotate(180deg); color: var(--primary); }
.c-mobile-acc.is-open .c-mobile-acc-trigger { color: var(--primary); border-bottom-color: transparent; }
.c-mobile-acc-panel {
  display: grid; grid-template-rows: 0fr;
  transition: grid-template-rows .28s var(--ease);
  border-bottom: 1px solid var(--line);
}
.c-mobile-acc.is-open .c-mobile-acc-panel { grid-template-rows: 1fr; }
.c-mobile-acc-panel > * { overflow: hidden; }

.c-mobile-subnav { display: flex; flex-direction: column; }
.c-mobile-subnav a {
  display: flex; align-items: center; min-height: 46px;
  padding: 4px 4px 4px 16px; margin-left: 4px;
  border-left: 2px solid var(--line);
  font-family: var(--sans); font-size: 15px; font-weight: 500;
  color: var(--text-2); text-decoration: none;
}
.c-mobile-subnav a:active { color: var(--primary); border-left-color: var(--primary); }

/* ─── Mobile subcategories · Client QA R2 Phase 2F ───
   A second accordion level inside the Categories sheet, built on the SAME
   grid-template-rows technique as .c-mobile-acc so the animation and the
   collapsed-by-default behaviour match the level above it.

   The row carries two targets on purpose: the name navigates to the whole
   category, the caret expands. On touch there is no hover to separate those
   intents, and collapsing them into one control would either hide the parent
   category or turn every tap into a navigation. Both meet the 44px minimum. */
.c-mobile-sub2-row { display: flex; align-items: center; }
.c-mobile-sub2-row a { flex: 1; min-width: 0; }
.c-mobile-sub2-toggle {
  flex-shrink: 0; width: 46px; min-height: 46px;
  display: flex; align-items: center; justify-content: center;
  background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--text-3);
}
.c-mobile-sub2-caret { transition: transform .25s var(--ease); }
.c-mobile-sub2.is-open .c-mobile-sub2-caret { transform: rotate(180deg); color: var(--primary); }
.c-mobile-sub2.is-open > .c-mobile-sub2-row > a { color: var(--primary); }
.c-mobile-sub2-panel {
  display: grid; grid-template-rows: 0fr;
  transition: grid-template-rows .28s var(--ease);
}
.c-mobile-sub2.is-open .c-mobile-sub2-panel { grid-template-rows: 1fr; }
.c-mobile-sub2-panel > * { overflow: hidden; }
.c-mobile-sub2-list { display: flex; flex-direction: column; }
/* Third-level indent, one step further in than .c-mobile-subnav's own. */
.c-mobile-sub2-list a {
  min-height: 44px; padding-left: 18px; margin-left: 18px;
  font-size: 14px; color: var(--text-3);
}
.c-mobile-sub2-list a:active { color: var(--primary); border-left-color: var(--primary); }

/* Helpline footer inside the sheet */
.c-mobile-help {
  margin-top: auto; display: flex; flex-direction: column; gap: 2px;
  padding: 14px 16px; border-radius: 14px;
  background: var(--bg-2); border: 1px solid var(--line);
  text-decoration: none;
}
.c-mobile-help span {
  font-family: var(--sans); font-size: 11px; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase; color: var(--text-3);
}
.c-mobile-help strong {
  font-family: var(--serif); font-weight: 400; font-size: 22px; color: var(--primary);
}

/* ─── Responsive ─── */
@media (max-width: 1100px) {
  .c-cert-card { height: 84px; padding: 10px; }
  .c-prod-grid { grid-template-columns: repeat(3, 1fr); }
  .c-foot-top { grid-template-columns: 1fr; }
  .c-annc-meta { display: none; }
}
@media (max-width: 800px) {
  .c-nav-left { display: none; }
  .c-nav-burger { display: flex; }
  .c-nav-inner { grid-template-columns: auto 1fr auto; padding: 8px 14px; }
  .c-nav-logo img { height: 30px; }
  .c-hero-inner { flex-direction: column; gap: 8px; }
  /* Top padding stays at 104px: .c-nav is fixed at top:37px and is ~56px tall,
     so it occupies viewport y 37–93px. When the CMS announcement bar is empty
     the bar is not rendered at all and the hero starts at y=0 — anything under
     ~100px here puts the headline UNDER the navbar on those installs. The
     copy's breathing room is bought at the bottom and from the rhythm below,
     never from this value. */
  .c-hero-content { padding: 104px 0 8px; margin-left: 20px; padding-right: 20px; }
  .c-hero-title { font-size: clamp(30px, 8.5vw, 44px); margin-bottom: 14px; }
  .c-hero-sub { font-size: 14px; margin-bottom: 18px; }
  .c-hero-cta { margin-bottom: 18px; }
  .c-hero-trust { gap: 10px 12px; font-size: 12px; }

  /* ── Mobile hero product · Client QA R2 Phase 2B ────────────────────────────
     THE PROBLEM: the hero asset is a 1920×1080 transparent WebP in which the
     wheelchair occupies only x≈38–73% and y≈9–92% of the canvas — about two
     thirds of the frame is empty. Desktop compensates with a wide wrapper
     (flex: 1.3 of a 1440px row) plus transform: scale(1.5).

     Mobile had neither. The image was width-constrained to 360 − 2×32px of
     wrapper padding = 296px, so the 16:9 box was only 167px tall and the
     WHEELCHAIR INSIDE IT rendered at roughly 104×138px — about a tenth of a
     360×640 screen, below the fold. Two things made this resistant to tuning:
       • `max-height: 42vh` never engaged at any phone size. The box is
         width-bound long before it is height-bound, so that value was dead.
       • `scale(1.12)` could not simply be raised. Scaling from the centre, the
         visible window is 1/s of the canvas, so anything past s≈1.22 starts
         cropping the product's wheels and push-handles (y 9–92%).

     THE FIX: stop magnifying a mostly-empty frame and crop the empty frame
     instead. `object-fit: cover` in a squarer, full-bleed window discards the
     transparent side margins so the wheelchair itself fills the box. The
     product renders roughly 2× larger in each dimension (~3–4× the area), with
     no transform overflow to clip and no horizontal page overflow.

     `object-position: 55%` because the wheelchair sits slightly right of the
     canvas centre. The narrowest window this produces is x≈27–83%, which still
     clears the product's 38–73% span with ~10 percentage points to spare on
     each side, at every width from 320px to 800px.

     TUNING KNOB: the aspect ratio and object-position encode the framing of the
     CURRENT hero asset. If the client uploads a differently-cropped hero via
     CMS → Homepage → Hero, re-check both. A portrait or already tightly-cropped
     asset wants `object-fit: contain` restored here. */
  .c-hero-image-wrapper { width: 100%; padding: 0 0 24px; }
  .c-hero-asset-image {
    transform: none;
    width: 100%;
    aspect-ratio: 1 / 1;
    max-height: 46vh;
    max-height: 46svh;
    object-fit: cover;
    object-position: 55% 50%;
  }
  .c-hero-scroll { display: none; }
  /* E-1: once the hero stacks, the product is centred and sits lower, so the
     scene's focal point and horizon move with it. */
  .c-hero-env { --fx: 50%; --fy: 88%; --hz: 70%; }
  /* Tighter, calmer sections on small screens */
  .c-section-title { font-size: clamp(27px, 7vw, 40px); }
  .c-section-head { margin-bottom: 26px; }
  /* Same rhythm, tighter: a 144px band that reads as calm on a 1440px screen
     eats a third of a phone viewport. Only the vertical value changes — the
     narrow-screen horizontal padding below is untouched. */
  :root { --sec-y: 48px; }
  .c-cats { padding: 40px 20px 24px; }
  .c-prods { padding: 40px 20px; }
  .c-stmt { padding: var(--sec-y) 24px; }
  .c-stmt-text { font-size: clamp(30px, 8vw, 48px); }
  .c-stmt-eb { margin-bottom: 18px; }
  .c-stmt-sub { font-size: 14.5px; }
  .c-testi { padding: var(--sec-y) 20px; }
  .c-social { padding: var(--sec-y) 20px; }
  .c-dir { padding: var(--sec-y) 20px; }
  .c-cert { padding: 0 20px var(--sec-y); }
  /* Below 800px nine logos cannot share the width and stay readable, so the row
     scrolls instead of wrapping into a ragged second line. The negative margin
     lets it bleed to the screen edges so the last logo is visibly cut off —
     that overhang is the affordance that says "scroll me". */
  .c-cert-grid {
    overflow-x: auto; scroll-snap-type: x proximity;
    margin-inline: -20px; padding: 0 20px 10px;
    max-width: none; scrollbar-width: thin;
  }
  .c-cert-card { flex: 0 0 108px; height: 88px; scroll-snap-align: center; }
  .c-prod-grid { grid-template-columns: repeat(2, 1fr); }
  .c-trust-row { grid-template-columns: repeat(2, 1fr); padding: 0; margin-top: 40px; }
  .c-trust-item { border-bottom: 1px solid var(--line); padding: 18px; }
  .c-trust-item:nth-child(2) { border-right: 0; }
  .c-trust-item:nth-child(3), .c-trust-item:nth-child(4) { border-bottom: 0; }
  .c-social-grid { grid-template-columns: repeat(2, 1fr); }
  .c-dir-grid { grid-template-columns: repeat(2, 1fr); }
  .c-foot-cols { grid-template-columns: repeat(2, 1fr); }
  .c-testi-card { grid-template-columns: 1fr; min-height: 0; height: auto; }
  .c-testi-quote-side { padding: 40px 32px 32px; }
  .c-testi-portrait { aspect-ratio: 4/3; order: -1; }
  .c-testi-title { font-size: 30px; }
  .c-testi-controls { flex-direction: column; align-items: stretch; }
  .c-testi-thumbs { justify-content: center; }
  .c-testi-arrows { justify-content: center; }
}
@media (max-width: 640px) {
  /* Category split-cards stack: image above text — compact, minimal */
  .c-cat-grid { gap: 14px; }
  .c-cat-card { flex-direction: column-reverse; min-height: 0; border-radius: 16px; }
  .c-cat-info { padding: 0 20px 20px; }
  .c-cat-eb { margin-bottom: 8px; }
  .c-cat-name { font-size: 23px; margin-bottom: 8px; }
  .c-cat-desc { -webkit-line-clamp: 2; font-size: 13px; margin: 0 0 14px; }
  .c-cat-count { margin: -8px 0 14px; }
  .c-cat-cta { font-size: 13px; }
  .c-cat-arrow { width: 30px; height: 30px; }
  .c-cat-visual { padding: 18px 20px 6px; }
  .c-cat-visual img { height: 136px; }
}
@media (max-width: 520px) {
  /* ── Hero controls · Client QA R2 Phase 2B ──
     .c-btn is inline-flex with white-space: nowrap, so at 320–360px the two
     hero buttons wrapped to two rows at their natural widths — ragged, and a
     narrower tap target than the same control gets on the product page, which
     has used width:100% at this breakpoint since Phase 4. Matched here.
     The trust row's hairline separators only read correctly on one line; once
     it wraps to two or three they float mid-row, so they are dropped and the
     row spaces itself instead. */
  .c-hero-cta { gap: 10px; margin-bottom: 16px; }
  .c-hero-cta .c-btn { flex: 1 1 100%; justify-content: center; }
  .c-hero-trust { gap: 8px 14px; font-size: 11.5px; }
  .c-hero-trust-sep { display: none; }

  /* Two compact product cards per row — small, scannable, minimal */
  .c-prod-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }
  .c-prod { border-radius: 12px; }
  .c-prod-img-wrap img { padding: 12px; }
  .c-prod-body { padding: 10px 12px 12px; }
  .c-prod-name { font-size: 14px; }
  .c-prod-benefit { display: none; }
  .c-prod-price { font-size: 15px; }
  .c-prod-cta { padding: 8px 12px; font-size: 12.5px; }
  .c-trust-item { padding: 14px 12px; gap: 10px; }
  .c-trust-item strong { font-size: 12.5px; }
  .c-trust-item span { font-size: 11.5px; }
  .c-foot-cols { grid-template-columns: 1fr; }
  .c-social-grid { grid-template-columns: 1fr; }
  .c-dir-grid { grid-template-columns: repeat(2, 1fr); gap: 14px; }
  .c-dir-name { font-size: 16px; }
  .c-cert-card { flex-basis: 96px; height: 78px; }
  .c-annc { font-size: 11.5px; }
  .c-annc-inner { padding: 8px 14px; gap: 10px; }
  /* The rotator's lines are absolutely positioned, so it has no intrinsic width —
     without a non-auto flex-basis it collapses to 0 and the message disappears. */
  .c-annc-rotator { min-width: 0; flex: 1 1 0%; }
  .c-annc-line { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
}

/* ─── Bulk Enquiry button (Client QA R1 Phase 4) ───
   Secondary weight beside Add to Bag / Buy Now: same radius and type scale as
   the existing PDP controls, outlined rather than filled so it never competes
   with the primary purchase action. */
.c-bulk-enquiry-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%; margin-top: 10px; padding: 13px 20px;
  border-radius: 999px; border: 1.5px solid var(--line-2);
  background: #fff; color: var(--text); cursor: pointer;
  font-family: var(--sans); font-size: 14.5px; font-weight: 600;
  transition: border-color .2s var(--ease), background .2s var(--ease), color .2s var(--ease);
}
.c-bulk-enquiry-btn:hover { border-color: var(--primary); color: var(--primary); background: rgba(11,110,110,.04); }

/* ═══ Page hero — floating card over a soft environment (Client QA R1) ═════
   Reusable across About / Blog / Contact / Visionary / Warranty / Track Order /
   legal pages: only the content, the badge, the CTA and the product visual
   change per page, never this layout. Pure CSS — no library, no canvas, no JS.
   Every element that carries the composition has a reserved box, so the hero
   contributes no layout shift while the product image loads. */
.c-phero {
  position: relative; overflow: hidden;
  padding-top: clamp(96px, 16vw, 120px);
  padding-bottom: clamp(80px, 12vw, 124px);
  /* Off-white base lifted by soft mint/teal radial accents — replaces the old
     flat teal gradient. */
  background:
    radial-gradient(90% 70% at 78% 18%, #E6F4F1 0%, rgba(230,244,241,0) 62%),
    radial-gradient(70% 60% at 8% 4%, #FFFFFF 0%, rgba(255,255,255,0) 66%),
    linear-gradient(168deg, #FBFCFC 0%, #F1F6F5 100%);
}

/* ── Layer 1: environment ── */
.c-phero-bg { position: absolute; inset: 0; pointer-events: none; }
.c-phero-orb { position: absolute; border-radius: 50%; }
.c-phero-orb-a {
  right: -8%; top: -18%; width: 46%; aspect-ratio: 1;
  background: radial-gradient(circle at 34% 30%, rgba(255,255,255,.9) 0%, rgba(214,238,233,.75) 46%, rgba(214,238,233,0) 72%);
}
.c-phero-orb-b {
  left: -12%; bottom: -26%; width: 34%; aspect-ratio: 1;
  background: radial-gradient(circle at 60% 40%, rgba(235,248,246,.9) 0%, rgba(235,248,246,0) 70%);
}
/* One thin arc — the only "line" in the composition. */
.c-phero-ring {
  position: absolute; right: -14%; top: -6%; width: 62%; aspect-ratio: 1;
  border: 1px solid rgba(11,110,110,.11); border-radius: 50%;
}

/* ── Layout ── */
.c-phero-inner {
  position: relative; z-index: 1;
  max-width: 1200px; margin: 0 auto; padding: 0 24px;
  display: grid; grid-template-columns: minmax(0, 57fr) minmax(0, 43fr);
  align-items: center;
}

/* ── Layer 2: floating content card ── */
.c-phero-card {
  position: relative; z-index: 2;
  padding: clamp(30px, 4.4vw, 60px);
  border-radius: 32px;
  background: #fff;
  border: 1px solid rgba(11,110,110,.07);
  box-shadow: 0 2px 4px rgba(28,43,43,.03), 0 40px 80px -40px rgba(11,110,110,.30);
}
.c-phero-badge {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 15px; border-radius: 999px;
  background: #F2F9F8; border: 1px solid rgba(11,110,110,.12);
  font-family: var(--sans); font-size: 11.5px; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase; color: var(--primary);
}
.c-phero-badge i { width: 6px; height: 6px; border-radius: 50%; background: var(--action); }
.c-phero-title {
  font-family: var(--serif); font-weight: 400;
  font-size: clamp(32px, 4.8vw, 60px); line-height: 1.06; letter-spacing: -.015em;
  color: var(--text); margin: clamp(20px, 2.6vw, 28px) 0 0; text-wrap: balance;
}
.c-phero-title em { color: var(--primary); }
.c-phero-sub {
  margin: clamp(16px, 2vw, 22px) 0 0; max-width: 52ch;
  font-family: var(--sans); font-size: clamp(15px, 1.5vw, 17px);
  line-height: 1.75; color: var(--text-2);
}
.c-phero-cta {
  display: inline-flex; align-items: center; gap: 9px;
  margin-top: clamp(22px, 2.6vw, 30px);
  padding: 15px 28px; border-radius: 999px;
  background: var(--primary); color: #fff;
  font-family: var(--sans); font-size: 14.5px; font-weight: 500;
  box-shadow: 0 10px 24px -12px rgba(11,110,110,.75);
  transition: background .25s var(--ease), transform .25s var(--ease);
}
.c-phero-cta:hover { background: var(--primary-2); transform: translateY(-2px); }
.c-phero-cta:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }

/* ── Product composition ── */
/* `overflow: hidden` frames a single product out of a wider studio photograph.
   The crop line only ever passes through the shot's white backdrop, which the
   multiply blend below renders invisible — so the product is framed, never
   visibly cut out. */
.c-phero-visual { position: relative; aspect-ratio: 1 / 1; margin-left: -7%; overflow: hidden; }
/* Clean platform the product stands on. */
.c-phero-plinth {
  position: absolute; left: 8%; right: 8%; bottom: 12%; height: 13%;
  border-radius: 50%;
  background: radial-gradient(60% 100% at 50% 30%, #FFFFFF 0%, #EAF4F2 55%, #D8EAE6 100%);
  box-shadow: 0 22px 34px -24px rgba(11,110,110,.55);
}
/* Soft contact shadow, so the product reads as resting rather than floating. */
.c-phero-contact {
  position: absolute; left: 22%; right: 22%; bottom: 15.5%; height: 5%;
  border-radius: 50%;
  background: radial-gradient(50% 50% at 50% 50%, rgba(28,43,43,.30) 0%, rgba(28,43,43,0) 72%);
  filter: blur(2px);
}
/* The photo is blown up and offset so a single product fills the frame. A soft
   radial mask dissolves the studio backdrop into the hero instead of ending on
   a crop edge, so the product reads as composed rather than cut out. (Deliberately
   NOT mix-blend-mode: multiply — inside this clipped box the blend resolves
   against a white backdrop and erases the product entirely.) */
.c-phero-product {
  position: absolute; left: 50%; top: 50%;
  width: var(--phero-img-w, 215%); max-width: none; height: auto;
  translate: var(--phero-img-x, -41%) var(--phero-img-y, -50%);
  -webkit-mask-image: radial-gradient(74% 74% at 46% 48%, #000 62%, transparent 100%);
  mask-image: radial-gradient(74% 74% at 46% 48%, #000 62%, transparent 100%);
}
.c-phero-plant { position: absolute; left: 4%; bottom: 13%; width: 13%; height: auto; }

/* ── Tablet: card takes more of the row, product scales with it ── */
@media (max-width: 1080px) {
  .c-phero-inner { grid-template-columns: minmax(0, 63fr) minmax(0, 37fr); }
  .c-phero-visual { margin-left: -4%; }
  .c-phero-card { border-radius: 28px; }
}

/* ── Stacked: card first, product below ── */
@media (max-width: 860px) {
  .c-phero { padding-bottom: clamp(72px, 14vw, 104px); }
  .c-phero-inner { grid-template-columns: 1fr; gap: clamp(28px, 5vw, 40px); }
  .c-phero-visual { margin-left: 0; width: min(400px, 100%); margin-inline: auto; }
}

@media (max-width: 640px) {
  .c-phero-inner { padding-inline: 20px; }
  .c-phero-card { padding: 28px 24px; border-radius: 24px; }
  .c-phero-visual { width: min(320px, 100%); }
  .c-phero-cta { width: 100%; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
  .c-phero-cta:hover { transform: none; }
}

/* ═══ Newsletter — editorial redesign (Client QA R1) ═══════════════════════
   Replaces the solid-teal, centre-aligned CTA on the blog page. Two columns on
   desktop (content 55 / composition 45), stacked below 1000px with the artwork
   under the content. Everything here is CSS + inline SVG: no new dependency, no
   image request, no JS. The artwork sits in a fixed aspect-ratio box so it
   reserves its space up front and contributes no layout shift. */
.c-news { max-width: 1200px; margin: 0 auto; padding: 0 24px clamp(64px, 9vw, 100px); }

.c-news-card {
  position: relative; overflow: hidden;
  display: grid; grid-template-columns: 55fr 45fr; align-items: center;
  gap: clamp(28px, 4vw, 56px);
  padding: clamp(32px, 5.2vw, 72px);
  border-radius: 30px;
  border: 1px solid rgba(11,110,110,.09);
  /* Off-white base lifted by soft aqua/mint radial highlights — no flat fill. */
  background:
    radial-gradient(115% 85% at 10% 0%, #FFFFFF 0%, rgba(255,255,255,0) 58%),
    radial-gradient(85% 75% at 96% 8%, #E2F4F0 0%, rgba(226,244,240,0) 64%),
    radial-gradient(75% 85% at 82% 100%, #E8F6F3 0%, rgba(232,246,243,0) 62%),
    linear-gradient(150deg, #FBFDFC 0%, #F1F8F6 100%);
  box-shadow: 0 1px 2px rgba(28,43,43,.03), 0 30px 60px -30px rgba(11,110,110,.20);
}

/* ── Left column ── */
.c-news-pill {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 15px; border-radius: 999px;
  background: #fff; border: 1px solid rgba(11,110,110,.13);
  box-shadow: 0 1px 2px rgba(28,43,43,.04);
  font-family: var(--sans); font-size: 11.5px; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase; color: var(--primary);
}
.c-news-pill i { width: 6px; height: 6px; border-radius: 50%; background: var(--action); }

.c-news-title {
  font-family: var(--serif); font-weight: 400;
  font-size: clamp(30px, 4.4vw, 54px); line-height: 1.08; letter-spacing: -.01em;
  color: var(--text); margin: clamp(18px, 2.4vw, 26px) 0 0;
}
.c-news-title em { color: var(--primary); }

.c-news-sub {
  margin: clamp(14px, 1.8vw, 18px) 0 0; max-width: 47ch;
  font-family: var(--sans); font-size: clamp(14.5px, 1.5vw, 16.5px);
  line-height: 1.72; color: var(--text-2);
}

/* ── Form (rendered by NewsletterForm, variant="blog") ── */
.c-news-form { display: flex; gap: 12px; margin: clamp(24px, 3vw, 34px) 0 0; }
/* Visible to screen readers only — the field is otherwise placeholder-labelled,
   which no assistive tech should have to rely on. */
.c-news-label {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.c-news-input {
  flex: 1 1 240px; min-width: 0;
  padding: 17px 22px; border-radius: 999px;
  background: #fff; border: 1px solid rgba(11,110,110,.14);
  font-family: var(--sans); font-size: 15px; color: var(--text);
  box-shadow: 0 1px 2px rgba(28,43,43,.04); outline: 0;
  transition: border-color .25s var(--ease), box-shadow .25s var(--ease);
}
.c-news-input::placeholder { color: var(--text-3); }
.c-news-input:focus { border-color: var(--action); box-shadow: 0 0 0 4px rgba(26,158,143,.14); }
.c-news-btn {
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 17px 32px; border-radius: 999px;
  background: var(--primary); color: #fff; border: 0; cursor: pointer; white-space: nowrap;
  font-family: var(--sans); font-size: 15px; font-weight: 500;
  box-shadow: 0 10px 24px -12px rgba(11,110,110,.75);
  transition: background .25s var(--ease), transform .25s var(--ease), box-shadow .25s var(--ease);
}
.c-news-btn:hover { background: var(--primary-2); transform: translateY(-2px); box-shadow: 0 16px 32px -14px rgba(11,110,110,.85); }
.c-news-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
.c-news-btn:disabled { opacity: .6; cursor: default; transform: none; box-shadow: none; }
.c-news-note { margin: 14px 0 0; font-family: var(--sans); font-size: 12.5px; color: var(--text-3); }
.c-news-ok { margin: clamp(24px, 3vw, 34px) 0 0; font-family: var(--sans); font-size: 15px; font-weight: 600; color: var(--primary); }
.c-news-err { margin: 12px 0 0; font-family: var(--sans); font-size: 13px; color: #B3261E; }

/* ── Right column: layered lifestyle composition (decorative, aria-hidden) ── */
.c-news-art { position: relative; aspect-ratio: 1 / 1; }
.c-news-art > * { position: absolute; }

/* Soft fabric panel — the surface everything else rests on. */
.c-news-fabric {
  inset: 8% 4% 10% 6%; border-radius: 26px;
  rotate: -3deg;
  background:
    repeating-linear-gradient(45deg, rgba(255,255,255,.5) 0 2px, rgba(255,255,255,0) 2px 5px),
    linear-gradient(155deg, #F4FAF8 0%, #DFF1ED 55%, #EAF6F3 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 18px 40px -24px rgba(11,110,110,.35);
}

/* Editorial magazine, tilted and lifted off the fabric. */
.c-news-mag {
  left: 8%; top: 12%; width: 46%; aspect-ratio: 3 / 4;
  rotate: -7deg;
  display: flex; flex-direction: column; gap: 9px;
  padding: 16px 15px; border-radius: 12px;
  background: linear-gradient(160deg, #FFFFFF 0%, #FAFDFC 100%);
  box-shadow: 0 2px 4px rgba(28,43,43,.05), 0 26px 44px -22px rgba(28,43,43,.35);
}
.c-news-mag-eb { font-family: var(--sans); font-size: 7.5px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; color: var(--primary); }
.c-news-mag-rule { height: 1px; background: rgba(11,110,110,.16); }
.c-news-mag-h { height: 9px; border-radius: 3px; background: rgba(28,43,43,.13); }
.c-news-mag-h.is-short { width: 62%; }
.c-news-mag-band { margin-top: auto; height: 34%; border-radius: 8px; background: linear-gradient(150deg, #CFEAE4 0%, #A8D8CF 100%); }

/* Ceramic tea cup on a saucer, with slow steam. */
.c-news-cup { right: 10%; bottom: 20%; width: 31%; aspect-ratio: 1 / 1; }
.c-news-cup span { position: absolute; }
.c-news-cup-body {
  left: 8%; top: 34%; width: 70%; height: 46%;
  border-radius: 10px 10px 46% 46% / 8px 8px 64% 64%;
  background: linear-gradient(160deg, #FFFFFF 0%, #F0F8F6 58%, #D3E8E3 100%);
  box-shadow: inset 0 -7px 11px -7px rgba(11,110,110,.30), 0 12px 22px -13px rgba(28,43,43,.55);
}
/* Elliptical rim, so the shape reads as a cup rather than a dome. */
.c-news-cup-body::before {
  content: ""; position: absolute; left: 0; right: 0; top: -5px; height: 11px;
  border-radius: 50%;
  background: linear-gradient(180deg, #FFFFFF 0%, #E3F1EE 100%);
  box-shadow: inset 0 1.5px 0 #fff, inset 0 -2px 3px -1px rgba(11,110,110,.22);
}
.c-news-cup-handle {
  right: 2%; top: 46%; width: 22%; height: 27%;
  border: 3.5px solid #C4E0DA; border-left-color: transparent; border-radius: 50%;
}
.c-news-saucer {
  left: -2%; bottom: 11%; width: 96%; height: 10%;
  border-radius: 50%;
  background: linear-gradient(180deg, #F6FBFA 0%, #CDE5E0 100%);
  box-shadow: 0 12px 20px -13px rgba(28,43,43,.55);
}
.c-news-steam {
  left: 30%; bottom: 62%; width: 2px; height: 22%;
  border-radius: 2px; background: linear-gradient(0deg, rgba(11,110,110,.18), rgba(11,110,110,0));
}
.c-news-steam:nth-of-type(2) { left: 44%; height: 28%; }
.c-news-steam:nth-of-type(3) { left: 58%; height: 18%; }

/* Leaves. */
.c-news-leaf { color: #8FC9BE; opacity: .85; }
.c-news-leaf-a { left: 2%; bottom: 12%; width: 22%; rotate: 12deg; }
.c-news-leaf-b { right: 4%; top: 6%; width: 17%; rotate: -28deg; opacity: .6; }

/* Floating newsletter badge. */
.c-news-badge {
  right: 0; top: 40%;
  display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 15px; border-radius: 999px;
  background: rgba(255,255,255,.92); border: 1px solid rgba(11,110,110,.10);
  box-shadow: 0 3px 8px rgba(28,43,43,.06), 0 18px 34px -18px rgba(28,43,43,.4);
  font-family: var(--sans); font-size: 11.5px; font-weight: 600; color: var(--text);
  white-space: nowrap;
}
.c-news-badge svg { color: var(--primary); }

/* Slow drift. Each element gets its own duration/delay so nothing beats in sync.
   `translate` is animated rather than `transform`, which leaves the static
   `rotate` on these same elements untouched. */
@keyframes c-news-drift { 0%, 100% { translate: 0 0; } 50% { translate: 0 -9px; } }
.c-news-float { animation: c-news-drift 7s var(--ease) infinite; }
.c-news-mag { animation-duration: 9s; }
.c-news-leaf-a { animation-duration: 8s; animation-delay: -2s; }
.c-news-leaf-b { animation-duration: 11s; animation-delay: -5s; }
.c-news-badge { animation-duration: 6.5s; animation-delay: -3s; }

@media (prefers-reduced-motion: reduce) {
  .c-news-float { animation: none; }
  .c-news-btn:hover { transform: none; }
}

/* ── Tablet: balanced stack, artwork below the content ── */
@media (max-width: 1000px) {
  .c-news-card { grid-template-columns: 1fr; gap: clamp(32px, 5vw, 48px); }
  .c-news-sub { max-width: 60ch; }
  .c-news-art { order: 2; width: min(420px, 100%); margin: 0 auto; }
}

/* ── Mobile: full-width input and button ── */
@media (max-width: 640px) {
  .c-news { padding-inline: 20px; }
  .c-news-card { padding: 32px 24px; border-radius: 26px; }
  .c-news-form { flex-direction: column; gap: 10px; }
  .c-news-input, .c-news-btn { width: 100%; flex: 0 0 auto; }
}

/* ==========================================================================
   Phase 2B — audit remediation additions
   ========================================================================== */

/* A11Y-3: accessible name for a control whose label must not be shown. */
.c-visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* A11Y-2: the catalogue search field previously set `outline: none` inline with
   no replacement, so keyboard focus was invisible (WCAG 2.4.7). Mirrors the
   ring /track already uses. */
.c-search-field:focus { outline: none; }
.c-search-field:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(11, 110, 110, 0.25);
  border-radius: 999px;
}
