/* ============================================================
   main.css — SkinMedics "MAISON"
   Luxury fashion-house language: monochrome, full-bleed imagery,
   editorial restraint. Sharp corners, hairline rules, tracked caps,
   vast whitespace. Native scroll. (css/tokens.css drives all values.)
   ============================================================ */

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; -webkit-tap-highlight-color: transparent; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
  /* Theme vars flip with [data-theme] for the scroll-driven colour morph */
  --fg: var(--ink);
  --fg-soft: var(--ink-soft);
  --hairline: var(--line);
  font-family: var(--font-body);
  font-weight: var(--weight-regular);
  font-size: var(--step-0);
  line-height: var(--lh-body);
  color: var(--fg);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
/* Light<->dark morph — animate the THEME VARIABLES themselves (not per-element
   colour). Because --fg/--fg-soft/--hairline/--accent-ink are registered, inherited
   <color> properties, transitioning them on <body> makes EVERY element that reads
   them (inherited body text, explicit labels/leads, hairlines, accents) recolour in
   perfect lockstep with the background — no element chases the body's animation, so
   nothing lags a beat behind. Browsers without @property simply snap (graceful). */
@property --fg        { syntax: "<color>"; inherits: true; initial-value: #14130F; }
@property --fg-soft   { syntax: "<color>"; inherits: true; initial-value: #6A655B; }
@property --hairline  { syntax: "<color>"; inherits: true; initial-value: rgba(20,19,15,0.14); }
@property --accent-ink{ syntax: "<color>"; inherits: true; initial-value: #14130F; }
.js body {
  transition:
    background-color 0.5s cubic-bezier(0.4, 0, 0.2, 1),
    --fg            0.5s cubic-bezier(0.4, 0, 0.2, 1),
    --fg-soft       0.5s cubic-bezier(0.4, 0, 0.2, 1),
    --hairline      0.5s cubic-bezier(0.4, 0, 0.2, 1),
    --accent-ink    0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .js body { transition: none; }
}
body[data-theme="dark"] {
  --fg: var(--on-dark);
  --fg-soft: var(--on-dark-soft);
  --hairline: var(--line-on-dark);
  /* Accent-as-text must flip too: on dark, ink (#14130F) is invisible, so the
     accent renders as champagne. Fixes open-FAQ summaries + any accent-ink use
     that lands on a dark/morphing section. */
  --accent-ink: #C9A86A;
  background: var(--dark);
}
/* Clay — a warm third tone for select sections; ink text stays (warm light). */
body[data-theme="clay"] {
  --fg: var(--ink);
  --fg-soft: var(--on-clay-soft);
  --hairline: var(--line-clay);
  --surface: #EEE7D8;
  --tint-deep: var(--clay-deep);
  background: var(--clay);
}
/* No-JS fallback: a clay section carries its own ground + text colour. */
.section.clay { background: var(--clay); color: var(--ink); }
.js-fx .section.clay { background: transparent; }
/* `clip` (not `hidden`) prevents horizontal scroll WITHOUT turning body into a
   scroll container — `overflow-x: hidden` computes to `hidden auto`, which makes
   position:fixed header/announce jank and overlap content during iOS momentum
   scroll. `clip` keeps the root as the single scroller, so fixed stays put. */
html, body { overflow-x: clip; }
/* Overscroll/rubber-band canvas matches the page's dark ends (announce bar at
   the top, footer at the bottom) so it never flashes a mismatched colour. */
html { background: var(--dark); }
html { overscroll-behavior-y: none; }
img, picture, video, svg { display: block; max-width: 100%; height: auto; }
/* Auto-generated WebP wrappers (build step) — keep the <img> in its parent's
   layout exactly as before by removing the <picture>'s own box. */
picture.wp { display: contents; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; cursor: pointer; background: none; border: none; }
ul { list-style: none; }
/* No outline on pointer/touch interaction (kills the "black box" on tap/click);
   a refined ring shows ONLY for keyboard users via :focus-visible. */
:focus { outline: none; }
:focus-visible { outline: 1.5px solid var(--focus); outline-offset: 2px; }

/* ---------- Layout primitives ---------- */
.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--space-l); }
@media (min-width: 768px) { .container { padding-inline: var(--space-2xl); } }
.narrow { max-width: var(--container-narrow); margin-inline: auto; }
.section { padding-block: var(--space-3xl); }
.section.tight { padding-block: var(--space-2xl); }
/* Dark sections carry a solid bg as the no-JS fallback. With JS, the scroll
   colour-morph makes them transparent so the body's morphing background shows
   through (body[data-theme] drives --fg/--fg-soft/--hairline). */
.section.dark { background: var(--dark); color: var(--on-dark); }
.measure { max-width: var(--measure); }
.center { text-align: center; margin-inline: auto; }

/* ---------- Typography ---------- */
h1, h2, h3, h4 { font-family: var(--font-display); font-weight: var(--weight-regular); line-height: var(--lh-snug); letter-spacing: var(--tracking-tight); color: inherit; text-wrap: balance; }
h1 { font-size: var(--step-5); line-height: var(--lh-tight); }
h2 { font-size: var(--step-4); line-height: var(--lh-tight); }
h3 { font-size: var(--step-2); }
h4 { font-size: var(--step-1); }
p { max-width: var(--measure); text-wrap: pretty; }
.lead { font-size: clamp(1rem, 0.95rem + 0.32vw, 1.16rem); font-weight: var(--weight-regular); line-height: 1.65; color: var(--fg-soft); }

/* Maison tracked label */
.label {
  display: inline-block;
  font-family: var(--font-body);
  font-size: var(--step--2);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: var(--fg-soft);
}
.hero-full .label, .band .label { color: var(--on-dark-soft); }
.section-title { margin-top: var(--space-s); }
/* Consistent breathing room between a title and its description */
.section-title + .lead, .section-title + p, h1 + .lead, h2 + .lead, h2 + p { margin-top: var(--space-l); }
/* A title block (.narrow holding a label + heading) immediately followed by a
   lead/paragraph sibling — e.g. the treatment "Concerns" fallback — needs the
   same separation, since the lead isn't an adjacent sibling of the heading. */
.narrow + .lead, .narrow + p, .reveal + .lead { margin-top: var(--space-l); }

/* Minimal CTAs */
.cta {
  display: inline-flex; align-items: center; gap: 0.75em;
  font-family: var(--font-body); font-size: var(--step--2); font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-wide); text-transform: uppercase;
  padding-bottom: 6px; border-bottom: 1px solid currentColor; color: var(--fg);
}
.cta .ar { transition: transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .cta:hover .ar { transform: translateX(6px); } }
.hero-full .cta, .band .cta { color: var(--on-dark); }

/* Buttons (used in header + sticky bar; restrained) */
.btn {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 46px; padding: 0 var(--space-l);
  font-family: var(--font-body); font-size: var(--step--2); font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-wide); text-transform: uppercase;
  border: 1px solid var(--ink); color: var(--ink); background: transparent;
  transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}
.btn-solid { background: var(--ink); color: var(--bg); }
@media (hover: hover) { .btn:hover { background: var(--ink); color: var(--bg); } .btn-solid:hover { background: #000; } }
/* Buttons over dark/image contexts → cream. Outline buttons follow the BODY
   theme (not the section) so they stay correct across the scroll colour-morph —
   never cream-on-cream mid-transition. Hero/band are always over dark imagery. */
.hero-full .btn, .band .btn, body[data-theme="dark"] .btn { border-color: var(--on-dark); color: var(--on-dark); background: transparent; }
@media (hover: hover) { .hero-full .btn:hover, .band .btn:hover, body[data-theme="dark"] .btn:hover { background: var(--on-dark); color: var(--ink); } }
.btn-row { display: flex; flex-wrap: wrap; gap: var(--space-m) var(--space-l); align-items: center; }
/* A text CTA beside a button: match the button's height so labels sit on the
   same line, and underline the text itself rather than leaving a detached rule. */
.btn-row .cta {
  min-height: 46px;
  padding-bottom: 0;
  border-bottom: 0;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 7px;
  text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
  transition: text-decoration-color var(--dur-fast) var(--ease-out);
}
@media (hover: hover) { .btn-row .cta:hover { text-decoration-color: currentColor; } }

/* ---------- Offer announcement bar ---------- */
.announce { position: fixed; top: 0; left: 0; right: 0; height: var(--announce-h); z-index: 110; background: var(--ink); color: var(--bg); display: flex; align-items: center; overflow: hidden; transition: height var(--dur-base) var(--ease-out); }
.announce-inner { display: flex; align-items: center; justify-content: center; gap: var(--space-m); width: 100%; padding-inline: var(--space-m); }
.announce p { margin: 0; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; }
.announce a { border-bottom: 1px solid currentColor; padding-bottom: 1px; }
.announce-x { position: absolute; right: var(--space-l); top: 50%; transform: translateY(-50%); width: 28px; height: 28px; color: var(--bg); font-size: 18px; line-height: 1; opacity: 0.7; }
.announce-x:hover { opacity: 1; }
.announce[hidden] { display: none; }

/* ---------- Header (transparent over hero, solidifies on scroll) ---------- */
.site-header { position: fixed; top: var(--announce-h); left: 0; right: 0; z-index: 100; transition: background var(--dur-base) var(--ease-out), border-color var(--dur-base) var(--ease-out), top var(--dur-base) var(--ease-out); border-bottom: 1px solid transparent; }
/* media as <video> (hero + bands) */
.hero-full .media video, .band .media video { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Two hero clips that crossfade (data-hero-videos). Stacked + opacity-toggled. */
.hero-full .media[data-hero-videos] { position: absolute; inset: 0; }
.hero-full .media .hero-vid { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 1.6s var(--ease-in-out); }
.hero-full .media .hero-vid.is-active { opacity: 1; }
/* Warm tonal wash — the footage is B&W at source, so this lifts it with a
   gentle champagne duotone (soft-light) to bring warmth/life without browning. */
.hero-full .media[data-hero-videos]::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, color-mix(in srgb, #C9A86A 70%, #6b5a36) , #b98f54); mix-blend-mode: soft-light; opacity: 0.32; pointer-events: none; z-index: 1; }

/* ---------- Logo-reveal intro (once per session) ---------- */
.intro { position: fixed; inset: 0; z-index: 300; background: var(--bg); display: flex; align-items: center; justify-content: center; transition: opacity 0.6s var(--ease-out); }
.intro video { width: min(60vw, 520px); height: auto; }
.intro.done { opacity: 0; pointer-events: none; }
.intro[hidden] { display: none; }
@media (prefers-reduced-motion: reduce) { .intro { display: none; } }

/* ---------- Brand divider (wordmark) ---------- */
.brand-divider { padding-block: var(--space-3xl); text-align: center; }
.brand-divider img { width: min(80%, 640px); margin-inline: auto; opacity: 0.92; }
.header-inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-l); min-height: 76px; }
.brand { font-family: var(--font-display); font-size: var(--step-1); letter-spacing: 0.02em; color: var(--on-dark); transition: color var(--dur-base) var(--ease-out); }
.nav { display: none; }
.nav ul { display: flex; gap: var(--space-xl); }
.nav a { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--on-dark-soft); transition: color var(--dur-fast); }
.nav a:hover { color: var(--on-dark); }
.header-cta { display: flex; align-items: center; gap: var(--space-m); }
.header-search { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; color: var(--on-dark); background: none; border: 0; cursor: pointer; transition: opacity var(--dur-fast) var(--ease-out); }
.header-search svg { width: 20px; height: 20px; }
@media (hover: hover) { .header-search:hover { opacity: 0.62; } }
.header-call { display: none; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--on-dark); }
/* Mobile: hide the header Book button — the sticky bottom bar already carries Call + Book. */
/* Book button shows in the top header on ALL sizes (replaces the mobile bottom bar) */
.header-cta .btn { display: inline-flex; border-color: currentColor; color: var(--on-dark); min-height: 42px; padding-inline: var(--space-m); }
@media (hover: hover) { .header-cta .btn:hover { background: var(--on-dark); color: var(--ink); } }
@media (min-width: 1024px) { .nav { display: block; } .header-call { display: inline-flex; } }

/* Scrolled state — cream bg, ink text */
.site-header.scrolled { background: color-mix(in srgb, var(--bg) 94%, transparent); backdrop-filter: blur(10px); border-bottom-color: var(--line); }
.site-header.scrolled .brand,
.site-header.scrolled .nav a,
.site-header.scrolled .header-call,
.site-header.scrolled .header-cta .btn,
.site-header.scrolled .header-search,
.site-header.scrolled .nav-toggle { color: var(--ink); border-color: var(--ink); }
.site-header.scrolled .nav a { color: var(--ink-soft); }
.site-header.scrolled .nav a:hover { color: var(--ink); }
@media (hover: hover) { .site-header.scrolled .header-cta .btn:hover { background: var(--ink); color: var(--bg); } }

/* Sub-pages (generated): header is solid from the top (no dark hero behind it) */
.subpage .site-header { background: color-mix(in srgb, var(--bg) 94%, transparent); backdrop-filter: blur(10px); border-bottom-color: var(--line); }
.subpage .brand, .subpage .header-call, .subpage .header-cta .btn, .subpage .header-search, .subpage .nav-toggle { color: var(--ink); border-color: var(--ink); }
.subpage .nav a { color: var(--ink-soft); }
.subpage .nav a:hover { color: var(--ink); }
@media (hover: hover) { .subpage .header-cta .btn:hover { background: var(--ink); color: var(--bg); } }

/* ---------- Full-bleed hero ---------- */
.hero-full { position: relative; min-height: 100svh; display: flex; align-items: flex-end; color: var(--on-dark); overflow: hidden; }
.hero-full .media, .hero-full .scrim { position: absolute; inset: 0; }
.hero-full .media img { width: 100%; height: 100%; object-fit: cover; }
.hero-full .scrim { background:
  linear-gradient(90deg, rgba(20,19,15,0.72) 0%, rgba(20,19,15,0.20) 56%, rgba(20,19,15,0) 100%),
  linear-gradient(180deg, rgba(20,19,15,0.46) 0%, rgba(20,19,15,0.12) 28%, rgba(20,19,15,0.56) 62%, rgba(20,19,15,0.92) 100%); }
/* Rotating eyebrow — cross-fades through three credentials in a fixed-height
   slot (no layout shift). First line is visible even if animation never runs. */
.hero-eyebrow { position: relative; display: block; height: 1.5em; overflow: hidden; }
.hero-eyebrow > span { position: absolute; left: 0; top: 0; white-space: nowrap; opacity: 0; }
.hero-eyebrow > span:first-child { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
  .hero-eyebrow > span { animation: eyebrow-rotate 10.5s var(--ease-out) infinite; }
  .hero-eyebrow > span:nth-child(2) { animation-delay: 3.5s; }
  .hero-eyebrow > span:nth-child(3) { animation-delay: 7s; }
}
@keyframes eyebrow-rotate {
  0% { opacity: 0; transform: translateY(7px); }
  4%, 28% { opacity: 1; transform: none; }
  33%, 100% { opacity: 0; transform: translateY(-7px); }
}
.hero-full .inner { position: relative; z-index: 2; width: 100%; max-width: 60rem; padding-block: var(--space-3xl) var(--space-2xl); }
.hero-full h1 { font-size: clamp(2.7rem, 1.5rem + 5vw, 5.4rem); max-width: 15ch; line-height: 1.0; margin-top: var(--space-l); }
.hero-full .lead { color: rgba(243, 240, 232, 0.92); max-width: 38ch; margin-top: var(--space-l); }
.hero-full .btn-row { margin-top: var(--space-xl); gap: var(--space-l); }
@media (max-width: 600px) {
  .hero-full .inner { padding-block: var(--space-2xl) var(--space-xl); }
  .hero-full h1 { margin-top: var(--space-m); }
  .hero-full .lead { margin-top: var(--space-m); font-size: var(--step-0); }
  .hero-full .btn-row { margin-top: var(--space-l); }
  /* Crop toward the left so the physician/subject stays in frame on narrow screens */
  .hero-full .media video, .hero-full .media img { object-position: 22% center; }
}

/* ---------- Hamburger + mobile nav ---------- */
.nav-toggle { display: none; width: 44px; height: 44px; position: relative; z-index: 130; color: var(--on-dark); }
.nav-toggle span { display: block; width: 22px; height: 1.5px; background: currentColor; margin: 5px auto; transition: transform 0.3s var(--ease-out), opacity 0.2s; }
.nav-toggle[aria-expanded="true"] span { background: var(--on-dark); }
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }
@media (max-width: 1023px) { .nav-toggle { display: block; } }

