@charset "UTF-8";
/* ==========================================================================
   zopiclone10mg.co.uk — Premium v3
   Self-contained stylesheet. Styles the existing sitewide header/footer
   markup plus the new homepage sections, so index-v3.html is drop-in and
   no other page is affected.

   Palette is taken from the brand logo:
     navy   #183159  (wordmark)
     blue   #2a7de1  (matches existing premium.css accent)
     bright #12a3e3  (logo swoosh — used for highlights)
     sky    #e1f5fe  (existing hero base tint)
   Type: Jost only — one geometric sans, set with discipline.
   ========================================================================== */

/* ---------- Reset ---------- */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
/* overflow-x on the root as well as body: body-level clipping does NOT
   contain position:fixed children such as the off-canvas drawer. */
/* overflow-x on the root as well as body: body-level clipping does NOT
   contain position:fixed children such as the off-canvas drawer.
   scrollbar-gutter reserves the scrollbar track so locking body scroll
   when the drawer opens doesn't shift the page sideways. */
html{
  -webkit-text-size-adjust:100%;scroll-behavior:smooth;
  overflow-x:hidden;scrollbar-gutter:stable;
}
img,svg{display:block;max-width:100%}
button,input{font:inherit;color:inherit}
button{background:none;border:0;cursor:pointer}
a{color:inherit;text-decoration:none}
ul{list-style:none}
:focus-visible{outline:3px solid var(--bright);outline-offset:3px;border-radius:4px}

/* ---------- Tokens ---------- */
:root{
  --primary:#183159;
  --primary-light:#1e3f6f;
  --primary-dark:#0d1b33;
  --primary-deepest:#0a1628;

  --accent:#2776d5;
  --accent-hover:#1e6bc9;
  --accent-deep:#1652a0;
  --bright:#12a3e3;--bright-on-light:#0d7dae;
  --accent-light:#e8f2fd;
  --sky:#e1f5fe;

  --white:#fff;
  --off-white:#f8f9fc;
  --border:#e4e8ef;
  --border-light:#eef1f6;

  --text:#1a1f36;
  --text-secondary:#4a5568;      /* 7.5:1 on white */
  /* #7b8794 from the old palette was only 3.66:1 on white — below AA for
     body copy. Darkened to keep the soft-grey feel and pass 4.5:1. */
  --text-muted:#5f6b7a;          /* 5.4:1 on white */

  --success:#0b875a;
  --warn-bg:#fffbf3;
  --warn-line:#f3e3c4;
  --warn-ico:#fbefd8;
  --warn-fg:#986b17;

  --fs-xs:.75rem;  --fs-sm:.875rem; --fs-base:1rem;
  --fs-lg:1.125rem;--fs-xl:1.25rem; --fs-2xl:1.5rem;

  --s-1:4px;  --s-2:8px;  --s-3:12px; --s-4:16px; --s-5:20px;
  --s-6:24px; --s-8:32px; --s-10:40px;--s-12:48px;
  --s-16:64px;--s-20:80px;--s-24:96px;

  --radius:12px; --radius-lg:20px; --radius-xl:28px; --radius-full:100px;

  --shadow-xs:0 1px 2px rgba(0,0,0,.04);
  --shadow-sm:0 2px 8px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.03);
  --shadow-md:0 12px 28px -10px rgba(16,41,74,.18),0 2px 6px rgba(0,0,0,.04);
  --shadow-lg:0 28px 60px -22px rgba(10,22,40,.3),0 4px 12px rgba(0,0,0,.05);
  --shadow-accent:0 8px 24px rgba(42,125,225,.24);

  --max-width:1200px;
  --header-height:80px;
  --ease:cubic-bezier(.22,.68,0,1);
  --dur:240ms;

  --z-header:100; --z-drawer:200; --z-bar:90;
}

/* ---------- Base ---------- */
body{
  font-family:'Jost',ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;
  font-size:var(--fs-base);line-height:1.7;color:var(--text-secondary);
  background:var(--white);-webkit-font-smoothing:antialiased;overflow-x:hidden;
}
h1,h2,h3,h4,h5{color:var(--primary);font-weight:600;line-height:1.14;letter-spacing:-.02em}
h1{font-size:clamp(2.25rem,5.4vw,4.25rem);font-weight:700;letter-spacing:-.035em}
h2{font-size:clamp(1.75rem,3.4vw,2.75rem)}
h3{font-size:var(--fs-xl);letter-spacing:-.012em}
h4{font-size:var(--fs-base);letter-spacing:0}
p{max-width:74ch}
strong{font-weight:600;color:var(--primary)}
.container{max-width:var(--max-width);margin-inline:auto;padding-inline:var(--s-6)}
.tnum{font-variant-numeric:tabular-nums}
.section{padding-block:clamp(56px,7vw,var(--s-24))}
.section-alt{background:var(--off-white)}
.section-sky{background:linear-gradient(180deg,var(--sky),var(--white))}

.section-label{
  display:inline-flex;align-items:center;gap:var(--s-3);
  font-size:var(--fs-xs);font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--accent-deep);margin-bottom:var(--s-4);
}
.section-label::before{content:"";width:24px;height:2px;background:var(--bright);border-radius:2px}
.on-dark .section-label,.section-label.on-dark{color:var(--bright)}
.section-header{max-width:760px}
.section-header.center{margin-inline:auto;text-align:center}
.section-header.center .section-label{justify-content:center}
.section-header .lede{margin-top:var(--s-4)}
.lede{font-size:var(--fs-lg);color:var(--text-muted);max-width:68ch;line-height:1.65}
.prose p{font-size:var(--fs-base);line-height:1.75}
.prose p+p{margin-top:var(--s-5)}
.prose--lg p{font-size:var(--fs-lg)}
/* Spacing helpers — keep all presentation out of the markup */
.mt-6{margin-top:var(--s-6)}
.mt-8{margin-top:var(--s-8)}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);
  min-height:48px;padding:0 var(--s-6);border-radius:var(--radius-full);
  font-size:var(--fs-sm);font-weight:600;letter-spacing:.01em;white-space:nowrap;
  transition:background var(--dur) var(--ease),color var(--dur) var(--ease),
             transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),
             border-color var(--dur);
}
.btn svg{width:17px;height:17px;flex:none;transition:transform var(--dur) var(--ease)}
.btn:hover svg{transform:translateX(3px)}
.btn:active{transform:translateY(0) scale(.985)}
.btn-primary{background:var(--primary);color:#fff;box-shadow:0 8px 20px -8px rgba(24,49,89,.5)}
.btn-primary:hover{background:var(--primary-dark);transform:translateY(-2px)}
/* --accent (#2a7de1) gives white text only 4.10:1 — below the 4.5:1 AA
   minimum for button labels. --accent-hover (#1e6bc9) reaches 5.25:1. */
.btn-accent{background:var(--accent-hover);color:#fff;box-shadow:var(--shadow-accent)}
.btn-accent:hover{background:var(--accent-deep);transform:translateY(-2px)}
.btn-outline{border:1.5px solid var(--primary);color:var(--primary)}
.btn-outline:hover{background:var(--primary);color:#fff;transform:translateY(-2px)}
.btn-glass{background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.4);backdrop-filter:blur(8px)}
.btn-glass:hover{background:rgba(255,255,255,.24);transform:translateY(-2px)}
.btn-lg{min-height:56px;padding:0 var(--s-8);font-size:var(--fs-base)}
.btn-block{width:100%}

/* ---------- Skip link ---------- */
.skip-link{
  position:absolute;left:-9999px;top:0;z-index:999;
  background:var(--primary);color:#fff;padding:var(--s-3) var(--s-5);border-radius:var(--radius)
}
.skip-link:focus{left:var(--s-4);top:var(--s-4)}

/* ---------- Utility strip ---------- */
.util-bar{background:var(--primary-deepest);color:#b9cbe4;font-size:var(--fs-xs)}
.util-bar .container{display:flex;justify-content:space-between;align-items:center;gap:var(--s-4);min-height:40px}
.util-bar p{display:flex;align-items:center;gap:var(--s-2);margin:0;max-width:none}
.util-bar svg{width:14px;height:14px;color:var(--bright);flex:none}
.util-bar nav{display:flex;gap:var(--s-6)}
.util-bar nav a{transition:color var(--dur)}
.util-bar nav a:hover{color:#fff}
@media(max-width:820px){.util-bar nav{display:none}.util-bar .container{justify-content:center}}

/* ---------- Header (existing sitewide markup) ---------- */
.header{
  position:sticky;top:0;z-index:var(--z-header);
  background:transparent;
  border-bottom:1px solid rgba(24,49,89,.09);
  transition:box-shadow var(--dur) var(--ease);
}
/* The frosted layer lives on a pseudo-element, NOT on .header itself.
   backdrop-filter on .header would make it the containing block for its
   position:fixed descendants, collapsing the mobile drawer to the height
   of the header. Keeping the filter on ::before avoids that entirely. */
.header::before{
  content:"";position:absolute;inset:0;z-index:-1;
  background:rgba(255,255,255,.85);
  backdrop-filter:blur(16px) saturate(160%);
  -webkit-backdrop-filter:blur(16px) saturate(160%);
}
.header.scrolled{box-shadow:0 6px 24px -12px rgba(10,22,40,.22)}
.header-inner{
  max-width:var(--max-width);margin-inline:auto;padding:0 var(--s-6);
  display:flex;align-items:center;gap:var(--s-8);min-height:var(--header-height);
}
.logo{flex:none}
.logo img{height:42px;width:auto}
.nav-menu{display:flex;gap:var(--s-8);margin-inline-start:auto;font-size:var(--fs-sm);font-weight:500}
.nav-menu a{position:relative;padding-block:var(--s-2);color:var(--primary);transition:color var(--dur)}
.nav-menu a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;
  background:var(--bright);transform:scaleX(0);transform-origin:left;
  transition:transform var(--dur) var(--ease);
}
.nav-menu a:hover::after,.nav-menu a.active::after{transform:scaleX(1)}
.header-actions{display:flex;align-items:center;gap:var(--s-2);flex:none}

.cart-icon,.mobile-toggle{
  position:relative;width:44px;height:44px;border-radius:var(--radius-full);
  display:grid;place-items:center;color:var(--primary);transition:background var(--dur)
}
.cart-icon:hover,.mobile-toggle:hover{background:var(--sky)}
.cart-icon svg{width:22px;height:22px}
/* border-box keeps the pill exactly 18px: with content-box the padding and
   the 2px ring were added on top, blowing it up to 29x21 and covering the
   cart glyph. Sits in the button's top-right corner, clipping only the
   glyph's corner the way a count badge should. */
.cart-count{
  position:absolute;top:2px;right:2px;
  min-width:18px;height:18px;padding:0 4px;box-sizing:border-box;
  border-radius:9px;background:var(--accent);color:#fff;
  font-size:10px;font-weight:700;line-height:1;
  display:grid;place-items:center;
  border:2px solid #fff
}
/* Column flex: align-items centres the bars horizontally (cross axis) but the
   vertical main axis needs justify-content, otherwise the three bars pack to
   the top of the 44px button instead of sitting on its centre line. */
.mobile-toggle{
  display:none;flex-direction:column;gap:4px;
  align-items:center;justify-content:center
}
.mobile-toggle span{width:20px;height:2px;background:currentColor;border-radius:2px;transition:transform var(--dur) var(--ease),opacity var(--dur)}
.mobile-toggle.active span:nth-child(1){transform:translateY(6px) rotate(45deg)}
.mobile-toggle.active span:nth-child(2){opacity:0}
.mobile-toggle.active span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}

@media(max-width:1000px){
  /* Shorter bar and smaller wordmark so the logo, basket and menu button
     sit comfortably on a 320px screen without crowding. */
  :root{--header-height:64px}
  .logo img{height:34px}
  .header-inner{gap:var(--s-4)}
  .header-actions .btn{display:none}
  .mobile-toggle{display:flex}
  .nav-menu{display:none}          /* replaced by the off-canvas drawer below */
  /* The desktop nav carried the auto margin that pushed the row right. With
     it hidden, .header-actions must take over or the basket and menu button
     bunch up against the logo instead of sitting at the right edge. */
  .header-actions{margin-inline-start:auto}
}

/* ==========================================================================
   OFF-CANVAS DRAWER
   Deliberately a direct child of <body>, NOT a descendant of <header>.
   A fixed-position element is broken by any ancestor that establishes a
   containing block (transform / filter / backdrop-filter) or a lower
   stacking context — and .header does both. Keeping the drawer at body
   level in the root stacking context removes that entire class of bug.
   ========================================================================== */
.nav-scrim{
  position:fixed;inset:0;
  background:rgba(10,22,40,.55);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  opacity:0;visibility:hidden;
  transition:opacity var(--dur),visibility var(--dur);
  z-index:1000
}
.nav-scrim.open{opacity:1;visibility:visible}

.nav-drawer{
  position:fixed;top:0;right:0;bottom:0;
  width:min(360px,88vw);
  display:flex;flex-direction:column;
  background:#fff;box-shadow:var(--shadow-lg);
  z-index:1001;
  padding:var(--s-5);
  padding-bottom:calc(var(--s-6) + env(safe-area-inset-bottom));
  overflow-y:auto;-webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;            /* stop scroll chaining to the page */
  font-size:var(--fs-base);
  /* visibility keeps the closed drawer out of the tab order and out of the
     accessibility tree — transform alone leaves its links focusable.
     It is stepped, never interpolated: on open it flips to visible at 0s so
     the panel is focusable immediately; on close it flips back only after the
     slide-out finishes. Transitioning visibility instead would leave the
     drawer un-focusable for the duration of the animation. */
  transform:translateX(100%);visibility:hidden;
  transition:transform 300ms var(--ease),visibility 0s linear 300ms
}
.nav-drawer.open{
  transform:none;visibility:visible;
  transition:transform 300ms var(--ease),visibility 0s linear 0s
}
/* Never render the mobile drawer on desktop */
@media(min-width:1001px){
  .nav-drawer,.nav-scrim{display:none}
}

.nav-drawer-head{
  display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);
  padding-bottom:var(--s-5);margin-bottom:var(--s-4);
  border-bottom:1px solid var(--border-light);flex:none
}
.nav-drawer-head img{height:34px;width:auto}
.nav-close{
  display:grid;place-items:center;width:44px;height:44px;flex:none;
  border-radius:var(--radius-full);color:var(--primary);
  transition:background var(--dur),transform var(--dur) var(--ease)
}
.nav-close:hover{background:var(--sky)}
.nav-close:active{transform:scale(.94)}
.nav-close svg{width:20px;height:20px}

.nav-drawer-links{display:flex;flex-direction:column;gap:var(--s-1)}
.nav-drawer-links a{
  min-height:52px;display:flex;align-items:center;
  padding:var(--s-3) var(--s-4);border-radius:var(--radius);
  font-weight:500;color:var(--primary);
  transition:background var(--dur),color var(--dur)
}
.nav-drawer-links a:hover,.nav-drawer-links a.active{background:var(--sky)}
.nav-drawer-links a.active{color:var(--accent-deep);font-weight:600}

.nav-drawer-cta{
  display:flex;flex-direction:column;gap:var(--s-3);
  margin-top:auto;padding-top:var(--s-6)
}
.nav-drawer-cta .btn{width:100%}
.nav-drawer-cta .drawer-contact{
  display:flex;align-items:center;gap:var(--s-2);justify-content:center;
  font-size:var(--fs-xs);color:var(--text-muted)
}
.nav-drawer-cta .drawer-contact svg{width:14px;height:14px;color:var(--accent);flex:none}

/* Scroll lock. position:fixed on body (rather than overflow:hidden, which
   iOS Safari ignores) with the offset restored by JS on close. */
body.menu-open{position:fixed;inset-inline:0;overflow:hidden;width:100%}
/* ==========================================================================
   HERO — full-bleed pharmacy photograph + glass panel
   ========================================================================== */
.hero{position:relative;isolation:isolate;background:var(--sky);overflow:hidden}
.hero-media{position:absolute;inset:0;z-index:-2}
.hero-media img{width:100%;height:100%;object-fit:cover;object-position:center 38%}
.hero-media::after{
  content:"";position:absolute;inset:0;
  background:
    linear-gradient(100deg,rgba(10,22,40,.86) 0%,rgba(10,22,40,.58) 42%,rgba(10,22,40,.16) 72%,rgba(10,22,40,.34) 100%),
    linear-gradient(180deg,rgba(10,22,40,.34) 0%,transparent 30%,rgba(10,22,40,.44) 100%);
}
.hero-inner{
  position:relative;display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,.72fr);
  gap:var(--s-10);align-items:center;
  padding-block:clamp(40px,4.5vw,68px);min-height:min(62vh,540px);
}
.hero-content{max-width:640px}
.hero-badge{
  display:inline-flex;align-items:center;gap:var(--s-2);
  padding:var(--s-2) var(--s-4);border-radius:var(--radius-full);
  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.3);
  backdrop-filter:blur(10px);color:#fff;margin:0;
  font-size:var(--fs-xs);font-weight:600;letter-spacing:.14em;text-transform:uppercase;
}
.hero-badge .pulse{
  width:7px;height:7px;border-radius:50%;background:var(--success);
  box-shadow:0 0 0 0 rgba(14,167,112,.6);animation:pulse 2.4s infinite
}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(14,167,112,.55)}
  70%{box-shadow:0 0 0 9px rgba(14,167,112,0)}
  100%{box-shadow:0 0 0 0 rgba(14,167,112,0)}
}
/* Wordmark stays on a single line at every width — the domain reads as one
   unit, so it must never wrap. Sized to fit 375px with room to spare. */
