/* =========================================================================
   Drip Tonic — landing page stylesheet
   Tokens · type · layout · components · sections (§1 → §9)
   Spec: designkit.md §14 (tokens) + §15 (per-section build).
   ========================================================================= */

/* ---- Self-hosted fonts --------------------------------------------------
   Latin-subset variable WOFF2 (built by tools/build-fonts.sh from the VF TTFs
   in tools/fonts-source/). Replaces the third-party Google Fonts request —
   removes a ~830ms cross-origin round trip from the critical path. url() is
   resolved relative to this file (/styles.css), so /fonts/* works site-wide.
   font-display: swap keeps text visible during load. -------------------- */
@font-face {
  font-family: "Cormorant Garamond";
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url("fonts/cormorant-garamond.woff2") format("woff2");
}
@font-face {
  font-family: "Cormorant Garamond";
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
  src: url("fonts/cormorant-garamond-italic.woff2") format("woff2");
}
@font-face {
  font-family: "Manrope";
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url("fonts/manrope.woff2") format("woff2");
}

/* ---- Tokens -------------------------------------------------------------- */
:root {
  /* Color */
  --color-bg-deep:        #2E1517;
  --color-bg-espresso:    #1B0D0D;
  --color-surface-deep:   #3A1E20;
  --color-border-deep:    #5A3437;
  --color-bg-cream:       #ECDFC9;
  --color-bg-ivory:       #F5EDDD;
  --color-surface-cream:  #E4D3B8;
  --color-border-cream:   #C9B393;
  --color-accent:         #9B5145;  /* terracotta — passes WCAG AA on cream/ivory/surface-cream */
  --color-accent-hover:   #804238;
  --color-accent-soft:    #D9A199;
  --color-accent-bright:  #D88376;  /* brighter terracotta for italics on dark sections only */
  --color-accent-line:    #C2766B;  /* original brand coral, used for thin hairlines/dots */
  --color-blush:          #F2DAD6;  /* pale blush rose — harmonizes with terracotta; ink-deep passes AA */
  --color-blush-deep:     #E7C0B8;  /* deeper blush rose — banner fills, ink-deep passes AA */
  --color-ink-deep:       #1B0D0D;
  --color-ink-muted:      #5C463C;
  --color-ink-soft:       #695543;  /* darkened from #8A7565 to meet 4.5:1 on surface-cream */
  --color-ink-cream:      #F5EDDD;
  --color-ink-cream-mute: #C9B393;

  /* Type */
  --font-serif: "Cormorant Garamond", "Canela", Georgia, "Times New Roman", serif;
  --font-sans:  "Manrope", "Söhne", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --font-size-xs:   0.75rem;
  --font-size-sm:   0.875rem;
  --font-size-base: 1rem;
  --font-size-md:   1.125rem;
  --font-size-lg:   1.5rem;
  --font-size-xl:   2rem;
  --font-size-2xl:  clamp(2.25rem, 4vw + 1rem, 3.5rem);
  --font-size-3xl:  clamp(2.75rem, 6vw + 1rem, 5rem);
  --font-size-4xl:  clamp(3.5rem, 8vw + 1rem, 6.5rem);

  /* Space */
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  16px;
  --space-5:  24px;
  --space-6:  32px;
  --space-7:  48px;
  --space-8:  64px;
  --space-9:  96px;
  --space-10: 128px;
  --space-11: 192px;

  /* Motion */
  --ease-settle:        cubic-bezier(0.2, 0, 0, 1);
  --duration-micro:     200ms;
  --duration-component: 350ms;
  --duration-section:   600ms;

  /* Radius */
  --radius-sm: 2px;
  --radius-md: 4px;
  --radius-arch: 9999px 9999px 6px 6px;

  /* Layout */
  --container-max: 1280px;
  --content-max:   1120px;
  --reading-max:    640px;
  --gutter-mobile:  24px;
  --gutter-desktop: 64px;
}

/* ---- Reset / base -------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--color-bg-cream);
  color: var(--color-ink-deep);
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.6;
  font-feature-settings: "kern", "ss02";
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
img, picture, svg { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; cursor: pointer; }

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

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

.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

.skip-link {
  position: absolute; top: -100px; left: var(--space-4);
  background: var(--color-bg-espresso); color: var(--color-ink-cream);
  padding: var(--space-3) var(--space-5);
  z-index: 100; border-radius: 2px;
  font-family: var(--font-sans); font-size: var(--font-size-sm);
  letter-spacing: 0.08em; text-transform: uppercase;
}
.skip-link:focus { top: var(--space-4); }

/* ---- Layout helpers ----------------------------------------------------- */
.container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--gutter-mobile);
}
@media (min-width: 900px) {
  .container { padding-inline: var(--gutter-desktop); }
}

.section {
  position: relative;
  padding-block: var(--space-9);
  overflow: hidden;
}
@media (min-width: 900px) {
  .section { padding-block: var(--space-10); }
}
.section--deep     { background: var(--color-bg-deep);     color: var(--color-ink-cream); }
.section--cream    { background: var(--color-bg-cream);    color: var(--color-ink-deep); }
.section--ivory    { background: var(--color-bg-ivory);    color: var(--color-ink-deep); }
.section--espresso { background: var(--color-bg-espresso); color: var(--color-ink-cream); }

/* ---- Typography --------------------------------------------------------- */
.h-display, .h-section, .h-closer {
  font-family: var(--font-serif);
  font-weight: 500;
  text-wrap: balance;
  letter-spacing: -0.02em;
  margin: 0;
  /* Defend against horizontal overflow when long headlines hit narrow viewports. */
  overflow-wrap: break-word;
  hyphens: auto;
}
.h-display {
  font-size: var(--font-size-3xl);
  line-height: 1.05;
}
.h-section {
  font-size: var(--font-size-2xl);
  line-height: 1.1;
}
.eyebrow + .h-section,
.eyebrow--rule + .h-section { margin-top: var(--space-4); }
.section--deep .h-section { color: var(--color-ink-cream); }
.h-closer {
  font-size: var(--font-size-4xl);
  line-height: 1.02;
}
.h-display em, .h-section em, .h-closer em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.section--cream .h-display em,
.section--ivory  .h-display em,
.section--cream .h-section em,
.section--ivory  .h-section em {
  color: var(--color-accent);
}

.eyebrow {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-soft);
  margin: 0;
}
.section--deep .eyebrow,
.section--espresso .eyebrow { color: var(--color-ink-cream-mute); }

.eyebrow--rule::before {
  content: "";
  display: inline-block;
  width: 28px;
  height: 1px;
  background: currentColor;
  vertical-align: middle;
  margin-right: var(--space-3);
  opacity: 0.55;
}

.lede {
  font-size: var(--font-size-md);
  line-height: 1.6;
  color: var(--color-ink-muted);
  max-width: 56ch;
  margin: 0;
}
.section--deep .lede,
.section--espresso .lede { color: var(--color-ink-cream-mute); }

/* ---- Buttons ------------------------------------------------------------ */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: 14px 28px;
  min-height: 48px;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  transition:
    background var(--duration-micro) var(--ease-settle),
    color var(--duration-micro) var(--ease-settle),
    transform var(--duration-micro) var(--ease-settle),
    border-color var(--duration-micro) var(--ease-settle);
  text-decoration: none;
  cursor: pointer;
  white-space: nowrap;
}
.btn .arrow {
  display: inline-block;
  transition: transform var(--duration-micro) var(--ease-settle);
}
.btn:hover .arrow { transform: translateX(3px); }

.btn--primary {
  background: var(--color-accent);
  color: var(--color-ink-cream);
}
.btn--primary:hover { background: var(--color-accent-hover); }

.btn--outline-cream {
  background: transparent;
  color: var(--color-ink-cream);
  border-color: var(--color-ink-cream-mute);
}
.btn--outline-cream:hover {
  background: var(--color-ink-cream);
  color: var(--color-ink-deep);
  border-color: var(--color-ink-cream);
}

.btn--outline-ink {
  background: transparent;
  color: var(--color-ink-deep);
  border-color: var(--color-ink-deep);
}
.btn--outline-ink:hover {
  background: var(--color-ink-deep);
  color: var(--color-ink-cream);
}

.btn--link {
  display: inline-flex;
  align-items: baseline;
  gap: var(--space-2);
  font-family: var(--font-sans);
  font-size: var(--font-size-xs);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: inherit;
  background: transparent;
  border: 0;
  padding: 0;
  border-bottom: 1px solid var(--color-accent);
  padding-bottom: 4px;
  transition: color var(--duration-micro) var(--ease-settle);
}
.btn--link .arrow {
  display: inline-block;
  transition: transform var(--duration-micro) var(--ease-settle);
}
.btn--link:hover { color: var(--color-accent); }
.btn--link:hover .arrow { transform: translateX(3px); }

/* ---- Hairline rule ------------------------------------------------------ */
.hairline {
  width: 100%;
  height: 1px;
  background: currentColor;
  opacity: 0.18;
  border: 0;
}

/* ---- Grain overlay (used on hero) -------------------------------------- */
.grain {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.18;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  background-size: 160px 160px;
}

/* =========================================================================
   NAV
   Absolute over the hero — chrome speaks first, navigation second.
   ========================================================================= */
.nav {
  position: absolute;
  inset: 0 0 auto 0;
  z-index: 10;
  padding-block: var(--space-5);
  color: var(--color-ink-cream);
}
.nav__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-5);
}
.nav__brand {
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.nav__logo {
  height: clamp(48px, 5.2vw, 70px);
  width: auto;
  display: block;
  filter: drop-shadow(0 1px 6px rgba(27, 13, 13, 0.35));
}
.nav__brand-mark {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.5rem;
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
}
.nav__links {
  display: none;
  gap: var(--space-6);
}
.nav__links > ul {
  display: contents;
  list-style: none;
  margin: 0;
  padding: 0;
}
.nav__links a {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream-mute);
  white-space: nowrap;
  transition: color var(--duration-micro) var(--ease-settle);
}
.nav__links a:hover { color: var(--color-ink-cream); }
.nav__links a[aria-current="page"] { color: var(--color-ink-cream); }
.nav__cta { padding: 12px 22px; min-height: 44px; font-size: 0.75rem; }

.nav__toggle {
  /* Default visible — this is the mobile nav affordance. The
     @media (min-width: 900px) block below hides it once the inline
     nav__links row takes over on desktop. */
  display: flex;
  flex-direction: column;
  gap: 5px;
  background: transparent;
  border: 0;
  padding: var(--space-3);
  margin: calc(var(--space-3) * -1);
}
.nav__toggle span {
  width: 22px;
  height: 1px;
  background: var(--color-ink-cream);
  transition: transform var(--duration-micro) var(--ease-settle), opacity var(--duration-micro);
}
.nav__toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.nav__toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav__toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

.nav__drawer {
  display: none;
  position: absolute;
  inset: 100% 0 auto 0;
  background: rgba(27, 13, 13, 0.96);
  backdrop-filter: blur(8px);
  border-top: 1px solid var(--color-border-deep);
  padding: var(--space-7) var(--gutter-mobile) var(--space-8);
}
.nav__drawer[data-open="true"] { display: block; }
.nav__drawer ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--space-5);
}
.nav__drawer a {
  display: block;
  font-family: var(--font-serif);
  font-size: 1.75rem;
  font-weight: 500;
  color: var(--color-ink-cream);
}

@media (min-width: 1080px) {
  .nav__links { display: inline-flex; }
  .nav__toggle { display: none; }
  .nav__drawer { display: none !important; }
}

/* Below the inline-nav breakpoint the links collapse into the hamburger
   drawer. Keep the booking CTA hugging the toggle on the right instead of
   letting space-between strand it mid-row. */
@media (max-width: 1079px) {
  .nav__cta { margin-left: auto; }
}

/* ---- Nav: Education dropdown (desktop) + accordion (mobile drawer) ------- */
.nav__sub { position: relative; display: inline-flex; align-items: center; }
.nav__sub-btn {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream-mute);
  background: transparent;
  border: 0;
  padding: 0;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  cursor: pointer;
  transition: color var(--duration-micro) var(--ease-settle);
}
.nav__sub-btn:hover,
.nav__sub:hover .nav__sub-btn,
.nav__sub-btn[aria-expanded="true"],
.nav__sub.is-current .nav__sub-btn { color: var(--color-ink-cream); }

.nav__caret {
  width: 6px;
  height: 6px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  transition: transform var(--duration-micro) var(--ease-settle);
}
.nav__sub:hover .nav__caret,
.nav__sub-btn[aria-expanded="true"] .nav__caret { transform: translateY(1px) rotate(-135deg); }

.nav__submenu {
  display: none;
  position: absolute;
  top: calc(100% + var(--space-4));
  left: 50%;
  transform: translateX(-50%);
  min-width: 236px;
  list-style: none;
  margin: 0;
  padding: var(--space-3);
  background: rgba(27, 13, 13, 0.97);
  backdrop-filter: blur(8px);
  border: 1px solid var(--color-border-deep);
  border-radius: var(--radius-md);
  box-shadow: 0 22px 48px -28px rgba(0, 0, 0, 0.75);
  z-index: 20;
}
/* invisible hover-bridge across the gap so the menu doesn't flicker shut */
.nav__sub::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  height: var(--space-4);
}
.nav__sub:hover .nav__submenu,
.nav__sub-btn[aria-expanded="true"] + .nav__submenu { display: block; }
.nav__submenu li { display: block; }
.nav__submenu a {
  display: block;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-sm);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  white-space: nowrap;
  transition: background var(--duration-micro), color var(--duration-micro);
}
.nav__submenu a:hover,
.nav__submenu a[aria-current="page"] {
  background: var(--color-surface-deep);
  color: var(--color-ink-cream);
}

/* Mobile drawer — Education accordion */
.nav__drawer-sub { display: block; }
.nav__drawer-subbtn {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  width: 100%;
  font-family: var(--font-serif);
  font-size: 1.75rem;
  font-weight: 500;
  color: var(--color-ink-cream);
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  text-align: left;
}
.nav__drawer-subbtn .nav__caret { width: 9px; height: 9px; border-width: 2px; }
.nav__drawer-submenu {
  display: none;
  list-style: none;
  margin: var(--space-4) 0 0;
  padding: 0 0 0 var(--space-4);
  border-left: 1px solid var(--color-border-deep);
  gap: var(--space-4);
}
.nav__drawer-subbtn[aria-expanded="true"] + .nav__drawer-submenu { display: grid; }
.nav__drawer-subbtn[aria-expanded="true"] .nav__caret { transform: translateY(1px) rotate(-135deg); }
.nav__drawer-submenu a { font-size: 1.25rem; color: var(--color-ink-cream-mute); }
.nav__drawer-submenu a[aria-current="page"] { color: var(--color-ink-cream); }

/* =========================================================================
   §1 — HERO
   Beat 1: Recognition. Editorial atmosphere — "this is for me."
   ========================================================================= */
.hero {
  position: relative;
  /* Trimmed from 100dvh — the bag photograph's interesting content (bags,
     stand, chambers, tubing) sits in the top ~80% of the frame, and a full-
     viewport hero left a band of empty dark floor under the visible content.
     Clamp gives enough room for the text stack + bags at any width without
     pushing dead space below them. */
  min-height: clamp(620px, 82dvh, 840px);
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  display: flex;
  align-items: stretch;
  padding-top: clamp(72px, 7vw, 108px);
  padding-bottom: clamp(16px, 1.8vw, 36px);
  overflow: hidden;
}
.hero__plate {
  position: absolute;
  inset: 0;
  z-index: 1;
}
/* The <picture> wrapper must fill the plate too — the global
   `img, picture, svg { height: auto }` reset (see top of file) otherwise
   leaves <picture> at auto height, so the img's height:100% has no definite
   parent to resolve against and collapses to the photo's natural height,
   leaving a bare dark band below it. (Same pattern the contact + page heroes use.) */
.hero__plate picture {
  display: block;
  width: 100%;
  height: 100%;
}
.hero__plate img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  /* Dimmed so the cream headline pops off the photo; the bags keep their warm
     glow through the scrim above. Scaled up (zoomed toward the bags) so the
     drips read larger behind the text. overflow:hidden on .hero crops the
     overscan cleanly. */
  opacity: 0.68;
  transform: scale(1.14);
  transform-origin: 50% 36%;
}
/* Legibility scrim — heavier on left where headline sits, lighter toward right.
   A second vertical pass darkens top + bottom to keep nav and credentials readable. */
/* Legibility scrim — preserves a heavier left side (so the headline reads),
   tapers softly through the centre so the bags retain their warm colour,
   and adds a gentle vignette + ambient glow that makes the bags feel lit
   from within rather than dropped on top of a dark plate. */
.hero__plate::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    /* Soft ambient glow centred behind the bags */
    radial-gradient(
      ellipse 58% 50% at 52% 42%,
      rgba(255, 220, 190, 0.10) 0%,
      rgba(255, 220, 190, 0.04) 40%,
      rgba(46, 21, 23, 0) 72%
    ),
    /* Left-to-right legibility scrim */
    linear-gradient(
      90deg,
      rgba(27, 13, 13, 0.82) 0%,
      rgba(46, 21, 23, 0.55) 32%,
      rgba(46, 21, 23, 0.18) 58%,
      rgba(46, 21, 23, 0.10) 80%,
      rgba(46, 21, 23, 0.22) 100%
    ),
    /* Top + bottom vignette so nav and credentials stay readable */
    linear-gradient(
      180deg,
      rgba(27, 13, 13, 0.55) 0%,
      rgba(27, 13, 13, 0.08) 26%,
      rgba(27, 13, 13, 0) 52%,
      rgba(27, 13, 13, 0.22) 100%
    );
  z-index: 1;
}
/* Bleed-and-fade: the bottom of the hero dissolves into §2 in two stages —
   wine-on-wine for the first third (so the image silently disappears), then
   a warm terracotta inflection into cream so the seam is invisible. */
.hero::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  /* Cream still resolves at the hero's bottom edge (100%), but the visible
     warm/cream band now climbs ~25% higher — its top sits just below the
     trust-line/city text so that text stays on dark and readable. */
  height: clamp(200px, 28vh, 340px);
  background: linear-gradient(
    180deg,
    rgba(46, 21, 23, 0) 0%,
    rgba(46, 21, 23, 0.55) 14%,
    rgba(120, 70, 56, 0.75) 42%,
    rgba(176, 138, 100, 0.85) 70%,
    var(--color-bg-cream) 92%,
    var(--color-bg-cream) 100%
  );
  z-index: 4;
  pointer-events: none;
}

.hero__nmark {
  position: absolute;
  top: 92px;
  right: var(--gutter-mobile);
  z-index: 8;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.hero__nmark::before {
  content: "";
  width: 32px;
  height: 1px;
  background: var(--color-accent);
}
@media (min-width: 900px) {
  .hero__nmark {
    top: 150px;
    right: var(--gutter-desktop);
  }
}

.hero__rail {
  display: none;
  position: absolute;
  left: var(--gutter-desktop);
  top: 50%;
  z-index: 8;
  transform: translateY(-50%) rotate(-90deg);
  transform-origin: left center;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  white-space: nowrap;
}
.hero__rail span { color: var(--color-ink-cream); }
.hero__rail::before {
  content: "";
  display: inline-block;
  width: 28px;
  height: 1px;
  background: var(--color-accent);
  margin-right: var(--space-3);
  vertical-align: middle;
}
@media (min-width: 1100px) { .hero__rail { display: inline-flex; align-items: center; } }

.hero__inner {
  position: relative;
  z-index: 5;
  width: 100%;
  display: grid;
  grid-template-columns: 1fr;
  /* Anchor content to the top so the trust line lands at a known
     distance below the headline — never in the bottom fade region. */
  align-items: start;
  padding-block: clamp(24px, 4vh, 56px) var(--space-6);
}
@media (min-width: 980px) {
  .hero__inner {
    grid-template-columns: 1.05fr 0.95fr;
    align-items: start;
    padding-top: clamp(32px, 5vh, 64px);
    padding-bottom: var(--space-7);
  }
}
.hero__content {
  display: grid;
  gap: var(--space-5);
  max-width: 640px;
}
.hero__eyebrow {
  color: var(--color-ink-cream-mute);
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.hero__eyebrow::before {
  content: "";
  width: 28px;
  height: 1px;
  background: var(--color-accent);
}
.hero__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: var(--font-size-3xl);
  line-height: 1.02;
  letter-spacing: -0.025em;
  text-wrap: balance;
  margin: 0;
  color: var(--color-ink-cream);
}
.hero__headline em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
/* Keyword-bearing line inside the H1 — small caps Manrope so the H1
   carries the search-relevant phrase without breaking the editorial
   composition. The display phrase below is the visual hero. */
.hero__headline-kicker {
  display: block;
  font-family: var(--font-sans);
  font-size: clamp(0.7rem, 0.4vw + 0.6rem, 0.875rem);
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  line-height: 1.45;
  margin-bottom: var(--space-4);
  max-width: 22ch;
}
.hero__headline-display {
  display: block;
}
.hero__sub {
  font-size: var(--font-size-md);
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
  max-width: 520px;
  margin: 0;
}
/* Inline price anchors. The numbers ($50 / $175) carry the value claim,
   so they step one notch brighter than the surrounding muted body and
   take a heavier weight — without becoming a separate visual block. */
.hero__sub strong {
  color: var(--color-ink-cream);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.hero__cred {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-ink-cream);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3) var(--space-4);
  align-items: center;
}
.hero__cred .dash { color: var(--color-accent); }
.hero__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-3);
}
.hero__chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-6);
  align-items: center;
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-deep);
  margin-top: var(--space-5);
}
.hero__chips li {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream);
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}
.hero__chips li::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--color-accent);
}
.hero__chips ul {
  list-style: none; margin: 0; padding: 0;
  display: contents;
}

/* -------------------------------------------------------------------------
   §1 — Hero mobile rebuild
   On narrow viewports the bag photograph IS the brand recognition — not
   the text stack. This block reclaims vertical room for the image by
   retiring elements the sticky bottom CTA + content below the fold
   already cover. Drip overlay anchoring is untouched: .hero__plate,
   .hero__plate img, and .drip-overlay__frame all stay exactly as is —
   the falling-drip animation continues to align with the bag photo.
   ------------------------------------------------------------------------- */
@media (max-width: 700px) {
  /* Drop the inline nav booking button on mobile. The sticky bottom CTA +
     the hero primary CTA already give two booking entry points within
     tap reach, and removing this unblocks the top-right of the photograph. */
  .nav__cta { display: none; }

  /* Drop the secondary "See featured drips" outline CTA on mobile. A
     390-wide viewport with two equally weighted stacked buttons diffuses
     click intent; the primary CTA wins alone. The full drips section is
     one short scroll away. */
  .hero__ctas .btn--outline-cream { display: none; }

  /* Keep the SEO kicker inside the darker left-side scrim so it doesn't
     bleed into the bag photograph on the right and lose contrast. Wraps
     to ~2 lines in the legibility zone instead of running edge-to-edge. */
  .hero__headline-kicker {
    max-width: 18ch;
    letter-spacing: 0.10em;
    margin-bottom: var(--space-3);
  }

  /* Same legibility floor for the byline — keep names + RN credentials
     in the dark area so they don't get visually swallowed by the bags. */
  .hero__byline {
    max-width: 22ch;
  }

  /* Tighten the hero text stack so the bag photograph behind/above it
     has more room to breathe before the content overlay begins. */
  .hero__content { gap: var(--space-4); }
}

/* =========================================================================
   §2 — Four-feature grid (cream)
   Beat 2: Permission. Authority whispered.
   ========================================================================= */
/* =========================================================================
   §2 — SERVICES PREVIEW  ·  Three-tile shopping-mode entry
   Curated menu preview between the trust bar and the §3 educational
   explainer. Type-driven, editorial menu feel — italic Cormorant
   numerals as decorative markers, serif tile names, sans body, hairline
   accent line that lifts on hover. Three columns desktop, stack mobile.
   ========================================================================= */
.services__head {
  text-align: center;
  max-width: 760px;
  margin: 0 auto var(--space-8);
  display: grid;
  gap: var(--space-4);
  justify-items: center;
}
.services__title {
  margin: 0;
  font-size: clamp(2rem, 3vw + 1rem, 3rem);
}
.services__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  max-width: var(--content-max);
  margin: 0 auto;
}
@media (min-width: 760px) {
  .services__grid { grid-template-columns: repeat(3, 1fr); gap: var(--space-5); }
}
/* -------------------------------------------------------------------------
   Quiz lead card — the "not sure where to start?" default path.
   Sits above the three service tiles as the dominant first move for a
   novice (paradox-of-choice fix). Warmer surface + filled CTA + accent
   bar give it visual primacy over the flat ivory tiles below.
   ------------------------------------------------------------------------- */
.quiz-lead {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: var(--space-4) var(--space-8);
  margin: 0 0 var(--space-7);
  padding: var(--space-6) var(--space-7);
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
  text-decoration: none;
  color: var(--color-ink-deep);
  transition: transform var(--duration-component) var(--ease-settle),
              box-shadow var(--duration-component) var(--ease-settle),
              border-color var(--duration-component) var(--ease-settle);
}
.quiz-lead::before {
  content: "";
  position: absolute;
  top: -1px; left: -1px; right: -1px;
  height: 3px;
  background: var(--color-accent);
}
.quiz-lead:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 36px -22px rgba(46, 21, 23, 0.30);
  border-color: var(--color-accent);
}
.quiz-lead__label {
  display: block;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-accent);
  margin-bottom: var(--space-3);
}
.quiz-lead__title {
  display: block;
  font-family: var(--font-serif);
  font-size: var(--font-size-lg);
  line-height: 1.2;
  color: var(--color-ink-deep);
  max-width: 34ch;
}
.quiz-lead__btn { white-space: nowrap; }
@media (max-width: 640px) {
  .quiz-lead { grid-template-columns: 1fr; }
  .quiz-lead__btn { justify-self: start; }
}

.service-tile {
  position: relative;
  background: var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  padding: var(--space-7) var(--space-6) var(--space-6);
  display: grid;
  grid-template-rows: auto auto auto 1fr auto;
  gap: var(--space-3);
  transition: transform var(--duration-component) var(--ease-settle),
              box-shadow var(--duration-component) var(--ease-settle),
              border-color var(--duration-component) var(--ease-settle);
}
.service-tile::before {
  content: "";
  position: absolute;
  top: -1px; left: -1px; right: -1px;
  height: 3px;
  background: var(--color-accent);
  transform-origin: center;
  transition: height var(--duration-component) var(--ease-settle);
}
.service-tile:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 36px -22px rgba(46, 21, 23, 0.30);
  border-color: var(--color-accent);
}
.service-tile:hover::before {
  height: 4px;
}
.service-tile__numeral {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: 1.5rem;
  color: var(--color-accent);
  letter-spacing: 0.04em;
  line-height: 1;
}
.service-tile__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.75rem;
  line-height: 1.1;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin: 0;
}
.service-tile__price {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-soft);
  margin: 0;
}
.service-tile__price strong {
  font-weight: 600;
  color: var(--color-ink-deep);
  letter-spacing: 0;
  font-size: 1rem;
}
.service-tile__desc {
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: 0;
}
.service-tile__cta {
  margin-top: var(--space-3);
  align-self: start;
  font-size: 0.8125rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.features {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
@media (min-width: 600px) { .features { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .features { grid-template-columns: repeat(4, 1fr); gap: var(--space-5); } }

.feature {
  background: var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  padding: var(--space-7);
  display: grid;
  gap: var(--space-4);
  transition: transform var(--duration-component) var(--ease-settle),
              box-shadow var(--duration-component) var(--ease-settle);
}
/* Alternating maroon accent: cards 2 & 4 take the deep-wine background
   from the hero so the row reads as the brand's signature two-tone
   rhythm — ivory · maroon · ivory · maroon. */
.feature:nth-child(even) {
  background: var(--color-bg-deep);
  border-color: rgba(245, 237, 221, 0.10);
}
.feature:nth-child(even) .feature__name { color: var(--color-ink-cream); }
.feature:nth-child(even) .feature__desc { color: var(--color-ink-cream-mute); }
.feature:nth-child(even):hover {
  box-shadow: 0 20px 40px -24px rgba(0, 0, 0, 0.55);
}
.feature:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 40px -24px rgba(46, 21, 23, 0.35);
}
.feature__icon {
  width: 28px; height: 28px;
  color: var(--color-accent);
  stroke: currentColor;
  fill: none;
  stroke-width: 1.4;
}
.feature__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.5rem;
  line-height: 1.1;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
}
.feature__desc {
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 32ch;
}

/* =========================================================================
   §3 — What an IV therapy is (ivory)
   Beat 3: Permission deepening.
   ========================================================================= */
.therapy {
  text-align: center;
  display: grid;
  gap: var(--space-6);
  justify-items: center;
}
.therapy__head {
  max-width: 880px;
  display: grid;
  gap: var(--space-5);
  justify-items: center;
}
.therapy__lede {
  text-align: center;
  max-width: 640px;
}
.therapy__benefits {
  width: 100%;
  max-width: var(--content-max);
  list-style: none;
  margin: var(--space-5) 0 0;
  padding: var(--space-7) 0 0;
  border-top: 1px solid var(--color-border-cream);
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  text-align: left;
}
@media (min-width: 600px) { .therapy__benefits { grid-template-columns: repeat(2, 1fr); gap: var(--space-7) var(--space-6); } }
@media (min-width: 1000px) { .therapy__benefits { grid-template-columns: repeat(4, 1fr); gap: var(--space-7); } }
.therapy__benefit {
  display: grid;
  gap: var(--space-3);
  align-content: start;
}
.therapy__benefit__icon {
  width: 28px;
  height: 28px;
  color: var(--color-accent);
  margin-bottom: var(--space-1);
}
.therapy__benefit h3 {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-ink-deep);
  margin: 0;
}
.therapy__benefit p {
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 32ch;
}
.therapy__benefit p sup {
  color: var(--color-accent);
  font-weight: 600;
  font-size: 0.65em;
  padding-left: 0.05em;
}
.therapy__benefit h3 sup {
  font-size: 0.7em;
  letter-spacing: 0;
}
/* Cited-references line under the benefit grid. Reads as a journal footnote:
   small sans, justified center, italic journal titles, narrow dot separators. */
.therapy__refs {
  width: 100%;
  max-width: var(--content-max);
  margin: var(--space-7) 0 0;
  padding: var(--space-5) 0 0;
  border-top: 1px solid var(--color-border-cream);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.8;
  letter-spacing: 0.04em;
  color: var(--color-ink-soft);
  text-align: center;
}
.therapy__refs sup {
  color: var(--color-accent);
  font-weight: 600;
  margin-right: 0.1em;
}
.therapy__refs em {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.05em;
  color: var(--color-ink-muted);
}
.therapy__refs-sep {
  display: inline-block;
  margin-inline: 0.6em;
  color: var(--color-border-cream);
}
/* Health Canada / CNO disclaimer. Smaller, italic, fine-print restraint. */
.therapy__disclaimer {
  width: 100%;
  max-width: 64ch;
  margin: var(--space-5) auto 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--color-ink-soft);
  text-align: center;
  opacity: 0.85;
}

/* =========================================================================
   §4 — Featured drips (deep wine)
   Beat 4: Desire. Bottle as fragrance.
   ========================================================================= */
.drips__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: end;
  margin-bottom: var(--space-9);
}
@media (min-width: 900px) {
  .drips__head { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
}
.drips__title { color: var(--color-ink-cream); }

.drips__carousel { position: relative; }

/* Mobile (<800px): one full-width drip at a time, horizontal swipe with snap.
   ≥800px it reverts to the three-up grid below. */
.drips__grid {
  display: flex;
  gap: var(--space-4);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.drips__grid::-webkit-scrollbar { display: none; }
.drips__grid > .drip {
  flex: 0 0 100%;
  scroll-snap-align: center;
  min-width: 0;
}

/* Pagination dots + prev/next — cream-toned for the dark wine section.
   Shown only while the carousel is active (<800px). */
.drips__controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-5);
  margin-top: var(--space-6);
}
.drips__dots {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 10px;
}
.drips__dot {
  width: 9px;
  height: 9px;
  border-radius: 999px;
  border: 1px solid rgba(247, 242, 233, 0.40);
  background: transparent;
  padding: 0;
  cursor: pointer;
  transition: background 180ms ease-out, border-color 180ms ease-out, width 180ms ease-out;
}
.drips__dot[aria-current="true"] {
  width: 24px;
  background: var(--color-ink-cream);
  border-color: var(--color-ink-cream);
}
.drips__nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 999px;
  border: 1px solid rgba(247, 242, 233, 0.40);
  background: transparent;
  color: var(--color-ink-cream);
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
  flex: 0 0 auto;
  transition: background 180ms ease-out, border-color 180ms ease-out, transform 180ms ease-out;
}
.drips__nav:hover,
.drips__nav:focus-visible { background: rgba(247, 242, 233, 0.12); }
.drips__nav:active { transform: scale(0.94); }
.drips__nav:disabled { opacity: 0.3; cursor: default; }

@media (min-width: 800px) {
  .drips__grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-6);
    align-items: stretch;
    overflow: visible;
  }
  .drips__grid > .drip { flex: 0 1 auto; scroll-snap-align: none; }
  .drips__controls,
  .drips__dots { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .drips__nav:active { transform: none; }
}
.drips__lede { align-self: end; padding-bottom: 0.35em; }

.drip {
  display: flex;
  flex-direction: column;
  background: var(--color-bg-cream);
  color: var(--color-ink-deep);
  border-radius: var(--radius-arch);
  overflow: hidden;
  position: relative;
  box-shadow: 0 30px 60px -40px rgba(0,0,0,0.6);
  transition: transform var(--duration-component) var(--ease-settle);
}
.drip:hover { transform: translateY(-4px); }
.drip--center {
  background: var(--color-surface-cream);
  box-shadow: 0 50px 80px -40px rgba(0,0,0,0.7);
}
/* All three cards share the same top baseline — distinction comes from
   the centre card's deeper shadow + surface, not from a vertical stagger. */
.drip__art {
  position: relative;
  aspect-ratio: 3 / 4;
  background: transparent;
  display: grid;
  place-items: center;
  padding: var(--space-5) var(--space-3);
}
/* The bag lives inside a <picture>; left unstyled it blockifies to the full
   content width and the <img> sits left-aligned within it, pulling the bag
   off-centre. display:contents removes the wrapper from layout so the <img>
   is the direct grid child and gets centred. */
.drip__art picture { display: contents; }
.drip__art img {
  max-height: 100%;
  max-width: 80%;
  width: auto;
  height: auto;
  object-fit: contain;
  filter: contrast(1.02) saturate(1.05);
}
/* Athletes Recovery was shot with crisper plastic edges and stronger
   highlights than Myers / Glutathione — softens it slightly so the three
   bags read as one consistent product family rather than a sharper bag
   sitting next to two softer ones. */
.drip__art img[src*="athletes-recovery"] {
  filter: contrast(0.93) saturate(0.9) brightness(1.04);
}
.drip__body {
  padding: var(--space-6);
  display: flex;            /* flex column so the CTA can be pushed to the bottom */
  flex-direction: column;
  gap: var(--space-3);
  flex: 1;
  border-top: 1px solid var(--color-border-cream);
  background: var(--color-surface-cream);
}
.drip--center .drip__body { background: var(--color-bg-cream); }
.drip__body .eyebrow { color: var(--color-ink-soft); }
.drip__name {
  font-family: var(--font-serif);
  font-size: 1.875rem;
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.05;
  margin: 0;
  color: var(--color-ink-deep);
}
.drip__desc {
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 32ch;
}
/* Push the CTA to the bottom regardless of description length so the
   three "Book your drip" buttons sit on the same horizontal baseline. */
.drip .btn {
  margin-top: auto;
  align-self: start;
}

.drips__tail {
  text-align: center;
  margin-top: var(--space-9);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-4);
}
.drips__tail .drips__lede {
  align-self: center;
  padding-bottom: 0;
  max-width: 56ch;
  margin: 0;
  color: var(--color-ink-cream-mute);
}

/* =========================================================================
   §6 — Guest notes / Reviews (ivory)
   Two editorial pull-quotes pulled verbatim from Google reviews. Cormorant
   Garamond italic serif for the quote body, a large coral open-quote
   glyph as the only decoration, a thin coral hairline + caps Manrope
   attribution echoing the eyebrow language used elsewhere on the page.
   Two columns at >=800px, stacked below.
   ========================================================================= */
.reviews__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: end;
  margin-bottom: var(--space-9);
}
@media (min-width: 900px) {
  .reviews__head { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
}
.reviews__lede { align-self: end; padding-bottom: 0.35em; }

ol.reviews,
ul.reviews {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
}
@media (min-width: 800px) {
  ol.reviews,
  ul.reviews {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-7) var(--space-9);
  }
}

.review {
  position: relative;
  padding: var(--space-7) 0 0;
  /* Quiet hairline above each quote — sets the editorial frame without
     boxing the quotation into a card. */
  border-top: 1px solid var(--color-border-cream);
}

/* Decorative oversized open-quote glyph. Sits just above the quote
   text in the padded gutter, in the brand coral so it reads as a
   visual signature rather than punctuation. */
.review__mark {
  position: absolute;
  top: 0;
  left: -0.05em;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: clamp(3.5rem, 5vw + 1.5rem, 5.5rem);
  line-height: 0.7;
  color: var(--color-accent);
  user-select: none;
  pointer-events: none;
}

.review__quote {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.25rem, 0.7vw + 1.05rem, 1.625rem);
  line-height: 1.35;
  color: var(--color-ink-deep);
  margin: 0 0 var(--space-5);
  text-wrap: pretty;
  max-width: 34ch;
}

.review__cite {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-muted);
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}
.review__cite::before {
  content: "";
  display: inline-block;
  width: 18px;
  height: 1px;
  background: var(--color-accent);
  flex: none;
}
.review__cite-name { color: var(--color-ink-deep); font-weight: 600; }
.review__cite-sep { color: var(--color-ink-muted); }

.reviews__tail {
  text-align: center;
  margin-top: var(--space-9);
}

/* =========================================================================
   §6.b — Google Reviews block (cream)
   Centred editorial header ("Google Reviews" display title), circular 5.0
   badge floated top-right, large coral italic open-quote glyph used as a
   background ornament, soft peach arch sitting behind the left card to
   echo the apothecary-alcove motif from §4. Asymmetric grid: one tall
   featured card on the left, two stacked cards on the right; collapses
   to a single column under 800px.
   ========================================================================= */
.gr-section {
  position: relative;
  overflow: hidden;
  isolation: isolate;
}

/* Soft tonal arch behind the featured card — a quiet echo of the
   drip-card arch motif (§4) without competing with it. */
.gr-section__arch {
  position: absolute;
  top: 18%;
  left: -160px;
  width: 420px;
  height: 520px;
  border-radius: 9999px;
  background: radial-gradient(
    closest-side,
    rgba(217, 161, 153, 0.32) 0%,
    rgba(217, 161, 153, 0.18) 45%,
    rgba(217, 161, 153, 0) 75%
  );
  z-index: 0;
  pointer-events: none;
}
@media (max-width: 900px) {
  .gr-section__arch { width: 320px; height: 380px; top: 32%; left: -120px; }
}

/* Oversized italic open-quote sitting between the head and the grid.
   Sits ABOVE the review cards (z-index 2) so both marks of the &ldquo;
   glyph remain visible — the second mark would otherwise hide behind
   the featured card's edge. Translucent + accent-soft tint keeps the
   overlap subtle, reading as a wash on the card corner. */
.gr-section__quote {
  position: absolute;
  left: 6%;
  top: 36%;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: clamp(10rem, 18vw, 18rem);
  line-height: 0.7;
  color: var(--color-accent-soft);
  opacity: 0.42;
  z-index: 2;
  pointer-events: none;
  user-select: none;
  mix-blend-mode: multiply;
}
/* Closing mark — mirrors the opening flourish at the lower-right so the
   section reads as a properly opened AND closed quotation. */
.gr-section__quote--close {
  left: auto;
  right: 6%;
  top: auto;
  bottom: 12%;
}
@media (max-width: 900px) {
  .gr-section__quote { left: 4%; top: 30%; font-size: 8rem; opacity: 0.32; }
  .gr-section__quote--close { left: auto; right: 4%; top: auto; bottom: 8%; }
}

.gr-reviews {
  position: relative;
  z-index: 1;
  display: grid;
  gap: var(--space-7);
}

/* ----- Header ------------------------------------------------------------ */
.gr-reviews__head {
  text-align: center;
  margin-inline: auto;
  max-width: none;
  display: grid;
  justify-items: center;
  gap: var(--space-3);
}

/* Small-caps eyebrow above the headline, styled like the rest of the page
   so the section locks into the editorial system instead of relying on a
   one-off wordmark. */
.gr-reviews__eyebrow-top {
  margin: 0 0 var(--space-3);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--color-accent);
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.gr-reviews__eyebrow-top::before,
.gr-reviews__eyebrow-top::after {
  content: "";
  width: 24px;
  height: 1px;
  background: var(--color-accent);
  display: inline-block;
}

.gr-reviews__title {
  margin: 0;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2.75rem, 6vw + 0.5rem, 5.25rem);
  line-height: 1;
  letter-spacing: -0.025em;
  color: var(--color-ink-deep);
  text-wrap: balance;
}
.gr-reviews__title em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}

.gr-reviews__eyebrow {
  margin: var(--space-2) 0 0;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
  line-height: 1.9;
}

/* ----- Rating badge (top-right circle) ----------------------------------- */
.gr-reviews__badge {
  align-self: center;
  justify-self: center;
  display: grid;
  justify-items: center;
  align-content: center;
  gap: 6px;
  width: 172px;
  height: 172px;
  padding: var(--space-4);
  border-radius: 50%;
  background: rgba(245, 237, 221, 0.92);
  border: 1px solid var(--color-border-cream);
  box-shadow: 0 24px 50px -36px rgba(46, 21, 23, 0.55);
  text-align: center;
}
@media (min-width: 900px) {
  .gr-reviews__badge {
    position: absolute;
    top: 0;
    right: var(--space-2);
  }
}

.gr-reviews__badge-stars {
  display: inline-flex;
  gap: 2px;
  color: var(--color-accent);
}
.gr-reviews__badge-stars svg {
  width: 13px; height: 13px;
  fill: currentColor;
}

.gr-reviews__badge-score {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 2.875rem;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--color-ink-deep);
}

.gr-reviews__badge-label {
  font-family: var(--font-sans);
  font-size: 0.5625rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
  line-height: 1.5;
}

/* ----- Asymmetric grid (1 featured + 2 stacked) -------------------------- */
.gr-reviews__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--space-4);
  grid-template-columns: 1fr;
}
@media (min-width: 800px) {
  .gr-reviews__grid {
    grid-template-columns: 1.05fr 0.95fr;
    grid-template-rows: 1fr 1fr;
    gap: var(--space-5);
  }
  .gr-card--featured {
    grid-column: 1;
    grid-row: 1 / span 2;
  }
}

.gr-card {
  position: relative;
  display: grid;
  align-content: start;
  gap: var(--space-3);
  padding: var(--space-6);
  background: rgba(245, 237, 221, 0.94);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md);
  box-shadow:
    0 1px 0 rgba(245, 237, 221, 0.6) inset,
    0 30px 50px -40px rgba(46, 21, 23, 0.45);
  transition: transform 240ms ease-out, box-shadow 240ms ease-out;
}
.gr-card:hover {
  transform: translateY(-4px);
  box-shadow:
    0 1px 0 rgba(245, 237, 221, 0.6) inset,
    0 40px 60px -36px rgba(46, 21, 23, 0.55);
}
.gr-card--featured {
  padding: var(--space-7);
  gap: var(--space-4);
}

/* Oversized open-quote tucked into the featured card's top-left corner.
   First child in the DOM so it paints BEHIND the stars/name/quote — reads
   as a translucent accent watermark anchored to the corner, not a glyph
   sitting on top of the copy. */
.gr-card__quotemark {
  position: absolute;
  top: -0.18em;
  left: 0.14em;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: clamp(5.5rem, 7vw, 7.5rem);
  line-height: 0.7;
  color: var(--color-accent-soft);
  opacity: 0.5;
  pointer-events: none;
  user-select: none;
}

.gr-card__stars {
  display: inline-flex;
  gap: 4px;
  color: var(--color-accent);
}
.gr-card__stars svg {
  width: 16px; height: 16px;
  fill: currentColor;
}
.gr-card--featured .gr-card__stars svg { width: 18px; height: 18px; }

.gr-card__name {
  margin: var(--space-2) 0 var(--space-3);
  padding-bottom: var(--space-3);
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.625rem, 1.4vw + 1rem, 2.125rem);
  line-height: 1.05;
  letter-spacing: -0.015em;
  color: var(--color-ink-deep);
  position: relative;
}
.gr-card__name::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 36px;
  height: 1px;
  background: var(--color-accent);
}
.gr-card--featured .gr-card__name {
  font-size: clamp(2rem, 1.8vw + 1.4rem, 2.75rem);
  margin-top: var(--space-3);
}

.gr-card__quote {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-deep);
  max-width: 38ch;
}
.gr-card--featured .gr-card__quote {
  font-size: 1.0625rem;
  line-height: 1.7;
  max-width: 36ch;
}

/* ----- Tail CTA ---------------------------------------------------------- */
.gr-reviews__tail {
  display: flex;
  justify-content: center;
  margin-top: var(--space-3);
}

.gr-reviews__cta {
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  padding: 0 0 6px;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
  border-bottom: 1px solid var(--color-accent);
  text-decoration: none;
  transition: color 200ms ease, border-color 200ms ease;
}
.gr-reviews__cta .arrow {
  display: inline-block;
  transition: transform 220ms ease-out;
}
.gr-reviews__cta:hover,
.gr-reviews__cta:focus-visible {
  color: var(--color-accent-hover);
  border-bottom-color: var(--color-accent-hover);
}
.gr-reviews__cta:hover .arrow,
.gr-reviews__cta:focus-visible .arrow {
  transform: translateX(4px);
}

@media (prefers-reduced-motion: reduce) {
  .gr-card,
  .gr-reviews__cta,
  .gr-reviews__cta .arrow { transition: none; }
  .gr-card:hover { transform: none; }
}

/* =========================================================================
   §5 — Process (cream)
   "Three easy steps to feeling better." Centred head, three arched photo
   cards on desktop with the middle card staggered downward. Italic coral
   numerals sit upper-left of each card and a thin dotted curve hops
   between them, mirroring the editorial-medical reference layout.
   ========================================================================= */
.process__head--center {
  text-align: center;
  display: grid;
  justify-items: center;
  gap: var(--space-4);
  margin-bottom: var(--space-9);
  max-width: 880px;
  margin-inline: auto;
}
.process__eyebrow {
  color: var(--color-accent);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  font-weight: 500;
}
.process__title {
  margin: 0;
  text-wrap: balance;
  color: var(--color-ink-deep);   /* explicit so it never inherits a light hue on cream */
}
.process__title em {
  font-style: italic;
  color: var(--color-accent-hover);  /* deeper terracotta — stronger contrast on cream */
}

/* ---- Process steps — mobile accordion, desktop 3-up arched cards --------
   Mobile: each step is a collapsible <details>. The collapsed row shows the
   numeral, a small arched thumbnail and the title; tapping drops the detail
   down. Desktop (≥800px) reverts to the full arched photo cards — a script
   keeps all three open there so they read as static cards. */
.process__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
  align-items: start;
  position: relative;
}
@media (min-width: 800px) {
  .process__grid {
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(var(--space-6), 4vw, var(--space-8));
  }
}

.step-card { position: relative; }

/* Mobile: the accordion panel. */
.step-card__details {
  border: 1px solid var(--color-border-cream);
  border-radius: 14px;
  background: var(--color-bg-ivory);
  overflow: hidden;
}

/* Summary = the tappable header row. Native disclosure marker removed. */
.step-card__summary {
  list-style: none;
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.step-card__summary::-webkit-details-marker { display: none; }
.step-card__summary:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}

.step-card__num {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.375rem;
  line-height: 1;
  color: var(--color-accent);
  letter-spacing: -0.02em;
  flex: 0 0 auto;
}

/* Arched thumbnail (mobile). The photo IS the shape — a small arch. */
.step-card__media {
  position: relative;
  margin: 0;
  flex: 0 0 56px;
  width: 56px;
  height: 56px;
  border-radius: 50% 50% 24% 24% / 58% 58% 28% 28%;
  overflow: hidden;
  box-shadow: 0 6px 14px -8px rgba(46, 21, 23, 0.42);
}
.step-card__media::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid rgba(46, 21, 23, 0.10);
  pointer-events: none;
}
.step-card__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  filter: saturate(1.04) contrast(1.03);
}

.step-card__title {
  flex: 1 1 auto;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.2;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
  text-align: left;
}

/* Chevron — points down when closed, flips up when open. */
.step-card__chevron {
  flex: 0 0 auto;
  width: 10px;
  height: 10px;
  margin-right: 4px;
  border-right: 2px solid var(--color-accent);
  border-bottom: 2px solid var(--color-accent);
  transform: rotate(45deg);
  transition: transform 200ms ease;
}
.step-card__details[open] .step-card__chevron { transform: rotate(-135deg); }

/* Detail body drops down under the row, indented to line up with the title. */
.step-card__body {
  padding: 0 var(--space-3) var(--space-4);
  padding-left: calc(var(--space-3) + 1.5rem + var(--space-3) + 56px + var(--space-3));
}
.step-card__desc {
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 60ch;
}

/* ---- Desktop: the original 3-up arched photo cards -------------------- */
@media (min-width: 800px) {
  .step-card { padding-top: var(--space-7); }
  .step-card__details {
    border: 0;
    border-radius: 0;
    background: none;
    overflow: visible;
  }
  .step-card__summary {
    display: grid;
    justify-items: center;
    gap: var(--space-5);
    padding: 0;
    cursor: default;
    pointer-events: none;
  }
  /* Italic numeral floats above each card at top-left. */
  .step-card__num {
    position: absolute;
    top: -16px;
    left: -8px;
    font-size: clamp(3.5rem, 5vw + 1rem, 5.75rem);
    line-height: 0.9;
    z-index: 2;
    pointer-events: none;
  }
  .step-card__media {
    flex: none;
    width: 100%;
    max-width: 440px;
    height: auto;
    aspect-ratio: 4 / 5;
    border-radius: 50% 50% 8% 8% / 60% 60% 4% 4%;
    box-shadow:
      0 2px 0 rgba(255, 255, 255, 0.35) inset,
      0 38px 60px -34px rgba(46, 21, 23, 0.42);
    transition: transform var(--duration-component) var(--ease-settle),
                box-shadow var(--duration-component) var(--ease-settle);
  }
  /* Middle card takes the organic-blob silhouette. */
  .step-card:nth-child(2) .step-card__media {
    border-radius: 56% 44% 60% 40% / 62% 38% 60% 40%;
  }
  .step-card:hover .step-card__media {
    transform: translateY(-4px);
    box-shadow:
      0 2px 0 rgba(255, 255, 255, 0.35) inset,
      0 46px 70px -32px rgba(46, 21, 23, 0.48);
  }
  .step-card__title {
    flex: none;
    text-align: center;
    font-size: clamp(1.5rem, 1.2vw + 1.1rem, 1.875rem);
    line-height: 1.15;
  }
  .step-card__chevron { display: none; }
  .step-card__body {
    text-align: center;
    max-width: 38ch;
    margin-inline: auto;
    padding: var(--space-3) var(--space-3) 0;
  }
  .step-card__desc {
    font-size: 0.9375rem;
    line-height: 1.65;
  }
}

/* ---- Dotted curve between cards (decorative, desktop only) -------------
   Sits in the gap above each pair of cards, level with the floating italic
   numeral, so the curve threads step → step at eye height without ever
   crossing onto the photographic media beneath. */
.step-card__link {
  display: none;
}
@media (min-width: 800px) {
  .step-card__link {
    display: block;
    position: absolute;
    /* Lifted above the card top edge — the curve now arcs above the
       numerals through the cream margin, never onto the photographs. */
    top: clamp(-12px, -1vw, -4px);
    width: clamp(120px, 12vw, 180px);
    height: clamp(56px, 5.5vw, 84px);
    color: var(--color-accent);
    opacity: 0.7;
    z-index: 1;
    pointer-events: none;
    overflow: visible;
  }
  /* Anchor each connector to the gap to the right of its card, fully
     outside the card body — the right edge of card N meets the left edge
     of card N+1 here. */
  .step-card__link--right { right: calc(clamp(120px, 12vw, 180px) * -0.5); }
  .step-card__link--left  { left:  calc(clamp(120px, 12vw, 180px) * -0.5); }
}

.process__cta {
  display: flex;
  justify-content: center;
  margin-top: clamp(var(--space-7), 8vw, var(--space-10));
}

/* =========================================================================
   §6 — Testimonials (ivory)
   Beat 6: Belonging. Mirror, not rating.
   ========================================================================= */
.testi__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: end;
  margin-bottom: var(--space-9);
}
@media (min-width: 900px) {
  .testi__head { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
}

.testi__split {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  align-items: stretch;
}
@media (min-width: 900px) {
  .testi__split { grid-template-columns: 0.95fr 1.05fr; gap: var(--space-9); }
}

.testi__figure {
  position: relative;
  margin: 0;
  border-radius: var(--radius-md);
  overflow: hidden;
  min-height: 420px;
  box-shadow: 0 30px 60px -40px rgba(46, 21, 23, 0.5);
}
@media (min-width: 900px) { .testi__figure { min-height: 540px; } }
.testi__figure img {
  width: 100%; height: 100%;
  object-fit: cover;
}
.testi__figure figcaption {
  position: absolute;
  inset: auto 0 0 0;
  padding: var(--space-9) var(--space-7) var(--space-7);
  background: linear-gradient(0deg, rgba(27,13,13,0.85) 0%, rgba(27,13,13,0) 100%);
  color: var(--color-ink-cream);
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.5rem;
  line-height: 1.25;
  letter-spacing: -0.01em;
}
.testi__figure figcaption::before {
  content: "";
  display: block;
  width: 28px; height: 1px;
  background: var(--color-accent);
  margin-bottom: var(--space-3);
}

.testi__quotes {
  display: grid;
  gap: 0;
  align-content: start;
}
.testi__quote {
  padding-block: var(--space-6);
  border-bottom: 1px solid var(--color-border-cream);
  display: grid;
  gap: var(--space-3);
}
.testi__quote:first-child { padding-top: 0; }
.testi__quote:last-child { border-bottom: 0; }
.testi__quote-tag {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent);
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.testi__quote-tag::before {
  content: "";
  width: 22px; height: 1px;
  background: currentColor;
  opacity: 0.6;
}
.testi__quote blockquote {
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.5rem;
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  text-indent: -0.4em;
}
.testi__quote blockquote::before {
  content: "“";
  color: var(--color-accent);
  font-style: normal;
  font-weight: 500;
  margin-right: 0.05em;
}
.testi__quote cite {
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.8125rem;
  letter-spacing: 0.04em;
  color: var(--color-ink-soft);
}

/* =========================================================================
   §7 — Events (deep wine)
   Beat 7: Aspiration. The room.
   ========================================================================= */
.events {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  align-items: center;
}
@media (min-width: 900px) {
  .events { grid-template-columns: 0.95fr 1.05fr; gap: var(--space-10); }
}

.events__figure {
  margin: 0;
  border-radius: var(--radius-md);
  overflow: hidden;
  position: relative;
  aspect-ratio: 5 / 6;
  box-shadow: 0 30px 60px -40px rgba(0,0,0,0.6);
}
.events__figure img {
  width: 100%; height: 100%; object-fit: cover;
}
.events__figure::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, rgba(27,13,13,0.45), rgba(0,0,0,0) 55%);
}

.events__content { display: grid; gap: var(--space-5); }
.events__bullets {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3) var(--space-7);
  border-top: 1px solid var(--color-border-deep);
  padding-top: var(--space-5);
  margin-top: var(--space-3);
}
@media (min-width: 600px) {
  .events__bullets { grid-template-columns: 1fr 1fr; }
}
.events__bullets li {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  color: var(--color-ink-cream);
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.events__bullets li::before {
  content: "";
  width: 14px; height: 1px;
  background: var(--color-accent);
}

/* =========================================================================
   §8 — Closing (espresso)
   Beat 8: Resolution. Single sentence, single CTA.
   ========================================================================= */
.closing {
  position: relative;
  text-align: center;
  /* Sized so the whole closer fits within one viewport (one scroll): tight on
     mobile where height is scarce, generous on desktop where there's room. */
  padding-block: clamp(var(--space-7), 6vw + 0.5rem, var(--space-10));
  background:
    radial-gradient(ellipse at 50% 0%, rgba(194,118,107,0.10) 0%, rgba(194,118,107,0) 55%),
    radial-gradient(ellipse at 50% 110%, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0) 60%),
    var(--color-bg-espresso);
}
.closing__inner {
  display: grid;
  gap: var(--space-6);
  justify-items: center;
  max-width: 880px;
  margin-inline: auto;
  padding-inline: var(--gutter-mobile);
}
.closing__title { color: var(--color-ink-cream); }
.closing__lede {
  color: var(--color-ink-cream-mute);
  font-size: var(--font-size-md);
  line-height: 1.55;
  max-width: 56ch;
}
.closing__note {
  margin-top: var(--space-6);
  color: var(--color-ink-cream-mute);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.6;
  letter-spacing: 0.01em;
  max-width: 60ch;
  opacity: 0.7;
}

/* =========================================================================
   §9 — Footer (espresso)
   Quiet utility — Instagram override per build-plan.
   ========================================================================= */
.footer {
  background: var(--color-bg-espresso);
  color: var(--color-ink-cream);
  /* No top divider: the closing CTA above is the same espresso, so the page
     resolves into one continuous dark base. Generous top padding + the link
     grid separate the footer — no drawn line. */
  padding-block: var(--space-7) var(--space-6);
}
.footer__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  padding-bottom: var(--space-6);
  border-bottom: 1px solid var(--color-border-deep);
}
@media (min-width: 600px) {
  .footer__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1000px) {
  .footer__grid { grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: var(--space-8); }
}
.footer__brand { display: grid; gap: var(--space-4); align-content: start; }
/* Mobile: center the wordmark above the brand copy. From 720px up it returns
   to a left-aligned column (rules below + the brand override further down).
   The PNG carries ~8% transparent left padding, so the small negative margin
   re-centers the visible "DRIP…TONIC" inside its box. (Footer has
   overflow:clip, so the transparent overhang never creates scroll.) */
.footer__brand img { height: 112px; width: auto; max-width: 100%; justify-self: center; margin-left: -11px; }
@media (min-width: 720px) {
  .footer__brand {
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: var(--space-5);
  }
  .footer__brand img { height: 80px; justify-self: start; margin-left: -24px; }
}
.footer__brand p {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
  max-width: 36ch;
}
.footer__col h3,
.footer__col h4 {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-ink-cream);
  margin: 0 0 var(--space-5);
}
/* Short terracotta rule under each column heading (mockup detail). */
.footer__col h3::after,
.footer__col h4::after {
  content: "";
  display: block;
  width: 28px;
  height: 2px;
  margin-top: var(--space-3);
  background: var(--color-accent);
}
.footer__col ul { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-3); }
.footer__col a {
  font-size: 0.9375rem;
  color: var(--color-ink-cream-mute);
  transition: color var(--duration-micro) var(--ease-settle);
}
.footer__col a:hover { color: var(--color-ink-cream); }

.footer__disclaimer {
  margin: var(--space-5) 0 0;
  padding: var(--space-4) 0 0;
  max-width: none;
  font-family: var(--font-sans);
  font-size: 0.78rem;
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
  letter-spacing: 0.005em;
  opacity: 0.86;
}
.footer__disclaimer strong {
  color: var(--color-ink-cream);
  font-weight: 500;
  letter-spacing: 0.02em;
}
.footer__disclaimer a {
  color: var(--color-ink-cream);
  text-decoration: none;
  border-bottom: 1px solid var(--color-accent-line);
  transition: border-color .18s ease, color .18s ease;
}
.footer__disclaimer a:hover,
.footer__disclaimer a:focus-visible {
  color: var(--color-ink-cream);
  border-bottom-color: var(--color-ink-cream);
}

.footer__bottom {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-5);
  padding-top: var(--space-5);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
}
.footer__bottom .tagline { color: var(--color-ink-cream); }
.footer__legal {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
}
.footer__legal a {
  color: var(--color-ink-cream-mute);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color .18s ease, border-color .18s ease;
}
.footer__legal a:hover,
.footer__legal a:focus-visible {
  color: var(--color-ink-cream);
  border-bottom-color: var(--color-accent-line);
}
.footer__legal .sep {
  color: var(--color-accent-line);
  opacity: 0.6;
}
.footer__social {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  color: var(--color-ink-cream-mute);
  transition: color var(--duration-micro) var(--ease-settle);
}
.footer__social:hover { color: var(--color-ink-cream); }
.footer__social svg { width: 22px; height: 22px; }

/* =========================================================================
   Footer — mockup detailing (CSS-only; shared across all 18 pages)
   Crown splash in the brand column + faint droplet watermark bottom-right +
   column hairlines + iconified contact list. Both images are decorative CSS
   backgrounds; url() resolves relative to this stylesheet, so one path serves
   every page regardless of its directory depth.
   ========================================================================= */

/* Watermark + content stacking. overflow:clip keeps the droplet from ever
   producing horizontal scroll at 390px. */
.footer { position: relative; overflow: clip; }
.footer > .container { position: relative; z-index: 1; }
.footer::before {
  content: "";
  position: absolute;
  right: clamp(-180px, -12vw, -90px);
  bottom: clamp(-90px, -6vw, -30px);
  width: clamp(300px, 42vw, 620px);
  height: clamp(300px, 42vw, 620px);
  background: url(img/footer/footer-droplet.webp) no-repeat right center / contain;
  opacity: 0.375;
  pointer-events: none;
  z-index: 0;
}

/* Brand column: stacked logo over copy (matches the mockup). */
@media (min-width: 720px) {
  .footer__brand { grid-template-columns: 1fr; align-items: start; }
  .footer__brand img { height: 124px; margin-left: -24px; }
}

/* Thin vertical hairlines between the nav columns (desktop only). */
@media (min-width: 960px) {
  .footer__grid--5 > .footer__col,
  .footer__grid--6 > .footer__col {
    border-left: 1px solid var(--color-border-deep);
    padding-left: var(--space-5);
  }
}

/* Contact column (always the last .footer__col) — leading icons + group rules.
   Icons are masked so they inherit the terracotta hairline colour. */
.footer__col:last-child ul { gap: var(--space-4); }
.footer__col:last-child li {
  position: relative;
  padding-left: 28px;
  /* Plain text in a list item (e.g. the "Serving the" prefix) otherwise
     inherits the brighter footer ink and the base 1rem size; match both to
     the muted link styling so the row reads as one consistent tone and size. */
  color: var(--color-ink-cream-mute);
  font-size: 0.9375rem;
}
.footer__col:last-child li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.15em;
  width: 16px;
  height: 16px;
  background: var(--color-accent-line);
  -webkit-mask: var(--ic) no-repeat center / contain;
          mask: var(--ic) no-repeat center / contain;
}
/* calendar / book-an-appointment */
.footer__col:last-child li:nth-child(1) { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4.5' width='18' height='16' rx='2'/%3E%3Cpath d='M3 9h18M8 2.5v4M16 2.5v4'/%3E%3C/svg%3E"); }
/* party-popper / inquire for events */
.footer__col:last-child li:nth-child(2) { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 21l5.5-13 7.5 7.5L3 21z'/%3E%3Cpath d='M14 6.5l1-1M18 10l1.5-.5M16.5 3l.5-1.5M20.5 6l1.5-.5M19 13l1 1'/%3E%3C/svg%3E"); }
/* mail / email */
.footer__col:last-child li:nth-child(3) { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='M3.5 6.5L12 13l8.5-6.5'/%3E%3C/svg%3E"); }
/* phone */
.footer__col:last-child li:nth-child(4) { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 4h3l2 4-2 1a11 11 0 0 0 7 7l1-2 4 2v3a2 2 0 0 1-2 2A17 17 0 0 1 3 6a2 2 0 0 1 2-2z'/%3E%3C/svg%3E"); }
/* map-pin / service area */
.footer__col:last-child li:nth-child(5) { --ic: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s7-6.2 7-11a7 7 0 0 0-14 0c0 4.8 7 11 7 11z'/%3E%3Ccircle cx='12' cy='10' r='2.5'/%3E%3C/svg%3E"); }
/* group dividers: before email and before service-area */
.footer__col:last-child li:nth-child(3),
.footer__col:last-child li:nth-child(5) {
  border-top: 1px solid var(--color-border-deep);
  margin-top: var(--space-3);
  padding-top: var(--space-4);
}
.footer__col:last-child li:nth-child(3)::before,
.footer__col:last-child li:nth-child(5)::before {
  top: calc(var(--space-4) + 0.15em);
}

/* =========================================================================
   Hero — trust strip below CTAs (replaces credentials line + chips)
   Same .hero__cred typographic register, with a thin top rule for separation.
   ========================================================================= */
.hero__trust {
  margin-top: var(--space-6);
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border-deep);
  font-size: 0.6875rem;
  letter-spacing: 0.14em;
  line-height: 1.7;
  color: var(--color-ink-cream-mute);
  max-width: 640px;
  /* Override .hero__cred's display:flex so the three phrases flow as one
     inline run (wrapping to ~2 lines) instead of stacking as three lines. */
  display: block;
  /* Lifted ~5% of viewport height so the trust line sits well clear
     of the bottom fade band. */
  transform: translateY(-5vh);
}
.hero__trust .dash {
  /* Prominent terracotta separators that clearly differentiate the
     three credential phrases. */
  color: var(--color-accent);
  opacity: 1;
  margin: 0 0.7em;
  font-weight: 500;
}
@media (max-width: 768px) {
  .hero__trust {
    font-size: 0.625rem;
    letter-spacing: 0.12em;
    line-height: 1.7;
  }
}

/* =========================================================================
   §10 — FAQ (cream)
   Placeholder block before footer. Editorial details: hairline divider list,
   numbered eyebrow per row, italic display question, body sans answer.
   ========================================================================= */
.faq__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: end;
  margin-bottom: var(--space-9);
}
@media (min-width: 900px) {
  .faq__head { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
}

.faq__list {
  list-style: none;
  margin: 0;
  padding: 0;
  border-top: 1px solid var(--color-border-cream);
}
.faq__item {
  display: block;
  border-bottom: 1px solid var(--color-border-cream);
}
.faq__summary {
  display: grid;
  grid-template-columns: minmax(56px, auto) 1fr 18px;
  gap: var(--space-5) var(--space-7);
  align-items: start;
  padding-block: var(--space-7);
  cursor: pointer;
  list-style: none;
  -webkit-tap-highlight-color: transparent;
}
.faq__summary::-webkit-details-marker { display: none; }
.faq__summary::marker { content: ''; }
.faq__summary:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 4px;
  border-radius: 2px;
}
@media (min-width: 800px) {
  .faq__summary { grid-template-columns: 88px 1fr 18px; gap: var(--space-9); }
}
.faq__num {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent);
  font-weight: 500;
  margin-top: 0.7em;
  transition: opacity 250ms ease-out;
}
.faq__q {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.625rem;
  line-height: 1.2;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin: 0;
  text-wrap: balance;
  transition: color 250ms ease-out;
}
.faq__q em { font-style: italic; color: var(--color-accent); font-weight: 500; }
.faq__summary:hover .faq__q { color: var(--color-accent); }
.faq__icon {
  position: relative;
  width: 18px;
  height: 18px;
  margin-top: 0.6em;
  align-self: start;
}
.faq__icon::before,
.faq__icon::after {
  content: '';
  position: absolute;
  background: var(--color-accent);
  transition: transform 300ms cubic-bezier(0.22, 1, 0.36, 1), opacity 250ms ease-out;
}
.faq__icon::before {
  top: 50%;
  left: 0;
  width: 100%;
  height: 1.25px;
  transform: translateY(-50%);
}
.faq__icon::after {
  top: 0;
  left: 50%;
  width: 1.25px;
  height: 100%;
  transform: translateX(-50%);
}
.faq__item[open] .faq__icon::after {
  transform: translateX(-50%) rotate(90deg);
  opacity: 0;
}
.faq__body {
  display: grid;
  grid-template-columns: minmax(56px, auto) 1fr 18px;
  gap: var(--space-5) var(--space-7);
  padding-bottom: var(--space-7);
}
@media (min-width: 800px) {
  .faq__body { grid-template-columns: 88px 1fr 18px; gap: var(--space-9); }
}
.faq__body > .faq__a,
.faq__body > .faq__a-list { grid-column: 2; }
.faq__a-list {
  font-family: var(--font-sans);
  font-size: var(--font-size-base);
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: var(--space-3) 0 var(--space-3);
  padding-left: 1.25rem;
  max-width: 64ch;
  list-style: none;
}
.faq__a-list li {
  position: relative;
  padding: 0.35rem 0 0.35rem 0.5rem;
  border-left: 1px solid var(--color-border-cream);
  margin-bottom: 0.45rem;
}
.faq__a-list li:last-child { margin-bottom: 0; }
.faq__a-list li strong { color: var(--color-ink-deep); }
.faq__a {
  font-size: var(--font-size-base);
  line-height: 1.65;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 64ch;
  animation: faqReveal 360ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.faq__a a {
  color: var(--color-accent);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  overflow-wrap: anywhere;
}
.faq__a a:hover,
.faq__a a:focus-visible { color: var(--color-accent-hover); }
@keyframes faqReveal {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .faq__icon::before,
  .faq__icon::after,
  .faq__q,
  .faq__a { transition: none; animation: none; }
}
.faq__placeholder {
  font-style: italic;
  color: var(--color-ink-soft);
  opacity: 0.85;
}
.faq__cta {
  display: flex;
  justify-content: center;
  margin-top: var(--space-9);
}

/* =========================================================================
   Sticky mobile CTA — full-width terracotta band, mobile only.
   Always-visible booking action; clears safe-area on notched devices.
   ========================================================================= */
.sticky-cta {
  display: none;
  position: fixed;
  bottom: 0; left: 0; right: 0;
  z-index: 50;
  background: var(--color-accent);
  color: var(--color-ink-cream);
  text-align: center;
  padding: 16px var(--gutter-mobile);
  padding-bottom: calc(16px + env(safe-area-inset-bottom));
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  text-decoration: none;
  box-shadow: 0 -10px 30px -16px rgba(27, 13, 13, 0.55);
  transition: background var(--duration-micro) var(--ease-settle);
}
.sticky-cta:hover,
.sticky-cta:focus-visible {
  background: var(--color-accent-hover);
}
.sticky-cta .arrow {
  display: inline-block;
  margin-left: var(--space-2);
  transition: transform var(--duration-micro) var(--ease-settle);
}
.sticky-cta:hover .arrow { transform: translateX(3px); }

/* When the footer scrolls into view, slide the sticky CTA out of the way
   so the legal row, social, and disclaimer aren't covered. JS toggles
   the .is-hidden class via IntersectionObserver on .footer. */
.sticky-cta {
  transition: background var(--duration-micro) var(--ease-settle),
              transform 320ms var(--ease-settle),
              opacity 240ms var(--ease-settle);
}
.sticky-cta.is-hidden {
  transform: translateY(120%);
  opacity: 0;
  pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
  .sticky-cta { transition: opacity 120ms linear; }
  .sticky-cta.is-hidden { transform: none; }
}

@media (max-width: 768px) {
  .sticky-cta { display: block; }
  /* Reserve clearance for the fixed sticky CTA on the FOOTER (espresso), not
     the body (cream) — otherwise the body's bottom padding shows as a cream
     band beneath the footer. */
  .footer { padding-bottom: calc(var(--space-7) + 60px + env(safe-area-inset-bottom)); }
}

/* =========================================================================
   Reveal — kept as a hook for future entrance motion; presently a no-op
   so content is visible by default (better for SSR, no-JS, screenshot
   capture, and matches the brand's preference for restraint over motion).
   ========================================================================= */
.reveal { opacity: 1; transform: none; }

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

/* =========================================================================
   ============================ IV BLENDS PAGE ============================
   Layered on top of the landing tokens & components. Reuses .nav, .footer,
   .section--*, .btn, .eyebrow, .h-section, .step, .faq__*, .closing, etc.
   ========================================================================= */

/* ---- Nav variant: blends pages use a deep-wine bar (no hero image) ------ */
.nav--blends {
  position: relative;
  background: var(--color-bg-deep);
  border-bottom: 1px solid var(--color-border-deep);
  padding-block: var(--space-4);
}
.nav--blends .nav__brand-mark,
.nav--blends .nav__logo { opacity: 1; }

/* =========================================================================
   §1 — Page hero (IV Blends)
   Editorial text-only hero on deep wine. Reuses hero typography from §1.
   ========================================================================= */
.page-hero {
  position: relative;
  background:
    radial-gradient(ellipse at 78% 0%, rgba(194, 118, 107, 0.10) 0%, rgba(46, 21, 23, 0) 50%),
    radial-gradient(ellipse at 0% 100%, rgba(0, 0, 0, 0.45) 0%, rgba(46, 21, 23, 0) 55%),
    var(--color-bg-deep);
  color: var(--color-ink-cream);
  padding-block: clamp(96px, 14vw, 200px);
  overflow: hidden;
}
.page-hero .grain { opacity: 0.12; }

.page-hero__inner {
  position: relative;
  z-index: 5;
  display: grid;
  gap: var(--space-7);
}
.page-hero__content {
  display: grid;
  gap: var(--space-5);
  max-width: 760px;
}
.page-hero__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2.75rem, 6.5vw + 0.5rem, 5.5rem);
  line-height: 1.0;
  letter-spacing: -0.025em;
  text-wrap: balance;
  margin: 0;
  color: var(--color-ink-cream);
}
.page-hero__headline em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.page-hero__sub {
  font-size: var(--font-size-md);
  line-height: 1.65;
  color: var(--color-ink-cream-mute);
  max-width: 560px;
  margin: 0;
}
.page-hero__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-3);
}
.page-hero__trust {
  margin-top: var(--space-6);
}

/* --- Hero badges — icon trust strip (replaces prose sub + dot trust line)
   Five compact icon+label units. SVG icons match the existing 0 0 48 48
   stroke-1.4 vocabulary so they sit naturally with the rest of the page.
---------------------------------------------------------------------------- */
.hero-badges {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-6);
  margin: var(--space-4) 0 0;
  padding: var(--space-4) 0 0;
  border-top: 1px solid var(--color-border-deep);
  max-width: 620px;
}
.hero-badge {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 0.5rem;
  min-width: 0;
}
.hero-badge__link {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: inherit;
  text-decoration: none;
  color: inherit;
  transition: transform 180ms ease, color 180ms ease;
  border-radius: 2px;
}
.hero-badge__link:hover,
.hero-badge__link:focus-visible {
  transform: translateY(-1px);
  color: var(--color-ink-cream);
}
.hero-badge__link:hover .hero-badge__icon,
.hero-badge__link:focus-visible .hero-badge__icon {
  color: var(--color-accent);
}
.hero-badge__link:focus-visible {
  outline: 1px solid var(--color-accent);
  outline-offset: 6px;
}
.hero-badge__icon {
  display: inline-grid;
  place-items: center;
  width: 35px;
  height: 35px;
  color: var(--color-accent-line);
  transition: color 180ms ease;
}
.hero-badge__icon svg {
  width: 100%;
  height: 100%;
  display: block;
}
/* Optical centering — the syringe icon hangs diagonally bottom-left,
   so badge #3 reads visually left-shifted. Nudge 5px right. */
.hero-badge:nth-child(3) .hero-badge__icon {
  transform: translateX(5px);
}
.hero-badge__label {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: 0.10em;
  line-height: 1.4;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  margin: 0;
}

@media (max-width: 768px) {
  .hero-badges {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    max-width: none;
    gap: var(--space-4) var(--space-3);
    margin-top: var(--space-4);
    padding-top: var(--space-4);
  }
  .hero-badge:nth-child(3):last-child {
    grid-column: 1 / -1;
  }
}

@media (prefers-reduced-motion: reduce) {
  .hero-badge__link {
    transition: color 80ms ease;
  }
  .hero-badge__link:hover,
  .hero-badge__link:focus-visible {
    transform: none;
  }
}

/* --- Hero photograph (integrated background) --------------------------------
   The photo IS the hero — bleeds edge-to-edge behind the text. A two-layer
   veil (deep wine washing left→right, plus a softer top-and-bottom fade)
   keeps the headline legible while the bag cluster reads clearly as the
   subject of the composition.
---------------------------------------------------------------------------- */
.page-hero--imaged {
  position: relative;
  isolation: isolate;
  min-height: clamp(560px, 78vh, 820px);
  padding-block: clamp(56px, 7vw, 96px);
  display: grid;
  align-items: center;
  overflow: hidden;
  /* Wine fallback for any region the photo doesn't cover (e.g. extreme
     ultra-wide viewports). Overrides the radial gradients on .page-hero. */
  background: var(--color-bg-deep);
}
.page-hero--imaged .page-hero__inner {
  position: relative;
  z-index: 3;
}

/* Photo layer — fills the entire hero. */
.page-hero--imaged .page-hero__plate {
  position: absolute;
  inset: 0;
  margin: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
}
.page-hero--imaged .page-hero__plate picture,
.page-hero--imaged .page-hero__plate picture > * {
  display: block;
  width: 100%;
  height: 100%;
}
.page-hero--imaged .page-hero__plate-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Anchor toward the right so the side-table + wine-wall claim the left
     half (text column), leaving the bag cluster in the right half. */
  object-position: 78% 52%;
  /* The plate spans the full viewport width, so object-position X can't pan.
     Zoom toward the bag cluster (~78% across) to push the stray left stand
     pole off-frame and pull the bags in so the right edge isn't dead wine. */
  transform: scale(1.2);
  transform-origin: 82% 50%;
  filter: saturate(1.05) contrast(1.03);
}

/* Veil one — left-to-right wine wash. Pinned dark across the entire text
   column (left ~52%), then dissolves toward the bag cluster on the right. */
.page-hero--imaged .page-hero__plate::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(
      96deg,
      rgba(46, 21, 23, 0.94) 0%,
      rgba(46, 21, 23, 0.88) 28%,
      rgba(46, 21, 23, 0.62) 48%,
      rgba(46, 21, 23, 0.22) 66%,
      rgba(46, 21, 23, 0) 82%
    );
  z-index: 1;
}
/* Veil two — soft top + bottom fade. Anchors the nav bar into the wine,
   lets the marble base of the photo dissolve at the bottom edge. */
.page-hero--imaged .page-hero__plate::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(
      180deg,
      rgba(46, 21, 23, 0.55) 0%,
      rgba(46, 21, 23, 0.20) 22%,
      rgba(46, 21, 23, 0) 45%,
      rgba(46, 21, 23, 0) 70%,
      rgba(46, 21, 23, 0.42) 100%
    );
  z-index: 2;
}

/* Mobile — text column claims the upper 65–70% of the hero. Bags
   drop into the lower band. Veil deepens to a near-solid wine so every
   line of the text reads cleanly against the wall. */
@media (max-width: 768px) {
  .page-hero--imaged {
    min-height: clamp(720px, 100svh, 940px);
    padding-block: clamp(96px, 16vw, 140px) clamp(56px, 9vw, 96px);
    align-items: start;
  }
  .page-hero--imaged .page-hero__plate-img {
    object-position: 62% 88%;
  }
  .page-hero--imaged .page-hero__plate::before {
    background:
      linear-gradient(
        180deg,
        rgba(46, 21, 23, 0.96) 0%,
        rgba(46, 21, 23, 0.95) 35%,
        rgba(46, 21, 23, 0.88) 60%,
        rgba(46, 21, 23, 0.68) 78%,
        rgba(46, 21, 23, 0.30) 92%,
        rgba(46, 21, 23, 0) 100%
      );
  }
  .page-hero--imaged .page-hero__plate::after {
    background:
      linear-gradient(
        180deg,
        rgba(46, 21, 23, 0.32) 0%,
        rgba(46, 21, 23, 0) 30%,
        rgba(46, 21, 23, 0) 70%,
        rgba(46, 21, 23, 0.50) 100%
      );
  }
}

/* =========================================================================
   §2 — Editorial intro: what an IV drip is + how Drip Tonic delivers it
   Single-column flow at a reading measure: heading → body → editorial
   founder pull-quote → references list. Quote pattern mirrors .safety__quote
   on the About page (italic serif, accent left border, oversized open glyph).
   ========================================================================= */
.choose {
  display: grid;
  /* Mobile: founders photo sits beside the heading; the testimonial quote runs
     full-width underneath so the long copy stays readable (not squeezed into a
     narrow column). Desktop reshapes this into text-col + full-height photo. */
  grid-template-columns: minmax(0, 1fr) minmax(104px, 0.62fr);
  grid-template-areas:
    "intro photo"
    "quote quote"
    "more  more";
  gap: var(--space-5);
  max-width: 1120px;
  margin-inline: auto;
  align-items: start;
}
.choose__intro {
  grid-area: intro;
  display: grid;
  gap: var(--space-4);
  align-content: start;
  min-width: 0;
}
.choose__figure--founders { grid-area: photo; }
.choose__quote { grid-area: quote; }
.choose__more { grid-area: more; margin-top: 0; }
.choose__heading {
  margin: 0;
  text-wrap: balance;
}
.choose__heading em { color: var(--color-accent); }

.choose__body p {
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.7;
  color: var(--color-ink-deep);
  margin: 0;
}
.choose__body p + p { margin-top: var(--space-5); }
.choose__body sup {
  font-size: 0.625rem;
  vertical-align: super;
  line-height: 0;
  margin-left: 0.12em;
}
.choose__body sup + sup { margin-left: 0.06em; }
.choose__body sup a {
  color: var(--color-accent);
  text-decoration: none;
  font-weight: 600;
}
.choose__body sup a:hover { text-decoration: underline; }

.choose__figure {
  margin: 0;
  align-self: stretch;
  position: relative;
  display: flex;
}
.choose__figure-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 55% 50%;
  aspect-ratio: 4 / 5;
  min-height: 100%;
  mix-blend-mode: multiply;
  -webkit-mask-image:
    linear-gradient(to right,  transparent 0%, #000 12%, #000 88%, transparent 100%),
    linear-gradient(to bottom, transparent 0%, #000 10%, #000 90%, transparent 100%);
          mask-image:
    linear-gradient(to right,  transparent 0%, #000 12%, #000 88%, transparent 100%),
    linear-gradient(to bottom, transparent 0%, #000 10%, #000 90%, transparent 100%);
  -webkit-mask-composite: source-in;
          mask-composite: intersect;
}
@media (max-width: 879px) {
  .choose__figure-img {
    aspect-ratio: 5 / 4;
    max-height: 60vh;
    margin-inline: calc(var(--space-5) * -1);
    width: calc(100% + var(--space-5) * 2);
  }
}

.choose__quote {
  margin: 0;
  padding: clamp(var(--space-5), 2.2vw, var(--space-7)) clamp(var(--space-5), 2.4vw, var(--space-8));
  background: var(--color-surface-cream);
  border-radius: 8px 8px 8px 28px;
  position: relative;
}
.choose__quote blockquote { margin: 0; padding-left: clamp(1.75rem, 2.4vw, 2.5rem); }
.choose__quote blockquote p {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.0625rem, 0.9vw + 0.78rem, 1.3125rem);
  line-height: 1.5;
  letter-spacing: -0.005em;
  color: var(--color-ink-deep);
  margin: 0;
  text-wrap: balance;
}
.choose__quote blockquote p::before {
  content: "\201C";
  position: absolute;
  top: clamp(var(--space-2), 1vw, var(--space-4));
  left: clamp(var(--space-4), 2vw, var(--space-6));
  font-family: var(--font-serif);
  font-style: normal;
  font-weight: 500;
  font-size: clamp(2.75rem, 4vw + 0.5rem, 3.75rem);
  line-height: 1;
  color: var(--color-accent);
}
.choose__quote figcaption {
  display: grid;
  gap: var(--space-1);
  margin-top: var(--space-5);
  padding-left: clamp(1.75rem, 2.4vw, 2.5rem);
}
.choose__quote cite {
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.75rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
  font-weight: 600;
}
.choose__quote-sep { color: var(--color-ink-soft); margin-inline: 0.25em; }
.choose__quote-role {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
}

.choose__refs {
  list-style: decimal;
  padding: var(--space-5) 0 0 1.25rem;
  margin: 0;
  border-top: 1px solid var(--color-border-cream);
  display: grid;
  gap: var(--space-3);
  grid-column: 1 / -1;
}
.choose__refs li {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--color-ink-soft);
}
.choose__refs em {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--color-ink-deep);
}
.choose__refs a {
  color: var(--color-accent);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  overflow-wrap: anywhere;
}
.choose__refs a:hover { color: var(--color-accent-hover); }

@media (min-width: 880px) {
  .choose {
    grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
    grid-template-areas:
      "intro photo"
      "quote photo"
      "more  photo";
    gap: var(--space-7) clamp(var(--space-7), 5vw, var(--space-10));
    align-items: start;
  }
  /* Photo fills the full height of the text column, as before. */
  .choose__figure--founders { align-self: stretch; }
  .choose__figure-img {
    max-width: none;
    margin-inline: 0;
  }
}

/* =========================================================================
   §3 — Featured Blends grid (5 cards)
   Arch-top apothecary cards. Center card visually featured (warmer surface,
   deeper shadow, lift). Mobile = single column stack, no offsets.
   ========================================================================= */
.blends__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: end;
  margin-bottom: var(--space-9);
}
@media (min-width: 900px) {
  .blends__head { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
}
.blends__title em { color: var(--color-accent); }

.blends__carousel { position: relative; }

/* Mobile (<700px): one full-width card at a time, horizontal swipe with snap.
   ≥700px it reverts to the expanded comparison grid below. */
.blends__grid {
  display: flex;
  gap: var(--space-4);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.blends__grid::-webkit-scrollbar { display: none; }
.blends__grid > .blend {
  flex: 0 0 100%;
  scroll-snap-align: center;
  min-width: 0;
}

/* Pagination dots — shown only while the carousel is active. */
.blends__dots {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 10px;
  margin-top: var(--space-5);
}
.blends__dot {
  width: 9px;
  height: 9px;
  border-radius: 999px;
  border: 1px solid rgba(46, 21, 23, 0.30);
  background: transparent;
  padding: 0;
  cursor: pointer;
  transition: background 180ms ease-out, border-color 180ms ease-out, width 180ms ease-out;
}
.blends__dot[aria-current="true"] {
  width: 24px;
  background: var(--color-accent);
  border-color: var(--color-accent);
}

/* Prev/next arrows — identical treatment to the packages + add-ons carousels:
   ink-on-cream outline circles, never a coral fill (coral is CTA-only per the
   brand kit). The carousel JS wires these up. */
.blends__controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-5);
  margin-top: var(--space-7);
}
.blends__nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 999px;
  border: 1px solid var(--color-border-cream, rgba(46, 21, 23, 0.18));
  background: transparent;
  color: var(--color-ink-deep, #2e1517);
  font-size: 1.125rem;
  cursor: pointer;
  flex: 0 0 auto;
  transition: background 180ms ease-out, border-color 180ms ease-out, transform 180ms ease-out;
}
.blends__nav:hover,
.blends__nav:focus-visible {
  background: rgba(46, 21, 23, 0.06);
  border-color: var(--color-accent);
}
.blends__nav:active { transform: scale(0.94); }
.blends__nav:disabled { opacity: 0.3; cursor: default; }
.blends__swipe-hint {
  margin: var(--space-4) 0 0;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-muted);
}

@media (min-width: 700px) {
  .blends__grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-6);
    overflow: visible;
  }
  .blends__grid > .blend { flex: 0 1 auto; scroll-snap-align: none; }
  .blends__dots,
  .blends__controls,
  .blends__swipe-hint { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .blends__nav:active { transform: none; }
}
@media (min-width: 1100px) {
  .blends__grid { grid-template-columns: repeat(3, 1fr); gap: var(--space-6); align-items: stretch; }
}

.blend {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--color-bg-ivory);
  color: var(--color-ink-deep);
  border-radius: var(--radius-arch);
  overflow: hidden;
  border: 1px solid var(--color-border-cream);
  box-shadow: 0 24px 50px -40px rgba(46, 21, 23, 0.45);
  transition: transform var(--duration-component) var(--ease-settle),
              box-shadow var(--duration-component) var(--ease-settle);
}
.blend:hover {
  transform: translateY(-4px);
  box-shadow: 0 32px 60px -36px rgba(46, 21, 23, 0.55);
}
.blend--feature {
  background: var(--color-surface-cream);
  box-shadow: 0 36px 72px -36px rgba(46, 21, 23, 0.65);
}
@media (min-width: 1100px) {
  .blend--feature:hover { transform: translateY(-4px); }
}

.blend__badge {
  position: absolute;
  top: var(--space-3);
  left: 50%;
  transform: translateX(-50%);
  z-index: 4;
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-ink-cream);
  background: var(--color-accent);
  padding: 6px 12px;
  border-radius: 2px;
  white-space: nowrap;
}

.blend__art {
  position: relative;
  aspect-ratio: 4 / 5;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-bg-ivory);
  border-bottom: 1px solid var(--color-border-cream);
  overflow: hidden;
}
.blend__art-img {
  position: relative;
  z-index: 2;
  display: block;
  width: auto;
  height: auto;
  max-width: 62%;
  max-height: 86%;
  object-fit: contain;
  margin: 0 auto;
  filter: saturate(1.18) contrast(1.06);
}
.blend__art-frame {
  position: absolute;
  inset: var(--space-4) var(--space-4) 0 var(--space-4);
  border: 1px solid rgba(27, 13, 13, 0.06);
  border-radius: 9999px 9999px 0 0;
  pointer-events: none;
  z-index: 1;
}
.blend__art-label {
  position: absolute;
  bottom: var(--space-5);
  left: 0;
  right: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(0.875rem, 1.2vw + 0.25rem, 1.0625rem);
  line-height: 1.05;
  letter-spacing: -0.01em;
  color: rgba(27, 13, 13, 0.32);
  text-align: center;
  text-transform: none;
  user-select: none;
  z-index: 3;
  pointer-events: none;
}

/* Per-blend variations — flat, uniform ivory; image carries the color. */
.blend__art--myers,
.blend__art--energy,
.blend__art--immunity,
.blend__art--glow,
.blend__art--detox,
.blend__art--reset,
.blend__art--athletes  { background: var(--color-bg-ivory); }

.blend__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-6);
  flex: 1;
  background: var(--color-bg-ivory);
}
.blend--feature .blend__body { background: var(--color-bg-cream); }

.blend__tag {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-accent);
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}
.blend__tag::before {
  content: "";
  width: 18px; height: 1px;
  background: currentColor;
  opacity: 0.55;
}
.blend__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.5rem;
  letter-spacing: -0.015em;
  line-height: 1.05;
  margin: 0;
  color: var(--color-ink-deep);
}
.blend__goal {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.9375rem;
  line-height: 1.4;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 28ch;
  min-height: calc(2 * 1.4em);
}

.blend__meta {
  margin: var(--space-3) 0 0;
  padding: var(--space-4) 0 0;
  border-top: 1px solid var(--color-border-cream);
  display: grid;
  gap: var(--space-3);
}
.blend__meta > div { display: grid; gap: 2px; }
.blend__meta dt {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-ink-soft);
}
.blend__meta dd {
  margin: 0;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-ink-deep);
  min-height: calc(2 * 1.5em);
}
.blend__meta dd.is-tight { min-height: 0; }

/* Feeling-first bullet list inside the meta block */
.blend__meta-feeling dd { min-height: 0; }
.blend__meta-feeling ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 4px;
}
.blend__meta-feeling li {
  position: relative;
  padding-left: 14px;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-ink-deep);
}
.blend__meta-feeling li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.55em;
  width: 6px;
  height: 1px;
  background: var(--color-accent);
}

.blend__foot {
  margin-top: auto;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border-cream);
  display: grid;
  gap: var(--space-3);
}
.blend__price {
  font-family: var(--font-serif);
  font-size: 1.75rem;
  font-weight: 500;
  color: var(--color-accent);
  margin: 0;
  line-height: 1;
  letter-spacing: -0.01em;
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
}
.blend__price span {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-soft);
}
.blend__cta {
  width: 100%;
  justify-content: center;
  padding: 12px 18px;
  min-height: 44px;
  font-size: 0.6875rem;
  letter-spacing: 0.2em;
}

.blends__note {
  margin: var(--space-9) auto 0;
  max-width: 64ch;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.04em;
  color: var(--color-ink-soft);
  line-height: 1.7;
}

/* =========================================================================
   §4 — Add-ons (deep wine)
   Two elevated cards. Quiet "optional add-on" eyebrow, bullet list, price.
   ========================================================================= */
.addons__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: end;
  margin-bottom: var(--space-9);
}
@media (min-width: 900px) {
  .addons__head { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
}

.addons__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}
@media (min-width: 800px) {
  .addons__grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-7); }
}

.addons__more {
  margin: var(--space-8) 0 0;
  text-align: center;
}
.addons__more-link {
  display: inline-flex;
  align-items: center;
  gap: 0.6em;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream);
  text-decoration: none;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--color-border-deep);
  transition: color 220ms ease-out, border-color 220ms ease-out;
}
.addons__more-link .arrow {
  display: inline-block;
  transition: transform 280ms cubic-bezier(0.22, 1, 0.36, 1);
}
.addons__more-link:hover,
.addons__more-link:focus-visible {
  color: var(--color-accent-bright, var(--color-accent));
  border-bottom-color: currentColor;
}
.addons__more-link:hover .arrow,
.addons__more-link:focus-visible .arrow {
  transform: translateX(4px);
}

.addon {
  background: var(--color-surface-deep);
  color: var(--color-ink-cream);
  border: 1px solid var(--color-border-deep);
  border-radius: var(--radius-md);
  padding: var(--space-8) var(--space-7);
  display: grid;
  gap: var(--space-4);
  position: relative;
}
.addon__art {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  aspect-ratio: 4 / 3;
  margin: 0 0 var(--space-2);
  background: var(--color-bg-ivory);
  border-radius: var(--radius-md);
  overflow: hidden;
}
.addon__art-img {
  display: block;
  width: auto;
  height: auto;
  max-width: 36%;
  max-height: 72%;
  object-fit: contain;
  margin: 0 auto;
  filter: saturate(1.18) contrast(1.06);
}
.addon::before {
  content: "";
  position: absolute;
  top: 0; left: var(--space-7);
  width: 36px; height: 2px;
  background: var(--color-accent-bright);
}
.addon__tag {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-accent-bright);
  margin: 0;
}
.addon__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.875rem, 3vw + 0.5rem, 2.5rem);
  letter-spacing: -0.015em;
  line-height: 1.05;
  margin: 0;
  color: var(--color-ink-cream);
}
.addon__desc {
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-cream-mute);
  margin: 0;
  max-width: 48ch;
}
.addon__benefits {
  list-style: none;
  margin: 0;
  padding: var(--space-3) 0 0;
  border-top: 1px solid var(--color-border-deep);
  display: grid;
  gap: var(--space-2);
}
.addon__benefits li {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-ink-cream);
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.addon__benefits li::before {
  content: "";
  width: 12px; height: 1px;
  background: var(--color-accent);
}
.addon__foot {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
  align-items: center;
  margin-top: var(--space-3);
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-deep);
}
@media (min-width: 600px) {
  .addon__foot { grid-template-columns: auto 1fr; gap: var(--space-7); }
}
.addon__price {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.875rem;
  color: var(--color-accent-bright);
  margin: 0;
  line-height: 1;
  letter-spacing: -0.01em;
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
}
.addon__price span {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream-mute);
}
.addon__cta { justify-self: start; }
@media (min-width: 600px) { .addon__cta { justify-self: end; } }

/* Vitamin D lab-required note — quiet, reassuring, framed as precise care. */
.addon__note {
  display: flex;
  gap: var(--space-3);
  align-items: flex-start;
  margin: 0;
  padding: var(--space-3) var(--space-4);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.5;
  color: var(--color-ink-cream-mute);
  background: rgba(243, 232, 216, 0.05);
  border: 1px solid var(--color-border-deep);
  border-radius: var(--radius-sm, 8px);
}
.addon__note-icon {
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  margin-top: 1px;
  color: var(--color-accent-bright);
}
.addon__note-icon svg { width: 100%; height: 100%; display: block; }

/* --- Boosters & Add-ons carousel ------------------------------------------
   Lives on the light cream section, so controls are ink-toned (the packages
   carousel reuses the same JS but cream-toned controls). Responsive slide
   widths: one card + peek on mobile, two on tablet, three on desktop. */
.addons__carousel { position: relative; }
.addons__viewport { overflow: hidden; }
.addons__track {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  gap: clamp(16px, 2.5vw, 32px);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.addons__track::-webkit-scrollbar { display: none; }
.addons__slide {
  flex: 0 0 86%;
  scroll-snap-align: center;
  min-width: 0;
}
@media (min-width: 640px) {
  .addons__slide { flex-basis: calc((100% - clamp(16px, 2.5vw, 32px)) / 2); }
}
@media (min-width: 1024px) {
  .addons__slide { flex-basis: calc((100% - 2 * clamp(16px, 2.5vw, 32px)) / 3); }
}
/* Equal-height cards with the CTA pinned to the bottom edge of each. */
.addons__slide .addon {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.addons__slide .addon__foot { margin-top: auto; }

.addons__controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-5);
  margin-top: var(--space-7);
}
.addons__nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 999px;
  border: 1px solid var(--color-border-cream, rgba(46, 21, 23, 0.18));
  background: transparent;
  color: var(--color-ink-deep, #2e1517);
  font-size: 1.125rem;
  cursor: pointer;
  flex: 0 0 auto;
  transition: background 180ms ease-out, border-color 180ms ease-out, transform 180ms ease-out;
}
.addons__nav:hover,
.addons__nav:focus-visible {
  background: rgba(46, 21, 23, 0.06);
  border-color: var(--color-accent);
}
.addons__nav:active { transform: scale(0.94); }
.addons__nav:disabled { opacity: 0.3; cursor: default; }
.addons__dots {
  display: flex;
  align-items: center;
  gap: 10px;
}
.addons__dot {
  width: 9px;
  height: 9px;
  border-radius: 999px;
  border: 1px solid rgba(46, 21, 23, 0.3);
  background: transparent;
  padding: 0;
  cursor: pointer;
  transition: background 180ms ease-out, border-color 180ms ease-out, width 180ms ease-out;
}
.addons__dot[aria-current="true"] {
  width: 24px;
  background: var(--color-accent);
  border-color: var(--color-accent);
}
@media (prefers-reduced-motion: reduce) {
  .addons__track { scroll-behavior: auto; }
  .addons__nav:active { transform: none; }
}

/* =========================================================================
   §5 — Quiz mockup
   2-col split. Left: intro + CTA. Right: mock first-question card.
   ========================================================================= */
.quiz {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  align-items: center;
}
@media (min-width: 900px) {
  .quiz { grid-template-columns: 0.95fr 1.05fr; gap: var(--space-10); }
}
.quiz__intro { display: grid; gap: var(--space-4); }
.quiz__intro .h-section em { color: var(--color-accent); }
.quiz__cta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-5);
  align-items: center;
  margin-top: var(--space-5);
}

/* Medical / legal disclaimer — quiet, italic, no-frame paragraph beneath
   the quiz CTA. Reuses the established ivory section ink hierarchy. */
.quiz__disclaimer {
  /* Full-width note sitting below the quiz (spans both columns on desktop). */
  grid-column: 1 / -1;
  margin: var(--space-7) auto 0;
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.6;
  letter-spacing: 0.005em;
  color: var(--color-ink-soft);
  max-width: 68ch;
}
.quiz__disclaimer strong {
  font-weight: 600;
  color: var(--color-ink-deep);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-size: 0.625rem;
  display: block;
  margin-bottom: var(--space-2);
}
.quiz__disclaimer em {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--color-ink-deep);
}

.quiz__card {
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  border-radius: var(--radius-md);
  padding: var(--space-7);
  box-shadow: 0 40px 80px -40px rgba(46, 21, 23, 0.55);
  display: grid;
  gap: var(--space-5);
  position: relative;
  overflow: hidden;
}
.quiz__card::after {
  content: "";
  position: absolute;
  top: -40%;
  right: -20%;
  width: 60%;
  height: 80%;
  background: radial-gradient(ellipse, rgba(216, 131, 118, 0.18) 0%, rgba(216, 131, 118, 0) 60%);
  pointer-events: none;
}
.quiz__progress {
  display: flex;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}
.quiz__progress li {
  flex: 1;
  height: 2px;
  background: var(--color-border-deep);
  border-radius: 1px;
}
.quiz__progress li.is-active { background: var(--color-accent-bright); }

.quiz__qmeta {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream-mute);
  margin: 0;
}
.quiz__q {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.625rem;
  line-height: 1.2;
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
  margin: 0;
}
.quiz__q::before {
  content: "";
  display: inline-block;
  width: 28px;
  height: 1px;
  background: var(--color-accent-bright);
  vertical-align: middle;
  margin-right: var(--space-3);
  transform: translateY(-6px);
}
.quiz__opts {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--space-2);
  position: relative;
  z-index: 2;
}
.quiz__opt {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  border: 1px solid var(--color-border-deep);
  border-radius: var(--radius-sm);
  background: rgba(245, 237, 221, 0.025);
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  color: var(--color-ink-cream-mute);
  cursor: pointer;
  transition: border-color var(--duration-micro) var(--ease-settle),
              color var(--duration-micro) var(--ease-settle),
              background var(--duration-micro) var(--ease-settle);
}
.quiz__opt:hover {
  border-color: var(--color-accent-bright);
  color: var(--color-ink-cream);
}
.quiz__opt.is-selected {
  border-color: var(--color-accent-bright);
  color: var(--color-ink-cream);
  background: rgba(216, 131, 118, 0.10);
}
.quiz__radio {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1px solid var(--color-ink-cream-mute);
  flex-shrink: 0;
  position: relative;
}
.quiz__opt.is-selected .quiz__radio {
  border-color: var(--color-accent-bright);
  background:
    radial-gradient(circle, var(--color-accent-bright) 0 5px, transparent 5px 100%);
}

/* =========================================================================
   §7 — Mobile Service Area (deep wine, two-column)
   Editorial content on the left (eyebrow, headline, lede, 6-card
   "where we come" grid, "Proudly serving" locale, CTA + trust line).
   Glowing service-area map on the right, with a centred caption.
   Stacks to one column under 1024px (map drops below content).
   ========================================================================= */
.service-area { padding-block: clamp(40px, 5vw, 64px); }
/* Desktop: keep the whole block within a single viewport — padding scales
   with viewport height so the section never spills past one screen of scroll. */
@media (min-width: 1024px) {
  .service-area { padding-block: clamp(28px, 4vh, 64px); }
}

.service-area__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  align-items: start;
}
@media (min-width: 1024px) {
  .service-area { min-height: clamp(620px, 88vh, 900px); }
  .service-area .container.service-area__inner {
    max-width: none;
    padding-inline-end: 0;
    grid-template-columns: minmax(440px, 560px) 1fr;
    gap: clamp(var(--space-7), 4vw, var(--space-9));
    align-items: stretch;
    min-height: inherit;
  }
  .service-area__content {
    align-self: center;
    gap: var(--space-4);
  }
}

.service-area__content { display: grid; gap: var(--space-5); }
.service-area__title    { max-width: 14ch; margin-top: var(--space-2); }
.service-area__lede     { max-width: 44ch; }

.service-area__cards {
  list-style: none;
  margin: var(--space-3) 0 0;
  padding: 0;
  display: grid;
  gap: var(--space-3);
  grid-template-columns: 1fr;
}
@media (min-width: 520px)  { .service-area__cards { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .service-area__cards { grid-template-columns: repeat(3, 1fr); } }

.sa-card {
  background: var(--color-surface-deep);
  border: 1px solid var(--color-border-deep);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  display: grid;
  gap: 6px;
  align-content: start;
}
.sa-card__icon {
  display: inline-grid;
  place-items: center;
  width: 22px;
  height: 22px;
  color: var(--color-accent-line);
  margin-bottom: 2px;
}
.sa-card__icon svg { width: 100%; height: 100%; display: block; }
.sa-card__label {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1rem;
  color: var(--color-ink-cream);
  margin: 0;
  line-height: 1.2;
}
.sa-card__body {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.45;
  color: var(--color-ink-cream-mute);
  margin: 0;
}

.service-area__locale {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border: 1px solid var(--color-border-deep);
  border-radius: var(--radius-md);
  background: linear-gradient(180deg, rgba(58, 30, 32, 0.55), rgba(46, 21, 23, 0.85));
  margin-top: 0;
}
.service-area__pin {
  width: 22px;
  height: 22px;
  color: var(--color-accent-line);
  margin-top: 2px;
}
.service-area__pin svg { width: 100%; height: 100%; display: block; }
.service-area__locale-body { min-width: 0; }
.service-area__region {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.125rem;
  color: var(--color-ink-cream);
  margin: 2px 0 var(--space-2);
  line-height: 1.2;
}
.service-area__cities {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-ink-cream-mute);
  margin: 0 0 var(--space-2);
  max-width: 56ch;
}
.service-area__inquire {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-accent-bright);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.service-area__inquire:hover { color: var(--color-ink-cream); }

.service-area__foot {
  display: grid;
  gap: var(--space-4);
  margin-top: 0;
}
@media (min-width: 720px) {
  .service-area__foot {
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: var(--space-6);
  }
}
.service-area__trust {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-ink-cream-mute);
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  line-height: 1.5;
}
.service-area__trust em {
  color: var(--color-ink-cream);
  font-style: italic;
}
.service-area__shield {
  width: 22px;
  height: 22px;
  color: var(--color-accent-line);
  flex-shrink: 0;
}
.service-area__shield svg { width: 100%; height: 100%; display: block; }

.service-area__map {
  margin: 0;
  display: grid;
  gap: var(--space-4);
  justify-items: center;
  position: relative;
}
/* Aspect-ratio frame keeps the whole map visible (no cover-crop) and
   gives overlay city pins a stable percentage coordinate system. */
.service-area__map-frame {
  position: relative;
  width: 100%;
  aspect-ratio: 1448 / 1086;
  overflow: hidden;
}
.service-area__map img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
  border-radius: 0;
  box-shadow: none;
  /* Feather the map plate so its edges dissolve into the section bg —
     reads as a painted region of the page, not an image card. */
  -webkit-mask-image: radial-gradient(ellipse 78% 82% at 50% 48%, #000 48%, rgba(0,0,0,0.78) 70%, transparent 100%);
          mask-image: radial-gradient(ellipse 78% 82% at 50% 48%, #000 48%, rgba(0,0,0,0.78) 70%, transparent 100%);
  mix-blend-mode: lighten;
  opacity: 0.95;
}
/* A warm amber wash painted under the map blends its cool plate into the deep maroon section
   and gives the topography a candlelit, atmospheric depth instead of card-on-bg flatness. */
.service-area__map-frame::before {
  content: "";
  position: absolute;
  inset: -8% -6%;
  background:
    radial-gradient(ellipse 58% 62% at 52% 50%, rgba(245, 184, 106, 0.10) 0%, transparent 70%),
    radial-gradient(ellipse 82% 88% at 50% 50%, rgba(72, 28, 32, 0.55) 40%, transparent 100%);
  pointer-events: none;
  z-index: 0;
}
.service-area__map-frame { isolation: isolate; }
@media (min-width: 1024px) {
  .service-area__map {
    align-self: center;
    display: grid;
    gap: var(--space-4);
    padding-inline-end: clamp(var(--space-5), 3vw, var(--space-7));
  }
  .service-area__map-frame {
    max-width: min(100%, 760px);
    margin-inline: auto;
  }
}

/* Overlay city dots — glowing amber markers that sit over the map's baked-in
   city labels to highlight the served cities. Positioned with --x / --y as %
   of the natural 1448×1086 image. Text-free on purpose: the names live in the
   map art and the served-areas list, so a dot never doubles a baked-in label. */
.sa-pin {
  position: absolute;
  left: var(--x);
  top: var(--y);
  transform: translate(-50%, -50%);
  pointer-events: none;
}
.sa-pin__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #f5b86a;
  box-shadow:
    0 0 0 1.5px rgba(245, 184, 106, 0.35),
    0 0 10px 2px rgba(245, 184, 106, 0.55),
    0 0 22px 6px rgba(245, 184, 106, 0.25);
}
@media (min-width: 1280px) {
  .sa-pin__dot { width: 7px; height: 7px; }
}

/* Major cities — bigger, brighter dot with a soft pulse, so the anchor cities
   (Toronto, Hamilton, Niagara, Lambton Shores, …) clearly stand out from the
   secondary markers and the dim baked-in city glow. */
.sa-pin--major { z-index: 2; }
.sa-pin--major .sa-pin__dot {
  position: relative;
  width: 12px;
  height: 12px;
  background: #ffd27a;
  box-shadow:
    0 0 0 2px rgba(245, 184, 106, 0.45),
    0 0 16px 4px rgba(245, 184, 106, 0.75),
    0 0 34px 12px rgba(245, 184, 106, 0.35);
}
.sa-pin--major .sa-pin__dot::after {
  content: "";
  position: absolute;
  inset: -7px;
  border-radius: 50%;
  border: 1.5px solid rgba(245, 184, 106, 0.55);
  animation: saPulse 2.8s ease-out infinite;
}
@keyframes saPulse {
  0%   { transform: scale(0.5); opacity: 0.9; }
  70%  { opacity: 0; }
  100% { transform: scale(1.9); opacity: 0; }
}
@media (min-width: 1280px) {
  .sa-pin--major .sa-pin__dot { width: 14px; height: 14px; }
}
@media (max-width: 700px) {
  .sa-pin--major .sa-pin__dot { width: 10px; height: 10px; }
}
@media (prefers-reduced-motion: reduce) {
  .sa-pin--major .sa-pin__dot::after { animation: none; opacity: 0; }
}
.service-area__map-caption {
  display: grid;
  gap: 4px;
  justify-items: center;
  text-align: center;
}
/* Caption sits in normal flow beneath the map frame at every width — never
   overlaid on the topography (it used to collide with the southern cities). */
.service-area__map-caption {
  margin-top: calc(var(--space-4) * -1);
  z-index: 1;
}
.service-area__map-caption .eyebrow { color: var(--color-ink-cream-mute); }
.service-area__map-sub {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1rem;
  color: var(--color-ink-cream);
  letter-spacing: 0.01em;
}
.service-area__map-note {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-style: italic;
  letter-spacing: 0.01em;
  color: var(--color-ink-cream-mute);
  opacity: 0.85;
}
.service-area__map-caption::after {
  content: "";
  width: clamp(120px, 18vw, 200px);
  height: 1px;
  background: var(--color-accent-line);
  opacity: 0.5;
  margin-top: var(--space-2);
}

/* =========================================================================
   §8 — RN-led safety (ivory)
   4-up badge grid + an italic founder quote.
   ========================================================================= */
.safety { display: grid; gap: var(--space-9); }
.safety__head {
  display: grid;
  gap: var(--space-5);
  max-width: 820px;
}
.safety__head .h-section em { color: var(--color-accent); }
.section--deep .safety__head .h-section em { color: var(--color-accent-bright); }
.safety__lede { max-width: 56ch; }
.section--deep .safety__quote p { color: var(--color-ink-cream); }
.section--deep .safety__quote cite { color: var(--color-ink-cream-mute); }

.safety__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
@media (min-width: 600px) { .safety__grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .safety__grid { grid-template-columns: repeat(4, 1fr); gap: var(--space-5); } }

.safety__card {
  background: var(--color-bg-cream);
  border: 1px solid var(--color-border-cream);
  padding: var(--space-7);
  display: grid;
  gap: var(--space-3);
  align-content: start;
  transition: transform var(--duration-component) var(--ease-settle),
              box-shadow var(--duration-component) var(--ease-settle);
}
.safety__card:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 40px -24px rgba(46, 21, 23, 0.3);
}
.safety__sym {
  font-family: var(--font-serif);
  font-size: 1.5rem;
  font-weight: 500;
  color: var(--color-accent);
  line-height: 1;
  margin: 0 0 var(--space-2);
}
.safety__name {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-ink-deep);
  margin: 0;
}
.safety__desc {
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 32ch;
}

.safety__quote {
  margin: 0;
  max-width: 820px;
  padding-left: var(--space-7);
  border-left: 2px solid var(--color-accent);
}
.safety__quote p {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.375rem, 2vw + 0.5rem, 1.75rem);
  line-height: 1.35;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin: 0;
  text-wrap: balance;
}
.safety__quote p::before {
  content: "“";
  color: var(--color-accent);
  font-style: normal;
  font-weight: 500;
  margin-right: 0.05em;
}
.safety__quote cite {
  display: block;
  margin-top: var(--space-4);
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
}

/* =========================================================================
   Section-head shared (eyebrow lede above headline) — used in §4 addons,
   §6 process, §8 safety. .lede on deep needs cream-mute color.
   ========================================================================= */
.section--deep .addons__head .lede { color: var(--color-ink-cream-mute); }


/* =========================================================================
   === ABOUT PAGE ===========================================================
   Beat: Authority + Belonging. Six sections, no image plate in the hero,
   text-led. Placeholders for founder portraits ship until real photos
   land in ../img/founders/.
   ========================================================================= */

/* §1 — About hero (deep wine, no image plate) -------------------------- */
.about-hero {
  position: relative;
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  padding-block: clamp(160px, 22vh + 60px, 240px) clamp(120px, 16vh + 40px, 180px);
  overflow: hidden;
  isolation: isolate;
}
.about-hero::after {
  /* Long, multi-stop bleed so deep wine dissolves into §2 cream without
     a visible band. Intermediate maroon tones bridge the two colours. */
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: clamp(160px, 22vh, 260px);
  background: linear-gradient(
    to bottom,
    rgba(46,21,23,0)    0%,
    rgba(46,21,23,0.35) 28%,
    rgba(110,52,52,0.55) 56%,
    rgba(214,188,170,0.85) 82%,
    var(--color-bg-cream) 100%
  );
  z-index: 2;
  pointer-events: none;
}
.about-hero__inner {
  position: relative;
  z-index: 3;
  max-width: 1120px;
  margin-inline: auto;
  padding-inline: var(--gutter-mobile);
}
.about-hero__content {
  max-width: 720px;
  display: grid;
  gap: var(--space-5);
}
.about-hero__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: var(--font-size-3xl);
  line-height: 1.04;
  letter-spacing: -0.02em;
  text-wrap: balance;
  margin: 0;
  color: var(--color-ink-cream);
}
.about-hero__headline em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.about-hero__sub {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.25rem, 1.6vw + 0.5rem, 1.625rem);
  line-height: 1.35;
  color: var(--color-ink-cream-mute);
  max-width: 36ch;
  margin: 0;
}
.about-hero__anchor {
  margin: 0;
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: clamp(0.9375rem, 0.5vw + 0.78rem, 1.0625rem);
  line-height: 1.5;
  letter-spacing: 0.005em;
  color: var(--color-ink-cream);
  max-width: 52ch;
}
.about-hero__anchor .dash {
  color: var(--color-accent-line);
  margin: 0 0.45em;
  font-style: normal;
}

.about-hero__signoff {
  margin-top: var(--space-5);
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border-deep);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  max-width: 640px;
}
.about-hero__signoff .dash { color: var(--color-accent-line); margin: 0 4px; }

/* §1b — Founders portrait, feathered into the deep wine.
   Mask is a radial gradient so every edge is soft — no rectangle,
   no border, no hard line where the photo meets the background.
   Sits behind the editorial content on desktop and ghosts behind
   the headline on mobile so the letter still reads first. */
.about-hero__portrait {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  display: flex;
  justify-content: flex-end;
  align-items: stretch;
  overflow: hidden;
}
.about-hero__portrait img {
  /* Fill the full height of the hero block; crop with object-fit so the
     faces (near the top of the source frame) stay in shot and the legs/floor
     fall away below. */
  height: 100%;
  width: clamp(380px, 50vw, 680px);
  object-fit: cover;
  object-position: 50% 12%;
  margin-right: clamp(-32px, -1.5vw, 0px);
  /* Two-layer mask, intersected: feather the LEFT edge into the text column
     and feather TOP + BOTTOM into the wine — no rectangular plate, but the
     faces in the right-centre stay fully solid and legible. */
  -webkit-mask-image:
    linear-gradient(to right, transparent 0%, rgba(0,0,0,0.22) 14%, #000 44%),
    linear-gradient(to bottom, transparent 0%, #000 13%, #000 82%, transparent 100%);
  -webkit-mask-composite: source-in;
          mask-image:
    linear-gradient(to right, transparent 0%, rgba(0,0,0,0.22) 14%, #000 44%),
    linear-gradient(to bottom, transparent 0%, #000 13%, #000 82%, transparent 100%);
          mask-composite: intersect;
  /* Keep the photo in true colour so the founders' faces actually read —
     just a hair of warmth to sit it in the wine palette. */
  filter: saturate(0.98) contrast(1) brightness(0.99);
  opacity: 0;
  transform: translate3d(0, 8px, 0) scale(1.012);
  animation: aboutHeroPortraitIn 1600ms cubic-bezier(.2,.7,.2,1) 120ms forwards;
}
/* Second blend pass: warm wine wash bleeding from the left of the
   portrait so the photo doesn't read as a separate plate. */
.about-hero__portrait::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to right,
    var(--color-bg-deep) 0%,
    rgba(46,21,23,0.92) 26%,
    rgba(46,21,23,0.55) 46%,
    rgba(46,21,23,0.18) 64%,
    rgba(46,21,23,0) 82%
  );
  z-index: 2;
  pointer-events: none;
}
/* Keep the editorial text above the image stack. */
.about-hero__inner { z-index: 3; }
.about-hero .hero__nmark { z-index: 3; }

@keyframes aboutHeroPortraitIn {
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@media (max-width: 860px) {
  /* On mobile the portrait becomes a clear full-width band pinned to the top
     of the hero — faces visible at full strength — and the letter drops below
     it. The band feathers into the wine at its base; no hard edge. */
  .about-hero { padding-top: 0; }
  .about-hero__portrait {
    inset: 0 0 auto 0;
    height: clamp(300px, 50vh, 420px);
    justify-content: center;
    align-items: flex-start;
  }
  .about-hero__portrait img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: 50% 16%;
    margin-right: 0;
    filter: saturate(0.98) contrast(1) brightness(1);
    /* full-bleed sides, feather only the bottom into the wine */
    -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 66%, transparent 100%);
    -webkit-mask-composite: source-over;
            mask-image: linear-gradient(to bottom, #000 0%, #000 66%, transparent 100%);
            mask-composite: add;
    animation-name: aboutHeroPortraitInMobile;
  }
  .about-hero__portrait::before {
    background: linear-gradient(
      to bottom,
      rgba(46,21,23,0) 42%,
      rgba(46,21,23,0.55) 78%,
      var(--color-bg-deep) 100%
    );
  }
  .about-hero__content {
    padding-top: clamp(284px, 48vh, 400px);
  }
  @keyframes aboutHeroPortraitInMobile {
    to {
      opacity: 1;
      transform: translate3d(0, 0, 0) scale(1);
    }
  }
}

@media (prefers-reduced-motion: reduce) {
  .about-hero__portrait img {
    animation: none;
    opacity: 1;
    transform: none;
  }
  @media (max-width: 860px) {
    .about-hero__portrait img { opacity: 1; }
  }
}


/* §2 — Brand story (cream) --------------------------------------------- */
.about-story {
  max-width: 640px;
  margin-inline: auto;
  padding-block: var(--space-2);
  display: grid;
  gap: var(--space-5);
}
.about-story .eyebrow--rule {
  margin-bottom: var(--space-3);
  color: var(--color-ink-soft);
}
.about-story__lede {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 1.8vw + 0.6rem, 1.875rem);
  line-height: 1.25;
  letter-spacing: -0.01em;
  text-wrap: balance;
  margin: 0 0 var(--space-3);
  color: var(--color-ink-deep);
}
.about-story__lede em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.about-story p:not(.about-story__lede):not(.eyebrow) {
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.65;
  color: var(--color-ink-deep);
  margin: 0;
  max-width: 60ch;
}
.about-story p em {
  font-style: italic;
  /* Darker coral to meet WCAG AA 4.5:1 on cream — display ledes keep --color-accent. */
  color: #8A4538;
  font-weight: 500;
}

/* Mobile-only: editorial recap heroes (.about-story inside .section--deep)
   have long magazine-style H1s that overflow the 390px viewport at the
   default .h-section size. Scale down on narrow widths and switch to
   text-wrap: pretty so balance doesn't fight overflow-wrap. */
@media (max-width: 600px) {
  .section--deep .about-story .h-section,
  .section--espresso .about-story .h-section {
    font-size: clamp(1.625rem, 5.5vw + 0.5rem, 2.125rem);
    line-height: 1.15;
    text-wrap: pretty;
    word-break: normal;
  }
}

/* Dark-section overrides for .about-story body copy.
   Without these, .about-story p:not(...) (specificity 0,0,3) wins over
   .section--deep .lede (0,0,2) and renders body text invisible on deep wine. */
.section--deep .about-story p:not(.about-story__lede):not(.eyebrow),
.section--espresso .about-story p:not(.about-story__lede):not(.eyebrow) {
  color: var(--color-ink-cream);
}
.section--deep .about-story .eyebrow--rule,
.section--espresso .about-story .eyebrow--rule {
  color: var(--color-ink-cream-mute);
}
.section--deep .about-story p em,
.section--espresso .about-story p em {
  /* Brighter coral for AA contrast on deep wine. */
  color: var(--color-accent-bright, #D88376);
}
.section--deep .about-story a,
.section--espresso .about-story a {
  color: var(--color-ink-cream);
  text-decoration-color: var(--color-accent-bright, #D88376);
}


/* §3 — Founders (ivory) ------------------------------------------------- */
.founders__head {
  text-align: center;
  margin-bottom: var(--space-8);
}
.founders__head .eyebrow--rule {
  display: inline-flex;
  color: var(--color-ink-soft);
}
.founders {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  max-width: 360px;
  justify-content: center;
}
@media (min-width: 800px) {
  .founders {
    grid-template-columns: repeat(2, minmax(0, 400px));
    gap: var(--space-9);
    max-width: 860px;
    justify-content: center;
  }
}
.founder-card {
  display: grid;
  gap: var(--space-5);
  width: 100%;
}
.founder-card__portrait {
  aspect-ratio: 4 / 5;
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md, 4px);
  overflow: hidden;
  position: relative;
  display: grid;
  place-items: center;
}
.founder-card__portrait img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 30%;
}
.founder-card__placeholder {
  display: grid;
  gap: var(--space-3);
  padding: var(--space-6);
  text-align: center;
  max-width: 32ch;
  margin: 0 auto;
}
.founder-card__placeholder-tag {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-soft);
}
.founder-card__placeholder-name {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.5rem;
  line-height: 1.2;
  color: var(--color-ink-deep);
}
.founder-card__placeholder-note {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
}
.founder-card__body {
  display: grid;
  gap: var(--space-2);
  padding-inline: var(--space-1);
}
.founder-card__body .eyebrow {
  color: var(--color-ink-soft);
}
.founder-card__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.75rem;
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
}
.founder-card__name em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.founder-card__bio {
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 36ch;
}

.about-np {
  max-width: 640px;
  margin: var(--space-9) auto 0;
  padding-top: var(--space-6);
  border-top: 1px solid var(--color-border-cream);
  text-align: center;
  display: grid;
  gap: var(--space-3);
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
}
.about-np .eyebrow {
  display: inline-block;
  color: var(--color-ink-soft);
}


/* §4 — Three pillars (deep wine) --------------------------------------- */
.pillars__head {
  max-width: 640px;
  margin: 0 auto var(--space-8);
  text-align: left;
  display: grid;
  gap: var(--space-3);
}
.pillars__head .eyebrow--rule { color: var(--color-ink-cream-mute); }
.pillars__head .h-section { margin: 0; color: var(--color-ink-cream); }
.pillars__head .h-section em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.pillars {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  max-width: 880px;
  display: grid;
  gap: 0;
}
.pillar {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  padding-block: var(--space-7);
  border-top: 1px solid var(--color-border-deep);
}
.pillar:last-child { border-bottom: 1px solid var(--color-border-deep); }
@media (min-width: 800px) {
  .pillar {
    grid-template-columns: 200px 1fr;
    gap: var(--space-8);
    align-items: start;
  }
}
.pillar .eyebrow--rule {
  color: var(--color-ink-cream);
  font-size: 0.75rem;
  letter-spacing: 0.24em;
}
.pillar__body {
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.65;
  color: var(--color-ink-cream-mute);
  margin: 0;
  max-width: 60ch;
}


/* §5 — Editorial photo (ivory) ----------------------------------------- */
.about-photo-section { padding-block: var(--space-9); }
.about-photo {
  max-width: 1120px;
  margin: 0 auto;
  padding-inline: var(--gutter-mobile);
  display: grid;
  gap: var(--space-4);
}
.about-photo picture,
.about-photo img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  border-radius: var(--radius-md, 4px);
}
/* Portrait variant: a tall phone photo (e.g. a booth shot) reads as an
   editorial plate — capped width, natural ratio, no crop. */
.about-photo--portrait { max-width: 600px; }
.about-photo--portrait picture,
.about-photo--portrait img {
  aspect-ratio: auto;
  object-fit: contain;
}
/* Inline story figure: a portrait phone photo dropped beside body copy inside
   a 640px .about-story column. Capped narrow and centered so it reads as an
   editorial inset, not a full-bleed plate. */
.story-figure {
  margin: 0;
  display: grid;
  gap: var(--space-3);
  justify-items: center;
}
.story-figure picture,
.story-figure img {
  display: block;
  width: 100%;
  max-width: 340px;
  height: auto;
  border-radius: var(--radius-md, 4px);
  box-shadow: 0 18px 50px -22px rgba(0, 0, 0, 0.5);
}
.story-figure figcaption {
  max-width: 340px;
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.45;
  text-align: center;
  color: var(--color-ink-muted);
}

/* Vertical reel: capped width, intrinsic 9:16 ratio drives the height. No
   object-fit — the video and poster are already 9:16, so cropping would only
   introduce distortion. */
.reel-video {
  display: block;
  width: 100%;
  max-width: 360px;
  height: auto;
  background: var(--color-ink, #1a1a1a);
  border-radius: var(--radius-md, 4px);
  box-shadow: 0 18px 50px -20px rgba(0, 0, 0, 0.55);
}

/* §5 "Why it works at events" paired with the vertical reel on the right.
   Scoped to .why-with-video so the shared .standards layout is untouched
   elsewhere. The three points become a left-aligned vertical list beside the
   tall 9:16 video. */
.why-with-video__layout { display: grid; gap: var(--space-7); }
.why-with-video .standards__head { text-align: left; margin-bottom: var(--space-6); }
.why-with-video .standards__title { margin-inline: 0; max-width: 28ch; }
.why-with-video .standards__grid {
  grid-template-columns: 1fr;
  grid-template-rows: none;
  gap: 0;
  max-width: none;
  border-top: 1px solid var(--color-border-deep);
}
.why-with-video .standard {
  grid-template-columns: 28px 1fr;
  grid-template-rows: auto auto;
  grid-row: auto;
  column-gap: var(--space-4);
  row-gap: 6px;
  text-align: left;
  justify-items: stretch;
  align-items: start;
  padding-block: var(--space-5);
  border-bottom: 1px solid var(--color-border-deep);
}
.why-with-video .standard__icon {
  grid-row: 1 / span 2;
  grid-column: 1;
  width: 28px;
  height: 28px;
  align-self: start;
  margin: 2px 0 0;
}
.why-with-video .standard__label {
  grid-row: 1;
  grid-column: 2;
  text-align: left;
  align-self: start;
  min-height: 0;
  max-width: none;
  display: block;
}
.why-with-video .standard__body {
  grid-row: 2;
  grid-column: 2;
  text-align: left;
  max-width: none;
  align-self: start;
}
.why-with-video__media { display: flex; justify-content: center; }
@media (min-width: 880px) {
  .why-with-video__layout {
    grid-template-columns: 1fr minmax(300px, 360px);
    align-items: center;
    gap: var(--space-9);
  }
}
.about-photo__caption {
  max-width: 640px;
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--color-ink-muted);
  display: flex;
  gap: var(--space-3);
  align-items: baseline;
}
.about-photo__caption .dash {
  color: var(--color-accent);
  font-style: normal;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  flex-shrink: 0;
}
.about-photo__occasions {
  max-width: 640px;
  margin: var(--space-3) 0 0;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border-cream);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
}
.about-photo__occasions .dot {
  color: var(--color-accent);
  margin: 0 6px;
}

/* Empower Her recap — text-beside-photo split (portrait, never cropped).
   Photo sits next to the prose, not stacked under it; sides alternate. */
.recap-split {
  max-width: 1120px;
  margin: 0 auto;
  display: grid;
  gap: var(--space-6);
}
.recap-split .about-story {
  max-width: none;
  margin-inline: 0;
}
.recap-split__photo {
  margin: 0;
  display: grid;
  gap: var(--space-4);
  max-width: 380px;
  justify-self: center;
}
.recap-split__photo figure { margin: 0; }
.recap-split__photo picture,
.recap-split__photo img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--radius-md, 4px);
}
@media (min-width: 860px) {
  .recap-split {
    grid-template-columns: 1fr minmax(300px, 360px);
    gap: var(--space-8);
    align-items: center;
  }
  .recap-split__photo { max-width: none; justify-self: end; }
  /* Reverse: photo on the left, prose on the right */
  .recap-split--reverse { grid-template-columns: minmax(300px, 360px) 1fr; }
  .recap-split--reverse .about-story { order: 2; }
  .recap-split--reverse .recap-split__photo { order: 1; justify-self: start; }
}

/* EmpowerHER recap hero — the flyer's own sunburst rebuilt in CSS (its purples,
   no lettering), radiating from behind the flyer, under a near-opaque veil so
   cream copy stays AA and the text holds focus. */
.recap-hero--empower {
  background:
    linear-gradient(150deg, rgba(140, 82, 159, 0.86) 0%, rgba(109, 61, 128, 0.9) 42%, rgba(83, 46, 99, 0.94) 100%),
    repeating-conic-gradient(from 0deg at 72% 34%, #b090c0 0deg 5deg, #7c4894 5deg 10deg);
}
.recap-hero--empower .h-section em { color: #dcc4ec; }
.section--deep.recap-hero--empower .about-story .eyebrow--rule { color: var(--color-ink-cream); }
.section--deep.recap-hero--empower .about-story p em { color: #f2c4b8; }
.recap-hero__photo { position: relative; }
.recap-hero__photo picture {
  position: relative;
  display: block;
  border-radius: var(--radius-md, 4px);
  overflow: hidden;
}
/* Purple veil melts the flyer into the hero so the text holds focus. */
.recap-hero__photo picture::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(140, 82, 159, 0.38), rgba(83, 46, 99, 0.58));
  pointer-events: none;
}
@media (min-width: 860px) {
  .recap-hero__split { grid-template-columns: 1fr minmax(320px, 400px); }
}

/* A small two-up "moments from the day" detail pair */
.recap-pair {
  max-width: 880px;
  margin: var(--space-7) auto 0;
  padding-inline: var(--gutter-mobile);
}
.recap-pair__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-4);
}
.recap-pair img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--radius-md, 4px);
}
.recap-pair .about-photo__caption {
  margin-top: var(--space-4);
}

/* =========================================================================
   About §7.5 — Google Reviews (deep wine, full-bleed)
   Compact one-viewport block: horizontal header row (title + Google
   badge), three cream quote cards, single-line italic foot + CTA.
   Designed to sit fully within the fold — no scroll needed.
   ========================================================================= */
.section.reviews {
  padding-block: var(--space-7);
}
@media (min-width: 900px) {
  .section.reviews { padding-block: var(--space-8); }
}

/* Editorial header — top meta row (eyebrow left, Google badge right),
   then a full-bleed banner title beneath the hairline rule. */
.section.reviews .reviews__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  padding-bottom: var(--space-5);
  margin-bottom: var(--space-6);
  border-bottom: 1px solid rgba(244, 233, 220, 0.14);
}
.reviews__head-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-5);
}
.reviews__head-meta .eyebrow { margin: 0; }
.reviews__title {
  margin: 0;
  max-width: none;
  width: 100%;
  font-size: clamp(2.5rem, 6vw + 0.5rem, 5.25rem);
  line-height: 1.02;
  letter-spacing: -0.025em;
}

/* Google rating badge — cream pill, sits inline under the lede. */
.reviews__badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-4);
  align-self: start;
  margin-top: var(--space-3);
  padding: var(--space-3) var(--space-5) var(--space-3) var(--space-3);
  border-radius: 12px;
  background: var(--color-bg-ivory);
  color: var(--color-ink-deep);
  box-shadow: 0 10px 30px -22px rgba(0, 0, 0, 0.6);
}
.reviews__badge-logo {
  display: inline-grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: #fff;
  flex-shrink: 0;
}
.reviews__badge-logo svg { display: block; width: 26px; height: 26px; }
.reviews__badge-body { display: grid; gap: 2px; line-height: 1; }
.reviews__badge-row { display: inline-flex; align-items: baseline; gap: var(--space-3); }
.reviews__badge-score {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 1.375rem;
  color: var(--color-ink-deep);
  letter-spacing: -0.01em;
}
.reviews__badge-stars {
  color: var(--color-accent);
  letter-spacing: 0.05em;
  font-size: 0.9rem;
}
.reviews__badge-label {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-muted);
}

/* Quote grid — three cream review cards across the container. */
.reviews__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--space-4);
  grid-template-columns: 1fr;
}
@media (min-width: 720px)  { .reviews__grid { grid-template-columns: repeat(3, 1fr); } }

.reviews__quote {
  position: relative;
  display: grid;
  grid-template-rows: auto 1fr auto;
  gap: var(--space-3);
  padding: var(--space-5) var(--space-5) var(--space-4);
  background: var(--color-bg-ivory);
  color: var(--color-ink-deep);
  border-radius: var(--radius-md);
  box-shadow: 0 20px 45px -30px rgba(0, 0, 0, 0.55);
}
.reviews__quote::before {
  content: "\201C";
  position: absolute;
  top: 0.1em;
  left: var(--space-4);
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: clamp(5rem, 7vw, 7rem);
  line-height: 0.7;
  color: var(--color-accent-soft);
  opacity: 0.5;
  pointer-events: none;
  user-select: none;
}

.reviews__quote-stars {
  justify-self: end;
  align-self: start;
  color: var(--color-accent);
  letter-spacing: 0.1em;
  font-size: 0.85rem;
}

.reviews__quote-text {
  margin: 0;
  padding: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 0.9375rem;
  line-height: 1.4;
  color: var(--color-ink-deep);
}
.reviews__quote-text::after {
  content: "\201D";
  color: var(--color-accent-soft);
  font-style: italic;
  font-weight: 600;
}

.reviews__quote-attr {
  display: grid;
  gap: 2px;
  padding-top: var(--space-3);
  border-top: 1px solid rgba(155, 81, 69, 0.20);
  font-family: var(--font-sans);
}
.reviews__quote-name {
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
}
.reviews__quote-city {
  font-size: 0.625rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-accent);
}

/* Foot: italic close + underlined CTA, one inline row below the cards. */
.reviews__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-4) var(--space-6);
  margin-top: var(--space-6);
}
.reviews__foot-line {
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.0625rem, 1.2vw + 0.7rem, 1.25rem);
  line-height: 1.3;
  color: var(--color-ink-cream);
}

.reviews__foot-cta {
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  padding-bottom: 6px;
  border-bottom: 1px solid var(--color-accent-line);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--color-accent-soft);
  text-decoration: none;
  transition: color 180ms ease, border-color 180ms ease;
}
.reviews__foot-cta:hover,
.reviews__foot-cta:focus-visible {
  color: var(--color-ink-cream);
  border-color: var(--color-ink-cream);
}
.reviews__foot-cta .arrow { transition: transform 220ms ease; }
.reviews__foot-cta:hover .arrow,
.reviews__foot-cta:focus-visible .arrow { transform: translateX(4px); }

@media (prefers-reduced-motion: reduce) {
  .reviews__foot-cta,
  .reviews__foot-cta .arrow { transition: none; }
}


/* §3 — Our Mission (ivory) — short declarative paragraph --------------- */
.about-mission {
  max-width: 760px;
  margin-inline: auto;
  padding-block: var(--space-2);
  display: grid;
  gap: var(--space-5);
}
.about-mission .eyebrow--rule {
  margin-bottom: var(--space-3);
  color: var(--color-ink-soft);
}
.about-mission .h-section {
  margin: 0;
  max-width: 16ch;
  color: var(--color-ink-deep);
}
.about-mission .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.about-mission__body {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.25rem, 1.4vw + 0.5rem, 1.5rem);
  line-height: 1.5;
  letter-spacing: -0.005em;
  color: var(--color-ink-deep);
  margin: 0;
  max-width: 40ch;
  text-wrap: pretty;
}
.about-mission__body em {
  font-style: normal;
  color: var(--color-accent);
  font-weight: 500;
}


/* §6 — Our Clinical Standard (cream) — hairline proof list ------------- */
.clinical-standard__head {
  max-width: 640px;
  margin: 0 auto var(--space-7);
  display: grid;
  gap: var(--space-3);
  text-align: left;
}
.clinical-standard__head .eyebrow--rule {
  color: var(--color-ink-soft);
}
.clinical-standard__head .h-section {
  margin: 0;
  color: var(--color-ink-deep);
}
.clinical-standard__head .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.clinical-standard {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  max-width: 880px;
  display: grid;
  gap: 0;
}
.clinical-line {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
  padding-block: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
}
.clinical-line:last-child {
  border-bottom: 1px solid var(--color-border-cream);
}
@media (min-width: 800px) {
  .clinical-line {
    grid-template-columns: 220px 1fr;
    gap: var(--space-8);
    align-items: baseline;
    padding-block: var(--space-6);
  }
}
.clinical-line .eyebrow--rule {
  color: var(--color-ink-soft);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
}
.clinical-line__body {
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.55;
  color: var(--color-ink-deep);
  margin: 0;
  max-width: 60ch;
}
.clinical-line__body em {
  font-style: italic;
  color: #8A4538;
  font-weight: 500;
}


/* §4b — Moments (ivory) — "When the room is right" --------------------
   Hairline-ruled use-case scan. Mirrors the .clinical-standard pattern
   so the page reads as one editorial system, not a list of borrowed
   components. Sits between §4 (Founders, cream) and §5 (Pillars, deep). */
.moments__head {
  max-width: 640px;
  margin: 0 auto var(--space-7);
  display: grid;
  gap: var(--space-3);
  text-align: left;
}
.moments__head .eyebrow--rule { color: var(--color-ink-soft); }
.moments__head .h-section {
  margin: 0;
  color: var(--color-ink-deep);
}
.moments__head .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.moments {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  max-width: 880px;
  display: grid;
  gap: 0;
}
.moment {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
  padding-block: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
}
.moment:last-child {
  border-bottom: 1px solid var(--color-border-cream);
}
@media (min-width: 800px) {
  .moment {
    grid-template-columns: 220px 1fr;
    gap: var(--space-8);
    align-items: baseline;
    padding-block: var(--space-6);
  }
}
.moment .eyebrow--rule {
  color: var(--color-ink-soft);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
}
.moment__body {
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.55;
  color: var(--color-ink-deep);
  margin: 0;
  max-width: 60ch;
}
.moment__body em {
  font-style: italic;
  color: #8A4538;
  font-weight: 500;
}


/* §8 closing — italic accent inside lede on espresso bg ---------------- */
.closing__lede em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}

/* =========================================================================
   IV Blends — functional quiz augmentations
   Pairs with the [data-quiz] state machine in scripts.js. Reuses the
   existing .quiz__card / .quiz__opt / .quiz__progress visual language and
   adds: button reset on option triggers, step navigation row, result panel.
   ========================================================================= */

/* The quiz__opts is now a <ul> of <button>s — reset button defaults. */
.quiz__opts > li { list-style: none; }
.quiz__opt {
  appearance: none;
  width: 100%;
  text-align: left;
  font: inherit;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
}
.quiz__opt[aria-checked="true"] {
  border-color: var(--color-accent-bright);
  color: var(--color-ink-cream);
  background: rgba(216, 131, 118, 0.10);
}
.quiz__opt[aria-checked="true"] .quiz__radio {
  border-color: var(--color-accent-bright);
  background:
    radial-gradient(circle, var(--color-accent-bright) 0 5px, transparent 5px 100%);
}

/* Step navigation row — Back / Continue */
.quiz__nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-4);
  margin-top: auto;
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-deep);
  position: relative;
  z-index: 2;
}
.quiz__nav-spacer { display: inline-block; }
.quiz__nav-btn {
  background: transparent;
  border: 0;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream-mute);
  cursor: pointer;
  padding: var(--space-2) 0;
  transition: color var(--duration-micro) var(--ease-settle);
}
.quiz__nav-btn:hover { color: var(--color-ink-cream); }
.quiz__nav-btn[data-disabled="true"] { opacity: 0.35; cursor: default; pointer-events: none; }
.quiz__nav-btn--primary {
  color: var(--color-accent-bright);
  border-bottom: 1px solid var(--color-accent-bright);
  padding-bottom: 6px;
}
.quiz__nav-btn--primary:hover { color: var(--color-ink-cream); }

/* Result state */
.quiz__result {
  display: grid;
  gap: var(--space-5);
  position: relative;
  z-index: 2;
  align-content: start;
}
.quiz__result-eyebrow {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent-bright);
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.quiz__result-eyebrow::before {
  content: "";
  width: 22px;
  height: 1px;
  background: currentColor;
  opacity: 0.7;
}
.quiz__result-name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.875rem, 3vw + 0.5rem, 2.5rem);
  letter-spacing: -0.02em;
  line-height: 1.05;
  color: var(--color-ink-cream);
  margin: 0;
  text-wrap: balance;
}
.quiz__result-name em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.quiz__result-desc {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-cream-mute);
  margin: 0;
  max-width: 52ch;
}
.quiz__result-addon {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.65;
  color: var(--color-ink-cream);
  margin: 0;
  padding: var(--space-4) 0 0;
  border-top: 1px solid var(--color-border-deep);
}
.quiz__result-addon strong {
  color: var(--color-accent-bright);
  font-weight: 500;
}
.quiz__result-cta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-5);
  align-items: center;
  margin-top: var(--space-2);
}
.quiz__result-note {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
  margin: var(--space-4) 0 0;
  max-width: 52ch;
}

/* Avoid layout jitter as innerHTML swaps between question and result */
.quiz__card { min-height: 480px; }
@media (min-width: 900px) { .quiz__card { min-height: 520px; } }

/* =========================================================================
   IV Blends — post-pricing-removal CTA alignment
   The .blend__foot / .addon__foot divs were originally price+CTA grids;
   with price gone the CTA should remain left-aligned at all widths.
   ========================================================================= */
.addon__foot {
  grid-template-columns: 1fr !important;
  gap: var(--space-3) !important;
}
.addon__cta {
  justify-self: start !important;
}


/* =========================================================================
   === GROUPS & EVENTS PAGE =================================================
   Beat: Aspiration. Editorial hero + thesis + four occasion blocks +
   past-events scaffold + single host pull-quote + closing.
   Extends .events / .events__figure / .events__content from home §7.
   ========================================================================= */

/* §1 — Events hero (deep wine, no image plate) ------------------------- */
.events-hero {
  position: relative;
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  min-height: 100dvh;
  display: flex;
  /* Mobile: top-align so the whole hero is readable from the first paint —
     centering + the full-height block pushed the CTA off short viewports. */
  align-items: flex-start;
  padding-block: clamp(92px, 10vh + 24px, 132px) clamp(96px, 8vh + 32px, 120px);
  overflow: hidden;
  isolation: isolate;
}
.events-hero::after {
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 96px;
  background: linear-gradient(to bottom, rgba(46,21,23,0) 0%, var(--color-bg-cream) 100%);
  z-index: 2;
  pointer-events: none;
}
.events-hero__inner {
  position: relative;
  z-index: 3;
  width: 100%;
  max-width: 1120px;
  margin-inline: auto;
  padding-inline: var(--gutter-mobile);
}
.events-hero__content {
  max-width: 720px;
  display: grid;
  gap: var(--space-4);
  transform: translateY(-50px);
}
.events-hero__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: var(--font-size-3xl);
  line-height: 1.04;
  letter-spacing: -0.02em;
  text-wrap: balance;
  margin: 0;
  color: var(--color-ink-cream);
}
.events-hero__headline em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.events-hero__sub {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.25rem, 1.6vw + 0.5rem, 1.625rem);
  line-height: 1.35;
  color: var(--color-ink-cream-mute);
  max-width: 40ch;
  margin: 0;
}

/* Hero backdrop — right-side image plate with deep-wine fade.            */
/* Mobile: image fills the section as a tinted backdrop.                  */
/* ≥900px: image plates the right ~55%, content stays legible on the left.*/
.events-hero__art {
  position: absolute;
  inset: 0;
  z-index: 1;
  margin: 0;
  pointer-events: none;
  overflow: hidden;
}
.events-hero__art img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 60% center;
  display: block;
}
.events-hero__art::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(46,21,23,0.62) 0%, rgba(46,21,23,0.55) 45%, rgba(46,21,23,0.92) 100%),
    radial-gradient(120% 80% at 0% 50%, rgba(46,21,23,0.78) 0%, rgba(46,21,23,0.30) 70%, transparent 100%);
}
@media (min-width: 900px) {
  .events-hero {
    align-items: center;
    padding-block: clamp(120px, 14vh + 40px, 168px) clamp(80px, 10vh + 24px, 132px);
  }
  .events-hero__content { transform: translateY(-25px); gap: var(--space-5); }
  .events-hero__art { inset: 0 0 0 45%; }
  .events-hero__art img { object-position: 75% center; }
  .events-hero__art::after {
    background:
      linear-gradient(90deg, var(--color-bg-deep) 0%, rgba(46,21,23,0.95) 18%, rgba(46,21,23,0.45) 55%, rgba(46,21,23,0.18) 100%),
      linear-gradient(180deg, rgba(46,21,23,0.10) 0%, transparent 30%, rgba(46,21,23,0.55) 100%);
  }
}

/* Page-scoped: drop the editorial chrome dashes/seams on the events hero */
.events-hero .hero__nmark::before { display: none; }
.events-hero .hero__nmark { gap: 0; }

/* §2 — Thesis (cream) — piggybacks .about-story; no new rules needed.   */
/* HTML uses class="about-story events-thesis" so the about-story        */
/* rules apply directly. Class hook stays in the DOM for future scoping. */

/* §3–§6 — Occasion blocks ---------------------------------------------- */
/* Image-right modifier flips the order without changing DOM.            */
@media (min-width: 900px) {
  .events--reverse { direction: rtl; }
  .events--reverse > * { direction: ltr; }
}

/* CTA stack: primary button + quiet inline tel underneath               */
.cta-stack {
  display: grid;
  gap: var(--space-3);
  justify-items: start;
}
.cta-stack .btn { width: auto; }
.cta__tel {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.04em;
  color: var(--color-ink-soft);
}
.section--deep .cta__tel,
.section--espresso .cta__tel { color: var(--color-ink-cream-mute); }
.cta__tel a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  transition: color 200ms var(--ease-settle, ease-out);
}
.cta__tel a:hover { color: var(--color-accent); }
.section--deep .cta__tel a:hover,
.section--espresso .cta__tel a:hover { color: var(--color-accent-bright); }

/* Placeholder image styling — sits inside an existing .events__figure   */
.events__figure--placeholder {
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
}
.events__figure--placeholder img {
  object-fit: contain;
  padding: var(--space-7);
  background: var(--color-surface-cream);
}
.section--deep .events__figure--placeholder {
  background: var(--color-surface-deep);
  border-color: var(--color-border-deep);
}
.section--deep .events__figure--placeholder img {
  background: var(--color-surface-deep);
  filter: brightness(0.7) sepia(0.2) hue-rotate(-10deg);
}

/* Closing CTA stack: button + tel underneath, centered                  */
.closing__cta { justify-items: center; }
.closing__cta .cta__tel { text-align: center; }

/* §7 — Past Events (ivory) — editorial 3-up gallery -------------------- */
.past-events__head {
  max-width: 720px;
  margin: 0 auto var(--space-9);
  text-align: center;
  display: grid;
  gap: var(--space-4);
  justify-items: center;
}
.past-events__head .eyebrow--rule::before { display: none; }
.past-events__head .h-section { margin: 0; }
.past-events__head .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.past-events__lede {
  max-width: 56ch;
  margin: 0;
}

.past-events__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
}
@media (min-width: 700px) {
  .past-events__grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-7); }
}
@media (min-width: 1000px) {
  .past-events__grid { grid-template-columns: repeat(3, 1fr); gap: var(--space-8); }
}

.past-event { margin: 0; }
.past-event figure { margin: 0; display: grid; gap: var(--space-4); }
.past-event picture {
  display: block;
  aspect-ratio: 4 / 5;
  border-radius: var(--radius-md, 4px);
  overflow: hidden;
  box-shadow: 0 20px 40px -28px rgba(27,13,13,0.45);
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
}
.past-event picture img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 600ms var(--ease-settle, ease-out);
}
.past-event:hover picture img { transform: scale(1.02); }
.past-event figcaption {
  display: grid;
  gap: var(--space-2);
}
.past-event__caption {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.4;
  color: var(--color-ink-deep);
  margin: 0;
  max-width: 32ch;
  text-wrap: balance;
}
.past-event__caption em { font-style: italic; }
.past-event__desc {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: var(--space-2) 0 0;
  max-width: 42ch;
  text-wrap: pretty;
}
.past-event__readmore {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-accent, var(--color-ink-deep));
  margin: var(--space-3) 0 0;
  font-weight: 500;
}
.past-event__readmore .arrow {
  display: inline-block;
  margin-left: 0.35em;
  transition: transform 250ms var(--ease-settle, ease-out);
}
.past-event:hover .past-event__readmore .arrow { transform: translateX(3px); }

/* §8 — Host pull-quote (deep wine) — single editorial moment ----------- */
.host-quote {
  padding-block: var(--space-9);
  position: relative;
}
@media (min-width: 900px) {
  .host-quote { padding-block: clamp(96px, 14vh, 144px); }
}
.host-quote__inner {
  max-width: 720px;
  margin-inline: auto;
  padding-inline: var(--gutter-mobile);
  display: grid;
  gap: var(--space-5);
  justify-items: start;
  position: relative;
}
.host-quote__tag { color: var(--color-ink-cream-mute); margin: 0; }
.host-quote__body {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.5rem, 2.5vw + 0.75rem, 2rem);
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
  margin: 0;
  padding-left: clamp(28px, 5vw, 48px);
  position: relative;
  text-wrap: balance;
}
.host-quote__body em { font-style: italic; }
.host-quote__mark {
  position: absolute;
  top: -0.25em;
  left: 0;
  font-family: var(--font-serif);
  font-size: clamp(3.5rem, 6vw + 1rem, 5.5rem);
  line-height: 1;
  color: var(--color-accent-line);
  font-weight: 500;
  font-style: normal;
  user-select: none;
}
.host-quote__attr {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  margin: 0;
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border-deep);
  width: 100%;
  max-width: 480px;
}
.host-quote__flag {
  /* clearly flagged placeholder — strip when real quote lands */
  color: var(--color-accent-bright);
  letter-spacing: 0.12em;
}

/* Atmospheric hero backdrop — soft coral glow top-right, deep vignette  */
/* bottom-left. Reinforces the editorial-issue feel without an image     */
/* plate or a competing visual.                                          */
.events-hero {
  background:
    radial-gradient(ellipse 60% 50% at 88% 8%, rgba(216,131,118,0.18) 0%, rgba(216,131,118,0) 60%),
    radial-gradient(ellipse 80% 60% at 8% 100%, rgba(0,0,0,0.45) 0%, rgba(0,0,0,0) 60%),
    var(--color-bg-deep);
}
.events-hero .grain { opacity: 0.20; }
.events-hero__headline { font-size: clamp(3rem, 7vw + 1rem, 5.5rem); }

/* Occasion ordinal mark — slim "N° I" prefix to each occasion eyebrow.  */
/* Magazine-issue chrome detail, very low visual weight.                 */
.occasion__mark { display: inline-flex; align-items: baseline; gap: 0; }
.occasion__nmark {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: none;
  color: var(--color-accent-line);
  font-size: 0.9375rem;
  padding-right: var(--space-3);
  margin-right: var(--space-3);
  border-right: 1px solid currentColor;
  line-height: 1;
  position: relative;
  top: 1px;
}
.section--deep .occasion__nmark,
.section--espresso .occasion__nmark { color: var(--color-accent-bright); }

/* Past Events — asymmetric stagger. The middle card sits +24px lower    */
/* on desktop, picking up the same compositional rhythm as home §4.      */
@media (min-width: 1000px) {
  .past-events__grid .past-event:nth-child(2) {
    transform: translateY(24px);
  }
}

/* Occasion glyph — hairline editorial pictogram above each occasion     */
/* block's eyebrow. Single stroke, coral, 28px. Decorative only          */
/* (aria-hidden on the SVG).                                             */
.occasion__glyph {
  width: 28px;
  height: 28px;
  display: block;
  color: var(--color-accent-line);
  margin-bottom: var(--space-3);
}
.section--deep .occasion__glyph,
.section--espresso .occasion__glyph { color: var(--color-accent-bright); }


/* =========================================================================
   === GROUPS & EVENTS PAGE — V2 RESTRUCTURE ================================
   Page-cro critique applied. Single icon-grid replaces 4 occasion sections.
   3-step process owns the Confidence beat. Contact form is the conversion
   focal point. Hero gains credential chip-row + single primary CTA.
   ========================================================================= */

/* Hero credential chip-row — three whispered authority chips           */
.events-hero__credentials {
  list-style: none;
  margin: var(--space-5) 0 0;
  padding: var(--space-4) 0 0;
  border-top: 1px solid var(--color-border-deep);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3) var(--space-5);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
}
.events-hero__credentials li {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}
.events-hero__credentials .dot {
  color: var(--color-accent-line);
  font-size: 1rem;
  line-height: 1;
}

/* Hero CTA stack — primary "Start an inquiry" + inline tel             */
.events-hero__cta {
  margin-top: var(--space-6);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4) var(--space-5);
}
.events-hero__cta .cta__tel { margin: 0; }


/* §3 — Occasions icon grid -------------------------------------------- */
.occasions__head {
  max-width: 720px;
  margin: 0 auto var(--space-9);
  text-align: center;
  display: grid;
  gap: var(--space-4);
  justify-items: center;
}
.occasions__head .eyebrow--rule::before { display: none; }
.occasions__head .h-section { margin: 0; }
.occasions__head .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.occasions__lede {
  max-width: 48ch;
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.25rem;
  color: var(--color-ink-muted);
}

.occasions__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-4) var(--space-3);
}
@media (min-width: 640px) {
  .occasions__grid { gap: var(--space-7); }
}
@media (min-width: 1000px) {
  .occasions__grid { grid-template-columns: repeat(4, 1fr); gap: var(--space-6); }
}

.occasion-card {
  background: transparent;
  padding: var(--space-7) var(--space-5);
  text-align: center;
  display: grid;
  gap: var(--space-3);
  justify-items: center;
  position: relative;
  border-top: 1px solid var(--color-border-cream);
  transition: background 350ms var(--ease-settle, ease-out);
}
@media (min-width: 1000px) {
  .occasion-card {
    border-top: 0;
    border-left: 1px solid var(--color-border-cream);
    padding: var(--space-5) var(--space-5);
  }
  .occasion-card:first-child { border-left: 0; }
}
.occasion-card:hover { background: rgba(228, 211, 184, 0.35); }

.occasion-card__glyph {
  width: 44px;
  height: 44px;
  color: var(--color-accent-line);
  margin-bottom: var(--space-2);
  transition: transform 600ms var(--ease-settle, ease-out);
}
.occasion-card:hover .occasion-card__glyph {
  transform: translateY(-3px);
}
.occasion-card__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.375rem;
  line-height: 1.15;
  color: var(--color-ink-deep);
  margin: 0;
  letter-spacing: -0.01em;
}
.occasion-card__desc {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  margin: 0;
  max-width: 32ch;
}

.occasions__tail {
  margin: var(--space-9) auto 0;
  text-align: center;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.125rem;
  color: var(--color-ink-muted);
  max-width: 56ch;
}
.occasions__tail .btn--link {
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.75rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-accent);
  text-decoration: underline;
  text-underline-offset: 4px;
  margin-left: var(--space-2);
}


/* §4 — Process 3-step ------------------------------------------------- */
.process__head {
  max-width: 640px;
  margin: 0 0 var(--space-7);
  display: grid;
  gap: var(--space-3);
}
.process__head .h-section { margin: 0; color: var(--color-ink-cream); }
.process__head .h-section em {
  color: var(--color-accent-bright);
  font-style: italic;
  font-weight: 500;
}
/* The shared rule above assumes a dark section. On light (cream/ivory)
   sections the title must flip to dark ink so it pops — otherwise the pale
   heading sits at near-zero contrast on the clay background. */
.section--cream .process__head .h-section,
.section--ivory .process__head .h-section { color: var(--color-ink-deep); }
.section--cream .process__head .h-section em,
.section--ivory .process__head .h-section em { color: var(--color-accent-hover); }

.process__steps {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  border-top: 1px solid var(--color-border-deep);
}
.process-step {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--space-3) var(--space-6);
  padding: var(--space-7) 0;
  border-bottom: 1px solid var(--color-border-deep);
  align-items: start;
}
@media (min-width: 700px) {
  .process-step {
    grid-template-columns: 96px 1fr;
    gap: var(--space-4) var(--space-8);
  }
}
.process-step__num {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(2.75rem, 4vw + 1rem, 4rem);
  line-height: 1;
  color: var(--color-accent-line);
  opacity: 0.85;
  grid-row: span 2;
}
.process-step__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.375rem, 1.8vw + 0.5rem, 1.75rem);
  line-height: 1.2;
  color: var(--color-ink-cream);
  margin: 0;
  letter-spacing: -0.01em;
}
.process-step__body {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
  margin: 0;
  max-width: 56ch;
}
.process-step__body a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}
.process-step__body a:hover { color: var(--color-accent-bright); }




/* =========================================================================
   §6.5 — Quiet Steps (IV Blends "How It Works" rebuild)
   Two-column editorial: left holds eyebrow + title + lede, three numbered
   cards, an ornamented divider, tagline and the primary CTA. Right is a
   single arched portrait (half-vesica silhouette) with three floating
   feature badges overlaid on its lower edge.
   ========================================================================= */
.qsteps-section { padding-bottom: clamp(var(--space-9), 10vw, var(--space-10)); }
.qsteps-container { position: relative; }

.qsteps {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(var(--space-8), 6vw, var(--space-10));
  align-items: start;
}
@media (min-width: 960px) {
  .qsteps {
    grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);
    gap: clamp(var(--space-7), 5vw, var(--space-9));
    align-items: stretch;
  }
}

/* ---- Head: eyebrow + serif headline + lede ----------------------------- */
.qsteps__head {
  max-width: 620px;
  display: grid;
  gap: var(--space-4);
  margin-bottom: clamp(var(--space-7), 5vw, var(--space-8));
  text-align: center;
}
@media (min-width: 960px) { .qsteps__head { text-align: left; margin-inline: 0; } }
@media (max-width: 959.98px) { .qsteps__head { margin-inline: auto; } }

.qsteps__title { margin: 0; color: var(--color-ink-deep); text-wrap: balance; }
.qsteps__title em { font-style: italic; color: var(--color-accent); font-weight: 500; }
.qsteps__lede {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
  max-width: 46ch;
}
@media (max-width: 959.98px) { .qsteps__lede { margin-inline: auto; } }

/* ---- Step list --------------------------------------------------------- */
.qsteps__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--space-4);
}

.qstep {
  position: relative;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: start;
  gap: var(--space-4) clamp(var(--space-5), 2vw, var(--space-6));
  padding: clamp(var(--space-5), 2.4vw, var(--space-6)) clamp(var(--space-5), 2.4vw, var(--space-6));
  background: var(--color-bg-ivory);
  border: 1px solid rgba(155, 81, 69, 0.10);
  border-radius: 14px;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.55) inset,
    0 18px 32px -28px rgba(46, 21, 23, 0.28);
  transition: transform var(--duration-component, 250ms) var(--ease-settle, ease-out),
              box-shadow var(--duration-component, 250ms) var(--ease-settle, ease-out);
}
.qstep:hover {
  transform: translateY(-2px);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.55) inset,
    0 24px 40px -28px rgba(46, 21, 23, 0.34);
}

.qstep__num {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: 999px;
  background: var(--color-accent);
  color: var(--color-ink-cream);
  display: inline-grid;
  place-items: center;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.0625rem;
  letter-spacing: 0.01em;
  line-height: 1;
  grid-row: 1;
  grid-column: 1;
  margin-top: 2px;
}

.qstep__body {
  grid-row: 1;
  grid-column: 2;
  display: grid;
  gap: var(--space-3);
  min-width: 0;
}
.qstep__title {
  margin: 0;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.9375rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
  line-height: 1.3;
}
.qstep__desc {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  max-width: 42ch;
}
.qstep__link {
  align-self: start;
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-accent);
  text-decoration: none;
  padding-top: var(--space-1);
}
.qstep__link:hover { color: var(--color-accent-hover); }
.qstep__link .arrow {
  display: inline-block;
  transition: transform 200ms var(--ease-settle, ease-out);
}
.qstep__link:hover .arrow { transform: translateX(3px); }

.qstep__icon {
  grid-row: 1;
  grid-column: 3;
  width: 64px;
  height: 64px;
  border-radius: 999px;
  background: rgba(155, 81, 69, 0.08);
  color: var(--color-accent);
  display: inline-grid;
  place-items: center;
  flex-shrink: 0;
  align-self: center;
}
.qstep__icon svg { width: 30px; height: 30px; display: block; }

@media (max-width: 540px) {
  .qstep {
    grid-template-columns: auto 1fr;
    grid-template-rows: auto auto;
  }
  .qstep__icon {
    grid-row: 1;
    grid-column: 2;
    justify-self: end;
    width: 52px;
    height: 52px;
  }
  .qstep__icon svg { width: 24px; height: 24px; }
  .qstep__body { grid-column: 1 / -1; grid-row: 2; }
}

/* ---- Divider with leaf ornament --------------------------------------- */
.qsteps__divider {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: var(--space-4);
  margin: clamp(var(--space-7), 5vw, var(--space-8)) 0 var(--space-5);
}
.qsteps__rule {
  display: block;
  height: 1px;
  background: rgba(155, 81, 69, 0.30);
}
.qsteps__leaf {
  width: 40px;
  height: 20px;
  color: var(--color-accent);
  opacity: 0.85;
}

.qsteps__tagline {
  margin: 0 0 clamp(var(--space-6), 3vw, var(--space-7));
  font-family: var(--font-serif);
  font-size: clamp(1rem, 1.1vw + 0.55rem, 1.25rem);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  text-align: center;
  color: var(--color-ink-deep);
  font-weight: 500;
  text-wrap: balance;
}
.qsteps__tagline em {
  font-style: italic;
  color: var(--color-accent);
  text-transform: uppercase;
  letter-spacing: 0.12em;
  font-weight: 500;
}

.qsteps__cta {
  display: flex;
  justify-content: center;
}
.qsteps__cta .btn--primary {
  min-width: clamp(260px, 30vw, 340px);
  justify-content: center;
}

/* ---- Right column: arched portrait + floating badges ------------------ */
.qsteps__col--media {
  position: relative;
  align-self: stretch;
  min-height: 520px;
}
@media (min-width: 960px) {
  .qsteps__col--media {
    min-height: 720px;
  }
}

.qsteps__figure {
  margin: 0;
  position: relative;
  width: 100%;
  height: 100%;
  min-height: inherit;
  border-radius: 50% 14px 14px 50% / 50% 14px 14px 50%;
  overflow: hidden;
  box-shadow:
    0 2px 0 rgba(255, 255, 255, 0.35) inset,
    0 44px 70px -40px rgba(46, 21, 23, 0.42);
}
@media (min-width: 960px) {
  /* Bleed the figure all the way to the viewport's right edge — past the
     container's right padding and the centering gutter when the viewport
     is wider than --container-max. */
  .qsteps__figure {
    --bleed-right: calc(max(100vw - var(--container-max), 0px) / 2 + var(--gutter-desktop));
    width: calc(100% + var(--bleed-right));
    margin-right: calc(var(--bleed-right) * -1);
    border-radius: 50% 0 0 50% / 50% 0 0 50%;
  }
}
.qsteps__figure::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid rgba(46, 21, 23, 0.10);
  pointer-events: none;
}
.qsteps__figure img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 60% center;
  display: block;
  filter: saturate(1.03) contrast(1.02);
}

/* ---- Floating badges --------------------------------------------------- */
.qsteps__badges {
  list-style: none;
  margin: 0;
  padding: 0;
  position: absolute;
  right: clamp(8px, 2vw, 24px);
  bottom: clamp(16px, 4vw, 48px);
  display: grid;
  gap: clamp(var(--space-3), 1.2vw, var(--space-4));
  z-index: 2;
  width: min(78%, 320px);
}

.qbadge {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  background: var(--color-bg-ivory);
  border: 1px solid rgba(46, 21, 23, 0.06);
  border-radius: 12px;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.6) inset,
    0 22px 40px -28px rgba(46, 21, 23, 0.40);
  transform: translateX(0);
  transition: transform 280ms var(--ease-settle, ease-out);
}
.qbadge:hover { transform: translateX(-4px); }
.qbadge__icon {
  width: 42px;
  height: 42px;
  border-radius: 999px;
  background: rgba(155, 81, 69, 0.10);
  color: var(--color-accent);
  display: inline-grid;
  place-items: center;
}
.qbadge__icon svg { width: 22px; height: 22px; display: block; }
.qbadge__body { display: grid; gap: 2px; min-width: 0; }
.qbadge__label {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-ink-deep);
}
.qbadge__desc {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.4;
  color: var(--color-ink-muted);
}

/* Mobile: badges drop below the figure as a horizontal-stacked group */
@media (max-width: 959.98px) {
  .qsteps__col--media { min-height: 0; }
  .qsteps__figure {
    aspect-ratio: 4 / 5;
    min-height: 0;
    height: auto;
    border-radius: 50% 50% 12px 12px / 32% 32% 12px 12px;
  }
  .qsteps__badges {
    position: static;
    width: 100%;
    margin-top: var(--space-5);
    grid-template-columns: 1fr;
  }
}


/* §7 — Inquiry form --------------------------------------------------- */
.inquiry__head {
  max-width: 720px;
  margin: 0 0 var(--space-9);
  display: grid;
  gap: var(--space-4);
}
.inquiry__head .h-section { margin: 0; }
.inquiry__head .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.inquiry__lede {
  max-width: 60ch;
  margin: 0;
}

.inquiry-form {
  max-width: 880px;
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md, 4px);
  padding: clamp(24px, 4vw + 8px, 48px);
  box-shadow: 0 30px 60px -40px rgba(27,13,13,0.25);
  position: relative;
  isolation: isolate;
}
/* Subtle indication that the form is in placeholder state               */
.inquiry-form[data-state="placeholder"] {
  background:
    repeating-linear-gradient(
      45deg,
      rgba(194,118,107,0.04) 0px,
      rgba(194,118,107,0.04) 12px,
      transparent 12px,
      transparent 24px
    ),
    var(--color-surface-cream);
}
.inquiry-form__note {
  margin: 0 0 var(--space-7);
  padding: var(--space-4) var(--space-5);
  background: rgba(155, 81, 69, 0.08);
  border-left: 2px solid var(--color-accent);
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
}
.inquiry-form__note a {
  color: var(--color-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.inquiry-form__note span { color: var(--color-accent); padding-right: var(--space-2); font-weight: 600; }

.inquiry-form__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
}
@media (min-width: 700px) {
  .inquiry-form__grid { grid-template-columns: 1fr 1fr; gap: var(--space-5) var(--space-6); }
}

.field { display: grid; gap: var(--space-2); }
.field--wide { grid-column: 1 / -1; }
.field label {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-muted);
}
.field__opt {
  letter-spacing: 0.04em;
  text-transform: none;
  color: var(--color-ink-soft);
  font-style: italic;
  font-weight: 400;
}
.field input,
.field select,
.field textarea {
  font-family: var(--font-sans);
  font-size: 1rem;
  color: var(--color-ink-deep);
  background: var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-sm, 2px);
  padding: 12px 14px;
  width: 100%;
  transition: border-color 200ms ease-out, background 200ms ease-out;
  min-height: 44px;
  appearance: none;
}
.field textarea { min-height: 120px; resize: vertical; line-height: 1.55; }
.field input:focus,
.field select:focus,
.field textarea:focus {
  outline: 2px solid var(--color-accent);
  outline-offset: 1px;
  border-color: var(--color-accent);
}
.field input:disabled,
.field select:disabled,
.field textarea:disabled {
  opacity: 0.85;
  cursor: not-allowed;
  background: var(--color-bg-ivory);
}
.field input::placeholder,
.field textarea::placeholder {
  color: var(--color-ink-soft);
  font-style: italic;
}
.field select {
  background-image: linear-gradient(45deg, transparent 50%, var(--color-ink-muted) 50%),
                    linear-gradient(135deg, var(--color-ink-muted) 50%, transparent 50%);
  background-position: calc(100% - 18px) center, calc(100% - 13px) center;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  padding-right: 36px;
}

.inquiry-form__foot {
  margin-top: var(--space-7);
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3) var(--space-5);
}
.inquiry-form__submit {
  /* Live form — the submit is a normal primary CTA (was forced to a
     greyed "draft" state while the form was a placeholder). */
}


/* §2 — The Recharge Bar (cream) — two-option event station
   Editorial photograph bleeds the left edge on desktop; the right column
   holds the head + two stacked option cards (Quick Recharge IM + Velvet
   Hour IV). Below the split, a three-up trust row + primary CTA.          */

.section--cream.rechargebar { overflow: hidden; }

/* ---------- Photo-left / content-right split ---------- */

.rechargebar__split {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  align-items: stretch;
}
@media (min-width: 900px) {
  .rechargebar__split {
    margin-inline: calc(50% - 50vw);
    width: 100vw;
    padding-right: clamp(40px, 6vw, 120px);
    grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.5fr);
    gap: clamp(40px, 4vw, 72px);
    align-items: stretch;
  }
}

/* LEFT — editorial photograph, contained 4:5 card on mobile, full-bleed
   left edge on desktop.                                                  */
.rechargebar__art {
  position: relative;
  margin: 0;
  aspect-ratio: 4 / 5;
  background: var(--color-surface-cream);
  border-radius: 4px;
  overflow: hidden;
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.4) inset,
    0 30px 70px -32px rgba(27, 13, 13, 0.4),
    0 12px 30px -16px rgba(27, 13, 13, 0.22);
}
@media (min-width: 900px) {
  .rechargebar__art {
    aspect-ratio: auto;
    height: 100%;
    min-height: clamp(680px, 78vh, 920px);
    border-radius: 0 6px 6px 0;
  }
}
.rechargebar__art picture { display: block; height: 100%; }
.rechargebar__art img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 40%;
  display: block;
}

/* RIGHT — editorial content column.                                     */
.rechargebar__content {
  display: grid;
  gap: var(--space-6);
  align-content: start;
  padding-top: var(--space-2);
}

/* Head — left-aligned inside the right column.                          */
.rechargebar__head {
  max-width: 50ch;
  margin: 0;
  text-align: left;
  display: grid;
  gap: var(--space-4);
  justify-items: start;
}
.rechargebar__head .h-section { margin: 0; }
.rechargebar__head .h-section em {
  font-style: italic;
  color: var(--color-accent);
  font-weight: 500;
}
.rechargebar__lede {
  max-width: 48ch;
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.125rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  text-align: left;
}

/* ---------- Option pair — side-by-side on desktop, stacked on mobile ---------- */

.rb-options {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  margin: 0;
}
@media (min-width: 900px) {
  .rb-options {
    gap: clamp(16px, 1.6vw, 24px);
  }
}

/* Quiet routing line under the two option cards — anchors to #inquire.   */
.rb-options__note {
  margin: var(--space-5) 0 0;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  text-align: center;
}
.rb-options__note a {
  color: var(--color-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.rb-option {
  position: relative;
  background:
    linear-gradient(180deg,
      color-mix(in srgb, #FFFFFF 6%, transparent) 0%,
      transparent 60%),
    var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  border-radius: 6px;
  padding: 0 clamp(24px, 2.6vw, 36px) clamp(28px, 3vw, 40px);
  display: grid;
  gap: var(--space-4);
  align-content: start;
  text-align: center;
  overflow: hidden;
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.45) inset,
    0 18px 36px -28px rgba(27, 13, 13, 0.18);
  transition: transform 280ms ease-out, box-shadow 280ms ease-out;
}
@media (hover: hover) {
  .rb-option:hover {
    transform: translateY(-2px);
    box-shadow:
      0 1px 0 rgba(255, 255, 255, 0.55) inset,
      0 28px 50px -28px rgba(27, 13, 13, 0.26);
  }
}

/* Eyebrow chip — two-temperature per design kit: warm tan for Quick      */
/* Recharge, deep wine for the elevated Velvet Reset. No coral fill        */
/* (coral is CTA-only — designkit §3 / §12).                              */
.rb-option__head {
  margin: 0 calc(clamp(24px, 2.6vw, 36px) * -1);
  padding: 16px clamp(24px, 2.6vw, 36px);
  background: var(--color-surface-cream);
  border-bottom: 1px solid var(--color-border-cream);
  text-align: center;
}
.rb-option--velvet .rb-option__head {
  background: var(--color-bg-deep);
  border-bottom-color: var(--color-border-deep);
}
.rb-option__eyebrow {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
}
.rb-option--velvet .rb-option__eyebrow {
  color: var(--color-ink-cream);
}

/* Glyph — copper hairline ring with copper stroke icon.                  */
.rb-option__glyph-wrap {
  display: grid;
  place-items: center;
  margin-top: var(--space-4);
}
.rb-option__glyph-ring {
  width: 76px;
  height: 76px;
  border-radius: 50%;
  border: 1px solid var(--color-accent-line);
  display: grid;
  place-items: center;
  color: var(--color-accent);
  background: transparent;
}
.rb-option__glyph {
  width: 42px;
  height: 42px;
  display: block;
}

.rb-option__name {
  margin: 0;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.25rem, 1.6vw, 1.4375rem);
  line-height: 1.2;
  color: var(--color-ink-deep);
  letter-spacing: -0.005em;
}

/* Checklist — left-aligned list with hairline copper check ring.         */
.rb-option__list {
  list-style: none;
  margin: var(--space-2) auto 0;
  padding: 0;
  display: grid;
  gap: 14px;
  text-align: left;
  max-width: 30ch;
  width: 100%;
}
.rb-option__item {
  display: grid;
  grid-template-columns: 20px 1fr;
  column-gap: 12px;
  align-items: start;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--color-ink-muted);
}
.rb-option__check {
  width: 20px;
  height: 20px;
  color: var(--color-accent);
  margin-top: 2px;
  flex-shrink: 0;
}

/* ---------- Trust row ---------- */

.rb-trust {
  list-style: none;
  margin: clamp(48px, 5vw, 72px) auto 0;
  padding: clamp(28px, 3vw, 40px) 0 0;
  border-top: 1px solid var(--color-border-cream);
  max-width: 920px;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}
@media (min-width: 760px) {
  .rb-trust {
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(24px, 3vw, 40px);
  }
}
.rb-trust__item {
  display: grid;
  grid-template-columns: 44px 1fr;
  column-gap: 16px;
  row-gap: 4px;
  align-items: start;
  text-align: left;
}
.rb-trust__badge {
  grid-row: span 2;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--color-accent-line);
  display: grid;
  place-items: center;
  color: var(--color-accent);
  align-self: start;
}
.rb-trust__badge svg { width: 22px; height: 22px; }
.rb-trust__name {
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.25;
  color: var(--color-ink-deep);
  letter-spacing: -0.005em;
}
.rb-trust__name em { font-style: italic; }
.rb-trust__desc {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  max-width: 30ch;
}

/* ---------- Primary CTA + secondary look-back link ---------- */

.rb-ctas {
  margin: clamp(40px, 5vw, 64px) auto 0;
  display: grid;
  justify-items: center;
  gap: var(--space-4);
  max-width: 560px;
}
.rb-cta {
  /* Inline-text layout (not flex) so the label wraps cleanly with the arrow
     attached on narrow screens instead of overflowing the button.            */
  display: block;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  padding: 20px clamp(24px, 5vw, 56px);
  width: 100%;
  text-align: center;
  white-space: normal;
  text-wrap: balance;
}
.rb-cta .arrow {
  display: inline-block;
  margin-left: 0.5em;
  transition: transform 220ms ease-out;
}
.rb-cta:hover .arrow { transform: translateX(3px); }

/* Secondary — quiet underlined italic-serif link to #past-events.         */
.rb-cta__secondary {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1rem;
  line-height: 1.4;
  color: var(--color-ink-muted);
  text-decoration: underline;
  text-underline-offset: 6px;
  text-decoration-thickness: 1px;
  text-decoration-color: color-mix(in srgb, var(--color-accent) 55%, transparent);
  display: inline-flex;
  align-items: baseline;
  gap: 0.5em;
  transition: color 200ms ease-out, text-underline-offset 200ms ease-out, text-decoration-color 200ms ease-out;
}
.rb-cta__secondary .arrow {
  display: inline-block;
  transition: transform 220ms ease-out;
}
.rb-cta__secondary:hover {
  color: var(--color-accent);
  text-underline-offset: 8px;
  text-decoration-color: var(--color-accent);
}
.rb-cta__secondary:hover .arrow { transform: translateX(3px); }

/* ============================================================
   LEGAL PAGES  ·  Privacy · Terms · Accessibility
   Editorial magazine feel: deep-wine hero, sticky TOC sidebar,
   serif H2s with terracotta italic accents, narrow prose measure.
   Mobile-first; TOC stacks above prose under 960px.
   ============================================================ */

/* ---------- Hero (compact wine band) ---------- */
.legal-hero {
  position: relative;
  isolation: isolate;
  background:
    radial-gradient(120% 80% at 80% 0%, rgba(217, 161, 153, 0.10) 0%, transparent 60%),
    radial-gradient(90% 70% at 0% 100%, rgba(155, 81, 69, 0.16) 0%, transparent 55%),
    var(--color-bg-deep);
  color: var(--color-ink-cream);
  padding: clamp(var(--space-9), 18vw, var(--space-11)) 0 clamp(var(--space-8), 12vw, var(--space-10));
  overflow: hidden;
}
.legal-hero::before {
  /* hairline at the bottom — separates wine from cream */
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, var(--color-accent-line) 18%, var(--color-accent-line) 82%, transparent 100%);
  opacity: 0.45;
}
.legal-hero .grain {
  position: absolute; inset: 0; z-index: -1;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='0.32'/></svg>");
  mix-blend-mode: overlay;
  opacity: 0.5;
  pointer-events: none;
}
.legal-hero__inner {
  max-width: 880px;
  display: grid;
  gap: var(--space-5);
}
.legal-hero .hero__nmark {
  position: absolute;
  top: clamp(var(--space-6), 7vw, var(--space-8));
  left: 50%;
  transform: translateX(-50%);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  opacity: 0.72;
  white-space: nowrap;
}
.legal-hero .hero__nmark::before,
.legal-hero .hero__nmark::after {
  content: "";
  display: inline-block;
  width: 28px;
  height: 1px;
  background: var(--color-accent-line);
  vertical-align: middle;
  margin: 0 var(--space-3);
  opacity: 0.55;
}
.legal-hero .hero__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--color-accent-soft);
  margin: 0;
}
.legal-hero__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2.5rem, 6vw + 1rem, 5rem);
  line-height: 1.04;
  letter-spacing: -0.015em;
  color: var(--color-ink-cream);
  margin: 0;
  max-width: 18ch;
}
.legal-hero__headline em {
  font-style: italic;
  color: var(--color-accent-bright);
  font-weight: 500;
}
.legal-hero__sub {
  font-family: var(--font-serif);
  font-weight: 400;
  font-style: italic;
  font-size: clamp(1.0625rem, 1.6vw + 0.5rem, 1.375rem);
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
  max-width: 56ch;
  margin: 0;
}
.legal-hero__meta {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  opacity: 0.75;
  margin: var(--space-3) 0 0;
}

/* ---------- Body layout ---------- */
.legal-body {
  /* uses .section.section--ivory tokens already */
  padding: clamp(var(--space-8), 10vw, var(--space-10)) 0;
}
.legal-body__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
}

/* ---------- Table of contents ---------- */
.legal-toc {
  border-top: 1px solid var(--color-border-cream);
  border-bottom: 1px solid var(--color-border-cream);
  padding: var(--space-5) 0;
}
.legal-toc .eyebrow {
  margin: 0 0 var(--space-4);
}
.legal-toc ol {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(220px, 100%), 1fr));
  gap: var(--space-2) var(--space-5);
  counter-reset: toc;
}
.legal-toc li {
  counter-increment: toc;
  position: relative;
  padding-left: 2.5em;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.45;
}
.legal-toc li::before {
  content: counter(toc, decimal-leading-zero);
  position: absolute;
  left: 0;
  top: 0.15em;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.875rem;
  color: var(--color-accent);
  letter-spacing: 0.04em;
}
.legal-toc a {
  color: var(--color-ink-deep);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color .18s ease, border-color .18s ease;
}
.legal-toc a:hover,
.legal-toc a:focus-visible {
  color: var(--color-accent);
  border-bottom-color: var(--color-accent-line);
}

/* ---------- Prose ---------- */
.legal-prose {
  max-width: 68ch;
  color: var(--color-ink-deep);
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.72;
}
.legal-prose > * + * {
  margin-top: var(--space-5);
}
.legal-prose .lede {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.25rem, 1.4vw + 0.75rem, 1.5rem);
  line-height: 1.45;
  color: var(--color-ink-deep);
  letter-spacing: -0.005em;
  border-left: 2px solid var(--color-accent);
  padding-left: var(--space-5);
  margin-bottom: var(--space-7);
}
.legal-prose .lede em { color: var(--color-accent); font-style: italic; }
.legal-prose h2 {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.625rem, 1.8vw + 1rem, 2.125rem);
  line-height: 1.18;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin-top: var(--space-9);
  padding-top: var(--space-6);
  border-top: 1px solid var(--color-border-cream);
  position: relative;
}
.legal-prose h2::before {
  /* small terracotta dot above the heading — editorial cue */
  content: "";
  position: absolute;
  top: -4.5px;
  left: 0;
  width: 8px; height: 8px;
  background: var(--color-accent-line);
  border-radius: 50%;
}
.legal-prose h2:first-of-type {
  margin-top: var(--space-7);
}
.legal-prose p { margin: 0; }
.legal-prose strong { color: var(--color-ink-deep); font-weight: 600; }
.legal-prose em { color: var(--color-accent); font-style: italic; }
.legal-prose a {
  color: var(--color-accent);
  text-decoration: none;
  border-bottom: 1px solid var(--color-accent-soft);
  transition: color .18s ease, border-color .18s ease;
}
.legal-prose a:hover,
.legal-prose a:focus-visible {
  color: var(--color-accent-hover);
  border-bottom-color: var(--color-accent);
}
.legal-prose ul,
.legal-prose ol {
  margin: var(--space-4) 0 0;
  padding: 0;
  list-style: none;
}
.legal-prose ul li,
.legal-prose ol li {
  position: relative;
  padding-left: 1.6em;
  margin-top: var(--space-3);
}
.legal-prose ul li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.85em;
  width: 0.7em;
  height: 1px;
  background: var(--color-accent-line);
}
.legal-prose ol { counter-reset: prose-list; }
.legal-prose ol li { counter-increment: prose-list; }
.legal-prose ol li::before {
  content: counter(prose-list) ".";
  position: absolute;
  left: 0;
  top: 0;
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--color-accent);
  font-size: 1rem;
}
.legal-prose kbd {
  font-family: var(--font-sans);
  font-size: 0.8em;
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
  border-bottom-width: 2px;
  border-radius: 3px;
  padding: 0.1em 0.45em;
  color: var(--color-ink-deep);
}
.legal-prose code {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.875em;
  background: var(--color-surface-cream);
  padding: 0.1em 0.4em;
  border-radius: 3px;
  color: var(--color-ink-deep);
}

/* ---------- Editorial table ---------- */
.legal-table {
  width: 100%;
  border-collapse: collapse;
  margin: var(--space-5) 0 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
}
.legal-table thead th {
  text-align: left;
  font-weight: 500;
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-muted);
  padding: 0 var(--space-4) var(--space-3);
  border-bottom: 1px solid var(--color-accent-line);
}
.legal-table tbody td {
  padding: var(--space-5) var(--space-4);
  border-bottom: 1px solid var(--color-border-cream);
  vertical-align: top;
  color: var(--color-ink-deep);
}
.legal-table tbody tr:last-child td { border-bottom: none; }
.legal-table tbody tr {
  transition: background-color .18s ease;
}
.legal-table tbody tr:hover {
  background-color: rgba(155, 81, 69, 0.05);
}
.legal-table tbody td:first-child {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.125rem;
  font-weight: 500;
  color: var(--color-accent-hover);
  white-space: nowrap;
}

/* ---------- Callout (medical disclaimer) ---------- */
.callout {
  margin: var(--space-6) 0 0;
  padding: var(--space-6) var(--space-6) var(--space-5);
  background: linear-gradient(180deg, var(--color-surface-cream) 0%, var(--color-bg-cream) 100%);
  border-left: 3px solid var(--color-accent);
  border-radius: 2px;
  position: relative;
}
.callout::before {
  /* corner ornament */
  content: "";
  position: absolute;
  top: -1px;
  right: -1px;
  width: 28px;
  height: 28px;
  border-top: 1px solid var(--color-accent-line);
  border-right: 1px solid var(--color-accent-line);
}
.callout__label {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--color-accent-hover);
  margin: 0 0 var(--space-4);
}
.callout p + p { margin-top: var(--space-4); }

/* ---------- Contact block ---------- */
.contact-block {
  font-family: var(--font-serif);
  font-size: 1.125rem;
  line-height: 1.7;
  color: var(--color-ink-deep);
  padding: var(--space-5) 0 0;
  border-top: 1px dashed var(--color-border-cream);
}

/* ---------- Closing note ---------- */
.legal-foot-note {
  margin-top: var(--space-8) !important;
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
}

/* ---------- Desktop layout: sticky TOC sidebar ---------- */
@media (min-width: 960px) {
  .legal-body__inner {
    grid-template-columns: 240px minmax(0, 1fr);
    gap: var(--space-10);
    align-items: start;
  }
  .legal-toc {
    position: sticky;
    top: var(--space-8);
    border: none;
    padding: 0;
    border-left: 1px solid var(--color-border-cream);
    padding-left: var(--space-5);
  }
  .legal-toc ol {
    grid-template-columns: 1fr;
    gap: var(--space-3);
  }
  .legal-toc li {
    font-size: 0.9375rem;
    padding-left: 2.4em;
    line-height: 1.4;
  }
  .legal-toc li::before {
    font-size: 0.8125rem;
    top: 0.1em;
  }
  .legal-toc a {
    display: inline-block;
    padding: 2px 0;
  }
  .legal-prose {
    padding-right: var(--space-5);
  }
  .legal-prose h2 {
    margin-left: -1.5rem;
    padding-left: 1.5rem;
  }
  .legal-prose h2::before {
    left: 1.5rem;
  }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .legal-toc a,
  .legal-prose a {
    transition: none;
  }
}

/* ============================================================
   SUBSCRIBE SECTION  ·  Editorial split-card (cream + espresso)
   Two-temperature card on an ivory section. Cream-left identity
   pane (eyebrow, headline, lede, 4-up icon row, espresso promo
   bar) sits flush against an espresso-right conversion pane
   (wordmark, notched ribbon, underline email field, CTA, fine
   print). Stacks under 880px.
   ============================================================ */

.subscribe-section {
  padding: clamp(var(--space-9), 14vw, var(--space-11)) 0;
  position: relative;
  isolation: isolate;
  overflow: hidden;
}
.subscribe-section::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(70% 55% at 100% 0%, rgba(217, 161, 153, 0.18) 0%, transparent 60%),
    radial-gradient(55% 50% at 0% 100%, rgba(155, 81, 69, 0.08) 0%, transparent 65%);
  pointer-events: none;
}

.subscribe {
  max-width: 1180px;
  margin: 0 auto;
}

/* ---------- Outer card: two-column shell ---------- */
.subscribe__card {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  background: var(--color-bg-cream);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md, 4px);
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.4) inset,
    0 28px 64px -32px rgba(27, 13, 13, 0.22);
  overflow: hidden;
}

/* ---------- LEFT · cream identity pane ---------- */
.subscribe__intro {
  position: relative;
  min-width: 0;
  padding: clamp(var(--space-6), 6vw, var(--space-8));
  display: flex;
  flex-direction: column;
}
.subscribe__intro .eyebrow {
  color: var(--color-ink-soft);
  letter-spacing: 0.22em;
  margin: 0;
}
.subscribe__head {
  margin-top: var(--space-4);
  max-width: 22ch;
}
.subscribe__head em {
  font-style: italic;
  color: var(--color-accent);
}
.subscribe__lede {
  margin-top: var(--space-5);
  max-width: 42ch;
  color: var(--color-ink-muted);
}

/* Four-up icon row */
.subscribe__icons {
  list-style: none;
  padding: 0;
  margin: var(--space-7) 0 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-5) var(--space-5);
}
@media (min-width: 540px) {
  .subscribe__icons {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--space-5) var(--space-4);
  }
}
.subscribe__icon {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  align-items: flex-start;
  text-align: left;
}
.subscribe__icon-svg {
  width: 26px;
  height: 26px;
  color: var(--color-accent);
  display: block;
  flex-shrink: 0;
}
.subscribe__icon-label {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.4;
  letter-spacing: 0.01em;
  color: var(--color-ink-deep);
  font-weight: 500;
}

/* Espresso reassurance bar at bottom of cream pane */
.subscribe__promo-bar {
  margin-top: auto;
  margin-block-start: var(--space-7);
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: 14px 20px;
  background: var(--color-bg-espresso);
  color: var(--color-ink-cream);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.4;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 500;
  min-height: 52px;
  border-radius: 2px;
}
.subscribe__promo-glyph {
  width: 16px;
  height: 16px;
  color: var(--color-accent-soft);
  flex-shrink: 0;
}

/* ---------- RIGHT · espresso conversion pane ---------- */
.subscribe__panel {
  position: relative;
  /* min-width:0 lets this grid item shrink to the card width instead of being
     pushed to its content's max-content (the notched ribbon's width:max-content
     was forcing the whole card wider than the phone, clipping the copy). */
  min-width: 0;
  padding: clamp(var(--space-6), 6vw, var(--space-8));
  background: var(--color-bg-espresso);
  color: var(--color-ink-cream);
  isolation: isolate;
}
/* Soft coral glow top, deep shadow bottom — restores warmth to espresso */
.subscribe__panel::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(194, 118, 107, 0.18) 0%, transparent 55%),
    radial-gradient(80% 60% at 50% 110%, rgba(27, 13, 13, 0.6) 0%, transparent 60%);
  pointer-events: none;
}
.subscribe__panel-label {
  font-family: var(--font-serif);
  font-weight: 500;
  font-style: normal;
  font-size: clamp(1.5rem, 2vw + 0.6rem, 1.875rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
  text-align: center;
  margin: 0;
}

/* Notched welcome-offer ribbon */
.subscribe__ribbon {
  display: block;
  width: max-content;
  max-width: 100%;
  margin: var(--space-4) auto var(--space-6);
  padding: 9px 32px;
  background: var(--color-accent-soft);
  color: var(--color-ink-deep);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  text-align: center;
  clip-path: polygon(
    0 50%, 14px 0, calc(100% - 14px) 0, 100% 50%,
    calc(100% - 14px) 100%, 14px 100%
  );
}

/* ---------- Form ---------- */
.subscribe__form {
  display: grid;
  gap: var(--space-4);
}
.subscribe__field {
  position: relative;
  display: grid;
  gap: var(--space-2);
}
.subscribe__label {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap; border: 0;
}
.subscribe__input {
  width: 100%;
  background: var(--color-ink-cream);
  color: var(--color-ink-deep);
  border: 1px solid transparent;
  padding: 16px 20px;
  font-family: var(--font-sans);
  font-size: 1rem;
  outline: none;
  transition: border-color .25s ease, box-shadow .25s ease;
  -webkit-appearance: none;
  appearance: none;
  border-radius: 2px;
  box-sizing: border-box;
}
.subscribe__input::placeholder {
  color: var(--color-ink-soft);
  opacity: 0.85;
}
.subscribe__input:hover {
  border-color: var(--color-accent-soft);
}
.subscribe__input:focus,
.subscribe__input:focus-visible {
  border-color: var(--color-accent);
  box-shadow: 0 0 0 3px rgba(194, 118, 107, 0.25);
}
.subscribe__field-rule { display: none; }

.subscribe__honeypot {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
  visibility: hidden;
}

.subscribe__submit {
  width: 100%;
  justify-content: center;
  background: var(--color-surface-cream);
  color: var(--color-ink-deep);
  padding: 16px 24px;
  letter-spacing: 0.14em;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  border: 1px solid var(--color-surface-cream);
  transition: background .25s ease, color .25s ease, border-color .25s ease, transform .25s ease;
}
.subscribe__submit:hover,
.subscribe__submit:focus-visible {
  background: var(--color-ink-cream);
  border-color: var(--color-ink-cream);
}
.subscribe__submit .arrow {
  display: inline-block;
  transition: transform .25s ease;
}
.subscribe__submit:hover .arrow,
.subscribe__submit:focus-visible .arrow {
  transform: translateX(4px);
}

/* Express-consent checkbox (CASL) — required before the form can submit. */
.subscribe__consent {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  margin-top: var(--space-4);
  text-align: left;
}
.subscribe__consent-box {
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  margin: 2px 0 0;
  accent-color: var(--color-accent);
  cursor: pointer;
}
.subscribe__consent-label {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-ink-cream-mute);
  cursor: pointer;
}
.subscribe__consent-label a {
  color: var(--color-ink-cream);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.subscribe__finep {
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.75rem;
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
  margin: var(--space-3) 0 0;
  text-align: left;
}
.subscribe__finep a {
  color: var(--color-ink-cream);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: var(--color-accent-soft);
  transition: color .18s ease, text-decoration-color .18s ease;
}
.subscribe__finep a:hover,
.subscribe__finep a:focus-visible {
  color: var(--color-accent-soft);
  text-decoration-color: var(--color-accent);
}

/* ---------- Desktop: split the card 58/42 ---------- */
@media (min-width: 880px) {
  .subscribe__card {
    grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
  }
  .subscribe__intro {
    padding: clamp(var(--space-7), 4vw, 56px);
  }
  .subscribe__panel {
    padding: clamp(var(--space-7), 4vw, var(--space-8));
    display: flex;
    flex-direction: column;
    justify-content: center;
  }
  .subscribe__panel-label {
    font-size: clamp(1.625rem, 1.4vw + 1rem, 2rem);
  }
}

@media (prefers-reduced-motion: reduce) {
  .subscribe__input,
  .subscribe__submit,
  .subscribe__submit .arrow {
    transition: none;
  }
}

/* =========================================================================
   §404 — Page not found
   Dark espresso editorial. Mirrors hero rhythm: text-left, image-right.
   ========================================================================= */
.error-page {
  position: relative;
  background: var(--color-bg-espresso);
  color: var(--color-ink-cream);
  overflow: hidden;
  padding-block: clamp(112px, 14vh, 144px) clamp(64px, 8vh, 96px);
  display: flex;
  align-items: center;
}

.error-page__inner {
  position: relative;
  z-index: 1;
  width: 100%;
}

.error-page__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  align-items: center;
  max-width: var(--content-max);
  margin-inline: auto;
}

/* Eyebrow: ERROR 404 with hairline */
.error-page__eyebrow {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  margin: 0 0 var(--space-5);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-accent-line);
}
.error-page__eyebrow span:first-child { white-space: nowrap; }
.error-page__rule {
  flex: 0 0 64px;
  height: 1px;
  background: var(--color-accent-line);
  opacity: 0.55;
}
.error-page__rule--body {
  display: block;
  width: 56px;
  margin: var(--space-5) 0 var(--space-5);
  opacity: 0.45;
}

/* Big "404" numerals */
.error-page__numerals {
  font-family: var(--font-serif);
  font-weight: 500;
  font-style: normal;
  font-size: clamp(6rem, 18vw, 12rem);
  line-height: 0.92;
  letter-spacing: -0.02em;
  color: var(--color-accent-soft);
  margin: 0 0 var(--space-5);
  text-shadow: 0 2px 24px rgba(155, 81, 69, 0.18);
}

/* "Lost? Let's get you hydrated." */
.error-page__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.75rem, 4vw + 0.5rem, 3rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
  margin: 0;
  max-width: min(20ch, 100%);
  max-width: 14ch;
}
.error-page__headline em {
  font-style: italic;
  color: var(--color-accent-bright);
}

.error-page__body {
  font-family: var(--font-sans);
  font-weight: 300;
  font-size: var(--font-size-md);
  line-height: 1.65;
  color: var(--color-ink-cream);
  opacity: 0.88;
  margin: 0 0 var(--space-6);
  max-width: min(38ch, 100%);
}

/* Trust line — between numerals and headline. Quiet authority cue. */
.error-page__trust {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-accent-line);
  margin: 0 0 var(--space-5);
  max-width: 100%;
  line-height: 1.6;
}
.error-page__trust-sep {
  display: inline-block;
  margin-inline: 0.55em;
  color: var(--color-accent-soft);
  opacity: 0.55;
}

/* Phone + email contact line — human escape hatch above the fold. */
.error-page__contact {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 300;
  color: var(--color-ink-cream-mute);
  margin: var(--space-3) 0 0;
  line-height: 1.55;
  max-width: 100%;
}
.error-page__contact a {
  color: var(--color-ink-cream);
  text-decoration: none;
  border-bottom: 1px solid var(--color-accent-line);
  padding-bottom: 1px;
  transition: color var(--duration-micro) var(--ease-settle),
              border-color var(--duration-micro) var(--ease-settle);
}
.error-page__contact a:hover,
.error-page__contact a:focus-visible {
  color: var(--color-accent-bright);
  border-bottom-color: var(--color-accent-soft);
}
.error-page__contact-sep {
  display: inline-block;
  margin-inline: 6px;
  color: var(--color-accent-soft);
  opacity: 0.5;
}

.error-page__ctas {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-5) var(--space-6);
}
.error-page__cta-primary {
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-size: 0.75rem;
  padding: 16px 32px;
  min-height: 48px;
}
.error-page__cta-link {
  text-transform: uppercase;
  letter-spacing: 0.22em;
  font-size: 0.6875rem;
  color: var(--color-accent-line);
  border-bottom: 1px solid var(--color-accent-line);
  padding-bottom: 4px;
  min-height: 48px;
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
}
.error-page__cta-link:hover,
.error-page__cta-link:focus-visible {
  color: var(--color-accent-soft);
  border-bottom-color: var(--color-accent-soft);
}

/* Media column: bag photo + decorative SVG "404" tubing + caption */
.error-page__media {
  position: relative;
  margin: 0;
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
/* Editorial photo composition: IV bag with glowing "404" tubing.
   On mobile the wrap fills viewport width edge-to-edge. On desktop it bleeds
   to the viewport's RIGHT edge (the left text column stays inside the
   container gutter). The image is the visual anchor of the page. */
.error-page__photo-wrap {
  display: block;
  position: relative;
  width: 100%;
  aspect-ratio: 1024 / 1535;
  overflow: hidden;
  background: transparent;
  isolation: isolate;
  /* Soft alpha mask that bleeds the photo's edges into the page background.
     The right edge stays firm (it meets the viewport edge); the left, top,
     and bottom feather out so the photo reads as part of the hero, not a
     pasted-in tile. Two mask layers composited with `intersect` produce a
     soft frame on three sides. */
  -webkit-mask-image:
    linear-gradient(to right, transparent 0%, #000 12%, #000 100%),
    linear-gradient(to bottom, transparent 0%, #000 6%, #000 88%, transparent 100%);
  -webkit-mask-composite: source-in;
          mask-image:
    linear-gradient(to right, transparent 0%, #000 12%, #000 100%),
    linear-gradient(to bottom, transparent 0%, #000 6%, #000 88%, transparent 100%);
          mask-composite: intersect;
}
/* Inner vignette that quietly darkens the corners against the warm bag
   glow — pulls the edges into the surrounding espresso. */
.error-page__photo-wrap::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(140% 100% at 50% 38%, transparent 48%, rgba(27, 13, 13, 0.85) 100%);
  pointer-events: none;
  z-index: 2;
}
.error-page__photo {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 42%;
  z-index: 1;
  transform: scale(1.02);
}
.error-page__caption {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  margin: var(--space-5) 0 0;
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  opacity: 0.7;
}
.error-page__caption .diamond {
  width: 4px;
  height: 4px;
  background: var(--color-accent-line);
  transform: rotate(45deg);
  display: inline-block;
}

/* Desktop: text inside the container gutter, photo flush to the right edge
   of the viewport (editorial bleed). The grid drops its right padding so the
   image bleeds; the text column is anchored where the container's left edge
   sits so it remains aligned with the rest of the site. */
@media (min-width: 960px) {
  .error-page__inner {
    max-width: none;
    padding-inline: 0;
  }
  .error-page__grid {
    grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(48px, 6vw, 96px);
    max-width: none;
    margin-inline: 0;
    align-items: stretch;
  }
  .error-page__content {
    /* Anchor text to the container's left gutter. Centered when the viewport
       is wider than --container-max; flush to left gutter otherwise. */
    padding-inline-start: max(64px, calc((100vw - var(--container-max)) / 2 + 64px));
    max-width: calc(560px + 64px);
    align-self: center;
  }
  .error-page__numerals {
    margin-bottom: var(--space-6);
  }
  .error-page__media {
    /* Photo column bleeds to viewport right edge */
    margin: 0;
  }
  /* Keep the photo at its natural 2:3 aspect so both the bag AND the 404
     tubing remain visible — no awkward crops. The grid row grows to match. */
  /* Caption sits below the photo, aligned to its right edge */
  .error-page__caption {
    padding-inline-end: max(64px, calc((100vw - var(--container-max)) / 2 + 64px));
    justify-content: flex-end;
  }
}

/* Mobile rules below 960px (single-column grid).
   Grid children get min-width: 0 so long words / wide images cannot
   blow out the parent track and force horizontal overflow. */
@media (max-width: 959px) {
  .error-page {
    padding-block: clamp(88px, 12vh, 112px) clamp(48px, 6vh, 64px);
  }
  .error-page__content,
  .error-page__media { min-width: 0; }

  /* Pull the photo's left/bottom feather slightly tighter on mobile so the
     "404 tubing" at the bottom doesn't get masked away. */
  .error-page__photo-wrap {
    -webkit-mask-image:
      linear-gradient(to bottom, transparent 0%, #000 5%, #000 95%, transparent 100%);
            mask-image:
      linear-gradient(to bottom, transparent 0%, #000 5%, #000 95%, transparent 100%);
  }
}

/* Narrow phones: stack CTAs, tighten editorial detail */
@media (max-width: 480px) {
  .error-page__ctas {
    flex-direction: column;
    align-items: stretch;
  }
  .error-page__cta-primary,
  .error-page__cta-link {
    justify-content: center;
    text-align: center;
  }
  .error-page__rule { flex-basis: 40px; }
  .error-page__contact {
    font-size: 0.8125rem;
    line-height: 1.7;
  }
  /* Trust line wraps mid-row gracefully on the narrowest phones */
  .error-page__trust-sep:nth-of-type(1) { margin-inline: 0.45em; }
}

@media (prefers-reduced-motion: reduce) {
  .error-page__cta-link,
  .error-page__cta-primary,
  .error-page__contact a {
    transition: none;
  }
}


/* ======================================================================
   ABOUT — Standards of Care (deep wine)
   Five-up icon grid. Hairline column dividers on desktop, soft stack
   on mobile. Icons in muted cream — coral reserved for CTAs.
   ====================================================================== */
.standards { padding-block: clamp(96px, 12vw, 144px); }

.standards__head {
  text-align: center;
  margin-bottom: clamp(48px, 6vw, 72px);
}
.standards__head .eyebrow--rule {
  display: inline-flex;
  color: var(--color-ink-cream-mute);
}
.standards__title {
  margin: var(--space-4) 0 0;
  color: var(--color-ink-cream);
  max-width: 22ch;
  margin-inline: auto;
}
.standards__title em {
  font-style: italic;
  color: var(--color-accent-bright);
}

.standards__grid {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  max-width: 1180px;
}
@media (max-width: 639px) {
  .standards__grid {
    gap: var(--space-5);
    border-top: 1px solid var(--color-border-deep);
  }
  .standard {
    grid-template-columns: 28px 1fr;
    grid-template-rows: auto auto;
    column-gap: var(--space-4);
    row-gap: 6px;
    text-align: left;
    justify-items: stretch;
    align-items: start;
    padding-block: var(--space-5);
    border-bottom: 1px solid var(--color-border-deep);
  }
  .standard__icon {
    grid-row: 1 / span 2;
    grid-column: 1;
    width: 28px;
    height: 28px;
    align-self: start;
    margin-bottom: 0;
    margin-top: 2px;
  }
  .standard__label {
    grid-row: 1;
    grid-column: 2;
    text-align: left;
    align-self: start;
    min-height: 0;
    max-width: none;
    display: block;
  }
  .standard__body {
    grid-row: 2;
    grid-column: 2;
    text-align: left;
    max-width: none;
    align-self: start;
  }
}
@media (min-width: 640px) {
  .standards__grid {
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: auto auto auto;
    gap: var(--space-8) var(--space-7);
  }
  .standard {
    grid-template-rows: subgrid;
    grid-row: span 3;
  }
}
@media (min-width: 1024px) {
  .standards__grid {
    grid-template-columns: repeat(5, 1fr);
    grid-template-rows: auto auto 1fr;
    gap: 0 var(--space-4);
    align-items: start;
  }
  .standard {
    grid-template-rows: subgrid;
    grid-row: span 3;
  }
}

.standard {
  display: grid;
  grid-auto-rows: auto;
  gap: var(--space-3);
  text-align: center;
  justify-items: center;
  align-content: start;
  padding-inline: 0;
  position: relative;
}
@media (min-width: 1024px) {
  .standard {
    padding-inline: var(--space-2);
  }
}

.standard__icon {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  color: var(--color-ink-cream-mute);
  margin-bottom: var(--space-2);
  align-self: end;
}
.standard__icon svg {
  width: 100%;
  height: 100%;
  display: block;
}

.standard__label {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream);
  margin: 0;
  max-width: 20ch;
  line-height: 1.5;
  align-self: start;
  min-height: calc(0.6875rem * 1.5 * 2);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  text-align: center;
}

.standard__body {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
  margin: 0;
  max-width: 28ch;
  align-self: start;
}


/* ======================================================================
   ABOUT — Founders row (cream)
   Horizontal two-up. Portrait square left, name + role + bio right.
   Replaces the old vertical .founder-card grid for the about page.
   ====================================================================== */
/* Compact the founders section so it reads in a single viewport scroll. */
.section[aria-labelledby="founders-heading"] { padding-block: clamp(48px, 6vw, 72px); }

.founders-row {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  max-width: 460px;
}
@media (min-width: 880px) {
  .founders-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-9);
    max-width: 1040px;
  }
}

.founder-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: center;
  justify-items: center;
  text-align: center;
}
@media (min-width: 520px) {
  .founder-row {
    grid-template-columns: 200px 1fr;
    gap: var(--space-6);
    align-items: center;
    justify-items: start;
    text-align: left;
  }
}
@media (min-width: 1024px) {
  .founder-row {
    grid-template-columns: 240px 1fr;
    gap: var(--space-7);
  }
}

.founder-row__portrait {
  width: 100%;
  max-width: 240px;
  aspect-ratio: 4 / 5;
  background: var(--color-surface-cream);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md, 4px);
  display: grid;
  place-items: center;
  color: var(--color-ink-soft);
  flex-shrink: 0;
  overflow: hidden;
  position: relative;
}
.founder-row__portrait svg {
  width: 56%;
  height: 56%;
  display: block;
}
.founder-row__portrait img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: cover;
  object-position: center 12%;
  display: block;
}
.founders-row > .founder-row:nth-child(2) .founder-row__portrait img {
  object-position: center 22%;
  transform: scale(1.35);
  transform-origin: center top;
}

.founder-row__body {
  display: grid;
  gap: var(--space-2);
  max-width: 34ch;
}

.founder-row__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 1.4vw + 1rem, 1.875rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
}
.founder-row__name em {
  font-style: italic;
  font-weight: 500;
  color: var(--color-ink-deep);
}

.founder-row__role {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.04em;
  color: var(--color-accent);
  margin: 0;
  font-weight: 500;
}

.founder-row__bio {
  font-family: var(--font-sans);
  font-size: var(--font-size-md);
  line-height: 1.65;
  color: var(--color-ink-muted);
  margin: var(--space-2) 0 0;
}

/* =========================================================================
   ABOUT — Founders head line (cream)
   Single editorial credential line above the two founder cards. Holds
   "more than 8 years of combined nursing experience · McMaster & TMU"
   so each individual bio doesn't need to repeat school/years.
   ========================================================================= */
.founders__head { margin-bottom: clamp(24px, 3vw, 40px); text-align: center; }
.founders__head .eyebrow--rule { display: inline-flex; }
.founders__head-line {
  margin: var(--space-3) auto 0;
  max-width: 56ch;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.6;
  letter-spacing: 0.01em;
  color: var(--color-ink-muted);
}
.founders__head-line em {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  color: var(--color-ink-deep);
  font-size: 1.0625rem;
  letter-spacing: 0;
}
.founders__head-line .dash {
  color: var(--color-accent);
  margin: 0 8px;
  font-style: normal;
}

/* =========================================================================
   ABOUT — Standards heading per-card (deep wine)
   Mid-tier display line that sits between the small-caps eyebrow label
   and the body paragraph. Cormorant, calm size, italic accent on the
   "punctuation word" (e.g. "Yours.").
   ========================================================================= */
.standard__heading {
  font-family: var(--font-serif);
  font-weight: 500;
  font-style: normal;
  font-size: clamp(1.25rem, 1vw + 1rem, 1.5rem);
  line-height: 1.2;
  letter-spacing: -0.005em;
  color: var(--color-ink-cream);
  margin: 4px 0 0;
  max-width: 18ch;
  text-wrap: balance;
}
.standard__heading em {
  font-style: italic;
  color: var(--color-accent-bright, var(--color-accent));
}
@media (max-width: 639px) {
  .standard__heading {
    grid-row: 2;
    grid-column: 2;
    text-align: left;
    max-width: none;
  }
  /* On mobile the existing 2-row standard{} grid was eyebrow → body.
     We now have eyebrow → heading → body; widen the row template. */
  .standard {
    grid-template-rows: auto auto auto;
  }
  .standard__icon { grid-row: 1 / span 3; }
  .standard__body {
    grid-row: 3;
  }
}

/* 3-card variant — overrides the 5-up desktop grid from
   .standards__grid (which targets the 5-card original layout). */
.standards__grid--3 {
  max-width: 1080px;
}
@media (min-width: 640px) and (max-width: 1023px) {
  .standards__grid--3 {
    grid-template-columns: 1fr;
    grid-template-rows: auto;
    gap: var(--space-7);
  }
  .standards__grid--3 .standard {
    grid-template-columns: 56px 1fr;
    grid-template-rows: auto auto auto;
    grid-row: auto;
    column-gap: var(--space-5);
    row-gap: 6px;
    text-align: left;
    justify-items: stretch;
    align-items: start;
    padding-block: var(--space-6);
    border-bottom: 1px solid var(--color-border-deep);
  }
  .standards__grid--3 .standard:last-child { border-bottom: 0; }
  .standards__grid--3 .standard__icon {
    grid-row: 1 / span 3;
    grid-column: 1;
    width: 40px;
    height: 40px;
    margin: 4px 0 0;
    align-self: start;
  }
  .standards__grid--3 .standard__label {
    grid-row: 1; grid-column: 2;
    text-align: left;
    align-self: start;
    min-height: 0;
    max-width: none;
    display: block;
  }
  .standards__grid--3 .standard__heading {
    grid-row: 2; grid-column: 2;
    text-align: left;
    max-width: none;
  }
  .standards__grid--3 .standard__body {
    grid-row: 3; grid-column: 2;
    text-align: left;
    max-width: 56ch;
  }
}
@media (min-width: 1024px) {
  .standards__grid--3 {
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: auto auto auto 1fr;
    gap: 0 var(--space-6);
  }
  .standards__grid--3 .standard {
    grid-template-rows: subgrid;
    grid-row: span 4;
    padding-inline: var(--space-3);
    border-left: 1px solid var(--color-border-deep);
  }
  .standards__grid--3 .standard:first-child { border-left: 0; }
  .standards__grid--3 .standard__icon  { grid-row: 1; align-self: end; }
  .standards__grid--3 .standard__label { grid-row: 2; }
  .standards__grid--3 .standard__heading {
    grid-row: 3;
    text-align: center;
    margin-inline: auto;
  }
  .standards__grid--3 .standard__body {
    grid-row: 4;
    max-width: 34ch;
    margin-inline: auto;
  }
}

/* =========================================================================
   ABOUT §7 — Privacy first (ivory)
   Asymmetric two-column: editorial photo left, bordered trust panel right.
   Panel uses Cormorant title, three promise rows separated by hairlines,
   labels in small-caps (Manrope) and bodies in Manrope at reading size.
   Stacks photo-over-panel on narrow viewports.
   ========================================================================= */
.about-privacy {
  padding-block: clamp(72px, 9vw, 128px);
}
.about-privacy__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(28px, 4vw, 56px);
  align-items: start;
}
@media (min-width: 900px) {
  .about-privacy__inner {
    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
    gap: clamp(40px, 4.5vw, 72px);
    align-items: center;
  }
}

.about-privacy__media {
  margin: 0;
  display: grid;
  gap: var(--space-3);
}
.about-privacy__media picture,
.about-privacy__media img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: var(--radius-md, 4px);
}
@media (min-width: 900px) {
  .about-privacy__media picture,
  .about-privacy__media img {
    aspect-ratio: 4 / 5;
  }
}
.about-privacy__caption {
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1rem;
  line-height: 1.5;
  color: var(--color-ink-muted);
  display: flex;
  gap: var(--space-3);
  align-items: baseline;
  max-width: 48ch;
}
.about-privacy__caption .dash {
  color: var(--color-accent);
  font-style: normal;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  flex-shrink: 0;
}

.about-privacy__panel {
  background: var(--color-bg-cream, #F2EBDD);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md, 4px);
  padding: clamp(28px, 4vw, 48px);
  position: relative;
  isolation: isolate;
}
/* Subtle warm accent — a 2px hairline along the top edge using the
   same accent tone as elsewhere on the page. */
.about-privacy__panel::before {
  content: "";
  position: absolute;
  inset: -1px -1px auto -1px;
  height: 2px;
  background: var(--color-accent);
  border-top-left-radius: var(--radius-md, 4px);
  border-top-right-radius: var(--radius-md, 4px);
  z-index: 0;
}
.about-privacy__panel > * { position: relative; z-index: 1; }

.about-privacy__panel .eyebrow--rule {
  color: var(--color-ink-soft, var(--color-ink-muted));
}
.about-privacy__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2rem, 1.4vw + 1.6rem, 2.875rem);
  line-height: 1.05;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin: var(--space-3) 0 var(--space-5);
}
.about-privacy__title em {
  font-style: italic;
  color: var(--color-accent);
}

.about-privacy__promises {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0;
}
.about-privacy__promise {
  display: grid;
  grid-template-columns: 1fr;
  gap: 6px;
  padding-block: clamp(16px, 2vw, 22px);
  border-top: 1px solid var(--color-border-cream);
}
.about-privacy__promise:first-child { border-top: 0; padding-top: 0; }
.about-privacy__promise:last-child { padding-bottom: 0; }

.about-privacy__promise-label {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-accent);
}
.about-privacy__promise-body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
}
.about-privacy__promise-body strong {
  color: var(--color-ink-deep);
  font-weight: 600;
}
.about-privacy__promise-body a {
  color: var(--color-ink-deep);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: var(--color-accent);
}
.about-privacy__promise-body a:hover {
  text-decoration-color: var(--color-ink-deep);
}

/* =========================================================================
   §1.5 — Trust bar (ivory)
   Slim band between hero and §2. Stat-only Google rating: G mark, gold
   stars, display-serif rating number, tracked small-caps label, and a
   read-reviews link. A single vertical hairline marks the rhythm between
   the rating cluster and the link cluster. Wraps to two rows on narrow
   viewports without ever scrolling horizontally.
   ========================================================================= */
.trust-bar {
  background: var(--color-bg-ivory);
  color: var(--color-ink-deep);
  /* Clean cuts, no hairlines: the dark hero → ivory step is the seam above,
     and the ivory → cream tonal step is the seam below. A bit more bottom
     space lets that lower step breathe instead of butting the next block. */
  padding-block: var(--space-6) var(--space-7);
  position: relative;
}
@media (min-width: 900px) {
  .trust-bar { padding-block: var(--space-7); }
}

.trust-bar__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  column-gap: var(--space-5);
  row-gap: var(--space-3);
  text-align: center;
}

.trust-bar__g {
  width: 20px;
  height: 20px;
  flex: none;
}
@media (min-width: 900px) {
  .trust-bar__g { width: 24px; height: 24px; }
}

.trust-bar__stars {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  line-height: 0;
}
.trust-bar__stars svg {
  width: 16px;
  height: 16px;
  display: block;
}
@media (min-width: 900px) {
  .trust-bar__stars svg { width: 18px; height: 18px; }
}

.trust-bar__rating {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.5rem;
  line-height: 1;
  color: var(--color-ink-deep);
  letter-spacing: -0.01em;
  /* Optical alignment with the star row baseline. */
  position: relative;
  top: 1px;
}
@media (min-width: 900px) {
  .trust-bar__rating { font-size: 1.75rem; top: 2px; }
}

/* Parenthetical review count beside the 5.0 rating. Quieter than the
   number itself — the rating is the headline, the count is the proof. */
.trust-bar__count {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--color-ink-muted);
  line-height: 1;
  position: relative;
  top: 1px;
  margin-left: calc(-1 * var(--space-2));
}
@media (min-width: 900px) {
  .trust-bar__count { font-size: 0.875rem; top: 2px; }
}

/* Thin vertical hairline between the rating cluster and the label/link
   cluster. Hidden when the bar wraps to two rows on narrow viewports,
   where the row break already creates separation. */
.trust-bar__divider {
  display: none;
  width: 1px;
  height: 18px;
  background: var(--color-border-cream);
  flex: none;
}
@media (min-width: 700px) {
  .trust-bar__divider { display: block; }
}

.trust-bar__label {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-muted);
  white-space: nowrap;
}

.trust-bar__link {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-accent);
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  /* Tap target: vertical padding lifts the hit area past 44px without
     bloating the visual line height. The visible underline is drawn
     by `border-bottom` on hover/focus and sits below the text glyph,
     not the padded edge. */
  padding: 13px 4px;
  margin: -13px -4px;
  border-bottom: 1px solid transparent;
  white-space: nowrap;
  transition: color var(--duration-micro) var(--ease-settle),
              border-color var(--duration-micro) var(--ease-settle);
}
.trust-bar__link:hover,
.trust-bar__link:focus-visible {
  color: var(--color-accent-hover);
  border-bottom-color: currentColor;
}
.trust-bar__link .arrow {
  transition: transform var(--duration-micro) var(--ease-settle);
}
.trust-bar__link:hover .arrow,
.trust-bar__link:focus-visible .arrow {
  transform: translateX(3px);
}

@media (max-width: 600px) {
  .trust-bar__inner {
    column-gap: var(--space-4);
    row-gap: var(--space-2);
  }
  .trust-bar__rating { font-size: 1.375rem; }
}

@media (prefers-reduced-motion: reduce) {
  .trust-bar__link,
  .trust-bar__link .arrow { transition: none; }
}

/* =========================================================================
   §8 — Reviews / Social-proof (warm blush spread)
   "Real clients. Real care." — three-column editorial composition with
   Google cards (left), iMessage mockup (center), floating bubbles (right),
   creator card + bleed CTA bar at the foot.
   ========================================================================= */

.testimonials {
  /* Local palette — kept off the global token set on purpose */
  --testimonials-bg:        var(--color-bg-ivory);       /* brand ivory — matches §2 ivory rhythm */
  --testimonials-surface:   var(--color-bg-cream);       /* gcards on warmer cream for definition */
  --testimonials-surface-2: var(--color-bg-ivory);       /* phone + bubble inners match section bg */
  --testimonials-border:    var(--color-border-cream);   /* brand hairline */
  --testimonials-ink:       var(--color-ink-deep);
  --testimonials-ink-soft:  var(--color-ink-soft);
  --testimonials-accent:    var(--color-accent);         /* terracotta */
  --testimonials-gold:      #D8A33B;                     /* google star — kept for brand recognition */
  --testimonials-verify:    #1F8B6A;                     /* verified mark — kept for brand recognition */

  position: relative;
  isolation: isolate;
  background: var(--testimonials-bg);
  color: var(--testimonials-ink);
  padding-block: clamp(10px, 1.2vw, 18px) clamp(8px, 0.9vw, 14px);
  overflow: hidden;
}

/* Corner botanicals — barely there */
.testimonials__leaf {
  position: absolute;
  width: clamp(160px, 18vw, 280px);
  height: auto;
  color: var(--testimonials-accent);
  opacity: 0.18;
  pointer-events: none;
  z-index: 0;
}
.testimonials__leaf--tr { top: 24px; right: -32px; transform: rotate(0deg); }
.testimonials__leaf--br { bottom: 120px; right: -36px; transform: rotate(180deg); opacity: 0.14; }

.testimonials__container {
  position: relative;
  z-index: 1;
}

/* ---------- main grid ---------- */
.testimonials__grid {
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.78fr) minmax(0, 0.9fr);
  gap: clamp(20px, 2.6vw, 40px);
  align-items: start;
}

.testimonials__col--left  { display: grid; gap: 4px; align-content: start; }
.testimonials__col--right { position: relative; min-height: 580px; }

/* ---------- editorial header ---------- */
.testimonials__eyebrow {
  color: var(--testimonials-accent);
  margin: 0;
}
.testimonials__eyebrow::before { background: var(--testimonials-accent); }

.testimonials__title {
  font-family: var(--font-serif);
  color: var(--testimonials-ink);
  font-size: clamp(1.5rem, 2.3vw, 2.1rem);
  line-height: 1.04;
  letter-spacing: -0.012em;
  font-weight: 500;
  margin: 0;
  text-wrap: balance;
}
.testimonials__title em {
  color: var(--testimonials-accent);
  font-style: italic;
  font-weight: 500;
}

.testimonials__ornament {
  display: none;
}

.testimonials__lede {
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: 0.78rem;
  line-height: 1.4;
  color: var(--testimonials-ink-soft);
  max-width: 38ch;
  margin: 0;
}

/* ---------- aggregate rating ---------- */
.testimonials__rating {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--space-3);
  align-items: center;
  padding-block: 6px;
  border-top: 1px solid var(--testimonials-border);
  border-bottom: 1px solid var(--testimonials-border);
  margin-top: 2px;
}
.testimonials__rating-num {
  font-family: var(--font-serif);
  font-size: clamp(1.85rem, 3vw, 2.5rem);
  font-weight: 500;
  color: var(--testimonials-ink);
  line-height: 0.95;
  margin: 0;
  letter-spacing: -0.02em;
}
.testimonials__rating-meta {
  display: grid;
  gap: 4px;
}
.testimonials__rating-stars {
  color: var(--testimonials-accent);
  font-size: 1.125rem;
  letter-spacing: 0.18em;
  line-height: 1;
}
.testimonials__rating-caption {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.35;
  color: var(--testimonials-ink-soft);
  letter-spacing: 0.02em;
  margin: 0;
}

/* ---------- Google review cards ---------- */
.gcards {
  list-style: none;
  padding: 0;
  margin: 4px 0 0;
  display: grid;
  gap: 9px;
}
.gcard {
  position: relative;
  background: var(--testimonials-surface);
  border: 1px solid var(--testimonials-border);
  border-radius: 6px;
  padding: 8px 12px 10px;
  box-shadow: 0 14px 32px -24px rgba(155, 81, 69, 0.28);
}
.gcard__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: 2px;
}
.gcard__g {
  display: inline-flex;
  width: 22px;
  height: 22px;
}
.gcard__g svg { width: 100%; height: 100%; }
.gcard__stars {
  color: var(--testimonials-gold);
  font-size: 0.9375rem;
  letter-spacing: 0.14em;
  line-height: 1;
}
.gcard__time {
  margin-left: auto;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  color: var(--testimonials-ink-soft);
  letter-spacing: 0.04em;
}
.gcard__name {
  display: flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.875rem;
  color: var(--testimonials-ink);
  margin: 0 0 4px;
}
.gcard__verified {
  display: inline-flex;
  width: 14px;
  height: 14px;
  color: var(--testimonials-verify);
}
.gcard__verified svg { width: 100%; height: 100%; }
.gcard__body {
  font-family: var(--font-sans);
  font-size: 0.74rem;
  line-height: 1.4;
  color: var(--testimonials-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  padding-right: 20px;
}
.gcard--open .gcard__body {
  display: block;
  -webkit-line-clamp: unset;
  line-clamp: unset;
  overflow: visible;
}
.gcard__expand {
  display: inline-block;
  margin-top: 6px;
  padding: 2px 0;
  font-family: var(--font-sans);
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--testimonials-accent);
  background: none;
  border: 0;
  border-bottom: 1px solid rgba(155, 81, 69, 0.35);
  cursor: pointer;
  transition: border-color var(--duration-micro) var(--ease-settle),
              color var(--duration-micro) var(--ease-settle);
}
.gcard__expand:hover,
.gcard__expand:focus-visible {
  border-bottom-color: var(--testimonials-accent);
  color: var(--color-accent-hover);
  outline: none;
}
.gcard__expand::after {
  content: " →";
  display: inline-block;
  margin-left: 2px;
  transition: transform var(--duration-micro) var(--ease-settle);
}
.gcard--open .gcard__expand::after {
  transform: rotate(-90deg) translateX(1px);
}
.gcard__heart {
  position: absolute;
  right: var(--space-4);
  bottom: 10px;
  display: inline-flex;
  width: 14px;
  height: 14px;
  color: var(--testimonials-accent);
  opacity: 0.55;
}
.gcard__heart svg { width: 100%; height: 100%; }

.testimonials__more {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--testimonials-accent);
  text-decoration: none;
  letter-spacing: 0.04em;
  margin-top: 4px;
  border-bottom: 1px solid var(--testimonials-accent);
  align-self: start;
  padding-bottom: 2px;
  transition: color var(--duration-micro) var(--ease-settle);
}
.testimonials__more:hover { color: var(--color-accent-hover); border-color: var(--color-accent-hover); }
.testimonials__more .arrow { display: inline-block; transition: transform var(--duration-micro) var(--ease-settle); }
.testimonials__more:hover .arrow { transform: translateX(3px); }

/* ---------- iPhone iMessage mockup ---------- */
.phone {
  margin: 6px auto 0;
  max-width: 260px;
  width: 100%;
  display: grid;
  justify-items: center;
  gap: 4px;
  align-self: start;
}
.phone__frame {
  position: relative;
  width: 100%;
  aspect-ratio: 9 / 19;
  background: #1B0D0D;
  border-radius: 34px;
  padding: 8px;
  box-shadow:
    0 32px 70px -28px rgba(46, 21, 23, 0.45),
    0 2px 0 rgba(255, 255, 255, 0.04) inset;
}
.phone__notch {
  position: absolute;
  top: 14px;
  left: 50%;
  transform: translateX(-50%);
  width: 30%;
  height: 22px;
  background: #0A0606;
  border-radius: 14px;
  z-index: 2;
}
.phone__screen {
  position: relative;
  width: 100%;
  height: 100%;
  background: linear-gradient(180deg, var(--testimonials-surface-2) 0%, var(--testimonials-bg) 100%);
  border-radius: 28px;
  overflow: hidden;
  padding: 44px 14px 16px;
  display: grid;
  gap: 10px;
  align-content: start;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.phone__chat-head {
  display: grid;
  grid-template-columns: auto auto 1fr;
  align-items: center;
  gap: 8px;
  font-size: 11px;
  color: var(--testimonials-ink);
  margin-bottom: 2px;
}
.phone__chat-back {
  color: var(--testimonials-accent);
  font-size: 18px;
  line-height: 1;
}
.phone__chat-avatar {
  width: 24px;
  height: 24px;
  background: var(--testimonials-accent);
  color: var(--color-ink-cream);
  border-radius: 50%;
  display: inline-grid;
  place-items: center;
  font-family: var(--font-serif);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
}
.phone__chat-avatar--heart {
  background: var(--testimonials-surface);
  color: var(--testimonials-accent);
  border: 1px solid var(--testimonials-border);
}
.phone__chat-avatar--heart svg {
  width: 12px;
  height: 12px;
  display: block;
}
.phone__chat-name {
  font-size: 12px;
  font-weight: 600;
  color: var(--testimonials-ink);
  font-family: var(--font-serif);
  font-style: italic;
  letter-spacing: 0.005em;
}
.phone__chat-sparkle {
  color: var(--testimonials-accent);
  font-size: 10px;
  margin: 0 1px 0 2px;
  font-style: normal;
}
.phone__chat-chev {
  color: var(--testimonials-ink-soft);
  font-style: normal;
  margin-left: 1px;
}
.phone__chat-time {
  text-align: center;
  font-size: 9.5px;
  color: var(--testimonials-ink-soft);
  letter-spacing: 0.04em;
  line-height: 1.3;
  margin: 2px 0 4px;
}
.phone__msg {
  position: relative;
  max-width: 80%;
  padding: 8px 11px;
  border-radius: 16px;
  font-size: 11.5px;
  line-height: 1.35;
}
.phone__msg p { margin: 0; }
.phone__msg--in {
  background: var(--testimonials-surface);
  color: var(--testimonials-ink);
  border-bottom-left-radius: 5px;
  justify-self: start;
}
.phone__msg--out {
  background: var(--testimonials-accent);
  color: var(--color-ink-cream);
  border-bottom-right-radius: 5px;
  justify-self: end;
}
.phone__msg-react {
  position: absolute;
  bottom: -8px;
  right: -6px;
  width: 18px;
  height: 18px;
  background: var(--color-ink-cream);
  color: var(--testimonials-accent);
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 10px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}

.phone__caption {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.06em;
  color: var(--testimonials-ink-soft);
  text-transform: uppercase;
  opacity: 0.7;
}

/* ---------- floating bubbles (right column) ---------- */
.bubbles {
  list-style: none;
  padding: 0;
  margin: 0;
  position: relative;
  min-height: 580px;
}
.bubble {
  position: absolute;
  background: var(--testimonials-surface-2);
  border: 1px solid var(--testimonials-border);
  border-radius: 18px;
  padding: var(--space-3) var(--space-3) calc(var(--space-3) + 4px);
  width: 78%;
  box-shadow: 0 18px 40px -28px rgba(155, 81, 69, 0.32);
}
.bubble--2 { background: var(--testimonials-surface); }
.bubble p {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  line-height: 1.5;
  color: var(--testimonials-ink);
  margin: 0;
}
.bubble__heart {
  position: absolute;
  bottom: 10px;
  right: 14px;
  display: inline-flex;
  width: 14px;
  height: 14px;
  color: var(--testimonials-accent);
}
.bubble__heart svg { width: 100%; height: 100%; }

.bubble__cite {
  display: block;
  margin-top: var(--space-3);
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--testimonials-ink);
}
.bubble__cite-tag {
  font-weight: 400;
  color: var(--testimonials-ink-soft);
  margin-left: 2px;
}

/* deterministic loose grid — three bubbles, generously spaced */
.bubble--1 { top: 0%;    right: 0;    border-bottom-left-radius: 6px;  width: 82%; }
.bubble--2 { top: 30%;   right: 14%;  border-bottom-right-radius: 6px; width: 68%; }
.bubble--3 { top: 74%;   right: 0;    border-bottom-left-radius: 6px;  width: 78%; }

/* ---------- featured bubble (Jason K. — editorial promotion) ---------- */
.bubble--featured {
  top: auto;
  bottom: 0;
  right: 0;
  width: 100%;
  padding: var(--space-4) var(--space-4) var(--space-3);
  background: var(--testimonials-surface);
  border-color: rgba(155, 81, 69, 0.22);
  border-bottom-left-radius: 6px;
  box-shadow: 0 26px 50px -28px rgba(155, 81, 69, 0.36);
}
.bubble--featured .bubble__heart { display: none; }
.bubble__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--testimonials-accent);
  margin: 0 0 var(--space-2);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.bubble__eyebrow span {
  font-size: 0.78rem;
  line-height: 0;
}
.bubble--featured .bubble__headline {
  font-family: var(--font-serif);
  font-size: clamp(1.02rem, 1.35vw, 1.22rem);
  font-weight: 500;
  line-height: 1.2;
  color: var(--testimonials-ink);
  margin: 0 0 8px;
}
.bubble--featured .bubble__headline em {
  font-style: italic;
  color: var(--testimonials-accent);
  font-weight: 500;
}
.bubble__rule {
  border: none;
  border-top: 1px solid var(--testimonials-border);
  width: 36px;
  margin: 0 0 var(--space-2);
}
.bubble__stars {
  display: block;
  margin: 10px 0 0;
  color: var(--testimonials-accent);
  font-size: 0.82rem;
  letter-spacing: 0.18em;
  line-height: 1;
}
.bubble--featured .bubble__cite {
  margin-top: 8px;
}

/* ---------- bottom bookline — paired text links ---------- */
.testimonials__bookline {
  margin-top: clamp(24px, 3vw, 40px);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-4);
  flex-wrap: wrap;
  border-top: 1px solid var(--testimonials-border);
  padding-top: clamp(16px, 2vw, 24px);
}
.testimonials__booklink {
  font-family: var(--font-sans);
  font-size: 0.84rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--testimonials-accent);
  text-decoration: none;
  padding-bottom: 2px;
  border-bottom: 1px solid var(--testimonials-accent);
  transition: color var(--duration-micro) var(--ease-settle),
              border-color var(--duration-micro) var(--ease-settle);
}
.testimonials__booklink--quiet {
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--testimonials-ink-soft);
  border-bottom-color: var(--testimonials-border);
}
.testimonials__booklink:hover {
  color: var(--color-accent-hover);
  border-color: var(--color-accent-hover);
}
.testimonials__booklink--quiet:hover {
  color: var(--testimonials-accent);
  border-color: var(--testimonials-accent);
}
.testimonials__booklink .arrow {
  display: inline-block;
  margin-left: 4px;
  transition: transform var(--duration-micro) var(--ease-settle);
  font-weight: 400;
}
.testimonials__booklink:hover .arrow { transform: translateX(4px); }

/* ---------- desktop: align the phone to the review column ----------
   Bottom-anchor the device frame to the bottom of the Google review cards
   (Taruna B.), so its top edge lands at the "Real clients" heading. The
   caption floats just below the frame so it doesn't push the device up. */
@media (min-width: 961px) {
  .phone {
    align-self: end;
    max-width: 300px;
    margin: 0 auto;
    position: relative;
  }
  .phone__caption {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    margin: 8px 0 0;
  }
}

/* ---------- mobile / narrow layouts ---------- */
@media (max-width: 960px) {
  .testimonials__grid {
    grid-template-columns: 1fr;
    gap: clamp(20px, 4vw, 32px);
  }
  .testimonials__col--right { min-height: auto; }
  .bubbles { position: static; min-height: auto; display: grid; gap: var(--space-2); }
  .bubble {
    position: static;
    width: 100%;
  }
  .bubble--1, .bubble--2, .bubble--3, .bubble--4 {
    top: auto; right: auto;
  }
  .phone { max-width: 240px; }
  .testimonials__leaf { display: none; }   /* skip ornaments on small screens */
}

@media (max-width: 720px) {
  .testimonials__bookline {
    justify-content: center;
    padding-top: clamp(14px, 4vw, 20px);
  }
}

/* ---------- motion ---------- */
@media (prefers-reduced-motion: no-preference) {
  .bubble {
    opacity: 0;
    transform: translateY(8px);
    animation: bubbleIn 600ms var(--ease-settle, ease-out) forwards;
  }
  .bubble--1 { animation-delay: 80ms; }
  .bubble--2 { animation-delay: 220ms; }
  .bubble--3 { animation-delay: 360ms; }
  .bubble--4 { animation-delay: 500ms; }
  @keyframes bubbleIn {
    to { opacity: 1; transform: translateY(0); }
  }
}

/* =========================================================================
   === contact page ===
   ========================================================================= */

.contact-page { background: var(--color-bg-cream); }

/* ---- §1 Hero (no left band — compensate with larger type + plate)
       Fits within one viewport on desktop; plate is height-capped so the
       photo never bleeds past the fold. ---- */
.contact-hero {
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  padding: clamp(96px, 12vh, 128px) 0 clamp(48px, 6vh, 80px);
}
.contact-hero__inner {
  width: 100%;
  display: grid;
  grid-template-columns: 0.95fr 1.1fr;
  gap: clamp(40px, 6vw, 96px);
  align-items: center;
}
.contact-hero__text {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: var(--space-5); max-width: 540px;
}
.contact-hero__ornament-droplet,
.contact-hero__ornament-heart {
  display: inline-block; width: 22px; height: 22px; color: var(--color-accent);
}
.contact-hero__ornament-heart { width: 26px; height: 26px; opacity: 0.85; margin-top: var(--space-2); }
.contact-hero__headline {
  font-family: var(--font-serif); font-weight: 500;
  font-size: clamp(3.25rem, 6.5vw + 1rem, 5.75rem);
  line-height: 1.02; letter-spacing: -0.025em;
  color: var(--color-ink-deep); margin: 0; text-wrap: balance;
}
.contact-hero__headline em { font-style: italic; color: var(--color-accent); font-weight: 500; }
.contact-hero__sub {
  font-family: var(--font-sans); font-size: clamp(var(--font-size-md), 1.1vw + 0.7rem, 1.25rem);
  line-height: 1.6; color: var(--color-ink-muted);
  max-width: 44ch; margin: 0;
}
.contact-hero__plate {
  position: relative; width: 100%; aspect-ratio: 5 / 6;
  max-height: 68vh;
  border-radius: 6px; overflow: hidden;
  background: var(--color-surface-cream);
  box-shadow: 0 36px 80px -34px rgba(27, 13, 13, 0.42), 0 12px 28px -14px rgba(27, 13, 13, 0.25);
}
.contact-hero__plate picture,
.contact-hero__plate img { width: 100%; height: 100%; object-fit: cover; display: block; }
.contact-hero__plate-glyph {
  display: none; position: absolute; inset: 0;
  align-items: center; justify-content: center;
  color: var(--color-accent); opacity: 0.45;
}
.contact-hero__plate-glyph svg { width: 72px; height: 72px; }
.contact-hero__plate--placeholder .contact-hero__plate-glyph { display: flex; }
@media (max-width: 900px) {
  .contact-hero {
    min-height: 0;
    display: block;
    padding: clamp(96px, 14vh, 128px) 0 clamp(64px, 8vh, 96px);
  }
  /* Photo sits beside the text (not stacked above it). The narrower image
     column needs a smaller headline so it doesn't wrap into a wall. */
  .contact-hero__inner {
    grid-template-columns: 1fr 0.86fr;
    gap: var(--space-4);
    align-items: stretch;
  }
  /* Let the photo fill the full height of the text column instead of a
     fixed aspect ratio, so the two columns line up top and bottom. */
  .contact-hero__plate { aspect-ratio: auto; height: 100%; max-height: none; }
  .contact-hero__text { max-width: 100%; gap: var(--space-4); }
  .contact-hero__headline { font-size: clamp(1.75rem, 6vw + 0.3rem, 3.25rem); }
  .contact-hero__sub { font-size: var(--font-size-md); }
}

/* ---- §2 Contact panel ---- */
.contact-panel {
  position: relative; z-index: 2;
  padding: 0 0 clamp(96px, 12vh, 140px);
  margin-top: clamp(-180px, -11vw, -110px);
}
.contact-panel__grid {
  display: grid;
  grid-template-columns: 1.25fr 0.85fr;
  gap: clamp(24px, 3vw, 40px);
}
@media (max-width: 900px) {
  .contact-panel { margin-top: -64px; padding-bottom: var(--space-9); }
  .contact-panel__grid { grid-template-columns: 1fr; }
}
.contact-card {
  background: var(--color-bg-ivory); border-radius: 10px;
  box-shadow: 0 36px 80px -34px rgba(27, 13, 13, 0.35), 0 10px 24px -12px rgba(27, 13, 13, 0.22);
}

/* Form card */
.contact-form-card { padding: clamp(32px, 5vw, 64px); }
.contact-form-card__head {
  text-align: center; display: flex; flex-direction: column; align-items: center;
  gap: var(--space-2); margin-bottom: var(--space-6);
}
.contact-form-card__badge {
  display: inline-flex; align-items: center; justify-content: center;
  width: 56px; height: 56px; border-radius: 999px;
  background: var(--color-bg-deep); color: var(--color-ink-cream);
  margin-bottom: var(--space-3);
}
.contact-form-card__badge svg { width: 26px; height: 26px; color: var(--color-accent-soft); }
.contact-form-card__title {
  font-family: var(--font-serif); font-weight: 500;
  font-size: clamp(1.75rem, 2.2vw + 0.5rem, 2.25rem);
  line-height: 1.1; color: var(--color-ink-deep); margin: 0;
}
.contact-form-card__sub {
  font-family: var(--font-sans); font-size: var(--font-size-sm);
  color: var(--color-ink-muted); margin: 0;
}
.contact-form-card__rule { display: block; width: 32px; height: 1px; background: var(--color-accent); margin-top: var(--space-3); }

.contact-form { display: grid; gap: var(--space-5); }
.contact-form__row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
@media (max-width: 560px) { .contact-form__row { grid-template-columns: 1fr; } }
.contact-form__field { display: flex; flex-direction: column; gap: var(--space-2); }
.contact-form__label {
  font-family: var(--font-sans); font-size: 0.6875rem;
  letter-spacing: 0.16em; text-transform: uppercase; font-weight: 600;
  color: var(--color-ink-soft);
}
.contact-form__label-opt { letter-spacing: 0.08em; text-transform: none; font-weight: 400; color: var(--color-ink-muted); font-style: italic; }
.contact-form__input {
  font-family: var(--font-sans); font-size: 1rem; line-height: 1.5;
  color: var(--color-ink-deep); background: #fff;
  border: 1px solid var(--color-border-cream); border-radius: 2px;
  padding: 12px 14px; min-height: 48px;
  transition: border-color 200ms ease-out, box-shadow 200ms ease-out;
}
.contact-form__input::placeholder { color: var(--color-ink-soft); opacity: 0.7; }
.contact-form__input:focus {
  outline: none; border-color: var(--color-accent);
  box-shadow: 0 0 0 3px rgba(155, 81, 69, 0.18);
}
.contact-form__select {
  appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--color-ink-soft) 50%), linear-gradient(135deg, var(--color-ink-soft) 50%, transparent 50%);
  background-position: calc(100% - 18px) center, calc(100% - 13px) center;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; padding-right: 36px;
}
.contact-form__textarea { min-height: 110px; resize: vertical; }
.contact-form__submit { margin-top: var(--space-2); width: 100%; justify-content: center; }
.contact-form__privacy {
  display: flex; align-items: flex-start; justify-content: center;
  gap: var(--space-2); text-align: center; line-height: 1.5;
  font-family: var(--font-sans); font-size: var(--font-size-sm);
  color: var(--color-ink-muted); margin: var(--space-2) 0 0;
}
.contact-form__lock { color: var(--color-ink-soft); display: inline-flex; }
.contact-form__lock svg { width: 14px; height: 14px; margin-top: 2px; }

/* Info card */
.contact-info { padding: clamp(28px, 4vw, 40px); }
.contact-info__title {
  font-family: var(--font-serif); font-weight: 500;
  font-size: clamp(1.5rem, 1.8vw + 0.5rem, 1.875rem);
  line-height: 1.15; color: var(--color-ink-deep); margin: 0;
}
.contact-info__rule { display: block; width: 28px; height: 1px; background: var(--color-accent); margin: var(--space-3) 0 var(--space-6); }
.contact-info__list { list-style: none; padding: 0; margin: 0; display: grid; gap: var(--space-5); }
.contact-info__row { display: grid; grid-template-columns: 36px 1fr; gap: var(--space-4); align-items: center; }
.contact-info__icon {
  width: 36px; height: 36px; border-radius: 999px;
  border: 1px solid var(--color-accent); color: var(--color-accent);
  display: inline-flex; align-items: center; justify-content: center;
}
.contact-info__icon svg { width: 18px; height: 18px; }
.contact-info__label {
  font-family: var(--font-sans); font-size: 0.6875rem;
  letter-spacing: 0.16em; text-transform: uppercase; font-weight: 600;
  color: var(--color-ink-soft); margin: 0 0 2px;
}
.contact-info__value {
  font-family: var(--font-sans); font-size: var(--font-size-md);
  color: var(--color-ink-deep); margin: 0; line-height: 1.4;
}
.contact-info__value a { color: inherit; text-decoration: none; transition: color 200ms ease-out; }
.contact-info__value a:hover { color: var(--color-accent); }

.contact-info__chip {
  margin-top: var(--space-7); padding: var(--space-4);
  display: grid; grid-template-columns: 32px 1fr; gap: var(--space-4); align-items: center;
  border: 1px solid var(--color-border-cream); border-radius: 4px;
  background: rgba(228, 211, 184, 0.4);
}
.contact-info__chip-icon { color: var(--color-accent); display: inline-flex; }
.contact-info__chip-icon svg { width: 26px; height: 26px; }
.contact-info__chip-label {
  font-family: var(--font-sans); font-size: 0.6875rem;
  letter-spacing: 0.14em; text-transform: uppercase; font-weight: 600;
  color: var(--color-ink-deep); margin: 0;
}
.contact-info__chip-sub { font-family: var(--font-sans); font-size: var(--font-size-sm); color: var(--color-ink-muted); margin: 2px 0 0; }

/* ---- §3 Gallery (real session photography) ---- */
.gallery-section { position: relative; z-index: 1; }
.gallery-section__head { text-align: center; margin-bottom: var(--space-7); }
.gallery-section__lede {
  font-family: var(--font-sans); font-size: var(--font-size-sm);
  color: var(--color-ink-muted); margin: var(--space-3) auto 0; max-width: 52ch;
}
/* Peek carousel: the centered slide is full; neighbours sliver in on each side. */
.gallery-carousel { position: relative; --slide: 50%; }
@media (max-width: 900px) { .gallery-carousel { --slide: 66%; } }
@media (max-width: 560px) { .gallery-carousel { --slide: 82%; } }

.gallery-track {
  list-style: none; margin: 0;
  display: flex; gap: var(--space-4);
  overflow-x: auto; overflow-y: hidden;
  scroll-snap-type: x mandatory; scroll-behavior: smooth;
  padding-block: var(--space-2);
  scrollbar-width: none; -ms-overflow-style: none;
}
.gallery-track::-webkit-scrollbar { display: none; }
/* Leading/trailing spacers let the first and last slides reach centre.
   Subtract one gap so the first slide sits dead-centre at scrollLeft 0. */
.gallery-track::before,
.gallery-track::after {
  content: ''; flex: 0 0 calc((100% - var(--slide)) / 2 - var(--space-4));
}

.gallery-slide {
  flex: 0 0 var(--slide); scroll-snap-align: center;
  transition: opacity 450ms var(--ease-settle), transform 450ms var(--ease-settle);
}
.gallery-slide:not(.is-active) { opacity: 0.5; transform: scale(0.93); }

.gallery__figure { margin: 0; }
.gallery__figure picture {
  display: block; overflow: hidden; border-radius: 6px;
  border: 1px solid var(--color-border-cream);
  background: var(--color-surface-cream);
  box-shadow: 0 14px 30px -22px rgba(27, 13, 13, 0.5);
}
.gallery__figure img {
  display: block; width: 100%; aspect-ratio: 4 / 5; object-fit: cover;
}
.gallery__caption {
  font-family: var(--font-serif); font-style: italic;
  font-size: var(--font-size-sm); line-height: 1.4;
  color: var(--color-ink-soft); margin-top: var(--space-3);
  text-align: center; min-height: 2.8em;
}

/* Prev/next controls, vertically centred on the image area */
.gallery-nav {
  position: absolute; top: 38%; transform: translateY(-50%);
  width: 46px; height: 46px; border-radius: 999px; z-index: 3;
  display: grid; place-items: center; cursor: pointer;
  background: var(--color-bg-ivory); color: var(--color-ink-deep);
  border: 1px solid var(--color-border-cream);
  box-shadow: 0 10px 24px -14px rgba(27, 13, 13, 0.5);
  transition: background 200ms ease-out, color 200ms ease-out, opacity 250ms ease-out;
}
.gallery-nav:hover { background: var(--color-ink-deep); color: var(--color-ink-cream); }
.gallery-nav:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; }
.gallery-nav svg { width: 20px; height: 20px; }
.gallery-nav--prev { left: var(--space-2); }
.gallery-nav--next { right: var(--space-2); }
.gallery-nav[disabled] { opacity: 0; pointer-events: none; }
@media (min-width: 561px) { .gallery-nav--prev { left: var(--space-5); } .gallery-nav--next { right: var(--space-5); } }

@media (prefers-reduced-motion: reduce) {
  .gallery-track { scroll-behavior: auto; }
  .gallery-slide { transition: opacity 200ms ease-out; transform: none; }
  .gallery-slide:not(.is-active) { transform: none; }
}
.gallery-section__cta { text-align: center; margin-top: var(--space-7); }
.gallery-section__cta a {
  display: inline-flex; align-items: center; gap: var(--space-3);
  padding: 14px 28px; border: 1px solid var(--color-ink-deep);
  color: var(--color-ink-deep); border-radius: 999px;
  font-family: var(--font-sans); font-size: 0.8125rem;
  letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500;
  transition: background 200ms ease-out, color 200ms ease-out;
}
.gallery-section__cta a:hover { background: var(--color-ink-deep); color: var(--color-ink-cream); }

/* ---- §4 TikTok strip ---- */
.tiktok-strip {
  background: var(--color-bg-cream);
  border-top: 1px solid var(--color-border-cream);
  border-bottom: 1px solid var(--color-border-cream);
}
.tiktok-strip__inner {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--space-3);
  padding: var(--space-6) var(--gutter-mobile);
}
.tiktok-strip__link {
  display: inline-flex; align-items: center; gap: var(--space-3);
  color: var(--color-ink-deep); transition: color 200ms ease-out;
}
.tiktok-strip__sep {
  width: 2.5rem; height: 1px; background: var(--color-border-cream);
}
@media (min-width: 600px) {
  .tiktok-strip__inner { flex-direction: row; gap: var(--space-5); }
  .tiktok-strip__sep { width: 1px; align-self: stretch; min-height: 1.25rem; }
}
.tiktok-strip__link:hover { color: var(--color-accent); }
.tiktok-strip__link:hover .tiktok-strip__handle { text-decoration: underline; text-underline-offset: 4px; }
.tiktok-strip__glyph { color: var(--color-accent); display: inline-flex; }
.tiktok-strip__glyph svg { width: 22px; height: 22px; }
.tiktok-strip__label {
  font-family: var(--font-sans); font-size: 0.75rem;
  letter-spacing: 0.16em; text-transform: uppercase; font-weight: 500;
  color: var(--color-ink-soft);
}
.tiktok-strip__dot { color: var(--color-ink-soft); }
.tiktok-strip__handle { font-family: var(--font-sans); font-size: 0.9375rem; color: var(--color-ink-deep); }

/* ---- §5 Booking banner ---- */
.booking-banner {
  background: var(--color-bg-espresso); color: var(--color-ink-cream);
  padding: clamp(64px, 9vh, 96px) 0;
  background-image:
    radial-gradient(ellipse at 50% 0%, rgba(194, 118, 107, 0.12), transparent 60%),
    radial-gradient(ellipse at 50% 100%, rgba(0, 0, 0, 0.5), transparent 60%);
}
.booking-banner__inner { display: grid; grid-template-columns: 1fr auto; gap: var(--space-7); align-items: center; }
.booking-banner__copy { display: grid; gap: var(--space-2); }
.booking-banner__copy .eyebrow { color: var(--color-ink-cream-mute); }
.booking-banner__top { font-family: var(--font-sans); font-size: var(--font-size-md); color: var(--color-ink-cream-mute); margin: 0; }
.booking-banner__headline {
  font-family: var(--font-serif); font-weight: 500;
  font-size: clamp(2rem, 3vw + 0.5rem, 2.75rem);
  line-height: 1.1; color: var(--color-ink-cream); margin: 0;
}
.booking-banner__headline em { font-style: italic; color: var(--color-accent-bright); font-weight: 500; }
.booking-banner__cta { white-space: nowrap; align-self: center; }

.trust-trio {
  grid-column: 1 / -1; list-style: none; padding: var(--space-6) 0 0; margin: var(--space-6) 0 0;
  border-top: 1px solid var(--color-border-deep);
  display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-5);
}
.trust-trio li { display: flex; align-items: center; justify-content: center; gap: var(--space-3); color: var(--color-ink-cream-mute); }
.trust-trio__icon { color: var(--color-accent-bright); display: inline-flex; }
.trust-trio__icon svg { width: 22px; height: 22px; }
.trust-trio__label {
  font-family: var(--font-sans); font-size: 0.75rem;
  letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500;
  color: var(--color-ink-cream);
}

@media (max-width: 800px) {
  .booking-banner__inner { grid-template-columns: 1fr; text-align: center; }
  .booking-banner__cta { justify-self: center; }
  .trust-trio { grid-template-columns: 1fr; gap: var(--space-4); }
  .trust-trio li { justify-content: center; }
}

/* =========================================================================
   §1.b — HERO BYLINE
   Whisper-italic Cormorant credit line between the display headline and
   the body sub. Reads like a typographic byline in a magazine — names
   the people behind the practice before the price line arrives. Sits on
   warm cream tone with a coral em-dash that picks up the accent palette.
   ========================================================================= */
.hero__byline {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.0625rem, 0.45vw + 1rem, 1.25rem);
  line-height: 1.45;
  color: var(--color-ink-cream);
  opacity: 0.92;
  margin: var(--space-5) 0 var(--space-6);
  letter-spacing: 0.005em;
  max-width: 42ch;
}
.hero__byline .dash {
  color: var(--color-accent-bright);
  margin-inline: 0.3em;
  font-style: normal;
}
@media (min-width: 900px) {
  .hero__byline {
    margin-top: var(--space-5);
    margin-bottom: var(--space-6);
    max-width: 48ch;
  }
}

/* =========================================================================
   §5.5 — WHAT TO EXPECT  ·  Editorial concierge note
   Activation-energy reduction block between Process (arches) and Closing.
   Itinerary feel: roman-numeral marker in italic accent (carries the same
   coral as hero byline dash), hairline rule above each row, micro-tracked
   small-caps sans titles, soft-ink body copy. Quieter than Process — no
   media, no icons — so the page breathes before the closing CTA lands.
   ========================================================================= */
.expect {
  display: grid;
  gap: var(--space-9);
}
.expect__head {
  max-width: 58ch;
  margin-inline: auto;
  text-align: center;
}
.expect__head .h-section {
  margin-top: var(--space-4);
}
.expect__lede {
  margin-top: var(--space-5);
}
.expect__list {
  list-style: none;
  margin: 0 auto;
  padding: 0;
  display: grid;
  gap: var(--space-7);
  grid-template-columns: 1fr;
  max-width: 900px;
}
@media (min-width: 760px) {
  .expect__list {
    grid-template-columns: 1fr 1fr;
    column-gap: var(--space-10);
    row-gap: var(--space-8);
  }
}
.expect__item {
  display: grid;
  grid-template-columns: auto 1fr;
  column-gap: var(--space-5);
  row-gap: var(--space-3);
  align-items: start;
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
}
.expect__marker {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: 1.625rem;
  line-height: 1;
  color: var(--color-accent);
  padding-top: 0.1em;
  letter-spacing: 0.04em;
  grid-row: span 2;
}
.expect__title {
  grid-column: 2;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
  margin: 0;
  padding-top: 0.4em;
}
.expect__desc {
  grid-column: 2;
  margin: 0;
  font-size: 1.0625rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
  max-width: 42ch;
}
@media (prefers-reduced-motion: no-preference) {
  .expect__item {
    transition: border-color 350ms ease;
  }
  .expect__item:hover {
    border-top-color: var(--color-accent-line);
  }
}

/* -------------------------------------------------------------------------
   §1.7 — Plain-English primer (novice onboarding)
   Mirrors the .expect pattern (serif italic markers, small-caps titles,
   muted body) as a 3-up grid. Sits between the trust bar and the service
   options so a first-timer reads what/who/how before being asked to choose.
   ------------------------------------------------------------------------- */
.primer__head { max-width: 42ch; margin-inline: auto; text-align: center; }
.primer__head .h-section { margin-top: var(--space-4); }
.primer__grid {
  list-style: none;
  margin: var(--space-8) auto 0;
  padding: 0;
  display: grid;
  gap: var(--space-7);
  grid-template-columns: 1fr;
}
@media (min-width: 760px) {
  .primer__grid {
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-9, 64px);
    max-width: 760px;
  }
}
.primer__item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--space-3);
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-cream);
}
.primer__marker {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: 1.5rem;
  line-height: 1;
  color: var(--color-accent);
  letter-spacing: 0.04em;
}
.primer__title {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-deep);
  margin: 0;
}
.primer__desc {
  margin: 0 auto;
  font-size: 1.0625rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  max-width: 38ch;
}
.primer__desc a {
  color: var(--color-ink-deep);
  text-decoration: underline;
  text-decoration-color: var(--color-accent);
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  transition: color 200ms ease;
}
.primer__desc a:hover { color: var(--color-accent); }
@media (prefers-reduced-motion: no-preference) {
  .primer__item { transition: border-color 350ms ease; }
  .primer__item:hover { border-top-color: var(--color-accent-line); }
}

/* =============================================================================
   /what-is-iv-therapy — educational pillar page
   Library-feel typography page. Components prefixed `.edu-*` are scoped to this
   route; shared atoms (.pullquote, .compare, .cats, .sources, sup.cite) are
   reusable across future education pages (IM, NAD+, IV vs oral).
   ========================================================================= */

/* Inline citation superscripts -------------------------------------------- */
sup.cite {
  font-size: 0.65em;
  line-height: 1;
  margin-left: 1px;
  vertical-align: super;
}
sup.cite a {
  color: var(--color-accent);
  text-decoration: none;
  border-bottom: 0;
  padding: 0 2px;
  border-radius: 2px;
}
sup.cite a:hover {
  background: rgba(194, 118, 107, 0.12);
}
.section--deep sup.cite a,
.section--espresso sup.cite a,
.edu-hero sup.cite a { color: var(--color-accent-soft); }

/* Hero ------------------------------------------------------------------- */
.edu-hero {
  position: relative;
  min-height: auto;
  /* Clears the ~81px fixed nav with editorial breathing room, but no taller —
     the old 200px top + 128px bottom pushed the CTAs + trust strip below a
     laptop fold, so the hero read as "cut off". */
  padding-top: clamp(104px, 12vw, 148px);
  padding-bottom: clamp(var(--space-7), 6vw, var(--space-8));
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  overflow: hidden;
}
.edu-hero .grain { opacity: 0.16; }
.edu-hero__mark {
  position: absolute;
  top: clamp(96px, 10vw, 132px);
  right: clamp(24px, 5vw, 64px);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  z-index: 2;
}
@media (max-width: 720px) {
  .edu-hero__mark { display: none; }
}
.edu-hero__inner {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  align-items: start;
}
@media (min-width: 980px) {
  .edu-hero__inner {
    grid-template-columns: minmax(0, 1.5fr) minmax(280px, 380px);
    gap: var(--space-9);
  }
}
/* Inherits display:grid + gap from .page-hero__content, but the children below
   already carry their own deliberate (non-uniform) margins — the inherited gap
   double-counted that rhythm and bloated the hero. Let the margins own it. */
.edu-hero__content { max-width: 720px; gap: 0; }
.edu-hero__byline {
  color: var(--color-ink-cream-mute);
  margin-bottom: var(--space-5);
}
.edu-hero__byline .dash { color: var(--color-accent); padding: 0 0.35em; }
.edu-hero__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2.75rem, 6vw + 1rem, 5rem);
  line-height: 1.05;
  letter-spacing: -0.02em;
  margin: 0 0 var(--space-6);
  text-wrap: balance;
}
.edu-hero__headline em {
  font-style: italic;
  color: var(--color-accent-soft);
}
.edu-hero__open {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.25rem, 1.6vw + 0.75rem, 1.625rem);
  line-height: 1.4;
  color: var(--color-ink-cream);
  margin: 0 0 var(--space-6);
  max-width: 60ch;
}
.edu-hero__def {
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.7;
  color: var(--color-ink-cream-mute);
  margin: 0;
  max-width: 60ch;
}

/* In-brief sidebar card -------------------------------------------------- */
.in-brief {
  background: var(--color-surface-deep);
  border: 1px solid var(--color-border-deep);
  border-radius: 2px;
  padding: clamp(var(--space-6), 3vw, var(--space-7));
  position: relative;
}
.in-brief::before {
  content: "";
  position: absolute;
  inset: 0;
  border: 1px solid rgba(194, 118, 107, 0.18);
  border-radius: 2px;
  margin: 6px;
  pointer-events: none;
}
.in-brief__eyebrow {
  color: var(--color-accent-soft);
  margin: 0 0 var(--space-5);
  font-weight: 600;
}
.in-brief__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: var(--space-4);
}
.in-brief__list li {
  position: relative;
  padding-left: var(--space-5);
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-cream);
}
.in-brief__dot {
  position: absolute;
  left: 0;
  top: 0.65em;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-accent);
}

/* Section heads (shared across §2–§5) ------------------------------------ */
.edu-section__head { max-width: 760px; margin-bottom: var(--space-8); }
.edu-section__head--center { margin-left: auto; margin-right: auto; text-align: center; }
.edu-section__head--center .lede,
.edu-section__head--center .edu-section__lede { margin-left: auto; margin-right: auto; }
.edu-section__lede { margin-top: var(--space-5); max-width: 64ch; }
.edu-section__body {
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.7;
  color: var(--color-ink-muted);
  max-width: 64ch;
  margin: var(--space-5) 0 0;
}
.section--deep .edu-section__body { color: var(--color-ink-cream-mute); }

/* §3 explainer (#how-it-works) reads wide on desktop — the left-aligned
   intro + body run edge-light at 64ch, leaving the right half of the page
   empty and the column tall. Widening the measure on desktop only trades a
   few extra characters per line for noticeably less vertical run. Mobile
   keeps the comfortable 64ch. */
@media (min-width: 980px) {
  #how-it-works .edu-section__head { max-width: none; }
  #how-it-works .edu-section__lede,
  #how-it-works .edu-section__body { max-width: 88ch; }
}

/* Comparison table — IM / IV / Both ------------------------------------- */
.compare {
  margin: var(--space-7) auto 0;
  max-width: 1140px;
  background: var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  border-radius: 14px;
  padding: var(--space-5) var(--space-5) var(--space-3);
  box-shadow: 0 1px 0 rgba(91, 52, 55, 0.04);
}
.compare-foot {
  text-align: center;
}
.compare__title {
  display: none; /* legacy title kept for fallback; new layout uses column header row */
}
/* Mobile-first: a real 4-column chart that mirrors the desktop layout, just
   tighter — never a stack of repeated-label cards. The whole table stays
   visible at once on a phone so it reads as a chart, not a long scroll. */
.compare__row {
  display: grid;
  grid-template-columns: minmax(52px, 0.6fr) 1fr 1fr 1fr;
  gap: var(--space-2);
  padding: var(--space-3) 0;
  border-bottom: 1px solid var(--color-border-cream);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  line-height: 1.4;
  color: var(--color-ink-muted);
  align-items: start;
}
.compare__row:last-child { border-bottom: 0; }

/* Row label (left column) — icon stacks above caps label on mobile */
.compare__label {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 5px;
  font-size: 0.5rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 600;
  line-height: 1.25;
  color: var(--color-ink-deep);
}
.compare__label-icon {
  flex: 0 0 22px;
  width: 22px;
  height: 22px;
  display: inline-grid;
  place-items: center;
  border-radius: 999px;
  background: var(--color-bg-espresso);
  color: var(--color-ink-cream);
}
.compare__label-icon svg { width: 11px; height: 11px; display: block; }

/* Header row — column titles with chip icons */
.compare__row--head { padding: var(--space-3) 0 var(--space-4); }
.compare__row--head > span { display: flex; justify-content: center; }
.compare__chead {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 6px;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 0.8125rem;
  line-height: 1.1;
  color: var(--color-ink-deep);
  letter-spacing: 0.005em;
}
.compare__chip {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
}
.compare__chip-dot {
  width: 22px;
  height: 22px;
  display: inline-grid;
  place-items: center;
  border-radius: 999px;
  background: var(--color-bg-espresso);
  color: var(--color-ink-cream);
  box-shadow: 0 0 0 2px var(--color-bg-ivory);
}
.compare__chip-dot svg { width: 11px; height: 11px; display: block; }
.compare__chip-dot + .compare__chip-dot { margin-left: -7px; }
.compare__chip-plus { display: none; }
/* The data-col labels were only a stacked-layout affordance — unused now */
.compare__row > [role="cell"]::before { display: none; }

@media (min-width: 720px) {
  .compare {
    padding: var(--space-6) var(--space-7) var(--space-5);
    margin-inline: auto;
    width: min(100%, 1140px);
  }
  .compare__row {
    grid-template-columns: minmax(215px, 0.85fr) 1fr 1fr 1fr;
    gap: var(--space-5);
    padding: var(--space-5) 0;
    font-size: 1rem;
    line-height: 1.55;
  }
  .compare__label {
    flex-direction: row;
    align-items: center;
    gap: var(--space-3);
    font-size: 0.6875rem;
    letter-spacing: 0.18em;
    line-height: 1.3;
  }
  .compare__label-icon { flex: 0 0 26px; width: 26px; height: 26px; }
  .compare__label-icon svg { width: 13px; height: 13px; }
  .compare__row--head { padding: var(--space-4) 0 var(--space-5); }
  .compare__chead {
    flex-direction: row;
    text-align: left;
    gap: 12px;
    font-size: 1.375rem;
    line-height: 1.15;
  }
  .compare__chip-dot { width: 26px; height: 26px; }
  .compare__chip-dot svg { width: 13px; height: 13px; }
}
@media (min-width: 1100px) {
  .compare {
    width: 1140px;
    margin-inline: auto;
  }
}

/* Footer line below chart */
.compare-foot {
  margin: var(--space-5) 0 0;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.02em;
  color: var(--color-ink-soft);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
}
.compare-foot::before,
.compare-foot::after {
  content: "\2756"; /* ornamental diamond */
  color: var(--color-accent);
  font-size: 0.625rem;
  line-height: 1;
}

/* Pull-quote (shared) ---------------------------------------------------- */
.pullquote {
  margin: var(--space-8) 0 0;
  padding: 0;
  border: 0;
  position: relative;
  max-width: 760px;
}
.pullquote::before {
  content: "\201C";
  position: absolute;
  left: -0.15em;
  top: -0.25em;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: clamp(4rem, 8vw, 6rem);
  line-height: 1;
  color: var(--color-accent);
  opacity: 0.55;
}
.pullquote p {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.375rem, 2vw + 0.75rem, 1.875rem);
  line-height: 1.35;
  margin: 0 0 var(--space-4);
  padding-left: clamp(var(--space-7), 6vw, var(--space-8));
  color: var(--color-ink-deep);
}
.pullquote cite {
  display: block;
  padding-left: clamp(var(--space-7), 6vw, var(--space-8));
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-soft);
  font-style: normal;
}
.section--deep .pullquote p,
.section--espresso .pullquote p { color: var(--color-ink-cream); }
.section--deep .pullquote cite,
.section--espresso .pullquote cite { color: var(--color-ink-cream-mute); }

/* Blush-pink banner variant: bleeds off the page's left edge while the quote
   text stays aligned with the container. Flush left, rounded right. */
.pullquote--banner {
  --pq-bleed: calc(50vw - 50%);
  max-width: none;
  margin: var(--space-9) 0;
  margin-left: calc(-1 * var(--pq-bleed));
  padding: clamp(var(--space-6), 4vw, var(--space-8)) clamp(var(--space-5), 6vw, var(--space-8));
  padding-left: var(--pq-bleed);
  background: var(--color-blush-deep);
  border-radius: 0 28px 28px 0;
  box-shadow: 0 26px 50px -38px rgba(155, 81, 69, 0.55);
}
.pullquote--banner::before { display: none; }
.pullquote--banner p,
.pullquote--banner cite { padding-left: 0; }
.pullquote--banner p { color: var(--color-ink-deep); margin-bottom: var(--space-3); }
.pullquote--banner cite { color: var(--color-ink-muted); }

/* Three honest categories ------------------------------------------------ */
.cats {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}
@media (min-width: 820px) {
  .cats { grid-template-columns: repeat(3, 1fr); gap: var(--space-7); }
}
.cat {
  background: transparent;
  border-top: 1px solid var(--color-border-cream);
  padding: var(--space-6) 0 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.cat__icon {
  display: inline-flex;
  width: 40px;
  height: 40px;
  color: var(--color-accent);
}
.cat__icon svg { width: 100%; height: 100%; }
.cat__name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.5rem;
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
}
.cat__desc {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
  margin: 0;
}

/* IM-shots ingredient stack (the three shots, honestly) ------------------ */
.shots {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
}
@media (min-width: 820px) {
  .shots { gap: var(--space-9); }
}
.shot {
  border-top: 1px solid var(--color-border-cream);
  padding-top: var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  max-width: 760px;
}
.shot__eyebrow {
  margin: 0;
  color: var(--color-ink-soft);
}
.shot__h3 {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.625rem, 2.4vw + 0.5rem, 2.125rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
}
.shot__h3 em {
  font-style: italic;
  color: var(--color-accent);
}
.shot__body {
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.7;
  color: var(--color-ink-muted);
  margin: 0;
}
.shot__lead {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.125rem, 1vw + 0.75rem, 1.3125rem);
  line-height: 1.45;
  color: var(--color-ink-deep);
  margin: 0;
  padding-left: var(--space-5);
  border-left: 2px solid var(--color-accent);
}
.shot__hedge {
  margin: var(--space-3) 0 0;
  color: var(--color-ink-soft);
  font-weight: 500;
}
.shot--glutathione {
  position: relative;
}
.shot--glutathione::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  width: 64px;
  height: 1px;
  background: var(--color-accent);
}

/* What IV therapy is NOT block ------------------------------------------- */
.not-block {
  margin-top: var(--space-9);
  padding: clamp(var(--space-6), 3vw, var(--space-7));
  background: var(--color-surface-cream);
  border-left: 2px solid var(--color-accent);
  max-width: 760px;
}
.not-block__eyebrow {
  color: var(--color-ink-deep);
  font-weight: 600;
  margin: 0 0 var(--space-3);
}
.not-block__body {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
  margin: 0;
}

/* Education page step list (overrides on .qsteps__list) ------------------ */
.edu-steps {
  list-style: none;
  padding: 0;
  margin: var(--space-7) 0 0;
  display: grid;
  gap: 0;
  border-top: 1px solid var(--color-border-deep);
  max-width: 880px;
}
.section--cream .edu-steps,
.section--ivory .edu-steps { border-top-color: var(--color-border-cream); }
.edu-steps .qstep {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--space-5);
  padding: var(--space-7) 0;
  border-bottom: 1px solid var(--color-border-deep);
  align-items: start;
}
.section--cream .edu-steps .qstep,
.section--ivory .edu-steps .qstep { border-bottom-color: var(--color-border-cream); }
.edu-steps .qstep__num {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(3rem, 5vw + 1rem, 4.5rem);
  line-height: 1;
  color: var(--color-accent);
  opacity: 0.6;
}
.edu-steps .qstep__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.375rem, 1.4vw + 0.75rem, 1.75rem);
  line-height: 1.15;
  margin: 0 0 var(--space-3);
  letter-spacing: -0.01em;
}
.section--deep .edu-steps .qstep__title { color: var(--color-ink-cream); }
.edu-steps .qstep__desc {
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  line-height: 1.65;
  margin: 0;
  max-width: 56ch;
}
.section--deep .edu-steps .qstep__desc { color: var(--color-ink-cream-mute); }

/* Safety two-column ------------------------------------------------------ */
.safety-cols {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  margin-top: var(--space-7);
}
@media (min-width: 880px) {
  .safety-cols { grid-template-columns: 1fr 1fr; gap: var(--space-9); }
  .safety-cols.safety-cols--single { grid-template-columns: minmax(0, 720px); }
}
.safety-cols__eyebrow {
  color: var(--color-ink-deep);
  font-weight: 600;
  margin: 0 0 var(--space-5);
  padding-bottom: var(--space-3);
  border-bottom: 1px solid var(--color-border-cream);
}
.safety-cols__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: var(--space-4);
}
.safety-cols__list li {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  padding-left: var(--space-5);
  position: relative;
}
.safety-cols__list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.65em;
  width: 8px;
  height: 1px;
  background: var(--color-accent);
}
.safety-cols__list li strong {
  font-weight: 600;
  color: var(--color-ink-deep);
}
.safety-cols__list--bare li::before { background: var(--color-ink-soft); width: 4px; height: 4px; border-radius: 50%; top: 0.7em; }
.safety-cols__note {
  margin-top: var(--space-5);
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-soft);
  font-style: italic;
}
.safety__close {
  margin-top: var(--space-9);
  text-align: center;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: clamp(1.125rem, 1.4vw + 0.75rem, 1.375rem);
  line-height: 1.45;
  color: var(--color-ink-deep);
  max-width: 60ch;
  margin-left: auto;
  margin-right: auto;
}
.safety__close a {
  color: var(--color-accent);
  border-bottom: 1px solid currentColor;
  text-decoration: none;
}
.safety__close a:hover { color: var(--color-accent-hover); }

/* Closing section overrides --------------------------------------------- */
.edu-closing { padding: clamp(var(--space-10), 14vw, var(--space-11)) 0; }
.edu-closing__inner { max-width: 760px; }
.edu-closing__bridge {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.65;
  letter-spacing: 0.01em;
  color: var(--color-ink-cream-mute);
  max-width: 56ch;
  margin: var(--space-5) auto var(--space-7);
}
.edu-closing__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  justify-content: center;
  margin-top: var(--space-7);
}
.edu-disclaimer {
  margin: var(--space-9) auto 0;
  max-width: 64ch;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.7;
  letter-spacing: 0.04em;
  color: var(--color-ink-cream-mute);
  text-align: center;
  padding-top: var(--space-6);
  border-top: 1px solid rgba(245, 237, 221, 0.12);
}

/* Sources block --------------------------------------------------------- */
.sources {
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  padding: clamp(var(--space-8), 8vw, var(--space-9)) 0;
}
.sources__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 2vw + 0.75rem, 2rem);
  line-height: 1.15;
  margin: var(--space-4) 0 var(--space-7);
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
}
.sources__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: var(--space-5);
  max-width: 880px;
  counter-reset: src;
}
.sources__list li {
  display: grid;
  grid-template-columns: 28px 1fr;
  column-gap: var(--space-4);
  row-gap: var(--space-2);
  padding-bottom: var(--space-5);
  border-bottom: 1px solid rgba(245, 237, 221, 0.08);
  align-items: start;
}
.sources__list li:last-child { border-bottom: 0; }
.sources__num {
  grid-column: 1;
  grid-row: 1;
  justify-self: start;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 24px;
  border: 1px solid var(--color-accent);
  color: var(--color-accent);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.06em;
  font-weight: 600;
  border-radius: 999px;
}
/* Keep the link and its citation detail together in column 2 so the number
   column can't be stretched wide by a long journal line beneath it. */
.sources__list a { grid-column: 2; }
.sources__meta { grid-column: 2; }
.sources__list a {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-cream);
  border-bottom: 1px solid rgba(245, 237, 221, 0.25);
  text-decoration: none;
}
.sources__list a em {
  font-style: italic;
  color: var(--color-ink-cream-mute);
}
.sources__list a:hover { border-bottom-color: var(--color-accent); }
.sources__meta {
  display: block;
  margin-top: var(--space-2);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.06em;
  color: var(--color-ink-cream-mute);
}

/* Collapsible references — keeps the page end calm; the full list expands on
   demand and auto-opens when a citation link jumps to a #src-N inside it. */
.sources__toggle {
  max-width: 880px;
  border-top: 1px solid rgba(245, 237, 221, 0.14);
}
.sources__summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-5);
  padding: var(--space-6) 0 var(--space-5);
  cursor: pointer;
  list-style: none;
}
.sources__summary::-webkit-details-marker { display: none; }
.sources__summary:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 4px;
}
.sources__summary-title {
  display: block;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 2vw + 0.75rem, 2rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--color-ink-cream);
}
.sources__summary-meta {
  display: block;
  margin-top: var(--space-2);
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
}
/* Plus/minus glyph that becomes a minus when open */
.sources__summary-icon {
  position: relative;
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  color: var(--color-accent);
  transition: background-color 200ms ease, color 200ms ease;
}
.sources__summary:hover .sources__summary-icon {
  background: var(--color-accent);
  color: var(--color-bg-espresso);
}
.sources__summary-icon::before,
.sources__summary-icon::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 14px;
  height: 1.5px;
  background: currentColor;
  transform: translate(-50%, -50%);
  transition: transform 220ms ease;
}
.sources__summary-icon::after { transform: translate(-50%, -50%) rotate(90deg); }
.sources__toggle[open] .sources__summary-icon::after { transform: translate(-50%, -50%) rotate(0deg); }
.sources__toggle[open] .sources__list { margin-top: var(--space-6); }
@media (prefers-reduced-motion: reduce) {
  .sources__summary-icon::before,
  .sources__summary-icon::after,
  .sources__summary-icon { transition: none; }
}

/* IV Blends hero — "New to IV therapy?" intro link ---------------------- */
.page-hero__edu-link {
  margin-top: var(--space-4);
  font-family: var(--font-sans);
  font-size: 0.875rem;
  letter-spacing: 0.01em;
  color: var(--color-ink-cream-mute);
}
.page-hero__edu-link a {
  color: var(--color-ink-cream);
  text-decoration: none;
  border-bottom: 1px solid rgba(245, 237, 221, 0.25);
  padding-bottom: 2px;
  transition: border-color 200ms ease;
}
.page-hero__edu-link a em {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--color-accent-soft);
  font-size: 1.05em;
}
.page-hero__edu-link a:hover { border-bottom-color: var(--color-accent); }
.page-hero__edu-link .arrow { color: var(--color-accent); margin-left: 4px; }

/* Footer — 5-column variant (adds Education column) --------------------- */
/* Mobile: the brand block spans the full width, then the nav columns pair up
   2×2 so the footer reads horizontally instead of as one tall single-file
   stack (cuts the link grid roughly in half at 390px). */
.footer__grid--5,
.footer__grid--6 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-6) var(--space-5);
}
.footer__grid--5 > .footer__brand,
.footer__grid--6 > .footer__brand {
  grid-column: 1 / -1;
}
@media (min-width: 640px) {
  .footer__grid--5,
  .footer__grid--6 { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 960px) {
  .footer__grid--5 {
    grid-template-columns: 2.1fr 1.15fr 1.1fr 1.1fr 1.25fr;
    gap: var(--space-6);
  }
  .footer__grid--6 {
    grid-template-columns: 1.4fr repeat(5, 1fr);
    gap: var(--space-6);
  }
  /* Brand returns to its own first column on desktop — no longer spans. */
  .footer__grid--5 > .footer__brand,
  .footer__grid--6 > .footer__brand { grid-column: auto; }
}

/* =========================================================================
   IM-Shots Edu page — hero media, in-brief band, at-a-glance vial row
   ========================================================================= */

/* Hero — image placeholder variant ---------------------------------------- */
.edu-hero--media .edu-hero__inner {
  grid-template-columns: 1fr;
  align-items: center;
}
@media (min-width: 980px) {
  .edu-hero--media .edu-hero__inner {
    grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr);
    gap: clamp(var(--space-7), 6vw, var(--space-9));
  }
}

.edu-hero__media {
  margin: 0;
  position: relative;
  width: 100%;
}
.edu-hero__media-frame {
  position: relative;
  aspect-ratio: 4 / 5;
  background:
    radial-gradient(120% 90% at 20% 10%, rgba(217, 161, 153, 0.22) 0%, transparent 55%),
    radial-gradient(110% 100% at 90% 95%, rgba(0, 0, 0, 0.35) 0%, transparent 60%),
    linear-gradient(160deg, #3A1E20 0%, #2E1517 55%, #1B0D0D 100%);
  border: 1px solid var(--color-border-deep);
  overflow: hidden;
}
.edu-hero__media-frame::before {
  content: "";
  position: absolute;
  inset: 10px;
  border: 1px solid rgba(217, 161, 153, 0.22);
  pointer-events: none;
}
.edu-hero__media-frame[data-placeholder]::after {
  content: "";
  position: absolute;
  left: 50%; top: 50%;
  width: 30%;
  height: 30%;
  transform: translate(-50%, -50%);
  border: 1px solid rgba(217, 161, 153, 0.18);
  border-radius: 50%;
  pointer-events: none;
}
.edu-hero__media-mark {
  position: absolute;
  top: 22px;
  left: 22px;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-accent-soft);
}
.edu-hero__media-caption {
  position: absolute;
  bottom: 22px;
  left: 22px;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.875rem;
  color: var(--color-ink-cream-mute);
  opacity: 0.7;
}
.edu-hero__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* In-brief band ---------------------------------------------------------- */
.in-brief-band {
  background: var(--color-bg-cream);
  color: var(--color-ink-deep);
  /* Clean cuts, no hairlines — tonal steps separate this band from its
     neighbours, consistent with the trust-bar and footer treatment. */
  padding: clamp(var(--space-7), 6vw, var(--space-8)) 0;
}
.in-brief-band__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  align-items: start;
}
@media (min-width: 820px) {
  .in-brief-band__inner {
    grid-template-columns: 220px 1fr;
    gap: clamp(var(--space-6), 5vw, var(--space-8));
  }
}
.in-brief-band__eyebrow {
  margin: 0;
  font-weight: 600;
  color: var(--color-accent);
  position: relative;
  padding-top: var(--space-3);
}
.in-brief-band__eyebrow::before {
  content: "";
  display: block;
  width: 32px;
  height: 1px;
  background: var(--color-accent);
  margin-bottom: var(--space-3);
}
.in-brief-band__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4) var(--space-7);
}
@media (min-width: 980px) {
  .in-brief-band__list { grid-template-columns: 1fr 1fr; }
}
.in-brief-band__list li {
  position: relative;
  padding-left: var(--space-5);
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
}
.in-brief-band__list li strong {
  color: var(--color-ink-deep);
  font-weight: 600;
}
.in-brief-band__dot {
  position: absolute;
  left: 0;
  top: 0.6em;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-accent);
}
.in-brief-band sup.cite a { color: var(--color-accent); }

/* Shots — at a glance (skim row) ----------------------------------------- */
.shots-glance {
  background: var(--color-bg-ivory);
  color: var(--color-ink-deep);
  padding: clamp(var(--space-8), 8vw, var(--space-9)) 0 clamp(var(--space-8), 8vw, var(--space-9));
}
.shots-glance__head {
  max-width: 760px;
  margin: 0 0 var(--space-7);
}
.shots-glance__title {
  margin-top: var(--space-4);
}
.shots-glance__title em {
  font-style: italic;
  color: var(--color-accent);
}
.shots-glance__lede {
  margin-top: var(--space-4);
  max-width: 56ch;
}
.shots-glance__lede a {
  color: var(--color-accent);
  border-bottom: 1px solid currentColor;
}
.shots-glance__carousel { position: relative; }
/* Mobile (<700px): one vial at a time, horizontal swipe with snap and a peek of
   the next card. ≥700px it reverts to the multi-column grid below. Mirrors the
   blends carousel and reuses its dot / arrow / swipe-hint chrome (.blends__*). */
.shots-glance__grid {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  gap: var(--space-4);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.shots-glance__grid::-webkit-scrollbar { display: none; }
.shots-glance__grid > .vial-card {
  flex: 0 0 84%;
  scroll-snap-align: center;
  min-width: 0;
}
@media (min-width: 700px) {
  .shots-glance__grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-6);
    overflow: visible;
  }
  .shots-glance__grid > .vial-card { flex: 0 1 auto; scroll-snap-align: none; }
}
@media (min-width: 1024px) {
  .shots-glance__grid {
    grid-template-columns: repeat(4, 1fr);
    gap: var(--space-6);
  }
}
.shots-glance__hedge {
  margin: var(--space-7) 0 0;
  color: var(--color-ink-soft);
  font-weight: 500;
  text-align: center;
}

/* Individual vial card --------------------------------------------------- */
.vial-card {
  --vial-tint:   #6E2E2C;
  --vial-tint-2: #3A1518;
  background: #FBF4E4;
  border: 1px solid var(--color-border-cream);
  display: flex;
}
.vial-card:nth-child(1) { --vial-tint: #7A2E36; --vial-tint-2: #4A1217; }
.vial-card:nth-child(2) { --vial-tint: #C8A268; --vial-tint-2: #6E4F2A; }
.vial-card:nth-child(3) { --vial-tint: #C77E72; --vial-tint-2: #6E3A36; }

.vial-card__link {
  display: flex;
  flex-direction: column;
  width: 100%;
  color: inherit;
  text-decoration: none;
  transition: transform 220ms ease-out, box-shadow 220ms ease-out;
}
.vial-card__link:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 40px -24px rgba(46, 21, 23, 0.45);
}
.vial-card__link:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 4px;
}

/* Vial visual — CSS-only silhouette echoing a labeled vial on marble ----- */
.vial-card__visual {
  position: relative;
  aspect-ratio: 5 / 6;
  background:
    radial-gradient(120% 80% at 20% 10%, rgba(217, 161, 153, 0.10) 0%, transparent 55%),
    linear-gradient(180deg, #3A1E20 0%, #2E1517 60%, #1B0D0D 100%);
  overflow: hidden;
  border-bottom: 1px solid var(--color-border-cream);
}
.vial-card__visual::before {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 22%;
  background:
    linear-gradient(180deg, transparent 0%, rgba(245, 237, 221, 0.04) 25%, rgba(245, 237, 221, 0.10) 100%),
    linear-gradient(180deg, #2A1416 0%, #1B0D0D 100%);
  border-top: 1px solid rgba(217, 161, 153, 0.12);
}
.vial-card__visual::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 14%;
  transform: translateX(-50%);
  width: 44%;
  height: 64%;
  border-radius: 4px 4px 10px 10px;
  background:
    linear-gradient(180deg, transparent 0%, transparent 34%, #F3E7D2 34%, #F3E7D2 62%, transparent 62%),
    linear-gradient(180deg, var(--vial-tint) 0%, var(--vial-tint-2) 100%);
  box-shadow:
    inset 1px 0 0 rgba(255, 255, 255, 0.08),
    inset -1px 0 0 rgba(0, 0, 0, 0.18),
    0 14px 36px -14px rgba(0, 0, 0, 0.55);
}
.vial-card__visual-mark {
  position: absolute;
  top: 16px;
  left: 16px;
  z-index: 2;
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent-soft);
}

/* Photographic vial variant — image floats over the deep editorial backdrop.
   Suppresses the CSS-only bottle silhouette (::after) and replaces it with
   the real product photo, contained and softly grounded. */
.vial-card__visual--photo::after { content: none; }
.vial-card__visual-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center 58%;
  padding: clamp(18px, 5%, 28px) clamp(12px, 6%, 32px) clamp(8px, 3%, 18px);
  filter: drop-shadow(0 18px 28px rgba(0, 0, 0, 0.55))
          drop-shadow(0 4px 6px rgba(0, 0, 0, 0.35));
  z-index: 1;
  transition: transform 280ms ease-out;
}
.vial-card__link:hover .vial-card__visual-img {
  transform: translateY(-2px) scale(1.015);
}

.vial-card__body {
  padding: clamp(var(--space-5), 3vw, var(--space-6));
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  flex: 1;
}
.vial-card__eyebrow {
  margin: 0;
  color: var(--color-accent);
  font-weight: 600;
}
.vial-card__h3 {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 1.4vw + 1rem, 1.75rem);
  line-height: 1.1;
  letter-spacing: -0.01em;
  margin: 0 0 var(--space-2);
  color: var(--color-ink-deep);
}
.vial-card__h3 em {
  font-style: italic;
  color: var(--color-accent);
}
.vial-card__benefit {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: 0;
}
.vial-card__for {
  margin: auto 0 0;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border-cream);
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--color-ink-soft);
}
.vial-card__for span {
  display: inline-block;
  font-size: 0.6875rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-accent);
  font-weight: 600;
  margin-right: 0.5em;
}
/* "Read more" cue — the whole card is the link; this is its visible affordance,
   pointing to that shot's full description further down the page. */
.vial-card__more {
  display: inline-flex;
  align-items: center;
  gap: 0.45em;
  margin-top: var(--space-4);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--color-accent);
}
.vial-card__more .arrow { transition: transform 200ms ease-out; }
.vial-card__link:hover .vial-card__more .arrow { transform: translateX(3px); }
@media (prefers-reduced-motion: reduce) {
  .vial-card__more .arrow { transition: none; }
}

.edu-hero--media { padding-bottom: clamp(var(--space-8), 8vw, var(--space-9)); }

/* Hero — full-bleed image background variant ----------------------------- */
.edu-hero--bg {
  background: #1B0D0D;
  min-height: clamp(560px, 78vh, 820px);
  display: flex;
  align-items: flex-end;
  padding-top: clamp(140px, 16vw, 220px);
  padding-bottom: clamp(var(--space-8), 8vw, var(--space-10));
}
.edu-hero__bg-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center right;
  z-index: 0;
  /* Slight warmth-preserving darken so cream text reads, without flattening the image. */
  filter: saturate(1.02) contrast(1.02);
}
.edu-hero__scrim {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    /* Left-anchored pillar of darkness for text legibility */
    linear-gradient(90deg,
      rgba(20, 10, 11, 0.86) 0%,
      rgba(20, 10, 11, 0.74) 28%,
      rgba(20, 10, 11, 0.42) 52%,
      rgba(20, 10, 11, 0.10) 78%,
      rgba(20, 10, 11, 0.00) 100%),
    /* Subtle vignette top→bottom so the type plane lifts off the image */
    linear-gradient(180deg,
      rgba(20, 10, 11, 0.32) 0%,
      rgba(20, 10, 11, 0.10) 38%,
      rgba(20, 10, 11, 0.00) 62%,
      rgba(20, 10, 11, 0.38) 100%);
}
.edu-hero--bg .grain { z-index: 1; opacity: 0.10; }
.edu-hero--bg .edu-hero__mark { z-index: 2; color: var(--color-ink-cream); }
.edu-hero--bg .edu-hero__inner {
  position: relative;
  z-index: 2;
  grid-template-columns: 1fr;
  align-items: end;
}
.edu-hero--bg .edu-hero__content {
  max-width: 760px;
}
.edu-hero--bg .edu-hero__headline {
  text-shadow: 0 1px 24px rgba(0, 0, 0, 0.35);
}
.edu-hero--bg .edu-hero__open {
  color: var(--color-ink-cream);
  text-shadow: 0 1px 18px rgba(0, 0, 0, 0.45);
  max-width: 56ch;
}

/* Narrow screens — vials cluster in the upper third, deep dark band slams
   the lower half so the headline reads without product labels competing. */
@media (max-width: 720px) {
  .edu-hero--bg {
    min-height: clamp(560px, 118vw, 740px);
    padding-top: clamp(96px, 22vw, 140px);
    padding-bottom: clamp(var(--space-7), 9vw, var(--space-9));
    align-items: flex-end;
  }
  /* Full-bleed photo with the headline overlapping its lower third. Cover keeps
     the vial cluster at full height (only the sides crop, so no awkward slice
     across the bottle tops the way the old centre-zoom did); object-position
     centres the bottles, and the scrim darkens the marble base where the type
     sits so the cream copy stays legible over the image. */
  .edu-hero__bg-img { object-position: 52% center; }
  .edu-hero__scrim {
    background:
      linear-gradient(180deg,
        rgba(20, 10, 11, 0.55) 0%,    /* darken the nav strip so the cream logo reads */
        rgba(20, 10, 11, 0.16) 10%,
        rgba(20, 10, 11, 0.00) 26%,    /* vials show clean through the middle */
        rgba(20, 10, 11, 0.00) 42%,
        rgba(20, 10, 11, 0.42) 58%,    /* darken the marble base under the headline */
        rgba(20, 10, 11, 0.80) 74%,
        rgba(20, 10, 11, 0.95) 100%);
  }
  .edu-hero--bg .edu-hero__headline { font-size: clamp(2.5rem, 11vw, 3.5rem); }
}

/* =========================================================================
   IV-Therapy Education page — 2026-05-26 rewrite
   Hero w/ pointer-labeled bag diagram, occasion grid, trust strip
   ========================================================================= */

/* Hero — centered variant (no diagram in hero) ----------------------------- */
.edu-hero__inner--centered {
  grid-template-columns: 1fr;
  justify-items: center;
  text-align: center;
}
.edu-hero__content--centered {
  max-width: 760px;
  text-align: center;
}
.edu-hero__content--centered .edu-hero__open,
.edu-hero__content--centered .edu-hero__def {
  margin-left: auto;
  margin-right: auto;
}
.edu-hero__ctas--center { justify-content: center; }
.edu-hero__trust--center { justify-content: center; }

.edu-hero__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  margin: var(--space-6) 0 var(--space-5);
}
.edu-hero__ctas .btn--outline-cream {
  color: var(--color-ink-cream);
  border-color: rgba(245,237,221,0.45);
}
.edu-hero__ctas .btn--outline-cream:hover {
  background: rgba(245,237,221,0.08);
}

.edu-hero__trust {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: center;
}
.edu-hero__trust .dot {
  color: var(--color-accent);
  font-size: 2em;
  line-height: 0;
  position: relative;
  top: 0.02em;
}

/* IV bag diagram ------------------------------------------------------------ */
.iv-diagram {
  margin: 0;
  padding: 0;
}
/* Mobile-first: the four callouts flank the bag and point inward — a compact
   echo of the desktop diagram, not a long stack below it. The bag sits in a
   centre column spanning both rows; the <ul> dissolves (display:contents) so
   its four <li> become grid items placed around the bag.
   --ivg keeps the column gap and the leader-line length in sync. */
.iv-diagram__stage {
  --ivg: clamp(14px, 5vw, 32px);
  position: relative;
  width: 100%;
  display: grid;
  grid-template-columns: 1fr minmax(64px, auto) 1fr;
  grid-template-rows: auto auto;
  grid-template-areas:
    "tl bag tr"
    "bl bag br";
  column-gap: var(--ivg);
  row-gap: var(--space-5);
  align-items: center;
}
.iv-diagram__bag {
  grid-area: bag;
  width: auto;
  /* Taller bag so its body spans the band the four leader lines converge on. */
  height: clamp(232px, 60vw, 300px);
  justify-self: center;
  align-self: center;
  display: block;
  filter: drop-shadow(0 8px 24px rgba(0,0,0,0.32));
}
.iv-diagram--light .iv-diagram__bag {
  filter:
    drop-shadow(0 18px 32px rgba(155, 81, 69, 0.12))
    drop-shadow(0 6px 14px rgba(46, 21, 23, 0.08));
}

/* Light-background diagram overrides (used on .section--cream / .section--ivory) */
.iv-diagram--light .iv-diagram__icon {
  background: var(--color-bg-ivory);
  border-color: var(--color-accent);
  color: var(--color-accent);
}
.iv-diagram--light .iv-diagram__h3 { color: var(--color-ink-deep); }
.iv-diagram--light .iv-diagram__p  { color: var(--color-ink-muted); }
.iv-diagram__points { display: contents; }
.iv-diagram__point--tl { grid-area: tl; }
.iv-diagram__point--tr { grid-area: tr; }
.iv-diagram__point--bl { grid-area: bl; }
.iv-diagram__point--br { grid-area: br; }

.iv-diagram__point {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
/* Left column hugs the bag on its right edge; right column on its left. */
.iv-diagram__point--tl,
.iv-diagram__point--bl { align-items: flex-end; text-align: right; }
.iv-diagram__point--tr,
.iv-diagram__point--br { align-items: flex-start; text-align: left; }

/* Leader line + end-pin reach from each card across the gap onto the bag. */
.iv-diagram__point::after {
  content: "";
  position: absolute;
  top: 20px;
  width: var(--ivg);
  border-top: 1px dashed rgba(155, 81, 69, 0.5);
  pointer-events: none;
}
.iv-diagram__point::before {
  content: "";
  position: absolute;
  top: 17px;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-accent);
  box-shadow: 0 0 0 3px rgba(217, 161, 153, 0.22);
  pointer-events: none;
}
/* Horizontal: left column reaches right toward the bag, right column reaches left. */
.iv-diagram__point--tl::after,
.iv-diagram__point--bl::after { left: 100%; }
.iv-diagram__point--tr::after,
.iv-diagram__point--br::after { right: 100%; }
.iv-diagram__point--tl::before,
.iv-diagram__point--bl::before { left: calc(100% + var(--ivg) - 3px); }
.iv-diagram__point--tr::before,
.iv-diagram__point--br::before { right: calc(100% + var(--ivg) - 3px); }
/* Vertical: top-row lines leave the LOWER part of their card and bottom-row
   lines the UPPER part, so all four converge on the bag's centred body — no
   matter how tall the text reflows. (Each card fills its grid row, so its
   inner edge sits at the row boundary where the bag's middle is.) */
.iv-diagram__point--tl::after,
.iv-diagram__point--tr::after { top: auto; bottom: 30px; }
.iv-diagram__point--tl::before,
.iv-diagram__point--tr::before { top: auto; bottom: 27px; }
.iv-diagram__point--bl::after,
.iv-diagram__point--br::after { top: 30px; }
.iv-diagram__point--bl::before,
.iv-diagram__point--br::before { top: 27px; }

.iv-diagram__icon {
  width: 40px;
  height: 40px;
  border-radius: 999px;
  background: rgba(217, 161, 153, 0.10);
  border: 1px solid rgba(217, 161, 153, 0.35);
  color: var(--color-accent-soft);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
}
.iv-diagram__icon svg { width: 20px; height: 20px; }
.iv-diagram__text { min-width: 0; }
.iv-diagram__h3 {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 0.9375rem;
  line-height: 1.15;
  letter-spacing: -0.005em;
  color: var(--color-ink-cream);
  margin: 0 0 4px;
}
.iv-diagram__p {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  line-height: 1.45;
  color: var(--color-ink-cream-mute);
  margin: 0;
}
@media (min-width: 640px) {
  .iv-diagram__icon { width: 48px; height: 48px; }
  .iv-diagram__icon svg { width: 24px; height: 24px; }
  .iv-diagram__h3 { font-size: 1.0625rem; }
  .iv-diagram__p { font-size: 0.8125rem; line-height: 1.5; }
}
/* Light diagram: the four bag callouts become soft cards on a cream surface. */
.iv-diagram--light .iv-diagram__point {
  background: var(--color-bg-cream);
  border: 1px solid rgba(155, 81, 69, 0.12);
  border-radius: 14px;
  padding: var(--space-3);
}
@media (min-width: 640px) {
  .iv-diagram--light .iv-diagram__point { border-radius: 18px; padding: var(--space-4); }
}

/* Phones: keep the four callouts flanking the bag with their leader lines —
   but the cramped columns made each callout a tall, thin tower of text. Shrink
   the bag and tighten the centre gutter so the two side columns gain real
   width, letting the copy run wider (fewer line-breaks) instead of straight
   down. The pointer lines stay. */
@media (max-width: 700px) {
  .iv-diagram__stage {
    --ivg: clamp(8px, 2.6vw, 16px);
    grid-template-columns: 1fr minmax(40px, auto) 1fr;
    column-gap: var(--ivg);
    row-gap: var(--space-6);
  }
  .iv-diagram__bag { height: clamp(204px, 56vw, 272px); }
  .iv-diagram--light .iv-diagram__point { padding: var(--space-2) var(--space-3); }
  /* Top-align the two cards in each row — the row otherwise centers them, so a
     shorter card drops out of line. The bag keeps its own align-self:center. */
  .iv-diagram__point { align-self: start; }
  /* All four cards read left-to-right — drop the right-aligned left column so
     every blurb starts at the same left edge. Leader lines still run to the bag. */
  .iv-diagram__point--tl,
  .iv-diagram__point--bl,
  .iv-diagram__point--tr,
  .iv-diagram__point--br {
    align-items: flex-start;
    text-align: left;
  }
}

/* Desktop: bag center, 4 callouts absolute around it with pointer lines */
@media (min-width: 1160px) {
  .iv-diagram__stage {
    display: block;
    height: 780px;
    max-width: 1120px;
    margin-inline: auto;
  }
  .iv-diagram__bag {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: auto;
    height: 520px;
  }
  .iv-diagram__points {
    position: absolute;
    inset: 0;
    display: block;
    max-width: none;
  }
  .iv-diagram__point {
    position: absolute;
    width: 320px;
    display: flex;
    gap: var(--space-3);
    align-items: flex-start;
  }
  .iv-diagram__point .iv-diagram__h3 { font-size: 1.0625rem; }
  .iv-diagram__point .iv-diagram__p { font-size: 0.8125rem; line-height: 1.5; }
  /* Left side callouts: text leads, icon anchors near bag */
  .iv-diagram__point--tl,
  .iv-diagram__point--bl {
    /* Anchored a fixed distance from the bag (centred at 50%), not the stage
       edge, so the leader line keeps the same length at every viewport width.
       Bag half-width ~125px + 60px gap + 320px card = 505px left of centre. */
    left: calc(50% - 505px);
    flex-direction: row-reverse;
    text-align: right;
  }
  /* Right side callouts: icon anchors near bag, text trails */
  .iv-diagram__point--tr,
  .iv-diagram__point--br {
    left: calc(50% + 185px);
    flex-direction: row;
    text-align: left;
  }
  /* Bag is 520px tall, centred in a 780px stage -> body runs ~130-650px.
     Both pairs are dropped so their pins (point-top + 24px) land on the flat
     body of the bag rather than its narrow shoulder: top pin ~235px, bottom
     pin ~500px. Wider (320px) cards keep clear white space between the pairs. */
  .iv-diagram__point--tl,
  .iv-diagram__point--tr { top: 27%; }
  .iv-diagram__point--bl,
  .iv-diagram__point--br { top: 61%; }

  /* Pointer line — thin dashed segment from icon edge to bag surface */
  .iv-diagram__point::after {
    content: "";
    position: absolute;
    top: 27px;
    height: 0;
    border-top: 1px dashed rgba(155, 81, 69, 0.45);
    pointer-events: none;
  }
  .iv-diagram__point--tl::after,
  .iv-diagram__point--bl::after {
    top: 27px;
    bottom: auto;
    left: auto;
    right: -56px;
    width: 52px;
  }
  .iv-diagram__point--tr::after,
  .iv-diagram__point--br::after {
    top: 27px;
    bottom: auto;
    right: auto;
    left: -56px;
    width: 52px;
  }

  /* End-pin where the line meets the bag */
  .iv-diagram__point::before {
    content: "";
    position: absolute;
    top: 24px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--color-accent);
    box-shadow: 0 0 0 3px rgba(217, 161, 153, 0.22);
    pointer-events: none;
  }
  .iv-diagram__point--tl::before,
  .iv-diagram__point--bl::before { top: 24px; bottom: auto; left: auto; right: -10px; }
  .iv-diagram__point--tr::before,
  .iv-diagram__point--br::before { top: 24px; bottom: auto; right: auto; left: -10px; }
}

/* Occasions grid -----------------------------------------------------------
   Mobile-first: rows of three compact cards so the ten occasions read as a
   tight grid, not a ten-screen scroll. Cards grow into the roomy desktop
   treatment from 640px up. */
/* Occasions -----------------------------------------------------------------
   Mobile: each occasion is a collapsible <details> drop-down (icon + title +
   chevron; tap reveals the line of detail) so ten of them read as a tidy list,
   not a long scroll. Desktop (≥640px) reverts to the open card grid — a script
   keeps them open there. */
.occasions {
  list-style: none;
  padding: 0;
  margin: var(--space-7) 0 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-2);
}
@media (min-width: 640px) {
  .occasions { grid-template-columns: 1fr 1fr; gap: var(--space-5); }
}
@media (min-width: 980px) {
  .occasions { grid-template-columns: repeat(3, 1fr); gap: var(--space-6); }
}
.occasion {
  background: var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  border-radius: 10px;
  position: relative;
  overflow: hidden;
}

/* Summary = the tappable row. Native marker removed. */
.occasion__summary {
  list-style: none;
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.occasion__summary::-webkit-details-marker { display: none; }
.occasion__summary:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}
.occasion__icon {
  flex: 0 0 auto;
  width: 24px;
  height: 24px;
  color: var(--color-accent);
  display: inline-flex;
}
.occasion__icon svg { width: 100%; height: 100%; }
.occasion__title {
  flex: 1 1 auto;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.2;
  letter-spacing: -0.005em;
  color: var(--color-ink-deep);
  margin: 0;
  text-align: left;
}
.occasion__chevron {
  flex: 0 0 auto;
  width: 10px;
  height: 10px;
  border-right: 2px solid var(--color-accent);
  border-bottom: 2px solid var(--color-accent);
  transform: rotate(45deg);
  transition: transform 200ms ease;
}
.occasion__details[open] .occasion__chevron { transform: rotate(-135deg); }
.occasion__body {
  /* indent the detail to line up under the title, past the icon */
  padding: 0 var(--space-4) var(--space-4);
  padding-left: calc(var(--space-4) + 24px + var(--space-3));
}
.occasion__desc {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  margin: 0;
}

/* ---- Desktop: open card grid (icon, title, detail stacked) ------------ */
@media (min-width: 640px) {
  .occasion {
    border-radius: 2px;
    overflow: visible;
    transition: transform 220ms ease-out, box-shadow 220ms ease-out, border-color 220ms ease-out;
  }
  .occasion::before {
    content: "";
    position: absolute;
    top: 0;
    left: var(--space-5);
    right: var(--space-5);
    height: 1px;
    background: var(--color-accent);
    opacity: 0;
    transition: opacity 220ms ease-out;
  }
  .occasion:hover {
    transform: translateY(-2px);
    border-color: var(--color-accent-line);
    box-shadow: 0 6px 24px rgba(46,21,23,0.06);
  }
  .occasion:hover::before { opacity: 0.7; }
  .occasion__summary {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-3);
    padding: clamp(var(--space-5), 2.4vw, var(--space-6));
    padding-bottom: var(--space-3);
    cursor: default;
    pointer-events: none;
  }
  .occasion__icon { width: 36px; height: 36px; margin-bottom: var(--space-2); }
  .occasion__title {
    font-size: clamp(1.25rem, 1.2vw + 0.75rem, 1.4375rem);
    line-height: 1.18;
  }
  .occasion__chevron { display: none; }
  .occasion__body {
    padding: 0 clamp(var(--space-5), 2.4vw, var(--space-6)) clamp(var(--space-5), 2.4vw, var(--space-6));
  }
  .occasion__desc { font-size: 0.9375rem; line-height: 1.6; }
}
.occasions__cta {
  margin-top: var(--space-8);
  display: flex;
  justify-content: center;
}

/* Trust strip -------------------------------------------------------------- */
.trust-strip {
  list-style: none;
  padding: var(--space-7) 0;
  margin: var(--space-7) 0 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-5) var(--space-4);
  border-top: 1px solid var(--color-border-cream);
  border-bottom: 1px solid var(--color-border-cream);
}
@media (min-width: 720px) {
  .trust-strip { grid-template-columns: repeat(5, 1fr); gap: var(--space-5); }
}
.trust-strip__item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--space-2);
  padding: 0 var(--space-2);
}
.trust-strip__icon {
  width: 42px;
  height: 42px;
  color: var(--color-accent);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: var(--space-2);
}
.trust-strip__icon svg { width: 100%; height: 100%; }
.trust-strip__label {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.15;
  letter-spacing: -0.005em;
  color: var(--color-ink-deep);
  margin: 0;
}
.trust-strip__note {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.04em;
  color: var(--color-ink-soft);
  margin: 0;
  text-wrap: balance;
}

/* Safety callout (under trust strip) -------------------------------------- */
.safety-callout {
  margin-top: var(--space-8);
  max-width: 760px;
  padding: clamp(var(--space-5), 2.4vw, var(--space-6));
  background: var(--color-surface-cream);
  border-left: 2px solid var(--color-accent);
}
.safety-callout__eyebrow {
  color: var(--color-ink-deep);
  font-weight: 600;
  margin: 0 0 var(--space-3);
}
.safety-callout__body {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-muted);
  margin: 0;
}
.safety-callout__body a {
  color: var(--color-accent);
  border-bottom: 1px solid currentColor;
  text-decoration: none;
}
.safety-callout__body a:hover { color: var(--color-accent-hover); }

/* =========================================================================
   IM-Shots Edu page — definition strip + alternating shot rows (§3)
   ========================================================================= */

/* IM definition + three-tile strip --------------------------------------- */
.im-strip {
  background: var(--color-bg-cream);
  color: var(--color-ink-deep);
  padding: clamp(var(--space-7), 7vw, var(--space-9)) 0;
  border-top: 1px solid var(--color-border-cream);
  border-bottom: 1px solid var(--color-border-cream);
}
.im-strip__head {
  max-width: 760px;
  margin: 0 0 clamp(var(--space-6), 5vw, var(--space-8));
}
.im-strip__def {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.125rem, 0.6vw + 1rem, 1.375rem);
  line-height: 1.5;
  color: var(--color-ink-deep);
  margin: var(--space-4) 0 0;
  max-width: 60ch;
}
.im-strip__def sup.cite a { color: var(--color-accent); }
.im-strip__grid {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  counter-reset: im-tile;
}
@media (min-width: 720px) {
  .im-strip__grid { grid-template-columns: repeat(3, 1fr); gap: var(--space-7); }
}

.im-tile {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.im-tile__media {
  position: relative;
  aspect-ratio: 4 / 3;
  margin: 0;
  background:
    radial-gradient(120% 80% at 18% 12%, rgba(217, 161, 153, 0.16) 0%, transparent 55%),
    linear-gradient(160deg, #3A1E20 0%, #2E1517 60%, #1B0D0D 100%);
  border: 1px solid var(--color-border-deep);
  overflow: hidden;
}
.im-tile__media::before {
  content: "";
  position: absolute;
  inset: 8px;
  border: 1px solid rgba(217, 161, 153, 0.20);
  pointer-events: none;
}
.im-tile__media[data-placeholder]::after {
  content: "";
  position: absolute;
  left: 50%; top: 50%;
  width: 24%; height: 32%;
  transform: translate(-50%, -50%);
  border: 1px solid rgba(217, 161, 153, 0.22);
  pointer-events: none;
}
.im-tile__num {
  position: absolute;
  top: 14px;
  left: 16px;
  z-index: 1;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.125rem;
  color: var(--color-accent-soft);
  letter-spacing: 0.02em;
}
.im-tile__media-mark {
  position: absolute;
  bottom: 14px;
  left: 16px;
  z-index: 1;
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  opacity: 0.72;
}
.im-tile__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.im-tile__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.im-tile__h3 {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.25rem, 0.8vw + 1rem, 1.5rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--color-ink-deep);
}
.im-tile__h3 em {
  font-style: italic;
  color: var(--color-accent);
}
.im-tile__copy {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
  margin: 0;
}
.im-tile__copy sup.cite a { color: var(--color-accent); }

/* §3 — alternating spread layout ----------------------------------------- */
.shots--spread {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(var(--space-8), 8vw, var(--space-10));
}
.shot--spread {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(var(--space-5), 4vw, var(--space-7));
  align-items: start;
  border-top: none;
  padding-top: 0;
  max-width: none;
}
@media (min-width: 880px) {
  .shot--spread {
    grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
    gap: clamp(var(--space-7), 6vw, var(--space-9));
    align-items: center;
  }
  .shot--media-right .shot__content { grid-column: 1; grid-row: 1; }
  .shot--media-right .shot__media   { grid-column: 2; grid-row: 1; }
  .shot--media-left  .shot__media   { grid-column: 1; grid-row: 1; }
  .shot--media-left  .shot__content { grid-column: 2; grid-row: 1; }
}
.shot__content {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.shot__media {
  position: relative;
  margin: 0;
  aspect-ratio: 5 / 6;
  background:
    radial-gradient(120% 90% at 22% 12%, rgba(217, 161, 153, 0.18) 0%, transparent 55%),
    radial-gradient(110% 100% at 88% 92%, rgba(0, 0, 0, 0.30) 0%, transparent 60%),
    linear-gradient(160deg, #3A1E20 0%, #2E1517 55%, #1B0D0D 100%);
  border: 1px solid var(--color-border-deep);
  overflow: hidden;
}
.shot__media::before {
  content: "";
  position: absolute;
  inset: 10px;
  border: 1px solid rgba(217, 161, 153, 0.22);
  pointer-events: none;
}
.shot__media[data-placeholder]::after {
  content: "";
  position: absolute;
  left: 50%; top: 50%;
  width: 28%; height: 28%;
  transform: translate(-50%, -50%);
  border: 1px solid rgba(217, 161, 153, 0.18);
  border-radius: 50%;
  pointer-events: none;
}
.shot__media-mark {
  position: absolute;
  top: 20px;
  left: 20px;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-accent-soft);
}
.shot__media-caption {
  position: absolute;
  bottom: 20px;
  left: 20px;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 0.875rem;
  color: var(--color-ink-cream-mute);
  opacity: 0.7;
}
.shot__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Detailed vial variant — single pharmacy-prepared vial on the deep backdrop.
   The vial is contained (not cropped), centered slightly low to leave the
   eyebrow mark room to breathe, and grounded by a soft elliptical shadow. */
.shot__media--vial { isolation: isolate; }
.shot__media--vial::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 12%;
  transform: translateX(-50%);
  width: 58%;
  height: 26px;
  border: none;
  border-radius: 50%;
  background: radial-gradient(50% 50% at 50% 50%, rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0) 70%);
  filter: blur(2px);
  z-index: 0;
  pointer-events: none;
}
.shot__media--vial .shot__media-vial {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center 56%;
  padding: clamp(28px, 6%, 56px) clamp(20px, 8%, 64px) clamp(14px, 4%, 36px);
  filter: drop-shadow(0 22px 32px rgba(0, 0, 0, 0.55))
          drop-shadow(0 6px 8px rgba(0, 0, 0, 0.4));
  z-index: 1;
}
.shot--spread .shot__h3 {
  font-size: clamp(1.75rem, 2vw + 1rem, 2.5rem);
  line-height: 1.1;
}
.shot--spread .shot__body,
.shot--spread .shot__lead {
  max-width: 56ch;
}

/* -------------------------------------------------------------------------
   Shot descriptions — collapsible on mobile only.
   Each long write-up becomes a tap-to-open accordion under ~720px (heading +
   subhead stay visible, the body folds away) so the section skims short. From
   721px up it is the full editorial spread, always open. Native <details>,
   matching the FAQ qa__ convention; revealed on desktop purely in CSS (the
   ::details-content reveal covers modern browsers, display:flex the rest), so
   there is no JS and no open/close flash on load.
   ------------------------------------------------------------------------- */
.shot__disc { border: 0; padding: 0; scroll-margin-top: var(--space-7); }
.shot__summary {
  list-style: none;
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
}
.shot__summary::-webkit-details-marker { display: none; }
.shot__summary::marker { content: ""; }
.shot__summary:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 6px;
  border-radius: 4px;
}
.shot__summary-text {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
/* Vial thumbnail sitting on the tab itself — a small product chip on the left
   of every header, collapsed or open. Desktop hides it (the full figure beside
   the copy does that job there). */
.shot__tab-thumb {
  flex: 0 0 auto;
  width: 56px;
  height: 78px;
  border-radius: 10px;
  overflow: hidden;
  /* Centre the bottle and let it size naturally to a fraction of the chip, so
     the WHOLE vial (cap to base) shows with clear margin on every side — no
     100%-fill that pushes the base under the clip. */
  display: grid;
  place-items: center;
  background:
    radial-gradient(120% 90% at 22% 12%, rgba(217, 161, 153, 0.18) 0%, transparent 55%),
    linear-gradient(160deg, #3A1E20 0%, #2E1517 55%, #1B0D0D 100%);
  box-shadow: 0 6px 14px -8px rgba(46, 21, 23, 0.42);
}
.shot__tab-thumb img {
  display: block;
  margin: auto;
  width: auto;
  height: auto;
  max-width: 60%;
  max-height: 68%;
}
.shot__disc-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.shot__disc-icon { display: none; }

/* Desktop / tablet — fully open, looks identical to the original spread. */
@media (min-width: 721px) {
  .shot--spread .shot__disc {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
  }
  .shot--spread .shot__disc::details-content { content-visibility: visible; }
  .shot__summary { display: block; cursor: default; }
  .shot__summary-text { gap: var(--space-4); }
  .shot__tab-thumb { display: none; }
  .shot__summary .shot__subhead { margin-bottom: 0; }
}

/* Mobile — collapsed accordion card with a vial chip on the tab. */
@media (max-width: 720px) {
  .shot--spread .shot__disc {
    display: block;
    background: var(--color-bg-ivory);
    border: 1px solid var(--color-border-cream);
    border-radius: 8px;
    padding: clamp(var(--space-5), 5vw, var(--space-6));
    transition: border-color 200ms ease-out;
  }
  .shot--spread .shot__disc[open] { border-color: rgba(155, 81, 69, 0.30); }
  .shot__summary { cursor: pointer; }
  .shot__summary .shot__eyebrow { margin: 0; }
  .shot__summary .shot__subhead { margin: var(--space-1) 0 0; }
  .shot__disc-icon {
    flex: 0 0 auto;
    align-self: flex-start;
    margin-top: 4px;
    display: inline-grid;
    place-items: center;
    position: relative;
    width: 24px;
    height: 24px;
    color: var(--color-accent);
  }
  .shot__disc-icon::before,
  .shot__disc-icon::after {
    content: "";
    position: absolute;
    background: currentColor;
    border-radius: 1px;
    transition: transform 250ms var(--ease-settle), opacity 250ms var(--ease-settle);
  }
  .shot__disc-icon::before { width: 14px; height: 2px; }
  .shot__disc-icon::after  { width: 2px; height: 14px; }
  .shot--spread .shot__disc[open] .shot__disc-icon::after { transform: rotate(90deg); opacity: 0; }
  .shot__disc-body { padding-top: var(--space-5); }
  /* The big editorial vial figure is desktop-only; on mobile the tab chip
     stands in for it, so drop the full figure to keep the accordion tight. */
  .shot--spread .shot__media { display: none; }
  @media (prefers-reduced-motion: reduce) {
    .shot--spread .shot__disc,
    .shot__disc-icon::before,
    .shot__disc-icon::after { transition: none; }
  }
}

/* =========================================================================
   §1.5 — IV therapy "at a glance" band (what-is-iv-therapy.html)
   Three short answers under the hero so first-time + event readers can
   leave with the gist in one screen. Editorial: hairline rules between
   columns, serif body in cream, terracotta accents on the italics.
   ========================================================================= */
.edu-tldr {
  padding-block: clamp(var(--space-7), 6vw, var(--space-9));
  border-bottom: 1px solid var(--color-border-deep);
}
.edu-tldr__grid {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(var(--space-6), 3vw, var(--space-8));
  align-items: start;
}
.edu-tldr__item {
  position: relative;
  padding-left: clamp(var(--space-5), 2vw, var(--space-6));
  border-left: 1px solid rgba(194, 118, 107, 0.28);
}
.edu-tldr__item:first-child {
  border-left: 0;
  padding-left: 0;
}
.edu-tldr__eyebrow {
  color: var(--color-accent-soft);
  margin: 0 0 var(--space-4);
}
.edu-tldr__body {
  font-family: var(--font-serif);
  font-size: clamp(1.0625rem, 0.6vw + 0.95rem, 1.25rem);
  line-height: 1.5;
  color: var(--color-ink-cream);
  margin: 0;
  max-width: 32ch;
}
.edu-tldr__body em {
  font-style: italic;
  font-weight: 500;
  color: var(--color-accent-bright);
}
@media (max-width: 768px) {
  .edu-tldr__grid {
    grid-template-columns: 1fr;
    gap: var(--space-6);
  }
  .edu-tldr__item {
    border-left: 0;
    padding-left: 0;
    padding-top: var(--space-5);
    border-top: 1px solid rgba(194, 118, 107, 0.28);
  }
  .edu-tldr__item:first-child {
    padding-top: 0;
    border-top: 0;
  }
}


/* =========================================================================
   §1 (variant) — Light hero (IV Therapy education)
   Cream-and-clay editorial counterpart to the dark wine page-hero--imaged.
   Photo bleeds edge-to-edge against soft cream; text flips to wine ink.
   ========================================================================= */
.page-hero--light {
  background: var(--color-bg-cream);
  color: var(--color-ink-deep);
}
.page-hero--light .grain { opacity: 0.07; mix-blend-mode: multiply; }

/* Anchor the bag column slightly right-of-center so the empty wall reads
   under the text column on the left. */
.page-hero--light .page-hero__plate-img {
  /* Pull the zoom back near 1:1 so the bag isn't cropped or upscaled-soft.
     The dark hero's scale(1.2) was hiding a stray stand pole that this
     photo doesn't have, so the light hero can show the whole bag, sharp. */
  object-position: 60% 46%;
  transform: scale(1.03);
  transform-origin: 60% 50%;
  filter: saturate(1.04) contrast(1.02) brightness(1.02);
}

/* Replace the wine wash with a soft cream-to-clear veil — just enough to
   lift the text column off the photograph without dulling the cream. */
.page-hero--light .page-hero__plate::before {
  background:
    linear-gradient(
      96deg,
      rgba(236, 223, 201, 0.86) 0%,
      rgba(236, 223, 201, 0.74) 26%,
      rgba(236, 223, 201, 0.42) 46%,
      rgba(236, 223, 201, 0.14) 64%,
      rgba(236, 223, 201, 0) 80%
    );
}
/* Top/bottom: anchor the nav into a soft cream haze and ground the photo
   with a faint clay vignette at the base. */
.page-hero--light .page-hero__plate::after {
  background:
    linear-gradient(
      180deg,
      rgba(236, 223, 201, 0.55) 0%,
      rgba(236, 223, 201, 0.15) 20%,
      rgba(236, 223, 201, 0) 45%,
      rgba(236, 223, 201, 0) 72%,
      rgba(155, 81, 69, 0.10) 100%
    );
}

/* Hairline at the base — a quiet seam between hero and the next section
   that mirrors the editorial rules used elsewhere on the site. */
.page-hero--light::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 1px;
  background: rgba(155, 81, 69, 0.22);
  z-index: 4;
  pointer-events: none;
}

/* --- Text colour flip ---------------------------------------------------- */
.edu-hero--light { color: var(--color-ink-deep); }
.edu-hero--light .edu-hero__mark {
  color: var(--color-accent);
  text-shadow: 0 0 14px rgba(236, 223, 201, 0.85);
}
.edu-hero--light .edu-hero__byline { color: var(--color-ink-soft); }
.edu-hero--light .edu-hero__byline .dash { color: var(--color-accent); }
.edu-hero--light .edu-hero__headline { color: var(--color-ink-deep); }
.edu-hero--light .edu-hero__headline em { color: var(--color-accent); }
.edu-hero--light .edu-hero__def { color: var(--color-ink-soft); }
.edu-hero--light .edu-hero__trust { color: var(--color-ink-soft); }
.edu-hero--light .edu-hero__trust .dot { color: var(--color-accent); }

/* CTA: flip the cream outline to ink so the secondary button reads on
   cream. Primary button (terracotta on cream) already lands AA-passing. */
.edu-hero--light .edu-hero__ctas .btn--outline-cream {
  color: var(--color-ink-deep);
  border-color: rgba(27, 13, 13, 0.45);
}
.edu-hero--light .edu-hero__ctas .btn--outline-cream:hover {
  background: var(--color-ink-deep);
  color: var(--color-ink-cream);
  border-color: var(--color-ink-deep);
}

/* Mobile — image drops the bag below the headline; deepen the cream veil
   across the top so the text column reads as a quiet plate. */
@media (max-width: 768px) {
  .page-hero--light .page-hero__plate-img {
    object-position: 52% 30%;
  }
  .page-hero--light .page-hero__plate::before {
    background:
      linear-gradient(
        180deg,
        rgba(236, 223, 201, 0.80) 0%,
        rgba(236, 223, 201, 0.66) 28%,
        rgba(236, 223, 201, 0.40) 50%,
        rgba(236, 223, 201, 0.16) 72%,
        rgba(236, 223, 201, 0) 90%
      );
  }
  .page-hero--light .page-hero__plate::after {
    background:
      linear-gradient(
        180deg,
        rgba(236, 223, 201, 0.30) 0%,
        rgba(236, 223, 201, 0) 30%,
        rgba(236, 223, 201, 0) 70%,
        rgba(155, 81, 69, 0.14) 100%
      );
  }
}

/* ─────────────────────────────────────────────────────────────────
   §3b Mid-page CTA band (between "The three shots" and "Appointment")
   Editorial, quiet. Lives on cream surface to break the ivory→deep
   rhythm. Decorative rules above and below echo the eyebrow--rule
   marks used elsewhere on this page.
   ───────────────────────────────────────────────────────────────── */
.midcta {
  background: var(--color-bg-cream);
  color: var(--color-ink-deep);
  padding: clamp(var(--space-8), 10vw, var(--space-9)) 0;
  position: relative;
  overflow: hidden;
}
.midcta::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(
      circle at 12% 18%,
      rgba(155, 81, 69, 0.05) 0%,
      transparent 42%
    ),
    radial-gradient(
      circle at 88% 82%,
      rgba(46, 21, 23, 0.04) 0%,
      transparent 48%
    );
  pointer-events: none;
}
.midcta__inner {
  text-align: center;
  max-width: 64ch;
  margin: 0 auto;
  position: relative;
}
.midcta__rule {
  height: 1px;
  width: clamp(48px, 12vw, 96px);
  background: var(--color-ink-deep);
  opacity: 0.18;
  margin: 0 auto var(--space-5);
}
.midcta__rule--bottom {
  margin: var(--space-7) auto 0;
}
.midcta__eyebrow {
  color: var(--color-accent, var(--color-ink-deep));
  margin-bottom: var(--space-3);
}
.midcta__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2rem, 3vw + 1rem, 3.25rem);
  line-height: 1.1;
  letter-spacing: -0.015em;
  margin: 0 0 var(--space-5);
  color: var(--color-ink-deep);
}
.midcta__title em {
  font-style: italic;
  font-weight: 500;
  color: var(--color-accent, var(--color-ink-deep));
}
.midcta__body {
  font-family: var(--font-sans);
  font-size: clamp(1rem, 0.5vw + 0.9rem, 1.125rem);
  line-height: 1.65;
  color: var(--color-ink-deep);
  opacity: 0.86;
  max-width: 58ch;
  margin: 0 auto var(--space-6);
}
.midcta__ctas {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  justify-content: center;
}
.midcta__ctas .btn { white-space: nowrap; }

/* A ghost button variant that sits well on cream surfaces */
.btn--ghost-ink {
  background: transparent;
  color: var(--color-ink-deep);
  border: 1px solid var(--color-ink-deep);
  transition: background 180ms ease-out, color 180ms ease-out;
}
.btn--ghost-ink:hover,
.btn--ghost-ink:focus-visible {
  background: var(--color-ink-deep);
  color: var(--color-bg-cream);
}

/* Small parenthetical aside used in the Restore h3 ("...Not for skin lightening.") */
.shot__h3-aside {
  display: block;
  margin-top: 0.4em;
  font-family: var(--font-sans);
  font-style: normal;
  font-weight: 400;
  font-size: 0.5em;
  line-height: 1.3;
  letter-spacing: 0.04em;
  text-transform: none;
  opacity: 0.7;
}

@media (max-width: 640px) {
  .midcta { padding: clamp(var(--space-7), 14vw, var(--space-8)) 0; }
  .midcta__ctas .btn { width: 100%; }
}

/* Shot ingredient subheads --------------------------------------- */
.vial-card__subhead,
.shot__subhead {
  font-family: var(--font-sans);
  font-weight: 500;
  font-size: 0.78rem;
  line-height: 1.4;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-accent, #9B5145);
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin: var(--space-2) 0 var(--space-4);
}
.vial-card__subhead em,
.shot__subhead em {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.05em;
  letter-spacing: 0.02em;
  text-transform: none;
  color: inherit;
  opacity: 0.85;
}
.vial-card__subhead-rule,
.shot__subhead-rule {
  display: inline-block;
  height: 1px;
  width: 1.4rem;
  flex: 0 0 auto;
  background: currentColor;
  opacity: 0.55;
}
.shot__subhead { margin: var(--space-3) 0 var(--space-5); }

/* Shot note — soft callout (used for Reserve bloodwork requirement) */
.shot__note {
  margin: var(--space-6) 0;
  padding: var(--space-5) var(--space-6);
  border-left: 2px solid var(--color-accent, #9B5145);
  background: rgba(155, 81, 69, 0.05);
  border-radius: 0 4px 4px 0;
}
.shot__note-eyebrow {
  color: var(--color-accent, #9B5145);
  margin: 0 0 var(--space-2);
  font-weight: 500;
}
.shot__note-body {
  font-family: var(--font-sans);
  font-size: 0.95rem;
  line-height: 1.55;
  color: var(--color-ink-deep);
  opacity: 0.86;
  margin: 0;
}


/* ============================================================================
   Events contact block (groups-events §7)
   Full-bleed espresso section: moody backdrop, narrative left, form card right,
   reassurance strip below. Existing .inquiry-form remains the form scaffold —
   these rules only restyle its outer surface when nested inside the card.
   ============================================================================ */

.events-contact {
  position: relative;
  isolation: isolate;
  background: var(--color-bg-deep);
  color: var(--color-ink-cream);
  /* Fit the whole block in one viewport: section is exactly viewport-tall on
     screens ≥ 980px, strip anchors at the bottom via flex.
     On narrower screens the section grows with content — mobile with 8 form
     fields cannot physically fit in one viewport while honoring 44px touch
     targets, so we don't fake it. */
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  padding-block: clamp(40px, 5vh, 64px) 0;
  overflow: hidden;
}
@media (min-width: 980px) {
  .events-contact { height: 100dvh; min-height: 0; }
}

/* Background image — sits behind the veil. Decorative; src may be empty until
   the user supplies the final photo (the `onerror` in HTML hides the <img>). */
.events-contact__bg {
  position: absolute;
  inset: 0;
  z-index: -2;
  display: block;
  pointer-events: none;
}
.events-contact__bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  opacity: 0.32;
  filter: blur(1px) saturate(0.85);
}

/* Vignette + tint over the image. Also acts as the base when src is empty. */
.events-contact__veil {
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(ellipse at 28% 18%, rgba(58, 30, 32, 0) 0%, rgba(46, 21, 23, 0.78) 65%),
    linear-gradient(180deg, rgba(46, 21, 23, 0.55) 0%, rgba(46, 21, 23, 0.95) 100%);
}

/* Two-column grid — copy left, form card right.
   On desktop the grid takes the remaining height in the flex parent and
   anchors content to the top so the strip sits at the viewport bottom. */
.events-contact__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(28px, 4vw, 48px);
  padding-bottom: clamp(28px, 4vh, 48px);
}
@media (min-width: 980px) {
  .events-contact__grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr);
    gap: clamp(40px, 5vw, 72px);
    align-items: start;
    align-content: start;
    flex: 1 1 auto;
    min-height: 0;
  }
}

/* ---------- Left column: narrative ---------- */

.events-contact__copy {
  max-width: 560px;
}
.events-contact__copy .eyebrow {
  color: var(--color-ink-cream-mute);
}
.events-contact__copy .eyebrow--rule::before,
.events-contact__copy .eyebrow--rule::after {
  background: var(--color-ink-cream-mute);
  opacity: 0.55;
}

.events-contact__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2rem, 3.4vw + 0.8rem, 3.5rem);
  line-height: 1.04;
  letter-spacing: -0.018em;
  color: var(--color-ink-cream);
  margin: var(--space-3) 0 0;
}
.events-contact__headline em {
  font-style: italic;
  font-weight: 500;
  color: var(--color-accent-bright);
}

.events-contact__rule {
  display: block;
  width: 56px;
  height: 1px;
  background: rgba(245, 237, 221, 0.42);
  margin: clamp(14px, 2vh, 22px) 0;
}

.events-contact__lede {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--color-ink-cream-mute);
  margin: 0 0 clamp(18px, 2.5vh, 28px);
  max-width: 44ch;
}

.events-contact__features {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0;
}
.events-contact__feature {
  display: grid;
  grid-template-columns: 32px 1fr;
  gap: 14px;
  align-items: center;
  padding-block: clamp(10px, 1.4vh, 14px);
  border-bottom: 1px solid rgba(245, 237, 221, 0.14);
}
.events-contact__feature:last-child { border-bottom: 0; }
.events-contact__feature p {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-cream);
}

.events-contact__feat-icon {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(216, 131, 118, 0.55);
  border-radius: 50%;
  color: var(--color-accent-bright);
  background: rgba(216, 131, 118, 0.08);
}
.events-contact__feat-icon svg { width: 16px; height: 16px; }

/* ---------- Right column: form card ---------- */

.events-contact__card {
  background: var(--color-bg-ivory);
  border-radius: 6px;
  padding: clamp(18px, 2vw, 28px);
  box-shadow:
    0 40px 80px -30px rgba(0, 0, 0, 0.55),
    0 2px 0 rgba(255, 252, 245, 0.04) inset;
  color: var(--color-ink-deep);
  display: flex;
  flex-direction: column;
}
@media (min-width: 980px) {
  /* Cap the card to the grid row's allocated height so its content cannot
     bleed under the bottom strip. Only the FIELDS scroll internally — the
     submit button stays pinned at the bottom of the card. */
  .events-contact__card {
    max-height: 100%;
    min-height: 0;
  }
  .events-contact__card .inquiry-form {
    min-height: 0;
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
  }
  .events-contact__card .inquiry-form__grid {
    min-height: 0;
    flex: 1 1 auto;
    overflow-y: auto;
    overflow-x: hidden;
    padding-right: 4px;
    scrollbar-width: thin;
    scrollbar-color: var(--color-border-cream) transparent;
  }
  .events-contact__card .inquiry-form__foot {
    flex-shrink: 0;
  }
}

.events-contact__card-head {
  display: grid;
  grid-template-columns: 40px 1fr;
  gap: 14px;
  align-items: center;
  margin: 0 0 clamp(14px, 1.6vh, 20px);
  padding-bottom: clamp(14px, 1.6vh, 20px);
  border-bottom: 1px solid var(--color-border-cream);
}
.events-contact__card-badge {
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(155, 81, 69, 0.10);
  color: var(--color-accent);
}
.events-contact__card-badge svg { width: 20px; height: 20px; }

.events-contact__card-title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.25rem, 0.8vw + 1rem, 1.5rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin: 0 0 3px;
}
.events-contact__card-sub {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.45;
  color: var(--color-ink-muted);
  margin: 0;
}

/* Reset the existing .inquiry-form chrome when nested inside the card — the
   card already provides the surface, border-radius, shadow, and padding.
   This is a SCOPED override (only inside .events-contact__card); the form's
   own rules are otherwise untouched. */
.events-contact__card .inquiry-form,
.events-contact__card .inquiry-form[data-state="placeholder"] {
  max-width: none;
  background: transparent;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  padding: 0;
}
/* The "Form launching shortly" note is redundant with the bottom-strip
   email + phone CTAs and would push the card past 100vh. Hide it. */
.events-contact__card .inquiry-form__note { display: none; }

/* Tighter form grid inside the card so 6 rows fit in viewport-bound height */
.events-contact__card .inquiry-form__grid {
  gap: 12px;
}
@media (min-width: 700px) {
  .events-contact__card .inquiry-form__grid {
    gap: 12px 16px;
  }
}
.events-contact__card .field { gap: 4px; }
.events-contact__card .field label {
  font-size: 0.625rem;
  letter-spacing: 0.16em;
}
.events-contact__card .field input,
.events-contact__card .field select,
.events-contact__card .field textarea {
  padding: 7px 12px;
  min-height: 36px;
  font-size: 0.9375rem;
}
.events-contact__card .field textarea {
  min-height: 64px;
  line-height: 1.4;
}
.events-contact__card .inquiry-form__foot {
  margin-top: 12px;
  padding-top: 10px;
  gap: 6px 16px;
}
.events-contact__card .inquiry-form__submit { padding-block: 9px; }
/* The "Or call …" line beside the submit button is redundant with the
   bottom strip's contact info. Hide it inside this card to save a row. */
.events-contact__card .inquiry-form__foot .cta__tel { display: none; }

/* ---------- Bottom reassurance strip ---------- */

.events-contact__strip {
  position: relative;
  background: rgba(27, 13, 13, 0.55);
  border-top: 1px solid rgba(245, 237, 221, 0.08);
  padding-block: clamp(16px, 2vh, 24px);
  flex-shrink: 0;
}

.events-contact__strip-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  align-items: center;
}
@media (min-width: 760px) {
  .events-contact__strip-row {
    grid-template-columns: 1fr 1px 1fr;
    gap: clamp(24px, 3vw, 40px);
  }
  .events-contact__strip-row::before {
    content: "";
    grid-column: 2;
    grid-row: 1;
    align-self: stretch;
    width: 1px;
    background: rgba(245, 237, 221, 0.18);
  }
  /* Explicit column placement — default grid-auto-flow is sparse, so the
     ::before at col 2 would otherwise push cell 1 to col 3 row 1 and cell 2
     to col 1 row 2. */
  .events-contact__strip-row > .events-contact__strip-cell:nth-of-type(1) { grid-column: 1; grid-row: 1; }
  .events-contact__strip-row > .events-contact__strip-cell:nth-of-type(2) { grid-column: 3; grid-row: 1; }
}

.events-contact__strip-cell {
  display: grid;
  grid-template-columns: 32px 1fr;
  gap: 16px;
  align-items: center;
}
.events-contact__strip-cell p {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
}
.events-contact__strip-strong {
  color: var(--color-ink-cream) !important;
  font-weight: 500;
  margin-bottom: 2px !important;
}
.events-contact__strip-cell a {
  color: var(--color-accent-bright);
  text-decoration: none;
  font-weight: 500;
  transition: color 180ms ease-out;
}
.events-contact__strip-cell a:hover { color: var(--color-ink-cream); }
.events-contact__strip-sep {
  margin: 0 8px;
  color: rgba(245, 237, 221, 0.35);
}

.events-contact__strip-icon {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--color-accent-bright);
}
.events-contact__strip-icon svg { width: 24px; height: 24px; }

/* =========================================================================
   §§ LANDING-PAGE CONVERSION EDITS — 2026-05-28
   New rules added to support pricing display, tax disclosure, phone CTAs,
   the split sticky bar, the editorial therapy block, the B12 welcome form
   status region, and the closing-CTA 3-path layout. Kept inside the
   existing wine/cream/terracotta token system — no new colors.
   ========================================================================= */

/* ---- Nav: desktop phone link (sits left of the Book Now CTA) ----------- */
.nav__phone {
  display: none;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-ink-cream);
  padding: 8px 14px;
  border: 1px solid transparent;
  border-radius: 2px;
  transition:
    color var(--duration-micro) var(--ease-settle),
    border-color var(--duration-micro) var(--ease-settle);
  white-space: nowrap;
}
.nav__phone:hover,
.nav__phone:focus-visible {
  color: var(--color-accent-soft);
  border-color: rgba(217, 161, 153, 0.4);
}
@media (min-width: 1280px) {
  .nav__phone { display: inline-flex; align-items: center; }
}

/* ---- Service-tile tax suffix (small caps after the headline price) ---- */
.service-tile__tax {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
  margin-left: 4px;
  opacity: 0.85;
}

/* ---- One-line tax footnote under the three service tiles ------------- */
.services__tax-note {
  margin: var(--space-7) auto 0;
  max-width: 60ch;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--color-ink-soft);
}
.services__tax-note a {
  color: var(--color-accent);
  font-weight: 500;
  border-bottom: 1px solid rgba(155, 81, 69, 0.3);
  padding-bottom: 1px;
  transition: color var(--duration-micro) var(--ease-settle);
}
.services__tax-note a:hover { color: var(--color-accent-hover); }

/* ---- Featured Drips: per-card price line ----------------------------- */
.drip__price {
  margin: var(--space-3) 0 var(--space-3);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
  display: flex;
  align-items: baseline;
  gap: 6px;
}
.drip__price-from {
  opacity: 0.75;
}
.drip__price strong {
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  font-size: 1.0625rem;
  letter-spacing: 0;
  color: var(--color-ink-deep);
}
.drip__price-tax {
  font-size: 0.6875rem;
  opacity: 0.7;
}
/* Scannable value line under the price: duration · what's in the bag ·
   nurse stays. Reframes the number as an hour with an RN, not just a bag
   (mental accounting). Facts council-verified; pulled up from the prose. */
.drip__spec {
  margin: calc(var(--space-2) * -1) 0 var(--space-4);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-ink-soft);
}
.drip__spec-sep {
  color: var(--color-accent);
  margin: 0 0.3em;
}

/* ---- Tax footnote under the drips grid -------------------------------- */
.drips__tax-note {
  margin: var(--space-6) auto 0;
  max-width: 64ch;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.6;
  letter-spacing: 0.01em;
  color: var(--color-ink-cream-mute);
  opacity: 0.85;
}

/* ---- Editorial therapy block (replaces academic-citation §3) --------- */
.therapy--editorial {
  display: grid;
  gap: var(--space-5);
  max-width: 720px;
  margin: 0 auto;
  text-align: center;
}
.therapy--editorial .eyebrow { justify-self: center; }
.therapy--editorial .h-section {
  font-size: clamp(2rem, 3vw + 1rem, 3rem);
  line-height: 1.15;
}
.therapy--editorial .therapy__lede {
  max-width: 56ch;
  margin: 0 auto;
}
.therapy__edit-ctas {
  margin: var(--space-4) 0 0;
  display: inline-flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: var(--space-3) var(--space-4);
  justify-self: center;
}
.therapy__edit-sep {
  color: var(--color-accent);
  opacity: 0.6;
}
.therapy__edit-ctas .btn--link {
  font-size: 0.8125rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.therapy__disclaimer {
  margin: var(--space-6) auto 0;
  max-width: 58ch;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.7;
  color: var(--color-ink-soft);
  opacity: 0.85;
}

/* ---- Closing CTA: 3-path layout (Book / Call / Message) -------------- */
.closing__ctas {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: var(--space-3) var(--space-4);
  margin-top: var(--space-3);
}
.closing__note {
  margin-top: var(--space-5);
  display: inline-flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: baseline;
  gap: 6px;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-ink-cream-mute);
}
.closing__cta-link {
  color: var(--color-accent-bright);
  font-weight: 500;
  border-bottom: 1px solid rgba(216, 131, 118, 0.4);
  padding-bottom: 1px;
  transition: color var(--duration-micro) var(--ease-settle);
}
.closing__cta-link:hover,
.closing__cta-link:focus-visible {
  color: var(--color-accent-soft);
}

/* ---- Sticky mobile CTA — Call / Book split layout -------------------- */
.sticky-cta--split {
  display: none;            /* @media gate sets display: flex */
  padding: 0;
  background: var(--color-accent);
  text-align: left;
}
.sticky-cta--split .sticky-cta__half {
  flex: 1 1 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 16px var(--space-3);
  padding-bottom: calc(16px + env(safe-area-inset-bottom));
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--color-ink-cream);
  min-height: 44px;
  transition: background var(--duration-micro) var(--ease-settle);
}
.sticky-cta--split .sticky-cta__call,
.sticky-cta--split .sticky-cta__text {
  flex: 0 0 52%;
  background: rgba(0, 0, 0, 0.22);   /* darker half for visual separation */
}
.sticky-cta--split .sticky-cta__book {
  flex: 0 0 48%;
  background: transparent;
}
.sticky-cta--split .sticky-cta__call:hover,
.sticky-cta--split .sticky-cta__call:focus-visible,
.sticky-cta--split .sticky-cta__text:hover,
.sticky-cta--split .sticky-cta__text:focus-visible {
  background: rgba(0, 0, 0, 0.35);
}
.sticky-cta--split .sticky-cta__book:hover,
.sticky-cta--split .sticky-cta__book:focus-visible {
  background: var(--color-accent-hover);
}
.sticky-cta--split .sticky-cta__icon {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}
.sticky-cta--split .arrow {
  display: inline-block;
  margin-left: 8px;
  transition: transform var(--duration-micro) var(--ease-settle);
}
.sticky-cta--split .sticky-cta__book:hover .arrow { transform: translateX(3px); }
@media (max-width: 768px) {
  .sticky-cta--split { display: flex; }
}
@media (prefers-reduced-motion: reduce) {
  .sticky-cta--split .arrow { transition: none; }
}

/* ---- B12 form mailto-fallback status + welcome ribbon copy widen ----- */
.subscribe__status {
  margin: var(--space-3) 0 0;
  min-height: 1.2em;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-accent-soft);
}
.subscribe__status[data-form-state="sent"] {
  color: var(--color-accent-bright);
}
.subscribe__status[data-form-state="error"] {
  color: #E58F8F;
}
.subscribe__ribbon {
  /* Full "Welcome gift · Complimentary B12" without truncation. Cap to the
     panel and allow it to wrap on narrow phones rather than running off the
     card edge (the old nowrap + max-width:none overflowed and clipped the
     card). On desktop the panel is wide enough that it still sits on one line. */
  max-width: 100%;
  white-space: normal;
}

/* ---- Slim Groups & Events touchpoint under Subscribe ----------------- */
.subscribe__events-banner {
  margin: var(--space-7) auto 0;
  padding: var(--space-5) var(--space-6);
  max-width: 720px;
  background: var(--color-bg-ivory);
  border-top: 1px solid rgba(155, 81, 69, 0.18);
  text-align: center;
}
.subscribe__events-banner p {
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.0625rem, 0.4vw + 1rem, 1.25rem);
  line-height: 1.4;
  color: var(--color-ink-deep);
}
.subscribe__events-banner .btn--link {
  font-style: normal;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 500;
  margin-left: 6px;
  color: var(--color-accent);
}
.subscribe__events-banner .btn--link:hover { color: var(--color-accent-hover); }

/* ---- Accessibility H — hero overflow safety -------------------------- */
.hero__headline-display {
  overflow-wrap: break-word;
  word-break: normal;
  hyphens: none;
}
@media (max-width: 360px) {
  .hero__headline-display {
    font-size: clamp(2.5rem, 12vw, 3.25rem);
    line-height: 1.05;
  }
}

/* ---- Hero kicker: room to breathe at the wider Option-A copy --------- */
.hero__headline-kicker {
  max-width: 32ch;
}
@media (min-width: 900px) {
  .hero__headline-kicker { max-width: 40ch; }
}

/* ---- Drip overlay pause hook (toggled by scripts.js IntersectionObserver) */
.drip-overlay[data-paused="true"] .drip-chamber__droplet,
.drip-overlay[data-paused="true"] .drip-chamber__pool {
  animation-play-state: paused;
}

/* ---- Hero secondary cred line — service-area chips (Toronto, GTA cities) -- */
.hero__cred--area {
  margin-top: var(--space-3);
  font-size: 0.6875rem;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  opacity: 0.72;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  transform: translateY(-30%);   /* nudged up to tighten the gap under the hero credentials line */
}
.hero__cred--area .dash {
  color: var(--color-accent-bright);
  opacity: 0.6;
}

/* ---- Featured Drips: "Antioxidant IV" tag inside the eyebrow ------------- */
.drip__tag {
  display: inline-block;
  background: rgba(216, 131, 118, 0.16);
  color: var(--color-accent-bright);
  padding: 3px 9px 2px;
  border-radius: 999px;
  font-family: var(--font-sans);
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  line-height: 1;
  vertical-align: middle;
  margin-right: 2px;
}
.drip__tag-sep {
  color: var(--color-accent);
  opacity: 0.55;
  margin: 0 4px;
}

/* ---- Save-for-later banner (inside Featured Drips dark section) ---------- */
/* Editorial slim band — italic Cormorant copy on a translucent ivory wash
   against the wine background. Reads as a quiet aside, not a hard-sell pop. */
.save-for-later {
  margin: var(--space-9) auto 0;
  max-width: 760px;
  padding: var(--space-5) var(--space-6);
  background: linear-gradient(
    90deg,
    rgba(245, 237, 221, 0.04) 0%,
    rgba(245, 237, 221, 0.08) 50%,
    rgba(245, 237, 221, 0.04) 100%
  );
  border-top: 1px solid rgba(194, 118, 107, 0.28);
  border-bottom: 1px solid rgba(194, 118, 107, 0.18);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-4);
  position: relative;
}
.save-for-later::before {
  content: "";
  position: absolute;
  left: var(--space-5);
  top: 50%;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--color-accent-bright);
  transform: translateY(-50%);
  opacity: 0;
}
@media (min-width: 760px) {
  .save-for-later { padding-left: calc(var(--space-6) + 16px); }
  .save-for-later::before { opacity: 0.8; }
}
.save-for-later__copy {
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1rem, 0.3vw + 0.95rem, 1.1875rem);
  line-height: 1.45;
  color: var(--color-ink-cream);
  max-width: 46ch;
}
.save-for-later__eyebrow {
  display: block;
  font-family: var(--font-sans);
  font-style: normal;
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent-bright);
  margin-bottom: 6px;
}
.save-for-later__cta {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-accent-bright);
  white-space: nowrap;
  border-bottom: 1px solid rgba(216, 131, 118, 0.4);
  padding-bottom: 2px;
  transition:
    color var(--duration-micro) var(--ease-settle),
    border-color var(--duration-micro) var(--ease-settle);
}
.save-for-later__cta:hover,
.save-for-later__cta:focus-visible {
  color: var(--color-accent-soft);
  border-color: var(--color-accent-soft);
}
@media (max-width: 600px) {
  .save-for-later {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-3);
  }
}

/* ---- Sticky split CTA — hide while the hero is still in view ------------- */
.sticky-cta--split.is-on-hero {
  transform: translateY(120%);
  opacity: 0;
  pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
  .sticky-cta--split.is-on-hero { transform: none; }
}

/* ---------- Mobile tightening (≤ 560px) ----------
   Note: with 8 form fields stacked and 44px touch targets, the block on
   mobile is inherently taller than one viewport. The user can scroll past
   the strip; this is the practical limit. We still trim every other axis. */
@media (max-width: 560px) {
  .events-contact__headline { font-size: clamp(1.875rem, 7.5vw, 2.25rem); }
  .events-contact__rule { width: 40px; margin: 14px 0; }
  .events-contact__feature { grid-template-columns: 28px 1fr; gap: 12px; }
  .events-contact__feat-icon { width: 28px; height: 28px; }
  .events-contact__feat-icon svg { width: 14px; height: 14px; }
  .events-contact__card { padding: 20px 18px; }
  .events-contact__card-head { grid-template-columns: 36px 1fr; gap: 12px; }
  .events-contact__card-badge { width: 36px; height: 36px; }
  .events-contact__card-badge svg { width: 18px; height: 18px; }
  /* Restore iOS 44px touch target on mobile — desktop's 40px shrink only
     applies above 560px to keep the block in one viewport. */
  .events-contact__card .field input,
  .events-contact__card .field select,
  .events-contact__card .field textarea { min-height: 44px; padding: 11px 13px; font-size: 1rem; }
  .events-contact__card .field textarea { min-height: 92px; }
}

/* =====================================================================
   CRITIQUE PASS 2 — additions (2026-05-28)
   New components introduced during the IV Blends conversion-uplift pass:
     · Hero availability hint
     · Founders intro block (replaces the editorial essay + citations)
     · Blend card: price + ingredients line + secondary badge + Antioxidant tag
     · The Reset Ritual decoy card (between blends grid and add-ons)
     · Two-column FAQ layout
     · Service-area timing line
   ===================================================================== */

/* --- Hero: subhead spacing + availability hint pill ------------------- */
.page-hero__sub { margin-top: var(--space-3); }

.page-hero__avail {
  display: inline-flex;
  align-items: flex-start;
  gap: var(--space-3);
  margin-top: var(--space-6);
  padding: 12px 18px;
  border: 1px solid rgba(243, 232, 216, 0.18);
  border-radius: 999px;
  background: rgba(20, 8, 9, 0.32);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--color-ink-cream);
  max-width: 560px;
}
.page-hero__avail strong { color: var(--color-ink-cream); font-weight: 600; }
.page-hero__avail a {
  color: var(--color-accent-bright, var(--color-accent));
  border-bottom: 1px solid currentColor;
  white-space: nowrap;
}
.page-hero__avail a:hover { color: var(--color-ink-cream); }
.page-hero__avail-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #d4b07a;
  margin-top: 7px;
  box-shadow: 0 0 0 4px rgba(212, 176, 122, 0.18);
  flex-shrink: 0;
}

/* --- Founders intro block (Section 2) --------------------------------- */
.choose__more {
  margin-top: var(--space-6);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  letter-spacing: 0.08em;
}
.choose__more a {
  color: var(--color-accent);
  border-bottom: 1px solid currentColor;
}
.choose__more a:hover { color: var(--color-accent-hover); }
.choose__figure--founders { align-self: stretch; }
.choose__figure--founders .choose__figure-img {
  width: 100%;
  object-fit: cover;
  object-position: 50% 18%;
  border-radius: 4px;
  box-shadow: 0 18px 48px -20px rgba(46, 21, 23, 0.32);
  /* Full-bleed: no edge fade (was cropping the founders' faces) and no
     multiply blend, so the photo touches the top and bottom of the block. */
  -webkit-mask-image: none;
          mask-image: none;
  mix-blend-mode: normal;
  /* Mobile-first: full-width portrait, faces in frame. */
  aspect-ratio: 4 / 5;
  max-height: none;
  margin-inline: 0;
}
@media (min-width: 880px) {
  /* Desktop: fill the text column's full height edge to edge. */
  .choose__figure--founders .choose__figure-img {
    height: 100%;
    min-height: 100%;
    aspect-ratio: auto;
  }
}

/* --- Blend / addon / ritual: price-amt override ----------------------- */
.blend__price-amt,
.addon__price-amt,
.ritual__price-amt {
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
  text-transform: none;
}

/* --- Blend card: KEY INGREDIENTS line --------------------------------- */
.blend__meta-ing { margin-top: 4px; }
.blend__meta-ing dd {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--color-ink-deep);
}
.blend__meta-ing-aside {
  display: block;
  margin-top: 6px;
  font-style: italic;
  font-size: 0.75rem;
  color: var(--color-ink-soft);
  letter-spacing: 0;
}

/* --- Blend card: soft badge variant (Most booked) --------------------- */
.blend__badge--soft {
  background: rgba(46, 21, 23, 0.06);
  color: var(--color-ink-deep);
  border: 1px solid rgba(46, 21, 23, 0.22);
}

/* --- Blend card: Antioxidant IV tag (Glutathione differentiator) ------ */
.blend__tag--antioxidant { color: #6b8e7a; }
.blend__tag--antioxidant::before { background: #6b8e7a; }

/* --- The Support Packages — carousel / featured packages -------------- */
.ritual {
  position: relative;
  padding-block: clamp(72px, 9vw, 120px);
  background:
    radial-gradient(ellipse at 12% 0%, rgba(212, 176, 122, 0.10) 0%, transparent 55%),
    radial-gradient(ellipse at 92% 100%, rgba(168, 79, 70, 0.10) 0%, transparent 50%),
    linear-gradient(180deg, #2e1517 0%, #261113 100%);
  color: var(--color-ink-cream);
  overflow: hidden;
}
.ritual__grain { opacity: 0.10; }
.ritual__container { position: relative; z-index: 1; }
.ritual__eyebrow {
  color: var(--color-ink-cream-mute);
  margin-bottom: var(--space-7);
  text-align: center;
}
/* The card is now a 3D flip container; visual styling lives on each face. */
.ritual__card {
  position: relative;
  perspective: 1800px;
}
.ritual__flip {
  position: relative;
  height: 100%;
  transform-style: preserve-3d;
  transition: transform 640ms cubic-bezier(0.2, 0.7, 0.2, 1);
}
.ritual__card.is-flipped .ritual__flip { transform: rotateY(180deg); }

.ritual__face {
  border: 1px solid rgba(243, 232, 216, 0.16);
  border-radius: 6px;
  background:
    linear-gradient(180deg, rgba(243, 232, 216, 0.045) 0%, rgba(243, 232, 216, 0.015) 100%);
  isolation: isolate;
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
}
.ritual__face::before {
  content: '';
  position: absolute;
  top: 0; left: 12%; right: 12%;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, rgba(212, 176, 122, 0.55) 50%, transparent 100%);
  z-index: 2;
}
/* Front sits in flow and defines the card height; back overlays it, pre-rotated. */
.ritual__face--front {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  min-height: 100%;
  padding: clamp(32px, 4.5vw, 64px) clamp(28px, 4.5vw, 64px);
}
.ritual__face--back {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding: clamp(32px, 4.5vw, 56px) clamp(28px, 4.5vw, 56px);
  overflow-y: auto;
  transform: rotateY(180deg);
}
@media (min-width: 800px) {
  .ritual__face--front { grid-template-columns: 1.55fr 1fr; align-items: end; gap: clamp(40px, 5vw, 80px); }
}

/* Featured first package — the flipped Drip Tonic bag set as a faded backdrop,
   anchored right, faded out toward the copy on the left so text stays legible. */
.ritual__face--featured { position: relative; overflow: hidden; }
.ritual__face--featured > * { position: relative; z-index: 1; }
.ritual__face--featured::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-repeat: no-repeat;
  background-position: left center;
  background-size: cover;
  opacity: 0.22;
  -webkit-mask-image: linear-gradient(90deg, #000 0%, rgba(0,0,0,0.7) 26%, rgba(0,0,0,0.18) 54%, transparent 100%);
          mask-image: linear-gradient(90deg, #000 0%, rgba(0,0,0,0.7) 26%, rgba(0,0,0,0.18) 54%, transparent 100%);
}
.ritual__face--reset::after       { background-image: url(img/packages/reset-bag-760.webp); }
/* The glutathione + custom art is darker than the bright reset bag, so it needs
   a higher opacity to read at all behind the maroon card. */
.ritual__face--glutathione::after { background-image: url(img/packages/glutathione-package-760.webp); opacity: 0.72; }
.ritual__face--custom::after      { background-image: url(img/packages/custom-package-760.webp); opacity: 0.72; }
@media (min-width: 800px) {
  .ritual__face--featured::after {
    opacity: 0.3;
    -webkit-mask-image: linear-gradient(90deg, #000 0%, rgba(0,0,0,0.72) 30%, rgba(0,0,0,0.12) 60%, transparent 100%);
            mask-image: linear-gradient(90deg, #000 0%, rgba(0,0,0,0.72) 30%, rgba(0,0,0,0.12) 60%, transparent 100%);
  }
  .ritual__face--reset::after       { background-image: url(img/packages/reset-bag-1400.webp); }
  .ritual__face--glutathione::after { background-image: url(img/packages/glutathione-package-1400.webp); opacity: 0.82; }
  .ritual__face--custom::after      { background-image: url(img/packages/custom-package-1400.webp); opacity: 0.82; }
}
@media (prefers-reduced-motion: no-preference) {
  .ritual__card[data-flip-card]:hover .ritual__face--featured::after { opacity: 0.42; transition: opacity 400ms ease-out; }
  /* Darker art starts higher, so hover lifts it further rather than dimming it. */
  .ritual__card[data-flip-card]:hover .ritual__face--glutathione::after,
  .ritual__card[data-flip-card]:hover .ritual__face--custom::after { opacity: 0.92; }
}
/* The price + actions sit over the brightest part of the bag; a soft shadow
   keeps them legible without dimming the image behind them. */
.ritual__face--featured .ritual__price,
.ritual__face--featured .ritual__price-tax,
.ritual__face--featured .ritual__flip-btn { text-shadow: 0 1px 12px rgba(26, 10, 7, 0.6); }

.ritual__title {
  margin: 0;
  color: var(--color-ink-cream);
  max-width: 22ch;
}
.ritual__title em { color: var(--color-accent-bright, var(--color-accent)); font-style: italic; }

.ritual__compose {
  margin: var(--space-5) 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-ink-cream);
}
.ritual__compose-item {
  display: inline-block;
  padding: 7px 13px;
  border: 1px solid rgba(243, 232, 216, 0.24);
  border-radius: 999px;
  background: rgba(243, 232, 216, 0.025);
}
.ritual__sep {
  color: rgba(243, 232, 216, 0.45);
  font-weight: 300;
  font-size: 1rem;
  letter-spacing: 0;
}

.ritual__desc {
  margin: var(--space-5) 0 0;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.65;
  color: var(--color-ink-cream-mute);
  max-width: 56ch;
}

.ritual__meta {
  display: grid;
  grid-template-columns: auto auto;
  gap: clamp(20px, 3vw, 48px);
  margin-top: var(--space-6);
}
.ritual__meta-label {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  margin: 0 0 4px;
}
.ritual__meta-val {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-ink-cream);
  margin: 0;
}

.ritual__foot {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  align-items: flex-start;
}
@media (min-width: 800px) {
  .ritual__foot { align-items: flex-end; text-align: right; }
}
.ritual__price {
  font-family: var(--font-serif);
  font-size: clamp(2.5rem, 4.5vw, 3.25rem);
  font-weight: 500;
  color: var(--color-accent-bright, var(--color-accent));
  margin: 0;
  line-height: 1;
  letter-spacing: -0.015em;
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
}
.ritual__price-tax {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--color-ink-cream-mute);
}
.ritual__cta { white-space: nowrap; }

/* Foot actions: primary CTA + a quiet "flip to learn more" toggle */
.ritual__foot-actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  align-items: flex-start;
}
@media (min-width: 800px) {
  .ritual__foot-actions { align-items: flex-end; }
}
.ritual__flip-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 6px 2px;
  border: 0;
  background: none;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  text-decoration: underline solid transparent;
  text-underline-offset: 5px;
  transition: color 180ms ease-out, text-decoration-color 180ms ease-out;
}
.ritual__flip-btn:hover,
.ritual__flip-btn:focus-visible {
  color: var(--color-ink-cream);
  text-decoration-color: rgba(212, 176, 122, 0.7);
}
.ritual__flip-icon {
  font-size: 1.05rem;
  line-height: 1;
  transition: transform 360ms cubic-bezier(0.2, 0.7, 0.2, 1);
}
.ritual__flip-btn:hover .ritual__flip-icon,
.ritual__flip-btn:focus-visible .ritual__flip-icon { transform: rotate(180deg); }

/* --- Back face: "what's inside / how it works" ------------------------- */
.ritual__back-eyebrow {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent-bright, var(--color-accent));
  margin: 0;
}
.ritual__back-title {
  margin: 0;
  color: var(--color-ink-cream);
  font-family: var(--font-serif);
  font-size: clamp(1.5rem, 2.6vw, 2rem);
  line-height: 1.15;
  max-width: 24ch;
}
.ritual__back-title em { color: var(--color-accent-bright, var(--color-accent)); font-style: italic; }
.ritual__back-list {
  list-style: none;
  margin: var(--space-3) 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.ritual__back-list li {
  display: grid;
  gap: 3px;
  padding-left: var(--space-5);
  border-left: 1px solid rgba(212, 176, 122, 0.4);
}
.ritual__back-term {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-ink-cream);
}
.ritual__back-def {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
  max-width: 52ch;
}
.ritual__back-note {
  margin: var(--space-3) 0 0;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
  font-style: italic;
  max-width: 54ch;
}
.ritual__flip-back {
  margin-top: auto;
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 8px 2px;
  border: 0;
  background: none;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-ink-cream-mute);
  text-decoration: underline solid transparent;
  text-underline-offset: 5px;
  transition: color 180ms ease-out, text-decoration-color 180ms ease-out;
}
.ritual__flip-back:hover,
.ritual__flip-back:focus-visible {
  color: var(--color-ink-cream);
  text-decoration-color: rgba(212, 176, 122, 0.7);
}
.ritual__flip-back .arrow { transition: transform 200ms ease-out; }
.ritual__flip-back:hover .arrow,
.ritual__flip-back:focus-visible .arrow { transform: translateX(-3px); }

/* Reduced motion: swap faces with a crossfade instead of a 3D rotation */
@media (prefers-reduced-motion: reduce) {
  .ritual__flip { transition: none; }
  .ritual__card.is-flipped .ritual__flip { transform: none; }
  .ritual__face { transition: opacity 160ms ease-out; }
  .ritual__face--back {
    transform: none;
    opacity: 0;
    visibility: hidden;
  }
  .ritual__card.is-flipped .ritual__face--front { opacity: 0; visibility: hidden; }
  .ritual__card.is-flipped .ritual__face--back { opacity: 1; visibility: visible; }
  .ritual__flip-icon { transition: none; }
}

/* --- Packages carousel ------------------------------------------------- */
.ritual__eyebrow { margin-bottom: var(--space-4); }
.ritual__heading {
  text-align: center;
  color: var(--color-ink-cream);
  max-width: 24ch;
  margin: 0 auto var(--space-7);
}
.ritual__heading em { color: var(--color-accent-bright, var(--color-accent)); font-style: italic; }

.ritual__viewport { overflow: hidden; }
.ritual__track {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  gap: clamp(20px, 3vw, 40px);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.ritual__track::-webkit-scrollbar { display: none; }
.ritual__slide {
  flex: 0 0 100%;
  scroll-snap-align: center;
  min-width: 0;
}
/* Each slide hosts the existing card; stretch it to fill the slide height */
.ritual__slide .ritual__card { height: 100%; }

/* Placeholder ("Coming soon") cards read as upcoming, not yet bookable */
.ritual__card--soon .ritual__face {
  background: linear-gradient(180deg, rgba(243, 232, 216, 0.03) 0%, rgba(243, 232, 216, 0.008) 100%);
  border-style: dashed;
}
.ritual__card--soon .ritual__face::before { opacity: 0.5; }
.ritual__tag {
  display: inline-block;
  font-family: var(--font-sans);
  font-size: 0.625rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-accent-bright, var(--color-accent));
  border: 1px solid rgba(212, 176, 122, 0.4);
  border-radius: 999px;
  padding: 5px 12px;
  margin: 0 0 var(--space-4);
}
.ritual__price-amt--tba {
  font-size: clamp(1.5rem, 2.5vw, 2rem);
  color: var(--color-ink-cream);
}
/* Struck-through anchor price (e.g. "from $676" beside the bundled $600) */
.ritual__price-was {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  font-weight: 400;
  letter-spacing: 0.02em;
  color: var(--color-ink-cream-mute);
  text-decoration: line-through;
  text-decoration-color: rgba(212, 176, 122, 0.7);
  align-self: center;
}
/* Filled "savings" variant of the package tag */
.ritual__tag--value {
  color: var(--color-bg-deep);
  background: var(--color-accent-bright, var(--color-accent));
  border-color: transparent;
  font-weight: 600;
}

.ritual__controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-5);
  margin-top: var(--space-7);
}
.ritual__nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 999px;
  border: 1px solid rgba(243, 232, 216, 0.3);
  background: rgba(243, 232, 216, 0.04);
  color: var(--color-ink-cream);
  font-size: 1.125rem;
  cursor: pointer;
  flex: 0 0 auto;
  transition: background 180ms ease-out, border-color 180ms ease-out, transform 180ms ease-out;
}
.ritual__nav:hover,
.ritual__nav:focus-visible {
  background: rgba(243, 232, 216, 0.12);
  border-color: rgba(212, 176, 122, 0.6);
}
.ritual__nav:active { transform: scale(0.94); }
.ritual__nav:disabled { opacity: 0.3; cursor: default; }

.ritual__dots {
  display: flex;
  align-items: center;
  gap: 10px;
}
.ritual__dot {
  width: 9px;
  height: 9px;
  border-radius: 999px;
  border: 1px solid rgba(243, 232, 216, 0.45);
  background: transparent;
  padding: 0;
  cursor: pointer;
  transition: background 180ms ease-out, border-color 180ms ease-out, width 180ms ease-out;
}
.ritual__dot[aria-current="true"] {
  width: 24px;
  background: var(--color-accent-bright, var(--color-accent));
  border-color: var(--color-accent-bright, var(--color-accent));
}

/* Ghost button that sits on the dark packages surface */
.btn--ghost-cream {
  background: transparent;
  color: var(--color-ink-cream);
  border: 1px solid rgba(243, 232, 216, 0.45);
  transition: background 180ms ease-out, color 180ms ease-out, border-color 180ms ease-out;
}
.btn--ghost-cream:hover,
.btn--ghost-cream:focus-visible {
  background: var(--color-ink-cream);
  color: var(--color-ink-deep);
  border-color: var(--color-ink-cream);
}

@media (prefers-reduced-motion: reduce) {
  .ritual__track { scroll-behavior: auto; }
  .ritual__nav:active { transform: none; }
}

/* --- FAQ two-column editorial layout ---------------------------------- */
.faq__cols {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-9);
}
@media (min-width: 900px) {
  .faq__cols {
    grid-template-columns: minmax(280px, 380px) 1fr;
    gap: clamp(48px, 6vw, 96px);
    align-items: start;
  }
}
.faq__intro { /* sticky on desktop only */ }
@media (min-width: 900px) {
  .faq__intro { position: sticky; top: var(--space-9); }
}
.faq__title { margin: var(--space-4) 0 var(--space-5); }
.faq__lede {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.65;
  color: var(--color-ink-deep);
  max-width: 36ch;
  margin: 0 0 var(--space-6);
}
.faq__intro-cta { margin: 0 0 var(--space-3); }
.faq__intro-write {
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-ink-soft);
  margin: 0;
}
.faq__intro-write a {
  color: var(--color-accent);
  border-bottom: 1px solid currentColor;
}

/* --- Service area: timing line (replaces 2 redundant time cards) ------ */
.service-area__timing {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-top: var(--space-5);
  padding-top: var(--space-5);
  border-top: 1px solid rgba(243, 232, 216, 0.14);
  font-family: var(--font-sans);
  font-size: 0.875rem;
  color: var(--color-ink-cream-mute);
  font-style: italic;
}
.service-area__timing-icon {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  color: var(--color-ink-cream);
}
.service-area__timing-icon svg { width: 100%; height: 100%; display: block; }


/* =========================================================================
   §10 · Copy protection
   Deters casual copy/paste of body copy. This is a deterrent, not a lock —
   view-source and reader mode still bypass it, and that's expected.
   Zoom is untouched (selection only). Screen readers are unaffected —
   they don't rely on text selection, so accessibility is preserved.
   ------------------------------------------------------------------------ */
body {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}

/* Carve-outs: the things people legitimately need to select/copy. */
input,
textarea,
select,
[contenteditable],
a[href^="tel:"],
a[href^="mailto:"],
address,
.is-selectable,
.is-selectable * {
  -webkit-user-select: text;
  -moz-user-select: text;
  -ms-user-select: text;
  user-select: text;
}

/* Images: right-click and drag are blocked globally by the JS handlers.
   This hardens against drag-to-save in WebKit/Safari, which doesn't always
   route through the dragstart event. */
img {
  -webkit-user-drag: none;
  -khtml-user-drag: none;
  -moz-user-drag: none;
  user-drag: none;
  -webkit-touch-callout: none; /* iOS: suppress the long-press save sheet */
}


/* =========================================================================
   §CONFIRM — double opt-in / "thank you for subscribing" page
   Scoped block. Reuses tokens + .grain. No edits to shared rules above.
   ========================================================================= */
.confirm {
  background: var(--color-bg-cream);
  padding: var(--space-9) 0 var(--space-10);
  min-height: 70vh;
}
.confirm__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Wordmark above the card */
.confirm__wordmark {
  margin: 0 0 var(--space-6);
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: var(--color-ink-soft);
}

/* ---- Card ---------------------------------------------------------------- */
.confirm__card {
  position: relative;
  overflow: hidden;
  width: 100%;
  max-width: 720px;
  padding: var(--space-8) var(--space-5) var(--space-7);
  text-align: center;
  border-radius: 18px;
  background:
    radial-gradient(120% 120% at 50% 0%, #321719 0%, var(--color-bg-deep) 45%, var(--color-bg-espresso) 100%);
  color: var(--color-ink-cream);
  box-shadow:
    0 1px 0 rgba(245, 237, 221, 0.04) inset,
    0 40px 80px -32px rgba(27, 13, 13, 0.55);
}
.confirm__card > *:not(.grain) { position: relative; z-index: 1; }
.confirm__card .grain { opacity: 0.10; }

/* Ribbon banner with pointed ends */
.confirm__banner {
  display: inline-block;
  margin: 0 auto var(--space-6);
  padding: 9px 26px;
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-bg-espresso);
  background: var(--color-accent-soft);
  clip-path: polygon(
    0 50%, 14px 0, calc(100% - 14px) 0, 100% 50%,
    calc(100% - 14px) 100%, 14px 100%);
}

.confirm__heading {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2.4rem, 5vw + 1rem, 3.6rem);
  line-height: 1.04;
  letter-spacing: -0.02em;
  margin: 0 0 var(--space-2);
  text-wrap: balance;
}
.confirm__heading em { font-style: italic; color: var(--color-accent-soft); }

.confirm__subheading {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 2vw + 0.75rem, 2rem);
  line-height: 1.15;
  letter-spacing: -0.01em;
  margin: 0 0 var(--space-5);
  color: var(--color-ink-cream);
  text-wrap: balance;
}
.confirm__subheading em { font-style: italic; color: var(--color-accent-soft); }

.confirm__body {
  max-width: 46ch;
  margin: 0 auto var(--space-7);
  font-size: var(--font-size-base);
  line-height: 1.6;
  color: var(--color-ink-cream-mute);
}

/* ---- Actions ------------------------------------------------------------- */
.confirm__actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  max-width: 440px;
  margin: 0 auto;
}
.confirm__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  min-height: 52px;
  padding: 15px 28px;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  transition:
    background var(--duration-micro) var(--ease-settle),
    color var(--duration-micro) var(--ease-settle),
    border-color var(--duration-micro) var(--ease-settle);
}
.confirm__btn-icon { width: 16px; height: 16px; flex: 0 0 auto; }
.confirm__btn--cream {
  background: var(--color-ink-cream);
  color: var(--color-bg-espresso);
}
.confirm__btn--cream:hover { background: #fff; }
.confirm__btn--ghost {
  background: transparent;
  color: var(--color-accent-soft);
  border-color: var(--color-border-deep);
}
.confirm__btn--ghost:hover {
  border-color: var(--color-accent-soft);
  color: var(--color-ink-cream);
}
.confirm__btn--ghost[data-resent] { color: var(--color-ink-cream-mute); }

.confirm__rule {
  width: 100%;
  max-width: 540px;
  height: 1px;
  margin: var(--space-7) auto var(--space-6);
  border: 0;
  background: var(--color-border-deep);
}

/* ---- Gift reassurance ---------------------------------------------------- */
.confirm__gift {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
  max-width: 540px;
  margin: 0 auto;
  text-align: left;
}
.confirm__gift-icon {
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  color: var(--color-accent-line);
  margin-top: 2px;
}
.confirm__gift-text {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
}
.confirm__gift-text strong {
  display: block;
  font-weight: 500;
  color: var(--color-accent-soft);
}

/* ---- Perks strip --------------------------------------------------------- */
.confirm__perks {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-6) var(--space-4);
  width: 100%;
  max-width: 720px;
  margin: var(--space-7) 0 0;
  padding: 0;
  list-style: none;
}
.confirm__perk {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  font-size: 0.875rem;
  line-height: 1.35;
  color: var(--color-ink-muted);
}
.confirm__perk-icon {
  width: 26px;
  height: 26px;
  flex: 0 0 auto;
  color: var(--color-accent);
}

@media (min-width: 720px) {
  .confirm { padding: var(--space-10) 0; }
  .confirm__card {
    max-width: 980px;
    padding: var(--space-8) var(--space-9) var(--space-7);
  }
  .confirm__perks {
    max-width: 980px;
    grid-template-columns: repeat(4, 1fr);
    gap: 0;
  }
  .confirm__perk { justify-content: center; padding: 0 var(--space-5); }
  .confirm__perk + .confirm__perk { border-left: 1px solid var(--color-border-cream); }
}

@media (prefers-reduced-motion: reduce) {
  .confirm__btn, .confirm__btn .arrow { transition: none; }
}

/* ======================================================================
   Groups & Events — homepage section (§7)
   Two-column on desktop (editorial image + content), stacked on mobile.
   Reuses global tokens; no new color values introduced.
   ====================================================================== */
.groups-home {
  display: grid;
  gap: clamp(28px, 4vw, 56px);
  align-items: center;
}
@media (min-width: 900px) {
  .groups-home {
    grid-template-columns: minmax(0, 0.85fr) minmax(0, 1fr);
    gap: clamp(48px, 5vw, 88px);
  }
}

.groups-home__art {
  margin: 0;
  border-radius: var(--radius-md);
  overflow: hidden;
  border: 1px solid var(--color-border-cream);
  aspect-ratio: 4 / 5;
}
@media (min-width: 900px) {
  .groups-home__art { aspect-ratio: 4 / 5.4; }
}
.groups-home__art img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
}

.groups-home__content { display: grid; gap: var(--space-4); }
.groups-home__title { margin: 0; }
.groups-home__lede {
  margin: 0;
  max-width: 56ch;
  color: var(--color-ink-muted);
}

.groups-home__grid {
  list-style: none;
  margin: var(--space-2) 0 0;
  padding: 0;
  display: grid;
  gap: var(--space-4);
}
.groups-home__card {
  padding-left: var(--space-4);
  border-left: 2px solid var(--color-accent-soft);
}
.groups-home__card-name {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.375rem;
  line-height: 1.2;
  letter-spacing: -0.01em;
  color: var(--color-ink-deep);
  margin: 0 0 4px;
}
.groups-home__card-desc {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--color-ink-muted);
}

.groups-home__cta { justify-self: start; margin-top: var(--space-3); }

/* ──────────────────────────────────────────────────────────────────────
   Blend-card mobile compaction (2026-06)
   The drip menu rendered ~22,000px (≈26 phone screens) tall on mobile:
   every card stacked a near-full-screen 4/5 arch image on top of four
   always-open meta rows, each of which reserved two lines of height even
   when its value was one line ("About 60 min"). Desktop keeps the taller
   art + reserved heights — they align the 3-up comparison grid — so this
   is scoped to ≤700px only. No markup or content changes; fully reversible.
   ────────────────────────────────────────────────────────────────────── */
@media (max-width: 700px) {
  /* Full-width carousel card: a shorter image keeps the body above the fold. */
  .blend__art { aspect-ratio: 4 / 3; }

  /* Drop the desktop's 2-line row reservations (only needed to align the
     side-by-side comparison grid) so a single card reads tight, full size. */
  .blend__goal { min-height: 0; }
  .blend__meta dd { min-height: 0; }
}

/* =============================================================================
   Cookie consent banner — analytics (GA4) is gated behind this; see scripts.js.
   Brand-matched: ivory surface, terracotta Accept, ghost Decline of equal
   weight (PIPEDA / Law 25: declining is as easy as accepting). Bottom-anchored,
   above the sticky CTA (z 50); a one-time slide-in on first visit.
   ========================================================================= */
.cookie-banner {
  position: fixed;
  left: var(--gutter-mobile);
  right: var(--gutter-mobile);
  bottom: calc(var(--space-4) + env(safe-area-inset-bottom));
  z-index: 60;
  background: var(--color-bg-ivory);
  border: 1px solid var(--color-border-cream);
  border-radius: var(--radius-md);
  box-shadow: 0 24px 56px -28px rgba(27, 13, 13, 0.55);
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--duration-component) var(--ease-settle),
              transform var(--duration-component) var(--ease-settle);
}
.cookie-banner.is-visible { opacity: 1; transform: translateY(0); }

.cookie-banner__inner {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding: var(--space-5);
}
.cookie-banner__text {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--font-size-sm);
  line-height: 1.6;
  color: var(--color-ink-muted);
}
.cookie-banner__text a {
  color: var(--color-accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.cookie-banner__text a:hover { color: var(--color-accent-hover); }

.cookie-banner__actions {
  display: flex;
  gap: var(--space-3);
  justify-content: flex-end;
}
.cookie-banner__btn {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  padding: 12px var(--space-5);
  min-height: 44px;
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: background var(--duration-micro) var(--ease-settle),
              color var(--duration-micro) var(--ease-settle),
              border-color var(--duration-micro) var(--ease-settle);
}
.cookie-banner__btn:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}
.cookie-banner__btn--solid {
  background: var(--color-accent);
  color: var(--color-ink-cream);
  border: 1px solid var(--color-accent);
}
.cookie-banner__btn--solid:hover,
.cookie-banner__btn--solid:focus-visible {
  background: var(--color-accent-hover);
  border-color: var(--color-accent-hover);
}
.cookie-banner__btn--ghost {
  background: transparent;
  color: var(--color-ink-deep);
  border: 1px solid var(--color-border-cream);
}
.cookie-banner__btn--ghost:hover,
.cookie-banner__btn--ghost:focus-visible {
  border-color: var(--color-ink-muted);
  background: var(--color-surface-cream);
}

@media (min-width: 768px) {
  .cookie-banner {
    left: auto;
    right: var(--space-6);
    bottom: var(--space-6);
    max-width: 420px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .cookie-banner { transition: opacity 160ms linear; transform: none; }
}

/* =========================================================================
   iv-blends.html — mobile density pass
   Reduces vertical length of the page on phones without touching the
   desktop / tablet layouts. Scoped to phone widths; structure is unchanged.
   ========================================================================= */

/* §2 "Built by Two RNs" — on phones the founders photo sits beside the heading
   (grid is defined on base .choose); keep the photo a tidy top-aligned portrait
   rather than stretching it, and the quote runs full-width below. */
@media (max-width: 879.98px) {
  .choose__figure--founders { align-self: start; }
  .choose__figure--founders .choose__figure-img {
    height: auto;
    min-height: 0;
    aspect-ratio: 4 / 5;
    margin-inline: 0;
  }
}

@media (max-width: 599.98px) {
  /* Trim the heading so it sits comfortably in the narrower intro column. */
  .choose__heading { font-size: clamp(1.5rem, 5.6vw, 2rem); line-height: 1.16; }

  /* §3 Featured Blends menu — now a full-width swipe carousel (one card at a
     time), so type and padding stay at their normal, comfortable size; the
     old 2-up shrink rules are intentionally gone. */

  /* §3.5 The Packages — left at full size on purpose. It's a one-card-at-a-time
     carousel, so shrinking it barely shortens the page but cheapens the card. */

  /* §6 How it works — see the §6 accordion block below; the steps are a
     stacked accordion now, so no mobile-specific overrides are needed here. */

  /* §9 "Real care, quietly delivered" — safety cards two-up (2×2) instead of
     a single tall stack. */
  .safety__grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-3); }
  .safety__card { padding: var(--space-5); }
  .safety__sym { font-size: 1.25rem; margin-bottom: var(--space-1); }
  .safety__desc { font-size: 0.8125rem; line-height: 1.5; }
}

/* =========================================================================
   §6 "How it works" — stacked step accordion (iv-blends only).
   Scoped to .qstep--accordion so the shared .qstep card style used elsewhere
   (education pages) is untouched. Works at every width; step 01 open default.
   ========================================================================= */
.qstep--accordion {
  display: block;
  padding: 0;
  overflow: hidden;
}
.qstep--accordion:hover {
  transform: none;
  box-shadow:
    0 1px 0 rgba(255,255,255,0.55) inset,
    0 18px 32px -28px rgba(46, 21, 23, 0.28);
}
.qstep__heading { margin: 0; font: inherit; }
.qstep__toggle {
  width: 100%;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: clamp(var(--space-4), 2.5vw, var(--space-5));
  padding: clamp(var(--space-4), 2.4vw, var(--space-5)) clamp(var(--space-5), 2.4vw, var(--space-6));
  background: none;
  border: 0;
  cursor: pointer;
  text-align: left;
  color: var(--color-ink-deep);
  font-family: inherit;
}
.qstep__toggle:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: -3px;
  border-radius: 14px;
}
.qstep--accordion .qstep__num {
  width: 40px;
  height: 40px;
  font-size: 1rem;
  margin-top: 0;
}
.qstep--accordion .qstep__title { font-size: 0.9375rem; }
.qstep__chevron {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  color: var(--color-accent);
  transition: transform 280ms var(--ease-settle, ease-out);
}
.qstep__chevron svg { width: 16px; height: 16px; display: block; }
.qstep.is-open .qstep__chevron { transform: rotate(180deg); }

/* Collapsible panel — max-height animates the open/close; the value is a
   generous ceiling (content is only a short paragraph + link). */
.qstep__panel {
  overflow: hidden;
  max-height: 0;
  transition: max-height 320ms var(--ease-settle, ease-out);
}
.qstep.is-open .qstep__panel { max-height: 360px; }
.qstep__panel-inner {
  display: grid;
  gap: var(--space-3);
  padding: 0 clamp(var(--space-5), 2.4vw, var(--space-6)) clamp(var(--space-5), 2.4vw, var(--space-6));
}
.qstep--accordion .qstep__desc { max-width: 62ch; }

@media (prefers-reduced-motion: reduce) {
  .qstep__panel,
  .qstep__chevron { transition: none; }
}

/* =========================================================================
   Quiz result — "Email me my blend" lead capture (sits inside the dark quiz
   card, posts to Brevo). Matches the cream-on-deep result palette.
   ========================================================================= */
.quiz__capture {
  display: grid;
  gap: var(--space-3);
  margin-top: var(--space-2);
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-border-deep);
}
.quiz__capture-label {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  line-height: 1.55;
  color: var(--color-ink-cream-mute);
}
.quiz__capture-label strong { color: var(--color-ink-cream); font-weight: 600; }
.quiz__capture-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}
.quiz__capture-input {
  flex: 1 1 12rem;
  min-width: 0;
  padding: 13px 16px;
  border-radius: 10px;
  border: 1px solid var(--color-border-deep);
  background: rgba(243, 232, 216, 0.06);
  color: var(--color-ink-cream);
  font-family: var(--font-sans);
  font-size: 1rem; /* ≥16px so iOS Safari doesn't zoom the field */
  min-height: 48px;
}
.quiz__capture-input::placeholder { color: var(--color-ink-cream-mute); opacity: 0.7; }
.quiz__capture-input:focus-visible {
  outline: 2px solid var(--color-accent-bright);
  outline-offset: 1px;
  border-color: transparent;
}
.quiz__capture-btn { flex: 0 0 auto; white-space: nowrap; }
.quiz__capture-consent {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: var(--space-3);
  align-items: start;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  line-height: 1.5;
  color: var(--color-ink-cream-mute);
  cursor: pointer;
}
.quiz__capture-consent input {
  margin-top: 0.15em;
  width: 18px;
  height: 18px;
  accent-color: var(--color-accent-bright);
  flex: 0 0 auto;
}
.quiz__capture-status {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.5;
  color: var(--color-accent-bright);
}
.quiz__capture-status:empty { display: none; }
.quiz__capture-status a { color: var(--color-ink-cream); text-decoration: underline; }

/* Quiz intro — small disclaimer note under the lede (quiz ≠ medical assessment) */
.quiz__intro-note {
  margin: var(--space-3) 0 0;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  line-height: 1.55;
  color: var(--color-ink-muted);
  max-width: 52ch;
}