.mobile-nav { position: fixed; inset: 0; z-index: 140; background: var(--dark); color: var(--on-dark); display: flex; flex-direction: column; gap: var(--space-l); padding: var(--space-l) var(--space-xl) var(--space-2xl); overflow-y: auto; -webkit-overflow-scrolling: touch; transform: translateY(-12px); opacity: 0; visibility: hidden; transition: transform 0.5s var(--ease-out), opacity 0.4s var(--ease-out), visibility 0.4s; }
.mobile-nav.open { transform: none; opacity: 1; visibility: visible; }
/* Staggered entrance — items rise in as the panel opens */
@media (prefers-reduced-motion: no-preference) {
  .mobile-nav.open .m-links > *, .mobile-nav.open .m-cta, .mobile-nav.open .m-loc { animation: m-rise 0.55s var(--ease-out) both; }
  .mobile-nav.open .m-links > :nth-child(2) { animation-delay: 0.05s; }
  .mobile-nav.open .m-links > :nth-child(3) { animation-delay: 0.10s; }
  .mobile-nav.open .m-links > :nth-child(4) { animation-delay: 0.15s; }
  .mobile-nav.open .m-links > :nth-child(5) { animation-delay: 0.20s; }
  .mobile-nav.open .m-links > :nth-child(n+6) { animation-delay: 0.25s; }
  .mobile-nav.open .m-cta { animation-delay: 0.30s; }
  .mobile-nav.open .m-loc { animation-delay: 0.36s; }
}
@keyframes m-rise { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
.m-top { display: flex; align-items: center; justify-content: space-between; padding-bottom: var(--space-m); border-bottom: 1px solid var(--line-on-dark); }
/* Brand reads as a mark, not another menu item: slight size + tracking lift */
.m-top .brand { color: var(--on-dark); font-size: var(--step-2); letter-spacing: 0.04em; }
.m-close { width: 44px; height: 44px; position: relative; color: var(--on-dark); flex: 0 0 auto; }
.m-close span { position: absolute; left: 50%; top: 50%; width: 22px; height: 1.5px; background: currentColor; }
.m-close span:first-child { transform: translate(-50%, -50%) rotate(45deg); }
.m-close span:last-child { transform: translate(-50%, -50%) rotate(-45deg); }
.mobile-nav .m-links { display: flex; flex-direction: column; gap: var(--space-2xs); }
/* Top-level links (Explore section) */
.mobile-nav .m-links > a { font-family: var(--font-display); font-size: var(--step-1); color: var(--on-dark); padding: var(--space-2xs) 0; }
/* Section labels (Treatments / Explore) */
.m-label { display: block; font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--on-dark-soft); margin-top: var(--space-l); margin-bottom: var(--space-2xs); }
.m-label:first-child { margin-top: 0; }
/* Treatment group accordions */
.m-acc { border-bottom: 1px solid var(--line-on-dark); }
.m-acc summary { display: flex; align-items: center; justify-content: space-between; gap: var(--space-m); font-family: var(--font-display); font-size: var(--step-1); color: var(--on-dark); cursor: pointer; list-style: none; padding: var(--space-s) 0; }
.m-acc summary::-webkit-details-marker { display: none; }
.m-acc summary::after { content: ""; flex: 0 0 auto; width: 0.5em; height: 0.5em; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg); opacity: 0.6; transition: transform var(--dur-base) var(--ease-out); }
.m-acc[open] summary::after { transform: rotate(-135deg); }
.m-acc-body { display: flex; flex-direction: column; gap: var(--space-2xs); padding: 0 0 var(--space-m) var(--space-s); }
.m-acc-body a { font-family: var(--font-body); font-size: var(--step-0); color: var(--on-dark-soft); padding: var(--space-2xs) 0; }
.m-acc-body a:hover, .m-acc-body a:active { color: var(--on-dark); }
.m-tag { display: inline-block; margin-left: 0.5em; vertical-align: middle; font-family: var(--font-body); font-size: 0.6rem; font-weight: 500; letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--on-dark); background: rgba(243,240,232,0.12); border: 1px solid rgba(243,240,232,0.28); border-radius: 100px; padding: 0.22em 0.62em; line-height: 1; transform: translateY(-1px); }
/* Smooth reveal when a group expands */
@media (prefers-reduced-motion: no-preference) { .m-acc[open] .m-acc-body { animation: m-acc-in 0.4s var(--ease-out) both; } }
@keyframes m-acc-in { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
.m-acc-all { color: var(--on-dark) !important; letter-spacing: var(--tracking-wide); text-transform: uppercase; font-size: var(--step--2) !important; margin-top: var(--space-2xs); }
/* "View all treatments" — a quiet centred link under a hairline, not a loud box.
   Selector includes .m-links to outrank the display-font `.m-links > a` rule. */
.mobile-nav .m-links > .m-allt.btn-line { display: flex; align-items: center; justify-content: center; gap: 0.45em; width: 100%; min-height: 0; margin-top: var(--space-m); padding: var(--space-m) 0 0; border: 0; border-top: 1px solid var(--line-on-dark); color: var(--on-dark-soft); font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; transition: color var(--dur-base) var(--ease-out); }
.mobile-nav .m-links > .m-allt.btn-line .ar { transition: transform var(--dur-base) var(--ease-out); }
.mobile-nav .m-links > .m-allt.btn-line:active { color: var(--on-dark); }
.mobile-nav .m-links > .m-allt.btn-line:active .ar { transform: translateX(3px); }
/* Explore links — balanced two-column grid */
.m-explore { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-2xs) var(--space-l); }
.mobile-nav .m-explore a { font-family: var(--font-display); font-size: var(--step-0); color: var(--on-dark); padding: var(--space-xs) 0; border-bottom: 1px solid transparent; transition: color var(--dur-fast) var(--ease-out); }
.mobile-nav .m-explore a:active { color: var(--on-dark-soft); }
/* Book + Call as two equal halves side by side, Book leading (primary). */
.mobile-nav .m-cta { margin-top: var(--space-l); display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--space-s); align-items: stretch; }
.mobile-nav .m-cta .btn { display: inline-flex; width: 100%; justify-content: center; align-items: center; text-align: center; line-height: 1.25; min-height: 54px; background: var(--on-dark); color: var(--ink); border-color: var(--on-dark); font-family: var(--font-body); font-size: var(--step--1); letter-spacing: var(--tracking-wide); text-transform: uppercase; }
.mobile-nav .m-cta .m-call-btn { display: inline-flex; align-items: center; justify-content: center; text-align: center; line-height: 1.25; min-height: 54px; border: 1px solid var(--line-on-dark); color: var(--on-dark); font-family: var(--font-body); font-size: var(--step--1); letter-spacing: var(--tracking-wide); text-transform: uppercase; transition: background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out); }
.mobile-nav .m-cta .m-call-btn:active { background: var(--on-dark); color: var(--ink); }
.m-loc { margin-top: var(--space-l); display: flex; flex-direction: column; gap: var(--space-2xs); font-style: normal; font-size: var(--step--2); line-height: 1.5; color: var(--on-dark-soft); border-top: 1px solid var(--line-on-dark); padding-top: var(--space-l); }
.m-loc-label { letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--on-dark-soft); margin-bottom: var(--space-2xs); }
.m-loc a { color: var(--on-dark); margin-top: var(--space-2xs); letter-spacing: var(--tracking-wide); text-transform: uppercase; }
/* Scroll-lock the real scroller: with `overflow-x: clip` the root (html) is the
   page scroller, so locking only body wouldn't freeze the background. */
html.nav-open, body.nav-open { overflow: hidden; }
body.nav-open .nav-toggle { opacity: 0; pointer-events: none; }
@media (min-width: 1024px) { .mobile-nav { display: none; } }

/* Anti-flicker: warm placeholder tone behind every media box so images decode
   over a matching ground instead of a white flash. Images stay visible at all
   times (no opacity gambit) — robust even if JS/CSS load out of sync. */
.split-media, .gallery-track figure, .article-media, .j-feature-media,
.reveal-img, .tcard .ph, .ecard .ph, .member .photo { background-color: var(--tint-deep); }

/* ---------- Editorial statement ---------- */
.statement { text-align: center; }
.statement h2 { font-size: var(--step-4); max-width: 18ch; margin-inline: auto; }
.statement .lead { margin: var(--space-l) auto 0; }
/* Every paragraph in a centred statement must also centre its block (max-width
   p's were left-aligned, so secondary lines like the before/after note looked
   misaligned under the centred lead). */
.statement p { margin-inline: auto; }
.statement > .cta { margin-top: var(--space-xl); }

/* ---------- Lookbook grid (treatments) ---------- */
/* Mobile = ONE column (full-width tiles) so long names never overflow a narrow
   tile; 2-up from 700px, 3-up for cols-3 from 1100px. Mobile MUST declare a
   track or the all-absolute cards collapse to 0px. */
.lookbook { display: grid; grid-template-columns: minmax(0, 1fr); gap: 2px; margin-top: var(--space-2xl); }
@media (min-width: 700px) { .lookbook { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1100px) { .lookbook.cols-3 { grid-template-columns: repeat(3, 1fr); } }
.look { position: relative; display: block; aspect-ratio: 3 / 4; overflow: hidden; color: var(--on-dark); background: var(--tint-deep); }
/* Full-width mobile tiles read better as a calmer landscape ratio (not tall portraits). */
@media (max-width: 699px) { .look { aspect-ratio: 16 / 10; } }
.look img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.8) saturate(0.92); transition: transform 1.3s var(--ease-out), filter var(--dur-base); }
.look .cap { position: absolute; inset: 0; z-index: 2; display: flex; flex-direction: column; justify-content: flex-end; padding: var(--space-xl); background: linear-gradient(0deg, rgba(20,19,15,0.55) 0%, rgba(20,19,15,0) 55%); }
.look .num { font-size: var(--step--2); letter-spacing: var(--tracking-label); color: var(--on-dark-soft); }
.look .name { font-family: var(--font-display); font-size: var(--step-2); margin-top: var(--space-2xs); }
.look .more { margin-top: var(--space-s); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--on-dark-soft); opacity: 0; transform: translateY(6px); transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
@media (hover: hover) {
  .look:hover img { transform: scale(1.05); filter: brightness(0.72) saturate(0.92); }
  .look:hover .more { opacity: 1; transform: none; }
}

/* ---------- Full-bleed image band w/ overlay ---------- */
.band { position: relative; min-height: 86vh; display: flex; align-items: center; color: var(--on-dark); overflow: hidden; }
.band .media, .band .scrim { position: absolute; inset: 0; }
.band .media img { width: 100%; height: 100%; object-fit: cover; }
.band .scrim { background: linear-gradient(90deg, rgba(20,19,15,0.66) 0%, rgba(20,19,15,0.28) 55%, rgba(20,19,15,0.05) 100%); }
@media (max-width: 700px) {
  .band .scrim { background: linear-gradient(180deg, rgba(20,19,15,0.55) 0%, rgba(20,19,15,0.35) 40%, rgba(20,19,15,0.72) 100%); }
  /* Landscape photos over-crop in a tall band on phones — gentler height. */
  .band { min-height: 60vh; }
}
.band .inner { position: relative; z-index: 2; }
.band h2 { max-width: 16ch; }
.band .lead { color: var(--on-dark-soft); max-width: 42ch; margin-top: var(--space-l); }
.band .btn-row { margin-top: var(--space-xl); }
/* Feature band — a full-bleed cinematic parallax image moment woven into a page
   body (concern + treatment pages). The image scrolls/drifts (data-parallax),
   sits inside a thin editorial keyline, with a small bottom caption. */
.band-feature { min-height: 74vh; align-items: flex-end; padding-bottom: var(--space-2xl); }
@media (max-width: 760px) { .band-feature { min-height: 56vh; padding-bottom: var(--space-xl); } }
.band-feature .scrim { background: linear-gradient(180deg, rgba(20,19,15,0.18) 0%, rgba(20,19,15,0.05) 45%, rgba(20,19,15,0.62) 100%); }
.band-feature::after { content: ""; position: absolute; inset: var(--space-l); border: 1px solid rgba(243,240,232,0.22); pointer-events: none; z-index: 2; }
@media (max-width: 760px) { .band-feature::after { inset: var(--space-s); } }
.band-cap { display: inline-flex; align-items: center; gap: 0.6em; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--on-dark); }
.band-cap::before { content: ""; width: 28px; height: 1px; background: currentColor; opacity: 0.7; }

/* ---------- Editorial split (image + text) ---------- */
.split { display: grid; gap: var(--space-xl); align-items: center; }
@media (min-width: 1024px) { .split { grid-template-columns: 1fr 1fr; gap: var(--space-3xl); } .split.reverse > .split-text { order: 2; } }
.split-media { position: relative; aspect-ratio: 4 / 5; overflow: hidden; background: var(--tint-deep); }
.split-media img, .split-media video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center top; transition: transform 1.3s var(--ease-out); }
@media (hover: hover) { .split-media:hover img { transform: scale(1.04); } }
/* Phones: a gentler ratio so landscape photos aren't over-cropped (must come
   after the 4/5 base rule to win on source order). */
/* Mobile: keep portraits portrait (a 4/5 subject in a landscape frame had its
   head/body cropped). 4/5 fits the founder + team portraits exactly. */
@media (max-width: 700px) { .split-media { aspect-ratio: 4 / 5; } }
.split-text > .cta { margin-top: var(--space-xl); }
/* Branded diagram figure (e.g. skin cross-section) — sits on cream, no crop */
/* Few-item grids: don't stretch / left-align a lone card — centre + constrain */
.explore.few, .lookbook.few { justify-content: center; }
@media (min-width: 640px) {
  .explore.few-1 { grid-template-columns: minmax(0, 360px); }
  .explore.few-2 { grid-template-columns: repeat(2, minmax(0, 340px)); }
}
@media (min-width: 700px) {
  .lookbook.few-1 { grid-template-columns: minmax(0, 440px); }
  .lookbook.few-2 { grid-template-columns: repeat(2, minmax(0, 400px)); }
}