.hero h1{
  color:#fff;margin-block:var(--s-5) var(--s-4);
  font-size:clamp(1.55rem,4.3vw,3rem);white-space:nowrap
}
.hero h1 .tld{
  font-size:.52em;font-weight:500;letter-spacing:.03em;color:var(--bright)
}
.hero-desc{font-size:clamp(.95rem,1.5vw,1.15rem);color:#dce8f7;max-width:52ch;line-height:1.6}
.hero-features{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-3);margin-block:var(--s-5);padding:0}
.hero-features li{
  display:inline-flex;align-items:center;gap:var(--s-2);
  padding:var(--s-2) var(--s-4);border-radius:var(--radius-full);
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.22);
  color:#eaf3fc;font-size:var(--fs-sm);font-weight:500;backdrop-filter:blur(6px)
}
.hero-features svg{width:15px;height:15px;color:var(--bright);flex:none}
.hero-btns{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-top:var(--s-6)}

.hero-panel{
  background:rgba(255,255,255,.94);
  backdrop-filter:blur(22px) saturate(150%);-webkit-backdrop-filter:blur(22px) saturate(150%);
  border:1px solid rgba(255,255,255,.7);border-radius:var(--radius-xl);
  padding:var(--s-6) var(--s-6) var(--s-5);box-shadow:var(--shadow-lg)
}
.hero-panel .cap{
  font-size:var(--fs-xs);color:var(--text-muted);letter-spacing:.06em;
  text-transform:uppercase;font-weight:600;margin:0
}
.hero-panel h2{font-size:var(--fs-lg);letter-spacing:-.005em;margin-top:var(--s-1)}
.hero-panel dl{display:grid;gap:var(--s-2);margin-top:var(--s-5)}
.hero-panel .row{
  display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-4);
  padding:var(--s-3) var(--s-4);border-radius:var(--radius);background:var(--off-white)
}
.hero-panel dt{font-size:var(--fs-sm);color:var(--text-muted)}
.hero-panel dd{font-size:var(--fs-lg);font-weight:600;color:var(--primary)}
.hero-panel .dd-text{font-size:var(--fs-base)}
.hero-panel .row.hl{background:linear-gradient(120deg,var(--accent-light),var(--sky))}
.hero-panel .row.hl dd{color:var(--accent-deep)}
.hero-panel .foot{
  margin-top:var(--s-5);padding-top:var(--s-5);border-top:1px solid var(--border);
  display:flex;align-items:flex-start;gap:var(--s-3);font-size:var(--fs-xs);
  color:var(--text-muted);max-width:none
}
.hero-panel .foot svg{width:16px;height:16px;color:var(--accent);flex:none;margin-top:2px}
@media(max-width:1000px){
  .hero-inner{grid-template-columns:1fr;gap:var(--s-10);min-height:0;padding-block:68px}
  .hero-media img{object-position:center 42%}
}
@media(max-width:1000px){
  /* Stacked hero text spans the full width, so the diagonal scrim no longer
     protects it. Swap to a vertical scrim that keeps every overlay legible
     against the bright parts of the photo. */
  .hero-media::after{
    background:linear-gradient(180deg,
      rgba(10,22,40,.88) 0%,rgba(10,22,40,.74) 45%,rgba(10,22,40,.84) 100%);
  }
}
@media(max-width:640px){
  /* Tighten the pills so two sit per row instead of one each, and give the
     CTAs full width for thumb reach. */
  .hero-features{gap:var(--s-2)}
  .hero-features li{font-size:var(--fs-xs);padding:6px var(--s-3)}
  .hero-features svg{width:13px;height:13px}
  .hero-btns{flex-direction:column;align-items:stretch}
  .hero-btns .btn{width:100%}
}

/* ---------- Trust bar (overlaps hero) ---------- */
.trust-bar{position:relative;z-index:2;margin-top:calc(-1 * var(--s-12))}
.trust-grid{
  background:#fff;border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);
  border:1px solid var(--border-light);display:grid;grid-template-columns:repeat(4,1fr);overflow:hidden
}
.trust-item{display:flex;gap:var(--s-4);align-items:flex-start;padding:var(--s-6) var(--s-5);position:relative}
.trust-item+.trust-item::before{
  content:"";position:absolute;inset-block:22%;inset-inline-start:0;width:1px;background:var(--border)
}
.trust-icon{
  width:46px;height:46px;flex:none;border-radius:var(--radius);display:grid;place-items:center;
  color:var(--accent-deep);background:linear-gradient(140deg,var(--sky),var(--accent-light))
}
.trust-icon svg{width:22px;height:22px}
.trust-item h3{font-size:var(--fs-base);margin-bottom:2px}
.trust-item p{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.5;max-width:26ch}
@media(max-width:940px){.trust-grid{grid-template-columns:1fr 1fr}.trust-item:nth-child(3)::before{display:none}}
@media(max-width:560px){
  .trust-bar{margin-top:calc(-1 * var(--s-8))}
  .trust-grid{grid-template-columns:1fr}
  .trust-item+.trust-item::before{inset:0 var(--s-5) auto;width:auto;height:1px}
}

/* ---------- Intro with sticky rail ---------- */
.intro-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,.65fr);gap:clamp(32px,5vw,var(--s-20))}
.rail{position:sticky;top:calc(var(--header-height) + var(--s-5));align-self:start}
.rail-card{border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--border);background:#fff;box-shadow:var(--shadow-sm)}
.rail-card figure{margin:0;position:relative;aspect-ratio:4/3;background:var(--sky)}
.rail-card figure img{width:100%;height:100%;object-fit:cover}
.rail-card figure::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 45%,rgba(10,22,40,.74))}
.rail-card figcaption{position:absolute;inset-inline:0;bottom:0;padding:var(--s-5);color:#fff;font-size:var(--fs-sm);font-weight:500;z-index:1}
.rail-body{padding:var(--s-6)}
.rail-body .k{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-4);padding-block:var(--s-3);border-bottom:1px solid var(--border-light);font-size:var(--fs-sm)}
.rail-body .k:last-child{border-bottom:0;padding-bottom:0}
.rail-body .k span{color:var(--text-muted)}
.rail-body .k b{color:var(--primary);font-weight:600}
@media(max-width:960px){.intro-grid{grid-template-columns:1fr}.rail{position:static}}

/* ---------- Bento benefits ---------- */
.benefits-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--s-4);margin-top:var(--s-12)}
.benefit-card{
  grid-column:span 2;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:var(--s-8) var(--s-6);position:relative;overflow:hidden;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur)
}
.benefit-card::before{
  content:"";position:absolute;inset-inline:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--bright),transparent);
  transform:scaleX(0);transform-origin:left;transition:transform 380ms var(--ease)
}
.benefit-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--accent-light)}
.benefit-card:hover::before{transform:scaleX(1)}
.benefit-card.wide{grid-column:span 3}
.benefit-icon{
  width:52px;height:52px;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--sky),var(--accent-light));color:var(--primary);margin-bottom:var(--s-5)
}
.benefit-icon svg{width:25px;height:25px}
.benefit-card h3{margin-bottom:var(--s-3)}
.benefit-card p{color:var(--text-muted);line-height:1.65;max-width:46ch}
@media(max-width:900px){.benefits-grid{grid-template-columns:repeat(2,1fr)}.benefit-card,.benefit-card.wide{grid-column:span 1}}
@media(max-width:580px){.benefits-grid{grid-template-columns:1fr}}

/* ---------- Comparison (dark + chart) ---------- */
.section-dark{position:relative;background:var(--primary-deepest);color:#dce8f7;overflow:hidden}
.section-dark::before{
  content:"";position:absolute;width:620px;height:620px;border-radius:50%;
  background:radial-gradient(circle,rgba(18,163,227,.26),transparent 68%);
  top:-240px;right:-160px;pointer-events:none
}
.section-dark::after{
  content:"";position:absolute;width:460px;height:460px;border-radius:50%;
  background:radial-gradient(circle,rgba(14,167,112,.14),transparent 70%);
  bottom:-200px;left:-120px;pointer-events:none
}
.section-dark .container{position:relative}
.section-dark h2,.section-dark h3{color:#fff}
.section-dark .lede{color:#a9c0dc}
.comparison-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-6);margin-top:var(--s-12)}
.comparison-card{
  border-radius:var(--radius-lg);padding:var(--s-8);
  background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.12);
  backdrop-filter:blur(10px);transition:transform var(--dur) var(--ease)
}
.comparison-card:hover{transform:translateY(-3px)}
.comparison-card.good{background:linear-gradient(150deg,rgba(18,163,227,.16),rgba(255,255,255,.04));border-color:rgba(18,163,227,.4)}
.comparison-tag{
  display:inline-flex;align-items:center;gap:var(--s-2);margin-bottom:var(--s-4);
  font-size:var(--fs-xs);font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:#9fb6d4
}
.comparison-tag svg{width:15px;height:15px}
.comparison-card.good .comparison-tag{color:var(--bright)}
.comparison-card h3{font-size:var(--fs-2xl);margin-bottom:var(--s-3)}
.comparison-card>p{color:#a9c0dc;margin-bottom:var(--s-6)}
.comparison-card dl{display:grid;gap:var(--s-2)}
.comparison-card .row{
  display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-4);
  padding:var(--s-3) var(--s-4);border-radius:var(--radius);
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08)
}
.comparison-card dt{font-size:var(--fs-sm);color:#9fb6d4}
.comparison-card dd{font-size:var(--fs-lg);font-weight:600;color:#fff}
.comparison-card.good dd{color:var(--bright)}
.comparison-card .dd-text{font-size:var(--fs-base)}

.chart{margin-top:var(--s-12);padding:var(--s-8);border-radius:var(--radius-lg);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1)}
.chart-top{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--s-6);flex-wrap:wrap;margin-bottom:var(--s-8)}
.chart-top h3{font-size:var(--fs-lg)}
.chart-legend{display:flex;gap:var(--s-5);font-size:var(--fs-sm);color:#a9c0dc;flex-wrap:wrap}
.chart-legend span{display:inline-flex;align-items:center;gap:var(--s-2)}
.swatch{width:12px;height:12px;border-radius:3px;flex:none;display:inline-block}
.swatch-a{background:#5a749b}
.swatch-b{background:var(--bright)}
.bars{display:grid;gap:var(--s-8)}
.bar-group{display:grid;gap:var(--s-3)}
.bar-label{display:flex;justify-content:space-between;gap:var(--s-4);font-size:var(--fs-sm);color:#c4d5ea;margin:0;max-width:none}
.bar-label .unit{color:#8aa2c2;font-size:var(--fs-xs)}
.bar-track{height:34px;border-radius:var(--radius);background:rgba(255,255,255,.06);position:relative;overflow:hidden}
.bar-fill{
  position:absolute;inset-block:0;left:0;border-radius:var(--radius);
  display:flex;align-items:center;padding-inline:var(--s-4);
  font-size:var(--fs-sm);font-weight:600;color:#fff;width:0;
  transition:width 900ms var(--ease)
}
.bar-fill.a{background:linear-gradient(90deg,#3e5680,#5a749b)}
.bar-fill.b{background:linear-gradient(90deg,var(--accent-deep),var(--bright))}
.chart-note{margin-top:var(--s-6);font-size:var(--fs-xs);color:#8aa2c2;max-width:none}
.center-cta{margin-top:var(--s-12);text-align:center}
@media(max-width:860px){.comparison-grid{grid-template-columns:1fr}}

/* ---------- Split (two-column prose + supporting column) ---------- */
.split{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(32px,5vw,var(--s-20));align-items:center}
@media(max-width:940px){.split,.split.flip{grid-template-columns:1fr}}

/* ---------- Side stack: supporting cards in the right column ----------
   Replaces the decorative photo in the two long-copy sections, so the
   right-hand space carries real information instead of a repeated image. */
.split.text-cards{grid-template-columns:1.08fr .92fr;align-items:start}
.side-stack{display:grid;gap:var(--s-4);position:sticky;top:calc(var(--header-height) + var(--s-5))}
.side-card{
  padding:var(--s-6);border-radius:var(--radius-lg);background:#fff;
  border:1px solid var(--border);box-shadow:var(--shadow-sm);position:relative;overflow:hidden;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur)
}
.side-card::before{
  content:"";position:absolute;inset-block:0;inset-inline-start:0;width:3px;
  background:linear-gradient(180deg,var(--bright),var(--accent-deep));
  transform:scaleY(0);transform-origin:top;transition:transform 420ms var(--ease)
}
.side-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--accent-light)}
.side-card:hover::before{transform:scaleY(1)}
.side-card-head{display:flex;align-items:center;gap:var(--s-3);margin-bottom:var(--s-4)}
.side-card-head .ico{
  width:42px;height:42px;flex:none;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--sky),var(--accent-light));color:var(--accent-deep)
}
.side-card-head .ico svg{width:20px;height:20px}
.side-card-head h3{font-size:var(--fs-base);margin:0}
.side-card p{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.66}
.side-card p+p{margin-top:var(--s-3)}
.side-card.feature{background:linear-gradient(160deg,var(--off-white),#fff)}
@media(max-width:940px){
  .split.text-cards{grid-template-columns:1fr}
  .side-stack{position:static}
}

/* ---------- Spec sheet ---------- */
.spec{border-radius:var(--radius-lg);border:1px solid var(--border);background:#fff;box-shadow:var(--shadow-sm);overflow:hidden}
.spec-head{padding:var(--s-5) var(--s-6);background:linear-gradient(120deg,var(--primary),var(--primary-light));color:#fff;display:flex;align-items:center;gap:var(--s-3)}
.spec-head svg{width:19px;height:19px;color:var(--bright);flex:none}
.spec-head h3{color:#fff;font-size:var(--fs-base);letter-spacing:.02em}
.spec dl{display:grid;grid-template-columns:auto 1fr;margin:0}
.spec dt,.spec dd{padding:var(--s-4) var(--s-6);border-bottom:1px solid var(--border-light);font-size:var(--fs-sm)}
.spec dt{color:var(--text-muted);background:var(--off-white);white-space:nowrap;font-weight:500}
.spec dd{color:var(--primary);font-weight:500}
.spec dl>:nth-last-child(-n+2){border-bottom:0}

/* ---------- Mechanism ---------- */
.mech-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-6);margin-top:var(--s-16);position:relative}
.mech-grid::before{
  content:"";position:absolute;top:38px;left:12%;right:12%;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--accent-light),var(--bright),var(--accent-light))
}
.mech-card{position:relative;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--s-8) var(--s-6);transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
.mech-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
.mech-num{
  width:56px;height:56px;border-radius:var(--radius-full);display:grid;place-items:center;
  background:#fff;border:2px solid var(--bright);color:var(--accent-deep);
  font-size:var(--fs-lg);font-weight:700;margin:calc(-1 * var(--s-12)) auto var(--s-6);
  box-shadow:0 0 0 6px #fff
}
.mech-card h3{text-align:center;margin-bottom:var(--s-3);font-size:var(--fs-lg)}
.mech-card p{color:var(--text-muted);font-size:var(--fs-sm);line-height:1.66;text-align:center;margin-inline:auto}
@media(max-width:900px){.mech-grid{grid-template-columns:1fr;gap:var(--s-12);margin-top:var(--s-16)}.mech-grid::before{display:none}}

/* ---------- Steps ---------- */
.section-navy{position:relative;background:var(--primary);color:#dce8f7;overflow:hidden}
.section-navy::before{content:"";position:absolute;inset:0;background:radial-gradient(900px 420px at 82% 6%,rgba(18,163,227,.22),transparent 62%)}
.section-navy .container{position:relative}
.section-navy h2,.section-navy h3{color:#fff}
.section-navy .lede{color:#a9c0dc}
.steps-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-4);margin-top:var(--s-12)}
.step-card{
  padding:var(--s-8) var(--s-6);border-radius:var(--radius-lg);
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.13);
  backdrop-filter:blur(8px);transition:background var(--dur),transform var(--dur) var(--ease)
}
.step-card:hover{background:rgba(255,255,255,.09);transform:translateY(-4px)}
.step-num{
  width:44px;height:44px;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--bright),var(--accent-deep));color:#fff;
  font-weight:700;margin-bottom:var(--s-5)
}
.step-card h3{font-size:var(--fs-lg);margin-bottom:var(--s-3)}
.step-card p{color:#a9c0dc;font-size:var(--fs-sm);line-height:1.64}
@media(max-width:960px){.steps-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.steps-grid{grid-template-columns:1fr}}

/* ---------- Why grid ---------- */
.why-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--s-4);margin-top:var(--s-12)}
.why-card{
  grid-column:span 2;padding:var(--s-8) var(--s-6);border-radius:var(--radius-lg);
  background:#fff;border:1px solid var(--border);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur)
}
.why-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--accent-light)}
.why-card:nth-child(1),.why-card:nth-child(2){grid-column:span 3}
.why-icon{
  width:50px;height:50px;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--primary),var(--primary-light));color:#fff;margin-bottom:var(--s-5)
}
.why-icon svg{width:23px;height:23px}
.why-card h3{margin-bottom:var(--s-3);font-size:var(--fs-lg)}
.why-card p{color:var(--text-muted);font-size:var(--fs-sm);line-height:1.66}
@media(max-width:900px){.why-grid{grid-template-columns:1fr 1fr}.why-card,.why-card:nth-child(1),.why-card:nth-child(2){grid-column:span 1}}
@media(max-width:580px){.why-grid{grid-template-columns:1fr}}

/* ---------- Products ---------- */
.products-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--s-5);margin-top:var(--s-12)}
.product-card{
  background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur)
}
.product-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:var(--accent-light)}
.product-card-img{position:relative;background:var(--off-white);padding:var(--s-6);display:grid;place-items:center}
.product-card-img img{height:180px;width:auto;max-width:100%;object-fit:contain;transition:transform 420ms var(--ease)}
.product-card:hover .product-card-img img{transform:scale(1.05)}
.product-badge{
  position:absolute;top:var(--s-4);left:var(--s-4);
  padding:var(--s-1) var(--s-3);border-radius:var(--radius-full);
  background:var(--primary);color:#fff;font-size:11px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase
}
.product-card-body{padding:var(--s-5) var(--s-6) var(--s-6);display:flex;flex-direction:column;gap:var(--s-3);flex:1}
.product-card-body h3{font-size:var(--fs-base);margin:0}
.product-price{margin-top:auto}
.product-price .price-range{font-size:var(--fs-lg);font-weight:600;color:var(--accent-deep);font-variant-numeric:tabular-nums}
.product-card .btn{margin-top:var(--s-2)}