.dx-figure { display: flex; align-items: center; justify-content: center; }
.dx-bag { width: 100%; height: auto; max-width: 320px; }
/* Interactive skin-depth diagram */
.dx-depth { width: 100%; height: auto; max-width: 540px; }
.dx-layer { cursor: pointer; }
.dx-layer rect { transition: fill var(--dur-base) var(--ease-out); }
.dx-layer:hover rect, .dx-layer:focus-visible rect, .dx-layer.is-hover rect { fill: rgba(20,19,15,0.05); }
.dx-layer.is-active rect { fill: rgba(201,168,106,0.16); }
.dx-layer:focus { outline: none; }
.dx-lab { transition: fill var(--dur-base) var(--ease-out); }
.dx-lab.is-active { fill: #14130F; }
/* draw-on edges when the figure scrolls in */
@media (prefers-reduced-motion: no-preference) {
  .dx-figure .dx-edge { stroke-dasharray: 400; stroke-dashoffset: 400; }
  .dx-figure.is-in .dx-edge { animation: dx-draw 1s var(--ease-out) forwards; }
  .dx-figure.is-in .dx-edge:nth-of-type(2) { animation-delay: 0.15s; }
}
@keyframes dx-draw { to { stroke-dashoffset: 0; } }
.dx-note { min-height: 3.2em; transition: opacity var(--dur-fast) var(--ease-out); }
.dx-hint { margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
@media (hover: hover) { .dx-hint::before { content: "Hover or "; } }
/* Device-mechanism diagram — energy radiates from device to target */
.dx-mech { width: 100%; height: auto; max-width: 560px; }
/* Bespoke flagship diagrams (Tesla Former / Accent Prime / CO₂ Fraxel) */
.dx-svg { width: 100%; height: auto; max-width: 520px; }
.dx-shade { max-width: 460px; }
/* Teeth-whitening sensitivity mini-graph */
.dx-sens { margin: var(--space-xl) 0 0; padding: 0; }
.dx-sens-h { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); margin-bottom: var(--space-s); }
.dx-sens-bars { display: flex; align-items: flex-end; gap: var(--space-l); height: 92px; }
.dx-sens-bars > div { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: var(--space-2xs); }
.dx-sens-bars .sb { display: block; width: 38px; height: var(--h); min-height: 6px; background: var(--accent-ink); opacity: 0.85; }
.dx-sens-bars small { font-size: var(--step--2); color: var(--fg-soft); }
.dx-bag { width: 100%; height: auto; max-width: 340px; }
@media (prefers-reduced-motion: no-preference) {
  .dx-bag .dx-drip { transform-box: fill-box; transform-origin: center; animation: dx-drip 1.9s ease-in infinite; }
}
@keyframes dx-drip { 0%, 12% { transform: translateY(0); opacity: 0; } 22% { opacity: 1; } 70% { transform: translateY(30px); opacity: 1; } 74%, 100% { transform: translateY(30px); opacity: 0; } }
.dx-frac { max-width: 380px; }
.dx-cap { margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.dx-timeline { list-style: none; margin: var(--space-xl) 0 0; padding: 0; display: flex; flex-direction: column; }
.dx-timeline li { display: grid; grid-template-columns: 7rem 1fr; gap: var(--space-m); padding: var(--space-s) 0; border-top: 1px solid var(--hairline); }
.dx-timeline li:last-child { border-bottom: 1px solid var(--hairline); }
.dxt-k { font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); }
.dxt-v { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.55; }
.dx-mech-meta { display: grid; grid-template-columns: repeat(3, auto); justify-content: start; gap: var(--space-m) var(--space-2xl); margin-top: var(--space-xl); }
.dx-mech-meta dt { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }
.dx-mech-meta dd { font-family: var(--font-display); font-size: var(--step-1); margin-top: var(--space-2xs); }
.dx-wave { transform-box: fill-box; }
@media (prefers-reduced-motion: no-preference) {
  .dx-figure.is-in .dx-wave { opacity: 0; animation: dx-wave 2.8s var(--ease-out) infinite; }
  .dx-figure.is-in .dx-wave:nth-child(2) { animation-delay: 0.55s; }
  .dx-figure.is-in .dx-wave:nth-child(3) { animation-delay: 1.1s; }
  .dx-figure.is-in .dx-mech-target { animation: dx-target-pulse 2.8s var(--ease-in-out) infinite; }
}
@keyframes dx-wave { 0% { opacity: 0; transform: translateX(-14px); } 28% { opacity: 0.9; } 70% { opacity: 0.45; } 100% { opacity: 0; transform: translateX(22px); } }
@keyframes dx-target-pulse { 0%, 100% { opacity: 0.08; } 50% { opacity: 0.2; } }
/* Branded infusion category list (IV page) */
.dx-list { list-style: none; margin: var(--space-l) 0 0; padding: 0; }
.dx-list li { display: flex; gap: var(--space-m); align-items: flex-start; padding: var(--space-m) 0; border-top: 1px solid var(--hairline); }
.dx-list li:first-child { border-top: 0; }
.dx-list .dx-dot { flex: 0 0 auto; width: 9px; height: 9px; margin-top: 0.4em; border-radius: 50%; background: #C9A86A; }
.dx-list strong { display: block; font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); }
.dx-list span { display: block; margin-top: 2px; font-size: var(--step--1); color: var(--fg-soft); }
.dx-download { margin-top: var(--space-l); }
.dx-download svg { width: 1em; height: 1em; }
.dx-skin { width: 100%; height: auto; max-width: 520px; }
@media (prefers-reduced-motion: no-preference) {
  .dx-figure.is-in .dx-skin circle[fill="#C9A86A"] { animation: dx-pulse 3.2s var(--ease-in-out) infinite; transform-box: fill-box; transform-origin: center; }
}
@keyframes dx-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }

/* Journey rail — a quiet 3-node connector above the "first visit" steps */
.journey-rail { display: flex; align-items: center; margin: 0 auto var(--space-xl); max-width: 340px; }
.journey-rail .jr-dot { flex: 0 0 auto; width: 9px; height: 9px; border-radius: 50%; background: #C9A86A; }
.journey-rail .jr-seg { flex: 1; height: 1px; background: var(--hairline); }
@media (max-width: 768px) { .journey-rail { display: none; } }

/* ---------- Reviews (editorial, minimal) ---------- */
.reviews { display: grid; gap: var(--space-2xl); margin-top: var(--space-2xl); }
@media (min-width: 900px) { .reviews { grid-template-columns: repeat(3, 1fr); gap: var(--space-3xl); } }
.review blockquote { font-family: var(--font-display); font-size: var(--step-2); line-height: 1.3; font-weight: var(--weight-regular); }
.review cite { display: block; margin-top: var(--space-m); font-style: normal; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }

/* ---------- Process steps ---------- */
.steps { display: grid; gap: var(--space-xl); margin-top: var(--space-2xl); counter-reset: step; }
@media (min-width: 768px) { .steps { grid-template-columns: repeat(3, 1fr); gap: var(--space-2xl); } }
.step { position: relative; border-top: 1px solid var(--hairline); padding-top: var(--space-l); }
.step h4 { margin-bottom: var(--space-xs); }
.step p { font-size: var(--step--1); color: var(--fg-soft); font-weight: var(--weight-light); }
/* Optional line-icon glyph, top-right of a step (sits opposite the numeral) */
/* Line-icon now leads each step (replaces the 01/02/03 numeral) */
.step-icon { display: block; width: 30px; height: 30px; margin-bottom: var(--space-m); color: var(--accent-ink); }
.step-icon svg { width: 100%; height: 100%; display: block; fill: none; stroke: currentColor; stroke-width: 1.25; stroke-linecap: round; stroke-linejoin: round; }

/* ---------- Reassurance strip (small trust row) ---------- */
.assure { display: grid; gap: var(--space-l) var(--space-2xl); margin-top: var(--space-2xl); }
@media (min-width: 700px) { .assure { grid-template-columns: repeat(3, 1fr); } }
.assure-item { display: flex; align-items: flex-start; gap: var(--space-m); }
.assure-item .ai-icon { flex: 0 0 auto; width: 26px; height: 26px; color: var(--accent-ink); margin-top: 2px; }
.assure-item .ai-icon svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.25; stroke-linecap: round; stroke-linejoin: round; }
.assure-item h4 { font-size: var(--step-0); margin-bottom: var(--space-2xs); }
.assure-item p { font-size: var(--step--1); color: var(--fg-soft); font-weight: var(--weight-light); }

/* ---------- Location / final ---------- */
.locate { display: grid; gap: var(--space-2xl); }
@media (min-width: 1024px) { .locate { grid-template-columns: 1fr 1fr; gap: var(--space-3xl); } }
.locate dl { display: grid; gap: var(--space-m); margin-top: var(--space-l); }
.locate dt { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }
.locate dd { color: var(--fg); }
/* Cal.com inline embed — constrained + centred so the booking section reads
   as a calm framed panel rather than a giant full-width widget. */
.cal-frame { max-width: 860px; margin: var(--space-2xl) auto 0; }
.cal-frame #cal-inline { min-height: 320px; position: relative; }
.cal-frame #cal-inline.is-loading::after { content: "Loading the calendar…"; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); background: var(--surface); }
/* Map poster: a warm map-texture placeholder + location pin shows INSTANTLY
   (like a video poster), so the box never reads as a blank/broken frame. The
   live Google embed is lazy-loaded and fades in over the top once ready. */
.map-embed { position: relative; aspect-ratio: 4 / 3; overflow: hidden; background: radial-gradient(125% 105% at 68% 28%, #3a372f 0%, #28261f 58%, #1d1b17 100%); }
.map-embed::before { content: ""; position: absolute; inset: 0; background-image: repeating-linear-gradient(0deg, rgba(243,240,232,0.045) 0 1px, transparent 1px 40px), repeating-linear-gradient(90deg, rgba(243,240,232,0.045) 0 1px, transparent 1px 52px), repeating-linear-gradient(58deg, rgba(243,240,232,0.05) 0 2px, transparent 2px 120px); }
.map-embed::after { content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 12px; transform: translate(-50%, -50%); border-radius: 50%; background: var(--on-dark); box-shadow: 0 0 0 6px rgba(243,240,232,0.14), 0 0 0 13px rgba(243,240,232,0.06); }
@media (prefers-reduced-motion: no-preference) { .map-embed::after { animation: map-pulse 2.6s var(--ease-in-out) infinite; } }
@keyframes map-pulse { 0%, 100% { box-shadow: 0 0 0 6px rgba(243,240,232,0.14), 0 0 0 13px rgba(243,240,232,0.06); } 50% { box-shadow: 0 0 0 9px rgba(243,240,232,0.10), 0 0 0 20px rgba(243,240,232,0.03); } }
.map-embed iframe { position: relative; width: 100%; height: 100%; border: 0; filter: grayscale(1) contrast(1.05); opacity: 0; transition: opacity 0.8s var(--ease-out); }
.map-embed iframe.is-ready { opacity: 1; }
/* Full-width area-page maps: 4:3 becomes a giant ~850px block at desktop width —
   cap it to a tasteful wide band. */
@media (min-width: 1024px) { .map-embed.map-wide { aspect-ratio: 24 / 9; max-height: 440px; } }
html.cal-busy, html.cal-busy * { cursor: progress; }

/* ---------- Image-filled headline reveal (signature "wow" moment) ----------
   The giant headline's letters become a window into a slowly drifting image.
   Bulletproof: default is solid ink text (readable if JS is off, the browser
   lacks background-clip:text, or the image fails). Only with .js-fx + support do
   the glyphs fill with the image (set per-instance via inline --hr-img). */
.headline-reveal { text-align: center; }
.hr-title { font-family: var(--font-display); font-weight: 500; line-height: 0.98; letter-spacing: -0.015em; font-size: clamp(3rem, 11vw, 8rem); color: var(--fg); margin: 0 auto; max-width: 16ch; }
.hr-sub { margin: var(--space-l) auto 0; max-width: 46ch; }
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .js-fx .hr-title {
    background-image: var(--hr-img);
    background-size: 130% auto;
    background-position: center 28%;
    background-repeat: no-repeat;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
  }
  @media (prefers-reduced-motion: no-preference) {
    .js-fx .hr-title { animation: hr-pan 16s var(--ease-in-out) infinite alternate; }
  }
}
@keyframes hr-pan { from { background-position: center 24%; } to { background-position: center 66%; } }

/* ---------- Site search overlay ---------- */
html.search-open { overflow: hidden; }
.search-overlay { position: fixed; inset: 0; z-index: 200; display: flex; flex-direction: column; }
/* CRITICAL: an author `display:flex` overrides the UA `[hidden]{display:none}`,
   so without this the closed overlay stays in the layer and silently swallows
   every tap (the "screen freezes after closing search" bug). */
.search-overlay[hidden] { display: none; }
.search-backdrop { position: absolute; inset: 0; background: rgba(20,19,15,0.5); opacity: 0; transition: opacity 0.3s var(--ease-out); }
.search-overlay.is-open .search-backdrop { opacity: 1; }
.search-panel { position: relative; background: var(--bg); width: 100%; max-height: 86vh; overflow-y: auto; padding: var(--space-l) 0 var(--space-2xl); transform: translateY(-16px); opacity: 0; transition: transform 0.36s var(--ease-out), opacity 0.36s var(--ease-out); box-shadow: 0 30px 60px -30px rgba(20,19,15,0.5); }
.search-overlay.is-open .search-panel { transform: none; opacity: 1; }
.search-bar { display: flex; align-items: center; gap: var(--space-s); max-width: var(--container); margin-inline: auto; padding: 0 var(--space-l); border-bottom: 1px solid var(--line); }
.search-ic { width: 22px; height: 22px; color: var(--ink-soft); flex: 0 0 auto; }
.search-input { flex: 1; border: 0; background: none; font-family: var(--font-display); font-size: var(--step-2); color: var(--ink); padding: var(--space-m) 0; outline: none; }
.search-input::placeholder { color: var(--ink-soft); opacity: 0.7; }
.search-close { flex: 0 0 auto; border: 1px solid var(--line); background: none; color: var(--ink-soft); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; padding: 0.55em 0.9em; cursor: pointer; transition: color var(--dur-fast), border-color var(--dur-fast); }
@media (hover: hover) { .search-close:hover { color: var(--ink); border-color: var(--ink); } }
.search-results { max-width: var(--container); margin-inline: auto; padding: var(--space-l) var(--space-l) 0; }
.search-head { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--ink-soft); margin-bottom: var(--space-m); }
.search-msg { color: var(--ink-soft); }
.search-list { display: grid; grid-template-columns: 1fr; gap: 2px; }
@media (min-width: 760px) { .search-list { grid-template-columns: 1fr 1fr; } }
.search-hit { display: grid; grid-template-columns: 56px 1fr; align-items: center; gap: var(--space-m); padding: var(--space-s) var(--space-m); border: 1px solid var(--line); transition: background var(--dur-fast) var(--ease-out); }
@media (hover: hover) { .search-hit:hover { background: var(--tint, color-mix(in srgb, var(--ink) 4%, transparent)); } }
.search-hit-thumb { display: block; width: 56px; height: 56px; overflow: hidden; background: var(--line); flex: 0 0 auto; }
.search-hit-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
.search-hit-tx { display: block; min-width: 0; }
.search-hit-cat { display: block; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--ink-soft); margin-bottom: 3px; }
.search-hit-name { display: block; font-family: var(--font-display); font-size: var(--step-1); color: var(--ink); }
.search-hit-bl { display: block; font-size: var(--step--1); color: var(--ink-soft); line-height: 1.5; margin-top: 4px; }
.search-foot { margin-top: var(--space-l); font-size: var(--step--1); color: var(--ink-soft); }
.search-foot a { color: var(--ink); border-bottom: 1px solid var(--line); padding-bottom: 1px; }
@media (prefers-reduced-motion: reduce) { .search-backdrop, .search-panel { transition: none; } }
/* Mobile search: bigger tap targets, single-column results, no iOS zoom (>=16px),
   panel uses the full screen height so the keyboard doesn't crush results. */
@media (max-width: 760px) {
  .search-panel { max-height: 100svh; min-height: 100svh; padding: var(--space-s) 0 var(--space-2xl); }
  .search-bar { padding: 0 var(--space-m); gap: var(--space-xs); }
  .search-input { font-size: 1.25rem; padding: var(--space-s) 0; }
  .search-ic { width: 19px; height: 19px; }
  .search-close { padding: 0.6em 0.8em; }
  .search-results { padding: var(--space-m) var(--space-m) 0; }
  .search-hit { padding: var(--space-m); }
  .search-hit-name { font-size: var(--step-0); }
}
/* On mobile the header search icon is removed (it crowded the Book/hamburger) —
   search lives inside the open menu instead, as a clear full-width entry. */
@media (max-width: 1023px) { .header-search { display: none; } }
/* Mobile search lives subtly in the menu's top bar (icon only, beside Close) —
   present but unobtrusive, not the old full-width button. */
.m-top-actions { display: inline-flex; align-items: center; gap: var(--space-s); }
.m-top-search { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: none; border: 0; color: var(--on-dark); cursor: pointer; transition: opacity var(--dur-fast) var(--ease-out); }
.m-top-search svg { width: 20px; height: 20px; }
@media (hover: hover) { .m-top-search:hover { opacity: 0.6; } }

/* ---------- Dark-circles educational module ---------- */
.ue-grid { display: grid; grid-template-columns: 1fr; gap: 2px; margin-top: var(--space-2xl); }
@media (min-width: 560px) { .ue-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .ue-grid { grid-template-columns: repeat(4, 1fr); } }
.ue-type { border: 1px solid var(--hairline); padding: var(--space-l); }
.ue-eye { display: block; width: 76px; height: 57px; color: var(--fg); margin-bottom: var(--space-m); }
.ue-eye svg { width: 100%; height: 100%; display: block; }
.ue-cat { display: block; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.ue-type h4 { margin: 4px 0 var(--space-s); }
.ue-type p { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; }
.ue-note { margin-top: var(--space-2xl); font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; }
.ue-note a { color: var(--fg); border-bottom: 1px solid var(--hairline); padding-bottom: 1px; }
/* Real under-eye detail — two-up of genuine photos (anatomy + tone range) */
.ue-detail { margin: var(--space-2xl) 0 0; }
.ue-tone-pair { margin: var(--space-2xl) 0; }
.ue-detail, .ue-tone-pair { padding: 0; display: grid; grid-template-columns: 1fr; gap: 2px; }
@media (min-width: 720px) { .ue-detail, .ue-tone-pair { grid-template-columns: 1fr 1fr; } }
.ue-detail-img { display: block; overflow: hidden; background: var(--hairline); }
.ue-detail-img img { display: block; width: 100%; height: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
.ue-detail figcaption, .ue-tone-pair figcaption { grid-column: 1 / -1; margin-top: var(--space-m); max-width: 660px; font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; }
.ue-factors { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-m); max-width: 660px; }
.ue-factors li { display: grid; grid-template-columns: 1fr; gap: 8px; }
@media (min-width: 560px) { .ue-factors li { grid-template-columns: 190px 1fr; align-items: center; gap: var(--space-m); } }
.uf-k { font-size: var(--step--1); }
.uf-bar { display: block; height: 8px; background: color-mix(in srgb, var(--fg) 10%, transparent); border-radius: 100px; overflow: hidden; }
.uf-bar i { display: block; height: 100%; width: 0; background: var(--fg); border-radius: 100px; transition: width 1.2s var(--ease-out); }
.reveal.is-in .uf-bar i { width: var(--w); }
@media (prefers-reduced-motion: reduce) { .uf-bar i { transition: none; width: var(--w); } }
.ue-map { margin-top: var(--space-2xl); display: flex; flex-direction: column; }
.ue-row { display: grid; grid-template-columns: 1fr; gap: 4px; padding: var(--space-m) 0; border-top: 1px solid var(--hairline); }
.ue-row:last-child { border-bottom: 1px solid var(--hairline); }
@media (min-width: 640px) { .ue-row { grid-template-columns: 170px 1fr; gap: var(--space-l); align-items: baseline; } }
.ue-row-k { font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); }
.ue-row-v { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; }
.map-addr { margin-top: var(--space-s); color: var(--fg-soft); font-size: var(--step--1); }
/* Contact visit photo + boxed detail cards */
.contact-photo { display: block; overflow: hidden; aspect-ratio: 16 / 10; margin: var(--space-m) 0 var(--space-l); background: var(--tint-deep); }
.contact-photo img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.25) contrast(1.02); }
/* Contact details — icon-led BOXED cards (warm, premium, not a plain table) */
.contact-details { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-s); }
.cdetail { display: flex; gap: var(--space-m); align-items: center; border: 1px solid var(--hairline); padding: var(--space-m) var(--space-l); transition: border-color var(--dur-base) var(--ease-out); }
@media (hover: hover) { .cdetail:hover { border-color: var(--fg); } }
.cdetail-ic { flex: 0 0 auto; width: 42px; height: 42px; display: grid; place-items: center; border: 1px solid var(--hairline); border-radius: 50%; color: var(--fg); transition: border-color var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out); }
.cdetail-ic svg { width: 19px; height: 19px; }
.cdetail-k { display: block; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); margin-bottom: 4px; }
.cdetail-v { display: block; font-size: var(--step-0); line-height: 1.55; }
.cdetail-v a { border-bottom: 1px solid var(--hairline); padding-bottom: 1px; transition: border-color var(--dur-fast) var(--ease-out); }
@media (hover: hover) { .cdetail-v a:hover { border-bottom-color: var(--fg); } }
.map-directions { margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; }
.map-directions a { color: var(--fg); border-bottom: 1px solid var(--hairline); padding-bottom: 3px; transition: border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out); }
@media (hover: hover) { .map-directions a:hover { color: var(--accent-ink); border-bottom-color: var(--fg); } }
.map-embed .media-placeholder { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: var(--space-l); text-align: center; color: var(--on-dark-soft); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; }

/* ---------- Treatment-page hero (generated pages, no full image) ---------- */
.hero-inner { padding-block: calc(var(--announce-h) + 76px + var(--space-l)) var(--space-2xl); max-width: var(--container-narrow); }
.hero-inner h1 { margin-top: var(--space-m); }
.hero-inner .lead { margin-top: var(--space-l); }
.hero-inner .btn-row { margin-top: var(--space-xl); }
@media (max-width: 600px) {
  .hero-inner { padding-block: calc(var(--announce-h) + 70px + var(--space-m)) var(--space-xl); }
  .hero-inner .lead { margin-top: var(--space-m); }
  .hero-inner .btn-row { margin-top: var(--space-l); }
}
/* Breadcrumb kept in the DOM (+ JSON-LD BreadcrumbList) for SEO, hidden from view per request. */
.breadcrumb { display: none; }
.feature-list { display: grid; gap: var(--space-xl); margin-top: var(--space-2xl); }
@media (min-width: 768px) { .feature-list { grid-template-columns: repeat(2, 1fr); } }
.feature h4 { margin-bottom: var(--space-xs); }
.feature p { font-size: var(--step--1); color: var(--fg-soft); font-weight: var(--weight-light); }
.feature p a { text-decoration: underline; text-decoration-color: var(--line-strong); text-underline-offset: 3px; transition: text-decoration-color var(--dur-fast) var(--ease-out); }
.feature p a:hover { text-decoration-color: currentColor; }

/* IV guide poster — full-width banner (landscape desktop / A4 mobile) */
.iv-poster { display: block; overflow: hidden; border-radius: 4px; border: 1px solid var(--hairline); box-shadow: 0 24px 50px -32px rgba(20,19,15,0.4); }
.iv-poster img { width: 100%; height: auto; display: block; }