/* ---------- Safe usage guidelines ----------
   Each rule gets its own meaningful icon rather than five identical ticks,
   so the section scans as designed guidance instead of a checklist. */
.guidelines-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--s-4);margin-top:var(--s-12)}
.guideline{
  grid-column:span 2;position:relative;overflow:hidden;
  padding:var(--s-8) var(--s-6) var(--s-6);border-radius:var(--radius-lg);
  background:#fff;border:1px solid var(--border);box-shadow:var(--shadow-xs);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur)
}
.guideline:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--accent-light)}
/* First two cards take half the row each, giving the grid a deliberate rhythm */
.guideline:nth-child(1),.guideline:nth-child(2){grid-column:span 3}
.guideline-step{
  position:absolute;top:var(--s-5);right:var(--s-6);
  font-size:var(--fs-2xl);font-weight:700;line-height:1;
  /* --border-light was only 1.13:1 — the step order was effectively invisible.
     #8492a5 keeps the soft watermark look while clearing 3:1 for large text. */
  color:#8492a5;letter-spacing:-.04em
}
.guideline-ico{
  width:54px;height:54px;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--sky),var(--accent-light));color:var(--accent-deep);
  margin-bottom:var(--s-5);position:relative;
  transition:background var(--dur),color var(--dur),transform var(--dur) var(--ease)
}
.guideline:hover .guideline-ico{
  background:linear-gradient(140deg,var(--bright),var(--accent-deep));color:#fff;transform:scale(1.05)
}
.guideline-ico svg{width:26px;height:26px}
.guideline p{color:var(--text-secondary);line-height:1.68;font-size:var(--fs-sm);max-width:44ch}
@media(max-width:900px){
  .guidelines-grid{grid-template-columns:1fr 1fr}
  .guideline,.guideline:nth-child(1),.guideline:nth-child(2){grid-column:span 1}
}
@media(max-width:580px){.guidelines-grid{grid-template-columns:1fr}}