/* "Help me decide" floating pill — subtle, dismissible, site-wide */
.decide-fab { position: fixed; right: var(--space-l); bottom: var(--space-l); z-index: 95; display: inline-flex; align-items: stretch; background: var(--surface); border: 1px solid var(--line); border-radius: 40px; box-shadow: 0 14px 34px -18px rgba(20,19,15,0.45); opacity: 0; transform: translateY(12px); visibility: hidden; transition: opacity .4s var(--ease-out), transform .4s var(--ease-out), visibility .4s; }
.decide-fab.is-visible { opacity: 1; transform: none; visibility: visible; }
.decide-fab-link { display: inline-flex; align-items: center; gap: 0.6em; padding: var(--space-s) var(--space-s) var(--space-s) var(--space-m); font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--ink); }
.decide-fab-dot { width: 7px; height: 7px; border-radius: 50%; background: #C9A86A; box-shadow: 0 0 0 0 rgba(201,168,106,0.5); }
@media (prefers-reduced-motion: no-preference) { .decide-fab-dot { animation: fab-pulse 2.4s var(--ease-out) infinite; } }
@keyframes fab-pulse { 0% { box-shadow: 0 0 0 0 rgba(201,168,106,0.45); } 70%,100% { box-shadow: 0 0 0 7px rgba(201,168,106,0); } }
.decide-fab-close { padding: 0 var(--space-s) 0 0; color: var(--ink-soft); font-size: 1.1rem; line-height: 1; background: none; border: 0; }
@media (hover: hover) { .decide-fab-link:hover { color: var(--accent-ink); } .decide-fab-close:hover { color: var(--ink); } }
@media (max-width: 600px) { .decide-fab { right: var(--space-m); bottom: var(--space-m); } }

/* "Help me decide" guided flow */
/* Generous "one screen per question" feel — the quiz sits in a calm, centred field */
/* Intro shares the opening screen with Q1 (no dead gap); once a question is
   answered, scrollIntoView lifts the quiz under the header and the intro slides
   out of view — so the journey feels guided, not like a form below a banner. */
.decide-section .hero-inner { padding-block: calc(var(--announce-h) + 76px + var(--space-l)) var(--space-3xl); }
.decide-intro { max-width: 30ch; margin-bottom: var(--space-2xl); }
.decide-intro h1 { margin-top: var(--space-m); }
.decide-intro .lead { margin-top: var(--space-m); }
.decide { position: relative; min-height: 46vh; display: flex; flex-direction: column; justify-content: flex-start; scroll-margin-top: calc(var(--announce-h) + var(--header-h, 76px) + var(--space-l)); }
.decide-progress { height: 2px; background: var(--hairline); margin-bottom: var(--space-2xl); overflow: hidden; }
.decide-progress span { display: block; height: 100%; width: var(--p, 0); background: linear-gradient(90deg, color-mix(in srgb,#C9A86A 70%,transparent), #C9A86A); transition: width 0.6s var(--ease-out); }
.decide-step { border: 0; padding: 0; margin: 0; min-inline-size: 0; display: none; }
/* Each question slides + fades in like a new screen; options stagger after it */
.decide-step.is-active { display: block; animation: decide-screen 0.6s var(--ease-out) both; }
@keyframes decide-screen { from { opacity: 0; transform: translateY(20px); filter: blur(4px); } to { opacity: 1; transform: none; filter: blur(0); } }
.decide-q { font-family: var(--font-display); font-size: var(--step-4); line-height: 1.1; letter-spacing: var(--tracking-tight); color: var(--fg); padding: 0; margin-bottom: var(--space-2xl); max-width: 18ch; }
.decide-opts { display: grid; gap: var(--space-s); }
@media (min-width: 600px) { .decide-opts { grid-template-columns: repeat(2, 1fr); } }
.decide-opt { position: relative; overflow: hidden; text-align: left; font-family: var(--font-display); font-size: var(--step-1); color: var(--fg); background: var(--surface); border: 1px solid var(--hairline); padding: var(--space-l); transition: background var(--dur-base) var(--ease-out), border-color var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out), transform var(--dur-fast) var(--ease-out); }
/* options reveal in sequence for a considered, unhurried feel */
@media (prefers-reduced-motion: no-preference) {
  .decide-step.is-active .decide-opt { animation: decide-screen 0.5s var(--ease-out) both; }
  .decide-step.is-active .decide-opt:nth-child(1) { animation-delay: 0.10s; }
  .decide-step.is-active .decide-opt:nth-child(2) { animation-delay: 0.17s; }
  .decide-step.is-active .decide-opt:nth-child(3) { animation-delay: 0.24s; }
  .decide-step.is-active .decide-opt:nth-child(4) { animation-delay: 0.31s; }
  .decide-step.is-active .decide-opt:nth-child(5) { animation-delay: 0.38s; }
}
.decide-opt::after { content: "\2192"; position: absolute; right: var(--space-l); top: 50%; transform: translateY(-50%) translateX(-6px); opacity: 0; color: #C9A86A; transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .decide-opt:hover { border-color: #C9A86A; background: color-mix(in srgb, #C9A86A 9%, var(--surface)); padding-right: var(--space-2xl); } .decide-opt:hover::after { opacity: 1; transform: translateY(-50%) translateX(0); } }
.decide-opt:active { transform: scale(0.99); }
.decide-opt:active { transform: scale(0.99); }
.decide-back { margin-top: var(--space-l); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); background: none; border: 0; }
.decide-back:hover { color: var(--fg); }
.decide-result[hidden] { display: none; }
.decide-result { animation: reveal-rise 0.6s var(--ease-out) both; }
.decide-cards { margin-top: var(--space-2xl); }
/* Keep the result coherent: cards align to the same left edge as the
   heading, story and action buttons (don't centre a lone recommendation). */
.decide-result .explore.few { justify-content: start; }
.decide-cards .ecard-primary .ph { box-shadow: inset 0 0 0 2px #C9A86A; }
.decide-escape { margin-top: var(--space-2xl); padding-top: var(--space-l); border-top: 1px solid var(--hairline); font-size: var(--step--1); color: var(--fg-soft); }
.decide-escape .cta, .decide-escape a { color: var(--fg); }

/* Seasonal edit (skin guide) */
/* Seasonal UV chart (skin-treatments-by-season article) */
.season-chart-fig { margin: var(--space-2xl) 0 0; }
.season-chart { display: block; width: 100%; height: auto; overflow: visible; }
.season-chart .sc-window { fill: color-mix(in srgb, #C9A86A 13%, transparent); }
.season-chart .sc-axis { stroke: var(--line); stroke-width: 1; }
.season-chart .sc-area { fill: color-mix(in srgb, #C9A86A 16%, transparent); }
.season-chart .sc-line { fill: none; stroke: #C9A86A; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.season-chart .sc-dot { fill: #C9A86A; }
.season-chart .sc-dot--low { fill: var(--ink); }
.season-chart text { font-family: var(--font-body); fill: var(--fg-soft); }
.season-chart .sc-peak, .season-chart .sc-low { font-size: 13px; letter-spacing: 0.04em; }
.season-chart .sc-window-label { font-size: 12px; letter-spacing: 0.14em; fill: var(--accent-ink); font-weight: 500; }
.season-chart .sc-months text { font-size: 14px; fill: var(--ink); text-anchor: middle; font-feature-settings: "tnum"; }
.season-chart .sc-seasons text { font-family: var(--font-display); font-size: 15px; fill: var(--fg-soft); text-anchor: middle; font-style: italic; }
.season-chart-cap { margin-top: var(--space-s); font-size: var(--step--2); color: var(--fg-soft); line-height: 1.5; text-align: center; }
/* Mobile UV bars — shown instead of the horizontal chart on small screens */
.uv-bars { display: none; }
.uv-bars-h { font-family: var(--font-display); font-size: var(--step-0); margin: 0 0 var(--space-m); }
.uv-row { display: grid; grid-template-columns: 2.4em 1fr; align-items: center; gap: var(--space-s); margin-bottom: 0.5rem; }
.uv-m { font-size: var(--step--1); color: var(--fg-soft); font-feature-settings: "tnum"; }
.uv-track { height: 12px; border-radius: 6px; background: color-mix(in srgb, var(--ink) 6%, transparent); overflow: hidden; }
.uv-track i { display: block; height: 100%; border-radius: 6px; background: color-mix(in srgb, #C9A86A 38%, var(--ink) 6%); }
.uv-row.is-cool .uv-track i { background: linear-gradient(90deg, color-mix(in srgb,#C9A86A 80%,transparent), #C9A86A); }
.uv-row.is-cool .uv-m { color: var(--accent-ink); font-weight: 500; }
.uv-bars-key { display: flex; align-items: center; gap: 0.5em; margin: var(--space-m) 0 0; font-size: var(--step--2); line-height: 1.5; color: var(--fg-soft); }
.uv-key-swatch { flex: 0 0 auto; width: 14px; height: 10px; border-radius: 3px; background: #C9A86A; }
@media (max-width: 640px) {
  .season-chart { display: none; }
  .uv-bars { display: block; }
}
.season-strategy { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: grid; gap: var(--space-l); }
@media (min-width: 720px) { .season-strategy { grid-template-columns: repeat(3, 1fr); gap: var(--space-xl); } }
.ss-card { padding-top: var(--space-m); border-top: 1px solid color-mix(in srgb, #C9A86A 50%, var(--line)); }
.ss-ico { display: block; width: 30px; height: 30px; color: var(--accent-ink); margin-bottom: var(--space-s); }
.ss-ico svg { width: 100%; height: 100%; }
.ss-card h3 { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); line-height: 1.15; margin-bottom: var(--space-2xs); }
.ss-card p { font-size: var(--step--1); line-height: 1.6; color: var(--fg-soft); margin: 0; }

/* Our-story timeline (about page) — editorial vertical journey */
.timeline { list-style: none; margin: var(--space-3xl) 0 0; padding: 0 0 0 var(--space-xl); border-left: 1px solid var(--hairline); }
.tl-item { position: relative; padding-bottom: var(--space-3xl); }
.tl-item:last-child { padding-bottom: 0; }
.tl-item::before { content: ""; position: absolute; left: calc(-1 * var(--space-xl) - 5px); top: 0.45em; width: 10px; height: 10px; border-radius: 50%; background: #C9A86A; box-shadow: 0 0 0 5px var(--bg); }
.tl-year { display: block; font-family: var(--font-display); font-size: var(--step-2); line-height: 1; color: var(--accent-ink); margin-bottom: var(--space-s); }
.tl-body h3 { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); line-height: 1.2; margin-bottom: var(--space-2xs); }
.tl-body p { font-size: var(--step-0); line-height: 1.65; color: var(--fg-soft); max-width: 52ch; margin: 0; }
@media (min-width: 720px) { .timeline { padding-left: var(--space-2xl); } .tl-item::before { left: calc(-1 * var(--space-2xl) - 5px); } }

.season-grid { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: grid; gap: var(--space-l); }
@media (min-width: 600px) { .season-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .season-grid { grid-template-columns: repeat(4, 1fr); } }
.season { display: flex; flex-direction: column; gap: var(--space-2xs); padding-top: var(--space-m); border-top: 1px solid color-mix(in srgb, #C9A86A 55%, var(--hairline)); }
.season-when { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--accent-ink); }
.season h4 { font-size: var(--step-1); margin: var(--space-2xs) 0; }
.season p { font-size: var(--step--1); line-height: 1.5; color: var(--fg-soft); font-weight: var(--weight-light); }
.season-tx { font-size: var(--step--1); }
.season-tx a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--line-strong); text-underline-offset: 3px; }
.season-tx a:hover { text-decoration-color: currentColor; }
.season-value { margin-top: var(--space-xs); font-size: var(--step--2); color: var(--fg); font-style: italic; }

/* "In the treatment room" session photos (machine pages) */
.tx-session { display: grid; grid-template-columns: 1fr; gap: var(--space-m); max-width: 760px; margin-inline: auto; }
.tx-session-2 { max-width: none; }
@media (min-width: 760px) { .tx-session-2 { grid-template-columns: 1fr 1fr; } }
.tx-session-shot { display: block; overflow: hidden; aspect-ratio: 3 / 2; background: var(--tint-deep); }
.tx-session-shot img { width: 100%; height: 100%; object-fit: cover; }

/* "At a glance" stat band (machine pages) */
.stat-band { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-l) 0; }
@media (min-width: 760px) { .stat-band { grid-template-columns: repeat(4, 1fr); } }
.stat-band li { text-align: center; padding: 0 var(--space-m); }
@media (min-width: 760px) { .stat-band li + li { border-left: 1px solid var(--hairline); } }
.stat-band-num { display: block; font-family: var(--font-display); font-size: clamp(1.5rem, 1.1rem + 1.6vw, 2.2rem); line-height: 1.05; color: var(--ink); }
.stat-band-label { display: block; margin-top: var(--space-2xs); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }

/* Technology media — one device shot, or two stacked (e.g. device + thermal) */
.tech-media { display: grid; gap: var(--space-s); }
.tech-shot { display: block; overflow: hidden; aspect-ratio: 4 / 3; background: var(--tint-deep); }
.tech-shot img { width: 100%; height: 100%; object-fit: cover; }

/* Treatment journey — stepped process timeline (machine pages) */
.journey { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: grid; gap: var(--space-xl); counter-reset: j; }
@media (min-width: 760px) { .journey { grid-template-columns: repeat(4, 1fr); gap: var(--space-l); } }
.journey-step { position: relative; padding-top: var(--space-l); border-top: 1px solid var(--hairline); }
/* a champagne node + connecting line across the top edge */
.journey-step::before { content: ""; position: absolute; top: -4px; left: 0; width: 7px; height: 7px; border-radius: 50%; background: #C9A86A; }
.journey-num { display: block; font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-label); color: var(--accent-ink); margin-bottom: var(--space-xs); }
.journey-step h4 { font-size: var(--step-1); margin-bottom: var(--space-xs); }
.journey-step p { font-size: var(--step--1); line-height: 1.55; color: var(--fg-soft); font-weight: var(--weight-light); }

/* Article explainer diagrams (acne marks-vs-scars, cellulite cross-section) */
.dgram-2col { display: grid; gap: var(--space-2xl); margin-top: var(--space-2xl); }
@media (min-width: 600px) { .dgram-2col { grid-template-columns: 1fr 1fr; gap: var(--space-2xl) var(--space-3xl); } }
.dgram-card { margin: 0; }
/* 3-step strip (consultation flow, tattooing process) */
.dx-steps { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: grid; gap: var(--space-xl); counter-reset: dxs; }
@media (min-width: 700px) { .dx-steps { grid-template-columns: repeat(3, 1fr); gap: var(--space-2xl); } }
.dx-steps li { margin: 0; }
.dx-steps .dxs-n { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border: 1px solid var(--hairline); border-radius: 50%; font-family: var(--font-display); font-size: var(--step-0); color: var(--accent-ink); }
.dx-steps h4 { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); margin: var(--space-m) 0 var(--space-2xs); }
.dx-steps p { font-size: var(--step--1); line-height: 1.6; color: var(--fg-soft); margin: 0; }
.dgram-3col { display: grid; gap: var(--space-2xl); margin-top: var(--space-2xl); }
@media (min-width: 700px) { .dgram-3col { grid-template-columns: repeat(3, 1fr); gap: var(--space-2xl) var(--space-2xl); } }
.dgram-3col .dgram-svg { max-width: 220px; }
/* Lymphatic-drainage flow animation */
.dx-lymph-svg { width: 100%; height: auto; max-width: 360px; }
.ly-dot { opacity: 0.5; }
@media (prefers-reduced-motion: no-preference) {
  .ly-dot { animation: ly-flow 2s linear infinite; }
}
@keyframes ly-flow { 0%, 100% { opacity: 0.18; } 50% { opacity: 1; } }
.dgram-wide { margin: var(--space-2xl) 0 0; }
.dgram-svg { display: block; width: 100%; height: auto; max-width: 460px; margin-inline: auto; }
.dgram-2col .dgram-svg { max-width: 260px; }
.dgram-card figcaption h4 { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); margin: var(--space-m) 0 var(--space-2xs); }
.dgram-card figcaption p { font-size: var(--step--1); line-height: 1.6; color: var(--fg-soft); margin: 0; max-width: 42ch; }
.dgram-wide figcaption { margin-top: var(--space-s); text-align: center; font-size: var(--step--2); color: var(--fg-soft); }
.dgram-svg text.dgram-t { font-family: var(--font-body); font-size: 13px; fill: var(--fg-soft); letter-spacing: 0.02em; }
.dgram-svg text.dgram-t--accent { fill: var(--accent-ink); }
/* line + bar charts inside articles (collagen decline, session progress) */
.lc-chart { display: block; width: 100%; height: auto; margin-top: var(--space-l); }
.lc-axis { stroke: var(--line); stroke-width: 1; }
.lc-area { fill: color-mix(in srgb, #C9A86A 15%, transparent); }
.lc-line { fill: none; stroke: #C9A86A; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.lc-dot { fill: #C9A86A; }
.lc-y { font-family: var(--font-body); font-size: 13px; fill: var(--fg-soft); letter-spacing: 0.02em; }
.lc-x text { font-family: var(--font-body); font-size: 15px; fill: var(--ink); text-anchor: middle; font-feature-settings: "tnum"; }
.tb rect { fill: color-mix(in srgb, #C9A86A 42%, var(--surface)); }
.tb rect:nth-child(5) { fill: color-mix(in srgb, #C9A86A 70%, var(--surface)); }
.tb rect:nth-child(6) { fill: #C9A86A; }

/* Tooth shade spectrum (teeth-whitening) */
.shade-scale { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; margin-top: var(--space-2xl); border-radius: 4px; overflow: hidden; box-shadow: inset 0 0 0 1px var(--line); }
.shade-scale span { height: 64px; background: var(--c); }
.shade-ends { display: flex; justify-content: space-between; margin-top: var(--space-s); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }

/* Fitzpatrick skin-tone scale (skin-types guide) */
.tone-scale { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: var(--space-m); }
@media (min-width: 600px) { .tone-scale { grid-template-columns: repeat(2, 1fr); gap: var(--space-l) var(--space-2xl); } }
@media (min-width: 1024px) { .tone-scale { grid-template-columns: repeat(3, 1fr); } }
.tone { display: grid; grid-template-columns: auto auto 1fr; align-items: center; gap: var(--space-m); }
.tone-swatch { width: 38px; height: 38px; border-radius: 50%; background: var(--t); box-shadow: inset 0 0 0 1px rgba(20,19,15,0.12); flex: 0 0 auto; }
.tone-num { font-family: var(--font-display); font-size: var(--step-1); line-height: 1; color: var(--fg); min-width: 1.4em; }
.tone-desc { font-size: var(--step--1); line-height: 1.4; color: var(--fg-soft); }
.tone-note { margin-top: var(--space-xl); font-size: var(--step--1); color: var(--fg-soft); }

/* Skin-guide accordion — progressive disclosure for the dense educational lists.
   Native <details> (no JS, accessible); reads as a guided journey on mobile, not
   a wall of text. Hairline-ruled, champagne +/- marker, subtle reveal on open. */
.sg-list { margin-top: var(--space-2xl); border-top: 1px solid var(--hairline); }
.sg-item { border-bottom: 1px solid var(--hairline); }
.sg-item > summary { list-style: none; cursor: pointer; display: flex; align-items: baseline; gap: var(--space-s) var(--space-m); flex-wrap: wrap; padding: var(--space-l) var(--space-2xl) var(--space-l) 0; position: relative; }
.sg-item > summary::-webkit-details-marker { display: none; }
.sg-tag { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--accent-ink); align-self: center; }
.sg-sum { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); line-height: 1.15; color: var(--fg); flex: 1 1 auto; }
.sg-item > summary::after { content: ""; position: absolute; right: 2px; top: 50%; width: 13px; height: 13px; margin-top: -6px; flex: 0 0 auto;
  background:
    linear-gradient(var(--accent-ink), var(--accent-ink)) center/13px 1.5px no-repeat,
    linear-gradient(var(--accent-ink), var(--accent-ink)) center/1.5px 13px no-repeat;
  transition: transform var(--dur-base) var(--ease-out), opacity var(--dur-base) var(--ease-out); }
/* open = minus: drop the vertical stroke, keep the horizontal */
.sg-item[open] > summary::after { opacity: 0.6; background: linear-gradient(var(--accent-ink), var(--accent-ink)) center/13px 1.5px no-repeat; }
@media (hover: hover) { .sg-item > summary:hover .sg-sum { color: var(--accent-ink); } }
.sg-body { padding: 0 var(--space-2xl) var(--space-l) 0; }
.sg-body p { font-size: var(--step--1); line-height: 1.6; color: var(--fg-soft); max-width: 62ch; margin: 0; }
.sg-body p a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--line-strong); text-underline-offset: 3px; transition: text-decoration-color var(--dur-fast) var(--ease-out); }
.sg-body p a:hover { text-decoration-color: currentColor; }
.sg-item[open] > .sg-body { animation: sg-reveal 0.4s var(--ease-out); }
@keyframes sg-reveal { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .sg-item[open] > .sg-body { animation: none; } .sg-item > summary::after { transition: none; } }
/* Mobile: roomier tap targets, calmer measure */
@media (max-width: 600px) {
  .sg-item > summary { padding-block: var(--space-m); }
  .sg-sum { font-size: var(--step-0); }
  .skin-types-page .lead, .sg-body p { text-wrap: pretty; }
}
.spec { display: grid; gap: var(--space-l); align-content: start; }
.spec > div { display: grid; gap: var(--space-2xs); padding-top: var(--space-m); border-top: 1px solid var(--hairline); }
.spec dt { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }
.spec dd { font-size: var(--step-1); font-family: var(--font-display); }
.faq-item { border-top: 1px solid var(--hairline); padding: var(--space-l) 0; }
.faq-item summary {
  display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-l);
  font-family: var(--font-display); font-size: var(--step-1); line-height: 1.25;
  cursor: pointer; list-style: none;
  transition: color var(--dur-fast) var(--ease-out);
}
.faq-item summary::-webkit-details-marker { display: none; }
/* Affordance: a minimal hairline chevron (points down → flips up when open). */
.faq-item summary::after {
  content: ""; flex: 0 0 auto; align-self: flex-start; position: relative; top: 0.45em;
  width: 0.6em; height: 0.6em; margin-right: 0.15em;
  border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg); opacity: 0.55;
  transition: transform var(--dur-base) var(--ease-out), opacity var(--dur-base) var(--ease-out);
}
.faq-item[open] summary::after { transform: rotate(-135deg); opacity: 0.9; }
/* Open/hover question stays the HEADING colour (--fg) — no champagne highlight,
   so it transitions identically to the rest of the text through the morph. */
.faq-item[open] summary { color: var(--fg); }
@media (hover: hover) { .faq-item summary:hover { color: var(--fg); } .faq-item summary:hover::after { opacity: 0.9; } }
.faq-item summary + * { margin-top: var(--space-m); }

/* ---------- Footer ---------- */
/* Final booking invitation — the footer opens with a quiet conversion moment
   (headline + actions) rather than a passive wordmark, then the link columns,
   then a restrained bottom bar carrying a small brand mark. */
.footer-cta { display: grid; gap: var(--space-l); padding-bottom: var(--space-2xl); margin-bottom: var(--space-2xl); border-bottom: 1px solid var(--line-on-dark); }
@media (min-width: 860px) { .footer-cta { grid-template-columns: 1.3fr auto; column-gap: var(--space-3xl); align-items: end; } }
.footer-cta .label { color: var(--on-dark-soft); }
.footer-cta-title { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: clamp(1.9rem, 1.3rem + 2.1vw, 3rem); line-height: 1.04; letter-spacing: -0.01em; color: var(--on-dark); margin-top: var(--space-s); max-width: 18ch; }
.footer-cta-text p { font-size: var(--step-0); line-height: 1.6; color: var(--on-dark-soft); margin-top: var(--space-m); max-width: 46ch; }
.footer-cta-actions { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-m); }
@media (min-width: 860px) { .footer-cta-actions { align-items: flex-end; padding-bottom: 0.2em; } }
.footer-cta-actions .btn { background: var(--on-dark); color: var(--ink); border-color: var(--on-dark); min-height: 54px; padding-inline: var(--space-xl); }
/* Keep this primary booking CTA a consistent filled button — the scroll colour-
   morph's `body[data-theme=dark] .btn` outline rule otherwise overrides it
   mid-scroll (filled → outline), which read as a glitch. Higher specificity wins. */
body[data-theme="dark"] .footer-cta-actions .btn, .section.dark .footer-cta-actions .btn { background: var(--on-dark); color: var(--ink); border-color: var(--on-dark); }
@media (hover: hover) { body[data-theme="dark"] .footer-cta-actions .btn:hover, .section.dark .footer-cta-actions .btn:hover { background: transparent; color: var(--on-dark); } }
.footer-call { font-size: var(--step--1); letter-spacing: var(--tracking-wide); color: var(--on-dark-soft); }
.footer-call:hover { color: var(--on-dark); }
.footer-nap { font-style: normal; font-size: var(--step--1); line-height: 1.7; color: var(--on-dark-soft); }
.footer-nap a { color: var(--on-dark); }
.footer-nap a:hover { color: var(--on-dark); border-bottom: 1px solid currentColor; }
/* Lifted charcoal + a champagne seam so the footer reads as its OWN moment,
   distinct from the (pure-dark) final CTA section directly above it. */
.site-footer { background: #1b1915; color: var(--on-dark-soft); padding-block: var(--space-3xl) var(--space-2xl); border-top: 1px solid color-mix(in srgb, #C9A86A 32%, transparent); }
/* Extra separation when a dark CTA section sits right above the footer */
.section.dark + .site-footer { margin-top: 1px; }
/* Four balanced columns: two-up on mobile, four-up from tablet. */
.footer-grid { display: grid; gap: var(--space-xl) var(--space-l); grid-template-columns: repeat(2, 1fr); }
@media (min-width: 760px) { .footer-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1024px) { .footer-grid { grid-template-columns: 1.4fr repeat(4, 1fr); } }
.site-footer .brand { color: var(--on-dark); display: inline-block; margin-bottom: var(--space-m); }
.site-footer h5 { font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--on-dark-soft); margin-bottom: var(--space-m); }
.footer-links { display: grid; gap: var(--space-s); font-size: var(--step--1); line-height: 1.4; }
/* The legal row stays the smallest text; column links read clearly above it. */
.site-footer > .container > .footer-grid p { font-size: var(--step--2); line-height: 1.6; max-width: 34ch; }
.site-footer a:hover { color: var(--on-dark); }
.footer-bottom { margin-top: var(--space-2xl); padding-top: var(--space-l); border-top: 1px solid var(--line-on-dark); display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-s) var(--space-l); }
.footer-mark { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-1); letter-spacing: -0.01em; color: var(--on-dark); }
.footer-mark-dot { color: #C9A86A; }
.footer-copy { font-size: 0.68rem; letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--on-dark-soft); }
.footer-legal { margin-left: auto; display: flex; gap: var(--space-l); font-size: 0.68rem; letter-spacing: var(--tracking-wide); text-transform: uppercase; }
.footer-legal a { color: var(--on-dark-soft); }
@media (max-width: 560px) { .footer-legal { margin-left: 0; } }

/* ---------- Mobile sticky Call/Book — RETIRED (Book now lives in the top header) ---------- */
.sticky-bar { display: none; }

/* ---------- Reveal ---------- */
/* Content is ALWAYS visible by default. The entrance only plays once JS adds
   .is-in as the element scrolls in — so if JS fails, a tab is backgrounded, or
   a renderer skips transitions, content still shows. It can never ship blank. */
@media (prefers-reduced-motion: no-preference) {
  /* One uniform reveal everywhere: same 0.7s curve so text loads identically
     regardless of the section's theme (it resolves before the colour-morph
     competes, which is what made dark/light sections feel inconsistent). */
  .js-fx .reveal.is-in { animation: reveal-rise 0.7s var(--ease-out) both; }
  .js-fx .reveal.stagger.is-in > * { animation: reveal-rise 0.7s var(--ease-out) both; }
  .js-fx .reveal.stagger.is-in > *:nth-child(2) { animation-delay: 80ms; }
  .js-fx .reveal.stagger.is-in > *:nth-child(3) { animation-delay: 160ms; }
  .js-fx .reveal.stagger.is-in > *:nth-child(4) { animation-delay: 240ms; }
  .js-fx .reveal.stagger.is-in > *:nth-child(5) { animation-delay: 320ms; }
}
@keyframes reveal-rise { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: none; } }

/* ---------- Scroll colour-morph ----------
   Sections tagged data-bg become transparent (JS only) so the body's morphing
   background shows through; body[data-theme] is driven by scroll (initThemeMorph).
   Without JS, .section.dark keeps its solid bg (readable fallback). */
.js-fx .section[data-bg] { background: transparent; color: inherit; }

/* ---------- Mask reveal (headline rises behind a clip) ---------- */
/* .reveal-mask: titles are ALWAYS visible (no hide-by-default — that caused
   missing-title bugs). Motion comes from the parent .reveal fade. */
.reveal-mask > span { display: block; }

/* ---------- Clip-path image reveal ---------- */
@media (prefers-reduced-motion: no-preference) {
  .js-fx .reveal-img.is-in img { animation: reveal-clip 1.3s var(--ease-out) both; }
}
@keyframes reveal-clip { from { clip-path: inset(0 0 100% 0); transform: scale(1.06); } to { clip-path: inset(0 0 0 0); transform: scale(1); } }

/* ---------- Marquee credential ticker ---------- */
.marquee { overflow: hidden; border-block: 1px solid var(--hairline); padding-block: var(--space-l); }
.marquee-track { display: flex; gap: var(--space-2xl); width: max-content; animation: marquee 38s linear infinite; }
.marquee span { font-family: var(--font-display); font-size: var(--step-2); white-space: nowrap; color: var(--fg); opacity: 0.9; }
.marquee span::after { content: "—"; margin-left: var(--space-2xl); color: var(--fg-soft); }
@keyframes marquee { to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .marquee-track { animation: none; flex-wrap: wrap; } }

/* ---------- Forms (enquiry) ---------- */
.form { display: grid; gap: var(--space-l); max-width: 38rem; margin-top: var(--space-xl); }
/* Centred card form (contact enquiry) — balanced 2-column fields, surface panel */
.form-card { max-width: 660px; margin: var(--space-2xl) auto 0; padding: clamp(var(--space-l), 4vw, var(--space-2xl)); background: var(--surface); border: 1px solid var(--hairline); border-radius: 5px; }
.form-card .form-grid { display: grid; gap: var(--space-l) var(--space-xl); }
@media (min-width: 560px) { .form-card .form-grid { grid-template-columns: 1fr 1fr; } .form-card .field-full { grid-column: 1 / -1; } }
.form-card .btn { margin-top: var(--space-xl); }
/* Honeypot — hidden from people, catches bots */
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
/* Inline form result message */
.field .opt { color: var(--fg-soft); font-weight: 400; font-size: 0.85em; letter-spacing: 0; }
.form-status { margin-top: var(--space-m); font-size: var(--step--1); line-height: 1.5; }
.form-status.is-ok { color: var(--accent-ink); }
.form-status.is-err { color: #b3261e; }
.field { display: grid; gap: var(--space-2xs); }
.field label { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }
.field input, .field textarea { font: inherit; color: var(--fg); background: transparent; border: 0; border-bottom: 1px solid var(--line-strong); padding: var(--space-s) 0; border-radius: 0; transition: border-color var(--dur-fast) var(--ease-out); }
.field input:focus, .field textarea:focus { outline: none; border-bottom-color: var(--ink); }
.field textarea { resize: vertical; min-height: 5rem; }

/* Cal.com inline mount */
#cal-inline { min-height: 580px; margin-top: var(--space-l); }

/* Value-ladder emphasis */
.feature.feature-hero { border-top: 2px solid var(--ink); padding-top: var(--space-m); }
.feature .tag { display: inline-block; font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--accent-ink); margin-bottom: var(--space-xs); }

/* Legal / long-form copy */
.prose { max-width: var(--measure); }
.prose h2 { font-size: var(--step-2); margin-top: var(--space-2xl); margin-bottom: var(--space-s); }
.prose p { margin-bottom: var(--space-m); color: var(--fg-soft); }
/* Inline editorial imagery within long-form prose (single or two-up) */
.prose-figure { margin: var(--space-2xl) 0; padding: 0; }
.prose-figure .reveal-img { display: block; overflow: hidden; background: var(--hairline); }
.prose-figure .reveal-img img { display: block; width: 100%; height: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
.prose-figure--pair { display: grid; grid-template-columns: 1fr; gap: 2px; }
@media (min-width: 640px) { .prose-figure--pair { grid-template-columns: 1fr 1fr; } }
.prose-figure figcaption { margin-top: var(--space-s); font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; font-style: italic; }
.prose-figure--pair figcaption { grid-column: 1 / -1; }

/* Skin-science (Anatomy) hub cards */
.sci-grid { display: grid; grid-template-columns: 1fr; gap: 2px; margin-top: var(--space-xl); }
@media (min-width: 640px) { .sci-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 960px) { .sci-grid--hub { grid-template-columns: repeat(3, 1fr); } }
.sci-card { display: flex; flex-direction: column; gap: var(--space-2xs); padding: var(--space-xl); border: 1px solid var(--hairline); transition: background var(--dur-base) var(--ease-out); }
@media (hover: hover) { .sci-card:hover { background: color-mix(in srgb, var(--fg) 3%, transparent); } }
.sci-label { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.sci-t { font-family: var(--font-display); font-size: var(--step-1); color: var(--fg); line-height: 1.2; }
.sci-lead { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.55; margin-top: var(--space-2xs); }
.sci-go { margin-top: auto; padding-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg); }
.sci-go .ar { display: inline-block; transition: transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .sci-card:hover .sci-go .ar { transform: translateX(4px); } }

/* Device deep-dive: treatment areas + myths/facts */
.dv-areas { margin-top: var(--space-xl); display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2xs) var(--space-s); }
.dv-areas-k { font-size: var(--step--1); color: var(--fg-soft); margin-right: var(--space-2xs); }
.dv-chip { display: inline-flex; align-items: center; font-size: var(--step--1); color: var(--fg-soft); border: 1px solid var(--hairline); padding: 0.3em 0.7em; border-radius: 2px; }
.myth-list { margin-top: var(--space-2xl); display: grid; grid-template-columns: 1fr; gap: 2px; }
.myth { padding: var(--space-l) 0; border-top: 1px solid var(--hairline); }
.myth:last-child { border-bottom: 1px solid var(--hairline); }
.myth-q { font-family: var(--font-display); font-size: var(--step-1); color: var(--fg); line-height: 1.35; margin: 0; }
.myth-a { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; margin: var(--space-s) 0 0; }
.myth-tag { display: inline-block; margin-right: var(--space-s); font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); vertical-align: middle; }
.myth-tag--fact { color: var(--accent-ink); }

/* Recovery + results timeline (rtl-* — distinct from the season .timeline/.tl-item) */
.rtl { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; }
.rtl-item { position: relative; padding: 0 0 var(--space-xl) var(--space-xl); border-left: 1px solid var(--hairline); }
.rtl-item:last-child { border-left-color: transparent; padding-bottom: 0; }
.rtl-dot { position: absolute; left: -5px; top: 5px; width: 9px; height: 9px; border-radius: 50%; background: var(--accent-ink); box-shadow: 0 0 0 4px var(--bg); }
.rtl-t { display: block; font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); }
.rtl-p { display: block; font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; margin-top: var(--space-2xs); max-width: 62ch; }
.rtl-reassure { margin-top: var(--space-l); padding: var(--space-m) var(--space-l); border: 1px solid var(--hairline); font-size: var(--step--1); color: var(--fg-soft); line-height: 1.6; }
.rtl-reassure-k { display: block; font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg); margin-bottom: var(--space-2xs); }
.rtl-note { margin-top: var(--space-m); font-size: var(--step--2); color: var(--fg-soft); font-style: italic; }

/* Side-by-side comparison table (device comparisons) */
.cmp { margin: var(--space-2xl) 0 0; border-top: 1px solid var(--hairline); }
.cmp-head { display: none; }
.cmp-row { padding: var(--space-l) 0; border-bottom: 1px solid var(--hairline); }
.cmp-k { display: block; font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); margin-bottom: var(--space-s); }
.cmp-v { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.55; }
.cmp-v + .cmp-v { margin-top: var(--space-s); }
.cmp-vlabel { display: block; font-family: var(--font-body); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg); margin-bottom: 2px; }
.cmp-note { margin-top: var(--space-l); font-size: var(--step--1); color: var(--fg-soft); font-style: italic; line-height: 1.6; }
@media (min-width: 720px) {
  .cmp-head, .cmp-row { display: grid; grid-template-columns: minmax(8rem, 1fr) 1.5fr 1.5fr; gap: var(--space-l); align-items: start; }
  .cmp-head { border-bottom: 1px solid var(--hairline); padding-bottom: var(--space-m); }
  .cmp-name { font-family: var(--font-display); font-size: var(--step-1); color: var(--fg); }
  .cmp-k { margin-bottom: 0; align-self: center; }
  .cmp-v + .cmp-v { margin-top: 0; }
  .cmp-vlabel { display: none; }
}

/* Group landing — "by goal" finder (goal -> matching treatments) */
.g-goals { list-style: none; margin: var(--space-2xl) 0 0; padding: 0; display: flex; flex-direction: column; }
.gg-row { display: grid; grid-template-columns: 1fr; gap: var(--space-2xs) var(--space-l); padding: var(--space-m) 0; border-top: 1px solid var(--hairline); }
.gg-row:last-child { border-bottom: 1px solid var(--hairline); }
@media (min-width: 640px) { .gg-row { grid-template-columns: minmax(0, 16rem) 1fr; align-items: baseline; gap: var(--space-l); } }
.gg-goal { font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); }
.gg-tx { display: flex; flex-wrap: wrap; gap: var(--space-2xs); }
.gg-chip { display: inline-flex; align-items: center; font-size: var(--step--1); color: var(--fg-soft); border: 1px solid var(--hairline); padding: 0.3em 0.7em; border-radius: 2px; }

/* Goal × treatment matrix (desktop). Hidden < 720px, where .g-goals--alt shows. */
.gx { display: none; }
.gx-vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
@media (min-width: 720px) {
  .gx { display: table; width: 100%; border-collapse: collapse; margin-top: var(--space-2xl); }
  .g-goals--alt { display: none; }
}
.gx caption { caption-side: bottom; margin-top: var(--space-m); text-align: left; max-width: 660px; font-size: var(--step--1); color: var(--fg-soft); font-style: italic; line-height: 1.6; }
.gx th, .gx td { border: 1px solid var(--hairline); padding: var(--space-s) var(--space-xs); text-align: center; vertical-align: middle; }
.gx thead th { font-family: var(--font-body); font-weight: 400; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); vertical-align: bottom; line-height: 1.25; }
.gx tbody th { text-align: left; font-family: var(--font-display); font-weight: 400; font-size: var(--step-0); color: var(--fg); width: 30%; }
.gx-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; background: var(--fg); }
.gx-no { color: var(--hairline); }
.gx tbody tr:hover td, .gx tbody tr:hover th { background: color-mix(in srgb, var(--fg) 4%, transparent); }

/* Longevity bar chart (cosmetic tattooing) */
.gx-bars { margin: var(--space-2xl) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-m); max-width: 680px; }
.gxb-row { display: grid; grid-template-columns: 9.5rem 1fr auto; align-items: center; gap: var(--space-m); }
@media (max-width: 560px) { .gxb-row { grid-template-columns: 1fr auto; gap: 6px var(--space-s); } .gxb-track { grid-column: 1 / -1; } }
.gxb-label { font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); }
.gxb-track { position: relative; height: 8px; background: var(--hairline); overflow: hidden; }
.gxb-track i { display: block; height: 100%; width: var(--w); background: var(--fg); }
.gxb-note { font-size: var(--step--1); color: var(--fg-soft); white-space: nowrap; }
.gx-bars figcaption { margin-top: var(--space-s); max-width: 660px; font-size: var(--step--1); color: var(--fg-soft); font-style: italic; line-height: 1.6; }