/* ---------- Advisory panels ---------- */
.advisory-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-6)}
.advisory{padding:var(--s-8);border-radius:var(--radius-lg);border:1px solid var(--border);background:#fff}
.advisory.warn{background:linear-gradient(160deg,var(--warn-bg),#fff);border-color:var(--warn-line)}
.advisory.info{background:linear-gradient(160deg,var(--off-white),#fff);border-color:var(--accent-light)}
.advisory-head{display:flex;align-items:center;gap:var(--s-3);margin-bottom:var(--s-5)}
.advisory-head .ico{width:42px;height:42px;border-radius:var(--radius);display:grid;place-items:center;flex:none}
.advisory.warn .ico{background:var(--warn-ico);color:var(--warn-fg)}
.advisory.info .ico{background:var(--accent-light);color:var(--accent-deep)}
.advisory-head .ico svg{width:20px;height:20px}
.advisory h2{font-size:var(--fs-2xl)}
.advisory p{font-size:var(--fs-sm);line-height:1.72}
.advisory p+p{margin-top:var(--s-4)}
@media(max-width:880px){.advisory-grid{grid-template-columns:1fr}}

/* ---------- Tips ---------- */
.tips-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-4);margin-top:var(--s-12)}
.tip-card{padding:var(--s-8) var(--s-6);border-radius:var(--radius-lg);background:#fff;border:1px solid var(--border);transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
.tip-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
/* --bright on white is 2.85:1, just under the 3:1 large-text minimum */
.tip-num{display:block;font-size:var(--fs-2xl);font-weight:700;color:var(--accent);line-height:1;margin-bottom:var(--s-4);letter-spacing:-.03em}
.tip-card h3{font-size:var(--fs-base);margin-bottom:var(--s-2)}
.tip-card p{color:var(--text-muted);font-size:var(--fs-sm);line-height:1.64}
@media(max-width:900px){.tips-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.tips-grid{grid-template-columns:1fr}}

/* ---------- FAQ ---------- */
.faq-list{max-width:840px;margin-inline:auto;margin-top:var(--s-12)}
.faq-item{border:1px solid var(--border);border-radius:var(--radius);background:#fff;margin-bottom:var(--s-3);overflow:hidden;transition:box-shadow var(--dur),border-color var(--dur)}
.faq-item[open]{box-shadow:var(--shadow-sm);border-color:var(--accent-light)}
.faq-question{
  list-style:none;cursor:pointer;min-height:64px;padding:var(--s-5) var(--s-6);
  display:flex;align-items:center;justify-content:space-between;gap:var(--s-5);
  font-size:var(--fs-lg);font-weight:500;color:var(--primary);transition:background var(--dur)
}
.faq-question::-webkit-details-marker{display:none}
.faq-question:hover{background:var(--off-white)}
.faq-sign{
  width:34px;height:34px;flex:none;border-radius:var(--radius-full);
  background:var(--sky);color:var(--accent-deep);display:grid;place-items:center;
  transition:transform var(--dur) var(--ease),background var(--dur),color var(--dur)
}
.faq-sign svg{width:16px;height:16px}
.faq-item[open] .faq-sign{transform:rotate(45deg);background:var(--bright);color:#fff}
.faq-answer{padding:0 var(--s-6) var(--s-6);line-height:1.72}
.faq-answer p{max-width:66ch}

/* ---------- CTA ---------- */
.cta-section{position:relative;isolation:isolate;overflow:hidden;background:var(--primary-deepest);color:#fff;text-align:center}
.cta-media{position:absolute;inset:0;z-index:-2}
.cta-media img{width:100%;height:100%;object-fit:cover;object-position:center 40%}
.cta-media::after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,rgba(10,22,40,.95),rgba(24,49,89,.9) 55%,rgba(22,82,160,.74))}
.cta-section .container{position:relative;padding-block:clamp(64px,8vw,110px)}
.cta-section .section-label{justify-content:center;color:var(--bright)}
.cta-section h2{color:#fff;max-width:24ch;margin:var(--s-4) auto var(--s-6);text-wrap:balance}
.cta-section p{color:#cfe0f2;max-width:70ch;margin-inline:auto}
.cta-btns{display:flex;gap:var(--s-3);justify-content:center;flex-wrap:wrap;margin-top:var(--s-10)}

/* ---------- Disclaimer ---------- */
.disclaimer-bar{background:var(--off-white);border-block:1px solid var(--border)}
.disclaimer-bar .container{display:flex;gap:var(--s-5);align-items:flex-start;padding-block:var(--s-10)}
.disclaimer-bar .ico{width:44px;height:44px;flex:none;border-radius:var(--radius);display:grid;place-items:center;background:var(--warn-ico);color:var(--warn-fg)}
.disclaimer-bar .ico svg{width:21px;height:21px}
.disclaimer-bar h2{font-size:var(--fs-base);margin-bottom:var(--s-2)}
.disclaimer-bar p{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.7}
@media(max-width:560px){.disclaimer-bar .container{flex-direction:column}}

/* ---------- Footer ---------- */
.footer{background:var(--primary-deepest);color:#a9c0dc;padding-block:var(--s-20) var(--s-8)}
.footer-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr .9fr;gap:var(--s-10);padding-bottom:var(--s-16)}
/* Uses the real transparent white logo. The old brightness(0) invert(1) trick
   cannot work here: logo.webp has no alpha at all (71% of it is opaque white),
   so inverting it filled the whole rectangle with solid white. */
.footer-about .logo img{height:44px;width:auto;margin-bottom:var(--s-5)}
.footer-about p{font-size:var(--fs-sm);line-height:1.7;max-width:38ch;color:#93aecc}
/* h3, not h4: the footer column headings are <h3> so the document outline
   runs h1 -> h2 -> h3 without skipping. With the old h4 selector these fell
   back to the base h3 rule and rendered navy-on-navy (1.4:1). */
.footer h3{color:#fff;font-size:var(--fs-xs);letter-spacing:.18em;text-transform:uppercase;font-weight:600;margin-bottom:var(--s-5)}
.footer-links{display:grid;gap:var(--s-3)}
.footer-links a{font-size:var(--fs-sm);color:#a9c0dc;display:inline-block;transition:color var(--dur),transform var(--dur) var(--ease)}
.footer-links a:hover{color:var(--bright);transform:translateX(3px)}
.footer-social{display:flex;gap:var(--s-2);margin-top:var(--s-6)}
.footer-social a{
  width:44px;height:44px;border-radius:var(--radius);display:grid;place-items:center;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);color:#c4d5ea;
  transition:background var(--dur),color var(--dur),transform var(--dur) var(--ease)
}
.footer-social a:hover{background:var(--accent);color:#fff;border-color:transparent;transform:translateY(-2px)}
.footer-social svg{width:17px;height:17px}
.footer-contact p{display:flex;align-items:center;gap:var(--s-3);font-size:var(--fs-sm);color:#a9c0dc;max-width:none}
.footer-contact svg{width:16px;height:16px;color:var(--bright);flex:none}
.footer-bottom{border-top:1px solid rgba(255,255,255,.09);padding-top:var(--s-6);display:flex;justify-content:space-between;gap:var(--s-4);flex-wrap:wrap;font-size:var(--fs-xs);color:#7b95b6}
.footer-bottom p{margin:0;max-width:none}
.footer-bottom nav{display:flex;gap:var(--s-5);flex-wrap:wrap}
.footer-bottom a:hover{color:var(--bright)}
@media(max-width:900px){.footer-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.footer-grid{grid-template-columns:1fr;gap:var(--s-8)}}

/* ---------- Back to top ---------- */
.back-to-top{
  position:fixed;right:var(--s-5);bottom:var(--s-5);z-index:var(--z-bar);
  width:48px;height:48px;border-radius:50%;display:grid;place-items:center;
  background:var(--primary);color:#fff;box-shadow:var(--shadow-md);
  opacity:0;visibility:hidden;transform:translateY(10px);
  transition:opacity var(--dur),visibility var(--dur),transform var(--dur) var(--ease),background var(--dur)
}
.back-to-top.visible{opacity:1;visibility:visible;transform:none}
.back-to-top:hover{background:var(--accent)}
.back-to-top svg{width:20px;height:20px}

/* ---------- Sticky order bar (mobile) ---------- */
.order-bar{
  position:fixed;inset-inline:0;bottom:0;z-index:var(--z-bar);display:none;gap:var(--s-3);
  padding:var(--s-3) var(--s-4);padding-bottom:calc(var(--s-3) + env(safe-area-inset-bottom));
  background:rgba(255,255,255,.95);backdrop-filter:blur(16px);
  border-top:1px solid var(--border);box-shadow:0 -8px 24px -12px rgba(10,22,40,.2);
  transform:translateY(110%);transition:transform 300ms var(--ease)
}
.order-bar.show{transform:none}
.order-bar .btn{flex:1;padding-inline:var(--s-4)}
@media(max-width:1000px){
  .order-bar{display:flex}
  /* Only the pages that actually carry an order bar need to reserve room for
     it. Scoping this stops the other 25 pages inheriting 76px of dead space
     and a needlessly raised back-to-top button. */
  body:has(.order-bar){padding-bottom:76px}
  body:has(.order-bar) .back-to-top{bottom:88px}
}

/* ---------- Reveal ---------- */
.reveal{opacity:0;transform:translateY(22px);transition:opacity 640ms var(--ease),transform 640ms var(--ease)}
.reveal.revealed{opacity:1;transform:none}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important
  }
  .reveal{opacity:1;transform:none}
  .bar-fill{transition:none}
}
@media print{
  .header,.util-bar,.order-bar,.nav-scrim,.back-to-top{display:none}
  body{padding-bottom:0}
}

/* ==========================================================================
   SUB-PAGE SYSTEM
   Shared components for every non-homepage template: page header,
   breadcrumb, article prose, product detail, shop, cart, forms, blog.
   ========================================================================== */

/* ---------- Page header (replaces the homepage hero) ---------- */
.page-header{
  position:relative;isolation:isolate;overflow:hidden;
  background:var(--primary-deepest);color:#fff;
}
.page-header-media{position:absolute;inset:0;z-index:-2}
.page-header-media img{width:100%;height:100%;object-fit:cover;object-position:center 40%}
.page-header-media::after{
  content:"";position:absolute;inset:0;
  background:
    linear-gradient(110deg,rgba(10,22,40,.94) 0%,rgba(16,42,76,.86) 48%,rgba(22,82,160,.68) 100%),
    radial-gradient(700px 300px at 88% 8%,rgba(18,163,227,.28),transparent 62%);
}
.page-header .container{position:relative;padding-block:clamp(40px,5vw,72px)}
/* Product pages carry their <h1> next to the buy controls (as the live site
   does), so their banner holds only the breadcrumb and stays slim. */
.page-header.compact .container{padding-block:clamp(18px,2.6vw,30px)}
.page-header h1{
  color:#fff;font-size:clamp(1.9rem,4vw,3rem);margin-top:var(--s-3);
  max-width:24ch;text-wrap:balance
}
.page-header .page-intro{color:#cfe0f2;font-size:var(--fs-lg);max-width:62ch;margin-top:var(--s-4)}
.page-header .section-label{color:var(--bright)}

.breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);font-size:var(--fs-sm);color:#9fb6d4}
.breadcrumb a{transition:color var(--dur)}
.breadcrumb a:hover{color:var(--bright)}
.breadcrumb svg{width:14px;height:14px;opacity:.65}
.breadcrumb [aria-current]{color:#fff;font-weight:500}

/* ---------- Article / long-form content ---------- */
/* The rail leads on the left and sticks while the prose scrolls past it.
   align-items:start is what lets a grid child stick -- a stretched item has no
   free space to travel in. The rail is also first in the DOM so keyboard order
   matches the visual order. */
.article-layout{display:grid;grid-template-columns:288px minmax(0,1fr);gap:clamp(32px,5vw,var(--s-16));align-items:start}
.article-layout.no-aside{grid-template-columns:minmax(0,1fr);max-width:820px;margin-inline:auto}
@media(max-width:960px){
  .article-layout{grid-template-columns:1fr}
  /* Stacked: the article comes first, the rail drops below it. */
  .article-layout>.content-prose{order:1}
  .article-layout>.aside-sticky{order:2}
}

.content-prose>*+*{margin-top:var(--s-5)}
/* Imported body copy fills its column rather than being capped at a reading
   measure — the container itself sets the line length. */
.content-prose p,
.content-prose li,
.content-prose h2,
.content-prose h3,
.content-prose h4{max-width:none}
.content-prose p{font-size:var(--fs-base);line-height:1.78;color:var(--text-secondary)}
.content-prose h2{
  font-size:clamp(1.5rem,2.6vw,2rem);margin-top:var(--s-12);
  padding-bottom:var(--s-3);border-bottom:1px solid var(--border);
  scroll-margin-top:calc(var(--header-height) + var(--s-6))
}
.content-prose h2:first-child{margin-top:0}
.content-prose h3{
  font-size:var(--fs-xl);margin-top:var(--s-8);
  scroll-margin-top:calc(var(--header-height) + var(--s-6))
}
.content-prose ul,.content-prose ol{padding-left:0;display:grid;gap:var(--s-3)}
.content-prose ul li{
  position:relative;padding-left:var(--s-8);line-height:1.72;color:var(--text-secondary)
}
.content-prose ul li::before{
  content:"";position:absolute;left:var(--s-3);top:.62em;width:7px;height:7px;border-radius:50%;
  background:var(--bright)
}
.content-prose ol{counter-reset:ol}
.content-prose ol li{
  position:relative;padding-left:var(--s-10);line-height:1.72;color:var(--text-secondary);
  counter-increment:ol
}
.content-prose ol li::before{
  content:counter(ol);position:absolute;left:0;top:.1em;
  width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  background:var(--accent-light);color:var(--accent-deep);
  font-size:var(--fs-xs);font-weight:700
}
.content-prose strong{color:var(--primary)}
.content-prose a:not(.btn){
  color:var(--accent-deep);text-decoration:underline;text-decoration-thickness:1px;
  text-underline-offset:3px;transition:color var(--dur)
}
.content-prose a:not(.btn):hover{color:var(--bright)}
.content-prose figure{margin:var(--s-8) 0}
.content-prose figure img{border-radius:var(--radius-lg);border:1px solid var(--border)}
.content-prose figcaption{margin-top:var(--s-3);font-size:var(--fs-sm);color:var(--text-muted)}

/* Callout */
.callout{
  display:flex;gap:var(--s-4);padding:var(--s-6);border-radius:var(--radius-lg);
  background:linear-gradient(160deg,var(--off-white),#fff);border:1px solid var(--accent-light);
  margin-block:var(--s-8)
}
.callout .ico{
  width:42px;height:42px;flex:none;border-radius:var(--radius);display:grid;place-items:center;
  background:var(--accent-light);color:var(--accent-deep)
}
.callout .ico svg{width:20px;height:20px}
.callout h3{font-size:var(--fs-base);margin-bottom:var(--s-2)}
.callout p{font-size:var(--fs-sm);line-height:1.7;color:var(--text-secondary);margin:0}
.callout.warn{background:linear-gradient(160deg,var(--warn-bg),#fff);border-color:var(--warn-line)}
.callout.warn .ico{background:var(--warn-ico);color:var(--warn-fg)}

/* Sticky aside: on-page nav / related */
.aside-sticky{
  position:sticky;top:calc(var(--header-height) + var(--s-5));
  display:grid;gap:var(--s-4);
  /* Never taller than the viewport, or sticky would have nowhere to settle. */
  max-height:calc(100vh - var(--header-height) - var(--s-8));
  overflow-y:auto;overscroll-behavior:contain;
  scrollbar-width:thin
}
/* Release the sticky pin once stacked, so the rail scrolls away normally. */
@media(max-width:960px){
  .aside-sticky{position:static;max-height:none;overflow:visible}
}
.aside-box{
  padding:var(--s-6);border-radius:var(--radius-lg);background:#fff;
  border:1px solid var(--border);box-shadow:var(--shadow-sm)
}
.aside-box h2,.aside-box h3{
  font-size:var(--fs-xs);letter-spacing:.16em;text-transform:uppercase;
  color:var(--text-muted);font-weight:600;margin-bottom:var(--s-4)
}
.toc{display:grid;gap:var(--s-1)}
.toc a{
  display:block;padding:var(--s-2) var(--s-3);border-radius:var(--radius-sm,8px);
  font-size:var(--fs-sm);color:var(--text-secondary);border-left:2px solid var(--border);
  transition:background var(--dur),color var(--dur),border-color var(--dur)
}
.toc a:hover{background:var(--off-white);color:var(--primary);border-left-color:var(--bright)}
.aside-box.cta-box{background:linear-gradient(160deg,var(--primary),var(--primary-light));border-color:transparent}
.aside-box.cta-box h2,.aside-box.cta-box h3{color:var(--bright)}
.aside-box.cta-box p{color:#c9d9ee;font-size:var(--fs-sm);margin-bottom:var(--s-5)}
.aside-box.cta-box .btn{width:100%}

/* ---------- Product detail ---------- */
.product-detail{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:clamp(32px,4.5vw,var(--s-16));align-items:start}
@media(max-width:940px){.product-detail{grid-template-columns:1fr}}

.product-gallery{position:sticky;top:calc(var(--header-height) + var(--s-5))}
.product-figure{
  position:relative;border-radius:var(--radius-xl);overflow:hidden;
  background:var(--off-white);border:1px solid var(--border);
  display:grid;place-items:center;padding:var(--s-10);aspect-ratio:1/1
}
.product-figure img{max-height:100%;width:auto;object-fit:contain}
.product-figure .flag{
  position:absolute;top:var(--s-5);left:var(--s-5);
  padding:var(--s-2) var(--s-4);border-radius:var(--radius-full);
  background:var(--primary);color:#fff;font-size:var(--fs-xs);font-weight:600;letter-spacing:.1em;
  text-transform:uppercase
}
.gallery-note{
  margin-top:var(--s-4);display:flex;align-items:center;gap:var(--s-3);
  font-size:var(--fs-xs);color:var(--text-muted)
}
.gallery-note svg{width:15px;height:15px;color:var(--accent);flex:none}
@media(max-width:940px){.product-gallery{position:static}}

.product-info h1{font-size:clamp(1.6rem,3vw,2.25rem);margin-bottom:var(--s-3)}
.product-meta{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-4);margin-bottom:var(--s-5)}
.product-meta span{
  display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--fs-xs);font-weight:500;color:var(--accent-deep);
  padding:var(--s-1) var(--s-3);border-radius:var(--radius-full);background:var(--accent-light)
}
.price-block{
  padding:var(--s-5) var(--s-6);border-radius:var(--radius-lg);
  background:linear-gradient(140deg,var(--sky),var(--accent-light));
  border:1px solid var(--accent-light);margin-bottom:var(--s-6)
}
.price-block .label{font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.14em;color:var(--accent-deep);font-weight:600}
.price-block .price-range{
  display:block;margin-top:var(--s-1);font-size:clamp(1.5rem,2.6vw,1.9rem);
  font-weight:700;color:var(--primary);font-variant-numeric:tabular-nums;letter-spacing:-.02em
}
.price-block .vat{font-size:var(--fs-xs);color:var(--text-muted);margin-top:var(--s-1)}

.buy-field{margin-bottom:var(--s-6)}
.buy-field>.field-label{
  display:block;font-size:var(--fs-sm);font-weight:600;color:var(--primary);margin-bottom:var(--s-3)
}
.variation-options{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.variation-btn{
  min-height:48px;padding:0 var(--s-5);border-radius:var(--radius-full);
  border:1.5px solid var(--border);background:#fff;color:var(--text-secondary);
  font-size:var(--fs-sm);font-weight:500;font-variant-numeric:tabular-nums;
  transition:border-color var(--dur),color var(--dur),background var(--dur),transform var(--dur) var(--ease)
}
.variation-btn:hover{border-color:var(--bright);color:var(--primary)}
.variation-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}
.variation-btn:active{transform:scale(.97)}

/* ---------- WooCommerce variation form ----------
   The pill selector replaces Woo's attribute dropdowns visually, but the real
   form is kept in the DOM and driven by the pills: it submits the genuine
   variation_id and Woo's own stock/price/validation logic still applies.
   Hiding the table (not the form) is what makes that possible. */
.zop-woo-form table.variations,
.zop-woo-form .reset_variations,
.zop-woo-form .woocommerce-variation-price,
.zop-woo-form .woocommerce-variation-description{display:none!important}

.zop-woo-form .woocommerce-variation-add-to-cart,
.zop-woo-form form.cart:not(.variations_form){
  display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:stretch;margin-bottom:var(--s-6)
}
/* Woo's quantity box, restyled as the theme's stepper */
.zop-woo-form .quantity{
  display:inline-flex;align-items:center;
  border:1.5px solid var(--border);border-radius:var(--radius-full);
  overflow:hidden;background:#fff
}
.zop-woo-form .quantity input.qty{
  width:76px;height:48px;border:0;text-align:center;font-weight:600;
  color:var(--primary);font-variant-numeric:tabular-nums;background:transparent
}
.zop-woo-form .quantity input.qty:focus{outline:none}
.zop-woo-form .quantity label{
  position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)
}
/* Woo's submit button, restyled as the primary CTA */
.zop-woo-form .single_add_to_cart_button{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);
  flex:1;min-width:200px;min-height:56px;padding:0 var(--s-8);
  border:0;border-radius:var(--radius-full);cursor:pointer;
  background:var(--primary);color:#fff;
  font-family:inherit;font-size:var(--fs-base);font-weight:600;letter-spacing:.01em;
  box-shadow:0 8px 20px -8px rgba(24,49,89,.5);
  transition:background var(--dur) var(--ease),transform var(--dur) var(--ease)
}
.zop-woo-form .single_add_to_cart_button:hover{background:var(--primary-dark);transform:translateY(-2px)}
.zop-woo-form .single_add_to_cart_button:active{transform:none}
.zop-woo-form .single_add_to_cart_button.disabled,
.zop-woo-form .single_add_to_cart_button[disabled]{
  opacity:.45;cursor:not-allowed;transform:none;box-shadow:none
}
.zop-woo-form .stock{margin:0 0 var(--s-3);font-size:var(--fs-sm);color:var(--success)}
.zop-woo-form .stock.out-of-stock{color:#c0392b}

.buy-row{display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:stretch;margin-bottom:var(--s-6)}
.qty-selector{
  display:inline-flex;align-items:center;border:1.5px solid var(--border);
  border-radius:var(--radius-full);overflow:hidden;background:#fff
}
.qty-selector button{
  width:48px;height:48px;display:grid;place-items:center;
  color:var(--primary);font-size:var(--fs-lg);transition:background var(--dur)
}
.qty-selector button:hover{background:var(--sky)}
.qty-selector input{
  width:56px;height:48px;border:0;text-align:center;font-weight:600;color:var(--primary);
  font-variant-numeric:tabular-nums;-moz-appearance:textfield
}
.qty-selector input::-webkit-outer-spin-button,
.qty-selector input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.qty-selector input:focus{outline:none}
.add-to-cart{flex:1;min-width:200px}

.product-badges{display:grid;gap:var(--s-3);padding-top:var(--s-6);border-top:1px solid var(--border)}
.product-badges .badge{
  display:flex;align-items:center;gap:var(--s-3);
  font-size:var(--fs-sm);color:var(--text-secondary)
}
.product-badges .badge svg{width:17px;height:17px;color:var(--accent);flex:none}

/* Product tabs + spec table */
.product-tabs{margin-top:clamp(48px,6vw,var(--s-20))}
.tab-buttons{display:flex;flex-wrap:wrap;gap:var(--s-2);border-bottom:1px solid var(--border);margin-bottom:var(--s-8)}
.tab-btn{
  min-height:48px;padding:0 var(--s-5);position:relative;
  font-size:var(--fs-sm);font-weight:600;color:var(--text-muted);
  transition:color var(--dur)
}
.tab-btn::after{
  content:"";position:absolute;inset-inline:0;bottom:-1px;height:2px;border-radius:2px;
  background:var(--bright);transform:scaleX(0);transition:transform var(--dur) var(--ease)
}
.tab-btn:hover{color:var(--primary)}
.tab-btn.active{color:var(--primary)}
.tab-btn.active::after{transform:scaleX(1)}
.tab-content{display:none}
.tab-content.active{display:block}

/* ---------- Tables ----------
   .table-wrap is a scroll container so a wide table never makes the page
   scroll sideways. It is focusable (tabindex=0) so keyboard users can pan it. */
.table-wrap{
  overflow-x:auto;-webkit-overflow-scrolling:touch;
  border-radius:var(--radius-lg);border:1px solid var(--border);
  background:#fff;box-shadow:var(--shadow-xs);
  margin-block:var(--s-8)
}
.table-wrap:focus-visible{outline:3px solid var(--bright);outline-offset:2px}

table.data{
  width:100%;border-collapse:separate;border-spacing:0;
  font-size:var(--fs-sm);min-width:520px;margin:0
}
table.data caption{
  caption-side:top;text-align:left;padding:var(--s-5) var(--s-6) 0;
  font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;
  font-weight:600;color:var(--text-muted)
}
table.data th,table.data td{
  padding:var(--s-4) var(--s-6);text-align:left;vertical-align:top;
  border-bottom:1px solid var(--border-light)
}
/* Header row: navy band, so a data table reads as a designed object */
table.data thead th{
  background:linear-gradient(120deg,var(--primary),var(--primary-light));
  color:#fff;font-weight:600;white-space:nowrap;
  font-size:var(--fs-xs);letter-spacing:.1em;text-transform:uppercase;
  border-bottom:0;position:sticky;top:0;z-index:1
}
table.data thead th:first-child{border-top-left-radius:calc(var(--radius-lg) - 1px)}
table.data thead th:last-child{border-top-right-radius:calc(var(--radius-lg) - 1px)}
table.data tbody tr:nth-child(even){background:var(--off-white)}
table.data tbody tr:hover{background:var(--accent-light)}
table.data tbody tr:last-child td{border-bottom:0}
table.data tbody th[scope="row"],
table.data tbody td:first-child{color:var(--primary);font-weight:600}
table.data td{color:var(--text-secondary)}
table.data td:not(:first-child){font-variant-numeric:tabular-nums}
table.data strong{color:var(--primary)}
table.data a{color:var(--accent-deep);text-decoration:underline;text-underline-offset:2px}

/* Two-column spec tables (no header row) read better with a narrow label column */
table.data:not(:has(thead)) td:first-child{width:34%;white-space:nowrap}

/* Woo's attributes table: row headers in the left column, values on the right */
table.shop_attributes tbody th[scope="row"]{
  width:34%;white-space:nowrap;background:var(--off-white);
  color:var(--primary);font-weight:600;font-size:var(--fs-sm);
  letter-spacing:0;text-transform:none
}
table.shop_attributes tbody td p{margin:0}
table.shop_attributes tbody tr:nth-child(even) th[scope="row"]{background:var(--warm-attr,#f3f5f9)}

/* Safety net: any table inside imported prose that the filter did not reach
   still picks up the designed look rather than rendering unstyled. */
.content-prose table:not(.data){
  width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-sm);
  border:1px solid var(--border);border-radius:var(--radius-lg);
  background:#fff;overflow:hidden;margin-block:var(--s-8)
}
.content-prose table:not(.data) th,
.content-prose table:not(.data) td{
  padding:var(--s-4) var(--s-6);text-align:left;vertical-align:top;
  border-bottom:1px solid var(--border-light)
}
.content-prose table:not(.data) tbody tr:nth-child(even){background:var(--off-white)}
.content-prose table:not(.data) tbody tr:last-child td{border-bottom:0}

@media(max-width:640px){
  table.data{min-width:460px;font-size:var(--fs-xs)}
  table.data th,table.data td{padding:var(--s-3) var(--s-4)}
}

/* ---------- Assurance grid under the product image ---------- */
.product-assurance{
  display:grid;grid-template-columns:1fr 1fr;margin-top:var(--s-5);
  border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:#fff
}
.product-assurance div{
  display:flex;align-items:center;gap:var(--s-3);padding:var(--s-4) var(--s-5);
  font-size:var(--fs-sm);font-weight:500;color:var(--primary)
}
.product-assurance div:nth-child(-n+2){border-bottom:1px solid var(--border-light)}
.product-assurance div:nth-child(odd){border-right:1px solid var(--border-light)}
.product-assurance svg{width:18px;height:18px;color:var(--accent);flex:none}
@media(max-width:420px){
  .product-assurance{grid-template-columns:1fr}
  .product-assurance div{border-right:0!important}
  .product-assurance div:not(:last-child){border-bottom:1px solid var(--border-light)}
}

/* ---------- Current selection + per-variant price ---------- */
.selection-line{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s-2);
  font-size:var(--fs-sm);color:var(--text-muted);margin-bottom:var(--s-3)
}
.selection-line b{color:var(--primary);font-weight:600}
.btn-clear{
  display:inline-flex;align-items:center;gap:var(--s-1);margin-left:var(--s-2);
  font-size:var(--fs-xs);font-weight:500;color:var(--text-muted);
  min-height:32px;padding-inline:var(--s-2);border-radius:var(--radius-full);
  transition:color var(--dur),background var(--dur)
}
.btn-clear:hover{color:var(--accent-deep);background:var(--accent-light)}
.btn-clear svg{width:12px;height:12px}
.variant-price{
  margin-top:var(--s-4);font-size:clamp(1.4rem,2.4vw,1.75rem);font-weight:700;
  color:var(--accent-deep);font-variant-numeric:tabular-nums;letter-spacing:-.02em
}

/* ---------- Secondary product actions (no wishlist — no accounts) ---------- */
.product-actions{
  display:flex;flex-wrap:wrap;gap:var(--s-2);
  padding-block:var(--s-5);margin-bottom:var(--s-5);
  border-block:1px solid var(--border)
}
.product-actions a,.product-actions button{
  display:inline-flex;align-items:center;gap:var(--s-2);min-height:44px;
  padding-inline:var(--s-4);border-radius:var(--radius-full);
  font-size:var(--fs-sm);font-weight:500;color:var(--text-secondary);
  transition:background var(--dur),color var(--dur)
}
.product-actions a:hover,.product-actions button:hover{background:var(--accent-light);color:var(--accent-deep)}
.product-actions svg{width:16px;height:16px;flex:none}

/* ---------- Secure checkout + payment methods ---------- */
.secure-checkout{
  margin-top:var(--s-5);padding:var(--s-5) var(--s-6);border-radius:var(--radius-lg);
  background:var(--off-white);border:1px solid var(--border);
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-4)
}
.secure-checkout p{
  display:flex;align-items:center;gap:var(--s-3);margin:0;
  font-size:var(--fs-sm);font-weight:600;color:var(--primary)
}
.secure-checkout p svg{width:18px;height:18px;color:var(--success);flex:none}
/* Real card-scheme artwork lifted from the live site */
.pay-badges img{height:30px;width:auto}

/* ---------- Author / reviewer ---------- */
.author-card{
  display:flex;gap:var(--s-5);align-items:center;
  padding:var(--s-6) var(--s-6) var(--s-6) var(--s-7);
  border-radius:var(--radius-lg);position:relative;overflow:hidden;
  background:
    radial-gradient(420px 140px at 100% 0%,rgba(18,163,227,.07),transparent 70%),
    linear-gradient(160deg,var(--off-white),#fff);
  border:1px solid var(--border);box-shadow:var(--shadow-sm);
  margin-top:var(--s-10)
}
/* Accent spine marks the card as an attribution block at a glance. */
.author-card::before{
  content:"";position:absolute;inset-block:0;inset-inline-start:0;width:4px;
  background:linear-gradient(180deg,var(--bright),var(--primary-light))
}
.author-avatar{
  width:64px;height:64px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--primary),var(--primary-light));color:#fff;
  font-weight:600;font-size:var(--fs-lg);letter-spacing:.04em;
  box-shadow:0 0 0 3px #fff,0 0 0 4px rgba(18,163,227,.28);
  overflow:hidden          /* clip a photo to the circle */
}
@media (max-width:520px){
  .author-card{flex-direction:column;align-items:flex-start;gap:var(--s-4)}
}
/* Reviewer photo, when the source content supplies one */
.author-avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.author-card h3{font-size:var(--fs-lg);margin:3px 0;color:var(--primary);letter-spacing:-.01em}
.author-card > div:last-child > p:last-child{margin-bottom:0}
.author-card .role{
  font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;
  color:var(--text-muted);font-weight:600
}
.author-card h3{font-size:var(--fs-lg);margin:3px 0;color:var(--primary);letter-spacing:-.01em}
.author-card p{margin:0;font-size:var(--fs-sm);color:var(--text-muted)}

/* ---------- References ---------- */
.references{margin-top:var(--s-10)}
.references summary{
  cursor:pointer;list-style:none;min-height:48px;display:flex;align-items:center;
  justify-content:space-between;gap:var(--s-4);padding:var(--s-4) var(--s-5);
  border:1px solid var(--border);border-radius:var(--radius);background:#fff;
  font-size:var(--fs-sm);font-weight:600;color:var(--primary)
}
.references summary::-webkit-details-marker{display:none}
.references summary:hover{background:var(--off-white)}
.references[open] summary{border-radius:var(--radius) var(--radius) 0 0}
.references ol{
  margin:0;padding:var(--s-5) var(--s-6) var(--s-5) var(--s-10);
  border:1px solid var(--border);border-top:0;border-radius:0 0 var(--radius) var(--radius);
  display:grid;gap:var(--s-3);background:#fff
}
.references li{font-size:var(--fs-xs);line-height:1.65;color:var(--text-muted)}
.references a{color:var(--accent-deep);word-break:break-word}

/* ---------- Related products: always a single row ---------- */
.related-products{margin-top:clamp(48px,6vw,var(--s-20))}
.related-products h2{margin-bottom:var(--s-8)}
.products-grid.one-row{grid-template-columns:repeat(5,minmax(0,1fr))}
.products-grid.one-row .product-card-img img{height:130px}
.products-grid.one-row .product-card-body{padding:var(--s-4) var(--s-5) var(--s-5)}
.products-grid.one-row .product-price .price-range{font-size:var(--fs-base)}
/* Below the point where 5 columns stay legible, keep one row but let it swipe */
@media(max-width:1080px){
  .products-grid.one-row{
    display:flex;gap:var(--s-4);overflow-x:auto;padding-bottom:var(--s-3);
    scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;
    scrollbar-width:thin
  }
  .products-grid.one-row>*{flex:0 0 min(230px,72vw);scroll-snap-align:start}
}

/* ---------- Shop toolbar ---------- */
.shop-bar{
  display:flex;flex-wrap:wrap;gap:var(--s-4);align-items:center;justify-content:space-between;
  padding:var(--s-5) var(--s-6);border-radius:var(--radius-lg);
  background:var(--off-white);border:1px solid var(--border-light);margin-bottom:var(--s-10)
}
.shop-bar p{margin:0;font-size:var(--fs-sm);color:var(--text-muted)}
.shop-bar strong{color:var(--primary)}
.chip-row{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.chip{
  min-height:40px;display:inline-flex;align-items:center;padding:0 var(--s-4);
  border-radius:var(--radius-full);border:1px solid var(--border);background:#fff;
  font-size:var(--fs-sm);font-weight:500;color:var(--text-secondary);transition:.2s
}
.chip:hover{border-color:var(--bright);color:var(--primary)}
.chip.active{background:var(--primary);border-color:var(--primary);color:#fff}

/* ---------- Forms ---------- */
.form-layout{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:clamp(32px,5vw,var(--s-16));align-items:start}
@media(max-width:940px){.form-layout{grid-template-columns:1fr}}
.form-card{
  padding:clamp(24px,3vw,var(--s-10));border-radius:var(--radius-lg);background:#fff;
  border:1px solid var(--border);box-shadow:var(--shadow-sm)
}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-5)}
.form-grid .full{grid-column:1/-1}
@media(max-width:640px){.form-grid{grid-template-columns:1fr}}
.field{display:grid;gap:var(--s-2)}
.field label{font-size:var(--fs-sm);font-weight:600;color:var(--primary)}
.field .req{color:#c0392b}
.field .hint{font-size:var(--fs-xs);color:var(--text-muted)}
.field input,.field select,.field textarea{
  min-height:48px;padding:var(--s-3) var(--s-4);border-radius:var(--radius);
  border:1.5px solid var(--border);background:#fff;font-size:var(--fs-base);color:var(--text);
  transition:border-color var(--dur),box-shadow var(--dur)
}
.field textarea{min-height:140px;resize:vertical;line-height:1.6}
.field input::placeholder,.field textarea::placeholder{color:var(--text-muted)}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--bright);box-shadow:0 0 0 4px rgba(18,163,227,.14)
}
.field input[type="file"]{padding:var(--s-3);cursor:pointer}
.checkbox-row{display:flex;gap:var(--s-3);align-items:flex-start}
.checkbox-row input{width:20px;height:20px;min-height:0;flex:none;margin-top:2px;accent-color:var(--accent)}
.checkbox-row label{font-weight:400;font-size:var(--fs-sm);color:var(--text-secondary)}
.form-actions{margin-top:var(--s-8);display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:center}
.form-note{font-size:var(--fs-xs);color:var(--text-muted)}

/* ---------- Contact Form 7 ----------
   CF7 emits its own wrappers, so the theme's field styling is mapped onto them
   rather than duplicated. Validation states use CF7's own classes so no JS
   changes are needed. */
.wpcf7 form.wpcf7-form{margin:0}
.wpcf7 .field{display:grid;gap:var(--s-2);margin:0}
.wpcf7 .field > label{font-size:var(--fs-sm);font-weight:600;color:var(--primary)}
.wpcf7 .field .hint{font-size:var(--fs-xs);color:var(--text-muted)}
.wpcf7 .field .req{color:#c0392b}
.wpcf7 .wpcf7-form-control-wrap{display:block}

.wpcf7 input[type="text"],
.wpcf7 input[type="email"],
.wpcf7 input[type="tel"],
.wpcf7 input[type="url"],
.wpcf7 input[type="number"],
.wpcf7 input[type="date"],
.wpcf7 select,
.wpcf7 textarea{
  width:100%;min-height:48px;padding:var(--s-3) var(--s-4);
  border:1.5px solid var(--border);border-radius:var(--radius);
  background:#fff;font-family:inherit;font-size:var(--fs-base);color:var(--text);
  transition:border-color var(--dur),box-shadow var(--dur)
}
.wpcf7 textarea{min-height:120px;resize:vertical;line-height:1.6}
.wpcf7 input::placeholder,.wpcf7 textarea::placeholder{color:var(--text-muted)}
.wpcf7 input:focus,.wpcf7 select:focus,.wpcf7 textarea:focus{
  outline:none;border-color:var(--bright);box-shadow:0 0 0 4px rgba(18,163,227,.14)
}

/* File input */
.wpcf7 input[type="file"]{
  width:100%;padding:var(--s-3);border:2px dashed var(--border);
  border-radius:var(--radius);background:var(--off-white);cursor:pointer;
  font-size:var(--fs-sm);color:var(--text-secondary)
}
.wpcf7 input[type="file"]:hover{border-color:var(--bright);background:var(--accent-light)}

/* Checkbox / radio groups */
.wpcf7 .wpcf7-checkbox,.wpcf7 .wpcf7-radio{display:flex;flex-wrap:wrap;gap:var(--s-3) var(--s-5)}
.wpcf7 .wpcf7-list-item{margin:0}
.wpcf7 .wpcf7-list-item label{
  display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--fs-sm);font-weight:400;color:var(--text-secondary);cursor:pointer
}
.wpcf7 input[type="checkbox"],.wpcf7 input[type="radio"]{
  width:20px;height:20px;min-height:0;flex:none;accent-color:var(--accent);margin:0
}
.wpcf7 .checkbox-row .wpcf7-list-item label{align-items:flex-start}

/* Submit */
.wpcf7 .form-actions{margin-top:var(--s-8);display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:center}
.wpcf7 input[type="submit"]{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:56px;padding:0 var(--s-8);border:0;border-radius:var(--radius-full);
  background:var(--accent-hover);color:#fff;cursor:pointer;
  font-family:inherit;font-size:var(--fs-base);font-weight:600;
  box-shadow:var(--shadow-accent);
  transition:background var(--dur),transform var(--dur) var(--ease)
}
.wpcf7 input[type="submit"]:hover{background:var(--accent-deep);transform:translateY(-2px)}
.wpcf7 input[type="submit"]:disabled{opacity:.5;cursor:progress;transform:none}
.wpcf7 .wpcf7-spinner{margin-inline-start:var(--s-3)}

/* Headings inside the form (Medical History / Medical Conditions / Other) */
.wpcf7 h2{
  font-size:var(--fs-xl);margin:var(--s-10) 0 var(--s-5);
  padding-bottom:var(--s-3);border-bottom:1px solid var(--border)
}
.wpcf7 h2:first-child{margin-top:0}
.wpcf7 > form > p{color:var(--text-secondary);line-height:1.72}

/* Validation + response messages */
.wpcf7 .wpcf7-not-valid{border-color:#c0392b!important}
.wpcf7 .wpcf7-not-valid-tip{
  display:block;margin-top:var(--s-2);font-size:var(--fs-xs);color:#c0392b;font-weight:500
}
.wpcf7 .wpcf7-response-output{
  margin:var(--s-6) 0 0;padding:var(--s-4) var(--s-5);
  border-radius:var(--radius);border:1px solid var(--border);
  background:var(--off-white);font-size:var(--fs-sm);color:var(--text-secondary)
}
.wpcf7 form.sent .wpcf7-response-output{
  border-color:rgba(14,167,112,.4);background:rgba(14,167,112,.08);color:#0a6e4b
}
.wpcf7 form.invalid .wpcf7-response-output,
.wpcf7 form.unaccepted .wpcf7-response-output,
.wpcf7 form.failed .wpcf7-response-output{
  border-color:var(--warn-line);background:var(--warn-bg);color:var(--warn-fg)
}

.contact-cards{display:grid;gap:var(--s-4)}
.contact-card{
  display:flex;gap:var(--s-4);padding:var(--s-6);border-radius:var(--radius-lg);
  background:#fff;border:1px solid var(--border);box-shadow:var(--shadow-xs);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)
}
.contact-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}
.contact-card .ico{
  width:46px;height:46px;flex:none;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--sky),var(--accent-light));color:var(--accent-deep)
}
.contact-card .ico svg{width:21px;height:21px}
.contact-card h3{font-size:var(--fs-base);margin-bottom:var(--s-1)}
.contact-card p{font-size:var(--fs-sm);color:var(--text-muted);margin:0;line-height:1.6}
.contact-card a{color:var(--accent-deep);word-break:break-word}

/* Upload dropzone */
.dropzone{
  border:2px dashed var(--border);border-radius:var(--radius-lg);
  padding:var(--s-12) var(--s-6);text-align:center;background:var(--off-white);
  transition:border-color var(--dur),background var(--dur)
}
.dropzone:hover{border-color:var(--bright);background:var(--accent-light)}
.dropzone .ico{
  width:56px;height:56px;margin:0 auto var(--s-5);border-radius:var(--radius);
  display:grid;place-items:center;background:#fff;color:var(--accent-deep);
  border:1px solid var(--border)
}
.dropzone .ico svg{width:26px;height:26px}
.dropzone h3{font-size:var(--fs-base);margin-bottom:var(--s-2)}
.dropzone p{font-size:var(--fs-sm);color:var(--text-muted);margin:0 auto;max-width:44ch}

/* ---------- Steps (light variant, for process pages) ---------- */
.process{display:grid;gap:var(--s-4);counter-reset:pc}
.process-item{
  display:flex;gap:var(--s-5);padding:var(--s-6);border-radius:var(--radius-lg);
  background:#fff;border:1px solid var(--border);box-shadow:var(--shadow-xs);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)
}
.process-item:hover{transform:translateX(3px);box-shadow:var(--shadow-md)}
.process-item .n{
  width:44px;height:44px;flex:none;border-radius:var(--radius);display:grid;place-items:center;
  background:linear-gradient(140deg,var(--bright),var(--accent-deep));color:#fff;font-weight:700
}
.process-item h3{font-size:var(--fs-base);margin-bottom:var(--s-2)}
.process-item p{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.66;margin:0}

/* ---------- Blog ---------- */
.blog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--s-6)}
.post-card{
  display:flex;flex-direction:column;border-radius:var(--radius-lg);overflow:hidden;
  background:#fff;border:1px solid var(--border);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),border-color var(--dur)
}
.post-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:var(--accent-light)}
.post-thumb{aspect-ratio:16/10;overflow:hidden;background:var(--sky)}
.post-thumb img{width:100%;height:100%;object-fit:cover;transition:transform 480ms var(--ease)}
.post-card:hover .post-thumb img{transform:scale(1.05)}
.post-body{padding:var(--s-6);display:flex;flex-direction:column;gap:var(--s-3);flex:1}
.post-tag{
  align-self:flex-start;font-size:var(--fs-xs);font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--accent-deep)
}
.post-body h3{font-size:var(--fs-lg)}
.post-body p{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.66}
.post-more{
  margin-top:auto;display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--fs-sm);font-weight:600;color:var(--accent-deep);min-height:44px
}
.post-more svg{width:16px;height:16px;transition:transform var(--dur) var(--ease)}
.post-card:hover .post-more svg{transform:translateX(3px)}

/* ---------- Cart ---------- */
.cart-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:clamp(32px,4vw,var(--s-12));align-items:start}
@media(max-width:940px){.cart-layout{grid-template-columns:1fr}}
.cart-table{width:100%;border-collapse:collapse}
.cart-table th{
  text-align:left;padding:var(--s-4);border-bottom:1px solid var(--border);
  font-size:var(--fs-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted)
}
.cart-table td{padding:var(--s-5) var(--s-4);border-bottom:1px solid var(--border-light);vertical-align:middle}
.cart-item{display:flex;gap:var(--s-4);align-items:center}
.cart-item img{width:72px;height:72px;object-fit:contain;background:var(--off-white);border-radius:var(--radius);flex:none;padding:var(--s-2)}
.cart-item h3{font-size:var(--fs-base);margin-bottom:2px}
.cart-item small{font-size:var(--fs-xs);color:var(--text-muted)}
.cart-empty{text-align:center;padding:clamp(48px,7vw,var(--s-24)) var(--s-6)}
.cart-empty .ico{
  width:80px;height:80px;margin:0 auto var(--s-6);border-radius:50%;display:grid;place-items:center;
  background:var(--off-white);color:var(--text-muted);border:1px solid var(--border)
}
.cart-empty .ico svg{width:34px;height:34px}
.cart-empty h2{margin-bottom:var(--s-3)}
.cart-empty p{color:var(--text-muted);max-width:44ch;margin:0 auto var(--s-8)}
.summary{
  position:sticky;top:calc(var(--header-height) + var(--s-5));
  padding:var(--s-6);border-radius:var(--radius-lg);background:#fff;
  border:1px solid var(--border);box-shadow:var(--shadow-sm)
}
.summary h2{font-size:var(--fs-lg);margin-bottom:var(--s-5)}
.summary .line{display:flex;justify-content:space-between;padding-block:var(--s-3);font-size:var(--fs-sm);border-bottom:1px solid var(--border-light)}
.summary .line span{color:var(--text-muted)}
.summary .line b{color:var(--primary);font-variant-numeric:tabular-nums}
.summary .line.total{border-bottom:0;padding-top:var(--s-5);font-size:var(--fs-lg)}
.summary .line.total b{font-weight:700}
.summary .btn{width:100%;margin-top:var(--s-5)}
@media(max-width:940px){.summary{position:static}}

/* ---------- Legal / definition pages ---------- */
.legal-meta{
  display:flex;flex-wrap:wrap;gap:var(--s-4);padding:var(--s-5) var(--s-6);
  border-radius:var(--radius);background:var(--off-white);border:1px solid var(--border-light);
  font-size:var(--fs-sm);color:var(--text-muted);margin-bottom:var(--s-10)
}
.legal-meta b{color:var(--primary)}

/* ---------- Stat strip ---------- */
.stat-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-4)}
.stat{
  padding:var(--s-6);border-radius:var(--radius-lg);background:#fff;
  border:1px solid var(--border);text-align:center
}
.stat b{
  display:block;font-size:clamp(1.5rem,2.6vw,2rem);font-weight:700;color:var(--accent-deep);
  letter-spacing:-.03em;font-variant-numeric:tabular-nums
}
.stat span{font-size:var(--fs-sm);color:var(--text-muted)}
@media(max-width:900px){.stat-strip{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.stat-strip{grid-template-columns:1fr}}

/* ---------- 2-col feature list ---------- */
.pair-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-4)}
@media(max-width:760px){.pair-grid{grid-template-columns:1fr}}


/* ---------- Post byline ---------- */
/* Mirrors the live site's "By <author> | <date>" line, with the date in a
   <time> element and an added reading estimate. Sits on the navy banner. */
.post-byline{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-3);
  margin-top:var(--s-4);font-size:var(--fs-sm);color:#cfe0f2
}
.post-byline strong{color:#fff;font-weight:600}
.post-byline time{color:#cfe0f2}
.post-byline .byline-sep{color:rgba(207,224,242,.45)}
.post-byline .byline-read{color:var(--bright)}

/* Author monogram, used when no photograph is available */
.author-monogram{font-size:var(--fs-lg);letter-spacing:.04em}
.author-card .author-updated{
  margin-top:var(--s-2);font-size:var(--fs-xs);color:var(--text-muted)
}

/* ---------- Previous / next article ---------- */
.post-nav{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4);
  margin-top:var(--s-10)
}
.post-nav-link{
  display:flex;flex-direction:column;gap:var(--s-2);min-height:48px;
  padding:var(--s-5);border:1px solid var(--border);border-radius:var(--radius-lg);
  background:#fff;transition:border-color var(--dur),box-shadow var(--dur),transform var(--dur)
}
.post-nav-link:hover{
  border-color:var(--bright);box-shadow:var(--shadow-sm);transform:translateY(-2px)
}
.post-nav-link.empty{border:0;background:none;pointer-events:none}
.post-nav-link.next{text-align:right}
.post-nav-label{
  display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--fs-xs);font-weight:600;letter-spacing:.12em;text-transform:uppercase;
  color:var(--accent-deep)
}
.post-nav-link.next .post-nav-label{justify-content:flex-end}
.post-nav-label svg{width:15px;height:15px}
.post-nav-title{font-size:var(--fs-sm);font-weight:600;color:var(--primary);line-height:1.45}
@media (max-width:640px){
  .post-nav{grid-template-columns:1fr}
  .post-nav-link.next{text-align:left}
  .post-nav-link.next .post-nav-label{justify-content:flex-start}
  .post-nav-link.empty{display:none}
}

/* ---------- Archive pagination ---------- */
.pagination{margin-top:var(--s-12);display:flex;justify-content:center}
.pagination .screen-reader-text{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.pagination .nav-links{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2)}
.pagination .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:48px;min-height:48px;padding:0 var(--s-4);
  border:1px solid var(--border);border-radius:var(--radius);background:#fff;
  font-size:var(--fs-sm);font-weight:600;color:var(--primary);
  transition:border-color var(--dur),background var(--dur),color var(--dur)
}
.pagination a.page-numbers:hover{border-color:var(--bright);background:var(--off-white)}
.pagination .page-numbers.current{
  background:var(--primary);border-color:var(--primary);color:#fff
}
.pagination .page-numbers.dots{border:0;background:none;min-width:24px;color:var(--text-muted)}