/* ---------- Stats band (count-ups) ---------- */
.stats { display: grid; gap: var(--space-2xl); text-align: center; }
@media (min-width: 768px) { .stats { grid-template-columns: repeat(3, 1fr); } }
.stat .num { display: block; font-family: var(--font-display); font-size: var(--step-5); line-height: 1; font-variant-numeric: tabular-nums; }
.stat-label { display: block; margin-top: var(--space-s); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }

/* ---------- Authority seals (award-style credential medallions) ---------- */
.seals { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-xl) var(--space-l); }
@media (min-width: 760px) { .seals { grid-template-columns: repeat(4, 1fr); } }
.seal { display: flex; flex-direction: column; align-items: center; text-align: center; gap: var(--space-m); }
.seal-ring { width: clamp(96px, 16vw, 124px); aspect-ratio: 1; border-radius: 50%; border: 1px solid #C9A86A; display: flex; align-items: center; justify-content: center; color: var(--fg); transition: background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out); }
.seal-ring svg { width: 32px; height: 32px; color: var(--accent-ink); }
.sr-big { font-family: var(--font-display); font-size: var(--step-3); letter-spacing: 0.01em; line-height: 1; }
.sr-big sup { font-size: 0.45em; vertical-align: super; }
@media (hover: hover) { .seal:hover .seal-ring { background: color-mix(in srgb, #C9A86A 12%, transparent); } }
.seal-label { font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); line-height: 1.55; }

/* ---------- Brand divider (full-bleed wordmark) ---------- */
/* Typographic brand divider — a quiet wordmark "breath" between sections */
.brand-divider { background: var(--surface); }
.bd-inner { display: flex; align-items: center; justify-content: center; gap: clamp(var(--space-m), 4vw, var(--space-xl)); }
.bd-rule { height: 1px; width: clamp(36px, 12vw, 150px); background: var(--hairline); }
.bd-mark { font-family: var(--font-display); font-size: clamp(2rem, 1.2rem + 3vw, 3.4rem); letter-spacing: 0.02em; line-height: 1; color: var(--ink); white-space: nowrap; }
.bd-sub { margin: var(--space-m) auto 0; font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }

/* ---------- Announcement rotator ---------- */
.announce-msg { margin: 0; font-family: var(--font-body); font-size: var(--step--2); font-weight: var(--weight-medium); letter-spacing: 0.14em; text-transform: uppercase; white-space: nowrap; }
.announce-msg a { border-bottom: 1px solid currentColor; padding-bottom: 1px; }
@media (max-width: 600px) { .announce-msg { font-size: 0.56rem; letter-spacing: 0.08em; } }

/* ---------- Client reviews (static editorial grid) ---------- */
.reviews-rating { display: flex; align-items: center; justify-content: center; gap: var(--space-s); margin-top: var(--space-m); }
.reviews-rating .stars { color: #C9A86A; letter-spacing: 0.12em; font-size: var(--step-0); }
.reviews-rating-text { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }

/* Aggregate rating hero — centred medallion, no borders (clean) */
.rating-hero { display: flex; align-items: center; justify-content: center; gap: var(--space-l); margin: var(--space-xl) 0 var(--space-3xl); }
.rating-num { font-family: var(--font-display); font-size: var(--step-6); line-height: 0.9; color: var(--fg); font-variant-numeric: tabular-nums; }
.rating-stack { display: flex; flex-direction: column; gap: var(--space-2xs); text-align: left; }
.rating-hero .stars { color: #C9A86A; letter-spacing: 0.16em; font-size: var(--step-2); }
.rating-meta { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.rating-meta strong { color: var(--fg); font-weight: var(--weight-medium); }

/* Reviews: columns separated by VERTICAL hairlines on desktop (editorial),
   stacked with top rules on mobile. No more full-width + segmented double line. */
/* One-row auto-scrolling carousel (JS marquee in motion.js → initReviews) */
.reviews-carousel { margin-top: var(--space-2xl); overflow-x: auto; overflow-y: hidden; scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; cursor: grab; }
.reviews-carousel::-webkit-scrollbar { display: none; }
.reviews-carousel.dragging { cursor: grabbing; }
.reviews-track { display: flex; width: max-content; align-items: stretch; }
.reviews-track .review { flex: 0 0 clamp(280px, 82vw, 380px); padding: var(--space-l) var(--space-2xl); border-left: 1px solid var(--line-on-dark); }
.reviews-track .review:first-child { border-left: 0; }
.review { position: relative; display: flex; flex-direction: column; gap: var(--space-m); }
.review .r-mark { font-family: var(--font-display); font-size: var(--step-4); line-height: 0.8; color: #C9A86A; opacity: 0.5; }
.review .stars { color: #C9A86A; letter-spacing: 0.12em; font-size: var(--step--1); }
.review blockquote { font-family: var(--font-display); font-size: var(--step-1); line-height: 1.4; }
.review figcaption { margin-top: auto; display: flex; flex-direction: column; gap: 2px; padding-top: var(--space-s); }
.review .r-name { font-family: var(--font-display); font-size: var(--step-0); color: var(--fg); }
.review .r-src { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
@media (max-width: 600px) { .rating-hero { gap: var(--space-m); } .rating-num { font-size: var(--step-5); } }

/* ---------- Auto-scroll gallery (Inside SkinMedics) ---------- */
.gallery-auto { margin-top: var(--space-2xl); overflow: hidden; }
.gallery-track { display: flex; gap: var(--space-m); width: max-content; animation: gallery-scroll 64s linear infinite; }
.gallery-auto:hover .gallery-track { animation-play-state: paused; }
/* Draggable mode (JS adds .is-scroll) — native horizontal scroll + grab cursor */
.gallery-auto.is-scroll { overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; cursor: grab; }
.gallery-auto.is-scroll::-webkit-scrollbar { display: none; }
.gallery-auto.is-scroll.dragging { cursor: grabbing; }
.gallery-auto.is-scroll .gallery-track { animation: none; }
.gallery-auto.is-scroll .gallery-track img { -webkit-user-drag: none; user-select: none; pointer-events: none; }
.gallery-track figure, .gallery-track .g-item { flex: 0 0 auto; width: min(78vw, 360px); margin: 0; }
.gallery-track .g-item { display: block; color: inherit; text-decoration: none; }
.gallery-track .g-item .ph, .gallery-track figure img, .gallery-track .g-item img { display: block; overflow: hidden; }
.gallery-track figure img, .gallery-track .g-item img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; filter: grayscale(0.3) contrast(1.02); transition: transform 1.1s var(--ease-out); }
.gallery-track figcaption { margin-top: var(--space-s); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.gallery-track .g-item figcaption { display: inline-flex; align-items: center; gap: 0.5em; transition: color var(--dur-fast) var(--ease-out); }
.gallery-track .g-item figcaption::after { content: "\2192"; opacity: 0; transform: translateX(-4px); transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .gallery-track .g-item:hover figcaption { color: var(--accent-ink); } .gallery-track .g-item:hover figcaption::after { opacity: 1; transform: none; } }
@keyframes gallery-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .gallery-track { animation: none; flex-wrap: nowrap; overflow-x: auto; } }

/* ---------- Star stat (Six-star) ---------- */
/* Higher specificity than `.stat .num` so the star sits inline beside the "6"
   (the block display from .stat .num was pushing the star to the far left). */
.stat .num.stat-star { display: inline-flex; align-items: center; justify-content: center; gap: 0.14em; line-height: 1; }
.stat .num.stat-star svg { width: 0.46em; height: 0.46em; flex: 0 0 auto; color: #C9A86A; position: relative; top: -0.04em; }
.g-head { display: flex; justify-content: space-between; align-items: flex-end; gap: var(--space-l); flex-wrap: wrap; }
.h-gallery-hint { margin: 0; font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); white-space: nowrap; }

/* ---------- Treatments index (filterable) ---------- */
.filters { display: flex; flex-wrap: wrap; gap: var(--space-s); justify-content: center; }
.filter { font-family: var(--font-body); font-size: var(--step--2); font-weight: var(--weight-medium); letter-spacing: var(--tracking-wide); text-transform: uppercase; padding: var(--space-xs) var(--space-m); min-height: 40px; border: 1px solid var(--line-strong); color: var(--ink-soft); background: transparent; transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out); }
@media (hover: hover) { .filter:hover { border-color: var(--ink); color: var(--ink); } }
.filter.is-active { background: var(--ink); color: var(--bg); border-color: var(--ink); }

.tindex { display: grid; gap: var(--space-xl) var(--space-l); margin-top: var(--space-2xl); }
@media (min-width: 640px) { .tindex { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .tindex { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1280px) { .tindex { grid-template-columns: repeat(4, 1fr); } }
.tcard { display: block; }
.tcard[hidden] { display: none; }
.tcard .ph { display: block; aspect-ratio: 4 / 5; overflow: hidden; background: var(--tint-deep); }
.tcard .ph img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.3) contrast(1.02); transition: transform 1.1s var(--ease-out); }
.tcard-cat { display: block; margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--accent-ink); }
.tcard .nm { display: block; font-family: var(--font-display); font-size: var(--step-2); line-height: 1.1; margin-top: var(--space-2xs); }
.tcard .bl { display: block; margin-top: var(--space-s); font-size: var(--step--1); color: var(--fg-soft); }
.tcard .go { display: inline-flex; align-items: center; gap: 0.5em; margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--accent-ink); }
.tcard .go .ar { transition: transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .tcard:hover .ph img { transform: scale(1.05); } .tcard:hover .go .ar { transform: translateX(5px); } }

/* ---------- Team grid (About) ---------- */
.team { display: grid; gap: var(--space-2xl) var(--space-xl); margin-top: var(--space-2xl); }
@media (min-width: 640px) { .team { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .team { grid-template-columns: repeat(3, 1fr); } }
.member .photo { position: relative; aspect-ratio: 4 / 5; overflow: hidden; background: var(--tint-deep); }
.member .photo img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.35) contrast(1.02); transition: transform 1.2s var(--ease-out), filter 0.7s var(--ease-out); }
@media (hover: hover) { .member:hover .photo img { transform: scale(1.04); filter: grayscale(0.05) contrast(1.03); } }

/* Team philosophy pull-quote band */
.team-ethos { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: var(--step-3); line-height: 1.2; letter-spacing: -0.01em; text-wrap: balance; max-width: 22ch; margin-inline: auto; }
.team-ethos-by { display: block; margin-top: var(--space-l); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--fg-soft); }
.member .mono { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: var(--step-4); color: var(--accent-ink); opacity: 0.55; }
.member .name { font-family: var(--font-display); font-size: var(--step-2); margin-top: var(--space-m); }
.member .role { display: block; margin-top: var(--space-2xs); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.member .creds { display: block; margin-top: var(--space-s); font-size: var(--step--1); color: var(--fg-soft); }
/* Member as link (team grid + /team index) */
a.member { display: block; color: inherit; text-decoration: none; }
a.member .name { color: var(--fg); }
.member .go { display: inline-flex; align-items: center; gap: 0.5em; margin-top: var(--space-s); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--accent-ink); }
.member .go .ar { transition: transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { a.member:hover .go .ar { transform: translateX(5px); } }

/* ---------- Breadcrumbs ---------- */
/* Hidden from view (kept in DOM + JSON-LD for SEO). visibility:hidden preserves
   the top padding so the page still clears the fixed header. */
/* Hidden from layout entirely (kept in DOM + JSON-LD for SEO). The header
   clearance it used to provide now lives on .article-head — no empty bar. */
.crumbs { display: none; }
.crumbs a { color: var(--fg-soft); }
.crumbs a:hover { color: var(--fg); }
.crumbs span { margin: 0 0.5em; color: var(--hairline); }
.crumbs [aria-current] { color: var(--fg); }

/* ---------- Staff profile page ---------- */
.profile.section { padding-top: var(--space-l); }
.profile-mono { aspect-ratio: 4 / 5; display: flex; align-items: center; justify-content: center; background: var(--tint-deep); }
.profile-mono span { font-family: var(--font-display); font-size: var(--step-6); color: var(--accent-ink); opacity: 0.5; }
.split-prose { display: grid; gap: var(--space-2xl); align-items: start; }
@media (min-width: 900px) { .split-prose { grid-template-columns: 1.6fr 1fr; gap: var(--space-3xl); } }
.focus-card { border-top: 1px solid var(--hairline); padding-top: var(--space-l); }
.focus-list { list-style: none; margin: var(--space-m) 0 0; padding: 0; }
.focus-list li { position: relative; padding-left: 1.4em; margin-bottom: var(--space-s); color: var(--fg-soft); font-size: var(--step--1); }
.focus-list li::before { content: ""; position: absolute; left: 0; top: 0.6em; width: 0.7em; height: 1px; background: var(--accent-ink); }
.creds-line { margin-top: var(--space-l); padding-top: var(--space-m); border-top: 1px solid var(--hairline); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }

/* ---------- Practitioner profile (spectacular) ---------- */
.member-hero { position: relative; overflow: hidden; padding-block: calc(var(--announce-h) + 76px + var(--space-xl)) var(--space-3xl); }
.member-watermark { position: absolute; top: -0.18em; right: -0.04em; z-index: 0; font-family: var(--font-display); font-weight: var(--weight-regular); font-size: clamp(18rem, 40vw, 42rem); line-height: 0.78; letter-spacing: -0.04em; color: var(--ink); opacity: 0.04; pointer-events: none; user-select: none; }
.member-crumbs { position: relative; z-index: 1; padding-top: 0; padding-bottom: var(--space-xl); }
.member-crumbs .container { padding-inline: 0; }
.member-hero-grid { position: relative; z-index: 1; display: grid; gap: var(--space-2xl); align-items: center; }
@media (min-width: 900px) { .member-hero-grid { grid-template-columns: 0.85fr 1.15fr; gap: var(--space-3xl); } }
.member-portrait { aspect-ratio: 4 / 5; overflow: hidden; background: var(--tint-deep); }
.member-portrait img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.28) contrast(1.03); }
.member-portrait .profile-mono { width: 100%; height: 100%; }
.member-intro h1 { font-size: clamp(2.6rem, 1.6rem + 3.6vw, 4.6rem); line-height: 1.0; margin-top: var(--space-xs); }
.member-intro .lead { max-width: 34ch; }
.cred-chips { display: flex; flex-wrap: wrap; gap: var(--space-s); margin-top: var(--space-l); }
.cred-chips li { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); padding: 0.55em 1em; border: 1px solid var(--hairline); }
.member-intro .btn-row { margin-top: var(--space-xl); }

.member-quote { text-align: center; }
.member-quote .quote-mark { display: block; font-family: var(--font-display); font-size: clamp(4rem, 9vw, 7rem); line-height: 0.5; color: var(--on-dark); opacity: 0.22; }
.pull-quote { font-family: var(--font-display); font-weight: var(--weight-regular); font-size: clamp(1.6rem, 1rem + 2.5vw, 2.9rem); line-height: 1.3; letter-spacing: -0.01em; max-width: 24ch; margin: var(--space-s) auto 0; text-wrap: balance; }
.member-quote cite { display: block; margin-top: var(--space-xl); font-style: normal; font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--on-dark-soft); }