/* ---------- Article hero (post featured image) ---------- */
/* The source files are 1400x350 banner strips, so the frame keeps that ratio
   rather than letting a tall crop push the article body down the page. */
.article-hero{
  margin:calc(var(--s-8) * -1) 0 0;position:relative;z-index:1;
  border-radius:var(--radius-lg);overflow:hidden;
  box-shadow:var(--shadow-md);background:var(--off-white)
}
.article-hero-img{
  display:block;width:100%;height:auto;
  aspect-ratio:1400 / 350;object-fit:cover
}
.article-hero figcaption{
  padding:var(--s-3) var(--s-5);font-size:var(--fs-xs);color:var(--text-muted);
  background:#fff;border-top:1px solid var(--border);text-align:center
}
@media (max-width:640px){
  .article-hero{margin-top:calc(var(--s-5) * -1);border-radius:var(--radius)}
  /* A 4:1 strip is unreadably thin on a phone, so it is allowed to grow. */
  .article-hero-img{aspect-ratio:16 / 9}
}

/* ---------- Review assurance panel ---------- */
/* Used where the source credits a review but names no individual, so no
   avatar or invented initial is implied. */
.review-note{
  display:flex;gap:var(--s-5);align-items:flex-start;
  margin-top:var(--s-8);padding:var(--s-5) var(--s-6);
  border:1px solid rgba(18,163,227,.28);border-radius:var(--radius-lg);
  background:linear-gradient(150deg,rgba(225,245,254,.72),#fff)
}
.review-note-icon{
  flex:none;width:44px;height:44px;border-radius:var(--radius);
  display:grid;place-items:center;color:#fff;
  background:linear-gradient(140deg,var(--primary),var(--accent))
}
.review-note-icon svg{width:24px;height:24px}
.review-note-title{
  font-size:var(--fs-base);font-weight:600;color:var(--primary);margin:0 0 4px
}
.review-note p{margin:0;font-size:var(--fs-sm);line-height:1.7;color:var(--text-secondary)}
.review-note p+p{margin-top:var(--s-2)}
@media (max-width:520px){
  .review-note{flex-direction:column;gap:var(--s-3)}
}


/* ==========================================================================
   PURCHASE FLOW — basket drawer, cart, checkout, confirmation
   ========================================================================== */

.btn-ghost{border:1.5px solid var(--border);color:var(--primary);background:#fff}
.btn-ghost:hover{border-color:var(--primary);background:var(--off-white)}

/* The AJAX layer applies quantity changes immediately, so WooCommerce's own
   update button is only needed when scripting is unavailable. */
.cart-update-fallback{display:none}
html.no-js .cart-update-fallback{display:block;margin-top:var(--s-5)}

/* ---------- Basket drawer ----------
   Printed as a direct child of <body>: an ancestor with a transform or
   backdrop-filter would become the containing block for these fixed elements
   and collapse the panel to that ancestor's box. */
.cart-drawer-scrim{
  position:fixed;inset:0;z-index:1000;
  background:rgba(10,22,40,.55);backdrop-filter:blur(2px);
  opacity:0;transition:opacity var(--dur) var(--ease)
}
.cart-drawer-scrim.open{opacity:1}

.cart-drawer{
  position:fixed;top:0;right:0;bottom:0;z-index:1001;
  width:min(420px,92vw);display:flex;flex-direction:column;
  background:var(--white);box-shadow:var(--shadow-lg);
  transform:translateX(100%);
  /* visibility is stepped, never interpolated, so the panel is focusable the
     instant it opens rather than after the slide finishes. */
  transition:transform 300ms var(--ease),visibility 0s linear 300ms;
  visibility:hidden;overscroll-behavior:contain
}
.cart-drawer.open{
  transform:none;visibility:visible;
  transition:transform 300ms var(--ease),visibility 0s linear 0s
}
.cart-drawer[hidden]{display:flex}   /* [hidden] must not fight the transition */
.cart-drawer[hidden]:not(.open){visibility:hidden;pointer-events:none}

.cart-drawer-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s-4);
  padding:var(--s-5) var(--s-6);border-bottom:1px solid var(--border);
  background:linear-gradient(160deg,var(--off-white),#fff);flex:none
}
.cart-drawer-head h2{font-size:var(--fs-lg);margin:0;display:grid;gap:2px}
.cart-drawer-count{
  font-size:var(--fs-xs);font-weight:500;letter-spacing:.1em;text-transform:uppercase;
  color:var(--text-muted)
}
.cart-drawer-close{
  flex:none;width:40px;height:40px;border-radius:var(--radius);
  display:grid;place-items:center;color:var(--text-muted);
  border:1px solid transparent;transition:background var(--dur),color var(--dur)
}
.cart-drawer-close:hover{background:var(--off-white);color:var(--primary)}
.cart-drawer-close svg{width:20px;height:20px}

/* The inner wrapper is what the server re-renders, so it carries the scroll. */
.cart-drawer-inner{
  flex:1;min-height:0;display:flex;flex-direction:column
}
.cart-drawer-body{flex:1;min-height:0;overflow-y:auto;padding:var(--s-4) var(--s-6)}
.cart-drawer-foot{
  flex:none;padding:var(--s-5) var(--s-6);border-top:1px solid var(--border);
  background:var(--off-white);display:grid;gap:var(--s-4)
}
.cart-drawer-totals{display:grid;gap:var(--s-2)}
.cart-drawer-note{
  display:flex;align-items:flex-start;gap:var(--s-2);margin:0;
  font-size:var(--fs-xs);line-height:1.6;color:var(--text-muted)
}
.cart-drawer-note svg{width:15px;height:15px;flex:none;color:var(--success);margin-top:2px}
.cart-drawer-actions{display:grid;gap:var(--s-2)}
.cart-drawer-live{
  position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);margin:0
}

.cart-drawer-empty{
  display:grid;gap:var(--s-3);justify-items:center;text-align:center;
  padding:var(--s-12) var(--s-4)
}
.cart-drawer-empty .ico{
  width:64px;height:64px;border-radius:50%;display:grid;place-items:center;
  background:var(--sky,var(--off-white));color:var(--primary-light)
}
.cart-drawer-empty .ico svg{width:30px;height:30px}
.cart-drawer-empty h3{font-size:var(--fs-lg);margin:0}
.cart-drawer-empty p{font-size:var(--fs-sm);color:var(--text-muted);max-width:34ch;margin:0}

/* Scroll lock. overflow:hidden on <body> is ignored by iOS Safari, so the body
   is pinned and the saved offset restored on close. */
body.cart-open{position:fixed;inset-inline:0;overflow:hidden;width:100%}

/* ---------- Basket line (drawer and cart page) ---------- */
.cart-line{
  display:grid;grid-template-columns:72px minmax(0,1fr) auto;
  gap:var(--s-4);align-items:start;
  padding:var(--s-4) 0;border-bottom:1px solid var(--border);
  transition:opacity var(--dur)
}
.cart-line:last-child{border-bottom:0}
.cart-line.is-busy{opacity:.45;pointer-events:none}

.cart-line-media{
  width:72px;border-radius:var(--radius);overflow:hidden;
  background:var(--off-white);border:1px solid var(--border)
}
.cart-line-media img{display:block;width:100%;height:auto;aspect-ratio:1;object-fit:contain}

.cart-line-title{font-size:var(--fs-sm);line-height:1.45;margin:0}
.cart-line-title a{color:var(--primary);transition:color var(--dur)}
.cart-line-title a:hover{color:var(--accent-deep)}

.cart-line-meta{list-style:none;margin:var(--s-1) 0 0;padding:0;display:grid;gap:2px}
.cart-line-meta li{font-size:var(--fs-xs);color:var(--text-muted)}
.cart-line-meta b{color:var(--text-secondary);font-weight:600}
.cart-line-unit{font-size:var(--fs-xs);color:var(--text-muted);margin:var(--s-1) 0 0}

.cart-line-controls{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-3);margin-top:var(--s-3)
}
.cart-line-total{
  font-size:var(--fs-sm);font-weight:600;color:var(--primary);margin:0;
  text-align:right;white-space:nowrap
}

.cart-line-remove{
  display:inline-flex;align-items:center;gap:var(--s-1);
  font-size:var(--fs-xs);color:var(--text-muted);
  min-height:32px;padding:0 var(--s-2);border-radius:var(--radius);
  transition:color var(--dur),background var(--dur)
}
.cart-line-remove:hover{color:var(--danger,#c0392b);background:#fdf2f1}
.cart-line-remove svg{width:14px;height:14px}

/* ---------- Quantity stepper ---------- */
.qty-stepper{
  display:inline-flex;align-items:center;
  border:1px solid var(--border);border-radius:var(--radius-full);
  background:#fff;overflow:hidden
}
.qty-stepper .qty-btn{
  width:34px;height:34px;flex:none;display:grid;place-items:center;
  font-size:var(--fs-base);line-height:1;color:var(--primary);
  transition:background var(--dur),color var(--dur)
}
.qty-stepper .qty-btn:hover:not(:disabled){background:var(--off-white)}
.qty-stepper .qty-btn:disabled{color:#b9c3d0;cursor:not-allowed}
.qty-stepper input.qty{
  width:40px;height:34px;border:0;text-align:center;
  font-size:var(--fs-sm);font-weight:600;color:var(--primary);
  background:transparent;-moz-appearance:textfield;appearance:textfield
}
.qty-stepper input.qty::-webkit-outer-spin-button,
.qty-stepper input.qty::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.qty-stepper input.qty:focus{outline:none;background:var(--off-white)}

/* ---------- Cart page ---------- */
.cart-layout{
  display:grid;grid-template-columns:minmax(0,1fr) 340px;
  gap:clamp(24px,4vw,var(--s-12));align-items:start
}
@media(max-width:960px){.cart-layout{grid-template-columns:1fr}}

.cart-main{min-width:0}
.cart-lines{
  border:1px solid var(--border);border-radius:var(--radius-lg);
  background:#fff;box-shadow:var(--shadow-sm);
  padding:var(--s-2) var(--s-6)
}
.cart-continue{margin-top:var(--s-6)}
.link-back,.link-quiet{
  display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--fs-sm);font-weight:500;color:var(--accent-deep)
}
.link-back svg{width:16px;height:16px;transition:transform var(--dur)}
.link-back:hover svg{transform:translateX(-3px)}
.link-quiet{color:var(--text-muted);text-decoration:underline;text-underline-offset:3px}
.link-quiet:hover{color:var(--primary)}

.cart-side{
  position:sticky;top:calc(var(--header-height) + var(--s-5));
  display:grid;gap:var(--s-4)
}
@media(max-width:960px){.cart-side{position:static}}

/* ---------- Summary card (cart + checkout) ---------- */
.summary-card{
  padding:var(--s-6);border-radius:var(--radius-lg);
  background:linear-gradient(165deg,var(--off-white),#fff);
  border:1px solid var(--border);box-shadow:var(--shadow-sm)
}
.summary-card>h2{font-size:var(--fs-lg);margin:0 0 var(--s-5)}
.summary-rows{display:grid;gap:var(--s-2);margin-bottom:var(--s-5)}
.summary-row{
  display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4);
  font-size:var(--fs-sm);color:var(--text-secondary)
}
.summary-row b{color:var(--primary);font-weight:600;white-space:nowrap}
.summary-row.is-discount b{color:var(--success)}
.summary-row.is-total{
  margin-top:var(--s-2);padding-top:var(--s-4);border-top:1px solid var(--border);
  font-size:var(--fs-base)
}
.summary-row.is-total span{font-weight:600;color:var(--primary)}
.summary-row.is-total b{font-size:var(--fs-xl)}
/* WooCommerce renders shipping rows as a <tr>; normalise them into the grid. */
.summary-rows tr{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4)}
.summary-rows th{font-weight:400;color:var(--text-secondary);text-align:left}
.summary-rows td{color:var(--primary);font-weight:600}
.summary-rows table{width:100%;border:0}

/* ---------- Assurance list ---------- */
.cart-assurance{
  list-style:none;margin:0;padding:var(--s-5) var(--s-6);
  border:1px solid var(--border);border-radius:var(--radius-lg);background:#fff;
  display:grid;gap:var(--s-4)
}
.cart-assurance li{display:flex;gap:var(--s-3);align-items:flex-start}
.cart-assurance .ico{
  flex:none;width:34px;height:34px;border-radius:var(--radius);
  display:grid;place-items:center;color:var(--primary-light);
  background:var(--sky,var(--off-white))
}
.cart-assurance .ico svg{width:18px;height:18px}
.cart-assurance b{display:block;font-size:var(--fs-sm);color:var(--primary)}
.cart-assurance span{display:block;font-size:var(--fs-xs);line-height:1.6;color:var(--text-muted)}

/* ---------- Checkout ---------- */
.checkout-steps{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-3);
  margin-bottom:var(--s-8);font-size:var(--fs-xs);
  letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted)
}
.checkout-steps .step{display:inline-flex;align-items:center;gap:var(--s-2)}
.checkout-steps .step+.step::before{
  content:"";width:28px;height:1px;background:var(--border);margin-right:var(--s-1)
}
.checkout-steps b{
  width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:var(--off-white);border:1px solid var(--border);
  font-size:var(--fs-xs);color:var(--text-muted)
}
.checkout-steps .done b{background:var(--success);border-color:var(--success);color:#fff}
.checkout-steps .current{color:var(--primary);font-weight:600}
.checkout-steps .current b{background:var(--primary);border-color:var(--primary);color:#fff}

.checkout-layout{
  display:grid;grid-template-columns:minmax(0,1fr) 380px;
  gap:clamp(24px,4vw,var(--s-12));align-items:start
}
@media(max-width:1024px){.checkout-layout{grid-template-columns:1fr}}
.checkout-main{min-width:0;display:grid;gap:var(--s-6)}
.checkout-side{
  position:sticky;top:calc(var(--header-height) + var(--s-5));
  display:grid;gap:var(--s-4)
}
@media(max-width:1024px){.checkout-side{position:static}}

.checkout-panel{
  padding:var(--s-6);border-radius:var(--radius-lg);
  background:#fff;border:1px solid var(--border);box-shadow:var(--shadow-sm)
}
.checkout-panel:empty{display:none}
.checkout-panel-title{
  display:flex;align-items:center;gap:var(--s-3);
  font-size:var(--fs-lg);margin:0 0 var(--s-5)
}
.checkout-panel-title .n{
  flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;
  background:var(--primary);color:#fff;font-size:var(--fs-xs);font-weight:600
}
.checkout-login-required{
  padding:var(--s-5);border-radius:var(--radius);
  background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-fg)
}

/* WooCommerce field rows: the default template emits <p class="form-row"> with
   inline width classes, which is why the stock checkout looks ragged. */
.checkout-fields .woocommerce-billing-fields__field-wrapper,
.checkout-fields .woocommerce-shipping-fields__field-wrapper,
.woocommerce-additional-fields__field-wrapper{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-4)
}
@media(max-width:640px){
  .checkout-fields .woocommerce-billing-fields__field-wrapper,
  .checkout-fields .woocommerce-shipping-fields__field-wrapper,
  .woocommerce-additional-fields__field-wrapper{grid-template-columns:1fr}
}
.woocommerce .form-row,
.checkout .form-row{display:grid;gap:var(--s-2);margin:0;padding:0;float:none;width:auto}
/* Full-width fields regardless of WooCommerce's own width classes. */
.form-row-wide,
.form-row.notes,
#billing_address_1_field,
#billing_address_2_field,
#billing_country_field,
#billing_email_field,
#shipping_address_1_field,
#shipping_address_2_field,
#shipping_country_field{grid-column:1 / -1}

.woocommerce .form-row label,
.checkout .form-row label{
  font-size:var(--fs-sm);font-weight:600;color:var(--primary);line-height:1.4
}
.woocommerce .form-row .required{color:var(--accent-deep);text-decoration:none}
.woocommerce .form-row .optional{color:var(--text-muted);font-weight:400}

.woocommerce .input-text,
.woocommerce select,
.checkout .input-text,
.checkout select,
.checkout textarea{
  width:100%;min-height:48px;padding:0 var(--s-4);
  font-family:inherit;font-size:var(--fs-base);color:var(--primary);
  background:#fff;border:1.5px solid var(--border);border-radius:var(--radius);
  transition:border-color var(--dur),box-shadow var(--dur)
}
.checkout textarea{min-height:110px;padding:var(--s-3) var(--s-4);line-height:1.6;resize:vertical}
.woocommerce .input-text:focus,
.woocommerce select:focus,
.checkout .input-text:focus,
.checkout select:focus,
.checkout textarea:focus{
  outline:none;border-color:var(--bright);
  box-shadow:0 0 0 4px rgba(18,163,227,.14)
}
.woocommerce .input-text::placeholder,
.checkout textarea::placeholder{color:#9aa7b6}

/* Select2, which WooCommerce uses for country and county */
.select2-container .select2-selection--single{
  height:48px;border:1.5px solid var(--border);border-radius:var(--radius);background:#fff
}
.select2-container--default .select2-selection--single .select2-selection__rendered{
  line-height:46px;padding-left:var(--s-4);color:var(--primary)
}
.select2-container--default .select2-selection--single .select2-selection__arrow{height:46px;right:8px}
.select2-container--default.select2-container--open .select2-selection--single{
  border-color:var(--bright);box-shadow:0 0 0 4px rgba(18,163,227,.14)
}
.select2-dropdown{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.select2-container--default .select2-results__option--highlighted[aria-selected]{
  background:var(--primary)
}

.woocommerce-invalid .input-text,
.woocommerce-invalid select{border-color:#e07a70}
.woocommerce-validated .input-text{border-color:var(--success)}

/* ---------- Order review inside the checkout panel ---------- */
.review-order{margin-bottom:var(--s-5)}
.review-lines{display:grid;gap:var(--s-4);margin-bottom:var(--s-5)}
.review-line{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:var(--s-3);align-items:center}
.review-line-media{position:relative;width:52px}
.review-line-media img{
  display:block;width:100%;height:auto;aspect-ratio:1;object-fit:contain;
  border-radius:10px;background:var(--off-white);border:1px solid var(--border)
}
.review-line-qty{
  position:absolute;top:-6px;right:-6px;min-width:20px;height:20px;padding:0 5px;
  box-sizing:border-box;border-radius:var(--radius-full);
  background:var(--primary);color:#fff;border:2px solid #fff;
  font-size:10px;font-weight:600;display:grid;place-items:center
}
.review-line-name{font-size:var(--fs-sm);font-weight:600;color:var(--primary);margin:0;line-height:1.4}
.review-line-meta{list-style:none;margin:2px 0 0;padding:0}
.review-line-meta li{font-size:var(--fs-xs);color:var(--text-muted)}
.review-line-total{font-size:var(--fs-sm);font-weight:600;color:var(--primary);margin:0;white-space:nowrap}

/* ---------- Payment ---------- */
.checkout-payment-wrap{margin-top:var(--s-5)}
#payment ul.payment_methods{
  list-style:none;margin:0 0 var(--s-5);padding:0;display:grid;gap:var(--s-3)
}
#payment ul.payment_methods li{
  padding:var(--s-4) var(--s-5);border:1.5px solid var(--border);
  border-radius:var(--radius);background:#fff;transition:border-color var(--dur),background var(--dur)
}
#payment ul.payment_methods li:hover{border-color:var(--primary-light)}
#payment ul.payment_methods li label{
  display:inline-flex;align-items:center;gap:var(--s-2);
  font-size:var(--fs-sm);font-weight:600;color:var(--primary);cursor:pointer
}
#payment ul.payment_methods li input[type=radio]{
  width:18px;height:18px;accent-color:var(--accent-hover);flex:none
}
#payment .payment_box{
  margin-top:var(--s-3);padding:var(--s-4);border-radius:var(--radius);
  background:var(--off-white);font-size:var(--fs-sm);color:var(--text-secondary)
}
#payment .payment_box p:last-child{margin-bottom:0}
#payment .woocommerce-terms-and-conditions-wrapper{
  font-size:var(--fs-sm);color:var(--text-muted);margin-bottom:var(--s-4)
}
#payment .form-row.place-order{margin:0}
#payment #place_order,
.woocommerce #place_order{
  width:100%;min-height:56px;border-radius:var(--radius-full);
  background:var(--accent-hover);color:#fff;
  font-family:inherit;font-size:var(--fs-base);font-weight:600;
  box-shadow:var(--shadow-accent);
  transition:background var(--dur),transform var(--dur)
}
#payment #place_order:hover{background:var(--accent-deep);transform:translateY(-2px)}