.member-body { display: grid; gap: var(--space-2xl); align-items: start; }
@media (min-width: 920px) { .member-body { grid-template-columns: 1.5fr 1fr; gap: var(--space-3xl); } }
.member-body .prose .label { display: block; margin-bottom: var(--space-m); }
.member-aside .label { display: block; }
@media (min-width: 920px) { .member-aside { position: sticky; top: calc(var(--announce-h) + 96px); } }
.expertise-list { margin-top: var(--space-m); }
.expertise { padding: var(--space-m) 0; border-top: 1px solid var(--hairline); }
.expertise:first-of-type { border-top: 0; padding-top: 0; }
.expertise h4 { font-size: var(--step-1); }
.expertise p { margin-top: var(--space-2xs); font-size: var(--step--1); color: var(--fg-soft); font-weight: var(--weight-light); }

/* ---------- Explore-more grid (cross-links) ---------- */
.explore { display: grid; gap: var(--space-xl) var(--space-l); margin-top: var(--space-2xl); }
@media (min-width: 640px) { .explore { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .explore { grid-template-columns: repeat(3, 1fr); } }
/* Journal rail (homepage) — a swipeable scroll-snap rail at every size (now
   carries 9 guides). A continuous marquee that auto-scrolls, pauses on hover,
   and can be grabbed/dragged or swiped (JS: initJournalRail). No edge mask. */
.journal-rail { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(300px, 340px); gap: var(--space-l);
  margin-top: var(--space-2xl); overflow-x: auto; padding-bottom: var(--space-m);
  -webkit-overflow-scrolling: touch; scrollbar-width: none; cursor: grab; }
.journal-rail::-webkit-scrollbar { display: none; }
.journal-rail.dragging { cursor: grabbing; }
.journal-rail.dragging .ecard { pointer-events: none; }
@media (max-width: 600px) { .journal-rail { grid-auto-columns: 82%; } }
.ecard { display: block; color: inherit; text-decoration: none; }
.ecard .ph { display: block; position: relative; aspect-ratio: 4 / 5; overflow: hidden; background: var(--tint-deep); }
/* Content-type badge — tells a Treatment (service) apart from a Journal (guide)
   at a glance. Treatment = outline; Journal = solid champagne. */
.kind-badge { position: absolute; top: var(--space-s); left: var(--space-s); z-index: 2; font-family: var(--font-body); font-size: 0.62rem; font-weight: var(--weight-medium); letter-spacing: var(--tracking-label); text-transform: uppercase; padding: 0.4em 0.7em; line-height: 1; }
/* Both are quiet dark-glass pills; type colour signals the kind (no bright box). */
.kind-treatment { color: var(--on-dark); border: 1px solid rgba(243,240,232,0.45); background: rgba(20,19,15,0.38); backdrop-filter: blur(5px); }
.kind-journal { color: #E4D2AC; border: 1px solid rgba(228,210,172,0.5); background: rgba(20,19,15,0.38); backdrop-filter: blur(5px); }
.ecard .ph img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.3) contrast(1.02); transition: transform 1.1s var(--ease-out); }
.ecard-cat { display: block; margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--accent-ink); }
.ecard .nm { display: block; font-family: var(--font-display); font-size: var(--step-2); line-height: 1.1; margin-top: var(--space-2xs); color: var(--fg); }
.ecard .bl { display: block; margin-top: var(--space-s); font-size: var(--step--1); color: var(--fg-soft); }
.ecard .go { display: inline-flex; align-items: center; gap: 0.5em; margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--accent-ink); }
.ecard .go .ar { transition: transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .ecard:hover .ph img { transform: scale(1.05); } .ecard:hover .go .ar { transform: translateX(5px); } }

/* ---------- Journal index ---------- */
.j-feature { display: grid; gap: var(--space-l); color: inherit; text-decoration: none; align-items: center; margin-bottom: var(--space-xl); }
@media (min-width: 900px) { .j-feature { grid-template-columns: 1.2fr 1fr; gap: var(--space-2xl); } }
.j-feature-media { aspect-ratio: 3 / 2; overflow: hidden; background: var(--tint-deep); }
.j-feature-media img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.3) contrast(1.02); transition: transform 1.1s var(--ease-out); }
.j-feature-text .section-title { margin-top: var(--space-2xs); }
.j-feature-text .go { display: inline-flex; align-items: center; gap: 0.5em; margin-top: var(--space-m); font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--accent-ink); }
.j-feature-text .go .ar { transition: transform var(--dur-base) var(--ease-out); }
@media (hover: hover) { .j-feature:hover .j-feature-media img { transform: scale(1.04); } .j-feature:hover .go .ar { transform: translateX(5px); } }