/* ---------- Confirmation ---------- */
.order-success{max-width:760px;margin-inline:auto}
.order-success-head{
  text-align:center;display:grid;justify-items:center;gap:var(--s-3);
  padding:var(--s-8) var(--s-6);border-radius:var(--radius-lg);
  background:
    radial-gradient(520px 200px at 50% 0%,rgba(18,163,227,.09),transparent 70%),
    linear-gradient(170deg,var(--off-white),#fff);
  border:1px solid var(--border)
}
.order-success-head h2{margin:0;font-size:clamp(1.5rem,3vw,2.25rem)}
.order-success-head p{margin:0;color:var(--text-secondary);max-width:52ch}
.order-badge{
  width:64px;height:64px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--success),#0bbd80);color:#fff;
  box-shadow:0 10px 26px -10px rgba(14,167,112,.6)
}
.order-badge svg{width:30px;height:30px}
.order-badge.is-failed{background:linear-gradient(140deg,#c0392b,#e07a70);box-shadow:none}
.order-success-actions{display:flex;flex-wrap:wrap;gap:var(--s-3);justify-content:center;margin-top:var(--s-3)}

.order-facts{
  list-style:none;margin:var(--s-6) 0 0;padding:var(--s-5) var(--s-6);
  border:1px solid var(--border);border-radius:var(--radius-lg);background:#fff;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--s-5)
}
.order-facts li{display:grid;gap:2px;min-width:0}
.order-facts span{
  font-size:var(--fs-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted)
}
.order-facts b{font-size:var(--fs-sm);color:var(--primary);overflow-wrap:anywhere}

.order-next{margin-top:var(--s-8)}
.order-next h3{font-size:var(--fs-lg);margin-bottom:var(--s-5)}
.order-timeline{list-style:none;margin:0;padding:0;display:grid;gap:var(--s-5)}
.order-timeline li{
  position:relative;padding-left:var(--s-10);display:grid;gap:2px;counter-increment:zop-step
}
.order-timeline{counter-reset:zop-step}
.order-timeline li::before{
  content:counter(zop-step);position:absolute;left:0;top:0;
  width:28px;height:28px;border-radius:50%;display:grid;place-items:center;
  background:var(--primary);color:#fff;font-size:var(--fs-xs);font-weight:600
}
/* Connector between the step markers */
.order-timeline li:not(:last-child)::after{
  content:"";position:absolute;left:13.5px;top:32px;bottom:calc(var(--s-5) * -1 + 4px);
  width:1px;background:var(--border)
}
.order-timeline b{font-size:var(--fs-base);color:var(--primary)}
.order-timeline span{font-size:var(--fs-sm);color:var(--text-muted);line-height:1.7}

.order-success-foot{
  margin-top:var(--s-10);padding-top:var(--s-6);border-top:1px solid var(--border);
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-4)
}

/* WooCommerce's own order-details tables, when a gateway prints them */
.woocommerce-order-details,
.woocommerce-customer-details{margin-top:var(--s-8)}
.woocommerce-order-details h2,
.woocommerce-customer-details h2{font-size:var(--fs-lg);margin-bottom:var(--s-4)}
.woocommerce-order-details table,
.woocommerce-customer-details address{
  width:100%;border:1px solid var(--border);border-radius:var(--radius);
  background:#fff;font-size:var(--fs-sm);font-style:normal;padding:var(--s-4)
}
.woocommerce-order-details table th,
.woocommerce-order-details table td{padding:var(--s-3) var(--s-4);text-align:left}

/* Cart and checkout run the full container width: their own grids provide the
   reading measure, so the article max-width would only squeeze them. */
.article-layout.no-aside.shop-flow{max-width:none;margin-inline:0}
.article-layout.shop-flow>.content-prose>*+*{margin-top:0}

/* ==========================================================================
   Prose bullets must not leak into components
   The cart and checkout render inside .content-prose, so `.content-prose ul
   li::before` was painting a cyan dot beside every assurance row, payment
   method and validation message. Prose lists (no class) keep their bullets;
   component lists opt out.
   ========================================================================== */
.content-prose .cart-assurance li::before,
.content-prose .cart-line-meta li::before,
.content-prose .review-line-meta li::before,
.content-prose .order-facts li::before,
.content-prose .woocommerce-shipping-methods li::before,
.content-prose ul.payment_methods li::before,
.content-prose .woocommerce-error li::before,
.content-prose .woocommerce-info li::before,
.content-prose .woocommerce-message li::before,
.content-prose .woocommerce-NoticeGroup li::before{content:none;display:none}

.content-prose .cart-assurance li,
.content-prose .cart-line-meta li,
.content-prose .review-line-meta li,
.content-prose .order-facts li,
.content-prose .woocommerce-shipping-methods li,
.content-prose ul.payment_methods li{padding-left:0}

/* Restated so the prose <ol> counter cannot outrank the timeline's own. */
.content-prose .order-timeline li::before{
  content:counter(zop-step);position:absolute;left:0;top:0;
  width:28px;height:28px;border-radius:50%;display:grid;place-items:center;
  background:var(--primary);color:#fff;font-size:var(--fs-xs);font-weight:600
}
.content-prose .order-timeline li{padding-left:var(--s-10)}

/* ==========================================================================
   WooCommerce notices
   checkout.js injects these INTO the form, which makes them a grid child — so
   they must span both columns or they squeeze into the left one.
   ========================================================================== */
.woocommerce-NoticeGroup,
.woocommerce-notices-wrapper:not(:empty){grid-column:1 / -1;margin-bottom:var(--s-6)}

.woocommerce-error,
.woocommerce-message,
.woocommerce-info{
  list-style:none;margin:0 0 var(--s-5);padding:var(--s-5) var(--s-6);
  border-radius:var(--radius-lg);border:1px solid;
  display:grid;gap:var(--s-2);font-size:var(--fs-sm);line-height:1.6;
  position:relative;padding-left:var(--s-12)
}
/* Leading icon, drawn once for the whole notice. */
.woocommerce-error::before,
.woocommerce-message::before,
.woocommerce-info::before{
  content:"";position:absolute;left:var(--s-5);top:var(--s-5);
  width:22px;height:22px;border-radius:50%;
  background-repeat:no-repeat;background-position:center;background-size:14px
}

.woocommerce-error{
  background:#fdf3f2;border-color:#f0c9c4;color:#8d2b20
}
.woocommerce-error::before{
  background-color:#c0392b;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3'%3E%3Cpath d='M12 7v7M12 17h.01'/%3E%3C/svg%3E")
}
.woocommerce-message{
  background:#f1fbf6;border-color:#bfe8d3;color:#0d6b46
}
.woocommerce-message::before{
  background-color:var(--success);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3'%3E%3Cpath d='m5 13 4 4L19 7'/%3E%3C/svg%3E")
}
.woocommerce-info{
  background:var(--sky,#eef7fe);border-color:#bfe0f5;color:#12507d
}
.woocommerce-info::before{
  background-color:var(--primary-light);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3'%3E%3Cpath d='M12 11v6M12 7h.01'/%3E%3C/svg%3E")
}

.woocommerce-error li,
.woocommerce-message li,
.woocommerce-info li{margin:0;padding:0;list-style:none}

/* The field name inside an error is a link that jumps to the input. */
.woocommerce-error a,
.woocommerce-message a,
.woocommerce-info a{
  color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px
}
.woocommerce-error a:hover{color:#6d1f16}

/* WooCommerce's own "return to cart" style button inside a notice */
.woocommerce-message .button,
.woocommerce-info .button{
  justify-self:start;margin-top:var(--s-2);min-height:40px;
  display:inline-flex;align-items:center;padding:0 var(--s-5);
  border-radius:var(--radius-full);background:var(--primary);color:#fff;
  font-size:var(--fs-sm);font-weight:600
}

/* Inline, per-field validation text */
.woocommerce-invalid .input-text,
.woocommerce-invalid select,
.woocommerce-invalid .select2-selection{
  border-color:#e07a70;background:#fffafa
}
.woocommerce-invalid-required-field label{color:#8d2b20}
.form-row .woocommerce-error-message,
.form-row > span.error,
.form-row em{
  display:flex;align-items:flex-start;gap:6px;
  font-size:var(--fs-xs);font-style:normal;color:#8d2b20;line-height:1.5
}
.form-row .woocommerce-error-message::before,
.form-row > span.error::before{
  content:"!";flex:none;width:15px;height:15px;border-radius:50%;
  background:#c0392b;color:#fff;font-size:10px;font-weight:700;
  display:grid;place-items:center;margin-top:1px
}

/* ==========================================================================
   Cart coupon
   ========================================================================== */
.cart-coupon{
  margin-top:var(--s-6);padding:var(--s-5) var(--s-6);
  border:1px dashed var(--border);border-radius:var(--radius-lg);
  background:linear-gradient(150deg,var(--off-white),#fff)
}
.cart-coupon-head{display:flex;align-items:flex-start;gap:var(--s-3);margin-bottom:var(--s-4)}
.cart-coupon-head .ico{
  flex:none;width:36px;height:36px;border-radius:var(--radius);
  display:grid;place-items:center;color:var(--accent-deep);
  background:var(--accent-light,var(--sky,#eef7fe))
}
.cart-coupon-head .ico svg{width:19px;height:19px}
.cart-coupon-head b{display:block;font-size:var(--fs-sm);color:var(--primary)}
.cart-coupon-head span{display:block;font-size:var(--fs-xs);color:var(--text-muted)}

.cart-coupon-row{display:flex;flex-wrap:wrap;gap:var(--s-3)}
.cart-coupon-row .input-text{
  flex:1 1 200px;min-width:0;min-height:48px;padding:0 var(--s-4);
  font-family:inherit;font-size:var(--fs-base);color:var(--primary);
  background:#fff;border:1.5px solid var(--border);border-radius:var(--radius);
  text-transform:uppercase;letter-spacing:.06em;
  transition:border-color var(--dur),box-shadow var(--dur)
}
.cart-coupon-row .input-text::placeholder{text-transform:none;letter-spacing:0;color:#9aa7b6}
.cart-coupon-row .input-text:focus{
  outline:none;border-color:var(--bright);box-shadow:0 0 0 4px rgba(18,163,227,.14)
}
.cart-coupon-row .btn{flex:0 0 auto;min-height:48px}

/* An applied coupon, rendered by WooCommerce into the totals */
.summary-row.is-discount .woocommerce-remove-coupon{
  margin-left:var(--s-2);font-size:var(--fs-xs);color:var(--text-muted);
  text-decoration:underline;text-underline-offset:2px
}

/* ==========================================================================
   Inline internal-link CTA
   Replaces bare "visit: Page Name" links buried in the prose.
   ========================================================================== */
.inline-cta{
  display:flex;align-items:center;gap:var(--s-4);
  margin:var(--s-6) 0;padding:var(--s-4) var(--s-5);
  border:1px solid var(--border);border-left:3px solid var(--bright);
  border-radius:var(--radius);background:linear-gradient(100deg,var(--off-white),#fff);
  text-decoration:none;
  transition:border-color var(--dur),box-shadow var(--dur),transform var(--dur),background var(--dur)
}
.inline-cta:hover{
  border-color:var(--primary-light);border-left-color:var(--accent-deep);
  background:#fff;box-shadow:var(--shadow-sm);transform:translateX(2px)
}
.inline-cta-text{display:grid;gap:1px;min-width:0}
.inline-cta-label{
  font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;
  color:var(--text-muted);font-weight:600
}
.inline-cta-title{
  font-size:var(--fs-base);font-weight:600;color:var(--primary);line-height:1.4
}
.inline-cta-arrow{
  flex:none;margin-left:auto;width:34px;height:34px;border-radius:50%;
  display:grid;place-items:center;color:#fff;background:var(--accent-hover);
  transition:background var(--dur),transform var(--dur)
}
.inline-cta-arrow svg{width:16px;height:16px}
.inline-cta:hover .inline-cta-arrow{background:var(--accent-deep);transform:translateX(2px)}

/* The CTA is a block-level link, so the prose link underline must not apply. */
.content-prose a.inline-cta,
.content-prose a.inline-cta:hover{text-decoration:none}


/* ==========================================================================
   Gaps found by the unstyled-class audit
   ========================================================================== */

/* Grid children need an explicit min-width:0, otherwise a long product name
   refuses to wrap and pushes the price column off the card. */
.cart-line-info,
.review-line-info{min-width:0}
.cart-line-title,
.review-line-name{overflow-wrap:anywhere}

/* WooCommerce's own variation readout. The pills already show the selected
   price in .variant-price, and selecting a pill drives Woo's hidden form, which
   would populate this region with a second copy of the same price. */
.zop-woo-form .single_variation,
.zop-woo-form .woocommerce-variation-description{display:none}
/* Kept audible for screen readers: it carries role="alert". */
.zop-woo-form .single_variation.zop-visually-hidden{
  position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)
}

/* Contact details block, restored into the contact page content */
.zop-contact-details{
  margin-bottom:var(--s-8);padding:var(--s-6);
  border:1px solid var(--border);border-radius:var(--radius-lg);
  background:linear-gradient(160deg,var(--off-white),#fff)
}
.zop-contact-details h2{font-size:var(--fs-lg);margin:0 0 var(--s-4)}
.content-prose .zop-contact-details ul{display:grid;gap:var(--s-3);padding-left:0}
.content-prose .zop-contact-details ul li{padding-left:0;font-size:var(--fs-sm)}
.content-prose .zop-contact-details ul li::before{content:none;display:none}
.zop-contact-details strong{color:var(--primary);margin-right:var(--s-1)}
.zop-contact-details a{color:var(--accent-deep);text-decoration:underline;text-underline-offset:2px}

/* Checkout privacy notice */
.woocommerce-privacy-policy-text{
  margin-bottom:var(--s-4);font-size:var(--fs-xs);line-height:1.65;color:var(--text-muted)
}
.woocommerce-privacy-policy-text p{margin:0}
.woocommerce-privacy-policy-link{color:var(--accent-deep);text-underline-offset:2px}

/* Imported wrappers from the live theme: their contents are already styled as
   callouts and accordions, these only need to stop collapsing margins. */
.notice-box{margin:var(--s-8) 0}
.notice-box > *:last-child{margin-bottom:0}
.product-faq{margin-top:var(--s-8)}

/* Byline author span — no visual change needed, but named so the audit is
   honest about what is intentional. */
.byline-author{white-space:nowrap}


/* ==========================================================================
   Form spacing: the <br> that CF7 emits between a label and its input
   .field is display:grid, and a <br> is a normal grid item — so it created an
   empty row of its own between every label and control, adding a full
   line-height plus two gaps. Removing it from the flow is what closes the gap;
   the grid already provides the line break.
   ========================================================================== */
.wpcf7 .field > br,
.field > br,
.wpcf7 .form-grid > p > br{display:none}

/* Same story for CF7's own paragraph wrappers when a form is not using .field */
.wpcf7 > form > p > br{display:none}

/* The prose line-height must not inflate form rows. */
.content-prose .wpcf7 p,
.content-prose .wpcf7 .field{line-height:1.5;margin:0}
.content-prose .wpcf7 label{margin:0}

/* Acceptance / consent checkbox, used by the prescription upload form */
.wpcf7 .wpcf7-acceptance{display:block}
.wpcf7 .wpcf7-acceptance .wpcf7-list-item{margin:0}
.wpcf7 .wpcf7-acceptance label{
  display:flex;align-items:flex-start;gap:var(--s-3);
  font-size:var(--fs-sm);font-weight:400;line-height:1.6;
  color:var(--text-secondary);cursor:pointer
}
.wpcf7 .wpcf7-acceptance input[type="checkbox"]{flex:none;margin-top:2px}

/* A "None" checkbox sitting above its own free-text box reads as one control,
   so the pair is tightened up rather than spaced like two separate fields. */
.wpcf7 .field .wpcf7-checkbox + .wpcf7-form-control-wrap,
.wpcf7 .field .wpcf7-checkbox{margin-bottom:0}
.wpcf7 .field > .wpcf7-form-control-wrap + .wpcf7-form-control-wrap{margin-top:var(--s-3)}

/* Checkbox and radio controls: consistent box size and alignment */
.wpcf7 input[type="checkbox"],
.wpcf7 input[type="radio"]{
  width:20px;height:20px;flex:none;accent-color:var(--accent-hover);cursor:pointer
}

/* Fieldset headings inside long forms */
.wpcf7 h2,
.wpcf7 h3{margin-top:var(--s-8)}
.wpcf7 h2:first-child,
.wpcf7 h3:first-child{margin-top:0}

/* ==========================================================================
   Section rhythm
   Two adjacent .section elements stacked their padding, and .related-products
   then added its own margin on top — about 270px of dead space between the
   references and the related products heading.
   ========================================================================== */
.section-tight-top{padding-top:0}
.section > .container > .related-products{margin-top:0}

/* References render open, so the summary is a heading rather than a control
   the reader has to find. */
.references[open] summary{border-bottom:1px solid var(--border)}
.references summary{cursor:pointer}

/* ==========================================================================
   Right-hand rail spacing
   The assurance card now shares the summary card's padding so both columns
   read on the same rhythm.
   ========================================================================== */
.cart-assurance{padding:var(--s-6);gap:var(--s-5)}
.cart-assurance li{gap:var(--s-4)}


/* ==========================================================================
   FORMS (.zform)
   Contact Form 7's auto-formatter is switched off (inc/forms.php), so the
   markup below is exactly what the form templates declare — no generated <br>
   or <p> to work around. Every row is: label, optional hint, then control.
   ========================================================================== */

.zform{--zf-gap:var(--s-5)}
.zform-section + .zform-section{margin-top:var(--s-10)}

.zform-heading{
  font-size:var(--fs-lg);margin:0 0 var(--s-5);padding-bottom:var(--s-3);
  border-bottom:1px solid var(--border)
}

.zform-grid{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:var(--zf-gap) var(--s-5)
}
.zform-row{display:grid;gap:var(--s-2);min-width:0;align-content:start}
.zform-row--full{grid-column:1 / -1}
@media (max-width:640px){
  .zform-grid{grid-template-columns:1fr}
  .zform-row--full{grid-column:auto}
}

.zform-label{
  font-size:var(--fs-sm);font-weight:600;color:var(--primary);
  line-height:1.4;margin:0
}
.zform-label .req{color:#c0392b;margin-left:2px}
.zform-hint{
  font-size:var(--fs-xs);color:var(--text-muted);line-height:1.5;margin:0
}
.zform-control{display:block;min-width:0}

/* The control wrapper CF7 prints around every field. */
.zform-control .wpcf7-form-control-wrap{display:block}

/* ---------- Text inputs, selects, textareas ---------- */
.zform input[type="text"],
.zform input[type="email"],
.zform input[type="tel"],
.zform input[type="url"],
.zform input[type="number"],
.zform input[type="date"],
.zform select,
.zform textarea{
  display:block;width:100%;min-height:50px;
  padding:0 var(--s-4);
  font-family:inherit;font-size:var(--fs-base);line-height:1.4;color:var(--primary);
  background:#fff;border:1.5px solid var(--border);border-radius:var(--radius);
  transition:border-color var(--dur),box-shadow var(--dur),background var(--dur)
}
.zform textarea{
  min-height:120px;padding:var(--s-3) var(--s-4);line-height:1.6;resize:vertical
}
.zform input::placeholder,
.zform textarea::placeholder{color:#9aa7b6}
.zform input:hover,
.zform textarea:hover,
.zform select:hover{border-color:#c4d0dd}
.zform input:focus,
.zform select:focus,
.zform textarea:focus{
  outline:none;border-color:var(--bright);
  box-shadow:0 0 0 4px rgba(18,163,227,.14)
}

/* ---------- "None" checkbox sitting above its own free-text box ---------- */
/* The pair is one question, so they are grouped tightly rather than spaced
   like two separate fields. */
.zform-stack{display:grid;gap:var(--s-3)}
.zform-check{display:flex}

/* ---------- Checkboxes and radios ---------- */
.zform .wpcf7-checkbox,
.zform .wpcf7-radio{display:flex;flex-wrap:wrap;gap:var(--s-2)}
.zform .wpcf7-list-item{margin:0}

/* Rendered as selectable chips: a bare checkbox beside a word reads as an
   afterthought at this size, and the chip gives a proper 44px target. */
.zform .wpcf7-list-item label{
  display:inline-flex;align-items:center;gap:var(--s-2);
  min-height:44px;padding:0 var(--s-4);
  border:1.5px solid var(--border);border-radius:var(--radius-full);
  background:#fff;cursor:pointer;
  font-size:var(--fs-sm);font-weight:500;color:var(--text-secondary);
  transition:border-color var(--dur),background var(--dur),color var(--dur)
}
.zform .wpcf7-list-item label:hover{border-color:var(--primary-light);background:var(--off-white)}
.zform .wpcf7-list-item input[type="checkbox"],
.zform .wpcf7-list-item input[type="radio"]{
  width:18px;height:18px;flex:none;accent-color:var(--accent-hover);cursor:pointer;margin:0
}
.zform .wpcf7-list-item-label{line-height:1}
/* Selected state, using :has so no JS is needed. */
.zform .wpcf7-list-item label:has(input:checked){
  border-color:var(--accent-hover);background:var(--accent-light,#eaf5fe);color:var(--primary)
}
.zform .wpcf7-list-item label:has(input:focus-visible){
  box-shadow:0 0 0 4px rgba(18,163,227,.14)
}

/* ---------- File upload ---------- */
.zform input[type="file"]{
  display:block;width:100%;padding:var(--s-5);
  border:2px dashed var(--border);border-radius:var(--radius-lg);
  background:var(--off-white);cursor:pointer;
  font-family:inherit;font-size:var(--fs-sm);color:var(--text-secondary);
  transition:border-color var(--dur),background var(--dur)
}
.zform input[type="file"]:hover{border-color:var(--bright);background:#fff}
.zform input[type="file"]::file-selector-button{
  margin-right:var(--s-4);padding:0 var(--s-5);min-height:38px;
  border:0;border-radius:var(--radius-full);
  background:var(--primary);color:#fff;
  font-family:inherit;font-size:var(--fs-sm);font-weight:600;cursor:pointer
}
.zform input[type="file"]::file-selector-button:hover{background:var(--primary-dark,#12294a)}

/* ---------- Consent block ---------- */
.zform-consent{
  padding:var(--s-6);border-radius:var(--radius-lg);
  border:1px solid var(--border);background:linear-gradient(160deg,var(--off-white),#fff)
}
.zform-consent p{
  margin:0 0 var(--s-4);font-size:var(--fs-sm);line-height:1.72;color:var(--text-secondary)
}
.zform-consent p:last-of-type{margin-bottom:var(--s-5)}
.zform-accept{padding-top:var(--s-4);border-top:1px solid var(--border)}
.zform-accept .wpcf7-list-item label{
  border-color:var(--primary-light);font-weight:600;color:var(--primary)
}

/* ---------- Actions ---------- */
.zform-actions{
  margin-top:var(--s-8);padding-top:var(--s-6);border-top:1px solid var(--border);
  display:flex;flex-wrap:wrap;gap:var(--s-4);align-items:center
}
.zform-actions input[type="submit"]{
  min-height:54px;padding:0 var(--s-10);border:0;border-radius:var(--radius-full);
  background:var(--accent-hover);color:#fff;
  font-family:inherit;font-size:var(--fs-base);font-weight:600;cursor:pointer;
  box-shadow:var(--shadow-accent);
  transition:background var(--dur),transform var(--dur)
}
.zform-actions input[type="submit"]:hover{background:var(--accent-deep);transform:translateY(-2px)}
.zform-actions input[type="submit"]:disabled{opacity:.6;cursor:not-allowed;transform:none}
.zform .wpcf7-spinner{margin:0}

/* ---------- Validation ---------- */
.zform .wpcf7-not-valid{border-color:#e07a70;background:#fffafa}
.zform .wpcf7-not-valid-tip{
  display:flex;align-items:flex-start;gap:6px;margin-top:var(--s-2);
  font-size:var(--fs-xs);color:#8d2b20;line-height:1.5
}
.zform .wpcf7-not-valid-tip::before{
  content:"!";flex:none;width:15px;height:15px;border-radius:50%;
  background:#c0392b;color:#fff;font-size:10px;font-weight:700;
  display:grid;place-items:center;margin-top:1px
}
.zform .wpcf7-response-output{
  margin:var(--s-6) 0 0;padding:var(--s-4) var(--s-5);
  border:1px solid;border-radius:var(--radius);font-size:var(--fs-sm);line-height:1.6
}
.wpcf7 form.sent .wpcf7-response-output{
  background:#f1fbf6;border-color:#bfe8d3;color:#0d6b46
}
.wpcf7 form.invalid .wpcf7-response-output,
.wpcf7 form.unaccepted .wpcf7-response-output,
.wpcf7 form.failed .wpcf7-response-output{
  background:#fdf3f2;border-color:#f0c9c4;color:#8d2b20
}

/* The prose line-height must not inflate form rows. */
.content-prose .zform,
.content-prose .zform p,
.content-prose .zform label{line-height:1.5}
.content-prose .zform p{max-width:none}


/* ==========================================================================
   AUTHOR / MEDICAL REVIEWER CARD  (redesign)
   Three facts with three different weights: who reviewed it, what they are
   qualified in, and when it was last checked. The earlier version rendered the
   credential and the date as identical muted paragraphs, so the card read as a
   flat block of grey text.
   ========================================================================== */

.author-card{
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  gap:var(--s-5);
  align-items:center;
  position:relative;overflow:hidden;
  margin-top:var(--s-10);
  padding:var(--s-6) var(--s-7) var(--s-6) calc(var(--s-7) + 6px);
  border:1px solid var(--border);
  border-radius:var(--radius-lg);
  background:
    radial-gradient(560px 180px at 100% 0%,rgba(18,163,227,.10),transparent 68%),
    linear-gradient(158deg,#f7fbff 0%,#fff 58%);
  box-shadow:var(--shadow-sm)
}

/* Brand spine: reads as a credential marker rather than decoration. */
.author-card::before{
  content:"";position:absolute;inset-block:0;inset-inline-start:0;width:6px;
  background:linear-gradient(180deg,var(--bright) 0%,var(--primary-light) 55%,var(--primary) 100%)
}

/* ---------- Avatar ---------- */
.author-avatar{
  position:relative;                 /* anchors the verified badge */
  width:72px;height:72px;flex:none;
  border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--primary),var(--primary-light));
  color:#fff;font-weight:600;font-size:var(--fs-xl);letter-spacing:.04em;
  box-shadow:0 0 0 4px #fff,0 0 0 5px rgba(18,163,227,.30),0 8px 18px -8px rgba(16,41,74,.45);
  overflow:visible                   /* the badge must not be clipped */
}
.author-avatar img{
  width:100%;height:100%;object-fit:cover;border-radius:50%;display:block
}

/* Verified tick — the card asserts clinical review, so it should look asserted. */
.author-avatar::after{
  content:"";position:absolute;right:-2px;bottom:-2px;
  width:24px;height:24px;border-radius:50%;
  background:var(--success) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 13 4 4L19 7'/%3E%3C/svg%3E") center/13px 13px no-repeat;
  border:2.5px solid #fff;
  box-shadow:0 2px 6px rgba(14,167,112,.4)
}
/* A monogram is an initials placeholder, not a verified portrait. */
.author-monogram::after{display:none}

/* ---------- Text ---------- */
.author-card > div:last-child{min-width:0}

.author-card .role{
  display:block;margin:0 0 var(--s-2);
  font-size:var(--fs-xs);font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent-deep)
}

.author-card h3{
  margin:0;
  font-size:clamp(1.05rem,1.6vw,1.2rem);line-height:1.32;
  font-weight:600;letter-spacing:-.012em;color:var(--primary);
  text-wrap:balance;overflow-wrap:break-word
}

.author-card .credential{
  margin:var(--s-2) 0 0;
  font-size:var(--fs-sm);line-height:1.55;color:var(--text-secondary)
}

/* The review date is meta: same row, quieter, with its own marker. */
.author-card .reviewed{
  display:inline-flex;align-items:center;gap:6px;
  margin:var(--s-3) 0 0;padding:4px var(--s-3);
  border:1px solid var(--border);border-radius:var(--radius-full);
  background:#fff;
  font-size:var(--fs-xs);font-weight:500;color:var(--text-muted)
}
.author-card .reviewed::before{
  content:"";width:13px;height:13px;flex:none;
  background:var(--success) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 13 4 4L19 7'/%3E%3C/svg%3E") center/9px 9px no-repeat;
  border-radius:50%
}

/* Any paragraph the source supplied that is neither of the above. */
.author-card p:not(.role):not(.credential):not(.reviewed){
  margin:var(--s-2) 0 0;font-size:var(--fs-sm);color:var(--text-muted)
}

@media (max-width:560px){
  .author-card{
    grid-template-columns:1fr;justify-items:start;gap:var(--s-4);
    padding:var(--s-5) var(--s-5) var(--s-5) calc(var(--s-5) + 6px)
  }
  .author-avatar{width:60px;height:60px;font-size:var(--fs-lg)}
}


/* ==========================================================================
   BLOG LISTING  (redesign)
   Same facts the live listing shows — image, date, title, excerpt, Read More —
   with a lead card for the newest post, a category chip and a reading estimate.
   ========================================================================== */

.blog-grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(20px,2.4vw,var(--s-8))
}
@media (max-width:1024px){.blog-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.blog-grid{grid-template-columns:1fr}}

/* ---------- Lead card: image beside the copy, full grid width ---------- */
.post-card--featured{
  grid-column:1 / -1;
  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);
  align-items:stretch
}
.post-card--featured .post-thumb{aspect-ratio:auto;height:100%;min-height:280px}
.post-card--featured .post-body{
  padding:clamp(24px,3vw,var(--s-10));justify-content:center;gap:var(--s-4)
}
.post-card--featured .post-body h2{
  font-size:clamp(1.4rem,2.4vw,2rem);line-height:1.2;letter-spacing:-.02em;
  text-wrap:balance;margin:0
}
.post-card--featured .post-body h2 a{color:var(--primary);transition:color var(--dur)}
.post-card--featured .post-body h2 a:hover{color:var(--accent-deep)}
.post-card--featured .post-body p{font-size:var(--fs-base);line-height:1.72}
@media (max-width:860px){
  .post-card--featured{grid-template-columns:1fr}
  .post-card--featured .post-thumb{aspect-ratio:16/9;min-height:0}
}

/* ---------- Category chip over the image ---------- */
.post-thumb{position:relative}
.post-chip{
  position:absolute;top:var(--s-4);left:var(--s-4);z-index:1;
  display:inline-flex;align-items:center;height:28px;padding:0 var(--s-4);
  border-radius:var(--radius-full);
  background:rgba(255,255,255,.94);backdrop-filter:blur(6px);
  border:1px solid rgba(24,49,89,.08);
  font-size:var(--fs-xs);font-weight:600;letter-spacing:.02em;color:var(--primary);
  box-shadow:0 3px 10px -4px rgba(10,22,40,.35)
}

/* ---------- Meta line: date · reading time ---------- */
.post-tag{
  display:flex;align-items:center;flex-wrap:wrap;gap:var(--s-2);
  margin:0
}
.post-tag .dot{
  width:3px;height:3px;border-radius:50%;background:currentColor;opacity:.45;flex:none
}

/* ---------- Card title links ---------- */
.post-body h3{margin:0}
.post-body h3 a{color:var(--primary);transition:color var(--dur)}
.post-body h3 a:hover{color:var(--accent-deep)}

/* Push "Read More" to the bottom so cards in a row align. */
.post-more{margin-top:auto}

/* Accessibility: --bright is tuned for the dark footer, hero and utility bar,
   where it has ample contrast. On light backgrounds it only reaches 2.85:1, so
   these three hover states use the darker variant to meet WCAG AA for text. */
.content-prose a:not(.btn):hover{color:var(--bright-on-light)}
.toc a:hover{color:var(--bright-on-light)}

/* Author card - matches the live site's design: pale blue card, white avatar
   panel with caption, "Written by:" eyebrow, credentialed name, navy role
   badge. Overrides the earlier monogram layout. */
.author-card{flex-direction:row;align-items:stretch;gap:var(--s-6);background:var(--sky);border:1px solid #bfe3f5;border-radius:14px;padding:var(--s-6)}
.author-avatar-panel{background:var(--white);border-radius:10px;padding:var(--s-4);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-3);flex:0 0 168px}
.author-avatar-art{width:96px;height:96px}
.author-avatar-label{font-size:var(--fs-sm);font-weight:600;color:var(--text);text-align:center;margin:0;line-height:1.35}
.author-card-body{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--s-2)}
.author-card-body .role{margin:0;font-size:var(--fs-sm);color:var(--text-secondary)}
.author-card-body h3{font-size:var(--fs-2xl);margin:0;color:var(--text);letter-spacing:-.01em}
.author-role-badge{display:inline-block;background:var(--primary);color:var(--white);font-size:var(--fs-sm);font-weight:600;padding:6px 14px;border-radius:8px}
.author-card-body .reviewed{margin:2px 0 0;font-size:var(--fs-sm);color:var(--text-muted)}
@media (max-width:640px){.author-card{flex-direction:column}.author-avatar-panel{flex-basis:auto;width:100%}}