/* ---------- Article page ---------- */
.article-head { padding-top: calc(var(--announce-h) + 76px + var(--space-l)); padding-bottom: var(--space-l); }
.article-head h1 { margin-top: var(--space-2xs); }
.article-media .container { padding-inline: 0; }
/* Parallax frame: clips the scaled/drifting image (data-parallax scales 1.08) */
.article-media-frame { display: block; overflow: hidden; }
.article-media img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; object-position: center; filter: grayscale(0.25) contrast(1.02); will-change: transform; }
@media (min-width: 1024px) { .article-media .container { padding-inline: var(--space-l); } .article-media img { aspect-ratio: 2 / 1; max-height: 60vh; } }
/* People-focused photos (e.g. the contact consult shot) — match the frame to the
   image (16:9) and bias the crop upward so faces are never cut off. */
.article-media.art-faces img { object-position: center 28%; }
@media (min-width: 1024px) { .article-media.art-faces img { aspect-ratio: 16 / 9; max-height: 72vh; } }
.article-disclaimer { margin-top: var(--space-2xl); padding-top: var(--space-m); border-top: 1px solid var(--hairline); font-size: var(--step--2); color: var(--fg-soft); font-style: italic; }
.article-author { display: inline-flex; align-items: center; gap: var(--space-m); margin-top: var(--space-xl); color: inherit; text-decoration: none; }
.aa-photo { width: 64px; height: 64px; flex: 0 0 64px; overflow: hidden; background: var(--tint-deep); border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.aa-photo img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.3); }
.aa-photo .mono { font-family: var(--font-display); color: var(--accent-ink); }
/* SkinMedics brand byline — show the monogram uncropped, not a circular avatar */
.aa-photo--brand { border-radius: 0; background: transparent; }
.aa-photo--brand img { object-fit: contain; filter: none; }
.aa-text { display: flex; flex-direction: column; }
.aa-by { font-size: var(--step--2); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--fg-soft); }
.aa-name { font-family: var(--font-display); font-size: var(--step-1); color: var(--fg); }
.aa-role { font-size: var(--step--2); color: var(--fg-soft); }
@media (hover: hover) { .article-author:hover .aa-name { color: var(--accent-ink); } }

/* ---------- Mega dropdown (Treatments) ---------- */
/* Compact, CONTAINED dropdown — a card anchored under the Treatments link,
   not a full-bleed bar. The full-width wrapper is pointer-events:none so the
   cursor passes through the empty area to the page (this is what fixes the
   "stuck open" glitch); only the visible card captures hover. */
.has-mega { position: static; }
.mega { position: fixed; left: 0; right: 0; top: calc(var(--announce-h) + var(--header-h, 71px)); pointer-events: none; opacity: 0; visibility: hidden; transform: translateY(-8px); transition: opacity .22s var(--ease-out), transform .22s var(--ease-out), visibility .22s; z-index: 90; }
.has-mega.mega-open .mega, .has-mega:focus-within .mega { opacity: 1; visibility: visible; transform: translateY(0); }
.mega-inner { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--space-2xl); }
/* A drawer that drops flush from the header bar (square top, champagne seam) —
   reads as part of the nav, not a detached floating card. */
.mega-card { pointer-events: auto; position: relative; display: inline-block; width: max-content; max-width: min(94vw, 780px); background: var(--surface); border: 1px solid var(--line); border-top: 0; border-radius: 0 0 6px 6px; box-shadow: 0 14px 26px -20px rgba(20,19,15,0.3); padding: var(--space-l) var(--space-xl) var(--space-m); }
/* invisible bridge across the seam so hover doesn't drop while crossing it */
.mega-card::before { content: ""; position: absolute; left: 0; right: 0; top: -16px; height: 16px; }
/* champagne seam visually tying the drawer to the header edge */
.mega-card::after { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: linear-gradient(90deg, #C9A86A, color-mix(in srgb, #C9A86A 18%, transparent) 72%, transparent); }
.mega-cols { display: grid; grid-template-columns: repeat(4, minmax(140px, 1fr)); align-items: stretch; }
/* full-height hairline dividers between columns give the menu structure */
.mega-col { padding-inline: var(--space-l); border-left: 1px solid var(--line); }
.mega-col:first-child { padding-left: 0; border-left: 0; }
.mega-col:last-child { padding-right: 0; }
.nav .mega .mega-col-h { display: flex; align-items: center; gap: 0.55em; font-family: var(--font-display); font-size: var(--step-1); font-weight: var(--weight-regular); text-transform: none; letter-spacing: 0; line-height: 1.15; color: var(--ink); margin-bottom: var(--space-s); padding-bottom: var(--space-xs); border-bottom: 1px solid color-mix(in srgb, #C9A86A 55%, var(--line)); }
.mega-col-thumb { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 50%; overflow: hidden; background: var(--tint-deep); }
.mega-col-thumb img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.2); transition: transform var(--dur-slow) var(--ease-out); }
@media (hover: hover) { .nav .mega .mega-col-h:hover .mega-col-thumb img { transform: scale(1.1); } }
@media (hover: hover) { .nav .mega .mega-col-h:hover { color: var(--accent-ink); } }
.nav .mega .mega-col ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-2xs); }
.nav .mega .mega-col li { position: relative; }
.nav .mega .mega-col a { display: inline-flex; align-items: center; gap: 0.5em; font-family: var(--font-body); font-size: var(--step--1); font-weight: var(--weight-regular); text-transform: none; letter-spacing: 0.005em; line-height: 1.5; color: var(--ink-soft); transition: color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out); }
/* refined hover affordance: a champagne lead-dash slides in, link nudges right */
.nav .mega .mega-col li a::before { content: ""; width: 0; height: 1px; background: #C9A86A; transition: width var(--dur-base) var(--ease-out); }
@media (hover: hover) {
  .nav .mega .mega-col li a:hover { color: var(--ink); transform: translateX(2px); }
  .nav .mega .mega-col li a:hover::before { width: 0.9em; }
}
.mega-foot { display: flex; align-items: center; justify-content: space-between; gap: var(--space-l) var(--space-2xl); margin-top: var(--space-l); padding-top: var(--space-l); border-top: 1px solid var(--line); flex-wrap: wrap; }
/* Links: tidy wrapping rows with middot separators, vertically centred */
/* Aligned 3×2 grid — even columns, no dangling separators on wrap */
.mega-foot-links { display: grid; grid-template-columns: repeat(3, auto); gap: var(--space-2xs) var(--space-2xl); align-items: center; justify-content: start; }
.nav .mega .mega-foot-links a { position: relative; width: max-content; font-family: var(--font-body); font-size: 0.7rem; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--ink-soft); transition: color var(--dur-fast) var(--ease-out); }
.nav .mega .mega-foot-links a::after { content: ""; position: absolute; left: 0; bottom: -2px; width: 0; height: 1px; background: #C9A86A; transition: width var(--dur-base) var(--ease-out); }
.nav .mega .mega-foot-links a:hover { color: var(--accent-ink); }
.nav .mega .mega-foot-links a:hover::after { width: 100%; }
/* Featured signature treatment — a small visual anchor in the foot */
.mega-feature { display: inline-flex; align-items: center; gap: var(--space-s); flex: 0 0 auto; padding: var(--space-2xs) var(--space-s) var(--space-2xs) var(--space-2xs); border: 1px solid var(--line); border-radius: 40px; transition: border-color var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out); }
.mega-feature-img { width: 38px; height: 38px; border-radius: 50%; overflow: hidden; flex: 0 0 auto; background: var(--tint-deep); }
.mega-feature-img img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-slow) var(--ease-out); }
.mega-feature-text { display: flex; flex-direction: column; line-height: 1.1; }
.nav .mega .mega-feature-eyebrow { font-family: var(--font-body); font-size: var(--step--3, 0.62rem); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--accent-ink); }
.nav .mega .mega-feature-name { font-family: var(--font-display); font-size: var(--step--1); color: var(--ink); }
@media (hover: hover) { .mega-feature:hover { border-color: #C9A86A; background: color-mix(in srgb, #C9A86A 7%, transparent); } .mega-feature:hover .mega-feature-img img { transform: scale(1.08); } }
@media (max-width: 980px) { .mega-feature { display: none; } }
/* When open, the (transparent-over-hero) header turns solid so header + drawer
   read as one connected surface. */
html.mega-active .site-header { background: var(--surface); border-bottom: 1px solid var(--line); }
html.mega-active .site-header .brand,
html.mega-active .site-header .nav > ul > li > a,
html.mega-active .site-header .header-call { color: var(--ink); }
html.mega-active .site-header .header-cta .btn { color: var(--ink); border-color: var(--ink); }
@media (max-width: 900px) { .mega { display: none; } }

/* ============ Cinematic motion (emil-design-eng pass) ============ */
/* Hero load choreography — pure CSS, runs on load (no JS gate). Content shows
   even if animation is unsupported; movement removed under reduced-motion. */
@media (prefers-reduced-motion: no-preference) {
  .js-fx .hero-full .inner > *, .js-fx .hero-inner > * { animation: hero-rise 0.85s var(--ease-out) both; }
  .js-fx .hero-full .inner > :nth-child(2), .js-fx .hero-inner > :nth-child(2) { animation-delay: 0.10s; }
  .js-fx .hero-full .inner > :nth-child(3), .js-fx .hero-inner > :nth-child(3) { animation-delay: 0.20s; }
  .js-fx .hero-full .inner > :nth-child(4), .js-fx .hero-inner > :nth-child(4) { animation-delay: 0.32s; }
  .js-fx .hero-full .inner > :nth-child(5), .js-fx .hero-inner > :nth-child(5) { animation-delay: 0.44s; }
}
@keyframes hero-rise { from { opacity: 0; transform: translateY(22px); } to { opacity: 1; transform: none; } }

/* Section-title unmask — the headline wipes up behind a clip as its section
   scrolls in. Default (no .is-in) is fully visible, so it can never ship hidden. */
@media (prefers-reduced-motion: no-preference) {
  .js-fx .reveal.is-in .reveal-mask > span,
  .js-fx .reveal-mask.is-in > span { animation: title-unmask 1.1s var(--ease-out) both; }
}
@keyframes title-unmask { from { clip-path: inset(0 0 105% 0); } to { clip-path: inset(0 0 -8% 0); } }

/* Tactile press feedback on pressable cards (desktop fine-pointer) */
@media (hover: hover) and (pointer: fine) {
  .look, .ecard, a.member, .tcard, .j-feature { transition: transform var(--dur-base) var(--ease-out); }
  .look:active, .ecard:active, a.member:active, .tcard:active, .j-feature:active { transform: scale(0.985); transition-duration: var(--dur-fast); }
}
/* Buttons + filters must feel responsive to press (emil: instant tactile feedback).
   Works on touch; on fine-pointer the magnetic effect provides its own motion. */
.btn, .filter { transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out); }
.btn:active, .filter:active, .btn-row .cta:active, .sticky-bar a:active { transform: scale(0.97); }

/* Skip link */
.skip-link { position: absolute; left: -999px; top: 0; z-index: 200; background: var(--ink); color: var(--bg); padding: var(--space-s) var(--space-m); }
.skip-link:focus { left: var(--space-s); top: var(--space-s); }

/* Scroll-progress hairline — a champagne rule across the very top edge */
.scroll-progress { position: fixed; top: 0; left: 0; right: 0; height: 2px; z-index: 210; pointer-events: none; background: transparent; }
.scroll-progress > span { display: block; height: 100%; width: 100%; transform: scaleX(0); transform-origin: left; background: linear-gradient(90deg, #C9A86A, #E4D2AC); will-change: transform; }
@media (prefers-reduced-motion: reduce) { .scroll-progress { display: none; } }

/* Interactive ageing timeline (dx-ageing) */
.age-tl { margin-top: var(--space-2xl); }
.age-tabs { display: flex; flex-wrap: wrap; gap: var(--space-2xs); border-bottom: 1px solid var(--hairline); }
.age-tab { appearance: none; -webkit-appearance: none; background: none; border: 0; cursor: pointer; font-family: var(--font-display); font-size: var(--step-1); color: var(--fg-soft); padding: var(--space-s) var(--space-m); border-bottom: 2px solid transparent; margin-bottom: -1px; transition: color 200ms cubic-bezier(0.23,1,0.32,1), border-color 200ms cubic-bezier(0.23,1,0.32,1); }
@media (hover: hover) { .age-tab:hover { color: var(--fg); } }
.age-tab.is-active { color: var(--fg); border-bottom-color: var(--accent-ink, var(--fg)); }
.age-tab:active { transform: scale(0.97); }
.age-panels { margin-top: var(--space-xl); }
.age-panel h3 { font-family: var(--font-display); font-weight: var(--weight-regular, 400); font-size: var(--step-2); margin: 0 0 var(--space-l); }
.age-cols { display: grid; grid-template-columns: 1fr; gap: var(--space-l); }
@media (min-width: 640px) { .age-cols { grid-template-columns: 1fr 1fr; gap: var(--space-2xl); } }
.age-k { display: block; font-size: var(--step--2); letter-spacing: var(--tracking-wide, 0.08em); text-transform: uppercase; color: var(--fg-soft); margin-bottom: var(--space-2xs); }
.age-cols p { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.65; margin: 0; }
.age-note { margin-top: var(--space-2xl); font-size: var(--step--1); color: var(--fg-soft); }
.age-note a { color: var(--fg); border-bottom: 1px solid var(--hairline); }
@media (prefers-reduced-motion: no-preference) { .age-panel.is-active { animation: age-fade 400ms cubic-bezier(0.23,1,0.32,1); } }
@keyframes age-fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* Search — popular-term chips */
.search-terms { display: flex; flex-wrap: wrap; gap: var(--space-2xs); margin: var(--space-s) 0 var(--space-l); }
.search-term { appearance: none; -webkit-appearance: none; cursor: pointer; background: none; font: inherit; font-size: var(--step--1); color: var(--fg-soft); border: 1px solid var(--hairline); padding: 0.45em 0.95em; border-radius: 999px; transition: color 160ms cubic-bezier(0.23,1,0.32,1), border-color 160ms cubic-bezier(0.23,1,0.32,1), background 160ms cubic-bezier(0.23,1,0.32,1); }
@media (hover: hover) { .search-term:hover { color: var(--fg); border-color: var(--fg); } }
.search-term:active { transform: scale(0.97); }

/* Signature flagship treatment (Accent Prime et al) */
.sig-flag { display: inline-block; margin-left: var(--space-s); padding: 0.3em 0.85em; border: 1px solid #C9A86A; color: #A8874B; border-radius: 999px; font-size: 0.85em; letter-spacing: inherit; vertical-align: middle; white-space: nowrap; }
body[data-theme="dark"] .sig-flag, .dark .sig-flag { color: #C9A86A; }
.sig-story .sig-quote { max-width: 46rem; margin: var(--space-2xl) auto 0; text-align: center; }
.sig-story .sig-quote p { font-family: var(--font-display); font-size: var(--step-2); line-height: 1.35; text-wrap: balance; margin: 0; }
.sig-story .sig-quote cite { display: block; margin-top: var(--space-l); font-style: normal; font-size: var(--step--2); letter-spacing: var(--tracking-wide, 0.08em); text-transform: uppercase; color: var(--fg-soft); }
.sig-points { display: grid; grid-template-columns: 1fr; gap: var(--space-l) var(--space-2xl); margin-top: var(--space-3xl, var(--space-2xl)); }
@media (min-width: 700px) { .sig-points { grid-template-columns: 1fr 1fr; } }
.sig-point h4 { font-family: var(--font-display); font-weight: 500; font-size: var(--step-0); margin: 0 0 var(--space-2xs); }
.sig-point p { font-size: var(--step--1); color: var(--fg-soft); line-height: 1.65; margin: 0; }
.tcard-sig { position: absolute; top: var(--space-s); left: var(--space-s); z-index: 2; padding: 0.35em 0.9em; background: rgba(20,19,15,0.82); color: #C9A86A; border: 1px solid rgba(201,168,106,0.5); border-radius: 999px; font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase; }
.tcard .ph { position: relative; }
.sig-facts { list-style: none; display: flex; flex-wrap: wrap; gap: var(--space-s) var(--space-xl); padding: var(--space-l) 0 0; margin: var(--space-l) 0 0; border-top: 1px solid var(--hairline); }
.sig-facts li { display: flex; flex-direction: column; gap: 0.2em; }
.sig-facts .sf-k { font-size: var(--step--2); letter-spacing: var(--tracking-wide, 0.08em); text-transform: uppercase; }
.sig-facts .sf-v { font-size: var(--step--1); color: var(--fg-soft); }
