/* ===========================================================================
   IDLife IDN Assessment — APP UI  (v2 · drop-dead gorgeous)
   Mobile-first. Vanilla CSS. No frameworks.
   - Flow screens (landing/question/processing/reveal): centered, narrow.
   - Results screen: FULL-BLEED dashboard that uses the whole screen on desktop.
   Handoff refs: PART II §P2.I, PART IV (Shield/tiers), §11 (responsive).
   =========================================================================== */

/* ── Reset ────────────────────────────────────────────────────────────────*/
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
/* overflow-x on <html> too — body's clip alone still lets a trackpad swipe
   drag the ROOT scroller sideways when any element pokes past the viewport.
   overscroll-behavior kills the rubber-band on BOTH axes. The y axis matters
   because the vertical bounce translates the document (and the sticky
   .ov-topbar with it) while position:fixed chrome — the account/cart pill —
   stays pinned to the viewport, so the pill visibly escapes its header band. */
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; overflow-x: clip; overscroll-behavior: none; }
body {
  font-family: var(--font-body);
  background: var(--bg-1);
  color: var(--text);
  min-height: 100dvh;
  /* !important — the Open Shop bundle's scroll-lock restore writes an INLINE
     body overflow:auto, silently re-enabling horizontal page panning. The x
     axis must never scroll; inline styles lose only to !important.
     overflow-y MUST stay visible: any body overflow-y other than visible makes
     body its own (non-scrolling) scroll container, which detaches every
     position:sticky header from the viewport — the topbars scroll away. */
  overflow-x: clip !important;
  overflow-y: visible !important;
  overscroll-behavior: none;
}
/* Intentional inline scroll locks (modals/overlays set body.style.overflow =
   'hidden') must still win over the visible !important guard above. */
body[style*="overflow: hidden"], body[style*="overflow:hidden"] {
  overflow-y: hidden !important;
}
body {
  line-height: 1.55;
  letter-spacing: -0.011em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
button { font-family: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; border-radius: 8px; }
::selection { background: var(--selection-bg); color: var(--selection-fg); }
img, svg { display: block; }

/* ── Premium themed scrollbars (WebKit + Firefox) ───────────────────────*/
html { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 99px;
  border: 2.5px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover); background-clip: padding-box; }

/* ── Animated mesh background + grain ─────────────────────────────────────*/
.bg {
  position: fixed; inset: 0; z-index: -3;
  background:
    radial-gradient(120% 90% at 78% -10%,  rgba(79,142,247,0.16),  transparent 55%),
    radial-gradient(110% 90% at 12% 108%,  rgba(20,224,203,0.16),  transparent 55%),
    radial-gradient(90%  80% at 100% 60%,  rgba(181,108,255,0.10), transparent 60%),
    var(--bg-1);
}
.bg::after {  /* drifting mesh sheen */
  content: ''; position: absolute; inset: -20%;
  background:
    radial-gradient(40% 40% at 30% 30%, rgba(20,224,203,0.10), transparent 70%),
    radial-gradient(35% 35% at 70% 65%, rgba(91,149,255,0.10), transparent 70%);
  filter: blur(30px);
  animation: mesh 26s ease-in-out infinite alternate;
}
@keyframes mesh { to { transform: translate3d(4%, 3%, 0) scale(1.08) rotate(4deg); } }

.grain {
  position: fixed; inset: 0; z-index: -2; pointer-events: none; opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");
}
.dots {
  position: fixed; inset: 0; z-index: -2; pointer-events: none; opacity: 0.4;
  background-image: radial-gradient(rgba(255,255,255,0.045) 1px, transparent 1px);
  background-size: 30px 30px;
  -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, #000 35%, transparent 78%);
  mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, #000 35%, transparent 78%);
}
.orb { position: fixed; border-radius: 50%; filter: blur(90px); z-index: -3; opacity: 0.55; pointer-events: none; will-change: transform; }
.orb.o1 { width: 480px; height: 480px; background: rgba(20,224,203,0.45); top: -140px; left: -110px;  animation: drift  24s var(--ease-out) infinite alternate; }
.orb.o2 { width: 560px; height: 560px; background: rgba(79,142,247,0.42); bottom: -180px; right: -130px; animation: drift2 30s var(--ease-out) infinite alternate; }
.orb.o3 { width: 380px; height: 380px; background: rgba(181,108,255,0.30); top: 42%; left: 58%;        animation: drift  34s var(--ease-out) infinite alternate; }
@keyframes drift  { to { transform: translate(70px, 56px) scale(1.12); } }
@keyframes drift2 { to { transform: translate(-58px, -46px) scale(1.10); } }

/* ── Results screen: freeze ambient motion for buttery scrolling ──────────────
   The results dashboard is long and scrolls. Every .card uses a 40px
   backdrop-filter blur, and re-blurring it over a MOVING background (drifting
   orbs, mesh sheen, floating motes) every frame is what makes scrolling feel
   laggy and makes cards appear to "fade / pop in" as they scroll into view.
   While the results screen is up we hold the background perfectly still, so the
   blurred backdrop is rasterized once and cached — everything is simply present,
   and scrolling is smooth. Other screens keep the living ambience (they don't
   scroll, so there's no cost). */
body.on-results .bg::after,
body.on-results .orb            { animation: none !important; }
body.on-results .orb            { will-change: auto; }      /* de-promote frozen layers */
body.on-results .particles      { display: none; }          /* drop 16 animated motes */
body.on-results .gradient-text  { animation: none !important; } /* stop infinite text repaint */
/* Belt-and-suspenders: nothing on the results dashboard animates in on entry. */
#screen-results .anim-in,
#screen-results .stagger        { animation: none !important; opacity: 1 !important; transform: none !important; }

/* ── App shell ────────────────────────────────────────────────────────────*/
.app { position: relative; z-index: 1; min-height: 100dvh; }
.screen { display: none; min-height: 100dvh; }
.screen.active { display: flex; }

/* flow screens: centered narrow column */
.screen--flow { flex-direction: column; align-items: center; justify-content: center;
  padding: clamp(24px, 5vw, 56px) clamp(18px, 4vw, 40px); }
.flow { width: 100%; max-width: var(--w-flow); }

/* generic entrance */
.screen.active .anim-in { animation: screenIn 0.6s var(--ease-out) both; }
@keyframes screenIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: none; } }
.stagger { opacity: 0; animation: screenIn 0.7s var(--ease-out) forwards; }
/* opacity-only entrance (NO transform) for containers that must not become an
   abs-pos containing block (e.g. the landing hero holding the absolute shield) */
@keyframes fadeInOnly { from { opacity: 0; } to { opacity: 1; } }

/* ── Typography ───────────────────────────────────────────────────────────*/
.display {
  font-family: var(--font-display); font-weight: 700; line-height: 1.02;
  letter-spacing: -0.03em; font-size: clamp(34px, 7.5vw, 68px);
}
.h2 { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.02em; line-height: 1.08;
  font-size: clamp(26px, 4.4vw, 44px); }
.gradient-text {
  background: var(--grad-text); background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: shimmerText 8s ease-in-out infinite;
}
@keyframes shimmerText { 0%,100% { background-position: 0% center; } 50% { background-position: 100% center; } }
.eyebrow { font-family: var(--font-display); text-transform: uppercase; letter-spacing: 0.26em;
  font-size: 11.5px; font-weight: 800; color: var(--teal); }
.lead { color: var(--text-2); font-size: clamp(15px, 2.4vw, 19px); line-height: 1.6; max-width: 54ch; }
.muted { color: var(--muted); }

/* ── Buttons ──────────────────────────────────────────────────────────────*/
.btn {
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  border: none; border-radius: var(--r-md); cursor: pointer; overflow: hidden;
  font-family: var(--font-display); font-weight: 700; font-size: 16px;
  padding: 17px 36px; min-height: 56px; white-space: nowrap;
  transition: transform 0.22s var(--ease-spring), box-shadow 0.25s var(--ease-out), background 0.2s, opacity 0.2s;
  -webkit-tap-highlight-color: transparent;
}
.btn svg { width: 18px; height: 18px; }
.btn-primary { background: var(--grad-brand); color: var(--ink-on-brand); box-shadow: var(--glow-teal), inset 0 1px 0 rgba(255,255,255,0.4); }
.btn-primary::after { content:''; position:absolute; inset:0; background: var(--grad-sheen); background-size: 250% 100%;
  background-position: 150% 0; transition: background-position 0.7s var(--ease-out); pointer-events:none; }
.btn-primary:hover { transform: translateY(-3px); box-shadow: 0 0 64px rgba(20,224,203,0.5), inset 0 1px 0 rgba(255,255,255,0.5); }
.btn-primary:hover::after { background-position: -120% 0; }
.btn-primary:active { transform: translateY(-1px) scale(0.99); }
.btn-ghost { background: rgba(255,255,255,0.04); color: var(--text); border: 1px solid var(--border); }
.btn-ghost:hover { background: rgba(255,255,255,0.09); border-color: var(--border-hi); transform: translateY(-2px); }
.btn[disabled] { opacity: 0.35; cursor: not-allowed; transform: none !important; box-shadow: none; }
.btn-block { width: 100%; }
.btn-lg { padding: 19px 44px; min-height: 62px; font-size: 17px; }

/* ── Pills, badges, chips ─────────────────────────────────────────────────*/
.pill { display: inline-flex; align-items: center; gap: 8px; border: 1px solid var(--border);
  border-radius: var(--r-pill); font-size: 12px; font-weight: 600; padding: 8px 15px; color: var(--text-2);
  background: rgba(255,255,255,0.025); }
.pill .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--teal); box-shadow: 0 0 12px var(--teal); }

.shield-badge { display: inline-flex; align-items: center; gap: 9px; border: 1px solid color-mix(in srgb, var(--blue) 66%, transparent);
  border-radius: var(--r-pill); padding: 9px 17px; font-size: 13px; font-weight: 600; color: var(--shield);
  background: rgba(58,235,181,0.08); box-shadow: 0 0 30px rgba(58,235,181,0.14), inset 0 1px 0 rgba(255,255,255,0.08); }
.shield-badge svg { width: 16px; height: 16px; }
.shield-badge .live { width: 7px; height: 7px; border-radius: 50%; background: var(--shield); box-shadow: 0 0 12px var(--shield); animation: pulse 1.8s ease-in-out infinite; }
/* F170 · brand-new visitor who hasn't cleared the Shield moat — the castle
   homepage badge reads "Shield Not Yet Active" in the danger hue with an
   exclamation glyph (deliberately no check) until they move through the Shield
   intro or a saved assessment is found for their IP / Exigo. */
.shield-badge.not-active {
  color: var(--danger);
  border-color: color-mix(in srgb, var(--danger) 46%, transparent);
  background: var(--danger-soft);
  box-shadow: 0 0 30px color-mix(in srgb, var(--danger) 16%, transparent), inset 0 1px 0 rgba(255,255,255,0.06);
}
.shield-badge.not-active .live { background: var(--danger); box-shadow: 0 0 12px var(--danger); }
.dna-badge { display: inline-flex; align-items: center; gap: 8px; border: 1px solid color-mix(in srgb, var(--blue) 66%, transparent);
  border-radius: var(--r-pill); padding: 9px 15px; font-size: 13px; font-weight: 600; color: #8fb0ff;
  background: rgba(91,149,255,0.10); box-shadow: 0 0 26px rgba(91,149,255,0.14), inset 0 1px 0 rgba(255,255,255,0.08); }
.dna-badge svg { width: 16px; height: 16px; }
[data-theme="light"] .dna-badge { color: #3f6fd6; background: rgba(63,111,214,0.08); border-color: color-mix(in srgb, var(--blue) 66%, transparent); }
/* F183 · MOBILE ONLY — the DNA-connected badge collapses to an icon-only pill
   sized to MATCH the assessment Shield pill/icon (5/9 padding · 13px glyph → 25px
   tall), so the top-of-page controls read symmetrically on phones. The label is a
   raw text node, so font-size:0 hides it while the helix svg stays. */
@media (max-width: 640px) {
  .dna-badge { font-size: 0; gap: 0; padding: 5px 9px; }
  .dna-badge svg { width: 13px; height: 13px; }
}
@keyframes pulse { 0%,100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.45; transform: scale(0.65); } }

/* ── Glass card system ────────────────────────────────────────────────────*/
.card {
  position: relative;
  background: var(--grad-card);
  -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border: 1px solid var(--border-soft); border-radius: var(--r-lg);
  box-shadow: var(--shadow-md);
}
.card::before {  /* top inner highlight */
  content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: linear-gradient(180deg, rgba(255,255,255,0.06), transparent 30%);
  -webkit-mask: linear-gradient(#000, transparent 40%); mask: linear-gradient(#000, transparent 40%);
}
.card-grad-border {  /* gradient hairline border via mask */
  border: 1px solid transparent;
}
.card-grad-border::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit; padding: 1px; pointer-events: none;
  background: linear-gradient(135deg, rgba(20,224,203,0.5), rgba(79,142,247,0.18) 45%, transparent 70%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
}

/* ===========================================================================
   1) LANDING
   =========================================================================== */
#screen-landing .flow { display: flex; flex-direction: column; align-items: center; text-align: center; gap: clamp(18px, 3.4vw, 30px); }
.brandmark { display: inline-flex; align-items: center; gap: 11px; font-family: var(--font-display); font-weight: 700; }
.brandmark .shield-ico { width: 36px; height: 36px; color: var(--shield); filter: drop-shadow(0 0 16px var(--shield-glow)); }
.brandmark span { font-size: 21px; letter-spacing: 0.01em; }
/* F148 · landing brand = the iD·NUTRITION® shield lockup (the product's real
   wordmark — same glyph as the preloader / question bar / portal hero), replacing
   the internal "IDLife IDN" project name a customer should never see. */
.ls-brand-idn { display: inline-flex; align-items: center; gap: 0; white-space: nowrap; }
.ls-brand-idn .id-logo { width: 34px; height: 34px; flex: none; margin: 0 -.08em; }
.ls-brand-word { font-size: 21px; letter-spacing: .045em; color: var(--text); font-weight: 700; }
.ls-brand-reg { align-self: flex-start; position: relative; top: .16em; margin-left: .12em;
  font-size: 10px; font-weight: 700; color: var(--blue-2); }
.hero-attrs { display: flex; flex-wrap: wrap; gap: 9px; justify-content: center; }
.attr { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-2);
  border: 1px solid var(--border-soft); border-radius: var(--r-pill); padding: 9px 15px;
  background: rgba(255,255,255,0.025); transition: 0.2s; }
.attr:hover { border-color: var(--border-hi); transform: translateY(-2px); }
.attr svg { width: 15px; height: 15px; color: var(--teal); }
.shield-intro { display: flex; align-items: center; gap: 16px; text-align: left; padding: 18px 20px; max-width: 500px; }
.shield-intro .big-shield { width: 46px; height: 46px; flex: none; color: var(--shield); filter: drop-shadow(0 0 18px var(--shield-glow)); }
.shield-intro p { font-size: 14px; color: var(--text-2); line-height: 1.6; }
.shield-intro strong { color: var(--shield); }
.landing-foot { font-size: 12.5px; color: var(--muted-2); }

/* ===========================================================================
   2) QUESTION FLOW
   =========================================================================== */
#screen-question { flex-direction: column; }
.flow-topbar {
  position: sticky; top: 0; z-index: 5; width: 100%;
  display: flex; align-items: center; gap: 16px; justify-content: center;
  padding: clamp(16px, 3vw, 26px) clamp(18px, 4vw, 40px);
  /* FULLY OPAQUE — scrolled content must NEVER show through the bar */
  background: var(--bg);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
.flow-topbar-inner { width: 100%; max-width: var(--w-flow); display: flex; align-items: center; gap: 14px; }
.brandmark-sm { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-display); font-weight: 700; font-size: 14px; }
.brandmark-sm svg { width: 18px; height: 18px; color: var(--shield); }
/* assessment topbar brand → iDNUTRITION lockup (gradient iD glyph + wordmark) */
.brandmark-idn { gap: 7px; }
.brandmark-sm.brandmark-idn .id-logo { width: 22px; height: 22px; }
.brandmark-sm.brandmark-idn .id-logo-svg { width: 100%; height: 100%; }
.brand-idn-word { font-size: 15px; letter-spacing: .04em; color: var(--text); }
.progress-track { height: 6px; border-radius: 99px; background: rgba(255,255,255,0.07); overflow: hidden; flex: 1; }
.progress-fill { position: relative; height: 100%; width: 0%; background: var(--grad-brand-3); border-radius: 99px;
  overflow: hidden; transition: width 0.6s var(--ease-out); box-shadow: 0 0 16px rgba(20,224,203,0.6); }
.progress-fill::after { content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,0.55) 50%, transparent 70%);
  background-size: 240% 100%; background-position: 180% 0; mix-blend-mode: screen;
  animation: progressSheen 3.2s var(--ease-out) infinite; }
@keyframes progressSheen { 0% { background-position: 180% 0; } 60%, 100% { background-position: -90% 0; } }
.progress-count { font-family: var(--font-display); font-size: 12.5px; color: var(--muted); min-width: 38px;
  text-align: right; font-variant-numeric: tabular-nums;
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 28px; min-width: 54px; padding: 0 10px;
  border-radius: 999px; border: 1px solid color-mix(in srgb, var(--blue-2) 24%, transparent);
  background: color-mix(in srgb, var(--blue-2) 10%, transparent);
  color: var(--text); font-weight: 700; letter-spacing: .01em;
}
.flow-topbar::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--border) 24%, var(--border) 76%, transparent); }

/* Tablet+computer: keep Shield tight to the right lane by default (no extra
   dead gap). Only reserve a little extra room when a DNA status strip exists. */
@media (min-width: 641px) {
  #screen-question .flow-topbar-inner {
    max-width: none;
    padding-right: 0;
  }
  #screen-question #q-shield-pill {
    margin-left: 8px;
  }
  #screen-question .flow-topbar:has(.dna-strip.connected, .dna-strip.connecting, .dna-strip.pending) .flow-topbar-inner {
    padding-right: 24px;
  }
}

.flow-main { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  width: 100%; padding: clamp(20px, 4vw, 40px) clamp(18px, 4vw, 40px); }
.q-wrap { width: 100%; max-width: var(--w-flow); }
.q-anim { animation: qIn 0.5s var(--ease-out) both; }
.q-anim.out { animation: qOut 0.32s var(--ease-in) both; }
@keyframes qIn  { from { opacity: 0; transform: translateY(38px); } to { opacity: 1; transform: none; } }
@keyframes qOut { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateY(-34px); } }

.q-domain { margin-bottom: 14px; text-align: center; }
.q-headline { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.025em;
  font-size: clamp(25px, 4.8vw, 42px); line-height: 1.1; text-align: center; }
/* Each headline segment is its own block line so spacing stays even even when a
   line holds only the inline-block goal word (avoids the baseline-strut gap). */
.q-headline .hl-line { display: block; }
/* Dynamic-subject goals (the choices the user picked earlier) — same white
   headline ink as the rest of the sentence, so the whole line reads uniform.
   display:inline (NOT inline-block) so the element edge is NOT a break point —
   that keeps each trailing comma glued to its goal (no comma orphaned at the
   start of a wrapped line); white-space:nowrap keeps a 2-word goal intact. */
.q-headline .dyn-subject { display: inline; font-weight: 700; color: inherit; white-space: nowrap; }
.q-subtext { color: var(--muted); margin-top: 14px; font-size: clamp(14px, 2.2vw, 17px);
  max-width: 48ch; margin-inline: auto; text-align: center; }
.q-shield-note { display: flex; align-items: center; justify-content: center; gap: 9px;
  width: fit-content; margin: 18px auto 0; font-size: 12.5px; font-weight: 600; color: var(--shield);
  padding: 9px 16px; border-radius: var(--r-pill);
  border: 1px solid color-mix(in srgb, var(--shield) 32%, transparent);
  background: var(--shield-soft); box-shadow: 0 0 24px var(--shield-glow);
  -webkit-backdrop-filter: blur(10px) saturate(150%); backdrop-filter: blur(10px) saturate(150%); }
.q-shield-note svg { width: 15px; height: 15px; flex: none; }
/* When the note stands IN PLACE of the section eyebrow it owns the eyebrow's
   spacing — no extra top margin above the headline. */
.q-domain-shield { margin-bottom: 14px; }
.q-domain-shield .q-shield-note { margin-top: 0; }

/* ═══════════════════════════════════════════════════════════════════════════
   LIVE DNA STRIP — slim status pill under the question topbar. The portal
   resolve runs server-side in the background; this is the user WATCHING their
   genes link: connecting (pulse) → connected ✓ (label + check, brand glow).
   Theme-aware (tokens only) · phone → desktop. */
.dna-strip { display: flex; align-items: center; justify-content: center; gap: 9px;
  width: fit-content; margin: 10px auto 0; padding: 7px 16px;
  border-radius: var(--r-pill); border: 1px solid var(--border);
  background: var(--glass-bg); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  font-size: 13px; font-weight: 600; color: var(--text-2); letter-spacing: 0.01em;
  animation: dnaStripIn 0.5s var(--ease-out) both; }
@keyframes dnaStripIn { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
.dna-strip svg { width: 16px; height: 16px; flex: none; }
.dna-strip svg:first-child { color: var(--teal); }
.dna-strip.connecting svg:first-child { animation: dnaSpin 2.4s linear infinite; }
@keyframes dnaSpin { to { transform: rotate(360deg); } }
.dna-strip.connecting { border-color: var(--border); }
.dna-strip .dna-dots i { display: inline-block; font-style: normal; animation: dnaDot 1.4s infinite; }
.dna-strip .dna-dots i:nth-child(2) { animation-delay: 0.2s; }
.dna-strip .dna-dots i:nth-child(3) { animation-delay: 0.4s; }
@keyframes dnaDot { 0%, 60%, 100% { opacity: 0.25; } 30% { opacity: 1; } }
.dna-strip.connected { border-color: var(--border-hi); color: var(--text);
  background: linear-gradient(135deg, var(--teal-soft), var(--blue-soft)); box-shadow: 0 0 28px var(--teal-glow); }
.dna-strip.connected svg:last-child { color: var(--shield); width: 14px; height: 14px; }
.dna-strip.connected.landed { animation: dnaLanded 0.7s var(--ease-spring) both; }
@keyframes dnaLanded { 0% { transform: scale(0.92); } 55% { transform: scale(1.04); } 100% { transform: scale(1); } }
.dna-strip.pending { color: var(--muted); }

/* ═══════════════════════════════════════════════════════════════════════════
   WELCOME-BACK STRIP — sits ABOVE question 1 when a returner's answers are
   pre-filled. Context + two quiet actions (view last results · start fresh).
   The user lands straight on the question — no interstitial card. */
.welcome-strip { display: flex; align-items: center; gap: 14px; width: 100%;
  margin: 0 0 clamp(18px, 3vw, 26px); padding: 13px 16px;
  border-radius: var(--r-md); border: 1px solid var(--border);
  background: linear-gradient(135deg, var(--teal-soft), transparent 60%), var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur); }
.ws-badge { position: relative; display: flex; align-items: center; justify-content: center;
  min-width: 46px; height: 46px; padding: 0 8px; border-radius: 13px; flex: none;
  font-family: var(--font-display); font-weight: 800; font-size: 21px; line-height: 1;
  color: var(--ink-on-brand); background: var(--grad-brand);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.35), 0 6px 18px rgba(20,224,203,0.25); }
.ws-badge span { position: absolute; right: 4px; bottom: 3px; font-size: 9px; font-weight: 800; opacity: 0.85; }
.ws-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; text-align: left; }
.ws-copy strong { font-family: var(--font-display); font-size: 14.5px; letter-spacing: -0.01em; color: var(--text); }
.ws-copy span { font-size: 12.5px; line-height: 1.45; color: var(--muted); }
.ws-actions { display: flex; align-items: center; gap: 8px; flex: none; }
.ws-link { display: inline-flex; align-items: center; gap: 6px; padding: 8px 13px;
  border-radius: var(--r-pill); border: 1px solid var(--border); background: var(--fill-1);
  font-size: 12.5px; font-weight: 600; color: var(--text-2); cursor: pointer;
  transition: border-color 0.2s, background 0.2s, color 0.2s, transform 0.2s; }
.ws-link:hover { border-color: var(--border-hi); background: var(--fill-hover); color: var(--text); transform: translateY(-1px); }
.ws-link svg { width: 13px; height: 13px; }
/* Interrupted-run flavor (Feature 041): percent badge + a primary Continue
   that restores the saved answers and drops the user mid-flow. */
.ws-badge.pct { font-size: 17px; letter-spacing: -0.02em; }
.ws-badge.pct span { position: static; margin-left: 1px; font-size: 10px; align-self: flex-start; padding-top: 6px; }
.ws-continue { display: inline-flex; align-items: center; gap: 7px; padding: 9px 16px;
  border-radius: var(--r-pill); border: 1px solid transparent;
  background: var(--grad-brand); color: var(--ink-on-brand);
  font-family: var(--font-display); font-size: 13px; font-weight: 800; letter-spacing: 0.01em;
  cursor: pointer; box-shadow: 0 6px 18px rgba(20,224,203,0.28), inset 0 1px 0 rgba(255,255,255,0.35);
  transition: transform 0.2s, box-shadow 0.2s, filter 0.2s; }
.ws-continue:hover { transform: translateY(-1px); box-shadow: 0 9px 24px rgba(20,224,203,0.36), inset 0 1px 0 rgba(255,255,255,0.35); }
.ws-continue:disabled { cursor: default; filter: saturate(0.5) opacity(0.75); transform: none; }
.ws-continue svg { width: 14px; height: 14px; }
@media (max-width: 640px) {
  .welcome-strip { flex-wrap: wrap; padding: 12px 14px; gap: 10px; }
  .ws-copy { flex-basis: calc(100% - 60px); }
  .ws-actions { width: 100%; }
  .ws-link, .ws-continue { flex: 1; justify-content: center; min-height: 40px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   FLOATING "VIEWING PREVIOUS RESULTS" PILL — bottom-center, glass, returns the
   user to their resume. Sits clear of the bottom-right back-to-top button. */
.prior-view-bar { position: fixed; left: 50%; bottom: max(20px, env(safe-area-inset-bottom));
  transform: translateX(-50%); z-index: 60; display: flex; align-items: center; gap: 12px;
  padding: 9px 9px 9px 16px; border-radius: var(--r-pill); border: 1px solid var(--border-hi);
  background: var(--glass-bg); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  box-shadow: var(--shadow-float); animation: pvbIn 0.45s var(--ease-spring) backwards; max-width: calc(100vw - 28px);
  /* F075: eased show/hide (used when MyAI retires this bar on computer). `backwards`
     fill above (never forwards/both) so it can't clobber the hide transform. */
  transition: opacity .4s var(--ease-out), transform .4s var(--ease-out); }
@keyframes pvbIn { from { opacity: 0; transform: translate(-50%, 16px); } to { opacity: 1; transform: translateX(-50%); } }
.pvb-label { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600;
  color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pvb-label svg { width: 15px; height: 15px; flex: none; color: var(--teal); }
.pvb-back { display: inline-flex; align-items: center; gap: 7px; flex: none; padding: 9px 16px;
  border-radius: var(--r-pill); border: none; cursor: pointer; font-size: 13px; font-weight: 700;
  color: var(--ink-on-brand); background: var(--grad-brand);
  box-shadow: 0 6px 18px rgba(20,224,203,0.28); transition: transform 0.2s, box-shadow 0.2s; }
.pvb-back:hover { transform: translateY(-2px); box-shadow: 0 10px 26px rgba(20,224,203,0.36); }
.pvb-back:active { transform: translateY(0) scale(0.97); }
.pvb-back svg { width: 15px; height: 15px; }
@media (max-width: 560px) {
  .prior-view-bar { gap: 8px; padding: 8px 8px 8px 13px; }
  .pvb-label span { max-width: 38vw; }
  .pvb-back span { display: none; }            /* arrow-only on small phones */
  .pvb-back { padding: 11px 13px; }
}
/* F074 · don't collide with the app-native tab pill. The floating "viewing
   previous results" bar and the always-on (.mpaged) bottom tab pill are BOTH
   fixed bottom-center pills, so they overlap on the results page. Lift this bar
   so it STACKS ABOVE the tab bar — clearing the bar's full height in each mode
   (floating pill ≥641 · edge-to-edge bar ≤640). prior-view only renders on the
   results screen, which is always .mpaged, so this scope always applies there. */
@media (min-width: 1025px) {
  body.mpaged .prior-view-bar { bottom: calc(clamp(16px, 2.2vw, 26px) + 64px); }
}
@media (max-width: 1024px) {
  body.mpaged .prior-view-bar { bottom: calc(var(--mtabbar-h) + env(safe-area-inset-bottom) + 12px); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   PRIOR-RESULTS MODAL — "your health, remembered."
   Cinematic read-only snapshot: aurora backdrop · gradient-border glass card ·
   animated score ring + count-up · trend vs last check-in · history sparkline ·
   strongest/focus insights · banded 12-system grid with sweeping bars.
   Theme-aware (tokens), phone-first (bottom sheet ≤640px), reduced-motion-safe. */
.modal-backdrop { position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  padding: clamp(14px, 3vw, 32px);
  background:
    radial-gradient(56vw 56vw at 18% 8%, rgba(20, 224, 203, 0.10), transparent 62%),
    radial-gradient(50vw 50vw at 86% 88%, rgba(79, 142, 247, 0.12), transparent 60%),
    radial-gradient(40vw 40vw at 78% 12%, rgba(181, 108, 255, 0.07), transparent 58%),
    rgba(2, 6, 18, 0.80);
  animation: modalBgIn 0.18s ease both; }
[data-theme="light"] .modal-backdrop {
  background:
    radial-gradient(56vw 56vw at 18% 8%, rgba(27, 197, 212, 0.14), transparent 62%),
    radial-gradient(50vw 50vw at 86% 88%, rgba(22, 82, 240, 0.10), transparent 60%),
    rgba(225, 235, 250, 0.55); }
@keyframes modalBgIn { from { opacity: 0; } to { opacity: 1; } }

.modal-card { position: relative; isolation: isolate;
  background: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  border-radius: 28px; border: 1px solid transparent;
  box-shadow: var(--shadow-lg), 0 0 90px rgba(20, 224, 203, 0.07);
  max-width: none; width: calc(100vw - clamp(28px, 5vw, 76px)); max-height: calc(100dvh - clamp(28px, 5vw, 76px));
  display: flex; flex-direction: column; overflow: hidden;
  animation: modalCardIn 0.55s var(--ease-out) both; }
/* gradient border ring (mask trick) + top sheen hairline */
.modal-card::before { content: ''; position: absolute; inset: 0; border-radius: inherit; padding: 1px;
  background: linear-gradient(160deg, rgba(20,224,203,0.55), rgba(79,142,247,0.25) 40%, rgba(181,108,255,0.30) 75%, rgba(20,224,203,0.18));
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; z-index: -1; }
.modal-card::after { content: ''; position: absolute; top: 0; left: 8%; right: 8%; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.35), transparent); pointer-events: none; }
[data-theme="light"] .modal-card { box-shadow: var(--shadow-lg); }
[data-theme="light"] .modal-card::after { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.9), transparent); }
@keyframes modalCardIn {
  from { opacity: 0; transform: translate3d(0, 18px, 0) scale(0.98); }
  to   { opacity: 1; transform: translate3d(0, 0, 0) scale(1); } }

/* staggered section rises */
.pr-rise { animation: prRise 0.55s var(--ease-out) both; animation-delay: var(--d, 0s); }
@keyframes prRise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }

/* ── Header ── */
.modal-header { display: flex; align-items: center; gap: 12px;
  padding: 18px 22px 16px; border-bottom: 1px solid var(--hairline); flex: none; }
.pr-head-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pr-eyebrow { font-size: 10.5px; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase;
  background: var(--grad-brand); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
.modal-header h3 { margin: 0; font-family: var(--font-display); font-size: 19px; font-weight: 700; letter-spacing: -0.01em; }
.pr-count { flex: none; font-family: var(--font-display); font-size: 11.5px; font-weight: 600; color: var(--text-2);
  padding: 5px 11px; border-radius: var(--r-pill); background: var(--fill-2); border: 1px solid var(--border-soft); white-space: nowrap; }
.modal-close { flex: none; display: flex; align-items: center; justify-content: center; width: 34px; height: 34px;
  border-radius: 11px; border: 1px solid var(--border); background: var(--fill-1); color: var(--muted);
  cursor: pointer; transition: color 0.2s, border-color 0.2s, background 0.2s, transform 0.3s var(--ease-spring); }
.modal-close:hover { color: var(--text); border-color: var(--border-hi); background: var(--fill-hover); transform: rotate(90deg); }
.modal-close svg { width: 15px; height: 15px; }

.modal-body { flex: 1; overflow-y: auto; padding: 18px 22px; }

.pr-history-card { background:
    radial-gradient(820px 360px at 44% -12%, color-mix(in srgb, var(--teal) 18%, transparent), transparent 67%),
    radial-gradient(620px 420px at 96% 6%, color-mix(in srgb, var(--blue-2) 16%, transparent), transparent 62%),
  linear-gradient(145deg, var(--surface), var(--surface-hi));
  -webkit-backdrop-filter: none; backdrop-filter: none;
  contain: layout paint;
  box-shadow: var(--shadow-lg), 0 26px 90px rgba(4, 20, 55, 0.22), 0 0 110px rgba(20, 224, 203, 0.13); }
.pr-history-card::after { left: 5%; right: 5%; height: 2px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--teal) 72%, white 28%), color-mix(in srgb, var(--blue-2) 64%, white 36%), transparent); opacity: .76; }
.pr-history-card .modal-header { padding: 18px 24px 17px; background:
    linear-gradient(90deg, color-mix(in srgb, var(--teal) 8%, transparent), transparent 34%, color-mix(in srgb, var(--blue-2) 8%, transparent)); }
.pr-history-card .modal-header h3 { font-size: clamp(20px, 1.6vw, 27px); letter-spacing: -0.03em; }
.pr-history-card .pr-eyebrow { letter-spacing: .2em; }
.pr-history-card .pr-count { background: color-mix(in srgb, var(--teal) 11%, var(--fill-2)); border-color: color-mix(in srgb, var(--teal) 28%, transparent); }
.pr-history-body { position: relative; }
.pr-history-body::before { content: ''; position: absolute; inset: 16px 18px; pointer-events: none; border-radius: 24px;
  background:
    linear-gradient(90deg, transparent 0 49.6%, color-mix(in srgb, var(--teal) 12%, transparent) 49.8% 50.2%, transparent 50.4%),
    linear-gradient(0deg, transparent 0 49.6%, color-mix(in srgb, var(--blue-2) 10%, transparent) 49.8% 50.2%, transparent 50.4%);
  opacity: .42; mask-image: radial-gradient(circle at 50% 48%, #000, transparent 72%); }
.pr-history-body > * { position: relative; z-index: 1; }
.pr-history-card .pr-hero, .pr-history-card .pr-journey, .pr-history-card .pr-ins, .pr-history-card .pr-sys {
  background: color-mix(in srgb, var(--fill-1) 86%, transparent); border-color: color-mix(in srgb, var(--border-soft) 78%, var(--teal) 22%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.16), 0 18px 46px rgba(4, 20, 55, 0.08); }
.pr-history-card .pr-journey { position: relative; overflow: hidden; border-radius: 22px;
  background:
    radial-gradient(540px 260px at 50% 102%, color-mix(in srgb, var(--teal) 20%, transparent), transparent 70%),
    linear-gradient(145deg, color-mix(in srgb, var(--fill-1) 90%, transparent), color-mix(in srgb, var(--blue-soft) 48%, transparent)); }
.pr-history-card .pr-journey::before { content: ''; position: absolute; inset: 44px 14px 58px; pointer-events: none; border-radius: 18px;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--teal) 11%, transparent) 1px, transparent 1px),
    linear-gradient(0deg, color-mix(in srgb, var(--blue-2) 10%, transparent) 1px, transparent 1px);
  background-size: 25% 100%, 100% 33.333%; opacity: .72;
  mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
.pr-history-card .pr-journey::after { content: ''; position: absolute; inset: auto 8% 44px; height: 48%; pointer-events: none;
  background: radial-gradient(ellipse at 50% 100%, color-mix(in srgb, var(--teal) 24%, transparent), transparent 70%); }
.pr-history-card .pr-journey-head, .pr-history-card .pr-spark-wrap, .pr-history-card .pr-journey-stats { position: relative; z-index: 1; }
.pr-history-card .pr-journey-head { margin-bottom: 12px; color: var(--text-2); }
.pr-history-card .pr-journey-head b { color: var(--teal); background: color-mix(in srgb, var(--teal) 10%, transparent); border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent); padding: 4px 9px; border-radius: var(--r-pill); }
.pr-history-card .pr-spark-wrap { border: 1px solid color-mix(in srgb, var(--teal) 18%, transparent); border-radius: 18px;
  background:
    radial-gradient(280px 180px at 78% 22%, color-mix(in srgb, var(--blue-2) 12%, transparent), transparent 66%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-hi) 40%, transparent), color-mix(in srgb, var(--teal) 7%, transparent));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.18), inset 0 -1px 0 rgba(20,224,203,.10); overflow: hidden; }
.pr-history-card .pr-spark-line { filter: none; }
.pr-history-card .pr-spark-area { filter: none; }
.pr-history-card .pr-rise,
.pr-history-card .pr-sys { animation: none; }
.pr-history-card .pr-spark { clip-path: none; transition: none; }
.pr-history-card .pr-spark-dot,
.pr-history-card .pr-spark-val,
.pr-history-card .pr-ms-track i,
.pr-history-card .pr-sys-bar i { transition-duration: .16s; transition-delay: 0s; }
.pr-history-card .pr-spark-val { text-shadow: 0 1px 6px color-mix(in srgb, var(--surface) 80%, transparent); }
.pr-history-card .pr-spark-dot::after { box-shadow: 0 0 0 4px color-mix(in srgb, var(--teal) 13%, transparent), 0 0 16px var(--teal-glow); }
.pr-history-card .pr-spark-dot.now::after { inset: 3px; border-width: 3px; box-shadow: 0 0 0 7px color-mix(in srgb, var(--teal) 14%, transparent), 0 0 24px var(--teal-glow); }
.pr-journey-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 10px; }
.pr-journey-stats span { min-width: 0; padding: 9px 10px; border-radius: 14px; border: 1px solid color-mix(in srgb, var(--border-soft) 70%, var(--teal) 30%);
  background: color-mix(in srgb, var(--surface-hi) 48%, transparent); box-shadow: inset 0 1px 0 rgba(255,255,255,.16); }
.pr-journey-stats small { display: block; font-size: 9.5px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.pr-journey-stats b { display: block; margin-top: 1px; font-family: var(--font-display); font-size: 20px; line-height: 1; color: var(--text); }
.pr-history-card .pr-sys { border-radius: 14px; }
.pr-history-card .modal-footer { background: linear-gradient(90deg, color-mix(in srgb, var(--surface-hi) 72%, transparent), color-mix(in srgb, var(--teal) 8%, transparent)); }
.pr-history-card #modal-view-full { box-shadow: 0 14px 32px color-mix(in srgb, var(--blue-2) 24%, transparent), inset 0 1px 0 rgba(255,255,255,.28); }

/* ── Hero: score ring + meta ── */
.pr-hero { display: flex; align-items: center; gap: 22px; padding: 20px;
  background: linear-gradient(135deg, var(--teal-soft), var(--blue-soft));
  border: 1px solid var(--border); border-radius: var(--r-md); margin-bottom: 14px;
  position: relative; overflow: hidden; }
.pr-hero::before { content: ''; position: absolute; width: 220px; height: 220px; left: -60px; top: -80px;
  background: radial-gradient(circle, var(--teal-glow), transparent 65%); opacity: 0.35; filter: blur(10px); pointer-events: none; }

.pr-ring-wrap { position: relative; width: 128px; height: 128px; flex: none; }
.pr-ring { width: 100%; height: 100%; display: block; filter: drop-shadow(0 0 14px rgba(20, 224, 203, 0.35)); }
.pr-ring-track { fill: none; stroke: var(--track); stroke-width: 8; }
.pr-ring-fill { fill: none; stroke-width: 8; stroke-linecap: round;
  transition: stroke-dashoffset 1.25s var(--ease-out) 0.15s; }
.pr-ring-center { position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 0; }
.pr-num { font-family: var(--font-display); font-size: 40px; font-weight: 800; line-height: 1;
  background: var(--grad-brand); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  font-variant-numeric: tabular-nums; }
.pr-outof { font-size: 10px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); margin-top: 3px; }

.pr-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; position: relative; }
.pr-label-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.pr-label { font-family: var(--font-display); font-size: 21px; font-weight: 700; letter-spacing: -0.01em; }
.pr-grade { font-family: var(--font-display); font-size: 11.5px; font-weight: 700; color: var(--teal);
  padding: 4px 11px; border-radius: var(--r-pill); background: var(--teal-soft); border: 1px solid rgba(20, 224, 203, 0.25); }
.pr-date { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--muted); }
.pr-date svg { width: 13px; height: 13px; flex: none; }

.pr-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.pr-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600;
  padding: 5px 11px; border-radius: var(--r-pill); border: 1px solid var(--border-soft); }
.pr-chip svg { width: 13px; height: 13px; flex: none; }
.pr-chip.pos { color: var(--success); background: var(--shield-soft); border-color: rgba(58, 235, 181, 0.25); }
.pr-chip.neg { color: var(--warning); background: rgba(255, 181, 71, 0.10); border-color: rgba(255, 181, 71, 0.25); }
.pr-chip.neg svg { transform: scaleY(-1); }
.pr-chip.neu { color: var(--text-2); background: var(--fill-2); }

.pr-ms { display: flex; flex-direction: column; gap: 5px; }
.pr-ms-track { height: 6px; border-radius: var(--r-pill); background: var(--track); overflow: hidden; }
.pr-ms-track i { display: block; height: 100%; width: 0; border-radius: inherit;
  background: var(--grad-brand); box-shadow: 0 0 12px var(--teal-glow);
  transition: width 1s var(--ease-out) 0.45s; }
.pr-go .pr-ms-track i { width: var(--mw, 0%); }
.pr-ms-cap { font-size: 11.5px; color: var(--muted); }
.pr-ms-cap b { color: var(--text-2); font-weight: 700; }

/* ── Journey trend chart (interactive: numbers + hover-for-date) ── */
.pr-journey { padding: 14px 16px 16px; background: var(--fill-1); border: 1px solid var(--border-soft);
  border-radius: var(--r-md); margin-bottom: 14px; }
.pr-journey-head { display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--muted); margin-bottom: 10px; }
.pr-journey-head svg { width: 14px; height: 14px; color: var(--teal); }
.pr-journey-head b { margin-left: auto; font-family: var(--font-display); font-size: 11.5px; font-weight: 600; color: var(--text-2); }
.pr-spark-wrap { position: relative; width: 100%; height: clamp(120px, 25vw, 144px);
  touch-action: pan-y; cursor: crosshair; }
.pr-spark { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible;
  clip-path: inset(0 100% 0 0); transition: clip-path 1.15s var(--ease-out) 0.3s; }
.pr-go .pr-spark { clip-path: inset(0 0 0 0); }   /* clean left→right reveal — no dash gaps */
.pr-spark-grid { stroke: var(--grid-line); stroke-width: 1; stroke-dasharray: 2 5; fill: none; }
.pr-spark-line { fill: none; }   /* one solid, continuous gradient stroke (no dash draw-in) */
.pr-spark-area { opacity: 1; }

/* persistent score numbers above each check-in */
.pr-spark-val { position: absolute; transform: translate(-50%, calc(-50% - 15px)); z-index: 2;
  font-family: var(--font-display); font-weight: 700; font-size: 11.5px; color: var(--text-2);
  pointer-events: none; opacity: 0; white-space: nowrap;
  transition: opacity .35s ease, color .2s; transition-delay: calc(0.7s + var(--di) * 0.1s); }
.pr-go .pr-spark-val { opacity: .82; }
.pr-spark-val.now { color: var(--teal); font-size: 12.5px; }
.pr-go .pr-spark-val.now { opacity: 1; }
.pr-go .pr-spark-val.dim { opacity: 0; transition-delay: 0s; }

/* crosshair that follows the hover */
.pr-spark-cross { position: absolute; top: 4px; bottom: 22px; width: 1px; background: var(--border-hi);
  opacity: 0; transform: translateX(-50%); pointer-events: none; transition: opacity .15s; }
.pr-spark-cross.on { opacity: .55; }

/* interactive dots (real buttons → keyboard-focusable) */
.pr-spark-dot { position: absolute; width: 24px; height: 24px; margin: -12px 0 0 -12px; padding: 0;
  border-radius: 50%; border: none; background: transparent; cursor: pointer; z-index: 3;
  opacity: 0; transition: opacity .4s ease; transition-delay: calc(0.55s + var(--di) * 0.1s); }
.pr-go .pr-spark-dot { opacity: 1; }
.pr-spark-dot::after { content: ''; position: absolute; inset: 7px; border-radius: 50%;
  background: var(--surface-hi); border: 2px solid var(--teal); box-shadow: 0 0 10px var(--teal-glow);
  transition: transform .18s var(--ease-spring), box-shadow .18s; }
.pr-spark-dot:hover::after, .pr-spark-dot.active::after { transform: scale(1.32); box-shadow: 0 0 18px var(--teal-glow); }
.pr-spark-dot:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; border-radius: 50%; }
.pr-spark-dot.now::after { inset: 6px; background: var(--grad-brand); border-color: rgba(255,255,255,.85);
  box-shadow: 0 0 16px var(--teal-glow); }

/* hover tooltip — score (big) + date + delta */
.pr-spark-tip { position: absolute; transform: translate(-50%, calc(-100% - 16px)); z-index: 5;
  display: flex; align-items: baseline; gap: 7px; padding: 7px 11px; border-radius: 11px;
  background: var(--surface-hi); border: 1px solid var(--border-hi); box-shadow: var(--shadow-md);
  opacity: 0; pointer-events: none; white-space: nowrap;
  transition: opacity .15s, left .18s var(--ease-out), top .18s var(--ease-out); }
.pr-spark-tip.on { opacity: 1; }
.pr-spark-tip b { font-family: var(--font-display); font-weight: 800; font-size: 16px;
  background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.pr-spark-tip span { font-size: 11px; color: var(--muted); }
.pr-spark-tip em { font-style: normal; font-size: 11px; font-weight: 700; }
.pr-spark-tip em.up { color: var(--shield); }
.pr-spark-tip em.down { color: var(--danger); }

/* start / today axis */
.pr-spark-x { position: absolute; bottom: 0; font-size: 10px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted-2); pointer-events: none; }
.pr-spark-x-l { left: 0; }
.pr-spark-x-r { right: 0; }

/* ── Insight chips ── */
.pr-insights { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; }
.pr-ins { display: flex; align-items: center; gap: 11px; padding: 12px 14px;
  border-radius: var(--r-md); border: 1px solid var(--border-soft); background: var(--fill-1);
  transition: border-color 0.2s, background 0.2s, transform 0.25s var(--ease-out); }
.pr-ins:hover { transform: translateY(-1px); background: var(--fill-2); }
.pr-ins-ico { display: flex; align-items: center; justify-content: center; width: 34px; height: 34px;
  border-radius: 10px; flex: none; }
.pr-ins-ico svg { width: 17px; height: 17px; }
.ins-strong .pr-ins-ico { color: var(--shield); background: var(--shield-soft); }
.ins-strong:hover { border-color: rgba(58, 235, 181, 0.35); }
.ins-focus .pr-ins-ico { color: var(--warning); background: rgba(255, 181, 71, 0.10); }
.ins-focus:hover { border-color: rgba(255, 181, 71, 0.35); }
.pr-ins-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pr-ins-txt small { font-size: 10.5px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.pr-ins-txt strong { font-family: var(--font-display); font-size: 13.5px; font-weight: 700; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ── 12-system banded grid ── */
.pr-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.pr-sys { --band: var(--blue); --band-soft: var(--blue-soft);
  padding: 12px 13px 13px; background: var(--fill-1); border: 1px solid var(--border-soft);
  border-radius: var(--r-sm); position: relative; overflow: hidden;
  animation: prCardIn 0.5s var(--ease-out) backwards; animation-delay: calc(0.24s + var(--i) * 0.04s);
  transition: border-color 0.2s, background 0.2s, transform 0.25s var(--ease-out), box-shadow 0.25s; }
.pr-sys:hover { background: var(--fill-2); transform: translateY(-2px); border-color: var(--border); box-shadow: var(--shadow-sm); }
.pr-sys.b-strong   { --band: var(--shield); --band-soft: var(--shield-soft); }
.pr-sys.b-building { --band: var(--blue);   --band-soft: var(--blue-soft); }
.pr-sys.b-focus    { --band: var(--warning); --band-soft: rgba(255, 181, 71, 0.10); }
@keyframes prCardIn { from { opacity: 0; transform: translateY(12px) scale(0.97); } to { opacity: 1; transform: none; } }

.pr-sys-top { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-bottom: 7px; }
.pr-sys-name { font-size: 10.5px; font-weight: 600; letter-spacing: 0.05em; text-transform: uppercase;
  color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pr-d { flex: none; font-family: var(--font-display); font-size: 10px; font-weight: 700;
  padding: 2px 7px; border-radius: var(--r-pill); }
.pr-d.pos { color: var(--success); background: var(--shield-soft); }
.pr-d.neg { color: var(--warning); background: rgba(255, 181, 71, 0.12); }
.pr-d.neu { color: var(--muted); background: var(--fill-2); }
.pr-sys-score { font-family: var(--font-display); font-size: 25px; font-weight: 700; line-height: 1;
  color: var(--text); margin-bottom: 9px; font-variant-numeric: tabular-nums; }
.pr-sys-bar { height: 4px; border-radius: var(--r-pill); background: var(--track); overflow: hidden; }
.pr-sys-bar i { display: block; height: 100%; width: 0; border-radius: inherit;
  background: linear-gradient(90deg, var(--band), color-mix(in srgb, var(--band) 55%, transparent));
  box-shadow: 0 0 8px var(--band-soft);
  transition: width 0.9s var(--ease-out); transition-delay: calc(0.35s + var(--i) * 0.045s); }
.pr-go .pr-sys-bar i { width: var(--w, 0%); }

.pr-legend { display: flex; align-items: center; justify-content: center; gap: 16px; flex-wrap: wrap;
  margin-top: 13px; font-size: 11px; color: var(--muted); }
.pr-legend span { display: inline-flex; align-items: center; gap: 6px; }
.pr-legend .dot { width: 7px; height: 7px; border-radius: 50%; }
.pr-legend .d-strong   { background: var(--shield); }
.pr-legend .d-building { background: var(--blue); }
.pr-legend .d-focus    { background: var(--warning); }

/* ── Footer ── */
.modal-footer { display: flex; flex-direction: column; gap: 10px;
  padding: 14px 22px 18px; border-top: 1px solid var(--hairline); flex: none; }
.pr-foot-note { display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-size: 11.5px; color: var(--muted); }
.pr-foot-note svg { width: 12px; height: 12px; flex: none; }
.modal-footer .btn { width: 100%; min-height: 50px; }

@media (min-width: 900px) {
  .modal-card { min-height: min(760px, calc(100dvh - clamp(28px, 5vw, 76px))); }
  .pr-history-card { width: calc(100vw - clamp(36px, 4vw, 58px)); max-height: calc(100dvh - clamp(36px, 4vw, 58px)); }
  .modal-body { display: grid; grid-template-columns: minmax(260px, .72fr) minmax(0, 1.6fr) minmax(320px, 1.05fr);
    grid-template-areas:
      "hero journey grid"
      "insights journey grid"
      "insights journey legend";
    grid-template-rows: auto 1fr auto;
    gap: 14px; overflow: hidden; }
  .pr-hero { grid-area: hero; margin: 0; padding: 16px; gap: 16px; align-self: start; }
  .pr-ring-wrap { width: 112px; height: 112px; }
  .pr-num { font-size: 35px; }
  .pr-label { font-size: 18px; }
  .pr-journey { grid-area: journey; margin: 0; padding: 14px 16px; align-self: stretch; display: flex; flex-direction: column; min-height: 0; }
  .pr-spark-wrap { flex: 1; min-height: 286px; height: auto; }
  .pr-insights { grid-area: insights; margin: 0; grid-template-columns: 1fr; align-self: start; }
  .pr-grid { grid-area: grid; align-self: stretch; grid-template-columns: repeat(2, 1fr); gap: 9px; align-content: start; }
  .pr-legend { grid-area: legend; align-self: end; justify-self: stretch; justify-content: center; margin: 0; padding-top: 2px; }
  .modal-footer { flex-direction: row; align-items: center; padding: 12px 22px 14px; }
  .modal-footer .btn { width: min(260px, 36%); margin-left: auto; }
  .pr-foot-note { justify-content: flex-start; }
}

@media (max-width: 899px) {
  .modal-backdrop { padding: 0; }
  .modal-card { width: 100vw; height: 100dvh; max-height: none; border-radius: 0; }
}

/* ── Mobile: bottom sheet ── */
@media (max-width: 640px) {
  .modal-backdrop { padding: 0; align-items: flex-end; }
  .modal-card { max-width: none; max-height: none; height: 100dvh; border-radius: 0;
    animation: modalSheetIn 0.24s var(--ease-out) both; }
  @keyframes modalSheetIn { from { opacity: 0; transform: translate3d(0, 28px, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }
  .modal-header { padding: 16px 18px 13px; }
  .modal-body { padding: 16px; }
  .pr-hero { flex-direction: column; gap: 14px; padding: 18px 16px; text-align: center; }
  .pr-ring-wrap { width: 116px; height: 116px; }
  .pr-meta { align-items: center; width: 100%; }
  .pr-chips { justify-content: center; }
  .pr-ms { width: 100%; }
  .pr-insights { grid-template-columns: 1fr; }
  .pr-grid { grid-template-columns: repeat(2, 1fr); }
  .pr-count { display: none; }
  .modal-footer { padding: 12px 16px 16px; }
}

/* ── Reduced motion: instant, calm ── */
@media (prefers-reduced-motion: reduce) {
  .modal-backdrop, .modal-card, .pr-rise, .pr-sys { animation: none !important; }
  .pr-ring-fill, .pr-ms-track i, .pr-sys-bar i, .pr-spark, .pr-spark-dot, .pr-spark-val { transition: none !important; }
  .pr-spark { clip-path: none !important; }
  .pr-go .pr-spark-dot { opacity: 1; }
  .pr-go .pr-spark-val { opacity: .82; }
  .pr-go .pr-spark-val.now { opacity: 1; }
}

/* ═════════════════════════════════════════════════════════════════════════════ */

.options { display: grid; gap: 13px; margin-top: clamp(24px, 4vw, 36px); }
.options.cols-1 { grid-template-columns: 1fr; }
/* 2-col grids fill DOWN the left column first (column flow) so sequential
   answers read top-to-bottom; --opt-rows is set inline by optionClass's
   renderer. An odd count centers its last option on a full-width row. */
.options.cols-2 { grid-template-columns: 1fr 1fr; grid-auto-flow: column;
  grid-template-rows: repeat(var(--opt-rows, 3), auto); }
.options.cols-2.odd-center > .option:last-child { grid-row: -1; grid-column: 1 / -1;
  justify-self: center; width: calc(50% - 6.5px); }
.options.cols-2.dense.odd-center > .option:last-child { width: calc(50% - 4.5px); }
.options.scale { grid-template-columns: repeat(5, 1fr); gap: 9px; }
/* staggered cascade — each card rises in sequence. `backwards` fill (NOT
   forwards) so the finished animation never overrides the hover transform
   (the F006/F007/F013 fill-forwards trap, designed around). */
.options .option { animation: optIn .45s var(--ease-out) backwards; animation-delay: calc(var(--i, 0) * 35ms); }
@keyframes optIn { from { opacity: 0; transform: translateY(14px) scale(.985); } to { opacity: 1; transform: none; } }

.option { position: relative; display: flex; align-items: center; gap: 15px; text-align: left; width: 100%;
  background: rgba(255,255,255,0.028); border: 1.5px solid var(--border); border-radius: var(--r-md);
  padding: 19px 20px; min-height: 64px; cursor: pointer; overflow: hidden;
  transition: border-color 0.22s, background 0.22s, box-shadow 0.25s var(--ease-out), transform 0.14s var(--ease-spring);
  -webkit-tap-highlight-color: transparent; }
.option::before { content:''; position:absolute; inset:0; opacity:0; background: var(--teal-soft); transition: opacity 0.22s; }
.option:hover { border-color: rgba(20,224,203,0.4); transform: translateY(-2px); }
.option:hover::before { opacity: 0.5; }
.option:active { transform: scale(0.985); }
.option.selected { border-color: var(--border-hi); box-shadow: 0 0 30px rgba(20,224,203,0.14), inset 0 0 0 1px rgba(20,224,203,0.3); }
.option.selected::before { opacity: 1; }
.option > * { position: relative; }
.option .opt-ico { width: 42px; height: 42px; flex: none; border-radius: 12px; display: grid; place-items: center;
  background: linear-gradient(135deg, rgba(20,224,203,0.16), rgba(79,142,247,0.10)); color: var(--teal);
  transition: background 0.22s, color 0.22s, transform 0.22s var(--ease-spring), box-shadow 0.22s; }
.option.selected .opt-ico { background: var(--grad-brand); color: var(--ink-on-brand);
  transform: scale(1.06); box-shadow: 0 8px 22px -8px var(--teal-glow); }
.option .opt-ico svg { width: 21px; height: 21px; }
.option .opt-text { display: flex; flex-direction: column; gap: 2px; }
.option .opt-label { font-weight: 600; font-size: 16px; }
.option .opt-sub { font-size: 12.5px; color: var(--muted); }
.option .opt-check { margin-left: auto; width: 24px; height: 24px; border-radius: 50%; flex: none;
  border: 2px solid var(--border); display: grid; place-items: center; transition: 0.2s; }
.option.selected .opt-check { background: var(--grad-brand); border-color: transparent; box-shadow: 0 0 16px rgba(20,224,203,0.5); }
.option .opt-check svg { width: 13px; height: 13px; color: var(--ink-on-brand); opacity: 0; transform: scale(0.5); transition: 0.18s var(--ease-spring); }
.option.selected .opt-check svg { opacity: 1; transform: scale(1); }

.options.scale .option { flex-direction: column; gap: 10px; text-align: center; padding: 18px 6px 14px; min-height: 96px; justify-content: center; }
.options.scale .opt-ico, .options.scale .opt-check { display: none; }
.options.scale .opt-label { font-size: 13px; font-weight: 600; color: var(--text-2);
  letter-spacing: .1px; transition: color 0.2s; }
/* the INTENSITY RAMP — a rising "signal" meter. Each step carries its own brand
   hue (teal → violet) and lights one more bar than the step before it. */
.options.scale .opt-meter { display: flex; align-items: flex-end; justify-content: center;
  gap: 5px; height: 30px; }
.options.scale .opt-bar { width: 6px; border-radius: 3px;
  background: color-mix(in srgb, var(--muted) 28%, transparent);
  transition: background 0.25s, box-shadow 0.25s, transform 0.25s var(--ease-spring); }
.options.scale .opt-bar:nth-child(1) { height: 34%; }
.options.scale .opt-bar:nth-child(2) { height: 50%; }
.options.scale .opt-bar:nth-child(3) { height: 66%; }
.options.scale .opt-bar:nth-child(4) { height: 83%; }
.options.scale .opt-bar:nth-child(5) { height: 100%; }
.options.scale .opt-bar.lit { background: color-mix(in srgb, var(--ramp) 68%, transparent); }
.option[data-ramp="1"] { --ramp: var(--teal); }
.option[data-ramp="2"] { --ramp: #35c4ea; }
.option[data-ramp="3"] { --ramp: var(--blue); }
.option[data-ramp="4"] { --ramp: #8a7bff; }
.option[data-ramp="5"] { --ramp: var(--violet); }
[data-theme="light"] .option[data-ramp="2"] { --ramp: #0e96c8; }
[data-theme="light"] .option[data-ramp="4"] { --ramp: #6a5be0; }
.options.scale .option:hover { border-color: color-mix(in srgb, var(--ramp, var(--teal)) 45%, transparent); }
.options.scale .option:hover .opt-bar.lit { background: var(--ramp); }
.options.scale .option:hover .opt-label { color: var(--text); }
.options.scale .option.selected { border-color: var(--ramp);
  background: color-mix(in srgb, var(--ramp) 9%, transparent);
  box-shadow: 0 0 28px color-mix(in srgb, var(--ramp) 26%, transparent),
              inset 0 0 0 1px color-mix(in srgb, var(--ramp) 35%, transparent); }
.options.scale .option.selected::before { opacity: 0; }
.options.scale .option.selected .opt-bar { background: color-mix(in srgb, var(--muted) 34%, transparent); }
.options.scale .option.selected .opt-bar.lit { background: var(--ramp);
  box-shadow: 0 0 12px color-mix(in srgb, var(--ramp) 60%, transparent); transform: translateY(-1px); }
.options.scale .option.selected .opt-label { color: var(--text); }

/* Dense mode — kicks in when a question has >6 choices (e.g. the diet plan's 12).
   Roughly halves each row's height (tighter padding, smaller icon, smaller gap)
   so the full 2-column set + the Back button all fit within the fold. */
.options.dense { gap: 9px; margin-top: clamp(16px, 2.6vw, 22px); }
.options.dense .option { padding: 10px 16px; min-height: 0; gap: 12px; }
.options.dense .opt-ico { width: 32px; height: 32px; border-radius: 9px; }
.options.dense .opt-ico svg { width: 17px; height: 17px; }
.options.dense .opt-label { font-size: 14.5px; }
.options.dense .opt-check { width: 21px; height: 21px; }

.q-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; max-width: var(--w-flow); margin: clamp(22px, 4vw, 34px) auto 0; }
.btn-back { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 14px;
  display: inline-flex; align-items: center; gap: 6px; padding: 12px; border-radius: var(--r-sm); transition: 0.2s; }
.btn-back:hover { color: var(--text); background: rgba(255,255,255,0.04); }
.btn-back svg { width: 16px; height: 16px; }

/* ═══ Budget slider (§P4.E) — one continuous $ amount, log-scaled $50→$1B ═══ */
.budget-slider { display: flex; flex-direction: column; align-items: center; text-align: center;
  margin-top: clamp(24px, 4vw, 40px); animation: optIn .5s var(--ease-out) backwards; }
.bs-readout { display: inline-flex; align-items: baseline; gap: 8px; max-width: 100%; }
.bs-amount { font-family: var(--font-display); font-weight: 700; line-height: 1;
  font-size: clamp(38px, 7.5vw, 56px); letter-spacing: -1px; font-variant-numeric: tabular-nums;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: var(--teal);
  filter: drop-shadow(0 6px 30px rgba(20,224,203,0.25));
  transition: font-size .2s var(--ease-out); }
.bs-amount.xl { font-size: clamp(30px, 6vw, 44px); }
.bs-suffix { font-family: var(--font-display); font-weight: 600; color: var(--muted);
  font-size: clamp(14px, 2.2vw, 18px); }
.bs-tierlabel { margin-top: 10px; font-size: 14px; color: var(--text-2); font-weight: 500;
  min-height: 1.2em; transition: color .2s; }

.bs-track { width: 100%; max-width: 560px; margin: clamp(26px, 4vw, 38px) auto 0; }
.bs-range { --fill: 12%; -webkit-appearance: none; appearance: none; width: 100%; height: 10px;
  background: transparent; border-radius: var(--r-pill); cursor: pointer; outline: none; }
.bs-range::-webkit-slider-runnable-track { height: 10px; border-radius: var(--r-pill);
  background: linear-gradient(90deg, var(--teal), var(--blue) 60%, var(--violet)) no-repeat,
              rgba(255,255,255,0.07);
  background-size: var(--fill) 100%, 100% 100%;
  box-shadow: inset 0 0 0 1px var(--border); }
.bs-range::-moz-range-track { height: 10px; border-radius: var(--r-pill);
  background: rgba(255,255,255,0.07); box-shadow: inset 0 0 0 1px var(--border); }
.bs-range::-moz-range-progress { height: 10px; border-radius: var(--r-pill);
  background: linear-gradient(90deg, var(--teal), var(--blue) 60%, var(--violet)); }
.bs-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none;
  width: 28px; height: 28px; margin-top: -9px; border-radius: 50%;
  background: #fff; border: 2px solid var(--teal); cursor: grab;
  box-shadow: 0 4px 16px rgba(0,0,0,0.4), 0 0 0 6px rgba(20,224,203,0.14), 0 0 22px var(--teal-glow);
  transition: transform .14s var(--ease-spring), box-shadow .2s; }
.bs-range::-moz-range-thumb { width: 28px; height: 28px; border-radius: 50%;
  background: #fff; border: 2px solid var(--teal); cursor: grab;
  box-shadow: 0 4px 16px rgba(0,0,0,0.4), 0 0 0 6px rgba(20,224,203,0.14), 0 0 22px var(--teal-glow); }
.bs-range:active::-webkit-slider-thumb { transform: scale(1.12); cursor: grabbing;
  box-shadow: 0 6px 20px rgba(0,0,0,0.45), 0 0 0 9px rgba(20,224,203,0.18), 0 0 30px var(--teal-glow); }
.bs-range:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 4px var(--bg-1), 0 0 0 7px var(--teal); }

.bs-ends { width: 100%; max-width: 560px; margin: 12px auto 0; display: flex;
  justify-content: space-between; font-size: 12px; color: var(--muted-2);
  font-variant-numeric: tabular-nums; }

.bs-presets { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px;
  margin-top: clamp(22px, 4vw, 32px); }
.bs-preset { background: rgba(255,255,255,0.04); border: 1.5px solid var(--border);
  color: var(--text-2); font-weight: 600; font-size: 14px; padding: 11px 20px;
  border-radius: var(--r-pill); cursor: pointer;
  transition: border-color .2s, background .2s, color .2s, transform .14s var(--ease-spring); }
.bs-preset:hover { border-color: rgba(20,224,203,0.4); color: var(--text); transform: translateY(-2px); }
.bs-preset.on { border-color: var(--border-hi); color: var(--text);
  background: var(--teal-soft); box-shadow: 0 0 24px rgba(20,224,203,0.18); }

/* ══ BLOOD WORK · LAB PANEL (slider per biomarker) ═══════════════════════════ */
/* The lab panel breaks out of the narrow one-question column to use much more
   of the screen — a dense, scannable grid of biomarker dials. */
#screen-question .q-wrap:has(.lab-panel) { max-width: min(1500px, 94vw); }
/* The intro subtext isn't clamped to 48ch here — let it use the wider column so
   the second sentence stays on one line on desktop/tablet (wraps on phones). */
#screen-question .q-wrap:has(.lab-panel) .q-subtext { max-width: min(900px, 92vw); }
.lab-panel { margin-top: clamp(18px, 3vw, 28px); animation: optIn .5s var(--ease-out) backwards; }
.lp-upload { display: flex; align-items: center; justify-content: space-between; gap: 16px;
  margin: 0 auto clamp(18px, 3vw, 26px); padding: 16px;
  max-width: min(980px, 100%); border: 1px solid color-mix(in srgb, var(--teal) 26%, var(--border));
  border-radius: 22px; background:
    radial-gradient(520px 180px at 18% 0%, color-mix(in srgb, var(--teal) 18%, transparent), transparent 70%),
    linear-gradient(135deg, color-mix(in srgb, var(--fill-1) 92%, transparent), color-mix(in srgb, var(--blue-soft) 42%, transparent));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.18), 0 18px 52px color-mix(in srgb, var(--blue-2) 12%, transparent); }
.lp-upload-copy { display: flex; align-items: center; gap: 12px; min-width: 0; text-align: left; }
.lp-upload-ic { display: flex; align-items: center; justify-content: center; width: 42px; height: 42px; flex: none;
  border-radius: 14px; color: var(--teal); background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 28%, transparent); }
.lp-upload-ic svg { width: 19px; height: 19px; }
.lp-upload-copy b { display: block; font-family: var(--font-display); font-size: 15px; color: var(--text); }
.lp-upload-copy span:not(.lp-upload-ic) { display: block; margin-top: 2px; color: var(--text-2); font-size: 12.5px; }
.lp-upload-btn { flex: none; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 0 18px; border-radius: var(--r-pill); border: 1px solid transparent;
  background: var(--grad-brand); color: var(--ink-on-brand); font-weight: 800; font-size: 13px; cursor: pointer;
  box-shadow: 0 16px 34px color-mix(in srgb, var(--teal) 22%, transparent), inset 0 1px 0 rgba(255,255,255,.35);
  transition: transform .18s var(--ease-spring), box-shadow .2s; }
.lp-upload-btn svg { width: 15px; height: 15px; }
.lp-upload-btn:hover { transform: translateY(-2px); box-shadow: 0 22px 48px color-mix(in srgb, var(--teal) 30%, transparent), inset 0 1px 0 rgba(255,255,255,.45); }
.lp-intro { display: flex; align-items: center; gap: 10px; justify-content: center;
  text-align: center; color: var(--text-2); font-size: 13.5px; margin-bottom: 18px; }
.lp-intro svg { width: 18px; height: 18px; color: var(--teal); flex: none; }
.lp-grid { display: grid; grid-template-columns: 1fr; gap: 14px; }
@media (min-width: 620px)  { .lp-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1080px) { .lp-grid { grid-template-columns: 1fr 1fr 1fr; } }
@media (min-width: 1400px) { .lp-grid { grid-template-columns: repeat(4, 1fr); } }
.lp-card { background: var(--glass, rgba(255,255,255,0.03)); border: 1.5px solid var(--border);
  border-radius: 16px; padding: 14px 16px; transition: border-color .2s, background .2s; }
.lp-card.is-set { border-color: var(--border-hi); background: var(--teal-soft); }
.lp-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.lp-name { font-weight: 700; font-size: 14px; color: var(--text); }
.lp-unit { color: var(--muted); font-weight: 500; font-size: 12px; }
.lp-toggle { flex: none; background: rgba(255,255,255,0.05); border: 1.5px solid var(--border);
  color: var(--text-2); font-weight: 600; font-size: 12.5px; padding: 6px 13px;
  border-radius: var(--r-pill); cursor: pointer; transition: border-color .2s, background .2s, color .2s; }
.lp-toggle:hover { border-color: var(--border-hi); color: var(--text); }
.lp-card.is-set .lp-toggle { background: rgba(255,255,255,0.06); }
.lp-body { margin-top: 14px; }
.lp-readout { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.lp-value { font-family: var(--font-display); font-weight: 700; font-size: 26px; line-height: 1;
  color: var(--text); font-variant-numeric: tabular-nums; }
.lp-band { font-size: 12px; font-weight: 700; padding: 4px 11px; border-radius: var(--r-pill);
  border: 1.5px solid var(--border); color: var(--muted); }
.lp-band:empty { display: none; }
.lp-band.tone-ok { color: var(--shield, #14e0cb); border-color: color-mix(in srgb, var(--shield, #14e0cb) 55%, var(--border));
  background: var(--teal-soft); }
.lp-band.tone-watch { color: var(--warning, #f5a623); border-color: color-mix(in srgb, var(--warning, #f5a623) 55%, var(--border));
  background: color-mix(in srgb, var(--warning, #f5a623) 12%, transparent); }
.lp-band.tone-warn { color: #ff6b6b; border-color: color-mix(in srgb, #ff6b6b 55%, var(--border));
  background: color-mix(in srgb, #ff6b6b 12%, transparent); }
.lp-range { --fill: 50%; -webkit-appearance: none; appearance: none; width: 100%; height: 8px;
  background: transparent; border-radius: var(--r-pill); cursor: pointer; outline: none; }
.lp-range::-webkit-slider-runnable-track { height: 8px; border-radius: var(--r-pill);
  background: rgba(255,255,255,0.07); box-shadow: inset 0 0 0 1px var(--border); }
.lp-range::-moz-range-track { height: 8px; border-radius: var(--r-pill);
  background: rgba(255,255,255,0.07); box-shadow: inset 0 0 0 1px var(--border); }
.lp-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none;
  width: 22px; height: 22px; margin-top: -7px; border-radius: 50%;
  background: #fff; border: 2px solid var(--teal); cursor: grab;
  box-shadow: 0 3px 12px rgba(0,0,0,0.4), 0 0 0 5px rgba(20,224,203,0.14); transition: transform .14s var(--ease-spring); }
.lp-range::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%;
  background: #fff; border: 2px solid var(--teal); cursor: grab;
  box-shadow: 0 3px 12px rgba(0,0,0,0.4), 0 0 0 5px rgba(20,224,203,0.14); }
.lp-range:active::-webkit-slider-thumb { transform: scale(1.12); cursor: grabbing; }
.lp-ends { display: flex; align-items: center; justify-content: space-between; gap: 8px;
  margin-top: 9px; font-size: 11px; color: var(--muted-2); font-variant-numeric: tabular-nums; }
.lp-ref { color: var(--muted); font-size: 10.5px; text-align: center; flex: 1; }
.lp-count { text-align: center; color: var(--muted); font-size: 13px; margin-top: 18px; }

.blood-upload-card { width: min(980px, calc(100vw - 36px)); height: auto; min-height: 0;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--teal) 7%, transparent) 1px, transparent 1px),
    linear-gradient(0deg, color-mix(in srgb, var(--blue-2) 6%, transparent) 1px, transparent 1px),
    radial-gradient(860px 380px at 18% -10%, color-mix(in srgb, var(--teal) 24%, transparent), transparent 68%),
    radial-gradient(720px 420px at 100% 0%, color-mix(in srgb, var(--blue-2) 18%, transparent), transparent 64%),
    linear-gradient(145deg, color-mix(in srgb, var(--surface) 96%, transparent), var(--surface-hi));
  background-size: 38px 38px, 38px 38px, auto, auto, auto; }
.blood-upload-card.has-results { width: min(1280px, calc(100vw - 28px)); height: min(820px, calc(100dvh - 36px)); min-height: min(680px, calc(100dvh - 36px)); }
.blood-upload-card.is-empty { width: min(980px, calc(100vw - 36px)); max-height: calc(100dvh - 36px); }
.blood-upload-card.is-processing { width: min(980px, calc(100vw - 36px)); max-height: calc(100dvh - 36px); }
.blood-upload-head { position: relative; z-index: 2; padding: 16px 20px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--surface-hi) 86%, transparent), color-mix(in srgb, var(--surface) 62%, transparent));
  -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); }
.blood-upload-mark { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; flex: none;
  color: var(--teal); border-radius: 15px; background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  box-shadow: 0 16px 42px color-mix(in srgb, var(--teal) 16%, transparent), inset 0 1px 0 rgba(255,255,255,.18); }
.blood-upload-mark svg { width: 21px; height: 21px; }
.blood-upload-body { position: relative; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); align-content: start;
  gap: 14px; padding: clamp(16px, 2.4vw, 24px); overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; }
.blood-upload-card.is-empty .blood-upload-body,
.blood-upload-card.is-processing .blood-upload-body { flex: 0 0 auto; overflow: visible; scrollbar-gutter: auto; }
.blood-upload-card.is-empty .blood-upload-body { grid-template-columns: minmax(0, 1fr); align-items: stretch; justify-items: center; padding-inline: 24px; }
.blood-upload-card.has-results .blood-upload-body { grid-template-columns: minmax(0, 1fr); align-items: start; }
.blood-upload-body::-webkit-scrollbar { width: 10px; }
.blood-upload-body::-webkit-scrollbar-track { background: transparent; }
.blood-upload-body::-webkit-scrollbar-thumb { border-radius: var(--r-pill); border: 3px solid transparent; background-clip: content-box;
  background-color: color-mix(in srgb, var(--teal) 42%, var(--border)); }
.blood-drop { position: relative; min-height: 220px; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 9px; padding: 22px 26px; text-align: center; cursor: pointer; border-radius: 24px; border: 1.5px dashed color-mix(in srgb, var(--teal) 44%, var(--border));
  background:
    radial-gradient(520px 210px at 50% 50%, color-mix(in srgb, var(--teal) 17%, transparent), transparent 72%),
    linear-gradient(135deg, color-mix(in srgb, var(--fill-1) 95%, transparent), color-mix(in srgb, var(--fill-2) 80%, transparent));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.16), 0 24px 70px color-mix(in srgb, var(--blue-2) 8%, transparent);
  overflow: hidden; transition: border-color .25s, transform .25s var(--ease-out), box-shadow .25s; }
.blood-upload-card.is-empty .blood-drop { width: min(100%, 820px); transform: translateX(14px); }
.blood-drop:hover { border-color: color-mix(in srgb, var(--teal) 68%, var(--border)); transform: translateY(-1px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 26px 80px color-mix(in srgb, var(--teal) 13%, transparent); }
.blood-upload-card.is-empty .blood-drop:hover { transform: translateX(14px) translateY(-1px); }
.blood-drop input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.blood-drop > :not(input) { position: relative; z-index: 1; }
.blood-drop-grid { position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(90deg, color-mix(in srgb, var(--teal) 12%, transparent) 1px, transparent 1px),
    linear-gradient(0deg, color-mix(in srgb, var(--blue-2) 9%, transparent) 1px, transparent 1px);
  background-size: 44px 44px; mask-image: linear-gradient(180deg, transparent, #000 16%, #000 84%, transparent); opacity: .8; }
.blood-drop-scan { position: absolute; z-index: 0; left: 9%; right: 9%; top: 18%; height: 1px;
  background: linear-gradient(90deg, transparent, var(--teal), color-mix(in srgb, var(--blue-2) 72%, var(--teal)), transparent);
  box-shadow: 0 0 24px color-mix(in srgb, var(--teal) 48%, transparent); animation: bloodDropScan 3.2s ease-in-out infinite; }
.blood-drop-orb { display: flex; align-items: center; justify-content: center; width: 56px; height: 56px;
  border-radius: 18px; color: var(--ink-on-brand); background: var(--grad-brand);
  box-shadow: 0 22px 58px color-mix(in srgb, var(--teal) 30%, transparent), inset 0 1px 0 rgba(255,255,255,.45); }
.blood-drop-orb svg { width: 23px; height: 23px; }
.blood-drop strong { max-width: 640px; font-family: var(--font-display); font-size: clamp(24px, 3vw, 36px); line-height: 1.02; color: var(--text); letter-spacing: 0; }
.blood-drop em { max-width: 590px; font-style: normal; color: var(--text-2); font-size: 12.5px; line-height: 1.38; }
.blood-drop-badges { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 4px; }
.blood-drop-badges i { font-style: normal; font-size: 9.5px; font-weight: 850; letter-spacing: .08em; text-transform: uppercase;
  color: var(--text-2); padding: 5px 8px; border-radius: var(--r-pill); border: 1px solid var(--border-soft); background: color-mix(in srgb, var(--fill-1) 82%, transparent); }
.blood-upload-state { justify-self: center; max-width: 100%; text-align: center; color: var(--text-2); font-weight: 800; font-size: 12px;
  padding: 8px 12px; border-radius: var(--r-pill); border: 1px solid var(--border-soft); background: color-mix(in srgb, var(--fill-1) 78%, transparent); }
.blood-upload-card.is-empty .blood-upload-state { display: none; }
.blood-upload-card.is-empty .blood-upload-state b { font-family: var(--font-display); color: var(--text); font-size: 13px; }
.blood-upload-card.is-empty .blood-upload-state span { color: var(--muted); font-size: 12px; line-height: 1.45; font-weight: 650; }
.blood-upload-card.is-processing .blood-upload-state { display: none; }
.blood-upload-card.is-processing .blood-drop { display: none; }
.blood-upload-card.has-results .blood-drop { display: none; }
.blood-upload-card.has-results .blood-upload-state { display: none; position: sticky; top: 0; align-self: start; justify-self: stretch;
  gap: 12px; min-height: 0; height: auto; text-align: left; border-radius: 24px; padding: 18px;
  background:
    radial-gradient(260px 280px at 50% 0%, color-mix(in srgb, var(--teal) 16%, transparent), transparent 72%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-hi) 72%, transparent), color-mix(in srgb, var(--fill-1) 90%, transparent));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.14), 0 18px 44px color-mix(in srgb, var(--blue-2) 8%, transparent); }
.blood-upload-card.has-results .blood-upload-state::before { content: ''; width: 46px; height: 46px; border-radius: 17px;
  background: var(--grad-brand); box-shadow: 0 16px 38px color-mix(in srgb, var(--teal) 24%, transparent); }
.blood-upload-card.has-results .blood-upload-state b { font-family: var(--font-display); color: var(--text); font-size: 17px; line-height: 1.05; letter-spacing: 0; }
.blood-upload-card.has-results .blood-upload-state span { color: var(--text-2); font-size: 12.5px; line-height: 1.45; font-weight: 700; }
.blood-upload-card.has-results .blood-upload-state i { display: inline-flex; align-items: center; gap: 7px; width: fit-content;
  font-style: normal; color: var(--teal); font-size: 11px; font-weight: 850; letter-spacing: .04em; text-transform: uppercase;
  padding: 7px 10px; border-radius: var(--r-pill); border: 1px solid color-mix(in srgb, var(--teal) 28%, var(--border)); background: var(--teal-soft); }
.blood-upload-card.has-results .blood-upload-state svg { width: 14px; height: 14px; flex: none; }
.blood-processing { position: relative; display: grid; grid-template-columns: auto minmax(0,1fr); align-items: center; gap: 16px;
  padding: 18px; border-radius: 22px; border: 1px solid color-mix(in srgb, var(--teal) 34%, var(--border));
  background:
    radial-gradient(420px 180px at 12% 0%, color-mix(in srgb, var(--teal) 18%, transparent), transparent 70%),
    radial-gradient(360px 170px at 96% 18%, color-mix(in srgb, var(--blue-2) 16%, transparent), transparent 68%),
    linear-gradient(135deg, color-mix(in srgb, var(--fill-1) 94%, transparent), color-mix(in srgb, var(--fill-2) 82%, transparent));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.16), 0 18px 46px color-mix(in srgb, var(--teal) 13%, transparent);
  overflow: hidden; }
.blood-processing[hidden] { display: none; }
.blood-processing::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(110deg, transparent 0%, color-mix(in srgb, var(--teal) 12%, transparent) 44%, transparent 66%);
  transform: translateX(-100%); animation: bloodScan 1.9s ease-in-out infinite; }
.blood-processing-core { position: relative; width: 68px; height: 68px; flex: none; display: grid; place-items: center; }
.blood-processing-core span { position: absolute; inset: 0; border-radius: 50%; border: 1.5px solid transparent;
  border-top-color: var(--teal); border-right-color: color-mix(in srgb, var(--blue-2) 55%, transparent);
  filter: drop-shadow(0 0 10px color-mix(in srgb, var(--teal) 42%, transparent)); animation: bloodOrbit 1.25s linear infinite; }
.blood-processing-core span:nth-child(2) { inset: 9px; animation-duration: 1.8s; animation-direction: reverse; border-top-color: var(--blue-2); }
.blood-processing-core span:nth-child(3) { inset: 18px; animation-duration: 2.25s; border-top-color: var(--violet); }
.blood-processing-core i { position: relative; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 13px;
  color: var(--ink-on-brand); background: var(--grad-brand); box-shadow: 0 0 30px color-mix(in srgb, var(--teal) 30%, transparent); }
.blood-processing-core svg { width: 17px; height: 17px; }
.blood-processing-copy { position: relative; min-width: 0; text-align: left; }
.blood-processing-copy b { display: block; font-family: var(--font-display); color: var(--text); font-size: 16px; }
.blood-processing-copy span { display: block; margin-top: 3px; color: var(--text-2); font-size: 12.5px; line-height: 1.45; }
.blood-processing-rail { grid-column: 1 / -1; height: 5px; border-radius: var(--r-pill); overflow: hidden;
  background: rgba(255,255,255,.07); box-shadow: inset 0 0 0 1px var(--border-soft); }
.blood-processing-rail i { display: block; width: 42%; height: 100%; border-radius: inherit; background: var(--grad-brand);
  box-shadow: 0 0 18px color-mix(in srgb, var(--teal) 55%, transparent); animation: bloodRail 1.55s ease-in-out infinite; }
@keyframes bloodOrbit { to { transform: rotate(360deg); } }
@keyframes bloodScan { 0% { transform: translateX(-120%); } 55%,100% { transform: translateX(120%); } }
@keyframes bloodRail { 0% { transform: translateX(-110%); } 100% { transform: translateX(245%); } }
.blood-upload-results { display: grid; grid-template-columns: 1fr; gap: 16px; min-width: 0; padding-bottom: 6px; }
.blood-result-summary { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px;
  border-radius: 22px; border: 1px solid color-mix(in srgb, var(--teal) 30%, var(--border));
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 11%, var(--fill-1)), color-mix(in srgb, var(--blue-2) 8%, var(--fill-1)));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.16); }
.blood-result-summary span { color: var(--muted); font-size: 11.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .09em; }
.blood-result-summary b { display: block; margin-top: 3px; font-family: var(--font-display); color: var(--text); font-size: 19px; letter-spacing: 0; }
.blood-stat-row { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.blood-stat-row span { min-width: 86px; padding: 9px 11px; border-radius: 15px; border: 1px solid var(--border-soft);
  background: color-mix(in srgb, var(--surface-hi) 72%, transparent); color: var(--text-2); text-transform: none; letter-spacing: 0; text-align: center; }
.blood-stat-row span b { display: inline; margin: 0 4px 0 0; font-size: 18px; color: var(--teal); }
.blood-result-section { display: grid; gap: 11px; padding: 14px; border-radius: 22px; border: 1px solid var(--border-soft);
  background: color-mix(in srgb, var(--fill-1) 84%, transparent); box-shadow: inset 0 1px 0 rgba(255,255,255,.08); }
.blood-result-head { display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
  padding: 0 2px; text-align: left; }
.blood-result-head b { font-family: var(--font-display); font-size: 15px; color: var(--text); }
.blood-result-head span { color: var(--muted); font-size: 12px; }
.blood-match-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(225px, 1fr)); gap: 10px; }
.blood-match { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 12px 13px; border-radius: 16px; border: 1px solid var(--border-soft);
  background: linear-gradient(135deg, color-mix(in srgb, var(--surface-hi) 54%, transparent), color-mix(in srgb, var(--fill-1) 90%, transparent));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.08); }
.blood-match span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-2); font-size: 12.5px; }
.blood-match b { color: var(--text); font-family: var(--font-display); font-size: 13.5px; white-space: nowrap; }
.blood-review-section { padding-top: 4px; }
.blood-review-card { display: grid; gap: 12px; padding: 14px; border-radius: 18px;
  border: 1.5px solid color-mix(in srgb, var(--warning) 42%, var(--border));
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--warning) 11%, transparent) 1px, transparent 1px),
    linear-gradient(0deg, color-mix(in srgb, var(--teal) 7%, transparent) 1px, transparent 1px),
    linear-gradient(135deg, color-mix(in srgb, var(--warning) 9%, var(--fill-1)), color-mix(in srgb, var(--fill-1) 92%, transparent));
  background-size: 32px 32px, 32px 32px, auto; box-shadow: inset 0 1px 0 rgba(255,255,255,.1); }
.blood-review-card.is-accepted { border-color: color-mix(in srgb, var(--teal) 48%, var(--border));
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 12%, var(--fill-1)), var(--fill-1)); }
.blood-review-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; }
.blood-review-top b { display: block; font-family: var(--font-display); color: var(--text); font-size: 15px; }
.blood-review-top span { display: block; margin-top: 2px; color: var(--text-2); font-size: 12px; }
.blood-review-mid { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.blood-review-value { font-family: var(--font-display); font-size: 26px; font-weight: 800; line-height: 1; color: var(--text); font-variant-numeric: tabular-nums; }
.blood-review-confidence { flex: none; border: 1px solid color-mix(in srgb, var(--warning) 40%, var(--border)); border-radius: var(--r-pill);
  padding: 5px 10px; color: var(--text-2); background: color-mix(in srgb, var(--warning) 8%, transparent); font-size: 11px; font-weight: 800; }
.blood-review-range { -webkit-appearance: none; appearance: none; width: 100%; height: 8px; background: transparent; border-radius: var(--r-pill); cursor: pointer; }
.blood-review-range:disabled { opacity: .45; cursor: not-allowed; }
.blood-review-range::-webkit-slider-runnable-track { height: 8px; border-radius: var(--r-pill); background: rgba(255,255,255,0.08); box-shadow: inset 0 0 0 1px var(--border); }
.blood-review-range::-moz-range-track { height: 8px; border-radius: var(--r-pill); background: rgba(255,255,255,0.08); box-shadow: inset 0 0 0 1px var(--border); }
.blood-review-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 22px; height: 22px; margin-top: -7px;
  border-radius: 50%; background: #fff; border: 2px solid var(--teal); box-shadow: 0 3px 12px rgba(0,0,0,.38), 0 0 0 5px rgba(20,224,203,.13); }
.blood-review-range::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%; background: #fff; border: 2px solid var(--teal); box-shadow: 0 3px 12px rgba(0,0,0,.38), 0 0 0 5px rgba(20,224,203,.13); }
.blood-review-scale { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: -5px;
  color: var(--muted-2); font-size: 11px; font-variant-numeric: tabular-nums; }
.blood-review-scale em { min-width: 0; text-align: center; font-style: normal; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.blood-candidates { display: flex; flex-wrap: wrap; gap: 8px; }
.blood-candidate { border: 1px solid var(--border); border-radius: var(--r-pill); padding: 7px 11px;
  background: rgba(255,255,255,.04); color: var(--text-2); font-size: 12px; font-weight: 800; cursor: pointer; }
.blood-candidate.on { border-color: color-mix(in srgb, var(--teal) 54%, var(--border)); color: var(--text); background: var(--teal-soft); }
.blood-review-source { color: var(--muted); font-size: 11.5px; line-height: 1.45; text-align: left;
  border-top: 1px solid var(--border-soft); padding-top: 10px; }
.blood-empty { display: flex; align-items: center; justify-content: center; gap: 10px; grid-column: 1 / -1;
  padding: 18px; border-radius: 18px; background: color-mix(in srgb, var(--warning) 10%, transparent); color: var(--text-2); }
.blood-empty svg { width: 18px; height: 18px; color: var(--warning); flex: none; }
.blood-upload-foot { position: relative; z-index: 2; background: linear-gradient(0deg, color-mix(in srgb, var(--surface-hi) 88%, transparent), color-mix(in srgb, var(--surface) 64%, transparent));
  -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); }
.blood-upload-foot .btn { width: min(280px, 42%); }

@keyframes bloodDropScan { 0%,100% { transform: translateY(-34px); opacity: .25; } 50% { transform: translateY(150px); opacity: .9; } }

@media (prefers-reduced-motion: reduce) {
  .blood-drop-scan, .blood-processing::before, .blood-processing-core span, .blood-processing-rail i { animation: none !important; }
  .blood-drop:hover { transform: none; }
}

@media (max-width: 900px) {
  .blood-upload-card { width: min(760px, calc(100vw - 28px)); height: min(820px, calc(100dvh - 28px)); }
  .blood-upload-card.is-empty, .blood-upload-card.is-processing { height: auto; min-height: 0; }
  .blood-upload-card.is-empty .blood-upload-body { grid-template-columns: 1fr; }
  .blood-upload-card.is-empty .blood-drop { transform: none; }
  .blood-upload-card.is-empty .blood-drop:hover { transform: translateY(-1px); }
  .blood-upload-card.has-results .blood-upload-body { grid-template-columns: 1fr; }
  .blood-upload-card.is-empty .blood-upload-state { min-height: 0; }
  .blood-upload-card.has-results .blood-upload-state { position: relative; top: auto; }
  .blood-result-summary { align-items: stretch; flex-direction: column; }
  .blood-stat-row { justify-content: stretch; }
  .blood-stat-row span { flex: 1; min-width: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .blood-upload-card.is-empty .blood-drop,
  .blood-upload-card.is-empty .blood-drop:hover { transform: none; }
}

@media (max-width: 700px) {
  .lp-upload { flex-direction: column; align-items: stretch; }
  .lp-upload-btn { width: 100%; }
  .blood-upload-backdrop { align-items: stretch; justify-content: stretch; padding: 0; }
  .blood-upload-card,
  .blood-upload-card.is-empty,
  .blood-upload-card.is-processing,
  .blood-upload-card.has-results {
    width: 100vw; height: 100dvh; min-height: 100dvh; max-height: 100dvh; border-radius: 0;
    animation: none; transform: none;
  }
  .blood-upload-head { padding: 16px; }
  .blood-upload-body,
  .blood-upload-card.is-empty .blood-upload-body,
  .blood-upload-card.is-processing .blood-upload-body,
  .blood-upload-card.has-results .blood-upload-body {
    flex: 1 1 auto; min-height: 0; padding: 16px; gap: 14px; overflow-y: auto; scrollbar-gutter: stable;
  }
  .blood-upload-card.is-empty .blood-upload-body,
  .blood-upload-card.is-processing .blood-upload-body { align-content: stretch; }
  .blood-drop { min-height: 100%; border-radius: 22px; }
  .blood-processing { min-height: 100%; }
  .blood-drop strong { font-size: clamp(25px, 9vw, 38px); }
  .blood-drop-badges i { font-size: 10px; padding: 6px 8px; }
  .blood-processing { grid-template-columns: 1fr; justify-items: center; text-align: center; }
  .blood-processing-copy { text-align: center; }
  .blood-review-top, .blood-review-mid, .blood-result-head { align-items: stretch; flex-direction: column; }
  .blood-match-grid { grid-template-columns: 1fr; }
  .blood-upload-foot .btn { width: 100%; }
}

@media (max-width: 430px) {
  .blood-upload-mark { width: 38px; height: 38px; border-radius: 13px; }
  .blood-drop { min-height: 40dvh; padding: 18px; }
  .blood-drop-orb { width: 62px; height: 62px; border-radius: 21px; }
  .blood-result-summary b { font-size: 16px; }
  .blood-stat-row { display: grid; grid-template-columns: 1fr; }
  .blood-review-value { font-size: 23px; }
}

/* ===========================================================================
   3) PROCESSING · F373 — WORDLESS $70M CINEMATIC ENGINE
   ---------------------------------------------------------------------------
   A living, gradient IDLife Shield breathing at the center of orbiting light:
   a soft aura, a faint data grid, three counter-rotating gradient rings, a
   radar sweep, three orbiting satellites, and drifting sparks. No text at all.
   Every colour is a token (or color-mix) so BOTH themes read clean; sized in
   clamp() so it's gorgeous on phone, tablet and computer; fully reduced-motion
   safe (freezes into a still, composed emblem).
   =========================================================================== */
#screen-processing { align-items: center; justify-content: center; }
#screen-processing .flow.proc-flow { display: grid; place-items: center; min-height: 60vh; gap: 0; }
.proc-stage { position: relative; width: clamp(210px, 46vw, 330px); aspect-ratio: 1; display: grid; place-items: center; }
.proc-stage > * { position: absolute; inset: 0; margin: auto; }

/* ambient aura — a deep radial breath behind everything */
.proc-aura { width: 150%; height: 150%; border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 26%, transparent) 0%,
              color-mix(in srgb, var(--blue-2) 16%, transparent) 34%, transparent 68%);
  filter: blur(26px); animation: pcAura 5.6s var(--ease-out) infinite; }
@keyframes pcAura { 0%,100% { opacity: .7; transform: scale(1); } 50% { opacity: 1; transform: scale(1.08); } }

/* faint intelligence grid — a masked dot-field that slowly drifts */
.proc-grid { width: 78%; height: 78%; border-radius: 50%; pointer-events: none; opacity: .5;
  background-image: radial-gradient(color-mix(in srgb, var(--teal) 40%, transparent) 1px, transparent 1.4px);
  background-size: 13px 13px;
  -webkit-mask: radial-gradient(circle, #000 32%, transparent 70%); mask: radial-gradient(circle, #000 32%, transparent 70%);
  animation: pcGrid 9s linear infinite; }
@keyframes pcGrid { to { transform: rotate(360deg); } }

/* three counter-rotating gradient rings (conic → masked to a hairline arc) */
.proc-ring { border-radius: 50%; pointer-events: none;
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
          mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px)); }
.proc-ring.pr1 { width: 100%; height: 100%;
  background: conic-gradient(from 0deg, transparent 0 58%, var(--teal) 82%, transparent 100%);
  filter: drop-shadow(0 0 10px var(--teal-glow)); animation: pcSpin 2.4s linear infinite; }
.proc-ring.pr2 { width: 76%; height: 76%;
  background: conic-gradient(from 180deg, transparent 0 62%, var(--blue) 86%, transparent 100%);
  animation: pcSpin 3.4s linear infinite reverse; }
.proc-ring.pr3 { width: 53%; height: 53%;
  background: conic-gradient(from 90deg, transparent 0 64%, var(--violet) 88%, transparent 100%);
  animation: pcSpin 2.9s linear infinite; }
@keyframes pcSpin { to { transform: rotate(360deg); } }

/* radar sweep — a wide soft wedge that rotates over the whole stage */
.proc-scan { width: 100%; height: 100%; border-radius: 50%; pointer-events: none; opacity: .6;
  background: conic-gradient(from 0deg, transparent 0 70%, color-mix(in srgb, var(--teal) 48%, transparent) 88%, transparent 98%);
  -webkit-mask: radial-gradient(circle, transparent 26%, #000 28%); mask: radial-gradient(circle, transparent 26%, #000 28%);
  animation: pcSpin 3.8s linear infinite; will-change: transform; }

/* orbiting satellites — light nodes riding invisible tracks at 3 radii */
.proc-sat { width: 100%; height: 100%; border-radius: 50%; pointer-events: none; }
.proc-sat i { position: absolute; top: 50%; left: 50%; width: 9px; height: 9px; margin: -4.5px 0 0 -4.5px;
  border-radius: 50%; background: var(--teal); box-shadow: 0 0 12px var(--teal); }
.proc-sat.s1 { animation: pcSpin 3.1s linear infinite; }
.proc-sat.s1 i { transform: translateY(calc(-1 * clamp(105px, 23vw, 165px))); }
.proc-sat.s2 { width: 76%; height: 76%; animation: pcSpin 4.6s linear infinite reverse; }
.proc-sat.s2 i { background: var(--blue); box-shadow: 0 0 12px var(--blue); transform: translateY(calc(-1 * clamp(80px, 17.5vw, 125px))); width: 7px; height: 7px; }
.proc-sat.s3 { width: 53%; height: 53%; animation: pcSpin 3.7s linear infinite; }
.proc-sat.s3 i { background: var(--violet); box-shadow: 0 0 12px var(--violet); transform: translateY(calc(-1 * clamp(56px, 12vw, 87px))); width: 6px; height: 6px; }

/* the halo behind the shield — a glass jewel disc */
.proc-halo { width: 43%; height: 43%; border-radius: 30%;
  background: var(--glass-bg); border: 1px solid var(--border-hi);
  box-shadow: var(--glow-teal), inset 0 1px 0 rgba(255,255,255,0.16);
  -webkit-backdrop-filter: blur(9px); backdrop-filter: blur(9px);
  animation: pcHalo 3s var(--ease-out) infinite; }
@keyframes pcHalo { 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); } }

/* the living gradient IDLife Shield at the heart */
.proc-core { width: 30%; height: 30%; display: grid; place-items: center;
  filter: drop-shadow(0 8px 20px var(--teal-glow)) drop-shadow(0 2px 4px rgba(6,14,34,.35));
  animation: pcBreath 2.6s ease-in-out infinite; }
.proc-core svg { width: 100%; height: 100%; display: block; overflow: visible; }
/* the engraved iD mark sits pressed into the shield (hairline shadow) and
   pulses a whisper of brightness in time with the shield's breath */
.pc-shield-mark { filter: drop-shadow(0 .7px .5px rgba(6,14,34,.42)); animation: pcMark 2.6s ease-in-out infinite; }
@keyframes pcBreath { 0%,100% { transform: scale(1); } 50% { transform: scale(1.09); } }
@keyframes pcMark { 0%,100% { opacity: .92; } 50% { opacity: 1; } }

/* drifting sparks — a whisper of light rising through the stage */
.proc-sparks i { position: absolute; bottom: 12%; border-radius: 50%; width: 3px; height: 3px;
  background: color-mix(in srgb, var(--teal) 80%, #fff); box-shadow: 0 0 8px var(--teal);
  opacity: 0; animation: pcSpark 3.4s ease-in-out infinite; }
.proc-sparks i:nth-child(1) { left: 22%; animation-delay: .0s; }
.proc-sparks i:nth-child(2) { left: 38%; animation-delay: .7s; }
.proc-sparks i:nth-child(3) { left: 52%; animation-delay: 1.3s; }
.proc-sparks i:nth-child(4) { left: 64%; animation-delay: .4s; }
.proc-sparks i:nth-child(5) { left: 76%; animation-delay: 1.8s; }
.proc-sparks i:nth-child(6) { left: 30%; animation-delay: 2.3s; }
@keyframes pcSpark { 0% { opacity: 0; transform: translateY(0) scale(.6); }
  20% { opacity: .9; } 100% { opacity: 0; transform: translateY(-140px) scale(1); } }

@keyframes spin { to { transform: rotate(360deg); } }
@keyframes breathe { 0%,100% { transform: scale(1); } 50% { transform: scale(1.12); } }

/* ===========================================================================
   4) SCORE REVEAL
   =========================================================================== */
#screen-reveal { align-items: stretch; justify-content: flex-start; padding: 0; }
#screen-reveal .flow { display: flex; flex-direction: column; align-items: center; text-align: center; gap: clamp(18px, 3vw, 28px); }
.reveal-topbar { position: sticky; top: 0; z-index: 30; padding-right: calc(clamp(18px, 4vw, 40px) + 50px); }
.reveal-topbar .flow-topbar-inner { max-width: none; justify-content: space-between; }
.reveal-stagebar { flex: 1; display: flex; align-items: center; justify-content: center; gap: clamp(8px, 1.6vw, 18px); min-width: 0; }
.reveal-stagebar span, .reveal-stagebar b { font-family: var(--font-display); font-size: clamp(11px, 1.2vw, 13px); letter-spacing: .04em; white-space: nowrap; }
.reveal-stagebar span { color: var(--muted); }
.reveal-stagebar b { color: var(--blue-2); }
.reveal-stagebar i { width: clamp(20px, 5vw, 86px); height: 3px; border-radius: 99px; background: linear-gradient(90deg, var(--teal), var(--blue-2), var(--violet)); opacity: .78; }
.reveal-flow { width: min(1320px, calc(100vw - clamp(44px, 8vw, 128px))); max-width: none; margin: 0 auto; padding: clamp(16px, 2.2vw, 30px) 0 clamp(24px, 3vw, 42px); }
.reveal-title { display: grid; gap: 8px; max-width: 920px; text-align: center; align-self: center; }
.reveal-title h1 { font-family: var(--font-display); font-size: clamp(30px, 3.8vw, 52px); line-height: 1; letter-spacing: -0.035em; }
.reveal-title p { color: var(--text-2); font-size: clamp(14px, 1.45vw, 18px); }
.reveal-grid { width: 100%; display: grid; grid-template-columns: minmax(300px, .92fr) minmax(390px, 1.05fr) minmax(280px, .88fr); gap: clamp(16px, 1.7vw, 22px); align-items: start; }
.reveal-score-panel, .reveal-impact-panel, .reveal-shield-card, .reveal-opps-card { text-align: left; padding: clamp(16px, 1.65vw, 22px); overflow: hidden; }
.reveal-score-panel { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 13px; }
.ring-wrap { position: relative; width: clamp(220px, 58vw, 300px); aspect-ratio: 1; display: grid; place-items: center; }
#screen-reveal .ring-wrap { width: clamp(210px, 20vw, 300px); }
.ring-wrap svg { width: 100%; height: 100%; transform: rotate(-90deg); overflow: visible; }
.ring-bg { fill: none; stroke: rgba(255,255,255,0.07); stroke-width: 9; }
.ring-fg { fill: none; stroke: url(#scoreGrad); stroke-width: 9; stroke-linecap: round;
  transition: stroke-dashoffset 1.8s var(--ease-out); filter: drop-shadow(0 0 12px rgba(20,224,203,0.55)); }
.ring-center { position: absolute; display: flex; flex-direction: column; align-items: center; }
.ring-score { font-family: var(--font-display); font-weight: 700; font-size: clamp(60px, 15vw, 86px); line-height: 1;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
#screen-reveal .ring-score { font-size: clamp(66px, 6.3vw, 96px); }
.ring-of { font-size: 12px; color: var(--muted); letter-spacing: 0.18em; text-transform: uppercase; margin-top: 6px; }
.ring-label { margin-top: 8px; font-family: var(--font-display); font-weight: 700; letter-spacing: 0.14em;
  text-transform: uppercase; font-size: 14px; padding: 8px 20px; border-radius: var(--r-pill);
  background: var(--teal-soft); color: var(--teal); border: 1px solid rgba(20,224,203,0.3); }
.reveal-tone-good .ring-label, .reveal-tone-good .rs-zone { background: color-mix(in srgb, var(--success) 13%, transparent); color: var(--success); border-color: color-mix(in srgb, var(--success) 34%, transparent); }
.reveal-tone-fair .ring-label, .reveal-tone-fair .rs-zone { background: color-mix(in srgb, var(--warning) 15%, transparent); color: var(--warning); border-color: color-mix(in srgb, var(--warning) 38%, transparent); }
.reveal-tone-low .ring-label, .reveal-tone-low .rs-zone { background: color-mix(in srgb, var(--danger) 14%, transparent); color: var(--danger); border-color: color-mix(in srgb, var(--danger) 38%, transparent); }
.rs-zone, .rs-delta { display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; padding: 7px 14px; border: 1px solid var(--border); font-family: var(--font-display); font-weight: 700; font-size: 12px; letter-spacing: .04em; text-transform: none; }
.rs-delta.up { color: var(--success); background: color-mix(in srgb, var(--success) 10%, transparent); border-color: color-mix(in srgb, var(--success) 34%, transparent); }
.rs-delta.down { color: var(--danger); background: color-mix(in srgb, var(--danger) 10%, transparent); border-color: color-mix(in srgb, var(--danger) 34%, transparent); }
.rs-delta.flat, .rs-delta.first { color: var(--blue-2); background: color-mix(in srgb, var(--blue-2) 10%, transparent); border-color: color-mix(in srgb, var(--blue-2) 28%, transparent); }
.rs-note { margin-top: 2px; color: var(--text-2); font-size: clamp(13.5px, 1.1vw, 15.5px); line-height: 1.48; max-width: 43ch; }
.reveal-card-head { display: grid; gap: 6px; margin-bottom: 16px; }
.reveal-card-head h2, .reveal-shield-card h2 { font-family: var(--font-display); font-size: clamp(20px, 2vw, 28px); letter-spacing: -0.025em; line-height: 1.05; }
.reveal-factor-cols { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(14px, 2vw, 24px); }
.reveal-factor-cols > div { min-width: 0; }
.reveal-factor-cols h3 { font-family: var(--font-display); font-size: 14px; margin-bottom: 12px; color: var(--text); }
.reveal-factor-cols ul, .reveal-opps-card ol { list-style: none; display: grid; gap: 10px; }
.reveal-factor-cols li { display: grid; grid-template-columns: 26px 1fr; gap: 2px 10px; align-items: start; padding: 8px 0; border-bottom: 1px solid var(--hairline); }
.reveal-factor-cols li span { grid-row: span 2; width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; }
.reveal-factor-cols li span svg { width: 14px; height: 14px; }
.rf-help span { color: var(--success); background: color-mix(in srgb, var(--success) 12%, transparent); }
.rf-hurt span { color: var(--danger); background: color-mix(in srgb, var(--danger) 11%, transparent); }
.reveal-factor-cols li b { font-size: 13.25px; color: var(--text); line-height: 1.25; }
.reveal-factor-cols li em, .reveal-opps-card li em { font-style: normal; color: var(--muted); font-size: 12.15px; line-height: 1.34; }
.reveal-side { display: grid; grid-template-rows: auto auto; gap: clamp(14px, 1.8vw, 22px); }
.reveal-shield-card { display: grid; grid-template-columns: 56px 1fr; gap: 14px; align-items: start; }
.rshield-mark { width: 58px; height: 58px; border-radius: 20px; display: grid; place-items: center; background: radial-gradient(circle at 35% 20%, rgba(255,255,255,.18), transparent 34%), color-mix(in srgb, var(--blue-2) 12%, transparent); box-shadow: 0 18px 34px color-mix(in srgb, var(--blue-2) 22%, transparent); }
.rshield-mark .id-logo { width: 44px; height: 44px; }
.rshield-mark .id-logo-svg { width: 100%; height: 100%; display: block; }
.reveal-shield-card p { color: var(--text-2); font-size: 13px; line-height: 1.45; margin-top: 6px; }
.rshield-stat { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; padding: 13px 14px; border-radius: 16px; background: color-mix(in srgb, var(--teal) 8%, transparent); border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent); }
.rshield-stat b { font-family: var(--font-display); font-size: 26px; color: var(--teal); }
.rshield-stat span { color: var(--text-2); font-size: 13px; }
.reveal-opps-card { display: block; }
.reveal-opps-card ol { gap: 0; }
.reveal-opps-card li { display: grid; grid-template-columns: 30px 1fr; gap: 10px; align-items: start; padding: clamp(11px, 1.25vw, 16px) 0; border-top: 1px solid var(--hairline); }
.reveal-opps-card .reveal-card-head { text-align: center; }
.reveal-opps-card li > span { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; background: var(--grad-brand); color: var(--ink-on-brand); font-family: var(--font-display); font-weight: 800; font-size: 13px; }
.reveal-opps-card li b { display: block; color: var(--text); font-size: 14px; line-height: 1.25; margin-bottom: 5px; }

@media (max-width: 1180px) {
  .reveal-grid { grid-template-columns: minmax(280px, .86fr) minmax(420px, 1.14fr); }
  .reveal-side { grid-column: 1 / -1; grid-template-columns: 1fr 1fr; grid-template-rows: auto; }
}

@media (max-width: 900px) {
  .reveal-topbar { padding: 14px calc(64px + env(safe-area-inset-right)) 14px 16px; }
  .reveal-stagebar { display: none; }
  .reveal-flow { width: min(760px, calc(100vw - 28px)); padding-top: 24px; }
  .reveal-grid { grid-template-columns: 1fr; }
  .reveal-side { grid-template-columns: 1fr; }
  .reveal-factor-cols { grid-template-columns: 1fr; }
  #screen-reveal .ring-wrap { width: clamp(214px, 44vw, 300px); }
}

@media (max-width: 640px) {
  .reveal-flow { width: calc(100vw - 24px); padding-top: 18px; gap: 16px; }
  .reveal-title { text-align: center; align-self: stretch; }
  .reveal-title h1 { font-size: clamp(30px, 9vw, 42px); }
  .reveal-score-panel, .reveal-impact-panel, .reveal-shield-card, .reveal-opps-card { padding: 16px; border-radius: 20px; }
  #screen-reveal .ring-wrap { width: min(72vw, 250px); }
  #screen-reveal .ring-score { font-size: clamp(64px, 20vw, 84px); }
  .rs-note { max-width: none; text-align: left; }
  #screen-reveal .reveal-actions { width: min(760px, 100%); display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
#screen-reveal .reveal-actions .btn { min-width: min(280px, 100%); justify-content: center; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F377 · YOUR ASSESSMENT SCORE — the "$1B" reveal (visual-first, toggleable).
   A cinematic hero (aurora + score ring + real stat tiles), a living systems
   constellation of animated radial dials, and premium collapsible narrative
   panels so the heavy text is opt-in. Dual-theme, responsive, reduced-motion.
   ═══════════════════════════════════════════════════════════════════════════ */
.reveal-flow.rv2 {
  position: relative;
  width: min(1560px, calc(100vw - clamp(20px, 4vw, 64px)));
  display: flex; flex-direction: column; gap: clamp(26px, 4vh, 48px);
  padding: clamp(10px, 1.6vh, 22px) 0 clamp(28px, 4vh, 48px);
}

/* ── ambient aurora behind the whole page ── */
.rv-aurora { position: absolute; inset: -6% -12% auto -12%; height: 80%; z-index: 0; pointer-events: none; overflow: visible; }
.rv-aurora span { position: absolute; border-radius: 50%; filter: blur(64px); opacity: .55; }
.rv-aurora span:nth-child(1) { width: 48vw; height: 48vw; left: -6%; top: -10%;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 44%, transparent), transparent 70%);
  animation: rvFloat 13s ease-in-out infinite; }
.rv-aurora span:nth-child(2) { width: 44vw; height: 44vw; right: -4%; top: -6%;
  background: radial-gradient(circle, color-mix(in srgb, var(--blue-2) 44%, transparent), transparent 70%);
  animation: rvFloat 17s ease-in-out infinite reverse; }
.rv-aurora span:nth-child(3) { width: 38vw; height: 38vw; left: 38%; top: 8%;
  background: radial-gradient(circle, color-mix(in srgb, var(--violet) 34%, transparent), transparent 70%);
  animation: rvFloat 15s ease-in-out infinite; }
@keyframes rvFloat { 0%,100% { transform: translate(0,0) scale(1); } 50% { transform: translate(3%, 4%) scale(1.08); } }
.reveal-flow.rv2 > * { position: relative; z-index: 1; }

/* ═══ THE HERO — a full-bleed cinematic stage. The SCORE is the star: a giant
   gradient number flanked by the grade orb and the verdict orb, with orbiting
   light, floating motes, and a self-drawing ECG heartbeat underneath. ═══ */
.rv-hero {
  position: relative; width: 100%;
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(14px, 2.2vh, 24px);
  padding: clamp(26px, 3.4vh, 44px) clamp(18px, 3vw, 52px) clamp(20px, 2.6vh, 34px);
  border-radius: clamp(26px, 3vw, 40px);
  background: var(--grad-card); border: 1px solid var(--border);
  box-shadow: var(--shadow-lg); backdrop-filter: var(--glass-blur); overflow: hidden;
  text-align: center;
}
.rv-systems, .rv-read { width: 100%; }
.rv-hero::before { content: ''; position: absolute; inset: 0; pointer-events: none; border-radius: inherit;
  background: radial-gradient(130% 90% at 50% -10%, color-mix(in srgb, var(--teal) 12%, transparent), transparent 55%); }
.rv-hero > * { position: relative; z-index: 2; }

/* hero FX layer — halo, orbits, motes */
.rv-hero-fx { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.rv-halo { position: absolute; left: 50%; top: 42%; width: min(72vw, 640px); aspect-ratio: 1;
  transform: translate(-50%, -50%); border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 20%, transparent) 0%,
              color-mix(in srgb, var(--blue-2) 12%, transparent) 40%, transparent 68%);
  filter: blur(30px); animation: rvHalo 5.5s var(--ease-out) infinite; }
@keyframes rvHalo { 0%,100% { opacity: .7; transform: translate(-50%,-50%) scale(1); } 50% { opacity: 1; transform: translate(-50%,-50%) scale(1.07); } }
.rv-orbit { position: absolute; left: 50%; top: 42%; border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--teal) 20%, transparent);
  transform: translate(-50%, -50%); }
.rv-orbit-1 { width: min(66vw, 560px); height: min(66vw, 560px); animation: rvSpinC 26s linear infinite; }
.rv-orbit-2 { width: min(88vw, 780px); height: min(88vw, 780px);
  border-color: color-mix(in srgb, var(--violet) 16%, transparent); border-style: dashed;
  animation: rvSpinC 44s linear infinite reverse; }
@keyframes rvSpinC { to { transform: translate(-50%,-50%) rotate(360deg); } }
.rv-orbit i { position: absolute; top: -4px; left: 50%; width: 8px; height: 8px; border-radius: 50%;
  transform: translateX(-50%); background: var(--teal); box-shadow: 0 0 14px var(--teal); }
.rv-orbit-2 i:nth-child(2) { top: auto; bottom: -4px; background: var(--violet); box-shadow: 0 0 14px var(--violet); }
.rv-motes { position: absolute; inset: 0; overflow: hidden; }
.rv-motes i { position: absolute; bottom: -6px; border-radius: 50%;
  background: color-mix(in srgb, var(--teal) 75%, #fff); box-shadow: 0 0 8px var(--teal);
  opacity: 0; animation: rvMote linear infinite; }
@keyframes rvMote { 0% { opacity: 0; transform: translateY(0); } 12% { opacity: .8; }
  88% { opacity: .5; } 100% { opacity: 0; transform: translateY(-105vh); } }

.rv-eyebrow { display: inline-flex; align-items: center; gap: 8px; color: var(--teal);
  font-family: var(--font-display); font-weight: 700; font-size: clamp(12px, 1.3vw, 15px); letter-spacing: .1em; text-transform: uppercase; }
.rv-eyebrow svg { width: 17px; height: 17px; }

/* the two-piece core: grade orb · GIANT shimmering score with its verdict */
.rv-hero-core { display: flex; align-items: center; justify-content: center; gap: clamp(22px, 5vw, 84px); width: 100%; }
.rv-score-stage { display: flex; flex-direction: column; align-items: center; gap: 0; }
.rv-score-num {
  font-family: var(--font-display); font-weight: 800; line-height: 1; letter-spacing: -0.05em;
  padding: .1em .12em; margin: -.1em -.12em;
  font-size: clamp(120px, 21vw, 264px);
  background: linear-gradient(115deg, var(--teal) 8%, var(--blue-2) 42%, var(--violet) 78%, var(--teal) 108%);
  background-size: 220% 100%; background-position: 0% 0;
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 22px 60px color-mix(in srgb, var(--teal) 34%, transparent));
  transition: transform .5s var(--ease-spring);
  animation: rvShimmer 7s ease-in-out infinite;
}
@keyframes rvShimmer { 0%,100% { background-position: 0% 0; } 50% { background-position: 100% 0; } }
.rv-score-num.rv-score-pop { animation: rvPop .6s var(--ease-spring), rvShimmer 7s ease-in-out .6s infinite; }
@keyframes rvPop { 0% { transform: scale(1); } 40% { transform: scale(1.06); } 100% { transform: scale(1); } }
.rv-score-verdict { font-family: var(--font-display); font-weight: 800; color: var(--text);
  font-size: clamp(20px, 2.6vw, 34px); letter-spacing: -.02em; margin-top: clamp(2px, .6vh, 8px); }
.rv-score-of { color: var(--muted); font-weight: 700; font-size: .62em; letter-spacing: .08em; text-transform: uppercase; }
.rv-badges { display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; }
.rv-hero .ring-label { margin-top: 0; font-size: clamp(12px, 1.25vw, 14px); }

/* grade orb — a glass jewel with a sweeping progress ring */
.rv-grade-orb { position: relative; width: clamp(96px, 11vw, 150px); aspect-ratio: 1; flex: none;
  display: grid; place-items: center; grid-template-areas: 'o';
  animation: rvBob 5s ease-in-out infinite; }
.rv-grade-orb > * { grid-area: o; }
.rv-grade-ring { width: 100%; height: 100%; overflow: visible; }
.rv-grade-track { fill: none; stroke: var(--surface-hi); stroke-width: 7; }
.rv-grade-fill { fill: none; stroke: url(#rvGradeG); stroke-width: 7; stroke-linecap: round;
  transition: stroke-dashoffset 1.9s var(--ease-out);
  filter: drop-shadow(0 0 12px color-mix(in srgb, var(--teal) 55%, transparent)); }
.rv-grade-orb b { font-family: var(--font-display); font-weight: 800; font-size: clamp(34px, 4vw, 54px); line-height: 1;
  background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  transform: translateY(-6px); }
.rv-grade-orb small { align-self: end; justify-self: center; margin-bottom: 18%; color: var(--muted);
  font-family: var(--font-display); font-weight: 700; font-size: clamp(10px, 1vw, 12px); letter-spacing: .18em; text-transform: uppercase; }
@keyframes rvBob { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }

/* the living heartbeat under the score */
.rv-pulse { width: min(880px, 96%); height: clamp(38px, 5vh, 60px); }
.rv-pulse svg { width: 100%; height: 100%; overflow: visible; }
.rv-ecg { fill: none; stroke: url(#rvEcgG); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.rv-ecg-glow { fill: none; stroke: var(--teal); stroke-width: 7; stroke-linecap: round; stroke-linejoin: round;
  opacity: .16; filter: blur(4px); }

/* the scoreboard — one seamless glass strip with quiet hairline dividers */
.rv-stats { display: flex; align-items: stretch; justify-content: center; width: min(1080px, 100%);
  padding: clamp(14px, 1.8vh, 22px) clamp(10px, 1.6vw, 26px); border-radius: 22px;
  background: color-mix(in srgb, var(--surface) 52%, transparent); border: 1px solid var(--border);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  box-shadow: 0 18px 44px -30px color-mix(in srgb, var(--blue-2) 40%, transparent); }
.rv-stat { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 4px;
  padding: 2px 6px; opacity: 0; animation: rvUp .55s cubic-bezier(.16,1,.3,1) forwards; animation-delay: calc(.24s + var(--i,0) * .09s); }
@keyframes rvUp { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
.rv-stat-div { width: 1px; align-self: stretch; margin: 4px 0;
  background: linear-gradient(180deg, transparent, var(--border) 30%, var(--border) 70%, transparent); flex: none; }
.rv-stat-v { font-family: var(--font-display); font-weight: 800; font-size: clamp(24px, 3vw, 38px); line-height: 1.02; color: var(--text); }
.rv-stat-l { display: inline-flex; align-items: center; gap: 5px; color: var(--muted);
  font-size: clamp(11px, 1.1vw, 12.5px); line-height: 1.25; font-weight: 650; }
.rv-stat-l svg { width: 13px; height: 13px; color: var(--teal); flex: none; }
.rv-stat--grade .rv-stat-v { background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.rv-stat--grade .rv-stat-l svg { color: var(--violet); }
.rv-stat--block .rv-stat-l svg { color: var(--danger); }

/* ── section headers — big, confident ── */
.rv-sec-head { text-align: center; display: grid; gap: 7px; margin-bottom: clamp(16px, 2.2vw, 26px); }
.rv-sec-eyebrow { display: inline-flex; align-items: center; justify-content: center; gap: 8px; color: var(--teal);
  font-family: var(--font-display); font-weight: 700; font-size: clamp(12px, 1.2vw, 14px); letter-spacing: .09em; text-transform: uppercase; }
.rv-sec-eyebrow svg { width: 16px; height: 16px; }
.rv-sec-head h2 { font-family: var(--font-display); font-weight: 800; font-size: clamp(24px, 3.2vw, 42px); letter-spacing: -0.028em; line-height: 1.06; }

/* ── SYSTEMS CONSTELLATION — the score LIVES INSIDE the dial; a soft band
   label beneath tells the story at a glance ── */
/* flex-wrap (not grid) so an incomplete LAST ROW stays centered on screen */
.rv-sys-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: clamp(12px, 1.4vw, 18px); }
.rv-sys-grid .rv-sys { flex: 1 1 clamp(150px, 12vw, 190px); max-width: 230px; }
.rv-sys { position: relative; display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center;
  padding: clamp(20px, 2.2vw, 28px) 12px clamp(16px, 1.8vw, 22px); border-radius: 26px;
  background: var(--grad-card); border: 1px solid var(--border); overflow: hidden;
  box-shadow: var(--shadow-sm);
  opacity: 0; animation: rvUp .5s cubic-bezier(.16,1,.3,1) forwards; animation-delay: calc(.1s + var(--i,0) * .05s); }
.rv-sys::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(120% 80% at 50% -20%, color-mix(in srgb, var(--teal) 7%, transparent), transparent 60%); }
.rv-sys > * { position: relative; }
.rv-sys-dial { position: relative; width: clamp(84px, 9vw, 112px); aspect-ratio: 1; display: grid; place-items: center; }
.rv-sys-dial svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.rv-sys-track { fill: none; stroke: var(--surface-hi); stroke-width: 5; }
.rv-sys-fill { fill: none; stroke-width: 5; stroke-linecap: round; transition: stroke-dashoffset 1s var(--ease-out); }
.rv-sys--strong .rv-sys-fill { stroke: var(--success); filter: drop-shadow(0 0 8px color-mix(in srgb, var(--success) 55%, transparent)); }
.rv-sys--building .rv-sys-fill { stroke: var(--warning); filter: drop-shadow(0 0 8px color-mix(in srgb, var(--warning) 50%, transparent)); }
.rv-sys--focus .rv-sys-fill { stroke: var(--danger); filter: drop-shadow(0 0 8px color-mix(in srgb, var(--danger) 50%, transparent)); }
.rv-sys-score { font-family: var(--font-display); font-weight: 800; font-size: clamp(26px, 2.8vw, 36px); color: var(--text); line-height: 1; }
.rv-sys-name { display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-size: clamp(13px, 1.25vw, 14.5px); font-weight: 700; color: var(--text); line-height: 1.2; }
.rv-sys-name svg { width: 16px; height: 16px; flex: none; }
.rv-sys--strong .rv-sys-name svg { color: var(--success); }
.rv-sys--building .rv-sys-name svg { color: var(--warning); }
.rv-sys--focus .rv-sys-name svg { color: var(--danger); }
.rv-sys-band { font-family: var(--font-display); font-weight: 700; font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase;
  padding: 4px 11px; border-radius: 999px; }
.rv-sys--strong .rv-sys-band { color: var(--success); background: color-mix(in srgb, var(--success) 11%, transparent); }
.rv-sys--building .rv-sys-band { color: var(--warning); background: color-mix(in srgb, var(--warning) 13%, transparent); }
.rv-sys--focus .rv-sys-band { color: var(--danger); background: color-mix(in srgb, var(--danger) 11%, transparent); }
/* Health Trajectory Age Estimate chip (IDLife-HS Domain Scorecard) — quiet,
   experimental-motivational figure under the band pill. Dual-theme via tokens. */
.rv-sys-tage { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 600;
  color: var(--muted); line-height: 1; padding: 3px 9px; border-radius: 999px;
  border: 1px dashed color-mix(in srgb, var(--border-hi) 60%, transparent); }
.rv-sys-tage svg { width: 11px; height: 11px; flex: none; opacity: .75; }
.rv-sys-tage b { font-family: var(--font-display); font-weight: 700; color: var(--text-2); font-size: 11.5px; }
/* Detail-sheet trajectory stat */
.ds-tage { display: inline-flex; align-items: baseline; gap: 7px; margin: 2px 0 6px; }
.ds-tage b { font-family: var(--font-display); font-weight: 800; font-size: 34px; line-height: 1; color: var(--text); }
.ds-tage span { font-size: 13px; font-weight: 600; color: var(--muted); }
.ds-tage.tone-teal b { color: var(--teal); }
.ds-tage.tone-blue b { color: var(--blue-2); }
.ds-tage.tone-amber b { color: var(--warning); }

/* ── TOGGLEABLE NARRATIVE PANELS — billion-dollar chapters. Each is a glass
   slab with a living gradient rail down the left edge, a glowing icon jewel,
   an idle sheen that drifts across on hover, and a spring chevron. ── */
.rv-panels { display: flex; flex-direction: column; gap: clamp(12px, 1.4vw, 18px); }
.rv-panel { position: relative; border-radius: 26px; border: 1px solid var(--border); background: var(--grad-card);
  overflow: hidden; box-shadow: var(--shadow-sm);
  transition: border-color .25s var(--ease-out), box-shadow .25s var(--ease-out), transform .25s var(--ease-out); }
/* the gradient rail — grows to full height when the chapter opens */
.rv-panel::before { content: ''; position: absolute; left: 0; top: 50%; width: 4px; height: 34%;
  transform: translateY(-50%); border-radius: 0 4px 4px 0;
  background: linear-gradient(180deg, var(--teal), var(--blue-2), var(--violet));
  opacity: .55; transition: height .4s var(--ease-out), opacity .3s var(--ease-out); }
.rv-panel:hover { transform: translateY(-3px); border-color: var(--border-hi); box-shadow: var(--shadow-md); }
.rv-panel:hover::before { opacity: .9; }
.rv-panel.open { border-color: var(--border-hi); box-shadow: var(--shadow-md); transform: none; }
.rv-panel.open::before { height: 100%; opacity: 1; }
/* drifting sheen across the head on hover */
.rv-panel-head { position: relative; width: 100%; display: flex; align-items: center; gap: clamp(14px, 1.6vw, 22px); cursor: pointer;
  padding: clamp(18px, 2.2vw, 28px) clamp(18px, 2.2vw, 30px); background: transparent; text-align: left; overflow: hidden; }
.rv-panel-head::after { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(110deg, transparent 30%, color-mix(in srgb, var(--teal) 7%, transparent) 50%, transparent 70%);
  background-size: 250% 100%; background-position: 160% 0; transition: background-position .8s var(--ease-out); }
.rv-panel-head:hover::after { background-position: -60% 0; }
/* the icon jewel — gradient disc with glow */
.rv-panel-ic { position: relative; width: clamp(50px, 5vw, 62px); height: clamp(50px, 5vw, 62px); flex: none; border-radius: 18px;
  display: grid; place-items: center; color: var(--ink-on-brand, #fff);
  background: var(--grad-brand);
  box-shadow: 0 12px 28px -10px color-mix(in srgb, var(--teal) 60%, transparent), inset 0 1px 0 rgba(255,255,255,.4);
  transition: transform .3s var(--ease-spring); }
.rv-panel-head:hover .rv-panel-ic { transform: scale(1.07) rotate(-4deg); }
.rv-panel-ic svg { width: clamp(23px, 2.4vw, 29px); height: clamp(23px, 2.4vw, 29px); }
.rv-panel-tt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.rv-panel-tt b { font-family: var(--font-display); font-weight: 800; font-size: clamp(18px, 2vw, 25px); color: var(--text); line-height: 1.12; letter-spacing: -.018em; }
.rv-panel-tt small { color: var(--muted); font-size: clamp(13px, 1.3vw, 15px); line-height: 1.32; }
.rv-panel-tag { flex: none; }
.rv-tag { display: inline-grid; place-items: center; min-width: 34px; height: 34px; padding: 0 11px; border-radius: 999px;
  font-family: var(--font-display); font-weight: 800; font-size: 15px;
  border: 1px solid transparent; }
.rv-tag--ok { color: var(--success); background: color-mix(in srgb, var(--success) 12%, transparent); border-color: color-mix(in srgb, var(--success) 26%, transparent); }
.rv-tag--warn { color: var(--warning); background: color-mix(in srgb, var(--warning) 14%, transparent); border-color: color-mix(in srgb, var(--warning) 28%, transparent); }
.rv-tag--block { color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); border-color: color-mix(in srgb, var(--danger) 26%, transparent); }
.rv-panel-chev { flex: none; width: 40px; height: 40px; border-radius: 50%; color: var(--muted);
  border: 1px solid var(--border); background: var(--fill-1);
  display: grid; place-items: center; transition: transform .34s var(--ease-spring), color .2s, border-color .2s, background .2s; }
.rv-panel-chev svg { width: 18px; height: 18px; }
.rv-panel-head:hover .rv-panel-chev { border-color: var(--border-hi); background: var(--fill-2); }
.rv-panel.open .rv-panel-chev { transform: rotate(180deg); color: var(--ink-on-brand, #fff);
  background: var(--grad-brand); border-color: transparent;
  box-shadow: 0 8px 20px -8px color-mix(in srgb, var(--teal) 60%, transparent); }
.rv-panel-body { max-height: 0; overflow: hidden; transition: max-height .45s var(--ease-out); }
.rv-panel-inner { padding: 0 clamp(18px, 2.2vw, 30px) clamp(20px, 2.2vw, 30px); }

.rv-story { color: var(--text-2); font-size: clamp(15px, 1.5vw, 18px); line-height: 1.65; margin: 0; }
.rv-factors { list-style: none; display: grid; gap: 11px; margin: 0; padding: 0; }
@media (min-width: 900px) { .rv-factors { grid-template-columns: 1fr 1fr; } }
.rv-factors li { display: grid; grid-template-columns: 30px 1fr; gap: 4px 13px; align-items: start;
  padding: 14px 16px; border-radius: 16px; background: color-mix(in srgb, var(--surface) 55%, transparent); border: 1px solid var(--border-soft); }
.rv-factors li span { grid-row: span 2; width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; }
.rv-factors li span svg { width: 15px; height: 15px; }
.rv-factors .rf-help span { color: var(--success); background: color-mix(in srgb, var(--success) 13%, transparent); }
.rv-factors .rf-hurt span { color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); }
.rv-factors li b { font-size: clamp(14px, 1.4vw, 15.5px); color: var(--text); line-height: 1.28; }
.rv-factors li em { font-style: normal; color: var(--muted); font-size: clamp(12.75px, 1.25vw, 14px); line-height: 1.44; }
.rv-opps { list-style: none; display: grid; gap: 10px; margin: 0; padding: 0; }
.rv-opps li { display: grid; grid-template-columns: 34px 1fr; gap: 13px; align-items: start;
  padding: 15px 17px; border-radius: 16px; background: color-mix(in srgb, var(--surface) 55%, transparent); border: 1px solid var(--border-soft); }
.rv-opps li > span { width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center;
  background: var(--grad-brand); color: var(--ink-on-brand); font-family: var(--font-display); font-weight: 800; font-size: 15px; }
.rv-opps li b { display: block; color: var(--text); font-size: clamp(14.5px, 1.5vw, 16.5px); line-height: 1.25; margin-bottom: 4px; }
.rv-opps li em { font-style: normal; color: var(--muted); font-size: clamp(13px, 1.3vw, 14.5px); line-height: 1.45; }

.rv-shield { display: grid; grid-template-columns: 62px 1fr; gap: 16px; align-items: start; }
.rv-shield-mark { width: 62px; height: 62px; border-radius: 20px; display: grid; place-items: center;
  background: radial-gradient(circle at 35% 20%, rgba(255,255,255,.18), transparent 34%), color-mix(in srgb, var(--blue-2) 12%, transparent);
  box-shadow: 0 16px 30px color-mix(in srgb, var(--blue-2) 22%, transparent); }
.rv-shield-mark .id-logo { width: 46px; height: 46px; }
.rv-shield-mark .id-logo-svg { width: 100%; height: 100%; display: block; }
.rv-shield-tx p { color: var(--text-2); font-size: clamp(14px, 1.4vw, 15.5px); line-height: 1.55; margin: 0 0 12px; }
.rv-shield-stat { display: inline-flex; align-items: center; gap: 11px; padding: 11px 16px; border-radius: 15px;
  background: color-mix(in srgb, var(--teal) 8%, transparent); border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent); }
.rv-shield-stat b { font-family: var(--font-display); font-weight: 800; font-size: 26px; color: var(--teal); }
.rv-shield-stat span { color: var(--text-2); font-size: 13.5px; }

.rv-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 4px; }

/* ── tablet ── */
@media (max-width: 1024px) {
  .rv-hero-core { gap: clamp(14px, 3.6vw, 40px); }
  .rv-score-num { font-size: clamp(96px, 20vw, 180px); }
}
/* ── phone ── */
@media (max-width: 760px) {
  .reveal-flow.rv2 { gap: 24px; }
  .rv-hero { padding: 24px 14px 20px; border-radius: 24px; }
  .rv-hero-core { flex-direction: column; gap: 10px; }
  /* the giant number leads; the grade orb sits beneath it */
  .rv-score-stage { order: -1; }
  .rv-score-num { font-size: clamp(128px, 37vw, 176px); }
  .rv-grade-orb { width: clamp(88px, 26vw, 112px); }
  /* the scoreboard strip wraps into a tidy 2-col mini grid */
  .rv-stats { flex-wrap: wrap; gap: 12px 0; padding: 16px 8px; }
  .rv-stat { flex: 1 1 44%; }
  .rv-stat-div { display: none; }
  .rv-sys-grid { gap: 10px; }
  .rv-sys-grid .rv-sys { flex: 1 1 40%; max-width: none; }
  .rv-sys { padding: 18px 10px 14px; }
  .rv-sys-dial { width: clamp(76px, 22vw, 96px); }
  .rv-panel-head { padding: 15px 14px; }
  .rv-panel-inner { padding: 0 14px 16px; }
  .rv-actions { flex-direction: column; align-items: stretch; }
  .rv-actions .btn { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .rv-aurora span, .rv-halo, .rv-orbit, .rv-motes i, .rv-grade-orb, .rv-score-num { animation: none; }
  .rv-motes { display: none; }
  .rv-stat, .rv-sys { animation: none; opacity: 1; }
  .rv-panel-body { transition: none; }
  .rv-sys-fill, .rv-grade-fill { transition: none; }
  .rv-score-num.rv-score-pop { animation: none; }
}

/* ===========================================================================
   5) RESULTS — FULL-BLEED DASHBOARD (uses the WHOLE screen on desktop)
   =========================================================================== */
#screen-results { display: none; }
#screen-results.active { display: block; min-height: 100dvh; }
.results-shell { width: 100%; }

/* sticky premium chrome — topbar + section nav + reading progress (one unit) */
.results-chrome { position: sticky; top: 0; z-index: 20; width: 100%;
  background: linear-gradient(180deg, rgba(4,9,26,0.92), rgba(4,9,26,0.55));
  -webkit-backdrop-filter: blur(22px); backdrop-filter: blur(22px);
  border-bottom: 2px solid color-mix(in srgb, var(--blue) 66%, transparent); }
.results-topbar { width: 100%;
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  flex-wrap: wrap; padding: 14px clamp(18px, 4vw, 56px); }
.results-topbar .brandmark-sm { order: 1; flex: none; white-space: nowrap; }
.results-topbar .brandmark-sm svg { width: 20px; height: 20px; }
.topbar-right { display: flex; align-items: center; gap: 12px; order: 2; }
.results-topbar > .results-nav { order: 3; }   /* own full-width row by default */
.results-topbar .res-status-icon {
  position: relative; width: 44px; height: 44px; padding: 0; gap: 0;
  flex: none; justify-content: center; border-radius: 50%; font-size: 0;
}
.results-topbar .res-status-icon svg { width: 20px; height: 20px; }
.results-topbar .res-status-icon .live {
  position: absolute; top: 5px; right: 5px; margin: 0;
  box-shadow: 0 0 8px var(--shield), 0 0 0 2px rgba(4,9,26,0.97);
}
.results-topbar .res-status-meth {
  color: var(--violet); background: color-mix(in srgb, var(--violet) 13%, transparent);
  border-color: color-mix(in srgb, var(--violet) 46%, transparent);
  box-shadow: 0 0 26px color-mix(in srgb, var(--violet) 14%, transparent), inset 0 1px 0 rgba(255,255,255,0.08);
}
[data-theme="light"] .results-topbar .res-status-icon .live { box-shadow: 0 0 8px var(--shield), 0 0 0 2px #fff; }
[data-theme="light"] .results-topbar .res-status-meth {
  color: color-mix(in srgb, var(--violet) 75%, var(--text));
  background: color-mix(in srgb, var(--violet) 9%, #fff);
  border-color: color-mix(in srgb, var(--violet) 38%, transparent);
}
/* score pill — the RESULTS topbar no longer renders one (removed to de-crowd the
   desktop chrome); this rule remains for the OVERVIEW topbar's "Score 68" chip. */
.score-chip { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-display); font-weight: 700;
  font-size: 14px; padding: 8px 16px; border-radius: var(--r-pill); border: 1px solid color-mix(in srgb, var(--blue) 66%, transparent);
  background: rgba(255,255,255,0.03); }
.score-chip b { background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }

/* ── $50B NAV — section chips · reading progress · back-to-top ────────── */
.results-nav { display: flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%; max-width: var(--w-results); margin-inline: auto;
  padding: 0 clamp(18px, 4vw, 56px) 11px;
  overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none;
  -webkit-overflow-scrolling: touch; overscroll-behavior-x: contain; }
.results-nav::-webkit-scrollbar { display: none; }
.rnav-chip { flex: none; display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--font-display); font-weight: 600; font-size: 12.5px; letter-spacing: .01em;
  color: var(--muted); padding: 8px 14px; border-radius: var(--r-pill); cursor: pointer;
  border: 1px solid transparent; background: transparent; white-space: nowrap;
  transition: color .18s, background .18s, border-color .18s, transform .18s var(--ease-spring);
  -webkit-tap-highlight-color: transparent; }
.rnav-chip svg { width: 14px; height: 14px; flex: none; opacity: .85; }
.rnav-chip:hover { color: var(--text-2); background: var(--fill-1); transform: translateY(-1px); }
.rnav-chip:active { transform: scale(.97); }
.rnav-chip:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.rnav-chip.active { color: var(--text); background: var(--fill-2);
  border-color: color-mix(in srgb, var(--teal) 42%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 16%, transparent),
              0 6px 18px -10px var(--teal-glow); }
.rnav-chip.active svg { color: var(--teal); opacity: 1; }
.rnav-n { display: inline-grid; place-items: center; min-width: 17px; height: 17px; padding: 0 5px;
  border-radius: var(--r-pill); background: var(--fill-2); color: var(--text-2);
  font-size: 10px; font-weight: 800; font-variant-numeric: tabular-nums; }
.rnav-chip.active .rnav-n { background: var(--grad-brand); color: var(--ink-on-brand); }
.rnav-chip.has-danger .rnav-n { background: var(--danger-soft); color: var(--danger);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--danger) 35%, transparent); }
.rnav-chip.has-danger.active .rnav-n { background: var(--danger); color: #fff; box-shadow: none; }

/* reading progress — a brand hairline along the chrome's bottom edge.
   transform-only scaleX (JS-driven) = zero layout/paint while scrolling. */
.results-progress { position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; z-index: 1;
  background: var(--grad-brand-3); transform-origin: left center; transform: scaleX(0);
  pointer-events: none; box-shadow: 0 0 12px rgba(20,224,203,0.45); }

/* back-to-top — floating glass FAB, appears past the hero */
.back-top { position: fixed; right: 18px; bottom: max(18px, env(safe-area-inset-bottom)); z-index: 55;
  width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--border); background: var(--glass-bg); color: var(--text-2);
  -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  box-shadow: var(--shadow-md); opacity: 0; transform: translateY(14px) scale(.9);
  pointer-events: none; transition: opacity .25s var(--ease-out), transform .25s var(--ease-out),
  color .2s, border-color .2s; }
.back-top svg { width: 18px; height: 18px; transform: rotate(180deg); }
.back-top.show { opacity: 1; transform: none; pointer-events: auto; }
.back-top:hover { color: var(--teal); border-color: var(--border-hi); transform: translateY(-3px); }
.back-top:active { transform: scale(.94); }
.back-top:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }

/* hero quick actions — answer the #1 intent ("show me the plan") in one tap */
.hero-cta { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 22px; }
.hero-cta .btn { min-height: 52px; padding: 14px 26px; font-size: 15px; }
.hero-cta .btn-ghost svg { width: 16px; height: 16px; color: var(--shield); }

/* fly-to-section landing offset (native fallback; JS compensates precisely) */
#sec-overview, #sec-systems, #sec-shield, #sec-plans, #sec-extras {
  scroll-margin-top: calc(var(--chrome-h, 112px) + 12px); }

/* Desktop (≥1025px): ONE tight, premium row — brand HARD-LEFT (hugging the edge)
   · a hairline divider · the section nav LEFT-ALIGNED right beside it · utilities
   far-right. The nav used to be CENTERED+grown, which on a crowded row clipped the
   first ("Overview") chip behind the brandmark; flex-start + min-width:0 left-aligns
   it tight to the divider and lets it scroll from the left instead of clipping. */
@media (min-width: 1025px) {
  .results-topbar { flex-wrap: nowrap; gap: 0;
    padding-left: clamp(18px, 1.8vw, 26px); padding-right: clamp(20px, 3vw, 44px); }
  .results-topbar .brandmark-sm, .results-topbar .res-brand { padding-right: clamp(16px, 1.5vw, 22px);
    margin-right: clamp(12px, 1.3vw, 18px); border-right: 1px solid var(--hairline); }
  .results-topbar > .results-nav { order: 2; flex: 1 1 auto; min-width: 0;
    justify-content: flex-start; width: auto; max-width: none; margin: 0; padding: 0; }
  .results-topbar > .topbar-right { order: 3; flex: none; }
}

/* content container — full width with breathing padding, capped very wide */
.results-shell > section, .results-hero, .results-grid, .tiers-band-inner, .results-secondary, .results-footer {
  width: 100%; max-width: var(--w-results); margin-inline: auto;
}
.results-pad { padding-inline: clamp(18px, 4vw, 56px); }

/* HERO band */
.results-hero { display: grid; grid-template-columns: minmax(260px, 0.9fr) 1.4fr; gap: clamp(24px, 3vw, 56px);
  align-items: center; padding: clamp(36px, 5vw, 72px) clamp(18px, 4vw, 56px) clamp(24px, 3vw, 40px); }
.hero-ring { position: relative; display: grid; place-items: center; gap: 16px; }
.hero-ring .ring-wrap { width: clamp(220px, 26vw, 320px); }
/* F384 · the Living Emblem replaces the flat ring when a health report exists */
.hero-ring .ring-wrap--emblem { width: clamp(250px, 30vw, 380px); }
.hero-emblem { width: 100%; height: auto; transform: none !important;   /* .ring-wrap svg rotates -90deg for the flat arc — the emblem is upright */
  filter: drop-shadow(0 24px 60px color-mix(in srgb, var(--blue) 22%, transparent)); }
.heroem-score { font: 700 92px var(--font-display); letter-spacing: -0.03em; fill: var(--text); }
.heroem-label { font: 700 11px var(--font-display); letter-spacing: .22em; fill: var(--muted); }
/* the hero rides the results screen — keep the orbit/ticks/comet ALIVE there
   (they're compositor-only transforms), but freeze under reduced motion */
@media (prefers-reduced-motion: reduce) {
  .hero-emblem .hrcv-ticks-g, .hero-emblem .hrcv-orbit-g,
  .hero-emblem .hrcv-arc, .hero-emblem .hrcv-star-dot { animation: none !important; }
  .hero-emblem .hrcv-comet-g { display: none; }
}
/* F381 · trajectory strip under the score ring — the report's signature number */
.hero-traj { display: flex; align-items: center; gap: 16px; padding: 13px 18px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--grad-card);
  box-shadow: var(--shadow-sm); }
.hero-traj-num { display: flex; align-items: center; gap: 10px; }
.hero-traj-num b { font: 700 34px/1 var(--font-display); letter-spacing: -0.02em;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hero-traj-num span { font: 700 9px/1.35 var(--font-display); letter-spacing: .14em;
  text-transform: uppercase; color: var(--muted); }
.hero-traj-vs { display: flex; flex-direction: column; gap: 6px; padding-left: 16px;
  border-left: 1px solid var(--hairline); }
.hero-traj-cal { font-size: 12px; color: var(--muted); }
.hero-traj-cal b { color: var(--text); font-family: var(--font-display); }
.hero-traj-chip { display: inline-flex; align-items: center; gap: 6px;
  font: 600 11px/1.3 var(--font-display); padding: 5px 10px; border-radius: var(--r-pill);
  border: 1px solid var(--border); color: var(--muted); }
.hero-traj-chip svg { width: 12px; height: 12px; flex: none; }
.hero-traj-chip.down { color: var(--shield); border-color: color-mix(in srgb, var(--shield) 40%, transparent); background: var(--shield-soft); }
.hero-traj-chip.up { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 40%, transparent);
  background: color-mix(in srgb, var(--warning) 8%, transparent); }
.hero-traj-chip.flat { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 36%, transparent); background: var(--blue-soft); }
.hero-copy .eyebrow { margin-bottom: 14px; display: inline-block; }
.hero-copy .h2 { margin-bottom: 14px; }
.hero-copy .lead { margin-bottom: 18px; }
.hero-opps { display: flex; flex-wrap: wrap; gap: 10px; }
.hero-opp { display: inline-flex; align-items: center; gap: 9px; font-size: 13.5px; color: var(--text-2);
  border: 1px solid var(--border); border-radius: var(--r-pill); padding: 9px 16px; background: rgba(255,255,255,0.025); }
.hero-opp svg { width: 15px; height: 15px; color: var(--teal); flex: none; }

/* primary dashboard grid (body systems board + what we learned + shield) */
/* F452 · desktop: the priorities board owns the full row; the progress column
   flows below it (tablet/phone already stacked — their overrides are untouched) */
.results-grid { display: grid; grid-template-columns: 1fr; gap: clamp(16px, 1.6vw, 24px);
  padding: 0 clamp(18px, 4vw, 56px) clamp(16px, 2vw, 24px); align-items: start; }

.block { padding: clamp(22px, 2.4vw, 34px); }
.block-title { display: flex; align-items: center; gap: 11px; font-family: var(--font-display); font-weight: 700;
  font-size: clamp(17px, 1.5vw, 20px); margin-bottom: 18px; color: var(--text); }
/* light theme washes these out against the card — go a shade deeper */
[data-theme="light"] .block-title { color: #04102e; letter-spacing: -0.01em; }
.block-title svg { width: 21px; height: 21px; color: var(--teal); }
.block-title .spacer { margin-left: auto; }

/* ===========================================================================
   MyAI COMPANION — results-page chat (handoff §P2.H)
   A faithful sibling of the DNA portal's MyAI, sitting above the systems board.
   Full-width section; the chat itself is a centered, focused command surface.
   =========================================================================== */
.myai-section { padding: 0 clamp(18px, 4vw, 56px); margin: clamp(10px, 1.4vw, 18px) auto clamp(20px, 2.4vw, 30px); position: relative; }
.myai-panel { max-width: 1180px; margin-inline: auto; padding: clamp(16px, 1.8vw, 22px) clamp(16px, 2vw, 26px); display: flex; flex-direction: column; gap: 14px; overflow: hidden; }

/* header */
.myai-head { display: flex; align-items: center; gap: 14px; }
.myai-id { display: flex; align-items: center; gap: 13px; min-width: 0; }
.myai-orb { position: relative; width: 44px; height: 44px; flex: none; display: grid; place-items: center; border-radius: var(--r-pill);
  background: var(--grad-brand-3); color: var(--ink-on-brand); box-shadow: var(--glow-teal); }
.myai-orb svg { width: 24px; height: 24px; }
.myai-live { position: absolute; right: 1px; bottom: 1px; width: 11px; height: 11px; border-radius: 50%; background: var(--success);
  border: 2px solid var(--surface); box-shadow: 0 0 10px var(--shield-glow); animation: pulse 2.4s ease-in-out infinite; }
.myai-id-txt { min-width: 0; }
.myai-name { font-family: var(--font-display); font-weight: 700; font-size: clamp(16px, 1.4vw, 19px); display: flex; align-items: center; gap: 9px; }
.myai-badge { display: inline-flex; align-items: center; gap: 5px; font-family: var(--font-body); font-weight: 800; font-size: 11px;
  letter-spacing: 0.02em; color: #2bbf9c; background: color-mix(in srgb, var(--shield) 20%, transparent);
  border: 1px solid color-mix(in srgb, var(--shield) 52%, transparent); border-radius: var(--r-pill); padding: 3px 9px; }
.myai-badge svg { color: currentColor; }
[data-theme="light"] .myai-badge { color: #046048; background: color-mix(in srgb, var(--shield) 22%, #ffffff);
  border-color: color-mix(in srgb, var(--shield) 60%, transparent); }
.myai-badge svg { width: 12px; height: 12px; }
.myai-sub { font-size: 12.5px; color: var(--muted); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.myai-actions { margin-left: auto; display: flex; gap: 8px; }
.myai-iconbtn { width: 38px; height: 38px; flex: none; display: grid; place-items: center; border-radius: var(--r-sm);
  background: var(--fill-2); border: 1px solid var(--border-soft); color: var(--text-2); cursor: pointer; transition: 0.18s; }
.myai-iconbtn:hover { color: var(--teal); border-color: var(--border-hi); background: var(--fill-hover); transform: translateY(-1px); }
.myai-iconbtn svg { width: 18px; height: 18px; }

/* messages */
.myai-scroll { max-height: clamp(280px, 38vh, 460px); min-height: 168px; overflow-y: auto; overscroll-behavior: contain;
  border-radius: var(--r-md); background: var(--well); border: 1px solid var(--hairline); padding: 16px; scrollbar-width: thin; }
.myai-messages { display: flex; flex-direction: column; gap: 14px; }
.myai-msg { display: flex; gap: 10px; max-width: 100%; }
.myai-msg.myai-user { justify-content: flex-end; }
.myai-av { width: 30px; height: 30px; flex: none; display: grid; place-items: center; border-radius: var(--r-pill);
  background: var(--grad-brand-3); color: var(--ink-on-brand); margin-top: 2px; }
.myai-av svg { width: 17px; height: 17px; }
.myai-bubble { max-width: 76%; padding: 12px 15px; border-radius: 16px; font-size: 14.5px; line-height: 1.62; color: var(--text); }
.myai-assistant .myai-bubble { background: var(--surface-2); border: 1px solid var(--border-soft); border-top-left-radius: 6px; }
.myai-user .myai-bubble { background: var(--grad-brand); color: var(--ink-on-brand); border-bottom-right-radius: 6px; font-weight: 500; }
.myai-bubble p { margin: 0 0 9px; } .myai-bubble p:last-child { margin-bottom: 0; }
.myai-bubble ul, .myai-bubble ol { margin: 6px 0 9px; padding-left: 20px; } .myai-bubble li { margin: 3px 0; }
.myai-bubble strong { color: var(--text); font-weight: 700; }
.myai-assistant .myai-bubble strong { color: #ffffff; }
.myai-bubble code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.88em; background: var(--fill-2); padding: 1px 6px; border-radius: 6px; }
.myai-follow { margin-top: 10px !important; padding-top: 9px; border-top: 1px dashed var(--border); color: var(--teal); font-weight: 600; }
.myai-error .myai-bubble { border-color: var(--danger-soft); }

/* rich-formatted assistant replies — ported MyAI formatter, IDN-tokenized */
.myai-reply-text { font-size: 14.5px; line-height: 1.62; }
.myai-reply-text p { margin: 9px 0; }
.myai-reply-text > p:first-child { margin-top: 0; } .myai-reply-text > p:last-child { margin-bottom: 0; }
.myai-reply-text a { color: var(--teal); }
.myai-reply-text code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.88em; background: var(--fill-2); padding: 1px 6px; border-radius: 6px; }
.myai-tag { display: inline-block; padding: 2px 9px; border-radius: 6px; font-weight: 700; font-size: 11.5px; letter-spacing: 0.4px; vertical-align: middle; white-space: nowrap; }
/* follow-up question rendered as its own brand-tinted second bubble */
.myai-followq .myai-bubble { background: linear-gradient(135deg, var(--teal-soft), var(--blue-soft)); border: 1px solid var(--border-hi); color: var(--text); font-weight: 600; }
.myai-followq .myai-bubble p { margin: 0; }

/* F136 · MyAI assessment gate — the unlock CTA rides inside the chat */
.myai-unlock .myai-bubble { background: transparent; border: 0; padding: 0; box-shadow: none; flex: 1; min-width: 0; max-width: none; }
.myai-unlock-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: 100%; white-space: normal; text-align: center; line-height: 1.3; font-size: 14px; padding: 12px 14px; }
.myai-unlock-btn svg { width: 15px; height: 15px; flex-shrink: 0; }

/* ── F137 · First-timer contact capture — the account step before Q1 ───────
   Same visual language as every other question (q-wrap/q-headline/q-subtext);
   inputs mirror the .sp-input search field so the whole flow feels like ONE
   instrument. Dual-theme via tokens — no hardcoded colors. */
.idg-form { margin: 26px auto 0; display: flex; flex-direction: column; gap: 16px; max-width: 560px; width: 100%; }
.idg-row { display: flex; gap: 14px; }
.idg-row .idg-field { flex: 1; min-width: 0; }
.idg-field { display: flex; flex-direction: column; gap: 7px; }
.idg-field > span { font-size: 12.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.idg-field input { width: 100%; min-height: 56px; padding: 0 18px; border-radius: var(--r-md);
  background: var(--surface); border: 1.5px solid var(--border); color: var(--text);
  font-family: inherit; font-size: 16px; box-shadow: var(--shadow-sm);
  transition: border-color .18s, box-shadow .18s, background .18s; }
.idg-field input::placeholder { color: var(--muted-2); }
.idg-field input:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 4px var(--teal-soft); }
.idg-err { margin: -4px 0 0; font-size: 14px; font-weight: 600; color: var(--danger); text-align: center; }
.idg-go { margin-top: 6px; align-self: center; }
.idg-note { margin: 20px auto 0; }
@media (max-width: 560px) {
  .idg-row { flex-direction: column; gap: 16px; }
  .idg-go { align-self: stretch; }
}

/* ── QUESTION-OVERHAUL INPUT TYPES (Aug 2026) ────────────────────────────────
   text (first name) · date (birth date MM/DD/YYYY) · height (ft/in) ·
   weight (lbs) · state-select. Same instrument language as .idg-field —
   tokens only, dual-theme, reduced-motion safe, 3-breakpoint responsive. */
.qi-wrap { margin: 30px auto 0; max-width: 560px; width: 100%; }
.qi-field { display: flex; flex-direction: column; gap: 7px; }
.qi-field > span { font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); }
.qi-field input, .qi-field select {
  width: 100%; min-height: 60px; padding: 0 18px; border-radius: var(--r-md);
  background: var(--surface); border: 1.5px solid var(--border); color: var(--text);
  font-family: inherit; font-size: 19px; font-weight: 600; box-shadow: var(--shadow-sm);
  transition: border-color .18s, box-shadow .18s; }
.qi-field input::placeholder { color: var(--muted-2); font-weight: 500; }
.qi-field input:focus, .qi-field select:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 4px var(--teal-soft); }
.qi-text input { text-align: center; font-size: 22px; }
/* Birth date / height / weight — segmented numeric fields on one row */
.qi-dob-row { display: flex; align-items: flex-end; gap: 12px; justify-content: center; }
.qi-dob-f { flex: 0 0 auto; width: 96px; }
.qi-dob-f input { text-align: center; font-variant-numeric: tabular-nums; font-size: 22px; padding: 0 8px; }
.qi-dob-y { width: 128px; }
.qi-w-f { width: 150px; }
.qi-dob-sep { padding-bottom: 16px; font-size: 20px; font-weight: 700; color: var(--muted-2); user-select: none; }
.qi-err { margin: 12px 0 0; font-size: 14px; font-weight: 600; color: var(--danger); text-align: center; }
/* State dropdown — premium select with our own chevron */
.qi-select { position: relative; }
.qi-select select { appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 48px; }
.qi-select select:invalid { color: var(--muted-2); }
.qi-select-chev { position: absolute; right: 16px; bottom: 18px; pointer-events: none; color: var(--muted); }
.qi-select-chev svg { width: 18px; height: 18px; }
@media (max-width: 640px) {
  .qi-dob-row { gap: 8px; }
  .qi-dob-f { width: 84px; }
  .qi-dob-y { width: 110px; }
  .qi-dob-f input { font-size: 19px; min-height: 56px; }
  .qi-field input, .qi-field select { min-height: 56px; font-size: 17px; }
}
@media (prefers-reduced-motion: reduce) {
  .qi-field input, .qi-field select { transition: none; }
}
/* markdown tables inside replies */
.myai-table-wrap { margin: 10px 0 12px; border: 1px solid var(--border-hi); border-radius: 10px; overflow-x: auto; -webkit-overflow-scrolling: touch; background: var(--fill-1); }
.myai-table { width: 100%; min-width: 380px; border-collapse: collapse; }
.myai-table thead tr { background: var(--teal-soft); }
.myai-table th { text-align: left; padding: 9px 12px; font-size: 12px; font-weight: 700; color: var(--teal); border-bottom: 1px solid var(--border); white-space: nowrap; }
.myai-table td { padding: 8px 12px; font-size: 13px; line-height: 1.45; border-bottom: 1px solid var(--hairline); vertical-align: top; color: var(--text-2); }
.myai-table tbody tr:last-child td { border-bottom: none; }

/* [ConvoPDF] download card chip appended under a document reply */
.myai-pdf-chip { display: flex; align-items: center; gap: 12px; width: 100%; margin-top: 12px; padding: 12px 14px; cursor: pointer; text-align: left;
  border-radius: var(--r-sm); border: 1px solid var(--border-hi); background: linear-gradient(135deg, var(--teal-soft), var(--blue-soft)); color: var(--text); transition: transform 0.16s, box-shadow 0.16s, border-color 0.16s; }
.myai-pdf-chip:hover { transform: translateY(-1px); border-color: var(--teal); box-shadow: var(--glow-teal); }
.myai-pdf-chip.is-loading { opacity: 0.6; pointer-events: none; }
.myai-pdf-ic { width: 38px; height: 38px; flex: none; display: grid; place-items: center; border-radius: 10px; color: var(--ink-on-brand); background: var(--grad-brand); }
.myai-pdf-ic svg { width: 20px; height: 20px; }
.myai-pdf-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.myai-pdf-meta b { font-size: 13.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.myai-pdf-meta i { font-style: normal; font-size: 11.5px; color: var(--text-2); }
.myai-pdf-dl { width: 30px; height: 30px; flex: none; display: grid; place-items: center; border-radius: var(--r-pill); color: var(--teal); background: var(--surface-2); }
.myai-pdf-dl svg { width: 16px; height: 16px; }

/* transient toast (export/PDF feedback) */
.myai-toast { position: fixed; left: 50%; bottom: 26px; transform: translate(-50%, 16px); z-index: 9999; max-width: 90vw;
  padding: 11px 18px; border-radius: var(--r-pill); font-size: 13.5px; font-weight: 600; color: var(--ink-on-brand);
  background: var(--grad-brand); box-shadow: var(--shadow-md), var(--glow-teal); opacity: 0; pointer-events: none; transition: opacity 0.22s, transform 0.22s; }
.myai-toast.show { opacity: 1; transform: translate(-50%, 0); }

/* typing indicator */
.myai-typing { display: inline-flex; gap: 5px; align-items: center; }
.myai-typing span { width: 7px; height: 7px; border-radius: 50%; background: var(--muted); animation: myai-blink 1.3s infinite ease-in-out; }
.myai-typing span:nth-child(2) { animation-delay: 0.18s; } .myai-typing span:nth-child(3) { animation-delay: 0.36s; }
@keyframes myai-blink { 0%, 80%, 100% { opacity: 0.25; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-3px); } }

/* suggestion chips */
.myai-suggest { display: flex; flex-wrap: wrap; gap: 8px; }
.myai-chip { font-size: 13px; color: var(--text-2); background: var(--fill-2); border: 1px solid var(--border-soft);
  border-radius: var(--r-pill); padding: 8px 14px; cursor: pointer; transition: 0.18s; }
.myai-chip:hover { color: var(--teal); border-color: var(--border-hi); background: var(--teal-soft); transform: translateY(-1px); }

/* input row */
.myai-input { display: flex; align-items: flex-end; gap: 10px; background: var(--surface-2); border: 1px solid var(--border-soft);
  border-radius: var(--r-md); padding: 8px 8px 8px 16px; transition: border-color 0.18s, box-shadow 0.18s; }
.myai-input:focus-within { border-color: var(--border-hi); box-shadow: 0 0 0 3px var(--teal-soft); }
.myai-input textarea { flex: 1; resize: none; border: none; outline: none; background: transparent; color: var(--text);
  font-family: var(--font-body); font-size: 15px; line-height: 1.5; padding: 8px 0; max-height: 160px; }
.myai-input textarea::placeholder { color: var(--muted-2); }
.myai-send { width: 42px; height: 42px; flex: none; display: grid; place-items: center; border: none; cursor: pointer;
  border-radius: var(--r-sm); background: var(--grad-brand); color: var(--ink-on-brand); box-shadow: var(--glow-teal); transition: 0.18s; }
.myai-send:hover { transform: translateY(-1px) scale(1.03); }
.myai-send:disabled { opacity: 0.5; cursor: default; transform: none; box-shadow: none; }
.myai-send svg { width: 20px; height: 20px; }
.myai-foot { display: flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--muted-2); }
.myai-foot svg { width: 13px; height: 13px; }

/* history drawer */
.myai-drawer { max-width: 1180px; margin: 10px auto 0; background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--r-md); box-shadow: var(--shadow-md); overflow: hidden; }
.myai-drawer-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--hairline);
  font-family: var(--font-display); font-weight: 700; font-size: 15px; }
.myai-drawer-head > span { display: inline-flex; align-items: center; gap: 9px; } .myai-drawer-head svg { width: 18px; height: 18px; color: var(--teal); }
.myai-drawer-list { max-height: 320px; overflow-y: auto; padding: 10px; }
.myai-drawer-empty { padding: 26px 16px; text-align: center; color: var(--muted); font-size: 13.5px; }
.myai-drawer-group { margin-bottom: 8px; }
.myai-drawer-label { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted-2); padding: 8px 10px 5px; }
.myai-convo { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 11px 12px; border-radius: var(--r-sm);
  background: transparent; border: 1px solid transparent; color: var(--text-2); cursor: pointer; transition: 0.15s; }
.myai-convo:hover { background: var(--fill-hover); border-color: var(--border-soft); color: var(--text); }
.myai-convo-title { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 14px; }
.myai-convo-meta { font-size: 11.5px; color: var(--muted-2); flex: none; }

/* light theme nudges */
[data-theme="light"] .myai-scroll { background: rgba(16,42,98,0.035); }
[data-theme="light"] .myai-assistant .myai-bubble { background: #ffffff; }
[data-theme="light"] .myai-assistant .myai-bubble strong { color: var(--blue); }
[data-theme="light"] .myai-input, [data-theme="light"] .myai-drawer { background: #ffffff; }

/* on the long results + overview screens, cards are opaque for scroll perf — match it */
body.on-results .myai-panel, body.on-results .myai-drawer,
body.on-overview .myai-panel, body.on-overview .myai-drawer { background: linear-gradient(180deg, rgba(22,35,77,0.97), rgba(10,18,40,0.985)); }
[data-theme="light"] body.on-results .myai-panel, [data-theme="light"] body.on-results .myai-drawer,
[data-theme="light"] body.on-overview .myai-panel, [data-theme="light"] body.on-overview .myai-drawer { background: linear-gradient(180deg, #ffffff, #f7faff); }

@media (max-width: 640px) {
  .myai-bubble { max-width: 86%; }
  .myai-sub { display: none; }
  .myai-scroll { max-height: 46vh; }
}
@media (prefers-reduced-motion: reduce) {
  .myai-live, .myai-typing span { animation: none; }
  .myai-send:hover, .myai-chip:hover, .myai-iconbtn:hover { transform: none; }
}

/* ===========================================================================
   MyAI — FLOATING LAUNCHER + DOCKED POPUP   (the $1B bottom-right experience)
   The chat surface (.myai-panel) is the SAME component with the SAME ids; only
   its shell changed. A fixed launcher pill opens a docked popup (desktop) or a
   full-screen sheet (mobile). Both .myai-fab and .myai-pop are position:fixed.
   MyAI is now a body-level SINGLETON (one instance, shared by the results +
   overview screens). CSS gates it to those two screens so it never leaks onto
   the landing/question screens.
   =========================================================================== */

/* Body-level singleton: show MyAI ONLY on the results + overview screens. */
body:not(.on-results):not(.on-overview) .myai-fab,
body:not(.on-results):not(.on-overview) .myai-pop { display: none !important; }

/* ── launcher pill ──────────────────────────────────────────────────────── */
.myai-fab { position: fixed; right: clamp(14px, 2vw, 28px); bottom: max(18px, env(safe-area-inset-bottom));
  z-index: 70; display: inline-flex; align-items: center; gap: 11px; padding: 8px 18px 8px 8px;
  border: 2px solid color-mix(in srgb, var(--blue) 66%, transparent); border-radius: var(--r-pill); background: var(--surface-hi);
  color: var(--text); cursor: pointer; box-shadow: var(--shadow-md), var(--glow-teal);
  transition: transform .22s var(--ease-spring), box-shadow .25s, opacity .22s;
  animation: myaiFabIn .6s var(--ease-spring); }
.myai-fab::after { content: ''; position: absolute; inset: -2px; z-index: -1; border-radius: inherit;
  pointer-events: none; box-shadow: 0 0 22px 2px var(--teal-glow); opacity: .3;
  animation: myaiFabBreath 3.8s ease-in-out infinite; }
.myai-fab:hover { transform: translateY(-2px); border-color: var(--blue); box-shadow: var(--shadow-md), 0 0 30px 3px var(--teal-glow); }
.myai-fab:active { transform: scale(.97); }
.myai-fab:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }
.myai-fab.gone { opacity: 0; transform: scale(.6) translateY(10px); pointer-events: none; }
.myai-fab-orb { position: relative; width: 40px; height: 40px; flex: none; display: grid; place-items: center;
  border-radius: var(--r-pill); background: var(--grad-brand-3); color: var(--ink-on-brand); box-shadow: var(--glow-teal); }
.myai-fab-orb svg { width: 22px; height: 22px; }
.myai-fab-orb .myai-live { right: 0; bottom: 0; }
.myai-fab-label { font-family: var(--font-display); font-weight: 600; font-size: 14.5px; white-space: nowrap; letter-spacing: .01em; }
.myai-fab-label b { font-weight: 700; background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
@keyframes myaiFabIn { from { opacity: 0; transform: translateY(20px) scale(.9); } to { opacity: 1; transform: none; } }
@keyframes myaiFabBreath { 0%, 100% { opacity: .26; } 50% { opacity: .68; } }

/* T1.2 · compact icon-only launcher for preview visitors — never covers the
   Begin-my-assessment CTA. Label collapses; orb carries the identity alone. */
.myai-fab.myai-fab--mini { padding: 6px; gap: 0; }
.myai-fab.myai-fab--mini .myai-fab-label { display: none; }
.myai-fab.myai-fab--mini .myai-fab-orb { width: 42px; height: 42px; }

/* ── docked popup shell ─────────────────────────────────────────────────── */
.myai-pop { position: fixed; right: clamp(14px, 2vw, 28px); bottom: max(18px, env(safe-area-inset-bottom));
  z-index: 80; width: min(420px, calc(100vw - 28px)); height: min(798px, calc(100dvh - 116px));
  display: flex; transform-origin: bottom right; opacity: 0; transform: translateY(16px) scale(.97);
  pointer-events: none; transition: opacity .26s var(--ease-out), transform .34s var(--ease-spring), width 1.1s var(--ease-lux); }
.myai-pop.show { opacity: 1; transform: none; pointer-events: auto; }
.myai-pop[hidden] { display: none; }
.myai-pop-scrim { display: none; }

/* Computer (≥1025px): the header collapses to ONE compact ~65px row, so let the
   docked popup rise to just shy of it — top lands ~74px from the viewport top
   (18px bottom anchor + the chat's own height), a hair below the top bar. The
   smaller-width clearance above is left alone (there the results nav can wrap to
   a second row, so it needs the taller gap). */
@media (min-width: 1025px) {
  .myai-pop { height: min(1040px, calc(100dvh - 92px)); }
}

/* the chat card fills the popup; its scroll region flexes to all free height */
.myai-pop .myai-panel { position: relative; width: 100%; height: 100%; max-width: none; margin: 0;
  border-radius: var(--r-lg); box-shadow: var(--shadow-lg), var(--glow-teal); }
/* LIGHT MODE — make the popped-up companion unmistakable: wrap the card in the
   signature teal back-glow (an even all-around halo, not the faint default drop
   glow) plus a crisp teal ring so the whole outline reads green and aesthetic.
   Scoped to .myai-pop, so only the floating popup gets it (never the inline one). */
[data-theme="light"] .myai-pop .myai-panel {
  box-shadow:
    var(--shadow-lg),                                          /* depth — lift off the page */
    0 0 0 1.5px color-mix(in srgb, var(--teal) 52%, transparent), /* teal ring outline */
    0 0 30px rgba(27, 197, 212, 0.30),                         /* tight green halo */
    0 0 84px rgba(27, 197, 212, 0.20);                         /* wide ambient back-glow */
}
/* paint the gradient hairline fully teal in light mode so every edge glows green */
[data-theme="light"] .myai-pop .myai-panel.card-grad-border::after {
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 70%, transparent),
    color-mix(in srgb, var(--teal) 38%, transparent) 55%, color-mix(in srgb, var(--teal) 20%, transparent)); }
.myai-pop .myai-scroll { max-height: none; min-height: 0; flex: 1 1 auto; }
.myai-pop .myai-close:hover { color: var(--danger); border-color: var(--danger-soft); }

/* history drawer → full overlay sheet inside the popup card */
.myai-pop .myai-drawer { position: absolute; inset: 0; margin: 0; max-width: none; border-radius: var(--r-lg);
  display: flex; flex-direction: column; z-index: 4; box-shadow: none; }
.myai-pop .myai-drawer[hidden] { display: none; }
.myai-pop .myai-drawer-list { flex: 1 1 auto; max-height: none; }

/* keep the back-to-top button clear of the launcher (both bottom-right) */
.results-shell .back-top,
body.on-overview .ov-top { bottom: max(84px, calc(env(safe-area-inset-bottom) + 76px)); }

/* ── mobile → full-screen sheet + scrim ─────────────────────────────────── */
@media (max-width: 640px) {
  /* F151 · phones: the launcher is always the tight icon-only orb (the T1.2
     mini treatment for everyone) — no label pill crowding the footer bar. */
  .myai-fab { right: 12px; padding: 5px; gap: 0; border-width: 1.5px; }
  .myai-fab .myai-fab-label { display: none; }
  .myai-fab-orb { width: 40px; height: 40px; }
  .myai-fab::after { display: none; }   /* no breathing glow halo on phones — quieter */
  .myai-pop { inset: 0; right: 0; bottom: 0; width: auto; height: 100dvh; transform-origin: bottom center;
    transform: translateY(26px) scale(.99); }
  .myai-pop .myai-panel { margin-top: max(18px, env(safe-area-inset-top));
    height: calc(100dvh - max(18px, env(safe-area-inset-top))); border-radius: var(--r-lg) var(--r-lg) 0 0; }
  .myai-pop-scrim { display: block; position: absolute; inset: 0; z-index: -1;
    background: rgba(4, 9, 26, .55); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
}

@media (prefers-reduced-motion: reduce) {
  .myai-fab { animation: none; }
  .myai-fab::after { animation: none; }
  .myai-fab:hover, .myai-fab:active { transform: none; }
  .myai-pop { transition: opacity .12s linear; transform: none; }
  .myai-pop.show { transform: none; }
}

/* Body systems board (replaces the old radar — interactive, zero-blur, fast) */
.systems-board { display: flex; flex-direction: column; }
.systems-board .block-title { flex-wrap: wrap; row-gap: 10px; }
.sys-sort { display: inline-flex; gap: 4px; padding: 4px; border-radius: var(--r-pill);
  border: 1px solid var(--border-soft); background: rgba(255,255,255,0.03); }
.ss-btn { border: 0; cursor: pointer; font: 600 11.5px/1 var(--font-body); letter-spacing: 0.02em;
  color: var(--muted); background: transparent; padding: 7px 13px; border-radius: var(--r-pill);
  transition: color 0.2s, background 0.2s; }
.ss-btn:hover { color: var(--text-2); }
.ss-btn.active { color: var(--ink-on-brand); background: var(--grad-brand); box-shadow: 0 4px 14px -6px var(--teal-glow); }

.sys-tally { display: flex; flex-wrap: wrap; gap: 14px; margin: -4px 0 14px; }
.tly { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--muted); }
.tly b { color: var(--text); font-family: var(--font-display); font-size: 13px; }
.tly::before { content: ''; width: 8px; height: 8px; border-radius: 50%; }
.t-strong::before   { background: var(--teal);    box-shadow: 0 0 8px var(--teal-glow); }
.t-building::before { background: var(--blue);    box-shadow: 0 0 8px rgba(91,149,255,0.5); }
.t-focus::before    { background: var(--warning); box-shadow: 0 0 8px rgba(255,181,71,0.45); }

/* ── "Since your last check-in" movement strip (returning users only) ──────
   Real stored history (§P7): how many systems improved / held / dipped vs the
   previous run. A quiet gradient-washed band above the rows. */
.sys-move { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 10px;
  margin: 0 0 14px; padding: 11px 14px; border-radius: var(--r-md);
  border: 1px solid rgba(20, 224, 203, 0.16);
  background: linear-gradient(110deg, var(--teal-soft), var(--blue-soft) 70%); }
.sys-move > svg { width: 15px; height: 15px; color: var(--teal); flex: none; }
.sm-cap { font-size: 12px; color: var(--text-2); }
.sm-cap b { color: var(--text); font-weight: 700; }
.sm-chips { display: inline-flex; gap: 7px; flex-wrap: wrap; margin-left: auto; }
.mv { font-family: var(--font-display); font-size: 11px; font-weight: 700;
  padding: 4px 10px; border-radius: var(--r-pill); border: 1px solid transparent; }
.mv.pos { color: var(--success); background: var(--shield-soft); border-color: rgba(58,235,181,0.25); }
.mv.neg { color: var(--warning); background: rgba(255,181,71,0.10); border-color: rgba(255,181,71,0.28); }
.mv.neu { color: var(--muted); background: var(--fill-2); border-color: var(--border-soft); }

.sys-list { display: flex; flex-direction: column; gap: 7px; }
.sys-row { display: grid; grid-template-columns: minmax(132px, 176px) 1fr 36px 76px; grid-template-areas: "name bar score chip";
  align-items: center; gap: 14px; width: 100%; text-align: left; cursor: pointer;
  padding: 11px 14px; border-radius: var(--r-md); font-family: inherit;
  border: 1px solid var(--border-soft); background: rgba(255,255,255,0.022); color: inherit;
  transition: transform 0.22s var(--ease-out), border-color 0.2s, background 0.2s; }
/* returning users: a 5th ▲/▼ delta column slots in between bar and score */
.sys-list.has-deltas .sys-row { grid-template-columns: minmax(132px, 176px) 1fr 44px 36px 76px;
  grid-template-areas: "name bar delta score chip"; }
.sys-row:hover { transform: translateX(5px); border-color: var(--border-hi); background: rgba(255,255,255,0.05); }
.sys-row:active { transform: translateX(5px) scale(0.99); }
.sys-row:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.sys-name { grid-area: name; font-size: 13px; font-weight: 600; color: var(--text-2); line-height: 1.25;
  display: flex; align-items: center; gap: 6px; }
.sys-star { color: var(--warning); font-size: 10px; transform: translateY(-1px); flex: none; }
.sys-bar { grid-area: bar; position: relative; height: 8px; border-radius: 99px; background: rgba(255,255,255,0.07); overflow: hidden; }
.sys-fill { position: absolute; inset: 0 auto 0 0; border-radius: 99px; }
.sys-range { position: absolute; top: 0; bottom: 0; border-radius: 99px; background: rgba(255,255,255,0.08); }
/* ghost tick — where this system scored LAST time (sits above the fill) */
.sys-prev { position: absolute; top: -2px; bottom: -2px; width: 2px; margin-left: -1px;
  background: rgba(255,255,255,0.55); border-radius: 1px; z-index: 1;
  box-shadow: 0 0 6px rgba(255,255,255,0.35); }
.band-strong   .sys-fill { background: linear-gradient(90deg, #0fbfae, var(--teal));    box-shadow: 0 0 12px var(--teal-glow); }
.band-building .sys-fill { background: linear-gradient(90deg, #3f6fe8, var(--blue));    box-shadow: 0 0 12px rgba(91,149,255,0.45); }
.band-focus    .sys-fill { background: linear-gradient(90deg, #e98c2e, var(--warning)); box-shadow: 0 0 12px rgba(255,181,71,0.4); }
/* ▲/▼ since-last-time chip */
.sys-d { grid-area: delta; justify-self: end; font-family: var(--font-display);
  font-size: 10.5px; font-weight: 800; letter-spacing: 0.02em; padding: 3px 8px;
  border-radius: var(--r-pill); white-space: nowrap; font-variant-numeric: tabular-nums; }
.sys-d.pos { color: var(--success); background: var(--shield-soft); }
.sys-d.neg { color: var(--warning); background: rgba(255,181,71,0.12); }
.sys-d.neu { color: var(--muted-2); background: var(--fill-2); }
.sys-d.new { color: var(--violet); background: var(--violet-soft); text-transform: uppercase; font-size: 9px; letter-spacing: 0.1em; }
.sys-score { grid-area: score; font-family: var(--font-display); font-weight: 800; font-size: 16px; text-align: right; }
.band-strong   .sys-score { color: var(--teal); }
.band-building .sys-score { color: var(--blue); }
.band-focus    .sys-score { color: var(--warning); }
.sys-chip { grid-area: chip; justify-self: end; font-size: 10px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  padding: 5px 10px; border-radius: var(--r-pill); border: 1px solid; }
.band-strong   .sys-chip { color: var(--teal);    border-color: rgba(20,224,203,0.3);  background: rgba(20,224,203,0.07); }
.band-building .sys-chip { color: var(--blue);    border-color: rgba(91,149,255,0.3);  background: rgba(91,149,255,0.07); }
.band-focus    .sys-chip { color: var(--warning); border-color: rgba(255,181,71,0.32); background: rgba(255,181,71,0.08); }
/* F411 · inactive domain — honest "Not enough data yet" row: muted, no band
   color, non-interactive cursor (there is no score sheet to open). */
.band-nodata .sys-chip { color: var(--muted); border-color: var(--line); background: transparent; text-transform: none; letter-spacing: 0.02em; }
.band-nodata .sys-name, .band-nodata .sys-score-nodata { color: var(--muted); }
.band-nodata { opacity: 0.72; cursor: default; }
.band-nodata .sys-bar { opacity: 0.4; }
.sys-hint { display: flex; align-items: center; gap: 7px; margin-top: 14px; font-size: 12px; color: var(--muted); }
.sys-hint svg { width: 13px; height: 13px; color: var(--teal); flex: none; }
/* user-triggered re-sort: quick settle pulse so the reorder reads as intentional */
.sys-list.resorted .sys-row { animation: sysSettle 0.34s var(--ease-out) backwards; }
@keyframes sysSettle { from { opacity: 0.35; transform: translateY(4px); } }

/* F452 · per-row Health Trajectory Age Estimate chip — COMPUTER ONLY (≥1025px).
   Tablet/phone grids are untouched: the chip is display:none below 1025px. */
.sys-tage { display: none; }
@media (min-width: 1025px) {
  .sys-tage { grid-area: tage; display: inline-flex; align-items: center; gap: 5px;
    justify-self: end; font-size: 11px; font-weight: 600; color: var(--muted); line-height: 1;
    padding: 4px 9px; border-radius: 999px; white-space: nowrap;
    border: 1px dashed color-mix(in srgb, var(--border-hi) 60%, transparent); }
  .sys-tage:empty { display: none; }
  .sys-tage svg { width: 11px; height: 11px; flex: none; opacity: .75; }
  .sys-tage b { font-family: var(--font-display); font-weight: 700; color: var(--text-2); font-size: 11.5px; }
  .sys-row { grid-template-columns: minmax(132px, 176px) 1fr auto 36px 76px;
    grid-template-areas: "name bar tage score chip"; }
  .sys-list.has-deltas .sys-row { grid-template-columns: minmax(132px, 176px) 1fr auto 44px 36px 76px;
    grid-template-areas: "name bar tage delta score chip"; }
}

/* system detail inside the why-modal */
.sysm-hero { display: grid; grid-template-columns: auto 1fr; align-items: baseline; gap: 6px 10px; margin-bottom: 16px; }
.sysm-num { font-family: var(--font-display); font-weight: 800; font-size: 44px; line-height: 1; }
.sysm-of { font-size: 12.5px; color: var(--muted); }
.sysm-bar { grid-column: 1 / -1; height: 9px; border-radius: 99px; background: rgba(127,127,127,0.16); overflow: hidden; position: relative; }
.sysm-bar span { display: block; height: 100%; border-radius: 99px; }
.sysm-bar .sysm-prev { position: absolute; top: -1px; bottom: -1px; width: 2px; margin-left: -1px;
  background: rgba(255,255,255,0.6); border-radius: 1px; z-index: 1; }
[data-theme="light"] .sysm-bar .sysm-prev { background: rgba(16,42,98,0.45); }
.sysm-hero.band-strong   .sysm-num { color: var(--teal); }
.sysm-hero.band-building .sysm-num { color: var(--blue); }
.sysm-hero.band-focus    .sysm-num { color: var(--warning); }
.sysm-hero.band-strong   .sysm-bar span { background: linear-gradient(90deg, #0fbfae, var(--teal)); }
.sysm-hero.band-building .sysm-bar span { background: linear-gradient(90deg, #3f6fe8, var(--blue)); }
.sysm-hero.band-focus    .sysm-bar span { background: linear-gradient(90deg, #e98c2e, var(--warning)); }
/* "61 → 65 ▲ +4 since Jun 12" trend line under the hero */
.sysm-trend { display: flex; align-items: center; gap: 9px; margin: -6px 0 16px;
  padding: 10px 13px; border-radius: var(--r-sm); font-size: 13px; color: var(--text-2);
  background: var(--fill-1); border: 1px solid var(--border-soft); }
.sysm-trend svg { width: 15px; height: 15px; color: var(--teal); flex: none; }
.sysm-trend b { color: var(--text); font-family: var(--font-display); }
.sysm-trend i { font-style: normal; color: var(--muted); font-size: 12px; }
.smt { font-family: var(--font-display); font-weight: 800; font-size: 12.5px; padding: 2px 8px; border-radius: var(--r-pill); }
.smt.pos { color: var(--success); background: var(--shield-soft); }
.smt.neg { color: var(--warning); background: rgba(255,181,71,0.12); }
.smt.neu { color: var(--muted); background: var(--fill-2); }

/* what we learned */
.learned-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.learned-item { padding: 15px 17px; border-radius: var(--r-md); background: rgba(255,255,255,0.028); border: 1px solid var(--border-soft); transition: 0.2s; }
.learned-item:hover { border-color: var(--border); background: rgba(255,255,255,0.045); }
.learned-item .k { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.11em; color: var(--muted); }
.learned-item .v { font-weight: 600; margin-top: 6px; font-size: 14.5px; }

/* ── $1B PROGRESS BLOCK — trajectory · cohort · grade · milestone ───────── */
.rg-side { display: flex; flex-direction: column; gap: var(--s-4); min-width: 0; }
.progress-block { display: flex; flex-direction: column; }

/* grade medallion — the $1B seal (A teal · B blue · C amber · D red) */
.grade-medallion { --g1: var(--teal); --g2: var(--blue);
  position: relative; width: 52px; height: 52px; border-radius: 50%; flex: none; cursor: pointer;
  display: grid; place-items: center; border: none; padding: 0;
  background: conic-gradient(from 210deg, var(--g1), var(--g2), var(--g1));
  box-shadow: 0 0 24px -4px color-mix(in srgb, var(--g1) 55%, transparent),
              inset 0 1px 0 rgba(255,255,255,0.35);
  transition: transform .2s var(--ease-spring), box-shadow .2s; }
.grade-medallion::before { content: ''; position: absolute; inset: 3px; border-radius: 50%;
  background: var(--surface-2); }
.grade-medallion span { position: relative; font-family: var(--font-display); font-weight: 800;
  font-size: 19px; letter-spacing: -0.02em;
  background: linear-gradient(135deg, var(--g1), var(--g2));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.grade-medallion:hover { transform: translateY(-2px) scale(1.05);
  box-shadow: 0 6px 30px -6px color-mix(in srgb, var(--g1) 70%, transparent), inset 0 1px 0 rgba(255,255,255,0.4); }
.grade-medallion:active { transform: scale(.96); }
.grade-medallion:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }
.grade-medallion.grade-b { --g1: var(--blue);    --g2: var(--violet); }
.grade-medallion.grade-c { --g1: var(--warning); --g2: #ff8a5c; }
.grade-medallion.grade-d { --g1: var(--danger);  --g2: var(--warning); }

/* delta tiles — since last · since first · check-ins */
.prog-deltas { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 16px; }
.pg-delta { padding: 13px 8px 11px; border-radius: var(--r-md); text-align: center;
  background: var(--fill-1); border: 1px solid var(--border-soft); transition: border-color .2s, background .2s; }
.pg-delta:hover { border-color: var(--border); background: var(--fill-2); }
.pg-delta .v { display: block; font-family: var(--font-display); font-weight: 800;
  font-size: clamp(19px, 1.7vw, 24px); line-height: 1.05; font-variant-numeric: tabular-nums; }
.pg-delta .v.pos { color: var(--shield); text-shadow: 0 0 22px var(--shield-glow); }
.pg-delta .v.neg { color: var(--danger); }
.pg-delta .v.neu { background: var(--grad-text); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.pg-delta .k { display: block; font-size: 10px; letter-spacing: .07em; text-transform: uppercase;
  color: var(--muted); margin-top: 5px; }

/* the trend chart — SVG line/area + HTML dot overlays (always-round dots) */
.pg-chart { position: relative; width: 100%; height: clamp(150px, 17vw, 196px);
  border-radius: var(--r-md); border: 1px solid var(--border-soft); background: var(--fill-1);
  margin-bottom: 16px; touch-action: pan-y; }
.pg-chart svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.pg-grid { stroke: var(--grid-line); stroke-width: 1; stroke-dasharray: 2 5; fill: none; }
.pg-cross { position: absolute; top: 10px; bottom: 26px; width: 1px; background: var(--border-hi);
  opacity: 0; transform: translateX(-50%); pointer-events: none; transition: opacity .15s; }
.pg-cross.on { opacity: .6; }
.pg-dot { position: absolute; width: 22px; height: 22px; margin: -11px 0 0 -11px; padding: 0;
  border-radius: 50%; border: none; background: transparent; cursor: pointer; z-index: 2; }
.pg-dot::after { content: ''; position: absolute; inset: 6px; border-radius: 50%;
  background: var(--surface-hi); border: 2px solid var(--teal);
  box-shadow: 0 0 10px var(--teal-glow); transition: transform .18s var(--ease-spring), box-shadow .18s; }
.pg-dot:hover::after, .pg-dot.active::after { transform: scale(1.35); box-shadow: 0 0 16px var(--teal-glow); }
.pg-dot:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.pg-dot.now::after { background: var(--grad-brand); border-color: rgba(255,255,255,.85); }
.pg-dot.now::before { content: ''; position: absolute; inset: 0; border-radius: 50%;
  border: 1.5px solid color-mix(in srgb, var(--teal) 55%, transparent);
  animation: pgPulse 2.4s var(--ease-out) infinite; }
@keyframes pgPulse { 0% { transform: scale(.6); opacity: 1; } 70%, 100% { transform: scale(1.5); opacity: 0; } }
.pg-tip { position: absolute; transform: translate(-50%, calc(-100% - 14px)); z-index: 3;
  display: flex; align-items: baseline; gap: 7px; padding: 8px 12px; border-radius: 12px;
  background: var(--surface-hi); border: 1px solid var(--border-hi); box-shadow: var(--shadow-md);
  opacity: 0; pointer-events: none; transition: opacity .15s, left .18s var(--ease-out), top .18s var(--ease-out);
  white-space: nowrap; }
.pg-tip.on { opacity: 1; }
.pg-tip b { font-family: var(--font-display); font-weight: 800; font-size: 17px;
  background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.pg-tip span { font-size: 11px; color: var(--muted); }
.pg-tip em { font-style: normal; font-size: 11px; font-weight: 700; }
.pg-tip em.up { color: var(--shield); }
.pg-tip em.down { color: var(--danger); }
/* single check-in — the readout is pinned, so the crosshair is just noise */
.pg-chart.pg-solo { cursor: default; }
.pg-chart.pg-solo .pg-cross { display: none; }
.pg-chart.pg-solo .pg-dot::after { transform: scale(1.35); box-shadow: 0 0 16px var(--teal-glow); }
.pg-axis { position: absolute; bottom: 7px; font-size: 10px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted-2); pointer-events: none; }
.pg-x-l { left: 12px; }
.pg-x-r { right: 12px; }

/* cohort track — you vs the IDLife average */
.prog-compare { margin-bottom: 16px; }
.pgc-head { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-2); margin-bottom: 20px; }
.pgc-head svg { width: 15px; height: 15px; color: var(--blue); flex: none; }
.pgc-head b { font-family: var(--font-display); color: var(--text); }
.pg-track { position: relative; height: 10px; border-radius: 99px; margin: 0 6px 26px;
  background: linear-gradient(90deg, color-mix(in srgb, var(--danger) 28%, transparent),
    color-mix(in srgb, var(--warning) 30%, transparent) 38%,
    color-mix(in srgb, var(--teal) 32%, transparent) 72%,
    color-mix(in srgb, var(--shield) 38%, transparent)); }
.pg-avg, .pg-you { position: absolute; top: 50%; width: 0; height: 0; }
.pg-avg i { position: absolute; left: 0; top: -9px; transform: translateX(-50%); width: 2px; height: 18px;
  border-radius: 2px; background: var(--muted); opacity: .8; }
.pg-avg .pgl { position: absolute; top: -26px; left: 0; transform: translateX(-50%); font-size: 10px;
  color: var(--muted); white-space: nowrap; letter-spacing: .03em; }
.pg-you i { position: absolute; left: 0; top: -8px; transform: translateX(-50%); width: 16px; height: 16px;
  border-radius: 50%; background: var(--grad-brand); border: 2.5px solid var(--surface-hi);
  box-shadow: 0 0 16px var(--teal-glow); }
.pg-you .pgl { position: absolute; top: 14px; left: 0; transform: translateX(-50%); font-size: 11px;
  font-weight: 600; color: var(--text-2); white-space: nowrap; }
.pg-you .pgl b { font-family: var(--font-display); color: var(--teal); }

/* next milestone */
.prog-milestone { border-top: 1px solid var(--border-soft); padding-top: 14px; }
.pg-ms-row { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  font-size: 13px; color: var(--text-2); }
.pg-ms-row svg { width: 14px; height: 14px; color: var(--teal); vertical-align: -2px; margin-right: 3px; }
.pg-ms-row b { color: var(--text); }
.pg-away { flex: none; font-size: 11px; font-weight: 700; color: var(--teal);
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent); border-radius: var(--r-pill);
  padding: 4px 11px; background: var(--teal-soft); white-space: nowrap; }
.prog-milestone .meter { margin: 12px 0 2px; }

/* SHIELD block (spans full width below grid) */
.shield-block { border-color: rgba(58,235,181,0.22); }
.shield-block::after { content:''; position:absolute; inset:0; border-radius: inherit; pointer-events:none;
  background: radial-gradient(120% 100% at 0% 0%, rgba(58,235,181,0.10), transparent 45%); }
.shield-block .block-title svg { color: var(--shield); }
.shield-screened { display: flex; flex-wrap: wrap; gap: 9px; margin-bottom: 16px; }
.shield-screened .chip { font-size: 12px; padding: 7px 13px; border-radius: var(--r-pill);
  background: rgba(58,235,181,0.08); border: 1px solid rgba(58,235,181,0.25); color: var(--shield); text-transform: capitalize; }
.blocked-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }
.blocked-card { display: flex; gap: 14px; padding: 16px 18px; border-radius: var(--r-md);
  background: var(--danger-soft); border: 1px solid rgba(255,97,115,0.22); }
.blocked-card .bx { width: 38px; height: 38px; flex: none; border-radius: 11px; display: grid; place-items: center;
  background: rgba(255,97,115,0.14); color: var(--danger); }
.blocked-card .bx svg { width: 18px; height: 18px; }
.blocked-card .bname { font-weight: 700; font-size: 15px; }
.blocked-card .bcat { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.09em; color: var(--danger); margin: 4px 0 7px; }
.blocked-card .breason { font-size: 13px; color: var(--text-2); line-height: 1.5; }
.blocked-card .bdisc { font-size: 11.5px; color: var(--muted-2); margin-top: 7px; font-style: italic; }
/* Shield ALL-CLEAR — a slim, on-brand band (never a giant glyph). Medallion +
   one line of copy + a quiet “0 conflicts” pill; everything is token-driven. */
.shield-clear { display: flex; align-items: center; gap: 14px; margin: 4px 0 16px;
  padding: 14px 16px; border-radius: var(--r-md); border: 1px solid rgba(58,235,181,0.22);
  background: linear-gradient(135deg, rgba(58,235,181,0.10), transparent 55%), var(--fill-1); }
.sc-medal { display: flex; align-items: center; justify-content: center; flex: none;
  width: 40px; height: 40px; border-radius: 12px; color: var(--shield);
  background: rgba(58,235,181,0.12); border: 1px solid rgba(58,235,181,0.28);
  box-shadow: 0 0 18px rgba(58,235,181,0.18); }
.sc-medal svg { width: 20px; height: 20px; }
.sc-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.sc-copy strong { font-family: var(--font-display); font-size: 14px; letter-spacing: -0.01em; color: var(--text); }
.sc-copy span { font-size: 12.5px; line-height: 1.5; color: var(--muted); }
.sc-pill { display: inline-flex; align-items: center; gap: 6px; flex: none;
  padding: 6px 12px; border-radius: var(--r-pill); font-size: 12px; font-weight: 700;
  color: var(--shield); border: 1px solid rgba(58,235,181,0.30); background: rgba(58,235,181,0.08); }
.sc-pill svg { width: 12px; height: 12px; }
@media (max-width: 640px) {
  .shield-clear { flex-wrap: wrap; }
  .sc-copy { flex-basis: calc(100% - 54px); }
  .sc-pill { margin-left: 54px; }
}
.provider-reminder { display: flex; gap: 11px; align-items: center; margin-top: 16px; font-size: 12.5px; color: var(--muted);
  border-top: 1px solid var(--border-soft); padding-top: 16px; }
.provider-reminder svg { width: 17px; height: 17px; flex: none; color: var(--shield); }

/* ─────────────────────────────────────────────────────────────────────────
   SEARCH PICKER — medications / conditions  (theme-aware · inline · premium)
   Results render IN FLOW (never a floating layer) so they can't overlap the
   Continue button or run off-screen. All colour comes from design tokens, so
   light + dark both look intentional.
   ──────────────────────────────────────────────────────────────────────── */
.search-picker { margin-top: 22px; }
.sp { position: relative; }
.sp-field { position: relative; display: flex; align-items: center; }
.sp-field .sp-ico { position: absolute; left: 17px; width: 19px; height: 19px; color: var(--muted); pointer-events: none; }
.sp-field .sp-ico svg { width: 19px; height: 19px; }
.sp-input { width: 100%; min-height: 58px; padding: 0 46px; border-radius: var(--r-md);
  background: var(--surface); border: 1.5px solid var(--border); color: var(--text);
  font-family: inherit; font-size: 16px; box-shadow: var(--shadow-sm);
  transition: border-color .18s, box-shadow .18s, background .18s; }
.sp-input::placeholder { color: var(--muted-2); }
.sp-input:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 4px var(--teal-soft); }
.sp-input:disabled { opacity: .55; }
.sp-spin { position: absolute; right: 16px; width: 18px; height: 18px; color: var(--teal); animation: sp-rot 1.1s linear infinite; }
.sp-spin svg { width: 18px; height: 18px; }
@keyframes sp-rot { to { transform: rotate(360deg); } }

/* results — inline list, themed surface */
.sp-results { margin-top: 10px; background: var(--surface); border: 1.5px solid var(--border);
  border-radius: var(--r-md); box-shadow: var(--shadow-md); padding: 6px;
  max-height: 336px; overflow-y: auto; overscroll-behavior: contain;
  animation: spDrop .18s var(--ease-out) both; }
@keyframes spDrop { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
.sp-row { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 11px 12px;
  border-radius: 12px; background: transparent; border: none; color: var(--text); font-family: inherit;
  font-size: 15px; cursor: pointer; transition: background .12s; }
.sp-row:hover, .sp-row.active { background: var(--teal-soft); }
.sp-row-ico { width: 22px; height: 22px; flex: none; color: var(--muted); display: grid; place-items: center; }
.sp-row-ico svg { width: 19px; height: 19px; }
.sp-row-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.sp-row-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sp-row-name mark { background: transparent; color: var(--teal); font-weight: 700; }
.sp-row-sub { font-size: 11.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sp-tag { flex: none; font-size: 10.5px; color: var(--muted); display: inline-flex; align-items: center; gap: 5px;
  text-transform: uppercase; letter-spacing: .05em; padding: 3px 8px; border-radius: var(--r-pill); background: var(--fill-1); }
.sp-tag.screened { color: var(--shield); background: var(--shield-soft); }
.sp-tag svg { width: 12px; height: 12px; }
.sp-row-add { flex: none; width: 22px; height: 22px; display: grid; place-items: center; color: var(--muted); opacity: .55; }
.sp-row:hover .sp-row-add, .sp-row.active .sp-row-add { color: var(--teal); opacity: 1; }
.sp-row-add svg { width: 16px; height: 16px; }
.sp-noresult { display: flex; align-items: center; gap: 13px; padding: 16px 14px; color: var(--muted); }
.sp-noresult svg { width: 20px; height: 20px; flex: none; opacity: .7; }
.sp-noresult b { display: block; color: var(--text-2); font-weight: 600; font-size: 14px; }
.sp-noresult span { font-size: 12.5px; }

/* selected chips */
.sp-selected { margin-top: 20px; }
.sp-sel-head { display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: var(--muted);
  text-transform: uppercase; letter-spacing: .08em; margin-bottom: 11px; }
.sp-sel-head svg { width: 14px; height: 14px; color: var(--teal); }
.sp-count { display: inline-grid; place-items: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: var(--r-pill);
  background: var(--grad-brand); color: var(--ink-on-brand); font-weight: 800; font-size: 11px; text-transform: none; letter-spacing: 0; }
.sp-chips { display: flex; flex-wrap: wrap; gap: 9px; }
.sp-chip { display: inline-flex; align-items: center; gap: 8px; padding: 8px 8px 8px 13px; border-radius: var(--r-pill);
  background: var(--teal-soft); border: 1px solid var(--teal); color: var(--text); font-size: 14px; font-weight: 500; }
.sp-chip > svg { width: 15px; height: 15px; color: var(--teal); flex: none; }
.sp-chip-x { width: 23px; height: 23px; display: grid; place-items: center; border-radius: 50%; border: none;
  background: var(--fill-2); color: var(--muted); cursor: pointer; transition: background .14s, color .14s; }
.sp-chip-x:hover { background: var(--danger-soft); color: var(--danger); }
.sp-chip-x svg { width: 12px; height: 12px; }

/* quick-add — common conditions (tap-grid) + condition-driven medications */
.sp-quick { margin-top: 20px; }
.sp-quick-head { display: flex; align-items: center; gap: 9px; font-family: var(--font-display); font-weight: 600;
  font-size: 13.5px; color: var(--text-2); margin-bottom: 13px; }
.sp-quick-head svg { width: 17px; height: 17px; flex: none; color: var(--teal); }
.sp-quick-label { font-size: 12px; color: var(--muted); margin: 16px 0 9px; }
.sp-quick-label b { color: var(--text-2); font-weight: 600; }
.sp-quick-grid { display: flex; flex-wrap: wrap; gap: 9px; }
.sp-quick-pill { display: inline-flex; align-items: center; gap: 8px; padding: 10px 14px; border-radius: var(--r-pill);
  background: var(--surface); border: 1.5px solid var(--border); color: var(--text); font-family: inherit;
  font-size: 14px; font-weight: 500; cursor: pointer;
  transition: transform .14s var(--ease-spring), border-color .16s, background .16s, box-shadow .16s; }
.sp-quick-pill:hover { transform: translateY(-2px); border-color: var(--border-hi); box-shadow: var(--shadow-sm); }
.sp-quick-pill:active { transform: translateY(0) scale(.98); }
.sp-quick-pill.added { background: var(--teal-soft); border-color: var(--teal); }
.sp-pill-shield { display: inline-flex; color: var(--shield); }
.sp-pill-shield svg { width: 14px; height: 14px; }
.sp-pill-name { white-space: nowrap; }
.sp-pill-ico { display: inline-flex; color: var(--muted); }
.sp-quick-pill.added .sp-pill-ico { color: var(--teal); }
.sp-pill-ico svg { width: 15px; height: 15px; }
.sp-quick-note { display: flex; align-items: center; gap: 11px; margin-top: 4px; padding: 14px 16px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px dashed var(--border); color: var(--muted); font-size: 13.5px; }
.sp-quick-note svg { width: 18px; height: 18px; flex: none; color: var(--teal); }

.sp-empty-hint { margin-top: 16px; font-size: 13px; color: var(--muted); }

/* ─────────────────────────────────────────────────────────────────────────
   JACOB FIX — data-quality flags (badge + hover tooltip + run-level panel)
   ──────────────────────────────────────────────────────────────────────── */
.jacob-fix { position: relative; display: inline-flex; align-items: center; gap: 5px; vertical-align: middle;
  padding: 3px 9px; border-radius: var(--r-pill); background: rgba(255,181,71,0.14); border: 1px solid var(--warning);
  color: var(--warning); font-size: 11px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase;
  cursor: help; white-space: nowrap; }
.jacob-fix svg { width: 13px; height: 13px; }
.jacob-fix.compact { padding: 2px 7px; font-size: 10px; }
.jacob-fix .jf-tip { position: absolute; bottom: calc(100% + 10px); left: 50%; transform: translateX(-50%) translateY(4px);
  width: max-content; max-width: 320px; padding: 12px 14px; border-radius: 12px; z-index: 60;
  background: var(--bg-elev, #0e1730); border: 1px solid var(--warning); box-shadow: 0 18px 44px rgba(0,0,0,0.5);
  color: var(--text-2); font-size: 12.5px; font-weight: 500; line-height: 1.55; text-transform: none; letter-spacing: 0;
  opacity: 0; visibility: hidden; transition: opacity .16s, transform .16s; pointer-events: none; text-align: left; }
.jacob-fix .jf-tip::after { content: ''; position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  border: 7px solid transparent; border-top-color: var(--warning); }
.jacob-fix:hover .jf-tip, .jacob-fix:focus .jf-tip, .jacob-fix:focus-visible .jf-tip {
  opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0); }

.jacob-panel { margin: 4px 0 18px; padding: 16px 18px; border-radius: var(--r-md);
  background: rgba(255,181,71,0.07); border: 1px solid rgba(255,181,71,0.35); border-left: 4px solid var(--warning); }
.jacob-panel-head { display: flex; align-items: center; gap: 9px; color: var(--warning); font-size: 14px; }
.jacob-panel-head svg { width: 18px; height: 18px; flex: none; }
.jacob-panel-list { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.jacob-panel-list li { display: flex; align-items: center; gap: 11px; flex-wrap: wrap; font-size: 13.5px; }
.jf-pill { font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; padding: 4px 9px;
  border-radius: var(--r-pill); background: rgba(255,181,71,0.16); color: var(--warning); }
.jf-subject { font-weight: 600; color: var(--text); }

.blocked-card.severe { border-color: var(--danger); box-shadow: 0 0 0 1px var(--danger) inset; }
.blocked-card .why-pill { margin-top: 11px; }

/* TIERS band — full-bleed gradient section */
.tiers-band { width: 100%; padding: clamp(40px, 5vw, 80px) 0; margin-top: clamp(16px, 2vw, 28px);
  background:
    radial-gradient(80% 120% at 50% 0%, rgba(79,142,247,0.08), transparent 60%),
    linear-gradient(180deg, rgba(8,15,35,0.0), rgba(8,15,35,0.5)); border-block: 1px solid var(--hairline); }
.tiers-band-inner { padding-inline: clamp(18px, 4vw, 56px); }
.tier-intro { text-align: center; margin-bottom: clamp(26px, 3vw, 44px); }
.tier-intro .h2 { margin: 10px 0; }
.tiers { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 1.8vw, 28px); align-items: stretch; }
.tier { position: relative; padding: clamp(24px, 2.2vw, 34px) clamp(20px, 1.8vw, 28px); display: flex; flex-direction: column;
  border: 1.5px solid var(--border); border-radius: var(--r-xl); background: var(--grad-card);
  -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  transition: transform 0.28s var(--ease-spring), border-color 0.25s, box-shadow 0.25s; }
/* each tier carries one hue of the brand triad — Essential teal · Targeted blue · Comprehensive violet */
.tier[data-ti="0"] { --thue: var(--teal); }
.tier[data-ti="1"] { --thue: var(--blue); }
.tier[data-ti="2"] { --thue: var(--violet); }
.tier::before { content: ''; position: absolute; top: 0; left: 26px; right: 26px; height: 2px; border-radius: 99px;
  background: linear-gradient(90deg, transparent, var(--thue, var(--teal)), transparent); opacity: .75; }
.tier:hover { transform: translateY(-8px); border-color: color-mix(in srgb, var(--thue, var(--teal)) 45%, transparent); box-shadow: var(--shadow-lg); }
.tier.recommended { border-color: var(--border-hi); box-shadow: var(--glow-teal), var(--shadow-lg);
  background: linear-gradient(180deg, rgba(20,224,203,0.07), rgba(10,18,40,0.82)); transform: scale(1.02); }
.tier.recommended:hover { transform: translateY(-8px) scale(1.02); }
.tier .rec-flag { position: absolute; top: -13px; left: 50%; transform: translateX(-50%); font-family: var(--font-display);
  font-size: 11px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; background: var(--grad-brand);
  color: var(--ink-on-brand); padding: 6px 18px; border-radius: var(--r-pill); white-space: nowrap; box-shadow: var(--glow-teal); }
.tier .tname { font-family: var(--font-display); font-weight: 700; font-size: clamp(21px, 1.8vw, 26px); }
.tier .tcount { color: var(--thue, var(--teal)); border-color: color-mix(in srgb, var(--thue, var(--teal)) 32%, transparent);
  background: color-mix(in srgb, var(--thue, var(--teal)) 9%, transparent); }
.tier .ttag { font-size: 13px; color: var(--muted); margin-top: 4px; min-height: 2.6em; }
.tier .tprice { font-family: var(--font-display); font-weight: 700; font-size: clamp(30px, 2.6vw, 40px); margin: 16px 0 4px;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.tier .tprice small { font-size: 14px; color: var(--muted); font-weight: 500; -webkit-text-fill-color: var(--muted); }
/* budget honesty chip — only present when real pricing is live (P4.E) */
.tier .tfit { display: inline-flex; align-items: center; gap: 6px; margin: 2px 0 10px; padding: 5px 12px;
  border-radius: var(--r-pill); font-size: 11.5px; font-weight: 700; letter-spacing: .01em; border: 1px solid transparent; }
.tier .tfit svg { width: 12px; height: 12px; flex: none; }
.tier .tfit-within { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 32%, transparent);
  background: color-mix(in srgb, var(--teal) 9%, transparent); }
.tier .tfit-stretch { color: var(--amber, #f0b429); border-color: color-mix(in srgb, var(--amber, #f0b429) 32%, transparent);
  background: color-mix(in srgb, var(--amber, #f0b429) 9%, transparent); }
.tier .tfit-above { color: var(--violet); border-color: color-mix(in srgb, var(--violet) 32%, transparent);
  background: color-mix(in srgb, var(--violet) 9%, transparent); }
.tier .tbest { font-size: 12.5px; color: var(--text-2); margin-bottom: 18px; }
.tier .titems { list-style: none; display: flex; flex-direction: column; gap: 11px; margin-bottom: 20px; flex: 1; }
.tier .titems > li { font-size: 13.5px; display: flex; gap: 9px; align-items: flex-start; color: var(--text-2); }
.tier .titems > li > svg { width: 15px; height: 15px; color: var(--thue, var(--teal)); flex: none; margin-top: 3px; }
/* anchored value footer — bottoms align across all three tiers (no dead space) */
.tier .tier-foot { margin-top: auto; padding-top: 16px; border-top: 1px solid var(--border-soft);
  display: flex; flex-direction: column; gap: 15px; }
.tier .tier-value { display: flex; align-items: stretch; gap: 8px; }
.tier .tv { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 3px; text-align: center; padding: 2px 4px; }
.tier .tv + .tv { border-left: 1px solid var(--border-soft); }
.tier .tv b { font-family: var(--font-display); font-weight: 700; font-size: 14.5px; color: var(--text);
  display: inline-flex; align-items: center; gap: 5px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.tier .tv b svg { width: 13px; height: 13px; color: var(--shield); flex: none; }
.tier .tv span { font-size: 9.5px; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); white-space: nowrap; }

/* why pills — glass pill triggers (open the premium why-modals) */
.why-pill { display: inline-flex; align-items: center; gap: 7px; margin-top: 10px; padding: 7px 13px;
  border-radius: var(--r-pill); border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent); color: var(--teal);
  font-family: inherit; font-size: 12px; font-weight: 700; cursor: pointer; white-space: nowrap;
  transition: transform .16s var(--ease-spring), background .18s, border-color .18s, box-shadow .18s; }
.why-pill svg { width: 13px; height: 13px; flex: none; }
.why-pill:hover { transform: translateY(-1px); background: color-mix(in srgb, var(--teal) 14%, transparent);
  border-color: color-mix(in srgb, var(--teal) 50%, transparent);
  box-shadow: 0 6px 18px -8px var(--teal-glow); }
.why-pill:active { transform: scale(.97); }
.why-pill:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.why-pill.danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 32%, transparent);
  background: color-mix(in srgb, var(--danger) 8%, transparent); }
.why-pill.danger:hover { background: color-mix(in srgb, var(--danger) 14%, transparent);
  border-color: color-mix(in srgb, var(--danger) 52%, transparent);
  box-shadow: 0 6px 18px -8px color-mix(in srgb, var(--danger) 45%, transparent); }
.why-src { display: none; }
.why-level { font-size: 12.5px; margin-bottom: 9px; color: var(--text-2); line-height: 1.5; }
.why-level:last-child { margin-bottom: 0; }
.why-level b { display: block; font-size: 10px; text-transform: uppercase; letter-spacing: 0.09em; color: var(--teal); margin-bottom: 3px; }
.why-cite { font-size: 11px; color: var(--muted-2); font-style: italic; margin-top: 6px; }

/* Full reason list — every distinct triggered reason with its own studies */
.why-reasons { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.why-reason { padding-left: 11px; border-left: 2px solid var(--border-soft); }
.why-reason-t { display: block; font-size: 12.5px; color: var(--text-2); line-height: 1.5; }
.why-reason-cite { display: block; font-size: 10.5px; color: var(--muted-2); font-style: italic; margin-top: 4px; }

/* secondary grid (deferred + completeness) */
.results-secondary { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(16px, 1.6vw, 24px);
  padding: clamp(28px, 3vw, 48px) clamp(18px, 4vw, 56px) 0; }
.deferred-item { display: flex; gap: 12px; align-items: flex-start; padding: 14px 0; border-bottom: 1px solid var(--border-soft); }
.deferred-item:last-child { border-bottom: none; padding-bottom: 0; }
.deferred-item .dname { font-weight: 600; font-size: 14.5px; }
.deferred-item .dreason { color: var(--muted); font-size: 12.5px; margin-top: 2px; }
.deferred-item .later { margin-left: auto; font-size: 11px; color: var(--muted); border: 1px solid var(--border-soft);
  border-radius: var(--r-pill); padding: 5px 12px; align-self: center; max-width: 46%; text-align: center; line-height: 1.3; }
.ov-saved-later .block-title { flex-wrap: wrap; row-gap: 8px; }
.ov-saved-revisit { margin-left: auto; font-size: 11px; line-height: 1; color: var(--muted); border: 1px solid var(--border-soft);
  padding: 7px 10px; border-radius: var(--r-pill); white-space: nowrap; }
.ov-saved-later .deferred-item { align-items: flex-start; gap: clamp(14px, 2vw, 26px); }
.ov-saved-later .deferred-main { flex: 0 0 min(210px, 34%); min-width: 120px; }
.ov-saved-later .deferred-why { flex: 1 1 auto; min-width: 0; color: var(--muted); font-size: 12.5px; line-height: 1.45; }
.ov-saved-later .deferred-why b { display: block; margin-bottom: 3px; color: var(--text); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; }
.ov-saved-later .deferred-why span { display: block; }
.meter { height: 9px; border-radius: 99px; background: rgba(255,255,255,0.07); overflow: hidden; margin: 14px 0 12px; }
.meter > span { display: block; height: 100%; background: var(--grad-brand-3); border-radius: 99px; box-shadow: 0 0 16px rgba(20,224,203,0.5); transition: width 1s var(--ease-out); }
.completeness-up { font-size: 13.5px; color: var(--text-2); line-height: 1.55; }
/* DNA-connected confirmation row in the "How complete is this?" card —
   replaces the connect-upsell whenever the LIVE session has DNA linked. */
.dna-confirm { display: flex; align-items: center; gap: 10px; margin-top: 4px;
  padding: 11px 14px; border-radius: var(--r-sm); border: 1px solid var(--border-hi);
  background: linear-gradient(135deg, var(--teal-soft), var(--blue-soft));
  font-size: 13.5px; line-height: 1.5; color: var(--text-2); }
.dna-confirm b { color: var(--text); font-weight: 700; }
.dna-confirm svg { width: 16px; height: 16px; flex: none; }
.dna-confirm svg:first-child { color: var(--teal); }
.dna-confirm svg:last-child { width: 14px; height: 14px; color: var(--shield); }

/* Methylation add-on NOT yet connected — the missing piece keeping the plan
   below 100%. An ACTION prompt (not a confirmation), so a distinct violet,
   dashed treatment that reads as "do this next" rather than "done". */
.methyl-upsell { display: flex; align-items: flex-start; gap: 10px; margin-top: 8px;
  padding: 11px 14px; border-radius: var(--r-sm); border: 1px dashed var(--violet);
  background: var(--violet-soft); font-size: 13px; line-height: 1.5; color: var(--text-2); }
.methyl-upsell b { color: var(--text); font-weight: 700; }
.methyl-upsell svg { width: 16px; height: 16px; flex: none; color: var(--violet); margin-top: 1px; }

.ov-precision-list { display: flex; flex-direction: column; gap: 16px; margin-top: 16px; }
.ov-precision-row { display: flex; align-items: center; gap: 10px; padding: 11px 12px;
  border-radius: var(--r-sm); border: 1px solid var(--border); background: var(--fill-1); }
.ov-precision-row.is-on { border-color: var(--border-hi); background: linear-gradient(135deg, var(--teal-soft), var(--blue-soft)); }
.ov-precision-row.is-off, .ov-precision-row.is-due { border-style: dashed; }
.ov-precision-row.is-off { border-color: color-mix(in srgb, var(--violet) 70%, var(--border)); background: var(--violet-soft); }
.ov-precision-row.is-due { border-color: color-mix(in srgb, var(--warning, #f5a623) 70%, var(--border));
  background: color-mix(in srgb, var(--warning, #f5a623) 9%, transparent); }
.ov-precision-ic { flex: none; width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center;
  color: var(--teal); background: var(--fill-2); }
.ov-precision-row.is-off .ov-precision-ic { color: var(--violet); }
.ov-precision-row.is-due .ov-precision-ic { color: var(--warning, #f5a623); }
.ov-precision-ic svg { width: 15px; height: 15px; }
.ov-precision-tx { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.ov-precision-tx b { color: var(--text); font-weight: 700; font-size: 13px; }
.ov-precision-tx small { color: var(--muted); font-size: 11.8px; line-height: 1.4; }
.ov-precision-ok { flex: none; color: var(--shield); }
.ov-precision-ok svg { width: 15px; height: 15px; }
.ov-precision-btn { flex: none; display: inline-flex; align-items: center; gap: 5px; max-width: 42%;
  border: 1px solid var(--border-hi); border-radius: 999px; padding: 7px 10px; cursor: pointer;
  background: var(--fill-2); color: var(--text); font: inherit; font-size: 11.5px; font-weight: 700; white-space: nowrap; }
.ov-precision-btn:hover { background: var(--teal-soft); color: var(--teal); }
.ov-precision-btn svg { width: 12px; height: 12px; }
@media (max-width: 560px) {
  .ov-precision-row { align-items: flex-start; flex-wrap: wrap; }
  .ov-precision-btn { max-width: none; margin-left: 38px; }
}

/* footer CTA */
.results-footer { padding: clamp(28px, 3vw, 44px) clamp(18px, 4vw, 56px) clamp(40px, 5vw, 72px); }
.cta-card { display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap;
  padding: clamp(26px, 3vw, 40px); }
.cta-card .cta-copy { max-width: 60ch; }
.cta-card .cta-copy h3 { font-family: var(--font-display); font-size: clamp(20px, 2vw, 28px); font-weight: 700; margin-bottom: 6px; }
.cta-card .cta-copy p { color: var(--muted); font-size: 14px; }
.cta-actions { display: flex; gap: 12px; flex-wrap: wrap; }
.disclaimer { font-size: 11.5px; color: var(--muted-2); text-align: center; margin-top: 22px;
  max-width: 70ch; margin-inline: auto; line-height: 1.6; }

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

/* Tablet */
@media (max-width: 1024px) {
  .results-hero { grid-template-columns: 1fr; text-align: center; gap: 28px; justify-items: center; }
  .hero-copy { display: flex; flex-direction: column; align-items: center; }
  .hero-opps { justify-content: center; }
  .results-grid { grid-template-columns: 1fr; }
  .results-secondary { grid-template-columns: 1fr; }
  .tiers { grid-template-columns: 1fr; max-width: 580px; margin-inline: auto; }
  .tier.recommended { order: -1; transform: scale(1); }
  .tier.recommended:hover { transform: translateY(-8px); }
}

/* Phone */
@media (max-width: 640px) {
  .hero-traj { flex-direction: column; gap: 10px; text-align: center; }
  .hero-traj-vs { border-left: 0; padding-left: 0; align-items: center; border-top: 1px solid var(--hairline); padding-top: 10px; }
  .options.cols-2 { grid-template-columns: 1fr; grid-auto-flow: row; grid-template-rows: none; }
  /* single column on phones — the odd-count centering (incl. its .dense width
     override, which outranks a 3-class selector) must be fully undone */
  .options.cols-2.odd-center > .option:last-child,
  .options.cols-2.dense.odd-center > .option:last-child { grid-row: auto; grid-column: auto;
    justify-self: stretch; width: auto; }
  .options.scale { grid-template-columns: repeat(5, 1fr); }
  .tiers { grid-template-columns: 1fr; }
  .tier.recommended { order: -1; transform: none; }
  .tier.recommended:hover { transform: translateY(-6px); }
  .blocked-list { grid-template-columns: 1fr; }
  .learned-grid { grid-template-columns: 1fr; }
  .cta-card { flex-direction: column; align-items: stretch; text-align: center; }
  .cta-actions { flex-direction: column; }
  .cta-actions .btn { width: 100%; }
  .option { padding: 17px; min-height: 60px; }
  /* nav chips: left-aligned scroll strip with a soft right fade cue */
  .results-nav { justify-content: flex-start; padding-bottom: 10px;
    -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 calc(100% - 34px), transparent 100%);
    mask-image: linear-gradient(90deg, #000 0%, #000 calc(100% - 34px), transparent 100%); }
  .rnav-chip { padding: 7px 12px; font-size: 12px; }
  .hero-cta { flex-direction: column; }
  .hero-cta .btn { width: 100%; }
  .back-top { right: 14px; width: 44px; height: 44px; }
  .prog-deltas { gap: 8px; }
  .pg-delta { padding: 11px 6px 9px; }
  .pg-delta .k { font-size: 9px; }
  .pg-chart { height: 150px; }
  .grade-medallion { width: 46px; height: 46px; }
  .grade-medallion span { font-size: 16.5px; }
  .grade-medallion:hover { transform: none; }
  .pg-ms-row { flex-wrap: wrap; }
  /* system rows stack: name + score + chip on top, full-width bar below */
  .sys-row { grid-template-columns: 1fr 36px auto; grid-template-areas: "name score chip" "bar bar bar";
    row-gap: 9px; padding: 13px 14px; }
  .sys-list.has-deltas .sys-row { grid-template-columns: 1fr 44px 36px auto;
    grid-template-areas: "name delta score chip" "bar bar bar bar"; }
  .sys-row:hover { transform: none; }
  .sys-move { padding: 10px 12px; }
  .sys-move .sm-chips { margin-left: 0; width: 100%; }
  .block-title .sys-sort { margin-top: 2px; }
  /* kill hover transforms on touch */
  .tier:hover, .option:hover, .btn-primary:hover, .attr:hover, .btn-ghost:hover, .rnav-chip:hover, .back-top:hover { transform: none; }
  .orb.o3 { display: none; }
}

@media (max-width: 380px) {
  .options.scale { grid-template-columns: repeat(5, 1fr); gap: 6px; }
  .options.scale .opt-label { font-size: 11px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.1s !important; }
  .orb, .bg::after { animation: none; }
}

/* ===========================================================================
   F398 · FLOATING TOP-RIGHT ACCOUNT BUTTON (was the theme toggle)
   One fixed pill, three states: ACCOUNT (default — monogram or user glyph),
   CART (F370, on the portal with items), and the shared sizing/skin below.
   Theme switching now lives inside Account & Settings.
   =========================================================================== */
.acct-btn {
  position: fixed; top: max(14px, env(safe-area-inset-top)); right: 16px; z-index: 60;
  width: 44px; height: 44px; border-radius: var(--r-pill); display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--border); background: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  color: var(--text-2); box-shadow: var(--shadow-sm);
  transition: transform .25s var(--ease-spring), color .2s, border-color .2s, background .2s;
}
.acct-btn:hover { color: var(--text); border-color: var(--border-hi); transform: translateY(-2px); }
.acct-btn:active { transform: scale(.94); }
.acct-btn svg { width: 20px; height: 20px; }
/* F183 · MOBILE ONLY — shrink the floating switch to the SAME
   height as the assessment Shield pill (25px — the reference "perfect" mobile
   icon) so the top-right controls read symmetrically across home / assessment /
   results. Phones only; tablet + desktop keep the 44px target. */
@media (max-width: 640px) {
  .acct-btn { width: 25px; height: 25px; }
  .acct-btn svg { width: 14px; height: 14px; }
}
/* F183 · EXCEPTION — the HOMEPAGE PORTAL (castle overview) shows a bigger 38px
   circular Shield badge (not the 25px assessment pill), so on that screen the
   button matches THAT: a 38px circle. Assessment + results keep the 25px
   pill-matched size above. `body.on-overview` out-specifies the rule above. */
@media (max-width: 640px) {
  body.on-overview .acct-btn { width: 38px; height: 38px; }
  body.on-overview .acct-btn svg { width: 18px; height: 18px; }
  /* F370 · cart-mode centering for the 38px phone circle ((66 − 38) / 2) */
  body.on-overview .acct-btn.cart-mode { top: max(14px, env(safe-area-inset-top)); }
  /* the Health Report (Data & Reports) screen matches — 25px was too small */
  body.on-results .acct-btn { width: 38px; height: 38px; }
  body.on-results .acct-btn svg { width: 18px; height: 18px; }
}
/* F412 · PORTAL ONLY — vertically center the fixed account button inside the
   sticky 60px topbar so it lines up with the nav tabs. Horizontal (right) is
   untouched; the transform only moves it on the Y axis. */
body.on-overview #acct-btn { top: 0; height: 44px;
  transform: translateY(calc((var(--ov-topbar-h, 60px) - 44px) / 2)); }
body.on-overview #acct-btn:hover { transform: translateY(calc((var(--ov-topbar-h, 60px) - 44px) / 2 - 2px)); }
body.on-overview #acct-btn:active { transform: translateY(calc((var(--ov-topbar-h, 60px) - 44px) / 2)) scale(.94); }
@media (max-width: 640px) {
  body.on-overview #acct-btn { height: 38px;
    transform: translateY(calc((var(--ov-topbar-h, 60px) - 38px) / 2)); }
  body.on-overview #acct-btn:hover { transform: translateY(calc((var(--ov-topbar-h, 60px) - 38px) / 2 - 2px)); }
  body.on-overview #acct-btn:active { transform: translateY(calc((var(--ov-topbar-h, 60px) - 38px) / 2)) scale(.94); }
}
/* keep the sticky topbars clear of the floating toggle */
.results-topbar { padding-right: calc(clamp(18px, 4vw, 56px) + 54px); }
#screen-question .flow-topbar { padding-right: calc(clamp(18px, 4vw, 40px) + 50px); }

@media (max-width: 640px) {
  #screen-question .flow-topbar { padding: 12px calc(64px + env(safe-area-inset-right)) 12px 14px; }
  #screen-question .flow-topbar-inner {
    display: grid;
    grid-template-columns: max-content minmax(42px, 1fr) max-content max-content;
    gap: clamp(8px, 2.2vw, 12px);
    max-width: none;
    align-items: center;
  }
  #screen-question .brandmark-sm { min-width: 0; gap: 6px; }
  #screen-question .brand-idn-word { font-size: 13px; letter-spacing: .035em; }
  #screen-question .progress-track { min-width: 42px; max-width: 100%; }
  #screen-question .progress-count { min-width: 46px; padding: 0 9px; }
  #screen-question #q-shield-pill { justify-self: end; }
}

/* ===========================================================================
   LANDING — BRAND SYSTEM (the "Core Visual System" slide)
   =========================================================================== */
#screen-landing .flow { max-width: 1120px; }

/* the cinematic hero shell */
.landing-hero { width: 100%; max-width: 1200px; margin-inline: auto;
  display: flex; flex-direction: column; align-items: center; text-align: center; gap: clamp(16px, 2.6vw, 26px); }
.ls-art { display: flex; flex-direction: column; align-items: center; gap: 14px; }
.hero-actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: center; }

.brand-trio { font-size: clamp(30px, 6.6vw, 60px); line-height: 1.08; letter-spacing: -0.03em; }
.brand-trio span { white-space: nowrap; }
.kw-blue   { color: var(--blue); }
.kw-cyan   { color: var(--teal); }
.kw-violet { color: var(--violet); }

/* compact proof chips (replace the text-heavy cards) */
.proof-strip { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }
.proof-chip { display: inline-flex; align-items: center; gap: 9px; padding: 10px 16px; border-radius: var(--r-pill);
  border: 1px solid var(--border); background: var(--fill-1); font-size: 13.5px; color: var(--text-2);
  transition: transform .22s var(--ease-spring), border-color .22s, box-shadow .22s, background .22s; }
.proof-chip svg { width: 17px; height: 17px; }
.proof-chip b { font-family: var(--font-display); font-weight: 600; color: var(--text); }
.proof-chip.c-blue   { color: var(--blue); }
.proof-chip.c-cyan   { color: var(--teal); }
.proof-chip.c-violet { color: var(--violet); }
.proof-chip:hover { transform: translateY(-3px); border-color: currentColor; box-shadow: 0 10px 26px -12px currentColor; background: var(--fill-2); }

.pc-caption { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 12px; max-width: 30ch; }
.pc-caption-mobile { display: none; }
.pc-cap-label { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-display);
  font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.2em; color: var(--shield);
  padding: 7px 15px; border-radius: var(--r-pill);
  border: 1px solid color-mix(in srgb, var(--shield) 38%, transparent); background: var(--shield-soft);
  box-shadow: 0 0 28px var(--shield-glow), inset 0 1px 0 rgba(255,255,255,0.08); }
.pc-cap-label svg { width: 14px; height: 14px; }
.pc-cap-label .live { width: 6px; height: 6px; border-radius: 50%; background: var(--shield);
  box-shadow: 0 0 10px var(--shield); animation: pulse 1.8s ease-in-out infinite; }
.pc-cap-head { font-family: var(--font-display); font-weight: 600; font-size: clamp(17px, 1.6vw, 21px);
  line-height: 1.32; letter-spacing: -0.015em; color: var(--text); max-width: 22ch; }
.pc-cap-head .hl { background: var(--grad-shield); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; }

/* ── THE PROTECTION CORE — animated hero (pure CSS/SVG) ──────────────── */
.protect-core { position: relative; display: grid; place-items: center;
  width: clamp(280px, 40vw, 460px); aspect-ratio: 1; margin-inline: auto;
  animation: pcFloat 7s var(--ease-out) infinite; }
.protect-core > * { grid-area: 1 / 1; }
.pc-halo { width: 90%; aspect-ratio: 1; border-radius: 50%; opacity: .6; filter: blur(28px);
  background: conic-gradient(from 0deg, transparent 0 10%, var(--teal) 20%, transparent 36%, var(--blue) 54%, transparent 70%, var(--violet) 86%, transparent 100%);
  animation: pcSpin 16s linear infinite; will-change: transform; }
.pc-ring { border-radius: 50%; border: 1px solid transparent; }
.pc-ring-1 { width: 100%; aspect-ratio: 1; border-color: color-mix(in srgb, var(--teal) 50%, transparent);
  box-shadow: inset 0 0 50px var(--teal-glow), 0 0 70px -16px var(--teal-glow); }
.pc-ring-2 { width: 78%; aspect-ratio: 1; border-style: dashed;
  border-color: color-mix(in srgb, var(--blue) 42%, transparent);
  animation: pcSpin 30s linear infinite reverse; will-change: transform; }
.pc-ring-3 { width: 56%; aspect-ratio: 1; border-color: color-mix(in srgb, var(--violet) 32%, transparent); }
.pc-orbit { position: relative; width: 78%; aspect-ratio: 1; animation: pcSpin 24s linear infinite; will-change: transform; }
.pc-node { position: absolute; width: 0; height: 0; }
.pc-node::after { content: ''; position: absolute; left: 0; top: 0; transform: translate(-50%, -50%);
  width: 6px; height: 6px; border-radius: 50%; opacity: .8;
  background: radial-gradient(circle at 32% 30%, #fff, var(--teal)); box-shadow: 0 0 7px var(--teal-glow); }
.pc-sparks { position: relative; width: 100%; aspect-ratio: 1; }
.pc-spark { position: absolute; width: 0; height: 0; }
.pc-spark::after { content: ''; position: absolute; left: 0; top: 0; transform: translate(-50%, -50%) scale(.3);
  width: 20px; height: 20px; border-radius: 50%; opacity: 0;
  background: radial-gradient(circle, var(--teal) 0%, transparent 70%);
  animation: pcSpark 3.2s ease-out infinite; }
.pc-core { position: relative; width: clamp(112px, 14.5vw, 184px); aspect-ratio: 1; border-radius: 50%;
  display: grid; place-items: center; overflow: visible;
  background: radial-gradient(circle at 50% 32%, rgba(255,255,255,.18), rgba(8,15,35,.9));
  border: 1px solid var(--border-hi);
  box-shadow: 0 0 60px -6px var(--teal-glow), inset 0 0 34px rgba(20,224,203,.22), 0 18px 50px rgba(3,8,24,.5);
  animation: pcBreath 4.5s var(--ease-out) infinite; will-change: transform; }
.pc-core .pc-id-shield { width: 72%; height: auto; transform-origin: 50% 56%;
  filter: drop-shadow(0 14px 28px color-mix(in srgb, var(--blue) 42%, transparent))
          drop-shadow(0 0 18px color-mix(in srgb, var(--teal) 30%, transparent));
  animation: pcShieldFloat 5.5s var(--ease-out) infinite; will-change: transform; }
@keyframes pcShieldFloat { 0%,100% { transform: translateY(0) rotate(-1.4deg); } 50% { transform: translateY(-4px) rotate(1.4deg); } }
@keyframes pcSpin  { to { transform: rotate(360deg); } }
@keyframes pcBreath{ 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); } }
@keyframes pcFloat { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
@keyframes pcSpark { 0% { opacity:0; transform: translate(-50%,-50%) scale(.3); }
  14% { opacity:.9; transform: translate(-50%,-50%) scale(1); }
  34% { opacity:0; transform: translate(-50%,-50%) scale(1.6); } 100% { opacity:0; } }

/* footer ribbon: Better insights · Stronger protection · Greater confidence */
.landing-ribbon { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 9px 16px;
  font-family: var(--font-display); font-weight: 600; font-size: 13.5px; color: var(--text-2); }
.landing-ribbon .rb.accent { color: var(--teal); }
.landing-ribbon .sep { width: 1px; height: 13px; background: var(--border); display: inline-block; }

/* keyword glow only in dark */
[data-theme="dark"] .kw-blue   { text-shadow: 0 0 34px rgba(91,149,255,0.38); }
[data-theme="dark"] .kw-cyan   { text-shadow: 0 0 34px rgba(20,224,203,0.34); }
[data-theme="dark"] .kw-violet { text-shadow: 0 0 34px rgba(181,108,255,0.32); }

/* ===========================================================================
   $7B UPGRADE LAYER — motion · depth · trust · polish  (F1–F16)
   Cross-browser: vendor-prefixed clip/backdrop + @supports guards, transforms/
   opacity only, no Chrome-only APIs. ALL motion neutralized by the global
   prefers-reduced-motion rule (plus the targeted overrides at the end here).
   =========================================================================== */

/* F15 · graceful page load-in (opacity only → safe with reduced-motion) */
.app { animation: appIn .7s var(--ease-out) both; }
@keyframes appIn { from { opacity: 0; } to { opacity: 1; } }

/* F6 · ambient particle drift (motes injected by initParticles) */
.particles { position: fixed; inset: 0; z-index: -2; pointer-events: none; overflow: hidden; }
.particles .mote { position: absolute; bottom: -12px; border-radius: 50%; opacity: 0;
  background: radial-gradient(circle, rgba(255,255,255,0.95), rgba(255,255,255,0) 66%);
  animation-name: moteRise; animation-timing-function: linear; animation-iteration-count: infinite;
  will-change: transform, opacity; }
@keyframes moteRise {
  0%   { transform: translate(0, 0) scale(.5);                  opacity: 0; }
  12%  { opacity: .55; }
  88%  { opacity: .38; }
  100% { transform: translate(var(--drift, 0), -92vh) scale(1); opacity: 0; }
}

/* F1 · cursor-reactive 3D shield — the tilt rides a WRAPPER so it never fights
   the inner float/spin/breath animations. F3 · cinematic intro (scale+unblur).
   Two separate layers = two separate transforms (no fill-forwards conflict). */
.pc-stage { display: grid; place-items: center; width: 100%;
  transform: perspective(1100px) rotateX(var(--ry, 0deg)) rotateY(var(--rx, 0deg));
  transform-style: preserve-3d; backface-visibility: hidden; will-change: transform; }
.pc-stage > * { grid-area: 1 / 1; }
.pc-intro { display: grid; place-items: center; width: 100%;
  animation: pcIntro 1.15s var(--ease-out) both; }
.pc-intro > * { grid-area: 1 / 1; }
@keyframes pcIntro { from { opacity: 0; transform: scale(.84); filter: blur(9px); }
  to { opacity: 1; transform: none; filter: blur(0); } }

/* F5 · volumetric top key-light on the shield (single, consistent light source) */
.pc-keylight { width: 124%; aspect-ratio: 1; border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle at 50% 20%, rgba(255,255,255,0.22), rgba(255,255,255,0) 56%);
  mix-blend-mode: screen; opacity: .85; }

/* F10 · live "screening" radar sweep around the core */
.pc-core::after { content: ''; position: absolute; inset: -2px; border-radius: 50%; pointer-events: none;
  background: conic-gradient(from 0deg, transparent 0 76%, rgba(70,230,255,0.55) 86%, transparent 96%);
  -webkit-mask: radial-gradient(circle, transparent 53%, #000 55%);
          mask: radial-gradient(circle, transparent 53%, #000 55%);
  opacity: .7; animation: pcScan 4.4s linear infinite; will-change: transform; }
@keyframes pcScan { to { transform: rotate(360deg); } }

/* F4 · breathing gradient headline — each word keeps its brand identity, then
   shimmers. The gradient/clip is @supports-guarded so unsupported engines keep
   the existing solid color (no ugly background box). */
.brand-trio .kw-blue   { animation: wordIn .7s var(--ease-spring) .12s both, shimmerText 7s ease-in-out infinite; }
.brand-trio .kw-cyan   { animation: wordIn .7s var(--ease-spring) .22s both, shimmerText 7s ease-in-out .5s infinite; }
.brand-trio .kw-violet { animation: wordIn .7s var(--ease-spring) .32s both, shimmerText 7s ease-in-out 1s infinite; }
@keyframes wordIn { from { opacity: 0; transform: translateY(22px) scale(.97); } to { opacity: 1; transform: none; } }
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .brand-trio .kw-blue, .brand-trio .kw-cyan, .brand-trio .kw-violet {
    background-size: 200% auto; -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent; }
  .brand-trio .kw-blue   { background-image: linear-gradient(96deg, #4f8ef7 0%, #a9c8ff 50%, #4f8ef7 100%); }
  .brand-trio .kw-cyan   { background-image: linear-gradient(96deg, #14e0cb 0%, #8bf8e8 50%, #14e0cb 100%); }
  .brand-trio .kw-violet { background-image: linear-gradient(96deg, #b56cff 0%, #ddbcff 50%, #b56cff 100%); }
  [data-theme="light"] .brand-trio .kw-blue   { background-image: linear-gradient(96deg, #1652F0 0%, #5a86ff 50%, #1652F0 100%); }
  [data-theme="light"] .brand-trio .kw-cyan   { background-image: linear-gradient(96deg, #0fb6c6 0%, #25cfe0 50%, #0fb6c6 100%); }
  [data-theme="light"] .brand-trio .kw-violet { background-image: linear-gradient(96deg, #7C4DFF 0%, #a787ff 50%, #7C4DFF 100%); }
}

/* F2 · magnetic + idle light-sweep primary CTA. ID-specificity transforms read
   the JS-set --mag-x/--mag-y so hover/active states still compose. */
/* F2 · magnetic + idle light-sweep primary CTA. The JS lerp loop OWNS the
   translate, so transform is excluded from #start-btn's transition — the base
   .btn `transition: transform .22s var(--ease-spring)` (a spring that overshoots)
   restarting every frame was the "jumpy" feel. box-shadow/background still ease;
   the hover lift is folded into the eased --mag-y; :active press stays snappy. */
.btn-primary { --mag-x: 0px; --mag-y: 0px; }
#start-btn { transform: translate(var(--mag-x), var(--mag-y));
  transition: box-shadow .25s var(--ease-out), background .2s, opacity .2s; }
#start-btn:active { transform: translate(var(--mag-x), var(--mag-y)) scale(.975); }
.btn-primary::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(110deg, transparent 32%, rgba(255,255,255,0.38) 50%, transparent 68%);
  background-size: 220% 100%; background-position: 180% 0; mix-blend-mode: screen;
  animation: ctaIdleSheen 4.6s var(--ease-out) infinite; }
@keyframes ctaIdleSheen { 0% { background-position: 180% 0; } 55%, 100% { background-position: -90% 0; } }

/* F7 · frosted-glass shield caption pill (progressive — falls back to soft bg) */
.pc-cap-label { -webkit-backdrop-filter: blur(10px) saturate(150%); backdrop-filter: blur(10px) saturate(150%); }

/* F8 · trust bar  +  F9 · authority mark */
.ls-trust { display: flex; flex-direction: column; align-items: center; gap: 10px; margin-top: 2px; }
.trust-row { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 10px; }
.trust-chip { display: inline-flex; align-items: center; gap: 7px; padding: 8px 13px; border-radius: var(--r-pill);
  border: 1px solid var(--border); background: var(--fill-1); color: var(--text-2);
  font-size: 12.5px; line-height: 1; white-space: nowrap;
  transition: border-color .2s, background .2s, transform .2s var(--ease-spring); }
.trust-chip svg { width: 15px; height: 15px; color: var(--shield); }
.trust-chip b { font-family: var(--font-display); font-weight: 600; color: var(--text); }
.trust-chip:hover { transform: translateY(-2px); border-color: var(--border-hi); background: var(--fill-2); }
.trust-auth { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--muted); letter-spacing: .01em; }
.trust-auth svg { width: 13px; height: 13px; color: var(--muted); }

/* F11 · optical typography refinement */
.lead, .pc-cap-head, .brand-trio, .h2, .display, .q-headline { text-wrap: balance; }

/* F13 · skip-to-content link + strong focus rings */
.skip-link { position: fixed; left: 14px; top: -64px; z-index: 200;
  padding: 11px 18px; border-radius: 12px; font-family: var(--font-display); font-weight: 600; font-size: 14px;
  color: var(--text); background: var(--surface-hi); border: 1px solid var(--border-hi);
  box-shadow: var(--shadow-md); transition: top .2s var(--ease-out); }
.skip-link:focus { top: 14px; }
.btn:focus-visible, .acct-btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }

/* F12 · light-mode polish for the new layers */
[data-theme="light"] .particles .mote { background: radial-gradient(circle, rgba(22,82,240,0.5), rgba(22,82,240,0) 66%); }
[data-theme="light"] .pc-keylight { opacity: .6; mix-blend-mode: normal;
  background: radial-gradient(circle at 50% 20%, rgba(255,255,255,0.85), rgba(255,255,255,0) 58%); }
[data-theme="light"] .pc-core::after { background: conic-gradient(from 0deg, transparent 0 76%, rgba(22,82,240,0.45) 86%, transparent 96%); }
[data-theme="light"] .trust-auth, [data-theme="light"] .trust-auth svg { color: var(--muted); }

/* Neutralize the NEW motion under reduced-motion (belt + suspenders) */
@media (prefers-reduced-motion: reduce) {
  .pc-stage { transform: none !important; }
  .pc-intro, .pc-core::after, .btn-primary::before, .app,
  .brand-trio .kw-blue, .brand-trio .kw-cyan, .brand-trio .kw-violet { animation: none !important; }
  .brand-trio .kw-blue, .brand-trio .kw-cyan, .brand-trio .kw-violet { opacity: 1; transform: none; }
  .particles { display: none; }
}

/* ===========================================================================
   LIGHT THEME — the $20B daylight pass.
   Porcelain canvas · pure-white floating cards · navy ink · blue-led accents.
   Token components adapt automatically; everything here re-tunes pieces that
   were designed for dark glass — neon glows become crisp shadows, gray washes
   become white cards, teal accents hand over to the saturated brand blue.
   =========================================================================== */
/* canvas: airy porcelain — a whisper of brand, zero pastel splotches */
[data-theme="light"] .bg {
  background:
    radial-gradient(120% 90% at 85% -15%, rgba(22,82,240,0.055), transparent 50%),
    radial-gradient(110% 90% at 8% 112%, rgba(27,197,212,0.065), transparent 52%),
    linear-gradient(180deg, #fbfdff 0%, #f4f8fe 55%, #eef4fc 100%);
}
[data-theme="light"] .bg::after {
  background:
    radial-gradient(40% 40% at 30% 25%, rgba(27,197,212,0.05), transparent 70%),
    radial-gradient(36% 36% at 72% 70%, rgba(22,82,240,0.045), transparent 70%);
}
[data-theme="light"] .grain { opacity: 0.018; mix-blend-mode: multiply; }
[data-theme="light"] .dots { background-image: radial-gradient(var(--dot-color) 1px, transparent 1px); opacity: 0.55; }
[data-theme="light"] .orb { opacity: 0.15; filter: blur(130px); }
[data-theme="light"] .orb.o1 { background: rgba(27,197,212,0.55); }
[data-theme="light"] .orb.o2 { background: rgba(22,82,240,0.45); }
[data-theme="light"] .orb.o3 { background: rgba(124,77,255,0.35); }

/* chrome: opaque topbar (no scroll-through) + jewel-box toggle + blue progress */
[data-theme="light"] .flow-topbar { background: var(--bg); }
[data-theme="light"] .results-chrome { background: var(--topbar-bg); }
[data-theme="light"] .acct-btn { background: #ffffff; border-color: rgba(16,42,98,0.10);
  box-shadow: 0 1px 2px rgba(16,42,98,0.05), 0 8px 22px -8px rgba(20,50,120,0.20); }
[data-theme="light"] .progress-track { background: var(--track); }
[data-theme="light"] .progress-fill { box-shadow: 0 0 12px rgba(22,82,240,0.35); }

/* buttons: white ink on the blue-led gradient + deep blue float shadow */
[data-theme="light"] .btn-primary { box-shadow: 0 14px 34px -10px rgba(22,82,240,0.42), inset 0 1px 0 rgba(255,255,255,0.35); }
[data-theme="light"] .btn-primary:hover { box-shadow: 0 22px 52px -12px rgba(22,82,240,0.50), inset 0 1px 0 rgba(255,255,255,0.45); }
[data-theme="light"] .btn-ghost { background: #ffffff; border-color: rgba(16,42,98,0.12);
  box-shadow: 0 4px 14px -8px rgba(20,50,120,0.14); }
[data-theme="light"] .btn-ghost:hover { background: #f6f9ff; }

/* answer cards: pure white, floating, crisp — the heart of the flow */
[data-theme="light"] .option { background: #ffffff; border-color: rgba(16,42,98,0.085);
  box-shadow: 0 1px 2px rgba(16,42,98,0.04), 0 12px 28px -16px rgba(20,50,120,0.16); }
[data-theme="light"] .option::before { background: var(--blue-soft); }
[data-theme="light"] .option:hover { border-color: rgba(22,82,240,0.40);
  box-shadow: 0 2px 4px rgba(16,42,98,0.05), 0 18px 40px -16px rgba(22,82,240,0.24); }
[data-theme="light"] .option:hover::before { opacity: .35; }
[data-theme="light"] .option.selected { border-color: rgba(22,82,240,0.55);
  background: linear-gradient(180deg, #ffffff, #f5f9ff);
  box-shadow: 0 2px 4px rgba(16,42,98,0.04), 0 20px 46px -18px rgba(22,82,240,0.32),
              inset 0 0 0 1px rgba(22,82,240,0.16); }
[data-theme="light"] .option.selected::before { opacity: 0; }
[data-theme="light"] .option .opt-ico { background: linear-gradient(135deg, rgba(27,197,212,0.16), rgba(22,82,240,0.12)); color: var(--blue); }
[data-theme="light"] .option.selected .opt-ico { background: var(--grad-brand); color: var(--ink-on-brand); box-shadow: 0 8px 20px -8px rgba(22,82,240,0.55); }
[data-theme="light"] .option .opt-check { border-width: 1.5px; border-color: rgba(16,42,98,0.16); background: #ffffff; }
[data-theme="light"] .option.selected .opt-check { background: var(--grad-brand); border-color: transparent; box-shadow: 0 5px 14px -4px rgba(22,82,240,0.45); }

/* shield pills: white jewel pills with a soft mint float (no neon haze) */
[data-theme="light"] .q-shield-note { background: #ffffff; border-color: rgba(11,179,154,0.30);
  box-shadow: 0 1px 2px rgba(16,42,98,0.04), 0 12px 28px -14px rgba(11,179,154,0.45); }
/* F373 · processing engine reads clean on daylight — soften the aura so the
   glass halo + gradient shield pop against the white canvas (dark untouched). */
[data-theme="light"] .proc-aura { filter: blur(30px); opacity: .55; }
[data-theme="light"] .proc-grid { opacity: .38; }
[data-theme="light"] .proc-halo { background: #ffffff; border-color: rgba(16,42,98,0.10);
  box-shadow: 0 18px 44px -20px rgba(20,50,120,0.28), inset 0 1px 0 rgba(255,255,255,0.9); }
[data-theme="light"] .shield-badge { background: #ffffff; border-color: color-mix(in srgb, var(--blue) 66%, transparent);
  box-shadow: 0 1px 2px rgba(16,42,98,0.04), 0 12px 28px -14px rgba(11,179,154,0.40);
  /* T2.7 · shield text was sub-AA on white — deepen toward ink for ≥4.5:1 while
     the live dot + halo keep the full-strength mint identity */
  color: color-mix(in srgb, var(--shield) 55%, var(--text)); }
/* F170 · light-theme not-yet-active override (higher specificity than the base
   light .shield-badge above so the red identity wins in light mode). */
[data-theme="light"] .shield-badge.not-active {
  background: var(--danger-soft);
  border-color: color-mix(in srgb, var(--danger) 48%, transparent);
  color: color-mix(in srgb, var(--danger) 72%, var(--text));
  box-shadow: 0 1px 2px rgba(16,42,98,0.04), 0 12px 28px -14px color-mix(in srgb, var(--danger) 45%, transparent); }

/* intensity-ramp scale cards: white base + hue tint (not neon-on-transparent) */
[data-theme="light"] .options.scale .option.selected {
  background: color-mix(in srgb, var(--ramp) 7%, #ffffff);
  border-color: color-mix(in srgb, var(--ramp) 60%, transparent);
  box-shadow: 0 2px 4px rgba(16,42,98,0.04),
              0 18px 40px -16px color-mix(in srgb, var(--ramp) 50%, transparent),
              inset 0 0 0 1px color-mix(in srgb, var(--ramp) 22%, transparent); }
[data-theme="light"] .options.scale .option.selected .opt-bar.lit {
  box-shadow: 0 4px 10px -3px color-mix(in srgb, var(--ramp) 55%, transparent); }

@media (max-width: 640px), (hover: none) {
  .option:not(.selected):hover { border-color: var(--border); box-shadow: none; }
  .option:not(.selected):hover::before { opacity: 0; }
  .options.scale .option:not(.selected):hover { border-color: var(--border); box-shadow: none; }
  .options.scale .option:not(.selected):hover .opt-bar.lit { background: color-mix(in srgb, var(--ramp) 68%, transparent); box-shadow: none; transform: none; }
  .options.scale .option:not(.selected):hover .opt-label { color: var(--text-2); }
  .sp-quick-pill:not(.added):hover,
  .sp-quick-pill:not(.added):focus { transform: none; border-color: var(--border); background: var(--surface); box-shadow: none; }
  [data-theme="light"] .option:not(.selected):hover { border-color: rgba(16,42,98,0.085); background: #ffffff; box-shadow: 0 1px 2px rgba(16,42,98,0.04), 0 12px 28px -16px rgba(20,50,120,0.16); }
  [data-theme="light"] .option:not(.selected):hover::before { opacity: 0; }
  [data-theme="light"] .sp-quick-pill:not(.added):hover,
  [data-theme="light"] .sp-quick-pill:not(.added):focus { border-color: rgba(16,42,98,0.085); background: #ffffff; box-shadow: none; }
}
/* eyebrows read blue on porcelain — teal sits too faint on white */
[data-theme="light"] .eyebrow { color: var(--blue-2); }

/* processing / reveal accents re-tuned for daylight */
[data-theme="light"] .reveal-bloom { background: radial-gradient(circle, rgba(22,82,240,0.09), transparent 62%); }
[data-theme="light"] .conf-pill { background: #ffffff; box-shadow: 0 6px 16px -8px rgba(20,50,120,0.16); }

/* white chips & shells (were dark-glass fills) */
[data-theme="light"] .pill,
[data-theme="light"] .attr,
[data-theme="light"] .score-chip,
[data-theme="light"] .hero-opp,
[data-theme="light"] .learned-item,
[data-theme="light"] .proof-chip { background: #ffffff; border-color: rgba(16,42,98,0.10);
  box-shadow: 0 4px 16px -10px rgba(20,50,120,0.14); }
/* header status chips share the signature 2px blue outline (matches nav pill + Ask-MyAI) */
[data-theme="light"] .score-chip { border-color: color-mix(in srgb, var(--blue) 66%, transparent); }
[data-theme="light"] .learned-item:hover,
[data-theme="light"] .proof-chip:hover { background: #f6f9ff; }
[data-theme="light"] .meter { background: var(--track); }
[data-theme="light"] .ring-bg { stroke: var(--track); }
[data-theme="light"] .sys-row { background: #fff; border-color: rgba(16,42,98,0.10);
  box-shadow: 0 1px 2px rgba(16,42,98,0.04), 0 8px 20px -14px rgba(20,50,120,0.16); }
[data-theme="light"] .sys-row:hover { border-color: rgba(22,82,240,0.30); }
[data-theme="light"] .sys-bar { background: rgba(16,42,98,0.08); }
[data-theme="light"] .sys-range { background: rgba(16,42,98,0.07); }
[data-theme="light"] .sys-prev { background: rgba(16,42,98,0.45); box-shadow: none; }
[data-theme="light"] .sys-move { border-color: rgba(22,82,240,0.18); }
[data-theme="light"] .sys-sort { background: #fff; border-color: rgba(16,42,98,0.12); }
/* light mode — the domains title + its sort buttons read pure black */
[data-theme="light"] .systems-board > .block-title { color: #000; }
[data-theme="light"] .systems-board > .block-title > svg { color: #000; }
[data-theme="light"] .ss-btn { color: #000; }
[data-theme="light"] .ss-btn:hover { color: #000; }
[data-theme="light"] .sysm-bar { background: rgba(16,42,98,0.10); }
[data-theme="light"] .tiers-band { background: var(--tiers-band-bg); }
[data-theme="light"] .tier.recommended { background: var(--tier-rec-bg); }
[data-theme="light"] .btn-back:hover { background: var(--fill-1); }
[data-theme="light"] .card { border-color: rgba(16,42,98,0.07); }
/* The card's top highlight sits ABOVE the content, so a heavy white wash here
   greys out the card's own title row. Keep it as a whisper. */
[data-theme="light"] .card::before { background: linear-gradient(180deg, rgba(255,255,255,0.18), transparent 34%); }
[data-theme="light"] .pc-core { background: radial-gradient(circle at 50% 34%, #ffffff, #e9f1fc);
  box-shadow: 0 0 50px -10px var(--teal-glow), inset 0 0 28px rgba(15,182,198,.16), 0 16px 40px rgba(20,50,120,.12); }
/* daylight hero stage: calm halo, defined rings, blue-lit nodes (no washout) */
[data-theme="light"] .pc-halo { opacity: .38; }
[data-theme="light"] .pc-ring-1 { border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  box-shadow: inset 0 0 40px rgba(27,197,212,.14), 0 0 50px -18px rgba(27,197,212,.35); }
[data-theme="light"] .pc-ring-2 { border-color: color-mix(in srgb, var(--blue) 50%, transparent); }
[data-theme="light"] .pc-ring-3 { border-color: color-mix(in srgb, var(--violet) 42%, transparent); }
[data-theme="light"] .pc-node::after { background: var(--blue);
  box-shadow: 0 0 0 2px rgba(22,82,240,.10), 0 0 8px rgba(22,82,240,.35); }
[data-theme="light"] .pc-core .pc-id-shield {
  filter: drop-shadow(0 14px 26px rgba(22,82,240,.30)) drop-shadow(0 0 14px rgba(27,197,212,.22)); }

/* ===========================================================================
   RESPONSIVE — landing brand system
   =========================================================================== */
@media (max-width: 1024px) {
  .protect-core { width: clamp(260px, 52vw, 380px); }
}
@media (max-width: 640px) {
  .proof-chip { padding: 9px 13px; font-size: 12.5px; }
  .protect-core { width: clamp(240px, 74vw, 320px); }
  #screen-landing .ls-art > .pc-caption { display: none; }
  #screen-landing .pc-caption-mobile { display: flex; }
  /* CTA sits directly under the art, above the proof strip (natural DOM order) */
  #screen-landing .hero-actions { order: 0; }
  #screen-landing .pc-caption-mobile { order: 5; }
  .acct-btn:hover { transform: none; }
}

/* ===========================================================================
   LANDING — cinematic split hero that fits ONE desktop viewport (no scroll).
   Simplified copy on the LEFT; the Protection Core absolutely centered on the
   RIGHT (so the short copy stack never stretches / goes gappy). Mobile/tablet
   stack naturally: the art sits between the lead and the CTA.
   =========================================================================== */
@media (min-width: 1025px) {
  #screen-landing.screen--flow { position: relative; padding-top: clamp(14px, 2.4vh, 32px); padding-bottom: clamp(14px, 2.4vh, 32px); }
  /* The copy is a real LEFT column: pinned to the left (align-self) with a small
     left margin, constrained to a column width, text centered INSIDE it. No right
     gutter — the shield is absolutely positioned on the far right, so the empty
     middle becomes the "lots of spacing" between the column and the animation. */
  .landing-hero { align-self: flex-start; align-items: center; text-align: center;
    flex: 1 1 auto; min-height: 0; justify-content: center; gap: clamp(14px, 2vh, 24px);
    width: 100%; max-width: clamp(440px, 36vw, 580px);
    margin-inline: 0; margin-left: clamp(28px, 4vw, 80px); padding-right: 0; }
  .landing-hero > *:not(.ls-art) { width: 100%; }
  .landing-hero .ls-brand { justify-content: center; }
  /* Center the art on the FULL-HEIGHT screen (#screen-landing is position:relative
     and fills 100dvh). top/bottom + flex — NOT translateY, which the .stagger
     entrance (ends on transform:none, fill forwards) would cancel, dropping the
     shield low. Anchoring to the screen (not the hero) makes centering immune to
     how the copy column sizes. */
  /* Shield right inset is intentionally LARGER than the copy column's left margin
     (supersedes F014's edge symmetry): both columns are edge-pinned, so the empty
     middle grew too wide and threw the shield to the far right. Bumping `right`
     pulls the shield toward center and shrinks the inter-column gap. MUST be the
     `right` property (not transform) — .ls-art carries .stagger (fill-forwards
     transform) which would reset any transform after the entrance. */
  .ls-art { position: absolute; right: clamp(48px, 16vw, 260px); top: 0; bottom: 0;
    margin: 0; width: clamp(320px, 30vw, 440px);
    display: flex; flex-direction: column; align-items: center; justify-content: center; }
  /* The hero must NOT establish a containing block here, or it captures the
     absolutely-positioned .ls-art and drags the shield into the narrow left
     column (overlap). screenIn animates transform with fill:both, which fills a
     transform forever → containing block. Swap the hero's entrance to an
     opacity-only keyframe (children keep their transform stagger) so .ls-art
     anchors to #screen-landing and sits on the far RIGHT. */
  #screen-landing .landing-hero.anim-in { animation-name: fadeInOnly; }
  .landing-hero .hero-actions { justify-content: center; }
  .brand-trio span { display: block; }   /* stack the three words for impact */
  #screen-landing .brand-trio { font-size: clamp(40px, 5vw, 60px); }
  #screen-landing .lead { font-size: clamp(15px, 2.1vh, 19px); max-width: 40ch; margin-inline: auto; }
  #screen-landing .protect-core { width: 100%; }
  #screen-landing .btn-lg { min-height: clamp(50px, 6vh, 60px); }
  #screen-landing .landing-foot { font-size: clamp(11.5px, 1.4vh, 12.5px); }
}

/* ══ F391i · desktop-only: scale BOTH columns up, pill stays put ──────────
   The pill must not change size, so nothing here touches .pc-core /
   .cap-voxels (both sized off `14.5vw`, independent of their parents) or
   .pc-capsule. Widening .ls-art only grows the halo/rings/orbit AROUND the
   pill. Selectors carry an extra class/#id so they out-specify the base rules
   that appear LATER in this file. */
@media (min-width: 1025px) {
  /* left column — wider, with bigger brand, headline, CTA and trust stats */
  #screen-landing .landing-hero { max-width: clamp(500px, 41vw, 660px); }
  #screen-landing .landing-hero .ls-outcome { font-size: clamp(30px, 3.9vw, 46px); }
  #screen-landing .ls-brand-idn .id-logo { width: 40px; height: 40px; }
  #screen-landing .ls-brand-idn .ls-brand-word { font-size: 25px; }
  #screen-landing .btn-lg { min-height: clamp(56px, 6.6vh, 66px); font-size: 18.5px; padding: 20px 50px; }
  #screen-landing .ls-proof { gap: 11px 20px; }
  #screen-landing .ls-proof .lp { font-size: 15.5px; }
  #screen-landing .ls-proof .lp .lp-num { font-size: 20px; }
  #screen-landing .ls-proof .lp-lock svg { width: 17px; height: 17px; }
  #screen-landing .ls-proof .lp-sep { height: 16px; }
  /* right column — the orbit field grows, the pill inside it does not */
  #screen-landing .ls-art { width: clamp(360px, 34vw, 500px);
    /* the inset IS the right gutter — ~95px at 1429w, which also lands the
       copy-column-to-art gap at ~160px */
    right: clamp(40px, 6.7vw, 120px); }
}

/* ===========================================================================
   $20B ELEVATION LAYER — processing · reveal · results trust system
   Every color is a token (or color-mix of a token) → both themes adapt clean.
   =========================================================================== */

/* ── REVEAL — bloom · ring ticks · confidence ─────────────────────────────*/
.reveal-bloom { position: absolute; inset: -18%; border-radius: 50%; z-index: -1; pointer-events: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 16%, transparent), transparent 62%);
  filter: blur(26px); animation: bloomPulse 5.5s var(--ease-out) infinite; }
@keyframes bloomPulse { 0%, 100% { opacity: .7; transform: scale(1); } 50% { opacity: 1; transform: scale(1.07); } }
body.on-results .reveal-bloom { animation: none; }   /* scroll-perf freeze (F024 law) */
.ring-ticks { fill: none; stroke: var(--track); stroke-width: 3; stroke-dasharray: 1.5 7.86; opacity: .8; }
.reveal-meta { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.reveal-meta .ring-label { margin-top: 0; }
.conf-pill { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--text-2);
  border: 1px solid var(--border); border-radius: var(--r-pill); padding: 7px 14px; background: var(--fill-1); }
.conf-pill svg { width: 13px; height: 13px; color: var(--blue); flex: none; }
/* ── RESULTS — engine trust stats (REAL deterministic-engine counts) ──────*/
.stat-strip { display: flex; flex-wrap: wrap; align-items: stretch; gap: 0; margin-top: 22px; }
.stat { display: flex; flex-direction: column; gap: 3px; padding-right: clamp(16px, 2vw, 34px); }
.stat + .stat { border-left: 1px solid var(--border-soft); padding-left: clamp(16px, 2vw, 34px); }
.stat .sv { font-family: var(--font-display); font-weight: 700; font-size: clamp(20px, 2vw, 28px);
  line-height: 1.1; font-variant-numeric: tabular-nums;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.stat .sk { font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }

/* tier name row + product count + dosing chips */
.tier .tname-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.tier .tcount { flex: none; display: inline-flex; align-items: center; font-size: 11px; font-weight: 600;
  color: var(--muted); border: 1px solid var(--border-soft); border-radius: var(--r-pill);
  padding: 5px 11px; background: var(--fill-1); white-space: nowrap; }
.dose-chip { display: inline-flex; align-items: center; gap: 4px; font-size: 9.5px; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: var(--blue); vertical-align: 2px;
  background: var(--blue-soft); border: 1px solid color-mix(in srgb, var(--blue) 30%, transparent);
  border-radius: var(--r-pill); padding: 2.5px 8px; white-space: nowrap; }
.dose-chip svg { width: 11px; height: 11px; }

/* blocked-product cards: clearer severity accent */
.blocked-card { border-left: 3px solid color-mix(in srgb, var(--danger) 60%, transparent); }

/* footer CTA: subtle brand wash so the close feels designed, not flat */
.cta-card::after { content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: radial-gradient(90% 130% at 100% 0%, color-mix(in srgb, var(--blue) 10%, transparent), transparent 55%); }

/* ── Responsive parity for the new layer ──────────────────────────────────*/
@media (max-width: 1024px) {
  .stat-strip { justify-content: center; }
  .stat:first-child { padding-left: clamp(16px, 2vw, 34px); }
}
@media (max-width: 640px) {
  /* Continue becomes a full-width thumb target; Back stays compact */
  .q-foot { flex-wrap: nowrap; }
  .q-foot .btn-primary { flex: 1 1 auto; min-height: 54px; }
  .conf-pill { font-size: 11px; text-align: center; }
  .stat { padding-right: 14px; }
  .stat + .stat { padding-left: 14px; }
  .stat .sv { font-size: 19px; }
  .options.scale .option { min-height: 84px; padding: 14px 4px 12px; }
  .options.scale .opt-meter { height: 24px; gap: 4px; }
  .options.scale .opt-bar { width: 5px; }
}
/* ── LANDING STORY — the shield's ROTATING DNA emblem · proof bar · CTA beacon ──
   (assessment science) Twin sine strands + base-pair rungs + depth-lit beads,
   spun by mountHelix() via per-frame attribute writes (no innerHTML, no layout).
   CSS only assembles the group in once + tints — the 3-D motion lives in JS so
   it can self-park off-screen. Bead size/opacity/position are JS-owned. */
.pc-id-shield .dna-helix { transform-box: fill-box; transform-origin: center;
  animation: dnaAssemble 1.05s var(--ease-out) .85s backwards; }
@keyframes dnaAssemble { from { opacity: 0; transform: scale(.82); } to { opacity: 1; transform: scale(1); } }
.pc-id-shield .hx-strand { fill: none; stroke: url(#idnRim); stroke-width: 2.6; stroke-linecap: round; opacity: .52; }
.pc-id-shield .hx-rung { stroke: url(#idnRim); stroke-width: 2.7; stroke-linecap: round; opacity: .84; }
.pc-id-shield .hx-bead { pointer-events: none; }  /* cx/cy/r/opacity set per-frame in JS; fill = url(#idnAtom) */
/* proof bar — factual numbers in brand gradient; centered like the rest of the column */
.ls-proof { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px 18px; }
.lp { display: inline-flex; align-items: baseline; gap: 7px; font-size: 14px; color: var(--muted); white-space: nowrap; }
.lp .lp-num { font-family: var(--font-display); font-weight: 700; font-size: 18px; letter-spacing: -0.01em;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent; font-variant-numeric: tabular-nums; }
.lp-lock { align-items: center; }
.lp-lock svg { width: 15px; height: 15px; color: var(--shield); flex: none; }
.lp-sep { width: 1px; height: 14px; background: var(--border); flex: none; }
/* CTA beacon — a slow breathing brand halo behind "Begin my assessment".
   Lives on a pseudo so it NEVER fights the button's own hover shadow/transform. */
#screen-landing .hero-actions { position: relative; }
#screen-landing .hero-actions::before { content: ''; position: absolute; inset: -16px -28px; z-index: -1;
  border-radius: 999px; pointer-events: none; filter: blur(18px);
  background: radial-gradient(50% 72% at 50% 50%, color-mix(in srgb, var(--teal) 24%, transparent), transparent 72%);
  animation: ctaBeacon 4.2s var(--ease-out) infinite; }
@keyframes ctaBeacon { 0%, 100% { opacity: .5; transform: scale(.97); } 50% { opacity: 1; transform: scale(1.05); } }
[data-theme="light"] #screen-landing .hero-actions::before {
  background: radial-gradient(50% 72% at 50% 50%, rgba(22,82,240,.18), transparent 72%); }

@media (max-width: 380px) {
  .options.scale .opt-label { font-size: 10.5px; }
  .ls-proof { gap: 8px 12px; }
  .lp { font-size: 12.5px; }
  .lp .lp-num { font-size: 15.5px; }
}
/* ===========================================================================
   $50B RESULTS LAYER — why-modals · daylight results polish
   =========================================================================== */
/* WHY MODAL — one glass dialog for "Why this for me" (brand) and
   "Why we set this aside" (danger). Desktop: centered card. Phone: bottom sheet. */
body.modal-open { overflow-y: hidden !important; }
.idn-modal-backdrop { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center;
  justify-content: center; padding: 20px;
  background: color-mix(in srgb, var(--bg) 58%, transparent);
  -webkit-backdrop-filter: blur(16px) saturate(120%); backdrop-filter: blur(16px) saturate(120%);
  opacity: 0; transition: opacity .25s var(--ease-out); }
/* CRITICAL: `display:flex` above overrides the UA `[hidden]{display:none}`, so
   without this the closed backdrop stays in the layout (opacity 0) and eats
   every click on the page beneath it — making only the FIRST popup work.
   The compound [hidden] selector (0,2,0) outranks the .class rule (0,1,0). */
.idn-modal-backdrop[hidden] { display: none; }
.idn-modal-backdrop.show { opacity: 1; }
/* light mode — grey the page up a little so the popup pops (dark mode untouched) */
[data-theme="light"] .idn-modal-backdrop { background: color-mix(in srgb, #0c1426 24%, transparent); }
.idn-modal { position: relative; width: min(560px, 100%); max-height: min(78dvh, 660px);
  display: flex; flex-direction: column;
  background: var(--grad-card); border: 1px solid var(--border); border-radius: var(--r-lg);
  box-shadow: var(--shadow-float); overflow: hidden;
  transform: translateY(16px) scale(.965); opacity: 0;
  transition: transform .32s var(--ease-out), opacity .25s var(--ease-out); }
.idn-modal-backdrop.show .idn-modal { transform: none; opacity: 1; }
.idn-modal::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: var(--grad-brand-3); opacity: .9; }
.idn-modal.tone-danger::before { background: linear-gradient(90deg, var(--danger), color-mix(in srgb, var(--danger) 45%, var(--violet))); }
.idn-modal-grab { display: none; }
.idn-modal-x { position: absolute; top: 14px; right: 14px; width: 36px; height: 36px; border-radius: 50%; z-index: 2;
  display: grid; place-items: center; border: 1px solid var(--border); background: var(--fill-1); color: var(--muted);
  cursor: pointer; transition: color .18s, border-color .18s, background .18s, transform .18s var(--ease-spring); }
.idn-modal-x:hover { color: var(--text); border-color: var(--border-hi); background: var(--fill-2); transform: rotate(90deg); }
.idn-modal-x:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.idn-modal-x svg { width: 15px; height: 15px; }
.idn-modal-head { display: flex; gap: 14px; align-items: center; padding: 24px 60px 16px 24px; }
.idn-modal-ico { width: 46px; height: 46px; flex: none; border-radius: 14px; display: grid; place-items: center;
  background: var(--shield-soft); color: var(--shield);
  border: 1px solid color-mix(in srgb, var(--shield) 30%, transparent);
  box-shadow: 0 8px 22px -10px var(--shield-glow); }
.idn-modal.tone-danger .idn-modal-ico { background: var(--danger-soft); color: var(--danger);
  border-color: color-mix(in srgb, var(--danger) 30%, transparent);
  box-shadow: 0 8px 22px -10px color-mix(in srgb, var(--danger) 45%, transparent); }
.idn-modal-ico svg { width: 22px; height: 22px; }
.idn-modal-tag { display: block; font-size: 10.5px; font-weight: 700; letter-spacing: .1em;
  text-transform: uppercase; color: var(--teal); margin-bottom: 4px; }
.idn-modal.tone-danger .idn-modal-tag { color: var(--danger); }
.idn-modal-title { font-family: var(--font-display); font-weight: 700; font-size: clamp(18px, 2.6vw, 22px); line-height: 1.15; }
.idn-modal-body { padding: 4px 24px 10px; overflow-y: auto; overscroll-behavior: contain; }
.idn-modal-body .why-level { font-size: 13.5px; color: var(--text-2); line-height: 1.55;
  padding: 13px 16px; border-radius: var(--r-sm); background: var(--fill-1);
  border: 1px solid var(--border-soft); margin-bottom: 10px; }
.idn-modal-body .why-level b { display: block; font-size: 10.5px; text-transform: uppercase;
  letter-spacing: 0.09em; color: var(--teal); margin-bottom: 4px; }
.idn-modal.tone-danger .idn-modal-body .why-level b { color: var(--danger); }
.idn-modal-body .why-cite { font-size: 11px; color: var(--muted-2); font-style: italic; padding: 2px 2px 6px; }
.idn-modal-body .why-reason-t { font-size: 13px; }
.idn-modal-body .why-reason-cite { font-size: 11px; }
.idn-modal-foot { display: flex; justify-content: flex-end; padding: 12px 24px 22px; }
.idn-modal-foot .btn { min-height: 44px; padding: 10px 24px; font-size: 14px; }

/* ── Product hero — official IDLife imagery as a premium modal header ──────
   Wide pill-page banners (files.idlife.com) cropped center; a themed gradient
   + capsule glyph stands in when a product has no image or the asset fails. */
.idn-modal-hero { position: relative; margin: 0; width: 100%; height: 152px; flex: none;
  overflow: hidden; background: var(--grad-brand-3); border-bottom: 1px solid var(--border-soft); }
.idn-modal-hero[hidden] { display: none; }
.idn-modal-hero-img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; }
.idn-modal-hero::after { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, transparent 52%, color-mix(in srgb, var(--bg) 30%, transparent)); }
.idn-modal-hero.no-img { height: 100px; background: var(--grad-brand); display: grid; place-items: center; }
.idn-modal-hero.no-img .idn-modal-hero-img { display: none; }
.idn-modal-hero.no-img::after { display: none; }
.idn-modal-hero-fb { display: none; color: #fff; opacity: .92; }
.idn-modal-hero.no-img .idn-modal-hero-fb { display: grid; place-items: center; }
.idn-modal-hero-fb svg { width: 34px; height: 34px; }
.idn-modal.has-hero .idn-modal-head { padding-top: 18px; }
/* The X sits ON the colored hero → give it a high-contrast glass disc (dark
   scrim + white glyph + white hairline) so it stays visible over ANY product
   photo or the brand-gradient fallback, in BOTH light and dark themes. */
.idn-modal.has-hero .idn-modal-x { color: #fff; border-color: rgba(255,255,255,.62);
  background: rgba(11,18,32,.48); -webkit-backdrop-filter: blur(8px) saturate(140%);
  backdrop-filter: blur(8px) saturate(140%);
  box-shadow: 0 4px 16px -2px rgba(0,0,0,.5), inset 0 0 0 1px rgba(255,255,255,.10); }
.idn-modal.has-hero .idn-modal-x:hover { color: #fff; border-color: #fff;
  background: rgba(11,18,32,.68); transform: rotate(90deg); }
.idn-modal.has-hero .idn-modal-x:focus-visible { outline-color: #fff; outline-offset: 2px;
  box-shadow: 0 0 0 4px rgba(0,0,0,.4), 0 4px 16px -2px rgba(0,0,0,.5); }
.idn-modal.has-hero .idn-modal-grab { background: rgba(255,255,255,.72); }

/* ── Ingredient / function support — IDLife-style benefit list ─────────── */
.idn-modal-body .why-ing { padding: 13px 16px 14px; border-radius: var(--r-sm);
  background: var(--fill-1); border: 1px solid var(--border-soft); margin-bottom: 10px; }
.idn-modal-body .why-ing-h { display: block; font-size: 10.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .09em; color: var(--teal); margin-bottom: 9px; }
.idn-modal.tone-danger .idn-modal-body .why-ing-h { color: var(--danger); }
.why-ing-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.why-ing-list li { display: flex; gap: 10px; align-items: flex-start; font-size: 13px; line-height: 1.5; color: var(--text-2); }
.why-ing-dot { flex: none; width: 7px; height: 7px; margin-top: 5px; border-radius: 50%;
  background: var(--grad-brand); box-shadow: 0 0 0 3px color-mix(in srgb, var(--teal) 14%, transparent); }
.why-ing-n { font-weight: 650; color: var(--text); }
[data-theme="light"] .idn-modal-body .why-ing { background: #f6f9ff; }
@media (max-width: 640px) {
  .idn-modal-hero { height: 126px; }
  .idn-modal-hero.no-img { height: 86px; }
}
/* F238 · TABLET + PHONE (≤1024px) — every popup fills the full available height
   as a bottom sheet (grab handle, rounded top, flush bottom). The body scrolls
   internally so tall category popups (F226) never feel cramped. Computer
   (≥1025px) keeps its centered, content-sized card — untouched. */
@media (max-width: 1024px) {
  .idn-modal-backdrop { padding: 0; align-items: flex-end; }
  .idn-modal { width: 100%; height: 96dvh; max-height: 96dvh; border-radius: 22px 22px 0 0;
    border-bottom: none; transform: translateY(100%); }
  .idn-modal-backdrop.show .idn-modal { transform: none; }
  .idn-modal-grab { display: block; position: absolute; top: 9px; left: 50%; transform: translateX(-50%);
    width: 44px; height: 4px; border-radius: 99px; background: var(--border); z-index: 2; }
  .idn-modal-head { padding-top: 28px; }
  /* the scrolling body grows to consume all the freed height */
  .idn-modal-body { flex: 1 1 auto; }
  .idn-modal-foot .btn { width: 100%; }
  .tier .tv span { font-size: 9px; }
}
/* daylight results polish — white floating cards, crisp blue shadows */
[data-theme="light"] .idn-modal { background: linear-gradient(180deg, #ffffff, #f8fbff); border-color: rgba(16,42,98,0.12); }
[data-theme="light"] .idn-modal-x { background: #fff; }
[data-theme="light"] .blocked-card { background: #fff;
  border-color: color-mix(in srgb, var(--danger) 20%, transparent);
  box-shadow: 0 4px 16px -10px rgba(20,50,120,0.14); }
[data-theme="light"] .why-pill { background: #fff; box-shadow: 0 3px 10px -6px rgba(20,50,120,0.20); }
[data-theme="light"] .why-pill.danger { background: #fff; }
[data-theme="light"] .tier { box-shadow: 0 2px 4px rgba(16,42,98,0.03), 0 18px 44px -20px rgba(20,50,120,0.18); }
[data-theme="light"] .tier.recommended { box-shadow: 0 2px 4px rgba(16,42,98,0.04), 0 26px 60px -22px rgba(22,82,240,0.30); }
[data-theme="light"] .idn-modal-body .why-level { background: #f6f9ff; }

/* ===========================================================================
   F077 · HOME DECK DETAIL SHEETS — billion-dollar personalized popups.
   Reuses the .idn-modal shell (dual-theme glass · mobile bottom-sheet · a11y)
   with extra tones, a flexible action footer, and a small data-viz vocabulary
   (score ring · confidence range · milestone ladder · stepped guidance).
   ========================================================================== */
/* extra tones (the why-modal only uses brand/danger → these never touch it) */
.idn-modal.tone-teal::before   { background: linear-gradient(90deg, var(--teal), color-mix(in srgb, var(--teal) 45%, var(--blue))); }
.idn-modal.tone-blue::before   { background: linear-gradient(90deg, var(--blue), var(--violet)); }
.idn-modal.tone-violet::before { background: linear-gradient(90deg, var(--violet), var(--blue)); }
.idn-modal.tone-amber::before  { background: linear-gradient(90deg, var(--warning), color-mix(in srgb, var(--warning) 45%, var(--danger))); }
.idn-modal.tone-teal .idn-modal-ico   { background: var(--teal-soft);   color: var(--teal);    border-color: color-mix(in srgb, var(--teal) 30%, transparent);   box-shadow: 0 8px 22px -10px color-mix(in srgb, var(--teal) 50%, transparent); }
.idn-modal.tone-blue .idn-modal-ico   { background: var(--blue-soft);   color: var(--blue);    border-color: color-mix(in srgb, var(--blue) 30%, transparent);   box-shadow: 0 8px 22px -10px color-mix(in srgb, var(--blue) 50%, transparent); }
.idn-modal.tone-violet .idn-modal-ico { background: var(--violet-soft); color: var(--violet);  border-color: color-mix(in srgb, var(--violet) 30%, transparent); box-shadow: 0 8px 22px -10px color-mix(in srgb, var(--violet) 50%, transparent); }
.idn-modal.tone-amber .idn-modal-ico  { background: rgba(255,181,71,.16); color: var(--warning); border-color: color-mix(in srgb, var(--warning) 32%, transparent); box-shadow: 0 8px 22px -10px color-mix(in srgb, var(--warning) 55%, transparent); }
.idn-modal.tone-blue .idn-modal-tag   { color: var(--blue); }
.idn-modal.tone-violet .idn-modal-tag { color: var(--violet); }
.idn-modal.tone-amber .idn-modal-tag  { color: var(--warning); }

/* F081 · firmer, thicker, greener frame on the detail / product popups */
.idn-modal.ds-modal { border: 2px solid color-mix(in srgb, var(--shield) 58%, transparent);
  box-shadow: var(--shadow-float), 0 0 0 1px color-mix(in srgb, var(--shield) 14%, transparent); }
/* F355 · OPAQUE product/detail sheet — --grad-card is translucent (.55–.78
   alpha in dark mode), so over the blurred backdrop the sheet looked see-through.
   Layer a SOLID surface UNDER the gradient so content is never visible behind
   it, in either theme (light was already near-opaque, so this is a no-op there). */
.idn-modal.ds-modal { background: var(--surface); background-image: var(--grad-card); }

/* action footer — primary sits to the right on desktop / on top on mobile */
.idn-modal-foot.ds-foot { gap: 10px; flex-wrap: wrap; flex-direction: row-reverse; justify-content: flex-start; }
.ds-act { display: inline-flex; align-items: center; gap: 8px; }
.ds-act svg { width: 17px; height: 17px; flex: none; }

/* stat hero band (score ring + read) */
.ds-hero { display: flex; align-items: center; gap: 16px; padding: 16px; margin: 6px 0 4px;
  border-radius: var(--r-md); border: 1px solid var(--border);
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 8%, var(--surface)), var(--surface)); }
.ds-hero.tone-blue   { background: linear-gradient(135deg, color-mix(in srgb, var(--blue) 9%, var(--surface)), var(--surface)); }
.ds-hero.tone-violet { background: linear-gradient(135deg, color-mix(in srgb, var(--violet) 9%, var(--surface)), var(--surface)); }
.ds-hero.tone-amber  { background: linear-gradient(135deg, color-mix(in srgb, var(--warning) 12%, var(--surface)), var(--surface)); }
.ds-hero-meta { min-width: 0; }
.ds-hero-meta p { font-size: 13.5px; color: var(--text-2); line-height: 1.5; margin: 7px 0 0; }
.ds-hero-meta p b { color: var(--text); font-weight: 700; }
.ds-band { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-display); font-weight: 700;
  font-size: 11px; text-transform: uppercase; letter-spacing: .06em; padding: 4px 10px; border-radius: 999px;
  background: var(--fill-2); color: var(--text-2); }
.ds-band.b-strong { background: var(--teal-soft); color: var(--teal); }
.ds-band.b-building { background: var(--blue-soft); color: var(--blue); }
.ds-band.b-focus { background: rgba(255,181,71,.16); color: var(--warning); }

/* score ring */
.ds-ring-wrap { position: relative; flex: none; width: 84px; height: 84px; display: grid; place-items: center; }
.ds-ring { width: 84px; height: 84px; display: block; }
.ds-ring-tk { fill: none; stroke: var(--track); stroke-width: 7; }
.ds-ring-fg { fill: none; stroke-width: 7; stroke-linecap: round; transition: stroke-dashoffset 1s var(--ease-out); }
.ds-ring-num { position: absolute; font-family: var(--font-display); font-weight: 800; font-size: 24px; color: var(--text); }

/* sections + prose */
.ds-sec { margin-top: 16px; }
.ds-sec-h { display: block; font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .09em; color: var(--muted); margin-bottom: 9px; }
.ds-p { font-size: 13.5px; color: var(--text-2); line-height: 1.55; margin: 0; }
.ds-reasons { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.ds-reason { padding-left: 12px; border-left: 2px solid var(--border-soft); }
.ds-via {
  display: inline-flex; align-items: center; gap: 5px; margin-bottom: 5px;
  color: var(--teal); font-size: 11px; font-weight: 700; line-height: 1.35;
}
.ds-via svg { width: 12px; height: 12px; flex: none; }
.ds-cite { font-size: 11px; color: var(--muted-2); font-style: italic; line-height: 1.45; margin: 5px 0 0; }
.ds-lede { font-size: 15px; color: var(--text); line-height: 1.5; font-weight: 600; margin: 6px 0 2px; }
.ds-note { font-size: 11.5px; color: var(--muted); margin: 8px 0 0; line-height: 1.45; }
.ds-influence { margin: 16px 0 4px; padding: 12px 14px; border-radius: var(--r-sm); font-size: 13px; line-height: 1.5;
  color: var(--text-2); background: var(--fill-1); border: 1px solid var(--border-soft); border-left: 3px solid var(--teal); }
.ds-influence svg { width: 15px; height: 15px; vertical-align: -2px; margin-right: 4px; color: var(--teal); }
.ds-influence.tone-amber { border-left-color: var(--warning); }
.ds-influence.tone-blue { border-left-color: var(--blue); }

/* ── F413 · "WHY THIS WAS BLOCKED" science sheet ─────────────────────────── */
.ds-modal.tone-danger .ds-bullet-ic { color: var(--danger); }
.ds-blk-hero { display: flex; align-items: center; gap: 14px; padding: 14px; margin-bottom: 4px;
  border-radius: var(--r-md);
  background: radial-gradient(120% 130% at 0% 0%, color-mix(in srgb, var(--danger) 12%, transparent), transparent 58%),
              var(--fill-1);
  border: 1px solid color-mix(in srgb, var(--danger) 26%, transparent); }
.ds-blk-emb { flex: none; width: 52px; height: 52px; border-radius: 16px; display: grid; place-items: center;
  color: var(--danger); background: var(--danger-soft);
  border: 1px solid color-mix(in srgb, var(--danger) 30%, transparent);
  box-shadow: 0 12px 28px -14px color-mix(in srgb, var(--danger) 65%, transparent); }
.ds-blk-emb svg { width: 26px; height: 26px; }
.ds-blk-meta { min-width: 0; display: flex; flex-direction: column; gap: 7px; }
.ds-blk-meta > b { font-family: var(--font-display); font-size: clamp(16px, 2.2vw, 19px);
  letter-spacing: -.01em; color: var(--text); line-height: 1.2; }
.ds-blk-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ds-blk-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 10.5px; font-weight: 700;
  letter-spacing: .03em; padding: 3px 9px; border-radius: 999px; color: var(--text-2);
  background: var(--fill-2); border: 1px solid var(--border-soft); white-space: nowrap; }
.ds-blk-chip svg { width: 11px; height: 11px; }
.ds-blk-chip.is-block { color: var(--danger);
  background: color-mix(in srgb, var(--danger) 10%, transparent);
  border-color: color-mix(in srgb, var(--danger) 32%, transparent); }
.ds-blk-trigs { display: flex; flex-wrap: wrap; gap: 7px; }
.ds-blk-trig { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600;
  padding: 6px 11px; border-radius: 999px; color: var(--text);
  background: color-mix(in srgb, var(--warning) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--warning) 30%, transparent); }
.ds-blk-trig svg { width: 12px; height: 12px; flex: none; color: var(--warning); }
[data-theme="light"] .ds-blk-hero { background: #fff5f6; border-color: rgba(214, 60, 80, .3); }
[data-theme="light"] .ds-blk-chip { background: #f2f6fd; border-color: rgba(16, 42, 98, .16); }
/* The blocked sheet is dense clinical copy — grey is too faint to read here. */
.ds-modal.tone-danger .ds-p,
.ds-modal.tone-danger .ds-cite,
.ds-modal.tone-danger .ds-note,
.ds-modal.tone-danger .ds-sec-h,
.ds-modal.tone-danger .ds-influence,
.ds-modal.tone-danger .ds-bullet-t,
.ds-modal.tone-danger .ds-blk-chip { color: var(--text); }
[data-theme="light"] .ds-modal.tone-danger .ds-p,
[data-theme="light"] .ds-modal.tone-danger .ds-cite,
[data-theme="light"] .ds-modal.tone-danger .ds-note,
[data-theme="light"] .ds-modal.tone-danger .ds-sec-h,
[data-theme="light"] .ds-modal.tone-danger .ds-influence,
[data-theme="light"] .ds-modal.tone-danger .ds-bullet-t,
[data-theme="light"] .ds-modal.tone-danger .ds-blk-chip { color: #000; }
.ds-blk-chip.is-when { color: var(--teal);
  background: var(--teal-soft);
  border-color: color-mix(in srgb, var(--teal) 34%, transparent); }
[data-theme="light"] .ds-modal.tone-danger .ds-blk-chip.is-block { color: var(--danger); }
[data-theme="light"] .ds-modal.tone-danger .ds-blk-chip.is-when { color: #0b6d66; }
@media (max-width: 640px) {
  .ds-blk-hero { gap: 11px; padding: 12px; }
  .ds-blk-emb { width: 44px; height: 44px; border-radius: 14px; }
  .ds-blk-emb svg { width: 22px; height: 22px; }
}

/* lever / tip bullets */
.ds-bullets { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
.ds-bullets li { display: flex; gap: 11px; align-items: flex-start; }
.ds-bullet-ic { flex: none; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 9px; background: var(--fill-2); color: var(--teal); }
.ds-bullet-ic svg { width: 16px; height: 16px; }
.idn-modal.tone-amber .ds-bullet-ic { color: var(--warning); }
.idn-modal.tone-blue .ds-bullet-ic { color: var(--blue); }
.idn-modal.tone-violet .ds-bullet-ic { color: var(--violet); }
.ds-bullet-t { font-size: 13px; color: var(--text-2); line-height: 1.5; }
.ds-bullet-t b { display: block; font-size: 13.5px; color: var(--text); font-weight: 650; margin-bottom: 1px; }
.ds-bullets.plain .ds-bullet-ic { width: 24px; height: 24px; border-radius: 7px; background: transparent; }
.ds-bullets.plain .ds-bullet-ic svg { width: 15px; height: 15px; }

/* numbered steps */
.ds-steps { list-style: none; margin: 0; padding: 0; counter-reset: dss; display: flex; flex-direction: column; gap: 11px; }
.ds-steps li { display: flex; gap: 12px; align-items: flex-start; font-size: 13.5px; color: var(--text-2); line-height: 1.5; }
.ds-step-n { counter-increment: dss; flex: none; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 8px;
  background: var(--grad-brand); color: var(--ink-on-brand); font-family: var(--font-display); font-weight: 800; font-size: 12.5px; }
.ds-step-n::before { content: counter(dss); }

/* linked-system chip + needle-mover jumps */
.ds-chip, .ds-jump { display: inline-flex; align-items: center; gap: 10px; width: 100%; padding: 12px 13px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px solid var(--border); color: var(--text); cursor: pointer; text-align: left;
  font-family: var(--font-body); font-size: 13.5px; transition: border-color .2s, background .2s, transform .2s var(--ease-out); }
.ds-chip:hover, .ds-jump:hover { border-color: var(--border-hi); background: var(--fill-2); transform: translateY(-1px); }
.ds-chip:focus-visible, .ds-jump:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ds-chip > span, .ds-jump > span { flex: 1; min-width: 0; font-weight: 600; }
.ds-chip > svg:first-child { width: 18px; height: 18px; color: var(--blue); flex: none; }
.ds-chip b { font-family: var(--font-display); font-weight: 800; }
.ds-chip b.b-strong { color: var(--teal); } .ds-chip b.b-building { color: var(--blue); } .ds-chip b.b-focus { color: var(--warning); }
.ds-chip svg:last-child, .ds-jump svg:last-child { width: 15px; height: 15px; color: var(--muted); flex: none; }
.ds-jumps { display: flex; flex-direction: column; gap: 9px; }
.ds-jump-n { flex: none; width: 24px; height: 24px; display: grid; place-items: center; border-radius: 7px;
  background: var(--grad-brand); color: var(--ink-on-brand); font-family: var(--font-display); font-weight: 800; font-size: 12px; }

/* milestone ladder */
.ds-mile { list-style: none; margin: 0; padding: 0; }
.ds-rung { display: flex; align-items: center; gap: 12px; padding: 11px 2px; border-bottom: 1px solid var(--hairline); }
.ds-rung:last-child { border-bottom: none; }
.ds-rung-dot { flex: none; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center;
  border: 2px solid var(--border); color: var(--ink-on-brand); }
.ds-rung-dot svg { width: 12px; height: 12px; }
.ds-rung.done .ds-rung-dot { background: var(--grad-brand); border-color: transparent; }
.ds-rung.next .ds-rung-dot { border-color: var(--violet); box-shadow: 0 0 0 4px var(--violet-soft); }
.ds-rung-lbl { font-family: var(--font-display); font-weight: 700; font-size: 14px; color: var(--text); flex: 1; }
.ds-rung.up .ds-rung-lbl, .ds-rung.up .ds-rung-at { color: var(--muted); }
.ds-rung-at { font-family: var(--font-display); font-weight: 700; font-size: 13px; color: var(--text-2); min-width: 26px; text-align: right; }
.ds-rung-tag { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; min-width: 52px; text-align: right; }
.ds-rung.done .ds-rung-tag { color: var(--teal); }
.ds-rung.next .ds-rung-tag { color: var(--violet); }

/* stat row */
.ds-stat-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 12px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--hairline); }
.ds-stat b { display: block; font-family: var(--font-display); font-weight: 800; font-size: 20px;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; line-height: 1.05; }
.ds-stat small { display: block; font-size: 11.5px; color: var(--muted); margin-top: 3px; }

/* F080 · PLAN SHOWCASE POPUP — the prescribed-plan soft-sell sheet (dsPlan). */
.ds-subp { font-size: 13.5px; color: var(--text-2); line-height: 1.55; margin: 9px 0 2px; }
.ds-subp b { color: var(--text); font-weight: 650; }
.ds-plan-hero { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 10px;
  padding: 14px 10px; margin: 8px 0 14px; border-radius: var(--r-md);
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 12%, var(--surface)), var(--surface));
  border: 1px solid var(--border-soft); }
.ds-plan-metric { text-align: center; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ds-plan-metric b { font-family: var(--font-display); font-weight: 800; font-size: clamp(16px, 4vw, 21px); line-height: 1.1;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  white-space: nowrap; }
.ds-plan-metric small { font-size: 11px; color: var(--muted); }
.ds-plan-metric + .ds-plan-metric { border-left: 1px solid var(--hairline); }

.ds-prod-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ds-prod { appearance: none; -webkit-appearance: none; width: 100%; text-align: left; font: inherit; color: inherit; cursor: pointer;
  display: flex; align-items: center; gap: 12px; padding: 10px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px solid var(--border-soft); transition: border-color .2s, background .2s, transform .2s var(--ease-out); }
.ds-prod:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) { .ds-prod:hover { border-color: var(--border-hi); background: var(--fill-2); transform: translateX(2px); } }
.ds-prod-thumb { position: relative; flex: none; width: 52px; height: 52px; border-radius: 12px; overflow: hidden;
  background: var(--grad-brand); border: 1px solid color-mix(in srgb, var(--border) 60%, transparent); }
.ds-prod-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ds-prod-fb { display: none; }
.ds-prod-thumb.no-img .ds-prod-img { display: none; }
.ds-prod-thumb.no-img .ds-prod-fb { display: grid; place-items: center; position: absolute; inset: 0; }
.ds-prod-thumb.no-img .ds-prod-fb svg { width: 30px; height: 34px; }

/* F081 · product-hero fallback — when a supplement has no IDLife photo, show the
   IDLife iD Shield as a centered Mac-app-icon tile (NOT a full-bleed glyph). */
.ds-modal.has-hero .ds-hero-img.no-img { height: 168px; background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 16%, var(--surface)), var(--surface));
  display: grid; place-items: center; }
.ds-modal.has-hero .ds-hero-img.no-img .idn-modal-hero-fb { display: grid; place-items: center; }
.ds-modal.has-hero .ds-hero-img.no-img .idn-modal-hero-fb svg {
  width: 76px; height: 86px;
  filter: drop-shadow(0 12px 26px rgba(8, 20, 40, .28)); }
@media (max-width: 640px) {
  .ds-modal.has-hero .ds-hero-img.no-img { height: 128px; }
  .ds-modal.has-hero .ds-hero-img.no-img .idn-modal-hero-fb svg { width: 60px; height: 68px; }
}
.ds-prod-tx { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 3px; }
.ds-prod-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ds-prod-top b { font-size: 14px; color: var(--text); font-weight: 650; }
.ds-prod-goal { font-size: 10px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;
  color: var(--teal); background: var(--teal-soft); padding: 2px 8px; border-radius: 999px; }
.ds-prod-tx small { font-size: 12px; color: var(--text-2); line-height: 1.45; }
.ds-prod-chk { flex: none; color: var(--teal); display: grid; place-items: center; }
.ds-prod-chk svg { width: 16px; height: 16px; }
.ds-prod-go { flex: none; color: var(--muted); display: grid; place-items: center; transition: color .2s, transform .2s var(--ease-out); }
.ds-prod-go svg { width: 18px; height: 18px; }
@media (hover: hover) { .ds-prod:hover .ds-prod-go { color: var(--teal); transform: translateX(3px); } }

/* F081 · product explainer — meta chips under the hero image */
.ds-pchips { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 4px; }
.ds-pchip { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--text-2);
  padding: 6px 11px; border-radius: 999px; background: var(--fill-1); border: 1px solid var(--border-soft); }
.ds-pchip svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
.ds-pchip b { color: var(--text); font-weight: 700; }
.ds-pchip-price { color: var(--text); background: var(--teal-soft); border-color: transparent; font-weight: 700; }
/* Why the stepper opens where it does — the engine's recommended quantity. */
.ds-pchip-dose { color: var(--text-2, var(--muted)); border-color: color-mix(in srgb, var(--teal) 32%, transparent); }
.ds-pchip-dose b { color: var(--teal); font-weight: 800; }
.ds-pchip-dose--off { border-color: color-mix(in srgb, var(--violet) 38%, transparent); }
.ds-pchip-dose--off svg, .ds-pchip-dose--off b { color: var(--violet); }

/* ── clickable affordances on the Home deck ──────────────────────────────── */
.ov-sys[role="button"] { cursor: pointer; padding: 9px 10px; margin: 0 -10px; border-radius: 12px; border: 1px solid transparent;
  transition: background .18s var(--ease-out), border-color .18s var(--ease-out), transform .18s var(--ease-out); }
.ov-sys[role="button"]:hover { background: var(--fill-1); border-color: var(--border); }
.ov-sys[role="button"]:active { transform: scale(.99); }
.ov-sys[role="button"]:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-sys-go { flex: none; width: 16px; height: 16px; color: var(--muted-2); display: grid; place-items: center; transform: rotate(-90deg);
  opacity: 0; transition: opacity .18s var(--ease-out); }
.ov-sys-go svg { width: 16px; height: 16px; }
.ov-sys[role="button"]:hover .ov-sys-go, .ov-sys[role="button"]:focus-visible .ov-sys-go { opacity: 1; }

.ov-prio[role="button"] { cursor: pointer; transition: border-color .18s var(--ease-out), background .18s var(--ease-out), transform .18s var(--ease-out); }
.ov-prio[role="button"]:hover { border-color: var(--border-hi); background: var(--fill-2); }
.ov-prio[role="button"]:active { transform: scale(.99); }
.ov-prio[role="button"]:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-prio-go { margin-left: auto; margin-top: 2px; flex: none; width: 16px; height: 16px; color: var(--muted-2);
  display: grid; place-items: center; transform: rotate(-90deg); opacity: .5; transition: opacity .18s var(--ease-out); }
.ov-prio-go svg { width: 16px; height: 16px; }
.ov-prio[role="button"]:hover .ov-prio-go { opacity: 1; }

.ov-fx li[role="button"] { cursor: pointer; padding: 8px 10px; margin: 0 -10px; border-radius: 10px; border: 1px solid transparent;
  transition: background .18s var(--ease-out), border-color .18s var(--ease-out); }
.ov-fx li[role="button"]:hover { background: var(--fill-1); border-color: var(--border); }
.ov-fx li[role="button"]:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }

.ov-mom-more { margin-top: 16px; display: inline-flex; align-items: center; gap: 8px; background: none; border: none;
  padding: 6px 2px; cursor: pointer; color: var(--violet); font-family: var(--font-display); font-weight: 600; font-size: 13.5px; }
.ov-mom-more svg { width: 15px; height: 15px; transition: transform .2s var(--ease-out); }
.ov-mom-more:hover svg { transform: translateX(3px); }
.ov-mom-more:focus-visible { outline: 2px solid var(--violet); outline-offset: 2px; border-radius: 6px; }

@media (hover: none) {
  .ov-sys-go { opacity: .55; }
}

/* ── F078 · DOCKED SHEET — glide the open detail sheet into the left background
   lane MyAI's expand opens (body.myai-open), so the popup + chat sit side-by-side.
   Computer-only (the lane only exists ≥1025px). The scrim dissolves so MyAI and
   the pinched page stay visible + clickable; only the card keeps pointer events.
   The card glides from viewport-center into the lane via a transform (the only
   way to interpolate centered→pinned), left-aligned to the same gutter as the
   tab pill, in concert with MyAI's 1.1s expand. */
@media (min-width: 1025px) {
  /* F110 · FOCUS DIM — when MyAI is open AND a popup is docked in the left lane
     (the only time .docked exists), grey/black-blur EVERYTHING else so just the
     two popups stand out: the docked card on the LEFT + the MyAI chat on the
     RIGHT. The scrim drops to z-index 78 so it sits BELOW the MyAI popup (z-80)
     and below the docked card (its own child) — both stay crisp & interactive —
     while the page, topbar and tab pill behind it dim out. pointer-events stays
     none so it's a visual veil only (nothing behind gets click-trapped). */
  .ds-backdrop.docked {
    z-index: 78;                          /* under MyAI (z-80); the card child still paints above */
    pointer-events: none;                 /* visual-only dim — page + MyAI stay reachable */
    background: rgba(8, 11, 20, 0.62);    /* grey/black scrim, both themes */
    -webkit-backdrop-filter: blur(16px) saturate(118%); backdrop-filter: blur(16px) saturate(118%);
    transition: background .45s var(--ease-out),
                -webkit-backdrop-filter .45s var(--ease-out), backdrop-filter .45s var(--ease-out);
  }
  .ds-backdrop.docked .ds-modal {
    --ds-pad: clamp(16px, 2.4vw, 30px);                 /* matches the tab pill's left gutter */
    --ds-w: min(var(--lane-w, 540px), 540px);           /* fit the lane, never wider than the resting card */
    pointer-events: auto;                                /* the card itself stays interactive */
    width: var(--ds-w); max-width: var(--ds-w);
    max-height: min(70dvh, 600px);                       /* clear the floating bottom tab pill */
    transform: translateX(calc(var(--ds-pad) - 50vw + var(--ds-w) / 2)) scale(.99);
    box-shadow: var(--shadow-lg), 0 0 0 1px var(--border);
    transition: transform 1s var(--ease-lux), width 1s var(--ease-lux),
                max-width 1s var(--ease-lux), opacity .3s var(--ease-out);
  }
}

@media (prefers-reduced-motion: reduce) {
  .ds-ring-fg { transition: none !important; }
  .ds-chip:hover, .ds-jump:hover { transform: none; }
  .ov-sys[role="button"]:active, .ov-prio[role="button"]:active { transform: none; }
  .ov-mom-more:hover svg { transform: none; }
  .ds-backdrop.docked, .ds-backdrop.docked .ds-modal { transition: none !important; }
}

[data-theme="light"] .rnav-chip.active { background: #ffffff;
  border-color: color-mix(in srgb, var(--blue) 38%, transparent);
  box-shadow: 0 1px 2px rgba(16,42,98,0.05), 0 8px 20px -10px rgba(22,82,240,0.30); }
[data-theme="light"] .rnav-chip.active svg { color: var(--blue); }
[data-theme="light"] .rnav-chip.active .rnav-n { background: var(--grad-brand); }
[data-theme="light"] .results-progress { box-shadow: 0 0 10px rgba(22,82,240,0.35); }
[data-theme="light"] .back-top { background: #ffffff; border-color: rgba(16,42,98,0.12);
  box-shadow: 0 2px 4px rgba(16,42,98,0.05), 0 14px 34px -12px rgba(20,50,120,0.25); }
[data-theme="light"] .back-top:hover { color: var(--blue); }
[data-theme="light"] .pg-delta { background: #ffffff; border-color: rgba(16,42,98,0.10);
  box-shadow: 0 4px 14px -10px rgba(20,50,120,0.14); }
[data-theme="light"] .pg-delta .v.pos { text-shadow: none; }
[data-theme="light"] .pg-chart { background: #ffffff; border-color: rgba(16,42,98,0.10);
  box-shadow: inset 0 1px 2px rgba(16,42,98,0.04); }
[data-theme="light"] .pg-dot::after { background: #ffffff; border-color: var(--blue);
  box-shadow: 0 1px 6px rgba(22,82,240,0.35); }
[data-theme="light"] .pg-dot.now::after { background: var(--grad-brand); border-color: #ffffff; }
[data-theme="light"] .pg-tip { background: #ffffff; border-color: rgba(22,82,240,0.30);
  box-shadow: 0 14px 34px -12px rgba(20,50,120,0.30); }
[data-theme="light"] .pg-you i { border-color: #ffffff; box-shadow: 0 2px 10px rgba(22,82,240,0.45); }
[data-theme="light"] .grade-medallion::before { background: #ffffff; }

/* ── Reduced-motion: neutralize every new infinite/entrance animation ─────*/
@media (prefers-reduced-motion: reduce) {
  .reveal-bloom, .progress-fill::after,
  .q-shield-note { animation: none !important; transition: none !important; }
  /* F373 · the processing engine settles into a still, composed emblem —
     rings hold their arc, the check stays drawn, sparks/scan are hidden. */
  .proc-aura, .proc-grid, .proc-ring, .proc-scan, .proc-sat, .proc-halo,
  .proc-core, .pc-shield-mark { animation: none !important; }
  .pc-shield-mark { opacity: 1; }
  .proc-sparks, .proc-scan { display: none; }
  .options .option { animation: none !important; opacity: 1; }
  .options.scale .opt-bar { transition: none; transform: none; }
  .pc-id-shield .dna-helix { opacity: 1; transform: none; animation: none !important; }
  #screen-landing .hero-actions::before { animation: none !important; opacity: .6; }
  .idn-modal-backdrop, .idn-modal { transition: none !important; }
  .why-pill, .idn-modal-x { transition: none !important; transform: none !important; }
  .sys-row, .sys-list.resorted .sys-row { transition: none !important; animation: none !important; }
  .rnav-chip, .back-top { transition: none !important; }
  .back-top.show { transform: none; }
  .pg-dot.now::before { animation: none !important; }
  .pg-tip, .pg-cross, .pg-dot::after, .grade-medallion { transition: none !important; }
}

/* ===========================================================================
   F072 · HEADER STATUS POPOVERS — anchored "what does this mean?" cards for the
   top-right pills (DNA connected · Shield Active · Score N). Official IDLife
   imagery + graceful gradient/glyph fallback. Steady (anchored), eased, dual-
   theme, reduced-motion safe. Above the chrome + theme toggle, below the modal.
   =========================================================================== */
.dna-badge[data-pop], .shield-badge[data-pop], .score-chip[data-pop] { cursor: help;
  transition: color .18s, border-color .18s, background .18s, transform .18s var(--ease-spring); }
.dna-badge[data-pop]:hover, .shield-badge[data-pop]:hover, .score-chip[data-pop]:hover {
  border-color: color-mix(in srgb, var(--blue) 82%, transparent); transform: translateY(-1px); }
.dna-badge[data-pop]:focus-visible, .shield-badge[data-pop]:focus-visible, .score-chip[data-pop]:focus-visible {
  outline: 2px solid var(--teal); outline-offset: 2px; }

.idn-pop { position: fixed; z-index: 90; left: 0; top: 0; width: min(360px, calc(100vw - 24px));
  /* F100 · OPAQUE popover — --grad-card is translucent (.55–.78 alpha), so the
     hover card ghosted the page through it. Seal it with a solid --surface base
     UNDER the gradient: same tinted look, nothing shows through. */
  background: var(--grad-card), var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg);
  box-shadow: var(--shadow-float); overflow: hidden;
  opacity: 0; transform: translateY(6px) scale(.97); transform-origin: top right;
  transition: opacity .24s var(--ease-out), transform .3s var(--ease-out); }
.idn-pop[hidden] { display: none; }
.idn-pop.show { opacity: 1; transform: none; }
.idn-pop[data-place="top"] { transform-origin: bottom right; transform: translateY(-6px) scale(.97); }
.idn-pop[data-place="top"].show { transform: none; }
.idn-pop::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; z-index: 4;
  background: var(--grad-brand-3); }
.idn-pop[data-tone="shield"]::before { background: linear-gradient(90deg, var(--shield), color-mix(in srgb, var(--shield) 45%, var(--teal))); }
.idn-pop[data-tone="dna"]::before { background: linear-gradient(90deg, var(--blue), var(--violet)); }

/* pointer — a small tone-colored diamond cap (below the pill) / surface arrow (above) */
.idn-pop-arrow { position: absolute; left: var(--arrow-x, 50%); width: 12px; height: 12px; z-index: 5;
  transform: translateX(-50%) rotate(45deg); background: var(--teal); }
.idn-pop[data-tone="shield"] .idn-pop-arrow { background: var(--shield); }
.idn-pop[data-tone="dna"] .idn-pop-arrow { background: var(--blue); }
.idn-pop[data-place="bottom"] .idn-pop-arrow { top: -6px; }
.idn-pop[data-place="top"] .idn-pop-arrow { bottom: -6px; background: var(--surface);
  border: 1px solid var(--border); border-left: 0; border-top: 0; }

/* hero — official IDLife photo; themed gradient + glyph stands in if it's absent/fails */
.idn-pop-hero { position: relative; margin: 0; height: 116px; overflow: hidden; background: var(--grad-brand-3); }
.idn-pop-img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; }
.idn-pop-hero::after { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, transparent 36%, color-mix(in srgb, var(--bg) 42%, transparent)); }
.idn-pop-hero.no-img { background: var(--grad-brand); }
.idn-pop[data-tone="shield"] .idn-pop-hero.no-img { background: linear-gradient(135deg, var(--shield), color-mix(in srgb, var(--shield) 45%, var(--teal))); }
.idn-pop[data-tone="dna"] .idn-pop-hero.no-img { background: linear-gradient(135deg, var(--blue), var(--violet)); }
.idn-pop-hero.no-img .idn-pop-img, .idn-pop-hero.no-img::after { display: none; }
.idn-pop-fb { display: none; position: absolute; inset: 0; place-items: center; color: #fff; opacity: .95; }
.idn-pop-fb svg { width: 36px; height: 36px; }
.idn-pop-hero.no-img .idn-pop-fb { display: grid; }
/* glyph chip sealing the photo's lower-right (hidden on the glyph fallback) */
.idn-pop-badge { position: absolute; right: 14px; bottom: 12px; z-index: 3; width: 38px; height: 38px;
  border-radius: 11px; display: grid; place-items: center; color: var(--teal);
  background: var(--surface); border: 1px solid var(--border); box-shadow: var(--shadow-sm); }
.idn-pop[data-tone="shield"] .idn-pop-badge { color: var(--shield); }
.idn-pop[data-tone="dna"] .idn-pop-badge { color: var(--blue); }
.idn-pop-badge svg { width: 20px; height: 20px; }
.idn-pop-hero.no-img .idn-pop-badge { display: none; }

.idn-pop-body { padding: 16px 18px 17px; }
.idn-pop-tag { display: block; font-size: 10px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--teal); margin-bottom: 5px; }
.idn-pop[data-tone="shield"] .idn-pop-tag { color: var(--shield); }
.idn-pop[data-tone="dna"] .idn-pop-tag { color: var(--blue); }
.idn-pop-title { font-family: var(--font-display); font-weight: 700; font-size: 16.5px; line-height: 1.2;
  color: var(--text); margin: 0 0 8px; }
.idn-pop-title small { font-size: .68em; color: var(--muted); font-weight: 600; }
.idn-pop-lede { font-size: 12.5px; line-height: 1.5; color: var(--text-2); margin: 0 0 13px; }
.idn-pop-lede em { font-style: normal; color: var(--text); font-weight: 600; }
.idn-pop-rows { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.idn-pop[data-tone="score"] .idn-pop-rows { max-height: min(360px, calc(100vh - 330px)); overflow: auto; overscroll-behavior: contain; padding-right: 3px; }
.idn-pop-rows li { display: flex; gap: 11px; align-items: flex-start; }
.idn-pop-ic { flex: none; width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center;
  color: var(--teal); background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 22%, transparent); }
.idn-pop[data-tone="shield"] .idn-pop-ic { color: var(--shield); background: var(--shield-soft);
  border-color: color-mix(in srgb, var(--shield) 22%, transparent); }
.idn-pop[data-tone="dna"] .idn-pop-ic { color: var(--blue); background: color-mix(in srgb, var(--blue) 12%, transparent);
  border-color: color-mix(in srgb, var(--blue) 24%, transparent); }
.idn-pop-ic svg { width: 16px; height: 16px; }
.idn-pop-rt { font-size: 12px; line-height: 1.45; color: var(--text-2); }
.idn-pop-rt b { display: block; font-size: 12.5px; color: var(--text); font-weight: 650; margin-bottom: 1px; }
.idn-pop-foot { margin: 13px 0 0; padding-top: 11px; border-top: 1px solid var(--border-soft);
  font-size: 10.5px; line-height: 1.45; color: var(--muted-2); }
.idn-pop-foot[hidden] { display: none; }

/* F072→F078 · one smart, context-aware question per pill — tap to drop it
   straight into MyAI. Tinted to the badge's tone; teal by default. */
.idn-pop-ask { margin: 13px 0 0; width: 100%; display: flex; align-items: center; gap: 9px;
  padding: 10px 12px; border-radius: var(--r-sm); cursor: pointer; text-align: left; font: inherit;
  font-size: 12.5px; font-weight: 650; line-height: 1.35; color: var(--text);
  background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  transition: background .18s, border-color .18s, transform .18s var(--ease-spring); }
.idn-pop-ask:hover { background: color-mix(in srgb, var(--teal) 15%, transparent);
  border-color: color-mix(in srgb, var(--teal) 48%, transparent); transform: translateY(-1px); }
.idn-pop-ask:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.idn-pop-ask[hidden] { display: none; }
.idn-pop-ask-ic { flex: none; display: grid; place-items: center; color: var(--teal); }
.idn-pop-ask-ic svg { width: 16px; height: 16px; }
.idn-pop-ask-tx { flex: 1 1 auto; min-width: 0; }
.idn-pop-ask-go { flex: none; display: grid; place-items: center; opacity: .5;
  transition: transform .18s var(--ease-spring), opacity .18s; }
.idn-pop-ask-go svg { width: 15px; height: 15px; }
.idn-pop-ask:hover .idn-pop-ask-go { transform: translateX(2px); opacity: .85; }
.idn-pop[data-tone="shield"] .idn-pop-ask { background: var(--shield-soft);
  border-color: color-mix(in srgb, var(--shield) 30%, transparent); }
.idn-pop[data-tone="shield"] .idn-pop-ask:hover { background: color-mix(in srgb, var(--shield) 14%, transparent);
  border-color: color-mix(in srgb, var(--shield) 46%, transparent); }
.idn-pop[data-tone="shield"] .idn-pop-ask-ic { color: var(--shield); }
.idn-pop[data-tone="shield"] .idn-pop-ask:focus-visible { outline-color: var(--shield); }
.idn-pop[data-tone="dna"] .idn-pop-ask { background: color-mix(in srgb, var(--blue) 12%, transparent);
  border-color: color-mix(in srgb, var(--blue) 30%, transparent); }
.idn-pop[data-tone="dna"] .idn-pop-ask:hover { background: color-mix(in srgb, var(--blue) 18%, transparent);
  border-color: color-mix(in srgb, var(--blue) 48%, transparent); }
.idn-pop[data-tone="dna"] .idn-pop-ask-ic { color: var(--blue); }
.idn-pop[data-tone="dna"] .idn-pop-ask:focus-visible { outline-color: var(--blue); }

[data-theme="light"] .idn-pop { background: linear-gradient(180deg, #ffffff, #f8fbff); border-color: rgba(16,42,98,0.12); }
[data-theme="light"] .idn-pop-badge { background: #fff; }

@media (prefers-reduced-motion: reduce) {
  .idn-pop { transition: none !important; }
  .dna-badge[data-pop]:hover, .shield-badge[data-pop]:hover, .score-chip[data-pop]:hover { transform: none; }
}

/* ===========================================================================
   F127 · iDNUTRITION ESSENTIALS — the $3B gamified account hub popover. A violet
   MyAI-flavored hero (live grid, score ring, level, streak) over a tappable
   navigation grid to everything doable here. Tokenized · dual-theme · responsive
   · reduced-motion safe. ==================================================== */
.ess-scrim { position: fixed; inset: 0; z-index: 94; opacity: 0; pointer-events: none;
  background: color-mix(in srgb, #050d24 74%, transparent);
  -webkit-backdrop-filter: blur(8px) saturate(.9); backdrop-filter: blur(8px) saturate(.9);
  transition: opacity .26s var(--ease-out); }
.ess-scrim[hidden] { display: none; }
.ess-scrim.show { opacity: 1; }
[data-theme="light"] .ess-scrim { background: color-mix(in srgb, #0e1c3c 52%, transparent); }
@media (prefers-reduced-motion: reduce) { .ess-scrim { transition: none; } }

.ess-pop { position: fixed; z-index: 95; left: 0; top: 0; width: min(472px, calc(100vw - 24px));
  background: var(--grad-card), var(--surface); border: 1px solid var(--border); border-radius: calc(var(--r-lg) + 4px);
  box-shadow:
    0 40px 90px -34px color-mix(in srgb, var(--violet) 40%, rgba(8,14,40,.6)),
    0 14px 40px -22px rgba(8,14,40,.5),
    inset 0 1px 0 color-mix(in srgb, #fff 60%, transparent);
  overflow: hidden; opacity: 0; transform: translateY(10px) scale(.965);
  transform-origin: top center; transition: opacity .26s var(--ease-out), transform .42s var(--ease-spring); }
/* the $1B signature — a faint gradient hairline framing the whole card */
.ess-pop::before { content: ''; position: absolute; inset: 0; z-index: 6; pointer-events: none; border-radius: inherit;
  padding: 1px; background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 70%, transparent), transparent 38%, transparent 62%, color-mix(in srgb, var(--violet) 70%, transparent));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
          mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude; }
.ess-pop[hidden] { display: none; }
.ess-pop.show { opacity: 1; transform: none; }
.ess-pop[data-place="top"] { transform-origin: bottom center; transform: translateY(-10px) scale(.965); }
.ess-pop[data-place="top"].show { transform: none; }
.ess-arrow { position: absolute; left: var(--arrow-x, 50%); width: 13px; height: 13px; z-index: 5;
  transform: translateX(-50%) rotate(45deg); background: var(--violet); }
.ess-pop[data-place="bottom"] .ess-arrow { top: -6px; }
.ess-pop[data-place="top"] .ess-arrow { bottom: -6px; background: var(--surface); border: 1px solid var(--border); border-left: 0; border-top: 0; }

/* violet HQ hero — F150 SIMPLIFIED: one calm gradient, no aurora bloom, no grid,
   no sub-line. Half the ink, same identity. */
.ess-hero { position: relative; padding: clamp(16px, 4.4vw, 20px) clamp(16px, 4.4vw, 20px) clamp(14px, 4vw, 18px); overflow: hidden; color: #fff; isolation: isolate;
  background: linear-gradient(135deg, color-mix(in srgb, var(--violet) 92%, #fff) 0%, var(--violet) 44%, var(--blue-2) 100%);
  border-bottom: 1px solid color-mix(in srgb, var(--violet) 40%, transparent); }
.ess-hero::after { content: ''; position: absolute; inset: 0; z-index: 4; pointer-events: none;
  background: radial-gradient(80% 60% at 18% -10%, rgba(255,255,255,.22), transparent 60%);
  mix-blend-mode: screen; opacity: .8; }
.ess-hero-tag, .ess-hero-sub, .ess-stats { position: relative; z-index: 3; }
.ess-hero-tag { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-display);
  font-weight: 800; font-size: clamp(16px, 4.2vw, 18px); letter-spacing: .01em; }
.ess-hero-tag .id-logo { width: 1.12em; height: 1.12em; }
.ess-hero-tag span { color: rgba(255,255,255,.92); } .ess-hero-tag { color: #fff; }
.ess-hero-sub { font-size: clamp(11.5px, 3.2vw, 12.5px); color: rgba(255,255,255,.9); margin-top: 6px; letter-spacing: .005em; }
/* F150 · worst→best score graphic — mini trend line + one quiet caption row
   (the old vertical gauge is gone). Lives on the violet hero (white ink). */
.ess-trend { position: relative; z-index: 3; margin-top: 14px; display: flex; flex-direction: column; gap: 7px; }
.ess-tr-caps { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  font-size: 10.5px; font-weight: 600; letter-spacing: .03em; color: rgba(255,255,255,.78); }
.ess-tr-caps b { font-family: var(--font-display); font-weight: 800; color: #fff; }
.ess-tr-chart { position: relative; flex: 1; min-width: 0; height: clamp(64px, 18vw, 76px);
  border-radius: 14px; padding: 4px 6px 2px;
  background: linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,.03));
  border: 1px solid rgba(255,255,255,.16); box-shadow: inset 0 1px 0 rgba(255,255,255,.18); overflow: hidden; }
.ess-tr-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.ess-tr-line { filter: drop-shadow(0 2px 7px rgba(0,0,0,.28)); }
/* line draw-in once the popup shows */
.ess-pop.show .ess-tr-line { animation: essTrDraw 1s var(--ease-out) both; }
@keyframes essTrDraw { from { stroke-dasharray: 1; stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
.ess-tr-dot { position: absolute; width: 9px; height: 9px; border-radius: 50%; transform: translate(-50%, -50%);
  background: #fff; box-shadow: 0 0 0 3px rgba(255,255,255,.18); }
.ess-tr-dot.best  { background: #b6ffe6; box-shadow: 0 0 10px 2px rgba(95,224,255,.7); }
.ess-tr-dot.now   { width: 11px; height: 11px; background: #fff; box-shadow: 0 0 12px 3px rgba(95,224,255,.85), 0 0 0 3px rgba(255,255,255,.25); }
.ess-tr-nowval { position: absolute; transform: translate(-50%, -150%); font-family: var(--font-display); font-weight: 800;
  font-size: 14px; color: #fff; text-shadow: 0 2px 8px rgba(0,0,0,.45); font-variant-numeric: tabular-nums; pointer-events: none; }
/* solo state — first check-in, no trend yet */
.ess-trend--solo { flex-direction: row; align-items: center; gap: 14px; }
.ess-tr-solo-num { flex: none; display: flex; flex-direction: column; align-items: center; line-height: 1;
  padding: 12px 16px; border-radius: 16px; background: linear-gradient(180deg, rgba(255,255,255,.18), rgba(255,255,255,.06));
  border: 1px solid rgba(255,255,255,.2); box-shadow: inset 0 1px 0 rgba(255,255,255,.25); }
.ess-tr-solo-num b { font-family: var(--font-display); font-weight: 800; font-size: 30px; color: #fff; }
.ess-tr-solo-num small { font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .16em; opacity: .75; color: #fff; margin-top: 4px; }
.ess-tr-solo-msg { font-size: 12.5px; line-height: 1.45; color: rgba(255,255,255,.92); }
.ess-tr-solo-msg b { font-weight: 800; }

/* nav grid — F150 SIMPLIFIED: one-line items, no subtitles, no chevrons,
   no sheen sweep. Quiet hover. */
.ess-grid { padding: 14px; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.ess-item { position: relative; appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit; text-align: left;
  display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: var(--r-md); overflow: hidden;
  background: linear-gradient(180deg, var(--surface), var(--fill-1)); border: 1px solid var(--border); color: var(--text);
  transition: border-color .2s, background .2s; }
.ess-item-ic { flex: none; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 9px;
  color: var(--violet); background: color-mix(in srgb, var(--violet) 12%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--violet) 20%, transparent); }
.ess-item-ic svg { width: 16px; height: 16px; }
.ess-item-tx { min-width: 0; flex: 1 1 auto; display: flex; flex-direction: column; }
.ess-item-tx b { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ess-item:focus-visible { outline: 2px solid var(--violet); outline-offset: 2px; }
@media (hover: hover) { .ess-item:hover { border-color: color-mix(in srgb, var(--violet) 45%, var(--border));
  background: linear-gradient(180deg, color-mix(in srgb, var(--violet) 7%, var(--surface)), var(--fill-1)); } }
.ess-item.glow .ess-item-ic { color: #fff; background: linear-gradient(135deg, var(--violet), var(--blue-2)); border-color: transparent; }
.ess-item.glow { border-color: color-mix(in srgb, var(--violet) 40%, var(--border)); }
.ess-item.dis { opacity: .42; pointer-events: none; }
.ess-foot { display: flex; align-items: center; gap: 7px; padding: 10px 18px 15px; margin-top: 2px; font-size: 10.5px; color: var(--muted-2);
  border-top: 1px solid var(--border); }
.ess-foot svg { width: 12px; height: 12px; flex: none; }

[data-theme="light"] .ess-pop { background: linear-gradient(180deg, #ffffff, #f8fbff); border-color: rgba(16,42,98,0.12); }
/* tablet */
@media (max-width: 760px) { .ess-pop { width: min(420px, calc(100vw - 20px)); } }
/* mobile */
@media (max-width: 560px) { .ess-grid { grid-template-columns: 1fr; gap: 8px; padding: 13px; }
  .ess-pop { width: calc(100vw - 16px); }
  .ess-foot { padding: 10px 16px 15px; } }
@media (prefers-reduced-motion: reduce) { .ess-pop { transition: none !important; }
  .ess-pop.show .ess-tr-line { animation: none; } }

/* ===========================================================================
   RESULTS PERFORMANCE LAYER — zero backdrop-filters while scrolling
   ---------------------------------------------------------------------------
   backdrop-filter forces the GPU to re-blur everything beneath an element on
   EVERY scrolled frame. The results dashboard can hold 20+ glass surfaces —
   that is why content lagged in and the raw background peeked through on fast
   scrolls. On results we swap live blur for near-opaque card surfaces
   (visually identical over the frozen background, since nothing moves beneath
   them) and drop the masked dot layer. Scrolling becomes pure compositing.
   The why-modal keeps its blur — it's transient and never scrolls. */
body.on-results .card,
body.on-results .results-chrome,
body.on-results .acct-btn,
body.on-results .back-top,
body.on-results .shield-badge,
body.on-results .dna-badge,
body.on-results .score-chip,
body.on-results .hero-opp,
body.on-results .why-pill {
  -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
}
body.on-results .card           { background: linear-gradient(180deg, rgba(22,35,77,0.97), rgba(10,18,40,0.985)); }
body.on-results .tier.recommended { background: var(--tier-rec-bg); }
body.on-results .grade-medallion::before { background: #131f42; }
[data-theme="light"] body.on-results .grade-medallion::before { background: #ffffff; }
body.on-results .results-chrome { background: var(--bg-1); }
body.on-results .acct-btn   { background: rgba(10,17,40,0.92); }
body.on-results .back-top       { background: rgba(10,17,40,0.92); }
body.on-results .dots           { display: none; }
[data-theme="light"] body.on-results .card           { background: linear-gradient(180deg, #ffffff, #f7faff); }
[data-theme="light"] body.on-results .tier.recommended { background: var(--tier-rec-bg); }
[data-theme="light"] body.on-results .results-chrome { background: var(--bg-1); }
[data-theme="light"] body.on-results .acct-btn   { background: #fff; }
[data-theme="light"] body.on-results .back-top       { background: #fff; }

/* ===========================================================================
   F064 · BILLION-DOLLAR BOOT PRELOADER
   Full-screen identity-resolve splash that covers first paint, then dissolves
   over the landing (first-timers) or the overview dashboard (returning users).
   Token-driven (dual-theme), reduced-motion safe. Sits above EVERYTHING.
   =========================================================================== */
.preloader {
  position: fixed; inset: 0; z-index: 100000;
  /* ALWAYS DARK — the boot splash is a fixed dark experience in BOTH themes.
     Pin the dark token palette locally so the whole subtree renders dark no
     matter the active OS/user theme (it must never flip to white). Scoped to
     .preloader, so nothing else on the page is affected. */
  color-scheme: dark;
  --bg-1: #04091a; --text: #f4f8ff; --text-2: #c5d0e6; --muted: #8493ad;
  --teal: #14e0cb; --blue: #5b95ff; --violet: #b56cff;
  --teal-glow: rgba(20,224,203,0.45);
  --glow-teal: 0 0 50px rgba(20,224,203,0.30);
  --glow-blue: 0 0 50px rgba(79,142,247,0.26);
  --glow-violet: 0 0 50px rgba(181,108,255,0.24);
  --glass-bg: rgba(10,18,40,0.62); --border-hi: rgba(20,224,203,0.55);
  --track: rgba(255,255,255,0.07);
  --grad-brand: linear-gradient(135deg, #14e0cb 0%, #4f8ef7 100%);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: clamp(18px, 3vh, 30px);
  background:
    radial-gradient(120% 80% at 50% 28%, rgba(20,224,203,0.10), transparent 60%),
    radial-gradient(130% 90% at 50% 104%, rgba(91,149,255,0.13), transparent 66%),
    var(--bg-1);
  color: var(--text); text-align: center; overflow: hidden;
  opacity: 1; transform: scale(1); filter: blur(0);
  transition: opacity .8s var(--ease-out), transform .8s var(--ease-out), filter .8s var(--ease-out);
}
.preloader.done { opacity: 0; transform: scale(1.06); filter: blur(14px); pointer-events: none; }
/* No document scrollbar while the boot splash is up — the screen rendered
   UNDERNEATH (landing/overview) is taller than the viewport, so its scrollbar
   flashed beside the splash. Scroll unlocks the moment the dissolve begins. */
html:has(.preloader:not(.done)),
body:has(.preloader:not(.done)) { overflow-y: hidden !important; }
/* (light-theme override intentionally removed — the boot splash is always dark) */

.pl-aura {
  position: absolute; width: min(760px, 124vw); aspect-ratio: 1; border-radius: 50%;
  background: radial-gradient(circle, rgba(20,224,203,0.16), rgba(79,142,247,0.10) 42%, transparent 68%);
  filter: blur(22px); animation: plAura 6s var(--ease-out) infinite; pointer-events: none;
}
@keyframes plAura { 0%,100% { transform: scale(.9); opacity:.65 } 50% { transform: scale(1.07); opacity:1 } }

.pl-stage { position: relative; width: clamp(150px, 34vw, 212px); aspect-ratio: 1; display: grid; place-items: center; }

.pl-ring {
  position: absolute; inset: 0; border-radius: 50%;
  background: conic-gradient(from 0deg, transparent 0deg, var(--teal) 92deg, var(--blue) 210deg, transparent 320deg);
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
          mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 2px));
  opacity: .85; animation: plSpin 3.2s linear infinite;
}
.pl-ring-2 { inset: 13%; opacity: .6; animation-duration: 4.6s; animation-direction: reverse;
  background: conic-gradient(from 90deg, transparent 0deg, var(--violet) 74deg, var(--blue) 190deg, transparent 300deg); }
.pl-ring-3 { inset: 27%; opacity: .5; animation-duration: 2.4s;
  background: conic-gradient(from 200deg, transparent 0deg, var(--teal) 84deg, transparent 260deg); }
@keyframes plSpin { to { transform: rotate(360deg); } }

.pl-orbit { position: absolute; inset: 2%; animation: plSpin 7s linear infinite; pointer-events: none; }
.pl-orbit i { position: absolute; top: -3px; left: 50%; width: 7px; height: 7px; margin-left: -3.5px;
  border-radius: 50%; background: var(--teal); box-shadow: 0 0 12px var(--teal-glow); }
.pl-orbit i:nth-child(2) { top: 50%; left: auto; right: -3px; margin: -3.5px 0 0; background: var(--blue); box-shadow: 0 0 12px var(--glow-blue); }
.pl-orbit i:nth-child(3) { top: auto; bottom: -3px; left: 50%; background: var(--violet); box-shadow: 0 0 12px var(--glow-violet); }

.pl-scan { position: absolute; inset: 16%; border-radius: 50%; overflow: hidden; opacity: .55;
  -webkit-mask: radial-gradient(farthest-side, #000 99%, transparent); mask: radial-gradient(farthest-side, #000 99%, transparent); }
.pl-scan::before { content: ''; position: absolute; left: 0; right: 0; top: -55%; height: 60%;
  background: linear-gradient(180deg, transparent, var(--teal-glow), transparent); animation: plScan 2.3s var(--ease-out) infinite; }
@keyframes plScan { 0% { transform: translateY(0) } 100% { transform: translateY(300%) } }

.pl-core {
  position: relative; width: 46%; aspect-ratio: 1; display: grid; place-items: center; border-radius: 26%;
  background: var(--glass-bg); border: 1px solid var(--border-hi);
  box-shadow: var(--glow-teal), inset 0 1px 0 rgba(255,255,255,0.14);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  animation: plBreath 3s var(--ease-out) infinite;
}
.pl-core svg { width: 62%; height: 62%; filter: drop-shadow(0 4px 14px var(--teal-glow)); }
@keyframes plBreath { 0%,100% { transform: scale(1) } 50% { transform: scale(1.05) } }

.pl-brand { font-family: var(--font-display); font-weight: 700; letter-spacing: .16em; text-transform: uppercase;
  font-size: clamp(15px, 2.2vw, 19px); color: var(--text-2); }
.pl-brand b { background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }

/* ── iD shield brand lockup — the preloader wordmark "iD·NUTRITION®" ─────────
   A gradient SHIELD glyph (dark "iD" inside) sized to the wordmark's cap-height
   and set tight against NUTRITION, with a small ® super. The CSS lives here
   (index.html's preloader markup references these classes + the --id-rim stroke
   token); the shield is self-contained so no tokens.css change is needed. */
.pl-word { display: inline-flex; align-items: center; gap: .12em; }
.id-logo { --id-rim: rgba(255, 255, 255, 0.34);
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.46em; height: 1.46em; flex: none;
  filter: drop-shadow(0 6px 15px var(--teal-glow)) drop-shadow(0 2px 3px rgba(6, 14, 34, .3)); }
.id-logo-svg { width: 100%; height: 100%; display: block; overflow: visible; }
/* the iD shield now mirrors the J (Shield-menu) build: gradient body, a glass
   inner well, and a themed rim of the SAME thickness + colour as the J shield. */
.id-logo-glass { fill: var(--surface-2); stroke: rgba(4, 9, 26, .55); stroke-width: 1.1; stroke-linejoin: round; }
.id-logo-rim { stroke: var(--id-rim); stroke-width: 1.3; }
/* engraved 3D pass — the i) sits pressed into the shield with a hairline shadow */
.id-logo-inner { filter: drop-shadow(0 .7px .5px rgba(6, 14, 34, .42)); }
[data-theme="light"] .id-logo-glass { fill: transparent; }        /* gradient body reads as the whole shield, like the light J */
[data-theme="light"] .id-logo-rim {
  stroke: color-mix(in srgb, #ffffff 68%, #b9c4d4); stroke-width: 1.3; stroke-opacity: .85;
}
:root:not([data-theme="light"]) .id-logo-body { fill: var(--text-2); }   /* grey body + dark glass = grey rim, exactly like the dark J */
:root:not([data-theme="light"]) .id-logo-rim { stroke: none; }
.id-logo-tx { font-family: var(--font-display); font-weight: 700; font-size: 11.5px;
  letter-spacing: -.4px; fill: #ffffff; text-transform: none; }
.idn-reg { font-size: .5em; vertical-align: top; margin-left: .1em; opacity: .6; letter-spacing: 0; }

.pl-bar { width: clamp(160px, 40vw, 240px); height: 3px; border-radius: 999px; overflow: hidden; background: var(--track); }
.pl-bar i { display: block; height: 100%; width: 100%; border-radius: 999px; background: var(--grad-brand);
  transform: scaleX(.04); transform-origin: left; box-shadow: 0 0 14px var(--teal-glow); }

@media (prefers-reduced-motion: reduce) {
  .preloader { transition: opacity .2s linear; }
  .pl-aura, .pl-ring, .pl-orbit, .pl-scan::before, .pl-core { animation: none !important; }
  .pl-bar i { transform: scaleX(1); }
}

/* ===========================================================================
   F064 · RETURNING-USER OVERVIEW DASHBOARD ($5B account home)
   On-brand (dual-theme), fully responsive (mobile / tablet / desktop). Opaque
   token surfaces + frozen ambient on scroll → buttery (mirrors the F024 law).
   =========================================================================== */
.ov-shell { width: 100%; min-height: 100dvh; position: relative; }

/* freeze ambient motion while the (long, scrolling) overview is up */
body.on-overview .bg::after,
body.on-overview .orb        { animation: none !important; will-change: auto; }
body.on-overview .particles,
body.on-overview .dots       { display: none; }
body.on-overview .gradient-text { animation: none !important; }

/* ===========================================================================
   F127 · FORCE FIELD — not lines, but the air itself bending. A soft, volumetric
   energy field swells OUT of the IDNutrition fortress's LEFT-MIDDLE wall and
   warps the page background like a heat-shimmer / force dome. Built from
   feathered radial energy blooms (teal → blue → violet) blurred into one
   another, plus an organic fractal-noise distortion masked to the field so the
   "water/air" reads painterly + dimensional — Mona Lisa caliber, never flat 2D.
   JS (positionRipple) pins --rip-x/--rip-y to the castle's left-middle so the
   field's heart stays on the wall across computer / tablet / mobile. Token-only
   → sings in BOTH light + dark. Sits BEHIND all chrome + cards (z-index 0).
   =========================================================================== */
#screen-overview .ov-wrap { position: relative; z-index: 1; }
/* the header must out-rank the ripple AND stay pinned — keep sticky at #-specificity */
#screen-overview .ov-topbar { position: sticky; top: 0; z-index: 30; }

.ov-ripple { position: absolute; inset: 0;   /* span the WHOLE overview — every section, all the way down */
  z-index: 0; overflow: hidden; pointer-events: none;
  --rip-x: 72%; --rip-y: 300px;          /* fallback origin until JS pins the castle */
  /* focal force-field bloom at the castle (fixed px so it stays a hero accent)
     layered over a continuous theme wash that carries the same tint to the bottom */
  background:
    radial-gradient(1100px 820px at var(--rip-x) var(--rip-y),
        color-mix(in srgb, var(--teal) 42%, transparent) 0,
        color-mix(in srgb, var(--blue) 24%, transparent) 14%,
        color-mix(in srgb, var(--teal) 14%, transparent) 36%,
        color-mix(in srgb, var(--blue)  8%, transparent) 60%,
        transparent 84%),
    linear-gradient(180deg,
        color-mix(in srgb, var(--teal)   12%, transparent) 0,
        color-mix(in srgb, var(--blue)   10%, transparent) 38%,
        color-mix(in srgb, var(--violet)  9%, transparent) 72%,
        color-mix(in srgb, var(--blue)   10%, transparent) 100%);
  filter: blur(18px) saturate(1.12);     /* dissolve it into one living field */
  transform: translateZ(0);
}

/* the organic distortion — fractal noise warps the field so it shimmers like a
   force dome bending the light, masked to fade out into the page.
   GEOMETRY LAW (nav smoothness): the box + mask are FIXED-SIZE (viewport/px
   units), never a % of the shell — each tab has a different content height,
   and a %-sized field re-stretched on every switch (a 0.27 full-viewport
   layout shift = the visible background jump between nav pages). */
.ov-ripple::after { content: ""; position: absolute; top: -80px; left: -10%; right: -10%; height: 340vh;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='700' height='700'%3E%3Cfilter id='f'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.008 0.014' numOctaves='2' seed='7'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23f)'/%3E%3C/svg%3E");
  background-size: 820px 820px;
  -webkit-mask-image: radial-gradient(1500px 1600px at var(--rip-x) var(--rip-y),
        #000 0, #000 34%, rgba(0,0,0,.45) 64%, transparent 98%);
          mask-image: radial-gradient(1500px 1600px at var(--rip-x) var(--rip-y),
        #000 0, #000 34%, rgba(0,0,0,.45) 64%, transparent 98%);
  mix-blend-mode: overlay; opacity: .8; }

/* the leftover ring/core spans aren't needed for the painted field */
.ov-rip, .ov-rip-core { display: none; }

/* light mode — a brighter field needs a touch more presence + softer noise.
   A cluster of dark earthy "landmass" spots wraps the castle focal so the bright
   field gains a terrain-surround feel (like the dark land in dark mode) without
   overpowering the blue/white palette. Deepened + more structured so the castle
   reads as sitting on real terrain, not floating on a flat wash. */
[data-theme="light"] .ov-ripple {
  background:
    /* ── soft waterline shadow that seats the whole island ── */
    radial-gradient(640px 300px at var(--rip-x) calc(var(--rip-y) + 210px),
        color-mix(in srgb, #060c16 30%, transparent) 0,
        color-mix(in srgb, #060c16 12%, transparent) 48%, transparent 74%),
    /* ── the island shelf directly under the castle base ── */
    radial-gradient(520px 300px at var(--rip-x) calc(var(--rip-y) + 140px),
        color-mix(in srgb, #0a1a12 40%, transparent) 0,
        color-mix(in srgb, #0e1c20 22%, transparent) 40%, transparent 72%),
    /* ── clustered earthy rock structures wrapping the base ── */
    radial-gradient(310px 210px at calc(var(--rip-x) - 175px) calc(var(--rip-y) + 95px),
        color-mix(in srgb, #14100a 34%, transparent) 0,
        color-mix(in srgb, #14100a 12%, transparent) 44%, transparent 70%),
    radial-gradient(330px 220px at calc(var(--rip-x) + 185px) calc(var(--rip-y) + 105px),
        color-mix(in srgb, #0b1524 34%, transparent) 0,
        color-mix(in srgb, #0b1524 12%, transparent) 44%, transparent 70%),
    radial-gradient(230px 170px at calc(var(--rip-x) + 30px) calc(var(--rip-y) + 205px),
        color-mix(in srgb, #0d0b06 30%, transparent) 0, transparent 64%),
    radial-gradient(200px 150px at calc(var(--rip-x) - 60px) calc(var(--rip-y) + 175px),
        color-mix(in srgb, #0a140e 28%, transparent) 0, transparent 64%),
    radial-gradient(1100px 820px at var(--rip-x) var(--rip-y),
        color-mix(in srgb, var(--teal) 64%, transparent) 0,
        color-mix(in srgb, var(--blue) 40%, transparent) 14%,
        color-mix(in srgb, var(--teal) 26%, transparent) 36%,
        color-mix(in srgb, var(--blue) 17%, transparent) 60%,
        transparent 86%),
    linear-gradient(180deg,
        color-mix(in srgb, var(--teal)   22%, transparent) 0,
        color-mix(in srgb, var(--blue)   18%, transparent) 38%,
        color-mix(in srgb, var(--violet) 16%, transparent) 72%,
        color-mix(in srgb, var(--blue)   18%, transparent) 100%);
}
[data-theme="light"] .ov-ripple::after { mix-blend-mode: soft-light; opacity: .5; }

/* light mode ONLY · a deep top-LEFT-corner wash of black + blue + green folded
   into the ripple field, anchored at the page's top-left. Additive pseudo-layer
   so the existing background stacks stay intact. DARK MODE IS NOT TOUCHED. */
[data-theme="light"] .ov-ripple::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background:
    /* soft white lift along ALL outer edges (inverse vignette) so the
       ripple's outsides read lighter/airier in light mode */
    radial-gradient(140% 130% at 50% 50%,
        transparent 52%,
        color-mix(in srgb, #ffffff 26%, transparent) 78%,
        color-mix(in srgb, #ffffff 42%, transparent) 100%),
    /* soft pink → purple → green kiss seated behind the "NUTRITION" hero word */
    radial-gradient(360px 200px at 28% 12%,
        color-mix(in srgb, #d24aa0 18%, transparent) 0,
        color-mix(in srgb, #5b2c9e 16%, transparent) 34%,
        color-mix(in srgb, #0e7a52 18%, transparent) 58%,
        color-mix(in srgb, var(--blue) 18%, transparent) 74%,
        transparent 88%),
    /* compact green → purple → blue wash held tight to the TOP-LEFT corner
       (kept small so the dark colours don't spill more than ~1.5in inward) */
    radial-gradient(300px 260px at 0% 0%,
        color-mix(in srgb, #0a4d33 40%, transparent) 0,
        color-mix(in srgb, #0e7a52 34%, transparent) 24%,
        color-mix(in srgb, #5b2c9e 10%, transparent) 48%,
        color-mix(in srgb, var(--blue) 30%, transparent) 66%,
        transparent 82%);
}

/* light mode · computer only — fold a perfect little hint of grey + black into the
   ripple so the bright field gains depth (dark mode + phones untouched). Deepened
   into a real island: a seated waterline shadow, a solid earthy shelf under the
   castle, and a cluster of darker rock structures so the castle looks planted on
   terrain — matching dark mode's grounded feel while keeping the light palette. */
@media (min-width: 1025px) {
  [data-theme="light"] .ov-ripple {
    background:
      /* ── left-side blend: fold the castle's dark over the bright empty field
            to the LEFT of the "Science behind your number" + "Health trend"
            widgets so that half gains depth too (light mode · computer only) ── */
      linear-gradient(90deg,
          color-mix(in srgb, #0a1830 30%, transparent) 0,
          color-mix(in srgb, #0c1c34 22%, transparent) 15%,
          color-mix(in srgb, #0e2138 13%, transparent) 28%,
          color-mix(in srgb, #0e2138 5%, transparent) 40%,
          transparent 48%),
      /* ── right-side vignette: darken the castle half of the page so the
            castle gets dark-mode-style emphasis (light mode only) ── */
      linear-gradient(90deg,
          transparent 34%,
          color-mix(in srgb, #0a1220 10%, transparent) 58%,
          color-mix(in srgb, #070d18 26%, transparent) 82%,
          color-mix(in srgb, #05090f 34%, transparent) 100%),
      /* ── COUNCIL FIX (light · computer) — the green/purple/light-blue jewels +
            a soft near-white lift ride HIGH in the stack (above the dark island
            + rocks) so they actually read: vivid colour in the castle's bottom-
            right corner and along the middle-bottom, over a pale lift that clears
            the muddy "dim-mode" dead-zone under the CTAs → a true light field. ── */
      radial-gradient(440px 320px at calc(var(--rip-x) + 165px) calc(var(--rip-y) + 205px),
          color-mix(in srgb, #34d17f 52%, transparent) 0,
          color-mix(in srgb, #34d17f 20%, transparent) 44%, transparent 72%),
      radial-gradient(380px 300px at calc(var(--rip-x) + 210px) calc(var(--rip-y) + 145px),
          color-mix(in srgb, var(--violet) 50%, transparent) 0,
          color-mix(in srgb, var(--violet) 18%, transparent) 46%, transparent 74%),
      radial-gradient(420px 320px at calc(var(--rip-x) + 120px) calc(var(--rip-y) + 260px),
          color-mix(in srgb, #6fb8ff 50%, transparent) 0,
          color-mix(in srgb, #6fb8ff 18%, transparent) 46%, transparent 74%),
      radial-gradient(720px 420px at 48% 99%,
          color-mix(in srgb, #34d17f 46%, transparent) 0,
          color-mix(in srgb, #34d17f 17%, transparent) 44%, transparent 76%),
      radial-gradient(660px 440px at 40% 100%,
          color-mix(in srgb, var(--violet) 44%, transparent) 0,
          color-mix(in srgb, var(--violet) 16%, transparent) 46%, transparent 76%),
      radial-gradient(680px 400px at 60% 100%,
          color-mix(in srgb, #6fb8ff 46%, transparent) 0,
          color-mix(in srgb, #6fb8ff 17%, transparent) 46%, transparent 76%),
      /* soft near-white lift — clears the muddy dead-zone (center + bottom) */
      radial-gradient(1180px 660px at 38% 98%,
          color-mix(in srgb, #eef6ff 46%, transparent) 0,
          color-mix(in srgb, #dbebff 22%, transparent) 42%, transparent 76%),
      radial-gradient(940px 600px at 30% 60%,
          color-mix(in srgb, #eef6ff 30%, transparent) 0, transparent 66%),
      /* ── lower + mid sections — a LIGHT blue · green airy vibe that spans the
            whole field so the body-systems / priority-moves area reads fresh
            blue-green, never grey or black (light mode · computer) ── */
      radial-gradient(1600px 920px at 26% 50%,
          color-mix(in srgb, #7fe6cb 22%, transparent) 0,
          color-mix(in srgb, #7fe6cb 9%, transparent) 46%, transparent 80%),
      radial-gradient(1500px 900px at 76% 60%,
          color-mix(in srgb, #a6dcff 22%, transparent) 0,
          color-mix(in srgb, #a6dcff 9%, transparent) 46%, transparent 80%),
      radial-gradient(1700px 1040px at 48% 78%,
          color-mix(in srgb, #74dfbe 18%, transparent) 0,
          color-mix(in srgb, #74dfbe 7%, transparent) 48%, transparent 82%),
      radial-gradient(1400px 860px at 64% 90%,
          color-mix(in srgb, #9fe4ff 18%, transparent) 0,
          color-mix(in srgb, #9fe4ff 7%, transparent) 48%, transparent 82%),
      /* ── broad dark halo wrapping the castle focal ── */
      radial-gradient(760px 620px at var(--rip-x) calc(var(--rip-y) + 30px),
          color-mix(in srgb, #060b16 16%, transparent) 0,
          color-mix(in srgb, #060b16 8%, transparent) 40%, transparent 66%),
      radial-gradient(880px 600px at var(--rip-x) var(--rip-y),
          color-mix(in srgb, #07030f 14%, transparent) 0, transparent 56%),
      /* ── deep waterline shadow that seats the island on the field ── */
      radial-gradient(760px 340px at var(--rip-x) calc(var(--rip-y) + 235px),
          color-mix(in srgb, #05090f 36%, transparent) 0,
          color-mix(in srgb, #05090f 15%, transparent) 46%, transparent 74%),
      /* ── the solid earthy island shelf hugging the castle base ── */
      radial-gradient(620px 360px at var(--rip-x) calc(var(--rip-y) + 155px),
          color-mix(in srgb, #0a1a12 34%, transparent) 0,
          color-mix(in srgb, #0d1c1e 20%, transparent) 38%,
          color-mix(in srgb, #0a1524 10%, transparent) 60%, transparent 76%),
      /* ── clustered dark rock structures around the shoreline ── */
      radial-gradient(340px 230px at calc(var(--rip-x) - 195px) calc(var(--rip-y) + 100px),
          color-mix(in srgb, #14100a 8%, transparent) 0,
          color-mix(in srgb, #14100a 4%, transparent) 46%, transparent 70%),
      radial-gradient(380px 250px at calc(var(--rip-x) + 205px) calc(var(--rip-y) + 120px),
          color-mix(in srgb, #0b1524 40%, transparent) 0,
          color-mix(in srgb, #0b1524 14%, transparent) 46%, transparent 70%),
      radial-gradient(250px 190px at calc(var(--rip-x) + 45px) calc(var(--rip-y) + 235px),
          color-mix(in srgb, #0d0b06 34%, transparent) 0, transparent 64%),
      radial-gradient(220px 170px at calc(var(--rip-x) - 90px) calc(var(--rip-y) + 195px),
          color-mix(in srgb, #0a140e 10%, transparent) 0, transparent 64%),
      radial-gradient(180px 150px at calc(var(--rip-x) + 130px) calc(var(--rip-y) + 210px),
          color-mix(in srgb, #100e08 30%, transparent) 0, transparent 62%),
      /* ── verdant terrain accents spread across the rest of the field so the
            whole page reads as a green landscape, not just the castle island ── */
      radial-gradient(760px 480px at 14% 64%,
          color-mix(in srgb, #1f6b3f 28%, transparent) 0,
          color-mix(in srgb, #1f6b3f 12%, transparent) 42%, transparent 74%),
      radial-gradient(680px 440px at 88% 72%,
          color-mix(in srgb, #1c5e3a 26%, transparent) 0,
          color-mix(in srgb, #1c5e3a 11%, transparent) 44%, transparent 74%),
      radial-gradient(900px 420px at 50% 96%,
          color-mix(in srgb, #245a37 26%, transparent) 0,
          color-mix(in srgb, #245a37 11%, transparent) 46%, transparent 78%),
      radial-gradient(560px 380px at 32% 86%,
          color-mix(in srgb, #2b7a4a 24%, transparent) 0, transparent 68%),
      radial-gradient(1000px 760px at 30% 78%,
          color-mix(in srgb, var(--violet) 24%, transparent) 0, transparent 64%),
      linear-gradient(180deg,
          color-mix(in srgb, var(--violet) 6%, transparent) 0,
          color-mix(in srgb, #0b0a1c 1%, transparent) 56%,
          color-mix(in srgb, #04030a 2%, transparent) 100%),
      radial-gradient(1100px 820px at var(--rip-x) var(--rip-y),
          color-mix(in srgb, var(--teal) 64%, transparent) 0,
          color-mix(in srgb, var(--blue) 40%, transparent) 14%,
          color-mix(in srgb, var(--teal) 26%, transparent) 36%,
          color-mix(in srgb, var(--blue) 17%, transparent) 60%,
          transparent 86%),
      linear-gradient(180deg,
          color-mix(in srgb, var(--teal)   14%, transparent) 0,
          color-mix(in srgb, var(--blue)   10%, transparent) 38%,
          color-mix(in srgb, var(--violet) 11%, transparent) 72%,
          color-mix(in srgb, var(--blue)   10%, transparent) 100%);
  }
}

/* phones: pull the heart up + ease the blur for a smaller canvas */
@media (max-width: 700px) {
  .ov-ripple { --rip-y: 240px; filter: blur(10px) saturate(1.06); }
}

.ov-topbar {
  position: sticky; top: 0; z-index: 20; width: 100%;
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 13px clamp(16px, 4vw, 40px);
  /* reserve the right gutter so the Score pill never tucks under the fixed
     top-right theme toggle (44px @ right:16px → clears its 60px footprint) */
  padding-right: calc(clamp(16px, 4vw, 40px) + 56px);
  /* F099 · OPAQUE topbar — layer the page bg (--bg-1) UNDER the tinted gradient
     so scrolling content can never ghost through the sticky header. The gradient
     keeps its sheen; the solid base seals it. Theme-aware (dark + light). */
  background: var(--topbar-bg), var(--bg-1); border-bottom: 2px solid color-mix(in srgb, var(--blue) 66%, transparent);
  -webkit-backdrop-filter: blur(20px) saturate(140%); backdrop-filter: blur(20px) saturate(140%);
}
.ov-top-right { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }

/* ── F115 · TOP-TIER NAV ─────────────────────────────────────────────────────
   The Home / Plan / Care / Trends / Reports tab bar rides in the header's CENTER
   slot — between the iD·LIFE lockup and the DNA badge — instead of a floating
   bottom pill. The topbar becomes a 3-zone flex (brand · nav · status); on
   phones the nav wraps to its own full-width row beneath the header. */
.ov-topbar { flex-wrap: wrap; row-gap: 8px; }
.ov-brandid, .ov-top-right { flex: 0 0 auto; }
.ov-topnav { flex: 1 1 auto; display: flex; justify-content: center; min-width: 0; }

/* the mounted .mtabbar — de-floated and inlined into the header slot. High
   specificity (#id) overrides the fixed/floating bottom-bar rules at every width. */
body.mpaged #ov-topnav .mtabbar {
  position: static; inset: auto; left: auto; right: auto; bottom: auto; transform: none;
  z-index: auto; width: auto; max-width: 100%; height: auto; margin: 0; padding: 0;
  display: flex; flex-wrap: nowrap; gap: 4px; overflow-x: auto; scrollbar-width: none;
  background: none; -webkit-backdrop-filter: none; backdrop-filter: none;
  border: 0; border-top: 0; border-radius: 0; box-shadow: none; animation: none;
}
body.mpaged #ov-topnav .mtabbar::-webkit-scrollbar { display: none; }
/* tabs stay inline icon+label pills at every width inside the header */
#ov-topnav .mtab { flex: none; flex-direction: row; gap: 7px; padding: 7px 14px; border-radius: var(--r-pill); height: auto; }
#ov-topnav .mtab-ic { width: auto; height: auto; background: none; border-radius: 0; }
#ov-topnav .mtab-ic svg { width: 17px; height: 17px; }
#ov-topnav .mtab-lb { font-size: 13px; letter-spacing: .01em; }
#ov-topnav .mtab:hover { color: var(--text); background: var(--fill-1); }
#ov-topnav .mtab.active, #ov-topnav .mtab.active:hover {
  color: var(--blue); background: color-mix(in srgb, var(--blue) 16%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--blue) 34%, transparent);
}
#ov-topnav .mtab.active .mtab-ic { background: none; }

/* overview no longer has a floating bottom bar → drop the reserved clearance */
body.mpaged #screen-overview:has(.mtabbar--top) .ov-wrap { padding-bottom: clamp(28px, 5vw, 52px); }

/* PLAN FOCUS MODE — while the Plan page is open the nav collapses to Plan +
   Dashboard and the floating MyAI launcher retires, so the plan is the only
   thing competing for attention. */
body.plan-focus .myai-fab { display: none !important; }
/* Plan focus also retires the top-right status pills so nothing pulls the eye
   off the plan. The floating pill STAYS: in CART MODE it is the plan's cart,
   and in account mode it is the only route to settings + sign out. */
body.plan-focus #screen-overview .ov-top-right { display: none !important; }

/* F126 · RESULTS topbar mirrors the overview: the iD·LIFE lockup is a HOME
   button, and the section pager rides in the header center slot (between the
   brand and the report-switch < arrow) instead of floating at the bottom. */
.res-brand { appearance: none; -webkit-appearance: none; border: 0; background: none; cursor: pointer;
  padding: 0; color: inherit; font: inherit; order: 1; flex: none; transition: transform .2s var(--ease-out), opacity .2s; }
.res-brand:hover { transform: translateY(-1px); opacity: .9; }
.res-brand:active { transform: scale(.97); }
.res-brand:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; border-radius: 8px; }
/* explicit labelled Home button (sits right after the iD·LIFE lockup) → overview */
.res-home-pill { order: 1; flex: none; display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--font-display); font-weight: 600; font-size: 12.5px; letter-spacing: .01em;
  color: var(--muted); padding: 8px 14px; border-radius: var(--r-pill); cursor: pointer;
  border: 1px solid color-mix(in srgb, var(--blue) 40%, transparent); background: rgba(255,255,255,0.03);
  white-space: nowrap; transition: color .18s, background .18s, border-color .18s, transform .18s var(--ease-spring); }
.res-home-pill svg { width: 16px; height: 16px; }
.res-home-pill:hover { color: var(--text); border-color: color-mix(in srgb, var(--blue) 66%, transparent); transform: translateY(-1px); }
.res-home-pill:active { transform: scale(.97); }
.res-home-pill:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
[data-theme="light"] .res-home-pill { color: #3f6fd6; background: rgba(63,111,214,0.08); }
.res-topnav { order: 2; flex: 1 1 auto; display: flex; justify-content: center; min-width: 0; }
body.mpaged #res-topnav .mtabbar {
  position: static; inset: auto; left: auto; right: auto; bottom: auto; transform: none;
  z-index: auto; width: auto; max-width: 100%; height: auto; margin: 0; padding: 0;
  display: flex; flex-wrap: nowrap; gap: 4px; overflow-x: auto; scrollbar-width: none;
  background: none; -webkit-backdrop-filter: none; backdrop-filter: none;
  border: 0; border-top: 0; border-radius: 0; box-shadow: none; animation: none;
}
body.mpaged #res-topnav .mtabbar::-webkit-scrollbar { display: none; }
#res-topnav .mtab { flex: none; flex-direction: row; gap: 7px; padding: 7px 14px; border-radius: var(--r-pill); height: auto; }
#res-topnav .mtab-ic { width: auto; height: auto; background: none; border-radius: 0; }
#res-topnav .mtab-ic svg { width: 17px; height: 17px; }
#res-topnav .mtab-lb { font-size: 13px; letter-spacing: .01em; }
#res-topnav .mtab:hover { color: var(--text); background: var(--fill-1); }
#res-topnav .mtab.active, #res-topnav .mtab.active:hover {
  color: var(--blue); background: color-mix(in srgb, var(--blue) 16%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--blue) 34%, transparent);
}
#res-topnav .mtab.active .mtab-ic { background: none; }
/* empty on overview / when not re-homed → don't reserve center space */
.res-topnav:empty { flex: 0 0 auto; }

/* F151 · phones: the nav no longer crams into the header — it lives in the
   fixed bottom footer bar (see the ≤640 .mtabbar rules). The header stays a
   clean single row: brand + status. Empty slots reserve no space. */
@media (max-width: 640px) {
  .ov-topnav:empty, .res-topnav:empty { flex: 0 0 auto; }
  .ov-top-right { order: 2; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   TIGHT HEADER LAW — mobile + tablet (≤1024px): every topbar is ALWAYS one
   horizontal line. Status pills (DNA · Shield · Report · Home · Score)
   compress into premium icon-only capsules — the label text stays in the DOM
   for screen readers (font-size:0 trick), so accessibility never degrades.
   Nothing in the header chrome is allowed to wrap to a second row.
   ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 1024px) {
  /* the row itself: hard single-line */
  .ov-topbar, .results-topbar { flex-wrap: nowrap; }
  .ov-top-right, .topbar-right { flex-wrap: nowrap; flex: none; gap: 7px; min-width: 0; }
  .ov-topnav, .res-topnav { min-width: 0; overflow: hidden; }

  /* DNA + Shield → 38px branded icon capsules (round, jewel-like) */
  .ov-topbar .dna-badge, .results-topbar .dna-badge,
  .ov-topbar .shield-badge, .results-topbar .shield-badge {
    position: relative; font-size: 0; gap: 0; padding: 0;
    width: 38px; height: 38px; flex: none;
    justify-content: center; border-radius: 50%;
  }
  .ov-topbar .dna-badge svg, .results-topbar .dna-badge svg,
  .ov-topbar .shield-badge svg, .results-topbar .shield-badge svg {
    width: 17px; height: 17px;
  }
  /* the live pulse dot rides the capsule edge like a status LED */
  .ov-topbar .shield-badge .live, .results-topbar .shield-badge .live {
    position: absolute; top: 2px; right: 2px; margin: 0;
    box-shadow: 0 0 8px var(--shield), 0 0 0 2px var(--bg-1, #04091a);
  }
  [data-theme="light"] .ov-topbar .shield-badge .live,
  [data-theme="light"] .results-topbar .shield-badge .live {
    box-shadow: 0 0 8px var(--shield), 0 0 0 2px #fff;
  }

  /* Score chip → number-only pill (the "Score"/"Sample" word collapses) */
  .ov-topbar .score-chip { font-size: 0; gap: 0; padding: 0 13px; height: 38px; flex: none; }
  .ov-topbar .score-chip b { font-size: 15px; }

  /* Home pill (results) → icon-only capsule */
  .res-home-pill { font-size: 0; gap: 0; padding: 0; width: 38px; height: 38px;
    justify-content: center; border-radius: 50%; flex: none; }
  .res-home-pill svg { width: 17px; height: 17px; }

  /* Report switcher → calendar-icon capsule + chevron (date text collapses;
     the full dated list still opens in the dropdown panel) */
  .topbar-right .rs-btn { padding: 5px 8px; gap: 4px; flex: none; }
  .topbar-right .rs-btn-tx { display: none; }

  /* header gutters tighten so the capsules breathe on one line */
  .ov-topbar { gap: 8px; padding-right: calc(clamp(12px, 3vw, 24px) + 52px); }
  .results-topbar { gap: 8px; }
}

/* phones: a touch tighter still — steppers are gone (≤640 rule above), the
   capsules shrink one notch so brand + 3–4 capsules always clear one line */
@media (max-width: 400px) {
  .ov-topbar .dna-badge, .results-topbar .dna-badge,
  .ov-topbar .shield-badge, .results-topbar .shield-badge,
  .res-home-pill { width: 34px; height: 34px; }
  .ov-top-right, .topbar-right { gap: 5px; }
}

.ov-wrap { max-width: 1340px; margin-inline: auto; padding: 0 clamp(16px, 4vw, 40px) clamp(28px, 5vw, 52px); }

/* the hero lockup TUCKS BEHIND the science widget — a negative bottom margin pulls the
   score card up over the pill's lower edge (z-index below the card), so the lockup reads
   as emerging from behind the widget for a seamless, layered blend. */
.ov-hero { margin: clamp(20px, 3.5vw, 34px) 0 clamp(-26px, -1.7vw, -14px); position: relative; z-index: 0; }

/* ===========================================================================
   F086 · HERO GREETING — the first thing a returning member sees. A gradient
   monogram anchors a live "welcome back, <name>" line above the commanding
   title, so the homepage opens with a personal, premium, on-brand handshake.
   Tokenized · dual-theme · responsive · reduced-motion safe.
   =========================================================================== */
.ov-greet { display: flex; align-items: center; gap: clamp(13px, 2vw, 18px); width: fit-content; max-width: 100%; }
/* F242 · the hero masthead is PURE BRAND TYPOGRAPHY — never a button. (The old
   [data-essentials] cursor/focus affordances applied only when the attribute
   existed; the hero no longer carries it.) */
/* both themes — the "$1B intertwined" lockup: the Shield-J and the
   iD·NUTRITION wordmark stay two crisp, separate emblems, but a living brand
   field (::before) breathes behind both while an animated energy filament with a
   travelling light-current + twin anchor nodes (::after) laces them together at
   the seam. Purely decorative — the marks themselves never move. (The Essentials
   popup anchors off document.body, so this stacking context does not affect it.) */
.ov-greet { position: relative; isolation: isolate; }
/* F242 · the living brand aura re-centers behind the new stacked masthead — a
   tri-color halo breathing softly under the wordmark, never off to one side. */
.ov-greet::before {
  content: ""; position: absolute; z-index: -1; pointer-events: none;
  left: 50%; top: 54%; transform: translate(-50%, -50%);
  width: min(112%, 560px); height: 78%;
  background:
    radial-gradient(42% 68% at 24% 52%, color-mix(in srgb, var(--teal)   26%, transparent), transparent 74%),
    radial-gradient(46% 74% at 50% 46%, color-mix(in srgb, var(--blue-2) 22%, transparent), transparent 76%),
    radial-gradient(42% 68% at 78% 54%, color-mix(in srgb, var(--violet) 18%, transparent), transparent 74%);
  filter: blur(14px); opacity: .55;
  animation: ovClaspBreath 4.6s ease-in-out infinite;
}
/* the connector filament that laced the old Shield-J to the iD·NUTRITION mark was
   removed with the Shield-J (the hero now opens with the member's possessive name). */
/* the two shields breathe in sync so they read as magnetically linked emblems */
.ov-title-idn .id-logo,
.ov-shieldmenu-svg { animation: ovClaspGlow 4.6s ease-in-out infinite; }
@keyframes ovClaspBreath { 0%, 100% { opacity: .48; } 50% { opacity: .72; } }
@keyframes ovClaspGlow  { 0%, 100% { filter: drop-shadow(0 8px 18px color-mix(in srgb, var(--teal) 32%, transparent)); }
                          50%      { filter: drop-shadow(0 10px 24px color-mix(in srgb, var(--blue-2) 52%, transparent)); } }
@keyframes ovClaspFlow  { 0% { background-position: -30% 50%, 50% 50%, 50% 50%, 50% 50%; }
                          100% { background-position: 130% 50%, 50% 50%, 50% 50%, 50% 50%; } }
@media (prefers-reduced-motion: reduce) {
  .ov-greet::before,
  .ov-greet::after,
  .ov-title-idn .id-logo,
  .ov-shieldmenu-svg { animation: none; }
  .ov-greet::after { background-position: 50% 50%, 50% 50%, 50% 50%, 50% 50%; }
}

/* F127 · the "Shield J" — the member's monogram pressed into a gradient shield
   so the avatar reads as a guardian/protective mark AND doubles as the account
   menu. A whisper-quiet hamburger glyph hugs the outside edge (nav affordance),
   morphing to an ✕ once the Essentials hub is open. $1B vibe: gradient border,
   inner glass, brand aura, spring micro-lift. Dual-theme · reduced-motion safe. */
.ov-shield-clip { --shield: polygon(50% 0%, 100% 14%, 100% 46%, 50% 100%, 0% 46%, 0% 14%); }
.ov-shieldmenu {
  appearance: none; -webkit-appearance: none; border: 0; background: none; padding: 0;
  cursor: pointer; position: relative; flex: none; display: grid; place-items: center;
  width: clamp(50px, 9vw, 64px); aspect-ratio: 1; isolation: isolate;
  transition: transform .32s var(--ease-spring), filter .3s var(--ease-out);
}
.ov-shieldmenu-shield {                  /* iD-style shield body (SVG silhouette) */
  position: relative; display: grid; place-items: center;
  width: clamp(48px, 8.6vw, 60px); line-height: 0;
}
.ov-shieldmenu-svg {
  display: block; width: 100%; height: auto;
  filter: drop-shadow(0 14px 26px color-mix(in srgb, var(--blue) 60%, transparent));
}
.ov-sh-glass { fill: var(--surface-2); }
.ov-shieldmenu::after {                  /* soft brand aura behind the shield */
  content: ''; position: absolute; inset: 8px 10px 4px; z-index: -1;
  border-radius: 46% 46% 50% 50% / 36% 36% 70% 70%;
  background: var(--grad-brand-3); filter: blur(13px); opacity: .4;
  transition: opacity .3s var(--ease-out);
}
.ov-shieldmenu-j { position: absolute; inset: 0; z-index: 1; display: grid; place-items: center; line-height: 1; }
.ov-shieldmenu-j b {
  font-family: var(--font-display); font-weight: 800; line-height: 1;
  font-size: clamp(18px, 3.1vw, 23px); transform: translateY(-4%);
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
.ov-shieldmenu-j--icon svg { width: clamp(19px, 3.4vw, 25px); height: auto; }
.ov-shieldmenu-j--icon { color: var(--teal); transform: translateY(-4%); }
/* dark mode only — the J monogram + hamburger lines read crisp white on the shield */
:root:not([data-theme="light"]) .ov-shieldmenu-j b {
  background: none; -webkit-background-clip: border-box; background-clip: border-box;
  -webkit-text-fill-color: #fff; color: #fff;
}
:root:not([data-theme="light"]) .ov-shieldmenu-j--icon { color: #fff; }
:root:not([data-theme="light"]) .ov-shieldmenu-burger i { background: #fff; }
/* dark mode only — the shield RIM around the J takes the "NUTRITION" wordmark
   color (var(--text-2), same as .ov-title-nutri) instead of the teal→violet
   gradient fill. Overrides the SVG fill="url(#ovShRim)" presentation attr.
   LIGHT MODE IS NOT TOUCHED. */
:root:not([data-theme="light"]) .ov-sh-rim { fill: var(--text-2); }
/* light mode only — the Shield-J now mirrors the iD brand logo: a solid
   blue-gradient body (no light glass), a crisp WHITE monogram, and a white-grey
   rim just like the iD shield. (Dark mode above is untouched.) */
[data-theme="light"] .ov-shieldmenu-svg { overflow: visible; }
[data-theme="light"] .ov-sh-glass { fill: transparent; }        /* let the blue rim gradient read as the whole body */
[data-theme="light"] .ov-sh-rim {
  stroke: color-mix(in srgb, #ffffff 68%, #b9c4d4);              /* white-grey border, à la .id-logo --id-rim */
  stroke-width: 1.3; stroke-linejoin: round; stroke-opacity: .85;
}
[data-theme="light"] .ov-shieldmenu-j b {
  background: none; -webkit-background-clip: border-box; background-clip: border-box;
  -webkit-text-fill-color: #fff; color: #fff;
}
[data-theme="light"] .ov-shieldmenu-j--icon { color: #fff; }
/* hamburger badge — a small gradient-ringed menu chip notched onto the shield's
   lower-right, so it unmistakably reads as a nav/menu control */
.ov-shieldmenu-burger {
  position: absolute; right: -5px; bottom: -3px; z-index: 4; pointer-events: none;
  display: grid; place-content: center; gap: 3px;
  width: 21px; height: 21px; padding: 4px; border-radius: 8px;
  background: linear-gradient(var(--surface-2), var(--surface-2)) padding-box, var(--grad-brand-3) border-box;
  border: 1.5px solid transparent;
  box-shadow: 0 6px 14px -4px color-mix(in srgb, var(--violet) 66%, transparent),
              inset 0 1px 0 color-mix(in srgb, #fff 22%, transparent);
  transition: transform .3s var(--ease-spring), box-shadow .3s var(--ease-out);
}
.ov-shieldmenu-burger i {
  display: block; width: 11px; height: 2px; border-radius: 2px; background: var(--grad-brand-3);
  transition: transform .32s var(--ease-spring), opacity .26s var(--ease-out);
}
.ov-shieldmenu:focus-visible { outline: 2px solid var(--blue-2); outline-offset: 4px; border-radius: 12px; }
@media (hover: hover) {
  .ov-greet:hover .ov-shieldmenu { transform: translateY(-2px) scale(1.04); }
  .ov-greet:hover .ov-shieldmenu::after { opacity: .56; }
  .ov-greet:hover .ov-shieldmenu-burger { transform: scale(1.08); }
}
/* open state — the hamburger snaps into an ✕ to mirror the live menu */
.ov-greet[aria-expanded="true"] .ov-shieldmenu { transform: translateY(-1px) scale(1.03); }
.ov-greet[aria-expanded="true"] .ov-shieldmenu-burger i:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.ov-greet[aria-expanded="true"] .ov-shieldmenu-burger i:nth-child(2) { opacity: 0; transform: scaleX(.2); }
.ov-greet[aria-expanded="true"] .ov-shieldmenu-burger i:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
@media (prefers-reduced-motion: reduce) {
  .ov-shieldmenu, .ov-shieldmenu-burger i { transition: none; }
  .ov-shieldmenu:hover, .ov-shieldmenu[aria-expanded="true"] { transform: none; }
}

.ov-greet-copy { display: flex; flex-direction: column; gap: 6px; min-width: 0; }

.ov-greet-eyebrow {
  display: inline-flex; align-items: center; gap: 9px;
  font-family: var(--font-display); text-transform: uppercase;
  letter-spacing: 0.2em; font-size: clamp(10.5px, 1.9vw, 12px);
  font-weight: 700; color: var(--muted); white-space: nowrap;
}
.ov-greet-name { color: var(--text); font-weight: 800; }
.ov-greet-pulse {                        /* live "you're here" heartbeat */
  flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--teal);
  box-shadow: 0 0 0 0 color-mix(in srgb, var(--teal) 55%, transparent);
  animation: ovGreetPulse 2.4s var(--ease-out) infinite;
}
@keyframes ovGreetPulse {
  0%   { box-shadow: 0 0 0 0 color-mix(in srgb, var(--teal) 55%, transparent); }
  70%  { box-shadow: 0 0 0 7px color-mix(in srgb, var(--teal) 0%, transparent); }
  100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--teal) 0%, transparent); }
}

/* ═══ F242 · THE $70B MASTHEAD — a two-line precision lockup ═══════════════
   Line 1 · the possessive name as a letterspaced instrument eyebrow (the same
   typographic voice as the shield's beloved "HEALTH SCORE" label), flanked by
   gradient hairlines. Line 2 · iD shield + NUTRITION wearing the same
   liquid-platinum ramp as the score digits. Pure typography — NOT a control. */
.ov-title {
  font-family: var(--font-display); font-weight: 700; line-height: 1; margin: 7px 0 9px;
  font-size: clamp(38px, 6.6vw, 62px); color: var(--text);
  letter-spacing: -0.02em;
  display: flex; flex-direction: column; align-items: center; gap: .3em;
  max-width: 100%; min-width: 0;
}
/* ═══ F243 · THE NAME MASTHEAD — the member's name IS the hero ══════════════
   A small letterspaced instrument eyebrow "Your next move," (the same quiet voice
   as the shield's HEALTH SCORE label people love) sits above the giant name row:
   [iD shield jewel] MAXIMILIENNE. The name wears the liquid-platinum ramp the
   HEALTH-SCORE digits wear. .ov-name-fit is measured by fitHeroName() which
   publishes --name-scale so the name shrinks-to-fit any length on any viewport,
   always on ONE line, never clipped, never a button. */
.ov-title--name {
  flex-direction: column; align-items: flex-start; justify-content: center;
  gap: .06em; width: 100%; margin: 4px 0 8px;
  line-height: .98;
}
/* the eyebrow — instrument label, letterspaced, the HEALTH-SCORE voice */
.ov-name-lead {
  font-family: var(--font-display); font-weight: 700;
  font-size: clamp(12px, 1.5vw, 16px); letter-spacing: .22em; text-transform: uppercase;
  color: var(--text-2); padding-left: .18em; opacity: .92;
}
.ov-name-jewel { flex: none; display: inline-flex; align-items: center; }
.ov-name-jewel .id-logo {
  width: clamp(38px, 5.4vw, 58px); height: clamp(38px, 5.4vw, 58px); display: block;
  filter: drop-shadow(0 8px 22px color-mix(in srgb, var(--teal) 40%, transparent));
}
/* the fit-wrapper — the JS measures its natural width vs. the available width and
   scales it down via a CSS var, so it fills the space and never overflows */
.ov-name-fit {
  display: inline-flex; align-items: center; gap: clamp(6px, 1vw, 14px);
  min-width: 0; white-space: nowrap;
  transform: scale(var(--name-scale, 1)); transform-origin: left center;
}
/* the giant name — the platinum ramp people love on HEALTH SCORE */
.ov-name-word {
  font-family: var(--font-display); font-weight: 700;
  font-size: clamp(44px, 7.4vw, 74px); letter-spacing: -0.028em; line-height: .96;
  background: linear-gradient(168deg, #ffffff 3%, #eafffb 24%, #c8f6ef 42%, #9fe8ff 64%, #8fb8ff 90%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,.22)) drop-shadow(0 8px 30px var(--teal-glow));
}
[data-theme="light"] .ov-name-word {
  background: linear-gradient(160deg, #071f4d 0%, #0d3fb8 38%, #1652f0 60%, #0b87c9 88%, #0fb6b0 110%);
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,.85)) drop-shadow(0 6px 20px rgba(22, 82, 240, .22));
}
/* ── F114 · iD brand lockups ────────────────────────────────────────
   The "iD·LIFE" mark in the overview topbar + the "iD·NUTRITION®" wordmark in the
   hero headline. Both reuse the gradient iD shield glyph (idLogo() → .id-logo,
   styled near .pl-brand). The hero shield is sized in em so it tracks the
   headline's responsive clamp. */
.ov-brandid { display: inline-flex; align-items: center; gap: 9px; }
.ov-brandid[data-essentials] { cursor: pointer; border-radius: var(--r-sm); transition: opacity .2s; }
@media (hover: hover) { .ov-brandid[data-essentials]:hover { opacity: .82; } }
.ov-brandid[data-essentials]:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }
.ov-brandid .id-logo { width: 32px; height: 32px; }
.ov-brandid-word { font-family: var(--font-display); font-weight: 700; letter-spacing: .14em;
  font-size: 18px; color: var(--text); }
.ov-title-idn { display: inline-flex; align-items: center; gap: 0; white-space: nowrap; }
.ov-title-idn .id-logo { width: clamp(48px, 8.6vw, 60px); height: clamp(48px, 8.6vw, 60px); flex: none; margin: 0 -.14em; }
/* F127 · the iD·NUTRITION lockup is the Essentials trigger — looks like text, acts
   like a menu. Sleek + blended at rest; a billion-dollar bloom + tooltip on hover. */
.ov-ess-trig { appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  font: inherit; color: inherit; padding: 4px 13px 6px; margin: -4px -6px 0; border-radius: 15px 15px 0 0; position: relative;
  /* a hairline gradient ring sits at rest — whisper-quiet, just enough to read
     as a tappable chip — and brightens on hover. */
  background: linear-gradient(var(--surface), var(--surface)) padding-box,
              linear-gradient(120deg, color-mix(in srgb, var(--teal) 36%, transparent), color-mix(in srgb, var(--violet) 36%, transparent)) border-box;
  border: 1px solid transparent; border-bottom: 0; background-clip: padding-box, border-box;
  box-shadow: 0 1px 0 color-mix(in srgb, #fff 0%, transparent);
  transition: background .28s var(--ease-out), transform .28s var(--ease-out), box-shadow .3s var(--ease-out); }
/* light mode gets its own premium glass pill that MIRRORS the science widget below
   it — the same radial teal top-right tint, the same surface-2→surface vertical
   fall, a full teal→blue→violet brand rim, and a grounding shadow that anchors the
   lockup down toward the card so hero + widget read as one $3B system. */
[data-theme="light"] .ov-ess-trig {
  background:
    radial-gradient(130% 95% at 100% 0%, color-mix(in srgb, var(--teal) 15%, transparent), transparent 60%) padding-box,
    linear-gradient(180deg, #ffffff, color-mix(in srgb, var(--surface-2) 72%, #ffffff)) padding-box,
    linear-gradient(120deg, var(--teal), var(--blue-2) 52%, var(--violet)) border-box;
  border: 1.4px solid transparent; border-bottom: 0;
  background-clip: padding-box, padding-box, border-box;
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  box-shadow:
    0 3px 12px -8px rgba(28, 54, 116, .28),
    inset 0 1px 0 rgba(255, 255, 255, .95); }
.ov-ess-trig-chev { display: inline-grid; place-items: center; width: .42em; height: .42em; margin-left: .16em;
  transform: rotate(90deg); opacity: .6; transition: opacity .25s, transform .25s var(--ease-out); }
.ov-ess-trig-chev svg { width: 100%; height: 100%; }
.ov-ess-trig[aria-expanded="true"] .ov-ess-trig-chev { transform: rotate(90deg) translateX(2px); opacity: .95; }
.ov-ess-trig:focus-visible { outline: 2px solid var(--blue-2); outline-offset: 3px; }

@media (hover: hover) {
  .ov-greet:hover .ov-ess-trig {
    background: linear-gradient(color-mix(in srgb, var(--blue-2) 10%, var(--surface)), color-mix(in srgb, var(--violet) 8%, var(--surface))) padding-box,
                linear-gradient(120deg, var(--teal), var(--blue-2) 55%, var(--violet)) border-box;
    box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 30%, transparent); }
  [data-theme="light"] .ov-greet:hover .ov-ess-trig {
    background: linear-gradient(#ffffff, color-mix(in srgb, var(--blue-2) 6%, #ffffff)) padding-box,
                linear-gradient(120deg, var(--teal), var(--blue-2) 55%, var(--violet)) border-box;
    box-shadow: 0 3px 12px -8px rgba(28, 54, 116, .28), inset 0 1px 0 rgba(255,255,255,.95); }
  .ov-greet:hover .ov-ess-trig-chev { opacity: 1; transform: rotate(90deg) translateX(2px); }
}
@media (prefers-reduced-motion: reduce) { .ov-ess-trig { transition: opacity .15s linear; } }

/* F127 · iDNutrition Essentials — a $1B FLOATING trigger anchored to the SW of
   the IDNutrition castle. A gradient-ringed iD orb + label, gently bobbing with a
   live pulse ring; hover/tap drops the gamified Essentials hub. Computer-scale;
   tucks tighter on phones. The .ov-score-main is the positioning anchor. */
.ov-score-main { position: relative; }
.ov-ess-float { position: absolute; left: 50%; transform: translateX(-50%); bottom: clamp(10px, 5%, 56px); z-index: 6;
  appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  display: inline-flex; align-items: center; gap: 13px; min-width: 248px; justify-content: flex-start;
  padding: 10px 26px 10px 10px; border-radius: 999px;
  background: linear-gradient(var(--surface), var(--surface)) padding-box, var(--grad-brand-3) border-box;
  border: 1.5px solid transparent;
  box-shadow: 0 18px 40px -18px color-mix(in srgb, var(--violet) 70%, transparent), 0 4px 14px -6px color-mix(in srgb, var(--blue) 40%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 22%, transparent);
  transition: transform .3s var(--ease-out), box-shadow .3s var(--ease-out); }
.ov-ess-float-orb { position: relative; flex: none; width: 38px; height: 38px; display: grid; place-items: center; border-radius: 50%;
  background: var(--grad-brand-3); box-shadow: inset 0 1px 0 rgba(255,255,255,.4); }
.ov-ess-float-orb .id-logo { width: 24px; height: 24px; }
.ov-ess-float-orb .id-logo-tx { fill: #fff; }
.ov-ess-float-tx { display: flex; flex-direction: column; line-height: 1; text-align: left; }
.ov-ess-float-tx b { font-family: var(--font-display); font-weight: 800; font-size: 15px; color: var(--text); letter-spacing: -.01em; }
.ov-ess-float-tx small { font-size: 10.5px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; color: var(--violet); margin-top: 3px; }
.ov-ess-float-pulse { position: absolute; left: 29px; top: 50%; width: 38px; height: 38px; transform: translate(-50%, -50%);
  border-radius: 50%; pointer-events: none; box-shadow: 0 0 0 0 color-mix(in srgb, var(--violet) 55%, transparent);
  animation: essFloatPulse 2.8s var(--ease-out) infinite; }
@keyframes essFloatPulse { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--violet) 50%, transparent); }
  70%,100% { box-shadow: 0 0 0 16px transparent; } }
@media (prefers-reduced-motion: no-preference) { .ov-ess-float { animation: essFloatBob 4.4s var(--ease-out) infinite; } }
@keyframes essFloatBob { 0%,100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(-5px); } }
.ov-ess-float:focus-visible { outline: 2px solid var(--violet); outline-offset: 3px; }
.ov-ess-float[aria-expanded="true"] { box-shadow: 0 22px 48px -16px color-mix(in srgb, var(--violet) 80%, transparent); }
@media (hover: hover) { .ov-ess-float:hover { transform: translateX(-50%) translateY(-3px); box-shadow: 0 26px 52px -16px color-mix(in srgb, var(--violet) 82%, transparent); } }
@media (prefers-reduced-motion: reduce) { .ov-ess-float-pulse { animation: none; } }
@media (max-width: 760px) { .ov-ess-float { bottom: 10px; min-width: 210px; padding: 7px 18px 7px 7px; gap: 10px; }
  .ov-ess-float-orb { width: 30px; height: 30px; } .ov-ess-float-tx b { font-size: 13px; } .ov-ess-float-tx small { font-size: 9.5px; } }
/* F242 · NUTRITION wordmark — wears the same liquid-platinum ramp as the
   Health-Score digits people love (white heat → mint → arctic blue), with the
   same slow living shimmer. Light mode takes the deep-ocean blue ramp. */
.ov-title-nutri { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.015em;
  background: linear-gradient(165deg, #ffffff 4%, #eafffb 26%, #c8f6ef 44%, #9fe8ff 66%, #8fb8ff 92%);
  background-size: 130% 130%;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,.22)) drop-shadow(0 6px 26px var(--teal-glow));
  animation: lhsNumShimmer 9s var(--ease-lux) infinite; }
[data-theme="light"] .ov-title-nutri {
  background: linear-gradient(160deg, #071f4d 0%, #0d3fb8 38%, #1652f0 60%, #0b87c9 88%, #0fb6b0 110%);
  background-size: 130% 130%;
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,.85)) drop-shadow(0 5px 18px rgba(22, 82, 240, .24)); }
@media (prefers-reduced-motion: reduce) { .ov-title-nutri { animation: none; } }
/* (F117 .ov-title-poss / .ov-title-lead retired in F242 — the possessive name
   now lives on its own eyebrow line, .ov-title-own above.) */
.ov-title-reg { align-self: flex-start; position: relative; top: .18em; font-size: .3em; font-weight: 700; color: var(--blue-2);
  margin-left: .06em; margin-right: .04em; }
/* the "Essentials" word folded into the hero title — reads as a gradient
   sub-lockup so the headline becomes "JACOB'S iD·NUTRITION® Essentials" and the
   whole line stays the Essentials menu trigger. */
.ov-title-ess { font-family: var(--font-display); font-weight: 800; letter-spacing: -.01em;
  font-size: .56em; margin-left: .28em; align-self: center;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent; }
.ov-sub { font-size: clamp(14px, 2.2vw, 16px); color: var(--text-2); max-width: 660px; line-height: 1.5; }

/* light-theme: keep the aura airy and the shield shadow soft */
[data-theme="light"] .ov-shieldmenu-svg {
  filter: drop-shadow(0 12px 22px color-mix(in srgb, var(--blue) 34%, transparent));
}
/* the inner shield body now matches the iD brand logo — the same teal→blue→violet
   shield gradient (via the rim's #ovShRim def), not a flat light-blue glass */
[data-theme="light"] .ov-sh-glass { fill: url(#ovShRim); }
[data-theme="light"] .ov-shieldmenu::after { opacity: .26; }

/* graceful entrance — a gentle, staggered rise (off when motion is reduced) */
@media (prefers-reduced-motion: no-preference) {
  .ov-shieldmenu    { animation: ovHeroRise .6s var(--ease-out) both; }
  .ov-greet-eyebrow { animation: ovHeroRise .6s var(--ease-out) .07s both; }
  .ov-title         { animation: ovHeroRise .6s var(--ease-out) .14s both; }
}
@keyframes ovHeroRise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .ov-greet-pulse { animation: none; } }

.ov-grid { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: clamp(16px, 2vw, 24px); align-items: start; }
.ov-col { display: flex; flex-direction: column; gap: clamp(16px, 2vw, 24px); min-width: 0; }

.ov-card {
  position: relative; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg); padding: clamp(18px, 2.2vw, 26px); box-shadow: var(--shadow-sm); overflow: hidden;
}
.ov-card::before { content: ''; position: absolute; inset: 0 0 auto 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--teal-glow), transparent); opacity: .5; }

/* F127 · uplevel the lower intelligence cards (Body systems, Priority moves,
   What's shaping your score) to the SAME premium glass as the Science / Health-
   Trend widgets — multi-tint frosted background (teal + violet radials over a
   surface-2/3 mix), a brighter teal top hairline, and the light-theme blue-tinted
   shadow + inset highlight. One cohesive system in BOTH themes. */
.ov-card.ov-sysmap,
.ov-card.ov-priomoves,
.ov-card.ov-scorefx {
  background:
    radial-gradient(120% 90% at 100% 0%,  color-mix(in srgb, var(--teal) 13%, transparent),   transparent 56%),
    radial-gradient(130% 140% at 0% 100%,  color-mix(in srgb, var(--violet) 9%, transparent),  transparent 50%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 88%, transparent),
                            color-mix(in srgb, var(--surface-3) 92%, transparent));
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 6%, transparent);
}
.ov-card.ov-sysmap::before,
.ov-card.ov-priomoves::before,
.ov-card.ov-scorefx::before {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--teal) 55%, transparent), transparent);
  opacity: .6;
}
[data-theme="light"] .ov-card.ov-sysmap,
[data-theme="light"] .ov-card.ov-priomoves,
[data-theme="light"] .ov-card.ov-scorefx {
  box-shadow: 0 8px 26px -18px rgba(20, 50, 120, .22), inset 0 1px 0 rgba(255, 255, 255, .6);
}

.ov-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
.ov-card-head h3 { font-family: var(--font-display); font-weight: 600; font-size: clamp(16px, 2.4vw, 19px); color: var(--text); margin: 3px 0 0; }
.ov-active { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--teal);
  background: var(--teal-soft); padding: 5px 11px; border-radius: 999px; white-space: nowrap; }
.ov-active .live { width: 7px; height: 7px; border-radius: 50%; background: currentColor;
  box-shadow: 0 0 10px currentColor; }
/* F168 · RED "Inactive" state — the member has NO active IDN autoorder in Exigo. */
.ov-active.ov-active--off { color: var(--danger);
  background: color-mix(in srgb, var(--danger) 12%, transparent); }

/* ===========================================================================
   F085 · HERO SCORE CARD — one luminous, cohesive surface. Instead of a flat
   white box with sub-cards floating on top, the card becomes a soft, brand-tinted
   panel where the ring, the Precision Engine and the Health Trend feel like
   facets of a single, easy-on-the-eyes surface. Tokenized · dual-theme.
   =========================================================================== */
.ov-score-card {
  background:
    radial-gradient(78% 116% at 0% 0%,    color-mix(in srgb, var(--teal) 8%, transparent),   transparent 52%),
    radial-gradient(94% 134% at 100% 100%, color-mix(in srgb, var(--violet) 8%, transparent), transparent 54%),
    radial-gradient(130% 92% at 50% -12%,  color-mix(in srgb, var(--blue-2) 6%, transparent), transparent 60%),
    var(--surface);
}
/* a soft spotlight grounds the score ring so the left cluster feels lit, not floating */
.ov-score-card::after {
  content: ''; position: absolute; z-index: 0; pointer-events: none;
  top: 1%; left: -7%; width: 46%; height: 72%;
  background: radial-gradient(56% 60% at 40% 40%, color-mix(in srgb, var(--blue-2) 13%, transparent), transparent 72%);
  filter: blur(20px); opacity: .85;
}
.ov-score-card .ov-score-main { position: relative; z-index: 1; }
/* embed the inner panels: soften their edges so they read as part of the one
   card surface rather than hard boxes stacked on it */
.ov-score-card .ov-engine,
.ov-score-card .ov-nextmove,
.ov-score-card .ov-trend { border-color: var(--border-soft); }
[data-theme="light"] .ov-score-card .ov-engine,
[data-theme="light"] .ov-score-card .ov-nextmove,
[data-theme="light"] .ov-score-card .ov-trend { box-shadow: 0 8px 26px -18px rgba(20, 50, 120, .22), inset 0 1px 0 rgba(255, 255, 255, .6); }
/* Light mode ONLY · the "Science behind your number" (engine) and "Your health
   trend" cards get a crisp BLACK border with a soft black glow that reads as a
   perfect, seamless fit against the light background. Scoped so dark mode is
   untouched. Higher specificity than the block above so it wins the border. */
[data-theme="light"] .ov-score-card .ov-engine,
[data-theme="light"] .ov-score-card .ov-trend,
[data-theme="light"] .ov-engine,
[data-theme="light"] .ov-nextmove,
[data-theme="light"] .ov-trend,
/* …and the SAME thin black border + glow across every white widget on the
   Home / Plan / Care / Trends / Reports screens (all .ov-card panels, except the
   intentionally paint-stripped score-card shell — F109), plus the top-nav status
   pills + theme toggle. LIGHT MODE ONLY — dark mode is never touched. */
[data-theme="light"] .ov-card:not(.ov-score-card),
[data-theme="light"] .shield-badge,
[data-theme="light"] .score-chip,
[data-theme="light"] .dna-badge,
[data-theme="light"] .acct-btn {
  border-color: rgba(0, 0, 0, .7);
  box-shadow:
    0 4px 16px -10px rgba(0, 0, 0, .3),
    0 1px 6px -3px rgba(0, 0, 0, .2),
    inset 0 1px 0 rgba(255, 255, 255, .6);
}
/* F109 · "delete" the ugly score-card box — the Health Trend, the Precision
   Engine and the product showcase now sit FREE on the page instead of inside a
   tinted, bordered, shadowed panel. We strip the card's paint (the .ov-card
   surface/border/shadow, the brand-tint gradient, and the spotlight ::after) but
   KEEP the wrapper's padding + overflow:hidden so the fortress stays neatly
   clipped, and KEEP the element itself so the mobile tab-paging (which targets
   .ov-score-card) and the layout/stacking keep working. */
.ov-card.ov-score-card {
  background: none;
  border: 0;
  box-shadow: none;
}
.ov-card.ov-score-card::after { content: none; }
/* F114 · also kill the teal top-hairline (.ov-card::before) — the score card
   spans the full width (left column + the IDNutrition castle), so its 1px teal
   line was cutting straight across the fortress. */
.ov-card.ov-score-card::before { content: none; }

/* F182 · first-timer / unfinished preview — a real SPACER element gives the
   score board (the "Your next move" widget + the castle showcase) significant
   breathing room below the top nav so they don't crash into it. A sized box
   can't margin-collapse (the reason the earlier margin/padding attempts on the
   overflow:visible score card produced no space), and it's removed the instant
   the portal unlocks. Desktop takes the big spacer; phones/tablet a lighter one. */
.ov-pv-spacer { height: clamp(16px, 3vh, 34px); }
@media (min-width: 1024px) {
  .ov-pv-spacer { height: 38px; }
}

/* F184 · COMPUTER ONLY — for a brand-new / non-taken (sealed preview) user, lift
   the whole "Your next move" widget ABOVE the .ov-pv-spacer that sits over it,
   and open real breathing room above the ⚡ + "YOUR NEXT MOVE" eyebrow so future
   $40B assessment hero elements have a home inside the widget. Preview only;
   the widget already ships position:relative so z-index takes effect. */
@media (min-width: 1025px) {
  .ov-score-card--pv .ov-nextmove {
    z-index: 5;
    padding-top: 14px;
  }
}

/* F182 · MOBILE ONLY — for a first-timer / unfinished preview, lift the castle so
   it sits DIRECTLY beneath the "Your next move" widget instead of being stranded
   low (below the locked Health-Trend). We dissolve the left column
   (display:contents) so the next-move row, the castle showcase and the locked
   trend all become flex items of .ov-score-main, then re-order them:
   move (1) → castle (2) → trend (3). Desktop keeps its column layout. */
@media (max-width: 1120px) {
  .ov-score-card--pv .ov-score-main { flex-direction: column; align-items: stretch; }
  /* NOTE: needs `.ov-score-main >` here to out-specify the base
     `.ov-score-main > .ov-score-left { display: flex }` rule (equal 2-class
     specificity would otherwise lose on source order, leaving the column intact
     and the castle stranded below the trend). */
  .ov-score-card--pv .ov-score-main > .ov-score-left { display: contents; }
  .ov-score-card--pv .ov-score-left > .ov-score-row { order: 1; }
  .ov-score-card--pv .ov-showcase { order: 2; width: 100%; padding-top: 6px; }
  .ov-score-card--pv .ov-lockmini { order: 3; }
}

/* score ring — a precision-instrument health gauge ($1B trust makeover) */
.ov-score-row { display: flex; flex-wrap: wrap; align-items: center; gap: clamp(16px, 3vw, 28px); }
/* F091 · swap the Precision Engine ("the science behind your number") to the LEFT
   and keep the score ring + grade ("65 · C+ Good") grouped on the RIGHT — wide
   view only. Visual-order only (DOM keeps the score first for screen readers);
   phones keep the score-led stack untouched. */
@media (min-width: 700px) {
  .ov-score-row > .ov-engine { order: -1;
    /* F103 · match the engine card to the Your Health Trend width on the computer.
       Both use calc(50% + 40px): the trend's 50% is of .ov-score-left, the engine's
       50% is of .ov-score-row — which stretches to that same width — so they render
       identical px. Phones keep full width. KEEP IN SYNC with .ov-score-left > .ov-trend.
       F118 · trimmed 140px → 40px so the widget width stops just short of the
       castle backdrop (the fortress was nudged ~2in left in F097), no overlap. */
    max-width: calc(50% + 40px); }
  /* F144 · Your Next Move inherits the engine's exact top-left footprint so the
     computer layout (castle clearance, trend pairing, hero centering) is
     untouched. KEEP IN SYNC with the engine rule above. */
  .ov-score-row > .ov-nextmove { order: -1; max-width: calc(50% + 40px); }
}
.ov-ring-wrap { position: relative; display: grid; place-items: center; flex: none; isolation: isolate; }
.ov-ring-aura { position: absolute; z-index: 0; top: 50%; left: 50%; width: 82%; aspect-ratio: 1; border-radius: 50%;
  transform: translate(-50%, -50%); pointer-events: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--blue-2) 32%, transparent), transparent 66%);
  filter: blur(15px); opacity: .65; animation: ovRingAura 5.5s var(--ease-out) infinite; }
@keyframes ovRingAura { 0%,100% { opacity: .48; transform: translate(-50%,-50%) scale(.9); }
                        50%     { opacity: .78; transform: translate(-50%,-50%) scale(1.05); } }
.ov-ring { position: relative; z-index: 1; width: clamp(120px, 30vw, 144px); height: auto; display: block; overflow: visible; }
.ov-ring-grad { fill: none; stroke: color-mix(in srgb, var(--text) 24%, transparent); stroke-width: 2;
  stroke-linecap: round; stroke-dasharray: 0 7.6; opacity: .4; }
.ov-ring-track { fill: none; stroke: var(--track); stroke-width: 9; }
.ov-ring-fill { fill: none; stroke-width: 9; stroke-linecap: round; transition: stroke-dashoffset 1.1s var(--ease-out);
  filter: drop-shadow(0 2px 7px color-mix(in srgb, var(--blue-2) 38%, transparent)); }
/* the live endpoint cap — a glowing "you are precisely here" marker */
.ov-ring-cap { opacity: 0; animation: ovRingCapIn .5s var(--ease-out) 1s forwards; }
@keyframes ovRingCapIn { to { opacity: 1; } }
.ov-ring-cap-halo { fill: var(--blue-2); opacity: .3; transform-box: fill-box; transform-origin: center;
  animation: ovRingCapPulse 2.6s var(--ease-out) infinite; }
@keyframes ovRingCapPulse { 0% { transform: scale(.6); opacity: .4; } 70%,100% { transform: scale(1.8); opacity: 0; } }
.ov-ring-cap-dot { fill: #fff; stroke: var(--blue-2); stroke-width: 2.5;
  filter: drop-shadow(0 0 5px color-mix(in srgb, var(--blue-2) 72%, transparent)); }
.ov-ring-cap.b-strong .ov-ring-cap-halo { fill: var(--teal); }
.ov-ring-cap.b-strong .ov-ring-cap-dot { stroke: var(--teal); filter: drop-shadow(0 0 5px color-mix(in srgb, var(--teal) 72%, transparent)); }
.ov-ring-cap.b-focus .ov-ring-cap-halo { fill: var(--warning); }
.ov-ring-cap.b-focus .ov-ring-cap-dot { stroke: var(--warning); filter: drop-shadow(0 0 5px color-mix(in srgb, var(--warning) 72%, transparent)); }
.ov-ring-center { position: absolute; z-index: 2; text-align: center; display: flex; flex-direction: column; line-height: 1; }
.ov-ring-num { font-family: var(--font-display); font-weight: 800; font-size: clamp(34px, 7.6vw, 44px); letter-spacing: -.02em;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
/* dark mode only — trajectory ring number is solid white (ring stroke stays its own color) */
:root:not([data-theme="light"]) .ov-ring-num {
  background: none; -webkit-text-fill-color: #fff; color: #fff; }
.ov-ring-center small { font-size: 10px; font-weight: 700; color: var(--muted); margin-top: 5px;
  letter-spacing: .12em; text-transform: uppercase; }

.ov-score-meta { display: flex; flex-direction: column; gap: 9px; min-width: 0; }
.ov-grade-row { display: flex; align-items: center; gap: 11px; }
/* premium grade badge — band-gradient chip with inset shine + soft glow */
.ov-grade { position: relative; overflow: hidden; font-family: var(--font-display); font-weight: 800; font-size: 16px;
  min-width: 38px; height: 38px; padding: 0 9px; display: grid; place-items: center; border-radius: 11px; flex: none; color: #fff;
  box-shadow: 0 7px 18px -8px color-mix(in srgb, var(--blue-2) 62%, transparent), inset 0 1px 0 rgba(255,255,255,.36); }
.ov-grade::after { content: ''; position: absolute; inset: 0 0 52% 0; pointer-events: none;
  background: linear-gradient(180deg, rgba(255,255,255,.24), transparent); }
.ov-grade.grade-a { background: linear-gradient(135deg, var(--teal), var(--blue-2)); }
.ov-grade.grade-b { background: linear-gradient(135deg, var(--blue-2), var(--violet)); }
/* COUNCIL F3 · never grade, always coach — the C chip trades the amber "warning"
   optics for a calm slate-indigo brand tone. Amber stays reserved for genuinely
   declining system meters (b-focus), where it earns its urgency. */
.ov-grade.grade-c { background: linear-gradient(135deg, color-mix(in srgb, var(--blue-2) 58%, #64748b), color-mix(in srgb, var(--violet) 46%, #64748b));
  box-shadow: 0 7px 18px -8px color-mix(in srgb, var(--blue-2) 45%, transparent), inset 0 1px 0 rgba(255,255,255,.32); }
.ov-grade.grade-d { background: linear-gradient(135deg, var(--danger), color-mix(in srgb, var(--danger) 58%, var(--violet)));
  box-shadow: 0 7px 18px -8px color-mix(in srgb, var(--danger) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.32); }
.ov-score-label { font-family: var(--font-display); font-weight: 700; font-size: clamp(17px, 3vw, 21px); color: var(--text); letter-spacing: -.01em; }
.ov-score-when { font-size: 12px; color: var(--muted); display: inline-flex; align-items: center; gap: 6px; }
.ov-score-when svg { width: 13px; height: 13px; flex: none; opacity: .85; }
.ov-delta { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; font-weight: 700;
  padding: 5px 11px; border-radius: 999px; width: fit-content; border: 1px solid transparent; }
.ov-delta svg { width: 14px; height: 14px; }
.ov-delta.pos { background: var(--teal-soft); color: var(--teal); border-color: color-mix(in srgb, var(--teal) 26%, transparent); }
.ov-delta.neg { background: var(--danger-soft); color: var(--danger); border-color: color-mix(in srgb, var(--danger) 26%, transparent); }
.ov-delta.neg svg { transform: scaleY(-1); }
.ov-delta.neu { background: var(--fill-2); color: var(--muted); border-color: var(--border-soft); }
@media (prefers-reduced-motion: reduce) {
  .ov-ring-aura, .ov-ring-cap-halo { animation: none; }
  .ov-ring-cap { opacity: 1; animation: none; }
  .ov-ring-cap-halo { opacity: .22; }
}

/* ===========================================================================
   F083 · PRECISION ENGINE — the interactive "science behind your number" widget
   that rides to the RIGHT of the grade / delta / date inside the score card. A
   living proof panel: a pulsing engine core, a gradient count-up stat, and
   tappable facets that rotate through the real depth behind the plan (safety
   rules · body systems · formulas weighed · match precision). Auto-rotates,
   pauses on interaction, keyboard-accessible. Tokenized · dual-theme · responsive.
   It flex-wraps with the ring + meta: rides on the RIGHT when the row is wide,
   drops to its own full-width line below the score when it isn't.
   =========================================================================== */
.ov-engine {
  --eng-accent: var(--teal);
  position: relative; flex: 1 1 210px; min-width: min(210px, 100%); align-self: stretch;
  display: flex; flex-direction: column; gap: 9px; padding: 13px 15px 12px;
  border-radius: var(--r-md); overflow: hidden; border: 1px solid var(--border);
  background:
    radial-gradient(120% 80% at 100% 0%, color-mix(in srgb, var(--eng-accent) 13%, transparent), transparent 58%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 78%, transparent),
                            color-mix(in srgb, var(--surface) 86%, transparent));
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 5%, transparent);
  animation: ovEngIn .6s var(--ease-out) both;
}
@keyframes ovEngIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.ov-eng-glow { position: absolute; z-index: 0; top: -28%; right: -12%; width: 62%; height: 72%; pointer-events: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--eng-accent) 40%, transparent), transparent 70%);
  filter: blur(22px); opacity: .55; transition: background .5s var(--ease-out); }

.ov-eng-eyebrow { position: relative; z-index: 1; display: flex; align-items: center; gap: 7px;
  font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--text-2); }
.ov-eng-eyebrow > svg { width: 13px; height: 13px; flex: none; color: var(--eng-accent); transition: color .4s; }
.ov-eng-eyebrow > span:not(.ov-eng-live) { flex: 1; min-width: 0; }
.ov-eng-eyebrow > .ov-eng-live { width: 6px; height: 6px; border-radius: 50%; flex: none; background: var(--eng-accent);
  animation: ovEngLive 2.4s ease-out infinite; }
@keyframes ovEngLive {
  0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--eng-accent) 55%, transparent); }
  70%, 100% { box-shadow: 0 0 0 7px transparent; } }

.ov-eng-main { position: relative; z-index: 1; display: flex; align-items: center; gap: 13px; }
.ov-eng-core { appearance: none; -webkit-appearance: none; border: 0; background: transparent; padding: 0;
  cursor: pointer; position: relative; flex: none; width: 46px; height: 46px; display: grid; place-items: center;
  transition: transform .3s var(--ease-out); }
.ov-eng-core::before { content: ''; position: absolute; inset: 11px; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--eng-accent) 28%, transparent), transparent 72%); }
.ov-eng-core:focus-visible { outline: 2px solid var(--eng-accent); outline-offset: 3px; border-radius: 50%; }
.ov-eng-core:active { transform: scale(.95); }
@media (hover: hover) { .ov-eng-core:hover { transform: scale(1.06); } }
.ov-eng-core-r { position: absolute; inset: 0; border-radius: 50%; border: 1.5px solid transparent; }
.ov-eng-core-r.r1 { border-color: color-mix(in srgb, var(--eng-accent) 38%, transparent);
  border-top-color: var(--eng-accent); animation: ovEngSpin 9s linear infinite; }
.ov-eng-core-r.r2 { inset: 7px; border-style: dashed; border-color: color-mix(in srgb, var(--eng-accent) 32%, transparent);
  animation: ovEngSpin 6s linear infinite reverse; }
@keyframes ovEngSpin { to { transform: rotate(360deg); } }
.ov-eng-core-ic { position: relative; z-index: 1; display: grid; place-items: center; color: var(--eng-accent); }
.ov-eng-core-ic svg { width: 19px; height: 19px; }
.ov-eng-core-ic.pop { animation: ovEngPop .45s var(--ease-out); }
@keyframes ovEngPop { from { transform: scale(.55); opacity: 0; } to { transform: scale(1); opacity: 1; } }

.ov-eng-readout { min-width: 0; display: flex; flex-direction: column; }
.ov-eng-numrow { display: inline-flex; align-items: baseline; gap: 2px; line-height: 1; }
.ov-eng-num { font-family: var(--font-display); font-weight: 800; font-size: clamp(26px, 6vw, 33px); letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; background: var(--grad-brand-3);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
/* dark mode only — the engine readout number is solid white */
:root:not([data-theme="light"]) .ov-eng-num {
  background: none; -webkit-text-fill-color: #fff; color: #fff; }
.ov-eng-suffix { font-family: var(--font-display); font-weight: 800; font-size: clamp(15px, 3vw, 19px);
  color: var(--eng-accent); font-style: normal; transition: color .4s; }
.ov-eng-label { font-size: 11.5px; font-weight: 600; color: var(--muted); margin-top: 3px; }
/* F126 · inline iD·NUTRITION lockup inside the DNA facet's label */
.ov-eng-label .id-logo { width: 1.05em; height: 1.05em; vertical-align: -.18em; }
.ov-eng-nutri { color: var(--text-2); font-weight: 700; letter-spacing: .01em; }

.ov-eng-say { position: relative; z-index: 1; margin: 0; font-size: 11.5px; line-height: 1.45; color: var(--text-2);
  min-height: 3.1em; }
.ov-eng-say.swap { animation: ovEngSay .5s var(--ease-out); }
@keyframes ovEngSay { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

.ov-eng-dots { position: relative; z-index: 1; display: flex; align-items: center; gap: 7px; margin-top: auto; }
.ov-eng-dot { appearance: none; -webkit-appearance: none; cursor: pointer; flex: none; width: 30px; height: 30px;
  display: grid; place-items: center; border-radius: 9px; background: var(--fill-1); border: 1px solid var(--border);
  color: var(--muted); transition: transform .25s var(--ease-out), color .25s, border-color .25s, background .25s, box-shadow .25s; }
.ov-eng-dot svg { width: 15px; height: 15px; }
.ov-eng-dot.on { color: var(--eng-accent); border-color: color-mix(in srgb, var(--eng-accent) 50%, var(--border));
  background: color-mix(in srgb, var(--eng-accent) 13%, var(--surface));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--eng-accent) 12%, transparent); }
.ov-eng-dot:focus-visible { outline: 2px solid var(--eng-accent); outline-offset: 2px; }
@media (hover: hover) { .ov-eng-dot:hover { transform: translateY(-2px); color: var(--text); border-color: var(--border-hi); } }

/* Purple Methylation upsell CTA \u2014 ONLY rendered when DNA is wired in but the
   Methylation add-on still needs uploading. On-brand violet, with a slow sheen
   sweep, hover lift, and a nudging arrow. Opens MyAI to guide them to 100%. */
.ov-eng-meth-note { position: relative; z-index: 1; margin: 11px 0 0; font-size: 11.5px; line-height: 1.4;
  font-weight: 600; color: var(--text-2); text-align: center; }
.ov-eng-cta {
  appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  position: relative; z-index: 1; margin-top: 4px; width: 100%; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 10px 14px; border-radius: 12px; color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 12.5px; letter-spacing: .005em;
  background: linear-gradient(125deg,
    color-mix(in srgb, var(--violet) 88%, #ffffff) 0%,
    var(--violet) 46%,
    color-mix(in srgb, var(--violet) 64%, var(--blue-2)) 100%);
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--violet) 75%, transparent),
              0 2px 6px -3px color-mix(in srgb, var(--violet) 55%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .30);
  transition: transform .3s var(--ease-out), box-shadow .3s var(--ease-out), filter .3s var(--ease-out);
}
.ov-eng-cta svg { width: 15px; height: 15px; flex: none; position: relative; z-index: 1; }
.ov-eng-cta span { position: relative; z-index: 1; }
.ov-eng-cta svg:last-child { transition: transform .25s var(--ease-out); }
.ov-eng-cta::after { content: ''; position: absolute; top: 0; bottom: 0; left: -60%; width: 42%; z-index: 0;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .42), transparent);
  transform: skewX(-18deg); animation: ovEngSheen 4.8s var(--ease-out) infinite; }
@keyframes ovEngSheen { 0% { left: -60%; } 40%, 100% { left: 135%; } }
.ov-eng-cta:focus-visible { outline: 2px solid var(--violet); outline-offset: 3px; }
.ov-eng-cta:active { transform: scale(.985); }
@media (hover: hover) {
  .ov-eng-cta:hover { transform: translateY(-2px); filter: saturate(1.06) brightness(1.03);
    box-shadow: 0 16px 30px -12px color-mix(in srgb, var(--violet) 80%, transparent),
                0 3px 8px -3px color-mix(in srgb, var(--violet) 60%, transparent),
                inset 0 1px 0 rgba(255, 255, 255, .34); }
  .ov-eng-cta:hover svg:last-child { transform: translateX(3px); }
}

@media (prefers-reduced-motion: reduce) {
  .ov-engine, .ov-eng-say.swap, .ov-eng-core-ic.pop { animation: none; }
  .ov-eng-core-r { animation: none !important; }
  .ov-eng-eyebrow > .ov-eng-live, .ov-eng-cta::after { animation: none; }
}

/* ===========================================================================
   F126 · MYAI WORD-CLOUD — the "what you talk to MyAI about" facet inside the
   Precision Engine. Hidden until its card rotates in (.ov-engine.show-words);
   then the top themes bloom as frequency-sized, tappable chips. Each opens the
   exact chat it came from; an admin/coach trust line grounds it. Violet vibe,
   dual-theme, reduced-motion safe. =========================================== */
.ov-eng-words { position: relative; z-index: 1; display: none; flex-direction: column; gap: 9px; }
.ov-engine.show-words .ov-eng-words { display: flex; }
.ov-engine.show-words .ov-eng-say { display: none; }       /* the cloud replaces the prose line */
.ov-eng-cloud { display: flex; flex-wrap: wrap; gap: 7px; }
/* MyAI themes always read as a full two-row word bubble, never a thin single line */
.ov-engine.eng-myai.show-words .ov-eng-cloud { min-height: 64px; align-content: flex-start; }
.ov-eng-word {
  appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 999px;
  /* warmer + bigger the more it's used (--hot 0–100) */
  font-size: calc(11px + var(--hot, 50) * .055px); font-weight: 700; letter-spacing: -.01em;
  color: color-mix(in srgb, var(--eng-accent) calc(40% + var(--hot, 50) * .45%), var(--text-2));
  background: color-mix(in srgb, var(--eng-accent) calc(7% + var(--hot, 50) * .1%), var(--surface));
  border: 1px solid color-mix(in srgb, var(--eng-accent) calc(20% + var(--hot, 50) * .35%), var(--border));
  transform: scale(0); opacity: 0; animation: ovWordIn .42s var(--ease-out) both;
  transition: transform .2s var(--ease-out), color .2s, background .2s, border-color .2s, box-shadow .2s; }
.ov-eng-word:nth-child(1){animation-delay:.04s}.ov-eng-word:nth-child(2){animation-delay:.09s}
.ov-eng-word:nth-child(3){animation-delay:.14s}.ov-eng-word:nth-child(4){animation-delay:.19s}
.ov-eng-word:nth-child(5){animation-delay:.24s}.ov-eng-word:nth-child(6){animation-delay:.29s}
.ov-eng-word:nth-child(7){animation-delay:.34s}.ov-eng-word:nth-child(8){animation-delay:.39s}
@keyframes ovWordIn { to { transform: scale(1); opacity: 1; } }
.ov-eng-word i { font-style: normal; font-weight: 800; font-size: .72em; padding: 1px 5px; border-radius: 999px;
  color: var(--eng-accent); background: color-mix(in srgb, var(--eng-accent) 16%, transparent); }
.ov-eng-word:focus-visible { outline: 2px solid var(--eng-accent); outline-offset: 2px; }
@media (hover: hover) { .ov-eng-word:hover { transform: translateY(-2px) scale(1.04); color: #fff;
  background: var(--eng-accent); border-color: var(--eng-accent);
  box-shadow: 0 8px 20px -8px color-mix(in srgb, var(--eng-accent) 70%, transparent); }
  .ov-eng-word:hover i { color: #fff; background: rgba(255,255,255,.22); } }
.ov-eng-admin { display: inline-flex; align-items: center; gap: 6px; font-size: 10.5px; font-weight: 600; color: var(--muted); }
.ov-eng-admin svg { width: 12px; height: 12px; flex: none; color: var(--eng-accent); opacity: .9; }
@media (prefers-reduced-motion: reduce) { .ov-eng-word { animation: none; transform: none; opacity: 1; } }

/* F143 · preview portal: every engine chip is SEALED — it wears the same
   gradient lock jewel as the F139 locked tabs (teal→blue→violet), and clicking
   opens the cinematic unlock invitation instead of the detail popup. */
.engw-lock { display: inline-grid; place-items: center; flex: none; width: 14px; height: 14px; margin-left: -1px;
  border-radius: 999px; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 55%, var(--violet));
  box-shadow: 0 2px 8px color-mix(in srgb, var(--blue-2) 45%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
  transition: transform .24s var(--ease-spring), box-shadow .24s var(--ease-out); }
.engw-lock svg { width: 8px; height: 8px; }
@media (hover: hover) { .ov-eng-word.engw-locked:hover .engw-lock { transform: scale(1.15);
  box-shadow: 0 3px 14px color-mix(in srgb, var(--violet) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.5); } }
@media (prefers-reduced-motion: reduce) { .engw-lock { transition: none; } }

/* F126 · the "Open my DNA Portal" CTA — only on the DNA facet. Teal/helix vibe,
   matching the violet meth CTA's premium build (sheen, lift, nudging arrow). */
.ov-eng-portal { appearance: none; -webkit-appearance: none; border: 0; cursor: pointer; width: 100%; overflow: hidden;
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 8px; margin-top: 2px;
  padding: 10px 14px; border-radius: 12px; color: #fff; font-family: var(--font-display); font-weight: 700; font-size: 12.5px;
  background: linear-gradient(125deg, color-mix(in srgb, var(--teal) 88%, #fff) 0%, var(--teal) 44%, var(--blue-2) 100%);
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--teal) 70%, transparent), inset 0 1px 0 rgba(255,255,255,.30);
  transition: transform .3s var(--ease-out), box-shadow .3s var(--ease-out), filter .3s; }
.ov-eng-portal[hidden] { display: none; }
.ov-eng-portal svg { width: 15px; height: 15px; flex: none; }
.ov-eng-portal svg:last-child { transition: transform .25s var(--ease-out); }
.ov-eng-portal::after { content: ''; position: absolute; top: 0; bottom: 0; left: -60%; width: 42%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.42), transparent); transform: skewX(-18deg);
  animation: ovEngSheen 4.8s var(--ease-out) infinite; }
.ov-eng-portal:focus-visible { outline: 2px solid var(--blue-2); outline-offset: 3px; }
@media (hover: hover) { .ov-eng-portal:hover { transform: translateY(-2px); filter: saturate(1.06) brightness(1.03); }
  .ov-eng-portal:hover svg:last-child { transform: translateX(3px); } }
@media (prefers-reduced-motion: reduce) { .ov-eng-portal::after { animation: none; } }

/* ══ THE DNA-PORTAL LAUNCHER — shared premium CTA (detail sheet + tooltip) ══
   One card-style launcher: helix chip in a glass tile, two-line label, nudging
   arrow, teal→blue gradient sheen. Fully tokenized (both themes), fluid width
   (adapts to any container), touch-sized on mobile, reduced-motion safe. */
.idn-portal-cta { appearance: none; -webkit-appearance: none; cursor: pointer; width: 100%; overflow: hidden;
  position: relative; display: flex; align-items: center; gap: 12px; text-align: left;
  padding: 12px 14px; border-radius: 14px; border: 1px solid color-mix(in srgb, var(--teal) 34%, transparent);
  background:
    linear-gradient(115deg, color-mix(in srgb, var(--teal) 13%, var(--surface)) 0%,
                            color-mix(in srgb, var(--blue-2) 10%, var(--surface)) 100%);
  box-shadow: 0 10px 26px -14px color-mix(in srgb, var(--teal) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.14);
  transition: transform .28s var(--ease-spring), box-shadow .28s var(--ease-out), border-color .28s; }
.idn-portal-cta[hidden] { display: none; }
.idn-portal-cta .ipc-ic { flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 11px;
  color: #fff; background: linear-gradient(135deg, var(--teal) 0%, var(--blue-2) 100%);
  box-shadow: 0 6px 16px -6px color-mix(in srgb, var(--teal) 70%, transparent), inset 0 1px 0 rgba(255,255,255,.35); }
.idn-portal-cta .ipc-ic svg { width: 19px; height: 19px; }
.idn-portal-cta .ipc-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.idn-portal-cta .ipc-tx b { font-family: var(--font-display); font-weight: 750; font-size: 13.5px; letter-spacing: -.01em;
  color: var(--text); line-height: 1.25; }
.idn-portal-cta .ipc-tx span { font-size: 11px; font-weight: 550; color: var(--muted); line-height: 1.35;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.idn-portal-cta .ipc-go { flex: none; display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%;
  color: var(--teal); background: color-mix(in srgb, var(--teal) 14%, transparent);
  transition: transform .25s var(--ease-out), background .25s; }
.idn-portal-cta .ipc-go svg { width: 14px; height: 14px; }
.idn-portal-cta::after { content: ''; position: absolute; top: 0; bottom: 0; left: -60%; width: 40%; pointer-events: none;
  background: linear-gradient(100deg, transparent, color-mix(in srgb, #fff 26%, transparent), transparent);
  transform: skewX(-18deg); animation: ovEngSheen 5.4s var(--ease-out) infinite; }
.idn-portal-cta:focus-visible { outline: 2px solid var(--blue-2); outline-offset: 3px; }
@media (hover: hover) {
  .idn-portal-cta:hover { transform: translateY(-2px);
    border-color: color-mix(in srgb, var(--teal) 55%, transparent);
    box-shadow: 0 16px 34px -14px color-mix(in srgb, var(--teal) 65%, transparent), inset 0 1px 0 rgba(255,255,255,.18); }
  .idn-portal-cta:hover .ipc-go { transform: translateX(3px); background: color-mix(in srgb, var(--teal) 24%, transparent); } }
.idn-portal-cta:active { transform: translateY(0) scale(.985); }
/* placements: sheet head gap + tooltip rhythm above the Ask button */
.lhsp > .idn-portal-cta { margin: 2px 0 4px; }
.idn-pop .idn-pop-portal { margin: 13px 0 0; }
.idn-pop .idn-pop-portal .ipc-tx span { white-space: normal; }   /* narrow popover — never truncate */
.idn-pop .idn-pop-portal + .idn-pop-ask { margin-top: 9px; }
@media (max-width: 640px) {
  .idn-portal-cta { padding: 13px 14px; border-radius: 15px; }          /* comfortable thumb target */
  .idn-portal-cta .ipc-tx span { white-space: normal; }                  /* let the subline wrap on phones */
}
@media (prefers-reduced-motion: reduce) { .idn-portal-cta::after { animation: none; }
  .idn-portal-cta, .idn-portal-cta .ipc-go { transition: none; } }
/* Methylation report download — the connected panel's launcher, violet-toned */
.idn-portal-cta.ipc-meth { border-color: color-mix(in srgb, var(--violet) 34%, transparent);
  background:
    linear-gradient(115deg, color-mix(in srgb, var(--violet) 13%, var(--surface)) 0%,
                            color-mix(in srgb, var(--blue-2) 10%, var(--surface)) 100%);
  box-shadow: 0 10px 26px -14px color-mix(in srgb, var(--violet) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.14); }
.idn-portal-cta.ipc-meth .ipc-ic { background: linear-gradient(135deg, var(--violet) 0%, var(--blue-2) 100%);
  box-shadow: 0 6px 16px -6px color-mix(in srgb, var(--violet) 70%, transparent), inset 0 1px 0 rgba(255,255,255,.35); }
.idn-portal-cta.ipc-meth .ipc-go { color: var(--violet); background: color-mix(in srgb, var(--violet) 14%, transparent); }
@media (hover: hover) {
  .idn-portal-cta.ipc-meth:hover { border-color: color-mix(in srgb, var(--violet) 55%, transparent);
    box-shadow: 0 16px 34px -14px color-mix(in srgb, var(--violet) 65%, transparent), inset 0 1px 0 rgba(255,255,255,.18); }
  .idn-portal-cta.ipc-meth:hover .ipc-go { background: color-mix(in srgb, var(--violet) 24%, transparent); } }

/* the word → chat popup body (reuses .idn-modal shell) */
.mw-pop { display: flex; flex-direction: column; gap: 10px; }
.mw-line { display: flex; flex-direction: column; gap: 4px; padding: 11px 13px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px solid var(--border-soft); }
.mw-line.mw-you { align-self: flex-end; max-width: 92%; background: color-mix(in srgb, var(--blue-2) 12%, var(--surface)); }
.mw-line.mw-ai  { align-self: flex-start; max-width: 92%; background: color-mix(in srgb, var(--violet) 9%, var(--surface)); }
.mw-who { display: inline-flex; align-items: center; gap: 5px; font-size: 10.5px; font-weight: 800; letter-spacing: .04em;
  text-transform: uppercase; color: var(--muted); }
.mw-who svg { width: 12px; height: 12px; }
.mw-line p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text); }
.mw-empty { margin: 0; font-size: 14px; line-height: 1.55; color: var(--text-2); display: flex; gap: 8px; align-items: flex-start; }
.mw-empty svg { width: 17px; height: 17px; flex: none; color: var(--violet); margin-top: 2px; }
.mw-open { margin-top: 4px; width: 100%; gap: 8px; }
.mw-open svg { width: 16px; height: 16px; }

/* ===========================================================================
   F144 · YOUR NEXT MOVE — the homepage's top-left command widget. One hero
   move (accent icon disc · headline · payoff pill · one gradient CTA) + a
   quiet "Then" queue. Adaptive per user (first-timer / member / DNA states).
   Inherits the retired engine's exact top-left footprint (see .ov-score-row
   rules). Tokenized · dual-theme · reduced-motion-safe.
   ========================================================================== */
.ov-nextmove {
  --nm-accent: var(--teal);
  position: relative; flex: 1 1 210px; min-width: min(210px, 100%); align-self: stretch;
  display: flex; flex-direction: column; gap: 10px; padding: 14px 16px 14px;
  border-radius: var(--r-md); overflow: hidden; border: 1px solid var(--border);
  background:
    radial-gradient(120% 80% at 100% 0%, color-mix(in srgb, var(--nm-accent) 13%, transparent), transparent 58%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 78%, transparent),
                            color-mix(in srgb, var(--surface) 86%, transparent));
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 5%, transparent);
  animation: ovEngIn .6s var(--ease-out) both;
}
.ov-nm-glow { position: absolute; z-index: 0; top: -30%; right: -16%; width: 70%; height: 85%; pointer-events: none;
  background: radial-gradient(circle at 70% 20%, color-mix(in srgb, var(--nm-accent) 22%, transparent), transparent 68%);
  filter: blur(30px); opacity: .5; }
.ov-nm-eyebrow { position: relative; z-index: 1; display: flex; align-items: center; gap: 7px;
  font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--text-2); }
.ov-nm-eyebrow > svg { width: 13px; height: 13px; flex: none; color: var(--nm-accent); }
.ov-nm-eyebrow > span:not(.ov-nm-live) { flex: 1; min-width: 0; }
.ov-nm-eyebrow > .ov-nm-live { width: 6px; height: 6px; border-radius: 50%; flex: none; background: var(--nm-accent);
  animation: ovEngLive 2.4s ease-out infinite; }
.ov-nm-hero { position: relative; z-index: 1; display: flex; align-items: center; gap: 13px; }
.ov-nm-ic { flex: none; width: 46px; height: 46px; border-radius: 15px; display: grid; place-items: center;
  color: var(--nm-accent);
  background: color-mix(in srgb, var(--nm-accent) 12%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--nm-accent) 32%, var(--border));
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--nm-accent) 55%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .18); }
.ov-nm-ic svg { width: 21px; height: 21px; }
.ov-nm-tx { min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.ov-nm-tx b { font-family: var(--font-display); font-weight: 700; font-size: clamp(15.5px, 2.4vw, 18px);
  letter-spacing: -.01em; color: var(--text); line-height: 1.2; }
.ov-nm-gain { display: inline-flex; align-items: center; gap: 5px; width: fit-content;
  font-size: 11px; font-weight: 700; padding: 3px 9px; border-radius: 999px; color: var(--nm-accent);
  background: color-mix(in srgb, var(--nm-accent) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--nm-accent) 28%, transparent); }
.ov-nm-gain svg { width: 11px; height: 11px; flex: none; }
.ov-nm-why { position: relative; z-index: 1; margin: 0; font-size: 11.5px; line-height: 1.5; color: var(--text-2); }
/* one gradient CTA — accent-driven, same premium build as the engine CTAs */
.ov-nm-cta {
  appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  position: relative; z-index: 1; width: 100%; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 10px 14px; border-radius: 12px; color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 12.5px; letter-spacing: .005em;
  background: linear-gradient(125deg,
    color-mix(in srgb, var(--nm-accent) 88%, #ffffff) 0%,
    var(--nm-accent) 46%,
    color-mix(in srgb, var(--nm-accent) 58%, var(--blue-2)) 100%);
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--nm-accent) 75%, transparent),
              0 2px 6px -3px color-mix(in srgb, var(--nm-accent) 55%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .30);
  transition: transform .3s var(--ease-out), box-shadow .3s var(--ease-out), filter .3s var(--ease-out);
}
.ov-nm-cta svg { width: 15px; height: 15px; flex: none; transition: transform .25s var(--ease-out); }
.ov-nm-cta::after { content: ''; position: absolute; top: 0; bottom: 0; left: -60%; width: 42%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .42), transparent);
  transform: skewX(-18deg); animation: ovEngSheen 4.8s var(--ease-out) infinite; }
/* dark mode — make button text black for better contrast (Jacob's ask) */
:root:not([data-theme="light"]) .ov-nm-cta { color: #000; }
.ov-nm-cta:focus-visible { outline: 2px solid var(--nm-accent); outline-offset: 3px; }
.ov-nm-cta:active { transform: scale(.985); }
@media (hover: hover) {
  .ov-nm-cta:hover { transform: translateY(-2px); filter: saturate(1.06) brightness(1.03);
    box-shadow: 0 16px 30px -12px color-mix(in srgb, var(--nm-accent) 80%, transparent),
                0 3px 8px -3px color-mix(in srgb, var(--nm-accent) 60%, transparent),
                inset 0 1px 0 rgba(255, 255, 255, .34); }
  .ov-nm-cta:hover svg { transform: translateX(3px); }
}
/* the quiet "Then" queue — the next two moves as glass rows */
.ov-nm-queue { position: relative; z-index: 1; display: flex; flex-direction: column; gap: 6px; margin-top: auto; }
.ov-nm-then { font-size: 9.5px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; color: var(--muted); }
.ov-nm-row { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit; text-align: left;
  display: flex; align-items: center; gap: 9px; padding: 8px 10px; border-radius: 11px;
  background: var(--fill-1); border: 1px solid var(--border-soft); color: var(--text-2);
  transition: transform .25s var(--ease-out), border-color .25s, background .25s, color .25s; }
.ov-nm-row-ic { flex: none; display: grid; place-items: center; color: var(--nm-accent); }
.ov-nm-row-ic svg { width: 14px; height: 14px; }
/* T2.6 · queue rows wrap to two lines — the promise text never clips mid-word */
.ov-nm-row-tx { flex: 1; min-width: 0; font-size: 12px; font-weight: 600; overflow: hidden;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.35; }
.ov-nm-row-go { flex: none; color: var(--muted); transform: rotate(-90deg); display: grid; place-items: center; }
.ov-nm-row-go svg { width: 13px; height: 13px; }
.ov-nm-row:focus-visible { outline: 2px solid var(--nm-accent); outline-offset: 2px; }
@media (hover: hover) { .ov-nm-row:hover { transform: translateY(-2px); color: var(--text);
  border-color: color-mix(in srgb, var(--nm-accent) 40%, var(--border)); background: var(--fill-2); } }
@media (prefers-reduced-motion: reduce) {
  .ov-nextmove, .ov-nm-eyebrow > .ov-nm-live, .ov-nm-cta::after { animation: none; }
  .ov-nm-cta, .ov-nm-row { transition: none; }
}

/* F186 · COMPUTER SCALE-UP (preview): make the top-left Next Move command card
   larger and more legible so it fills more hero space and reduces blank air
   between the top nav and the widget's content. */
@media (min-width: 1025px) {
  .ov-score-card--pv .ov-nextmove {
    gap: 13px;
    padding: 18px 20px 20px;
  }
  .ov-score-card--pv .ov-nm-eyebrow {
    font-size: 11px;
    letter-spacing: .075em;
  }
  .ov-score-card--pv .ov-nm-eyebrow > svg {
    width: 15px;
    height: 15px;
  }
  .ov-score-card--pv .ov-nm-hero {
    gap: 16px;
  }
  .ov-score-card--pv .ov-nm-ic {
    width: 56px;
    height: 56px;
    border-radius: 17px;
  }
  .ov-score-card--pv .ov-nm-ic svg {
    width: 24px;
    height: 24px;
  }
  .ov-score-card--pv .ov-nm-tx b {
    font-size: clamp(18px, 2.1vw, 23px);
    line-height: 1.16;
  }
  .ov-score-card--pv .ov-nm-gain {
    font-size: 12px;
    padding: 4px 10px;
  }
  .ov-score-card--pv .ov-nm-why {
    font-size: 13px;
    line-height: 1.6;
  }
  .ov-score-card--pv .ov-nm-cta {
    min-height: 52px;
    font-size: 14px;
    border-radius: 14px;
  }
  .ov-score-card--pv .ov-nm-then {
    font-size: 10px;
  }
  .ov-score-card--pv .ov-nm-row {
    min-height: 42px;
    padding: 10px 12px;
    border-radius: 12px;
  }
  .ov-score-card--pv .ov-nm-row-tx {
    font-size: 13.5px;
  }
}

/* ===========================================================================
   F401 · MY IDNUTRITION PLAN — the member command card (replaces Your Next
   Move for real members). Two columns on computer, stacked on tablet/phone.
   Dual-theme (tokens only), reduced-motion-safe.
   ========================================================================== */
.ov-plancard {
  position: relative; flex: 1 1 320px; min-width: min(300px, 100%); align-self: stretch;
  display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
  gap: clamp(14px, 2vw, 22px); padding: clamp(16px, 2vw, 24px);
  border-radius: var(--r-md); overflow: hidden; border: 1px solid var(--border);
  background:
    radial-gradient(120% 80% at 100% 0%, color-mix(in srgb, var(--teal) 10%, transparent), transparent 58%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 78%, transparent),
                            color-mix(in srgb, var(--surface) 86%, transparent));
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 5%, transparent);
  animation: ovEngIn .6s var(--ease-out) both;
}
/* container-typed so the tier title sizes to ITS OWN COLUMN, not the viewport —
   a viewport clamp let "Foundational" overflow into the .ov-pc-side rail
   whenever the card's grid column ran narrow (F414). */
.ov-pc-left { display: flex; flex-direction: column; min-width: 0; container-type: inline-size; }
.ov-pc-eyebrow { font-size: 10.5px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;
  color: var(--teal); margin-bottom: 8px; }
.ov-pc-tier { font-family: var(--font-display); font-weight: 700; letter-spacing: -.015em;
  /* 12.5cqw keeps "Foundational" (the longest single WORD) on one line at any
     column width. Multi-word titles ("Your Current Subscription") WRAP to the
     next line instead of running into the side rail — never overflow. */
  font-size: clamp(17px, 12.5cqw, 34px); line-height: 1.12; color: var(--text); margin: 0 0 6px;
  white-space: normal; overflow-wrap: break-word; }
/* "Customized" — text only beside the tier name (no pill, no icon), marking a
   plan the member deliberately tuned (adds or quantity changes).
   Solid teal on dark, solid blue on light — no gradient. */
.ov-pc-custom { display: inline-block; font-style: italic; font-weight: 650;
  font-size: 0.695em; line-height: 1; letter-spacing: .005em; margin-left: 4px;
  white-space: nowrap; color: var(--teal);
  /* optically centred against the tier cap-height, not the text baseline */
  vertical-align: middle; position: relative; top: -0.06em; }
[data-theme="light"] .ov-pc-custom { color: var(--blue-2); }
.ov-pc-count { font-size: 12.5px; color: var(--text-2); margin-bottom: 8px; }
.ov-pc-price { display: flex; align-items: baseline; gap: 3px; margin-bottom: clamp(12px, 2vh, 22px); }
.ov-pc-price b { font-family: var(--font-display); font-weight: 700; font-size: clamp(22px, 2.6vw, 30px);
  letter-spacing: -.01em; color: var(--teal); }
.ov-pc-price small { font-size: 11.5px; font-weight: 600; color: var(--muted); }
.ov-pc-ctas { display: flex; flex-direction: column; gap: 9px; margin-top: auto; }
/* computer: the side rail sets the card's height, so the CTA stack floats in
   the leftover space — split it evenly above and below (centered, not sunk) */
@media (min-width: 861px) {
  .ov-pc-ctas { margin-bottom: auto; }
}
.ov-pc-cta {
  appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  position: relative; overflow: hidden; width: 100%; min-height: 46px;
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 11px 16px; border-radius: 12px; color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 13.5px;
  background: linear-gradient(115deg, var(--teal) 0%, var(--blue-2) 62%, var(--violet) 100%);
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--blue-2) 75%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .3);
  transition: transform .3s var(--ease-out), box-shadow .3s var(--ease-out), filter .3s var(--ease-out);
}
.ov-pc-cta svg { width: 15px; height: 15px; flex: none; transition: transform .25s var(--ease-out); }
.ov-pc-cta:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }
.ov-pc-cta:active { transform: scale(.985); }
@media (hover: hover) {
  .ov-pc-cta:hover { transform: translateY(-2px); filter: saturate(1.06) brightness(1.03); }
  .ov-pc-cta:hover svg { transform: translateX(3px); }
}
.ov-pc-btn {
  appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  width: 100%; min-height: 42px; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 10px 14px; border-radius: 12px; font-weight: 650; font-size: 12.5px;
  background: var(--fill-1); border: 1px solid var(--border); color: var(--text-2);
  transition: transform .25s var(--ease-out), border-color .25s, background .25s, color .25s;
}
.ov-pc-btn svg { width: 15px; height: 15px; flex: none; color: var(--muted); }
.ov-pc-btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) {
  .ov-pc-btn:hover { transform: translateY(-1px); color: var(--text);
    border-color: color-mix(in srgb, var(--teal) 40%, var(--border)); background: var(--fill-2); }
}
/* right rail — subscription + connections, its own quiet panel */
.ov-pc-side { display: flex; flex-direction: column; gap: 12px; min-width: 0;
  padding: clamp(12px, 1.6vw, 18px); border-radius: 14px;
  background: color-mix(in srgb, var(--surface) 55%, transparent);
  border: 1px solid var(--border-soft); }
.ov-pc-subrow { display: flex; align-items: center; }
.ov-pc-pill { display: inline-flex; align-items: center; gap: 7px; font-size: 11.5px; font-weight: 700;
  padding: 4px 11px; border-radius: 999px; }
.ov-pc-pill i { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.ov-pc-pill.is-on { color: var(--teal); background: color-mix(in srgb, var(--teal) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent); }
.ov-pc-pill.is-on i { background: var(--teal); box-shadow: 0 0 10px var(--teal); }
.ov-pc-pill.is-off { color: var(--muted); background: var(--fill-1); border: 1px solid var(--border-soft); }
.ov-pc-pill.is-off i { background: var(--muted); }
.ov-pc-sublbl { font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); margin: 2px 0 -6px; }
.ov-pc-subdate { font-family: var(--font-display); font-weight: 700; font-size: clamp(19px, 2.2vw, 24px);
  letter-spacing: -.01em; color: var(--text); }
/* connection buttons — teal glass when connected, honest red when not */
.ov-pc-conn {
  appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  width: 100%; min-height: 42px; display: inline-flex; align-items: center; gap: 9px;
  padding: 10px 13px; border-radius: 11px; font-weight: 650; font-size: 12px; text-align: left;
  transition: transform .25s var(--ease-out), border-color .25s, background .25s, filter .25s;
}
.ov-pc-conn svg { width: 15px; height: 15px; flex: none; }
.ov-pc-conn span { flex: 1; min-width: 0; line-height: 1.3; overflow: hidden;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.ov-pc-conn.is-on { color: var(--teal);
  background: color-mix(in srgb, var(--teal) 9%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 42%, transparent); }
.ov-pc-conn.is-off { color: var(--danger);
  background: color-mix(in srgb, var(--danger) 7%, transparent);
  border: 1px solid color-mix(in srgb, var(--danger) 38%, transparent); }
.ov-pc-conn:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) {
  .ov-pc-conn:hover { transform: translateY(-1px); filter: brightness(1.05); }
}
.ov-pc-delay { justify-content: center; text-align: center; font-weight: 700; }
.ov-pc-delay span { flex: none; }
.ov-pc-group { display: flex; flex-direction: column; gap: 8px; padding-top: 12px;
  border-top: 1px solid var(--border-soft); }
.ov-pc-grouplbl { display: flex; align-items: center; gap: 7px; font-size: 10.5px; font-weight: 700;
  letter-spacing: .07em; text-transform: uppercase; color: var(--muted); }
.ov-pc-grouplbl svg { width: 13px; height: 13px; flex: none; }
[data-theme="light"] .ov-pc-side { background: #f8fafe; }
/* the plan card claims the engine/next-move footprint on computer */
@media (min-width: 700px) {
  .ov-score-row > .ov-plancard { order: -1; max-width: calc(50% + 40px); }
}
/* tablet only — match the .ov-scorefx card's full-column width */
@media (min-width: 641px) and (max-width: 1120px) {
  .ov-score-card .ov-score-row > .ov-plancard { flex: 1 1 100%; max-width: 100%; }
}
/* tablet + phone — single column; the sub rail rides below the CTAs */
@media (max-width: 860px) {
  .ov-plancard { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-plancard { animation: none; }
  .ov-pc-cta, .ov-pc-btn, .ov-pc-conn { transition: none; }
}

/* ===========================================================================
   F403 · ONE-TIME COVERAGE — "Order Another Box" CTA + re-order sheet.
   A one-time purchaser sees a coverage countdown, never delivery language.
   ========================================================================== */
.ov-pc-reorder {
  appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  position: relative; overflow: hidden; width: 100%; min-height: 46px;
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 11px 16px; border-radius: 12px; border: none;
  font-family: var(--font-display); font-weight: 700; font-size: 13px; color: #fff;
  background: linear-gradient(120deg, #16dbc8, #2f6bf2 55%, #4338e8);
  background-size: 170% 170%;
  box-shadow: 0 10px 26px -12px color-mix(in srgb, #2f6bf2 65%, transparent);
  transition: transform .25s var(--ease-spring), box-shadow .25s var(--ease-out), background-position .5s var(--ease-out);
}
.ov-pc-reorder svg { width: 16px; height: 16px; flex: none; }
.ov-pc-reorder-glow { position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(105deg, transparent 38%, rgba(255,255,255,.34) 50%, transparent 62%);
  background-size: 240% 100%; background-position: 130% 0;
  animation: pcre-sheen 4.2s var(--ease-out) infinite; }
@keyframes pcre-sheen { 0%, 55% { background-position: 130% 0; } 85%, 100% { background-position: -110% 0; } }
@media (hover: hover) {
  .ov-pc-reorder:hover { transform: translateY(-2px);
    box-shadow: 0 16px 34px -12px color-mix(in srgb, #2f6bf2 78%, transparent);
    background-position: 90% 50%; }
}
.ov-pc-reorder:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }

/* ── The re-order sheet ── */
.pcre-modal { width: min(520px, 100%); overflow: hidden; }
.pcre-hero { position: relative; height: 118px; display: grid; place-items: center;
  background:
    radial-gradient(120% 160% at 50% -30%, color-mix(in srgb, var(--teal) 22%, transparent), transparent 60%),
    linear-gradient(160deg, color-mix(in srgb, #2f6bf2 14%, transparent), transparent 70%);
  border-bottom: 1px solid var(--border-soft); }
.pcre-orb { position: absolute; width: 190px; height: 190px; border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--teal) 30%, transparent), transparent 62%);
  filter: blur(22px); }
.pcre-boxico { position: relative; z-index: 1; display: grid; place-items: center;
  width: 62px; height: 62px; border-radius: 19px; color: #fff;
  background: linear-gradient(140deg, #16dbc8, #2f6bf2 60%, #4338e8);
  box-shadow: 0 14px 34px -12px color-mix(in srgb, #2f6bf2 70%, transparent);
  animation: pcre-float 5.5s ease-in-out infinite; }
.pcre-boxico svg { width: 30px; height: 30px; }
@keyframes pcre-float { 0%, 100% { transform: translateY(2px); } 50% { transform: translateY(-4px); } }
.pcre-ring { position: absolute; width: 96px; height: 96px; border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--teal) 38%, transparent);
  animation: pcre-pulse 3.2s var(--ease-out) infinite; }
.pcre-ring2 { animation-delay: 1.6s; }
@keyframes pcre-pulse { 0% { transform: scale(.72); opacity: .9; } 100% { transform: scale(1.55); opacity: 0; } }
.pcre-head { padding-top: 16px; }
.pcre-tag { color: var(--teal); }
.pcre-sub { margin-top: 6px; font-size: 13px; line-height: 1.55; color: var(--muted); }
.pcre-cartchip { margin: 2px 0 14px; }
.pcre-cartchip small { display: block; font-size: 10.5px; font-weight: 700; letter-spacing: .07em;
  text-transform: uppercase; color: var(--muted); margin-bottom: 8px; }
.pcre-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.pcre-chip { font-size: 11.5px; font-weight: 600; padding: 4px 10px; border-radius: 999px;
  color: var(--text); background: var(--fill-1); border: 1px solid var(--border-soft); }
.pcre-chip-more { color: var(--muted); }
.pcre-paths { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.pcre-paths[hidden] { display: none; }   /* display:grid would defeat [hidden] */
/* step 2 = a fresh question page: choices stack full-width like form answers */
.pcre-paths[data-pcre-step2] { grid-template-columns: 1fr; }
/* form-style page advance: current content slides out left, next slides in */
.pcre-slide-out { opacity: 0; transform: translateX(-16px); transition: opacity .18s ease, transform .18s ease; }
.pcre-slide-in { animation: pcreSlideIn .3s var(--ease-out) both; }
@keyframes pcreSlideIn { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: none; } }
.pcre-back { grid-column: 1 / -1; justify-self: start; display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border-radius: 999px; font-size: 12.5px; font-weight: 600;
  color: var(--muted); background: var(--fill-1); border: 1px solid var(--border-soft); cursor: pointer;
  transition: color .2s, border-color .2s; }
.pcre-back:hover { color: var(--text); border-color: color-mix(in srgb, var(--teal) 35%, transparent); }
.pcre-back svg { width: 13px; height: 13px; transform: rotate(180deg); }
/* step 3 — review the exact box, then choose how to pay */
.pcre-review { display: flex; flex-direction: column; gap: 12px; }
.pcre-review[hidden] { display: none; }
.pcre-plan { border-radius: 16px; padding: 14px 16px 12px;
  background: var(--fill-1); border: 1px solid var(--border-soft); }
.pcre-plan-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.pcre-plan-tier { font-family: var(--font-head); font-weight: 700; font-size: 15px; }
.pcre-plan-count { font-size: 12px; color: var(--muted); }
.pcre-plan-lines { list-style: none; display: flex; flex-direction: column; max-height: 200px; overflow-y: auto; }
.pcre-plan-line { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 7px 0; border-top: 1px solid var(--border-soft); font-size: 13px; }
.pcre-plan-name b { font-weight: 600; }
.pcre-plan-qty { font-style: normal; margin-left: 6px; font-size: 11.5px; font-weight: 700; color: var(--teal); }
.pcre-plan-price { font-weight: 600; white-space: nowrap; }
.pcre-plan-price small, .pcre-plan-total small { font-size: .72em; color: var(--muted); font-weight: 500; }
.pcre-plan-total { display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
  padding-top: 10px; margin-top: 2px; border-top: 1px solid color-mix(in srgb, var(--teal) 30%, transparent); }
.pcre-plan-total b { font-size: 18px; }
.pcre-plan-note { display: flex; align-items: center; gap: 7px; margin-top: 9px;
  font-size: 12px; color: var(--muted); }
.pcre-plan-note svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
.pcre-confirm-paths { display: grid; grid-template-columns: 1fr; gap: 12px; }
.pcre-path-paynow { border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  background: color-mix(in srgb, var(--teal) 9%, var(--fill-1)); }
.pcre-path {
  appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit; text-align: left;
  position: relative; display: flex; flex-direction: column; gap: 7px;
  padding: 18px 16px 15px; border-radius: 16px;
  background: var(--fill-1); border: 1px solid var(--border-soft); color: var(--text);
  transition: transform .25s var(--ease-spring), border-color .25s, box-shadow .25s var(--ease-out);
}
.pcre-path b { font-family: var(--font-display); font-size: 14.5px; line-height: 1.3; letter-spacing: -.01em; }
.pcre-path small { font-size: 12px; line-height: 1.5; color: var(--muted); }
.pcre-path-ico { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 11px;
  color: var(--teal); background: color-mix(in srgb, var(--teal) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 28%, transparent); }
.pcre-path-ico svg { width: 18px; height: 18px; }
.pcre-path-go { display: inline-flex; align-items: center; gap: 6px; margin-top: 4px;
  font-weight: 700; font-size: 12px; color: var(--teal); }
.pcre-path-go svg { width: 14px; height: 14px; transition: transform .25s var(--ease-out); }
.pcre-path-badge { position: absolute; top: -9px; right: 12px; font-size: 10px; font-weight: 800;
  letter-spacing: .05em; text-transform: uppercase; color: #fff; padding: 3px 9px; border-radius: 999px;
  background: linear-gradient(120deg, #16dbc8, #2f6bf2); }
.pcre-path-sub { border-color: color-mix(in srgb, var(--teal) 34%, transparent);
  background: color-mix(in srgb, var(--teal) 5%, var(--fill-1)); }
@media (hover: hover) {
  .pcre-path:hover { transform: translateY(-2px); border-color: color-mix(in srgb, var(--teal) 55%, transparent);
    box-shadow: 0 14px 30px -16px color-mix(in srgb, var(--teal) 45%, transparent); }
  .pcre-path:hover .pcre-path-go svg { transform: translateX(3px); }
}
.pcre-path:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.pcre-foot { justify-content: center; }
.pcre-foot-note { display: inline-flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--muted); }
.pcre-foot-note svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
[data-theme="light"] .pcre-path { background: #ffffff; }
[data-theme="light"] .pcre-path-sub { background: #f4fdfc; }
/* hug the content — never stretch to the phone-sheet 96dvh with dead space */
.idn-modal.pcre-modal { height: auto; max-height: min(88dvh, 720px); }
.pcre-modal .idn-modal-body { flex: 0 1 auto; }
/* step 3 (review) is tall — give it the whole viewport: the decorative hero
   collapses and the modal grows so the plan + pay choices sit above the fold */
.idn-modal.pcre-modal.pcre-tall { max-height: min(96dvh, 900px); }
.pcre-modal.pcre-tall .pcre-hero { height: 56px; }
.pcre-modal.pcre-tall .pcre-boxico svg { width: 30px; height: 30px; }
.pcre-modal.pcre-tall .pcre-ring, .pcre-modal.pcre-tall .pcre-ring2 { display: none; }
@media (max-width: 640px) {
  .idn-modal.pcre-modal.pcre-tall { max-height: 96dvh; height: 96dvh; }
  .pcre-modal.pcre-tall .pcre-hero { display: none; }
  /* the product list absorbs the squeeze so both pay choices stay in view */
  .pcre-plan-lines { max-height: 22dvh; }
  .pcre-modal.pcre-tall .pcre-path { padding: 13px 14px 11px; gap: 5px; }
  .pcre-modal.pcre-tall .pcre-path small { font-size: 12px; line-height: 1.4; }
  .pcre-modal.pcre-tall .pcre-plan { padding: 11px 14px 10px; }
  .pcre-modal.pcre-tall .pcre-plan-line { padding: 5px 0; }
  .pcre-modal.pcre-tall .pcre-review { gap: 9px; }
  .pcre-modal.pcre-tall .pcre-confirm-paths { gap: 9px; }
  .pcre-modal.pcre-tall .pcre-foot { display: none; }
}

/* paid-cart quantity marker on regimen product cards */
.ov-reg-qty { font-style: normal; font-size: 11px; font-weight: 800; color: var(--teal); }

/* one-time coverage rows — desktop stacks (label wraps under the pill, date
   block beneath); mobile pulls everything onto shared lines */
.ov-pc-subrow-ot { flex-wrap: wrap; gap: 8px; }
.ov-pc-otlbl { flex-basis: 100%; margin: 4px 0 -4px; }
.ov-pc-otdate { display: flex; flex-direction: column; gap: 1px; }
.ov-pc-otdate .ov-pc-sublbl { margin: 0; }
@media (max-width: 640px) {
  .ov-pc-otlbl { flex-basis: auto; margin: 0; }
  .ov-pc-otdate { flex-direction: row; align-items: baseline; gap: 7px; }
  .ov-pc-otdate .ov-pc-subdate { font-size: 17px; }
}

@media (max-width: 640px) {
  .pcre-paths { grid-template-columns: 1fr; }
  .pcre-hero { height: 96px; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-pc-reorder-glow, .pcre-boxico, .pcre-ring { animation: none; }
  .ov-pc-reorder, .pcre-path { transition: none; }
}

/* ===========================================================================
   F402 · YOUR TOP 3 HEALTH PRIORITIES — the member's 3 lowest body systems
   (real engine scores as a percent) + trajectory-age estimates. Replaces the
   trend micro-chart in the hero's left column. Dual-theme, responsive.
   ========================================================================== */
.ov-top3 { position: relative; width: 100%; display: flex; flex-direction: column; gap: 10px;
  padding: clamp(15px, 1.8vw, 22px) clamp(16px, 1.9vw, 24px) clamp(14px, 1.6vw, 20px);
  border-radius: var(--r-md); text-align: left; overflow: hidden;
  background:
    radial-gradient(120% 130% at 0% 0%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 46%),
    radial-gradient(130% 140% at 100% 100%, color-mix(in srgb, var(--violet) 8%, transparent), transparent 48%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 78%, transparent),
                            color-mix(in srgb, var(--surface) 88%, transparent));
  border: 1px solid var(--border-soft);
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 6%, transparent);
  animation: ovTrIn .6s var(--ease-out) both; }
.ov-top3::before { content: ''; position: absolute; inset: 0 0 auto 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--teal) 55%, transparent), transparent); opacity: .6; }
[data-theme="light"] .ov-top3 { border-color: rgba(0, 0, 0, .7);
  box-shadow: 0 8px 26px -18px rgba(20, 50, 120, .22), inset 0 1px 0 rgba(255, 255, 255, .6); }
.ov-tp3-eyebrow { font-size: 10.5px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase;
  color: var(--teal); }
.ov-tp3-head { display: grid; grid-template-columns: minmax(0, 1fr) 92px 118px; align-items: baseline;
  gap: 10px; }
.ov-tp3-title { font-family: var(--font-display); font-weight: 700; letter-spacing: -.015em;
  font-size: clamp(19px, 2.3vw, 26px); line-height: 1.12; color: var(--text); margin: 0; }
.ov-tp3-col { font-size: 10px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
  color: var(--muted); text-align: center; white-space: nowrap; }
.ov-tp3-list { display: flex; flex-direction: column; gap: 9px; }
.ov-tp3-row { display: grid; grid-template-columns: 34px 24px minmax(0, 1fr) 92px 118px;
  align-items: center; gap: 10px; padding: 13px 14px; border-radius: 14px; cursor: pointer;
  background: color-mix(in srgb, var(--surface) 55%, transparent);
  border: 1px solid var(--border-soft);
  transition: transform .25s var(--ease-out), border-color .25s, background .25s;
  animation: ovTrIn .5s var(--ease-out) both; animation-delay: calc(var(--i, 0) * 90ms); }
@media (hover: hover) {
  .ov-tp3-row:hover { transform: translateY(-2px); background: var(--fill-2);
    border-color: color-mix(in srgb, var(--teal) 42%, var(--border)); }
}
.ov-tp3-row:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-tp3-n { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; flex: none;
  color: var(--teal); font-size: 14px; font-weight: 700;
  border: 1.5px solid color-mix(in srgb, var(--teal) 55%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent); }
.ov-tp3-ic { display: grid; place-items: center; color: var(--teal); }
.ov-tp3-ic svg { width: 17px; height: 17px; }
.ov-tp3-name { min-width: 0; font-size: 14.5px; font-weight: 650; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-tp3-score, .ov-tp3-age { display: flex; align-items: baseline; justify-content: center; gap: 4px; }
.ov-tp3-score b, .ov-tp3-age b { font-family: var(--font-display); font-weight: 700;
  font-size: clamp(20px, 2.2vw, 26px); letter-spacing: -.01em; color: var(--text); }
.ov-tp3-score small, .ov-tp3-age small { font-size: 11px; font-weight: 600; color: var(--muted); }
/* F411 · selected priority with no eligible evidence — stays in its rank,
   shows honest copy instead of a number. */
.ov-tp3-nodata { font-size: 10px; font-weight: 700; color: var(--muted); letter-spacing: 0.02em; white-space: nowrap; }
.ov-tp3-row.b-nodata { opacity: 0.82; }
.ov-tp3-row.b-nodata .ov-tp3-ic { color: var(--muted); }
/* worst system's score pops teal (the reference's #1 highlight) */
.ov-tp3-row[style*="--i:0"] .ov-tp3-score b,
.ov-tp3-row[style*="--i:0"] .ov-tp3-age b { color: var(--teal); }
.ov-tp3-note { margin: 0; font-size: 10.5px; color: var(--muted); }
/* the priorities panel claims the trend's footprint on computer */
@media (min-width: 700px) {
  .ov-score-left > .ov-top3 { width: calc(50% + 40px); align-self: flex-start; }
}
@media (min-width: 1121px) {
  .ov-score-card .ov-score-left > .ov-top3 { width: 90%; }
}
/* F414 · thin desktop — full column */
@media (min-width: 1121px) and (max-width: 1320px) {
  .ov-score-card .ov-score-left > .ov-top3 { width: 100%; }
}
/* tablet only — match the .ov-scorefx card's full-column width */
@media (min-width: 641px) and (max-width: 1120px) {
  .ov-score-card .ov-score-left > .ov-top3 { width: 100%; align-self: stretch; }
}
/* tablet + phone — tighter columns, headers hug the rows */
@media (max-width: 640px) {
  /* phone — the title claims its own full-width line (never wraps) and the
     eyebrow drops beside the Score / Biological Age labels. */
  .ov-top3 { display: grid; grid-template-columns: minmax(0, 1fr) 58px 74px;
    align-items: baseline; column-gap: 7px; row-gap: 10px; }
  .ov-tp3-head { display: contents; }
  .ov-tp3-title { grid-column: 1 / -1; order: 1; white-space: nowrap;
    font-size: clamp(15px, 5.1vw, 19px); }
  .ov-tp3-eyebrow { grid-column: 1; order: 2; align-self: end; }
  .ov-tp3-col { order: 2; align-self: end; }
  .ov-tp3-list, .ov-tp3-note { grid-column: 1 / -1; order: 3; }
  .ov-tp3-col { white-space: normal; line-height: 1.25; }
  .ov-tp3-row { grid-template-columns: 28px 20px minmax(0, 1fr) 58px 74px; gap: 7px; padding: 11px 11px; }
  .ov-tp3-n { width: 28px; height: 28px; font-size: 12.5px; }
  .ov-tp3-ic svg { width: 15px; height: 15px; }
  .ov-tp3-name { font-size: 13px; white-space: normal; line-height: 1.25;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .ov-tp3-score b, .ov-tp3-age b { font-size: 18px; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-top3, .ov-tp3-row { animation: none; }
  .ov-tp3-row { transition: none; }
}

/* ===========================================================================
   F406 · PRIORITY PRODUCT RECOMMENDATIONS — 3 real SKUs matched to the
   member's 3 lowest health domains. StartSmart-inspired hover glow + lift,
   IDN brand tokens, dual-theme, responsive.
   ========================================================================== */
.ov-reco-slot { width: 100%; }
.ov-reco { position: relative; width: 100%; display: flex; flex-direction: column; gap: 10px;
  padding: clamp(15px, 1.8vw, 22px) clamp(16px, 1.9vw, 24px) clamp(16px, 1.8vw, 22px);
  border-radius: var(--r-md); overflow: hidden;
  background:
    radial-gradient(120% 130% at 100% 0%, color-mix(in srgb, var(--violet) 8%, transparent), transparent 48%),
    radial-gradient(130% 140% at 0% 100%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 46%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 78%, transparent),
                            color-mix(in srgb, var(--surface) 88%, transparent));
  border: 1px solid var(--border-soft);
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 6%, transparent);
  animation: ovTrIn .6s var(--ease-out) both; }
.ov-reco::before { content: ''; position: absolute; inset: 0 0 auto 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--violet) 55%, transparent), transparent); opacity: .6; }
[data-theme="light"] .ov-reco { border-color: rgba(0, 0, 0, .7);
  box-shadow: 0 8px 26px -18px rgba(20, 50, 120, .22), inset 0 1px 0 rgba(255, 255, 255, .6); }
.ov-reco-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.ov-reco-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(10px, 1.4vw, 16px); }
.ov-reco-card { position: relative; display: flex; flex-direction: column; gap: 6px;
  padding: 14px 14px 15px; border-radius: 16px; overflow: hidden; min-width: 0;
  cursor: pointer;
  background: color-mix(in srgb, var(--surface) 55%, transparent);
  border: 1px solid var(--border-soft);
  transition: transform .22s var(--ease-out), border-color .22s, box-shadow .22s;
  animation: ovTrIn .5s var(--ease-out) both; animation-delay: calc(var(--i, 0) * 90ms);
  will-change: transform; }
/* the StartSmart hover glow — twin brand-hued radials fading in over the card */
.ov-reco-glow { position: absolute; inset: 0; pointer-events: none; opacity: 0;
  transition: opacity .22s var(--ease-out);
  background:
    radial-gradient(800px 320px at 25% 15%, color-mix(in srgb, var(--teal) 15%, transparent), transparent 55%),
    radial-gradient(700px 280px at 85% 25%, color-mix(in srgb, var(--violet) 14%, transparent), transparent 60%); }
@media (hover: hover) {
  .ov-reco-card:hover { transform: translateY(-3px);
    border-color: color-mix(in srgb, var(--teal) 40%, var(--border));
    box-shadow: 0 18px 40px -20px color-mix(in srgb, var(--blue-2) 45%, transparent); }
  .ov-reco-card:hover .ov-reco-glow { opacity: 1; }
  .ov-reco-card:hover .ov-reco-img { transform: scale(1.04); }
}
.ov-reco-badge { position: absolute; top: 11px; right: 11px; z-index: 2;
  font-size: 9.5px; font-weight: 800; letter-spacing: .04em; color: #fff;
  padding: 4px 10px; border-radius: 999px;
  background: linear-gradient(115deg, var(--teal), var(--blue-2));
  box-shadow: 0 6px 14px -6px color-mix(in srgb, var(--blue-2) 70%, transparent); }
/* Fixed 4:3 stage — the art is ALWAYS fully contained, never cropped.
   Flex + explicit child sizing: percentage heights don't resolve reliably
   inside a <button>'s anonymous content box, which cropped the bottle art. */
.ov-reco-imgwrap { appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  position: relative; z-index: 1; width: 100%; aspect-ratio: 4 / 3;
  min-height: clamp(108px, 11vw, 148px); padding: 10px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 13px; overflow: hidden;
  background: color-mix(in srgb, var(--surface-2) 65%, transparent); }
.ov-reco-imgwrap:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-reco-img { width: 100%; height: 100%; min-width: 0; min-height: 0; object-fit: contain;
  filter: drop-shadow(0 14px 26px rgba(0, 0, 0, .28));
  transition: transform .22s var(--ease-out); will-change: transform; }
.ov-reco-imgfb { display: grid; place-items: center; width: 44px; flex: none; }
.ov-reco-for { position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 6px;
  font-size: 10px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--teal); }
.ov-reco-for svg { width: 12px; height: 12px; flex: none; }
.ov-reco-for b { color: var(--text-2); font-weight: 800; }
.ov-reco-name { position: relative; z-index: 1; font-family: var(--font-display); font-weight: 700;
  font-size: 15px; letter-spacing: -.01em; color: var(--text); line-height: 1.2; }
.ov-reco-tag { position: relative; z-index: 1; font-size: 11px; line-height: 1.45; color: var(--text-2);
  overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  /* always reserve 2 lines — the block above the foot is uniform, so Add to
     Cart buttons land at the SAME y across a row */
  min-height: 32px; }
.ov-reco-foot { position: relative; z-index: 1; margin-top: auto; padding-top: 8px;
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; }
/* narrow desktop cards — buttons share the row, wrap when tight, never clip */
.ov-reco-foot .ov-reco-add { flex: 1 1 auto; justify-content: center; min-width: 0; }
.ov-reco-foot .ov-reco-view { flex: 0 1 auto; justify-content: center; }
.ov-reco-price { display: inline-flex; align-items: baseline; gap: 2px;
  font-family: var(--font-display); font-weight: 700; font-size: 15.5px; color: var(--text); }
.ov-reco-price small { font-size: 10px; font-weight: 600; color: var(--muted); }
.ov-reco-add { appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px; min-height: 36px;
  padding: 8px 13px; border-radius: 11px; color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 11.5px; white-space: nowrap;
  background: linear-gradient(115deg, var(--teal) 0%, var(--blue-2) 100%);
  box-shadow: 0 8px 18px -10px color-mix(in srgb, var(--blue-2) 75%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .28);
  transition: transform .2s var(--ease-out), filter .2s; }
.ov-reco-add svg { width: 13px; height: 13px; flex: none; }
.ov-reco-add:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-reco-add:active { transform: scale(.97); }
@media (hover: hover) { .ov-reco-add:hover { transform: translateY(-1px); filter: brightness(1.07); } }
.ov-reco-view { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  display: inline-flex; align-items: center; gap: 6px; min-height: 36px;
  padding: 8px 12px; border-radius: 11px; font-weight: 650; font-size: 11.5px; white-space: nowrap;
  color: var(--text-2); background: var(--fill-1); border: 1px solid var(--border-soft);
  transition: transform .2s var(--ease-out), border-color .2s, color .2s, background .2s; }
.ov-reco-view svg { width: 13px; height: 13px; flex: none; }
.ov-reco-view:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) {
  .ov-reco-view:hover { transform: translateY(-1px); color: var(--text); background: var(--fill-2);
    border-color: color-mix(in srgb, var(--teal) 40%, var(--border)); }
}
/* desktop — the reco panel matches the priorities panel footprint */
@media (min-width: 700px) {
  .ov-score-left > .ov-reco-slot { width: calc(50% + 40px); align-self: flex-start; }
}
@media (min-width: 1121px) {
  .ov-score-card .ov-score-left > .ov-reco-slot { width: 90%; }
}
/* F414 · thin desktop — full column */
@media (min-width: 1121px) and (max-width: 1320px) {
  .ov-score-card .ov-score-left > .ov-reco-slot { width: 100%; }
}
/* tablet — 3-up holds; phones — single column, bigger art */
@media (max-width: 640px) {
  .ov-reco-grid { grid-template-columns: 1fr; }
  .ov-reco-imgwrap { aspect-ratio: 16 / 10; min-height: 170px; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-reco, .ov-reco-card { animation: none; }
  .ov-reco-card, .ov-reco-glow, .ov-reco-img, .ov-reco-add { transition: none; }
}

/* ── F412 · "Explore More Recommendations" — a quiet, NON-CTA affordance.
   Deliberately ghost-styled: it must never compete with Add to Cart. ── */
.ov-reco-more { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  align-self: center; margin-top: 4px; display: inline-flex; align-items: center; gap: 8px;
  min-height: 34px; padding: 7px 14px 7px 12px; border-radius: 999px;
  font-family: var(--font-display); font-weight: 650; font-size: 12px; letter-spacing: -.005em;
  color: var(--text-2); background: color-mix(in srgb, var(--surface) 50%, transparent);
  border: 1px solid var(--border-soft);
  transition: transform .2s var(--ease-out), color .2s, border-color .2s, background .2s; }
.ov-reco-more svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
.ov-reco-more:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) {
  .ov-reco-more:hover { transform: translateY(-1px); color: var(--text);
    background: var(--fill-2); border-color: color-mix(in srgb, var(--teal) 40%, var(--border)); }
}
[data-theme="light"] .ov-reco-more { background: rgba(255, 255, 255, .7); border-color: rgba(0, 0, 0, .12); }
/* PREGJACOB · the pregnancy-safe note under the card */
.ov-reco-safenote { display: flex; align-items: flex-start; gap: 7px; margin: 2px 0 0;
  font-size: 10.5px; line-height: 1.45; color: var(--muted); }
.ov-reco-safenote svg { width: 13px; height: 13px; flex: none; margin-top: 1px; color: var(--teal); }

/* ── F412 · full-screen "more recommendations" theater ──
   z-index rides ABOVE the Open Shop cart slideout (100002) — the cart's
   "Continue shopping other products" button opens these. */
.rcm-backdrop { position: fixed; inset: 0; z-index: 100010; display: grid; place-items: center;
  padding: clamp(12px, 3vw, 40px);
  background: color-mix(in srgb, #03070f 74%, transparent);
  -webkit-backdrop-filter: blur(16px) saturate(120%); backdrop-filter: blur(16px) saturate(120%);
  opacity: 0; transition: opacity .24s var(--ease-out); }
.rcm-backdrop.show { opacity: 1; }
[data-theme="light"] .rcm-backdrop { background: color-mix(in srgb, #0b1a38 42%, transparent); }
.rcm-modal { position: relative; width: min(1560px, calc(100vw - 40px)); height: 94dvh; max-height: 94dvh; overflow: hidden;
  display: flex; flex-direction: column; border-radius: clamp(18px, 2vw, 26px);
  background:
    radial-gradient(120% 90% at 100% 0%, color-mix(in srgb, var(--violet) 12%, transparent), transparent 52%),
    radial-gradient(110% 90% at 0% 100%, color-mix(in srgb, var(--teal) 11%, transparent), transparent 50%),
    linear-gradient(180deg, var(--surface-2), var(--surface));
  border: 1px solid var(--border);
  box-shadow: 0 50px 120px -40px rgba(0, 0, 0, .8), inset 0 1px 0 color-mix(in srgb, #ffffff 8%, transparent);
  transform: translateY(18px) scale(.985); opacity: 0;
  transition: transform .3s var(--ease-out), opacity .3s var(--ease-out); }
.rcm-backdrop.show .rcm-modal { transform: none; opacity: 1; }
[data-theme="light"] .rcm-modal { border-color: rgba(0, 0, 0, .14);
  box-shadow: 0 44px 110px -46px rgba(20, 50, 120, .42), inset 0 1px 0 rgba(255, 255, 255, .8); }
.rcm-aura { position: absolute; inset: 0 0 auto 0; height: 2px; pointer-events: none;
  background: linear-gradient(90deg, transparent, var(--teal), var(--blue-2), var(--violet), transparent);
  opacity: .8; }
.rcm-head { position: relative; z-index: 1; display: flex; align-items: flex-start; gap: 14px;
  padding: clamp(18px, 2.2vw, 26px) clamp(18px, 2.4vw, 30px) clamp(12px, 1.4vw, 16px);
  border-bottom: 1px solid var(--border-soft); }
.rcm-brand { display: flex; align-items: center; gap: 12px; min-width: 0; flex: 1; }
.rcm-shield { display: grid; place-items: center; width: 38px; flex: none; }
.rcm-shield svg { width: 100%; height: auto; }
.rcm-brandtx { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.rcm-eyebrow { font-size: 10.5px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase;
  color: var(--teal); }
.rcm-title { margin: 0; font-family: var(--font-display); font-weight: 700; letter-spacing: -.02em;
  font-size: clamp(20px, 2.6vw, 28px); line-height: 1.1; color: var(--text); }
.rcm-x { appearance: none; -webkit-appearance: none; cursor: pointer; flex: none;
  width: 38px; height: 38px; display: grid; place-items: center; border-radius: 50%;
  color: var(--text-2); background: var(--fill-1); border: 1px solid var(--border-soft);
  transition: transform .2s var(--ease-out), color .2s, background .2s, border-color .2s; }
.rcm-x svg { width: 17px; height: 17px; }
.rcm-x:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) {
  .rcm-x:hover { transform: rotate(90deg); color: var(--text); background: var(--fill-2);
    border-color: color-mix(in srgb, var(--teal) 45%, var(--border)); }
}
.rcm-body { position: relative; z-index: 1; overflow-y: auto; -webkit-overflow-scrolling: touch;
  padding: clamp(16px, 2vw, 24px) clamp(18px, 2.4vw, 30px); }
.rcm-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.rcm-foot { position: relative; z-index: 1; display: flex; justify-content: center;
  padding: clamp(14px, 1.6vw, 20px) clamp(18px, 2.4vw, 30px) clamp(18px, 2vw, 24px);
  border-top: 1px solid var(--border-soft);
  background: color-mix(in srgb, var(--surface) 40%, transparent); }
.rcm-foot .ov-reco-more { align-self: center; margin-top: 0; }
.rcm-foot-col { flex-direction: column; align-items: center; gap: 10px; }
.rcm-foot-col .ov-reco-safenote { max-width: 560px; text-align: center; justify-content: center; }
.rcm-foot-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 12px; }
/* "Go To Cart" — the popup's primary path out, brand-gradient like Add to Cart */
.ov-reco-gocart { appearance: none; -webkit-appearance: none; border: 0; cursor: pointer;
  display: inline-flex; align-items: center; gap: 8px; min-height: 38px;
  padding: 9px 18px; border-radius: 999px; color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 12.5px; white-space: nowrap;
  background: linear-gradient(115deg, var(--teal) 0%, var(--blue-2) 100%);
  box-shadow: 0 8px 18px -10px color-mix(in srgb, var(--blue-2) 75%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .28);
  transition: transform .2s var(--ease-out), filter .2s; }
.ov-reco-gocart svg { width: 14px; height: 14px; flex: none; }
.ov-reco-gocart:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-reco-gocart:active { transform: scale(.97); }
@media (hover: hover) { .ov-reco-gocart:hover { transform: translateY(-1px); filter: brightness(1.07); } }
/* Locked in-popup "Added to Cart" state — calm teal confirmation, not a CTA */
.ov-reco-add.is-added { cursor: default; color: var(--teal);
  background: color-mix(in srgb, var(--teal) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 45%, transparent);
  box-shadow: none; }
.ov-reco-add.is-added:hover { transform: none; filter: none; }

/* ── F416 · "Why this is right for you" — the NEPQ unfold under a card.
   Tapping the product art toggles it; brand glass, teal hairline, unfolds. ── */
.ov-reco-why { position: relative; z-index: 1; overflow: hidden;
  max-height: 0; opacity: 0; transform: translateY(-4px);
  transition: max-height .32s var(--ease-out), opacity .24s var(--ease-out), transform .28s var(--ease-out); }
/* open panels absorb the row's height slack (grid rows stretch to the tallest
   card) — every panel starts right under its foot at the SAME y, stretches to
   the card bottom, and its price/More-Details row bottom-anchors: full row
   symmetry no matter how much copy each product has */
.ov-reco-why.open { max-height: 460px; opacity: 1; transform: none;
  flex: 1 1 auto; display: flex; flex-direction: column; }
.ov-rwhy-inner { display: flex; flex-direction: column; gap: 7px; margin-top: 9px;
  flex: 1 1 auto;
  padding: 12px 13px 13px; border-radius: 13px;
  background:
    radial-gradient(120% 130% at 0% 0%, color-mix(in srgb, var(--teal) 8%, transparent), transparent 50%),
    color-mix(in srgb, var(--surface-2) 62%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 26%, var(--border-soft)); }
[data-theme="light"] .ov-rwhy-inner { background:
    radial-gradient(120% 130% at 0% 0%, color-mix(in srgb, var(--teal) 7%, transparent), transparent 50%),
    rgba(255, 255, 255, .8); }
.ov-rwhy-spin { display: grid; place-items: center; padding: 8px 0; color: var(--teal); }
.ov-rwhy-spin svg { width: 16px; height: 16px; animation: rwhySpin 1s linear infinite; }
@keyframes rwhySpin { to { transform: rotate(360deg); } }
.ov-rwhy-eyebrow { display: inline-flex; align-items: center; gap: 6px;
  font-size: 9.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--teal); }
.ov-rwhy-eyebrow svg { width: 12px; height: 12px; flex: none; }
.ov-rwhy-fact { margin: 0; font-size: 12px; line-height: 1.5; color: var(--text); }
.ov-rwhy-fact b { color: var(--teal); }
.ov-rwhy-hook { margin: 0; font-family: var(--font-display); font-weight: 700;
  font-size: 13.5px; line-height: 1.3; letter-spacing: -.01em; color: var(--text); }
.ov-rwhy-q { margin: 0; font-size: 12px; line-height: 1.5; font-style: italic; color: var(--text-2); }
.ov-rwhy-bridge { margin: 0; font-size: 12px; line-height: 1.5; color: var(--text-2); }
.ov-rwhy-desc { margin: 0; padding-top: 7px; border-top: 1px solid var(--border-soft);
  font-size: 11px; line-height: 1.5; color: var(--muted); }
/* price + More Details share one row — price left (big), button right;
   margin-top:auto pins the row to the panel bottom so rows align across cards */
.ov-rwhy-foot { display: flex; align-items: center; justify-content: space-between;
  gap: 10px; margin-top: auto; padding-top: 4px; }
.ov-rwhy-close { margin: 0; display: inline-flex; align-items: baseline; gap: 6px;
  font-size: 11.5px; line-height: 1.3; color: var(--text-2); }
.ov-rwhy-close b { color: var(--text); font-family: var(--font-display); font-weight: 700;
  font-size: clamp(19px, 2vw, 23px); letter-spacing: -.01em; }
.ov-rwhy-retail { font-size: 11.5px; color: var(--muted); }
.ov-rwhy-yourprice { font-style: normal; font-size: 9.5px; font-weight: 800;
  letter-spacing: .06em; text-transform: uppercase; color: var(--teal); }
.ov-rwhy-details { flex: none; }
@media (prefers-reduced-motion: reduce) {
  .ov-reco-why { transition: none; }
  .ov-rwhy-spin svg { animation: none; }
}
@media (max-width: 900px) { .rcm-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) {
  .rcm-modal { max-height: 94dvh; }
  .rcm-grid { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .rcm-backdrop, .rcm-modal, .ov-reco-more, .rcm-x { transition: none; }
}

/* ── F401 · DELAY NEXT DELIVERY calendar popup (rides the .idn-modal shell) ── */
.pcal-modal { width: min(480px, 100%); }
.pcal-ico { background: color-mix(in srgb, var(--teal) 13%, var(--surface)); color: var(--teal);
  border-color: color-mix(in srgb, var(--teal) 32%, transparent);
  box-shadow: 0 8px 22px -10px color-mix(in srgb, var(--teal) 45%, transparent); }
.pcal-tag { color: var(--teal); }
.pcal-body { display: flex; flex-direction: column; gap: 12px; padding-bottom: 6px; }
.pcal-now { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--text-2);
  padding: 10px 14px; border-radius: 12px; background: var(--fill-1); border: 1px solid var(--border-soft); }
.pcal-now svg { width: 15px; height: 15px; flex: none; color: var(--teal); }
.pcal-now b { color: var(--text); }
.pcal-nav { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.pcal-month { font-family: var(--font-display); font-weight: 700; font-size: 15.5px; color: var(--text); }
.pcal-nav-btn { appearance: none; -webkit-appearance: none; cursor: pointer; width: 36px; height: 36px;
  border-radius: 50%; display: grid; place-items: center; background: var(--fill-1);
  border: 1px solid var(--border); color: var(--text-2);
  transition: background .2s, border-color .2s, color .2s; }
.pcal-nav-btn svg { width: 15px; height: 15px; }
.pcal-nav-btn:hover:not(:disabled) { background: var(--fill-2); color: var(--text); border-color: var(--border-hi); }
.pcal-nav-btn:disabled { opacity: .3; cursor: not-allowed; }
.pcal-nav-btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.pcal-dow { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; text-align: center;
  font-size: 10px; font-weight: 800; letter-spacing: .06em; color: var(--muted); }
.pcal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.pcal-pad { aspect-ratio: 1; }
.pcal-day { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  aspect-ratio: 1; min-height: 36px; border-radius: 11px; display: grid; place-items: center;
  font-size: 13px; font-weight: 600; color: var(--text-2);
  background: var(--fill-1); border: 1px solid transparent;
  transition: background .18s, border-color .18s, color .18s, transform .18s var(--ease-out); }
.pcal-day:hover:not(.is-off) { background: var(--fill-2); color: var(--text);
  border-color: color-mix(in srgb, var(--teal) 40%, var(--border)); transform: translateY(-1px); }
.pcal-day:focus-visible { outline: 2px solid var(--teal); outline-offset: 1px; }
.pcal-day.is-off { opacity: .35; cursor: not-allowed; color: var(--muted);
  background: transparent; text-decoration: line-through;
  text-decoration-color: color-mix(in srgb, var(--muted) 55%, transparent); }
.pcal-day.is-today { border-color: color-mix(in srgb, var(--blue-2) 55%, transparent); }
.pcal-day.is-cur { color: var(--teal); font-weight: 800;
  background: color-mix(in srgb, var(--teal) 12%, transparent);
  border-color: color-mix(in srgb, var(--teal) 45%, transparent); }
.pcal-day.is-sel { color: #fff; font-weight: 800;
  background: linear-gradient(125deg, var(--teal), var(--blue-2));
  border-color: transparent;
  box-shadow: 0 6px 16px -6px color-mix(in srgb, var(--blue-2) 70%, transparent); }
.pcal-hint { margin: 0; font-size: 11px; color: var(--muted); text-align: center; }
.pcal-foot { flex-direction: column; align-items: stretch; gap: 10px; }
.pcal-save { width: 100%; justify-content: center; gap: 8px; }
.pcal-save svg { width: 15px; height: 15px; }
.pcal-cancel { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  padding: 9px 12px; border-radius: 11px; font-size: 12px; font-weight: 650;
  color: var(--danger); background: transparent;
  border: 1px solid color-mix(in srgb, var(--danger) 34%, transparent);
  transition: background .2s, border-color .2s; }
.pcal-cancel svg { width: 13px; height: 13px; }
.pcal-cancel:hover { background: color-mix(in srgb, var(--danger) 8%, transparent);
  border-color: color-mix(in srgb, var(--danger) 55%, transparent); }
.pcal-cancel:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
.pcal-confirm { padding: 13px 15px; border-radius: 13px;
  background: color-mix(in srgb, var(--danger) 7%, transparent);
  border: 1px solid color-mix(in srgb, var(--danger) 35%, transparent); }
.pcal-confirm p { margin: 0 0 11px; font-size: 12.5px; line-height: 1.5; color: var(--text-2); }
.pcal-confirm-row { display: flex; gap: 9px; }
.pcal-confirm-row .btn { flex: 1; min-height: 40px; padding: 8px 12px; font-size: 12.5px; }
.pcal-confirm-yes { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  flex: 1; min-height: 40px; border-radius: 11px; font-size: 12.5px; font-weight: 700; color: #fff;
  background: linear-gradient(120deg, var(--danger), color-mix(in srgb, var(--danger) 60%, var(--violet)));
  border: 0; transition: filter .2s, transform .2s var(--ease-out); }
.pcal-confirm-yes:hover { filter: brightness(1.06); transform: translateY(-1px); }
.pcal-confirm-yes:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
@media (max-width: 640px) {
  .pcal-day { min-height: 40px; }
}

/* F144 · the science engine re-homed as the TRENDS tab's opening panel — a
   centered analysis hub above the insights / history / activity grid. */
.ov-science { display: block; }
.ov-science .ov-engine { max-width: 760px; margin: 0 auto; }

/* ===========================================================================
   F138 · $10B FACET POPUPS — the cinematic body for every "Science behind your
   number" chip + MyAI theme. An accent-themed animated emblem (live score ring /
   protective shield / helix / pill / chat tally), on-brand copy, gradient CTA.
   Dual-theme (tokens only), reduced-motion-safe. Reuses the .idn-modal shell.
   ========================================================================== */
/* accent theming — any .idn-modal given an accent (F138) recolors its top rim,
   header icon chip + eyebrow to a bespoke brand hue. */
.idn-modal.has-accent::before {
  background: linear-gradient(90deg, var(--modal-accent), color-mix(in srgb, var(--modal-accent) 35%, var(--violet)));
}
.idn-modal.has-accent .idn-modal-ico {
  background: color-mix(in srgb, var(--modal-accent) 15%, var(--surface));
  color: var(--modal-accent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--modal-accent) 45%, transparent),
              0 10px 26px color-mix(in srgb, var(--modal-accent) 28%, transparent);
}
.idn-modal.has-accent .idn-modal-tag { color: var(--modal-accent); }
.idn-modal.fx-modal .idn-modal-body { padding-top: 6px; }

.fx-pop { --fx: var(--modal-accent, var(--teal)); display: flex; flex-direction: column; gap: 16px; }
.fx-hero { display: flex; flex-direction: column; align-items: center; gap: 13px; padding: 8px 0 2px; }

.fx-stage { position: relative; width: 132px; height: 132px; display: grid; place-items: center; }
.fx-aura { position: absolute; inset: -8%; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--fx) 42%, transparent), transparent 68%);
  filter: blur(15px); animation: fxAura 4.4s var(--ease-out) infinite; }
@keyframes fxAura { 0%, 100% { transform: scale(.9); opacity: .68; } 50% { transform: scale(1.08); opacity: 1; } }
.fx-ripple { position: absolute; width: 92px; height: 92px; border-radius: 30%;
  border: 1.5px solid color-mix(in srgb, var(--fx) 55%, transparent); animation: fxRipple 2.9s var(--ease-out) infinite; }
@keyframes fxRipple { 0% { transform: scale(1); opacity: .6; } 100% { transform: scale(1.52); opacity: 0; } }

/* emblem disc (shield / helix / pill / chat) */
.fx-emblem .fx-disc { position: relative; width: 92px; height: 92px; border-radius: 30%; display: grid; place-items: center;
  color: #fff; z-index: 1;
  background: linear-gradient(140deg, var(--fx), color-mix(in srgb, var(--fx) 52%, var(--violet)));
  box-shadow: 0 18px 42px color-mix(in srgb, var(--fx) 40%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
  animation: fxFloat 5s var(--ease-out) infinite; }
.fx-emblem .fx-disc svg { width: 42px; height: 42px; }
.fx-emblem .fx-disc::after { content: ''; position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(180deg, rgba(255,255,255,.34), transparent 55%); pointer-events: none; }
@keyframes fxFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }

/* MyAI tally badge on the chat emblem */
.fx-myai .fx-tally { position: absolute; right: 12px; bottom: 12px; z-index: 2; min-width: 32px; height: 32px; padding: 0 8px;
  border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; gap: 1px;
  background: var(--surface); color: var(--fx); font-family: var(--font-display); font-weight: 800; font-size: 15px;
  box-shadow: 0 6px 16px rgba(0,0,0,.28), inset 0 0 0 1px color-mix(in srgb, var(--fx) 45%, transparent); }
.fx-myai .fx-tally i { font-style: normal; opacity: .68; font-size: 11px; }

/* system score ring */
.fx-ringsvg { width: 132px; height: 132px; }
.fx-ring-track { fill: none; stroke: var(--track); stroke-width: 9; }
.fx-ring-fill { fill: none; stroke: var(--fx); stroke-width: 9; stroke-linecap: round;
  transition: stroke-dashoffset 1.1s var(--ease-out);
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--fx) 55%, transparent)); }
.fx-ring-c { position: absolute; display: flex; flex-direction: column; align-items: center; line-height: 1; }
.fx-ring-c b { font-family: var(--font-display); font-weight: 800; font-size: 36px;
  background: linear-gradient(135deg, var(--fx), color-mix(in srgb, var(--fx) 48%, var(--violet)));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.fx-ring-c i { font-style: normal; font-size: 10.5px; font-weight: 600; color: var(--muted); margin-top: 4px;
  text-transform: uppercase; letter-spacing: .08em; }

/* caption chip under the emblem */
.fx-cap { display: inline-flex; align-items: center; gap: 6px; align-self: center; padding: 5px 14px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: var(--fx);
  background: color-mix(in srgb, var(--fx) 12%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--fx) 30%, transparent); }
.fx-cap svg { width: 14px; height: 14px; }

/* body copy + reused chat lines */
.fx-copy { font-size: 14.5px; line-height: 1.6; color: var(--text-2); }
.fx-copy > p { margin: 0 0 8px; }
.fx-copy > p:last-child { margin-bottom: 0; }
.fx-copy b { color: var(--text); font-weight: 700; }
.fx-lede { margin: 0; display: flex; gap: 8px; align-items: flex-start; font-size: 14.5px; color: var(--text-2); }
.fx-lede svg { width: 18px; height: 18px; flex: none; color: var(--fx); margin-top: 2px; }
.fx-lines { display: flex; flex-direction: column; gap: 9px; }

/* gradient CTA */
.fx-cta { margin-top: 2px; width: 100%; gap: 8px; }
.fx-cta svg { width: 16px; height: 16px; }

@media (prefers-reduced-motion: reduce) {
  .fx-aura, .fx-ripple, .fx-emblem .fx-disc { animation: none; }
  .fx-ring-fill { transition: none; }
}

/* ===========================================================================
   F139 · FIRST-TIMER LOCKED PAGES — Plan · Care · Trends · Reports are sealed
   until the first assessment is complete. The nav tabs wear a jewel-gradient
   lock (quietly precious, never grey/disabled); tapping one opens the
   cinematic unlock invitation below. Tokenized · dual-theme · responsive ·
   reduced-motion-safe.
   ========================================================================== */
/* the sealed tab — softly dimmed content, one gleaming lock jewel */
.mtab.mtab-locked { position: relative; }
.mtab.mtab-locked .mtab-lb, .mtab.mtab-locked .mtab-ic { opacity: .52; transition: opacity .24s var(--ease-out); }
.mtab.mtab-locked:hover .mtab-lb, .mtab.mtab-locked:hover .mtab-ic { opacity: .8; }
.mtab-lock { display: inline-grid; place-items: center; flex: none; width: 15px; height: 15px; border-radius: 999px;
  color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 55%, var(--violet));
  box-shadow: 0 2px 8px color-mix(in srgb, var(--blue-2) 45%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
  transition: transform .24s var(--ease-spring), box-shadow .24s var(--ease-out); }
.mtab-lock svg { width: 9px; height: 9px; }
.mtab.mtab-locked:hover .mtab-lock { transform: scale(1.12);
  box-shadow: 0 3px 14px color-mix(in srgb, var(--violet) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.5); }
/* F151 · phone/tablet bottom footer bar stacks icon OVER label (column) — the
   jewel would flow as a stray third row, so pin it to the icon's top-right corner.
   Larger widths keep the inline header pills where the jewel flows after the label. */
@media (max-width: 1024px) {
  .mtabbar:not(.mtabbar--top) .mtab-lock { position: absolute; top: 3px; left: 50%; transform: translateX(9px); }
  .mtabbar:not(.mtabbar--top) .mtab.mtab-locked:hover .mtab-lock { transform: translateX(9px) scale(1.12); }
}

/* ===========================================================================
   F167 · RESULTS BEACON GEM — the $40B guide-rail jewel on the Results nav tab.
   A faceted brand gem that lights the moment a new assessment lands and retires
   the instant the member reaches Results. Small but unmissable, on-brand
   (teal→blue→violet), a soft living pulse + halo. Pinned so it NEVER adds a
   line: it rides after the label on wide nav, and to the icon's top-right corner
   in the phone footer. Dual-theme · reduced-motion-safe.
   ========================================================================== */
.mtab.mtab-beacon { position: relative; }
.mtab-gem { display: inline-grid; place-items: center; flex: none; width: 16px; height: 16px;
  border-radius: 6px; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 52%, var(--violet));
  box-shadow: 0 2px 9px color-mix(in srgb, var(--blue-2) 52%, transparent),
              inset 0 1px 0 rgba(255,255,255,.5);
  animation: gemFlash 3s var(--ease-out) infinite;
  transition: transform .24s var(--ease-spring), box-shadow .24s var(--ease-out); }
.mtab-gem svg { width: 10px; height: 10px; filter: drop-shadow(0 1px 1px rgba(2,6,20,.35)); }
.mtab.mtab-beacon .mtab-lb { color: var(--blue); font-weight: 700; }
.mtab.mtab-beacon:hover .mtab-gem { transform: scale(1.14) rotate(-4deg);
  box-shadow: 0 4px 16px color-mix(in srgb, var(--violet) 58%, transparent), inset 0 1px 0 rgba(255,255,255,.6); }
[data-theme="light"] .mtab.mtab-beacon .mtab-lb { color: #3f6fd6; }
/* F187 · the results diamond flashes a cycling green → purple → pink glow so it
   pulls the eye until the user opens Results (which clears the beacon). */
@keyframes gemFlash {
  0%, 100% { box-shadow: 0 3px 14px color-mix(in srgb, #2fd39a 70%, transparent),
                         0 0 0 4px color-mix(in srgb, #2fd39a 20%, transparent), inset 0 1px 0 rgba(255,255,255,.6); }
  33%      { box-shadow: 0 3px 14px color-mix(in srgb, #a06bff 72%, transparent),
                         0 0 0 4px color-mix(in srgb, #a06bff 22%, transparent), inset 0 1px 0 rgba(255,255,255,.6); }
  66%      { box-shadow: 0 3px 14px color-mix(in srgb, #ff8ecb 72%, transparent),
                         0 0 0 4px color-mix(in srgb, #ff8ecb 22%, transparent), inset 0 1px 0 rgba(255,255,255,.6); }
}
/* phone/tablet footer bar stacks icon over label → pin the gem to the icon corner
   so it never flows as a stray third row (the one-line law holds at every width). */
@media (max-width: 1024px) {
  .mtabbar:not(.mtabbar--top) .mtab-gem { position: absolute; top: 2px; left: 50%; transform: translateX(8px); }
  .mtabbar:not(.mtabbar--top) .mtab.mtab-beacon:hover .mtab-gem { transform: translateX(8px) scale(1.14); }
}
@media (prefers-reduced-motion: reduce) {
  .mtab-gem { animation: none; }
}

/* the unlock invitation — the page's emblem wearing a pulsing lock jewel */
.fx-sealed .fx-lockbadge { position: absolute; right: 13px; bottom: 13px; z-index: 2; width: 34px; height: 34px;
  border-radius: 999px; display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 55%, var(--violet));
  box-shadow: 0 8px 20px rgba(0,0,0,.32), inset 0 1px 0 rgba(255,255,255,.45), 0 0 0 3px var(--surface);
  animation: lkPulse 3.2s var(--ease-out) infinite; }
.fx-sealed .fx-lockbadge svg { width: 16px; height: 16px; }
@keyframes lkPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.08); } }

/* "what's waiting" rows — accent-washed glass, a quiet lock on each */
.lk-rows { display: flex; flex-direction: column; gap: 9px; margin: 14px 0 4px; }
.lk-row { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-radius: var(--r-md);
  background: color-mix(in srgb, var(--fx, var(--teal)) 6%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--fx, var(--teal)) 18%, transparent); }
.lk-ic { flex: none; width: 36px; height: 36px; border-radius: 12px; display: grid; place-items: center; color: var(--fx, var(--teal));
  background: color-mix(in srgb, var(--fx, var(--teal)) 13%, var(--surface));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fx, var(--teal)) 32%, transparent); }
.lk-ic svg { width: 18px; height: 18px; }
.lk-tx { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.lk-tx b { font-size: 13.5px; font-weight: 700; color: var(--text); }
.lk-tx small { font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
.lk-chk { margin-left: auto; flex: none; display: grid; place-items: center;
  color: color-mix(in srgb, var(--fx, var(--teal)) 60%, var(--muted)); opacity: .72; }
.lk-chk svg { width: 15px; height: 15px; }
.lk-note { margin: 10px 0 0; display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--muted); }
.lk-note svg { width: 13px; height: 13px; flex: none; color: var(--teal); }

@media (prefers-reduced-motion: reduce) {
  .fx-sealed .fx-lockbadge { animation: none; }
  .mtab-lock { transition: none; }   /* hover scale becomes instant; phone translateX positioning preserved */
}

/* ===========================================================================
   F084 · METHYLATION UPLOAD POPUP — the premium "add your panel" dialog opened
   by the Precision Engine's purple CTA. Reuses the .idn-modal shell (backdrop
   blur · entry animation · mobile bottom-sheet · a11y) with a bespoke branded
   violet hero, a live drag-&-drop dropzone, a selected-file card, and a trust
   row. Tokenized · dual-theme · responsive. (Upload wiring intentionally TBD.)
   =========================================================================== */
.meth-modal { width: min(528px, 100%); }

/* branded hero — animated violet banner with a floating helix + sparks */
.meth-hero { position: relative; height: clamp(112px, 22vw, 138px); flex: none; overflow: hidden;
  background: linear-gradient(125deg, color-mix(in srgb, var(--violet) 90%, #fff) 0%, var(--violet) 46%, var(--blue-2) 100%); }
.meth-hero::after { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, transparent 52%, color-mix(in srgb, var(--bg) 32%, transparent)); }
.meth-hero-grid { position: absolute; inset: 0; opacity: .5; pointer-events: none;
  background-image: linear-gradient(rgba(255,255,255,.10) 1px, transparent 1px),
                    linear-gradient(90deg, rgba(255,255,255,.10) 1px, transparent 1px);
  background-size: 26px 26px;
  -webkit-mask-image: radial-gradient(120% 92% at 72% 0%, #000 32%, transparent 76%);
          mask-image: radial-gradient(120% 92% at 72% 0%, #000 32%, transparent 76%); }
.meth-hero-aura { position: absolute; left: 50%; top: 50%; width: 300px; height: 300px;
  transform: translate(-50%, -50%); pointer-events: none;
  background: radial-gradient(circle, rgba(255,255,255,.32), transparent 60%); filter: blur(14px);
  animation: methAura 5s var(--ease-out) infinite; }
@keyframes methAura { 0%,100% { opacity: .5; transform: translate(-50%,-50%) scale(.9); }
                      50%     { opacity: .9; transform: translate(-50%,-50%) scale(1.06); } }
.meth-hero-helix { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); color: #fff;
  filter: drop-shadow(0 10px 20px rgba(0,0,0,.28)); animation: methHeroFloat 6s var(--ease-out) infinite; }
.meth-hero-helix svg { width: clamp(48px, 13vw, 62px); height: auto; }
@keyframes methHeroFloat { 0%,100% { transform: translate(-50%, -53%); } 50% { transform: translate(-50%, -47%); } }
.meth-hero-spark { position: absolute; width: 6px; height: 6px; border-radius: 50%; background: #fff;
  box-shadow: 0 0 10px rgba(255,255,255,.85); }
.meth-hero-spark.s1 { left: 23%; top: 36%; animation: methTwinkle 2.6s ease-in-out infinite; }
.meth-hero-spark.s2 { right: 25%; top: 30%; width: 4px; height: 4px; animation: methTwinkle 3.1s ease-in-out .4s infinite; }
.meth-hero-spark.s3 { left: 33%; bottom: 26%; width: 5px; height: 5px; animation: methTwinkle 2.2s ease-in-out .8s infinite; }
@keyframes methTwinkle { 0%,100% { opacity: .18; transform: scale(.6); } 50% { opacity: .95; transform: scale(1); } }

/* close X + grab handle sit ON the colored hero → high-contrast glass disc */
.meth-modal .meth-x { color: #fff; border-color: rgba(255,255,255,.6); background: rgba(11,18,32,.46);
  -webkit-backdrop-filter: blur(8px) saturate(140%); backdrop-filter: blur(8px) saturate(140%);
  box-shadow: 0 4px 16px -2px rgba(0,0,0,.45), inset 0 0 0 1px rgba(255,255,255,.10); }
.meth-modal .meth-x:hover { color: #fff; border-color: #fff; background: rgba(11,18,32,.66); transform: rotate(90deg); }
.meth-modal .meth-x:focus-visible { outline-color: #fff; outline-offset: 2px; }
.meth-modal .idn-modal-grab { background: rgba(255,255,255,.72); }

/* head + lede */
.meth-modal .idn-modal-head { padding-top: 18px; }
.meth-lede { font-size: 13.5px; line-height: 1.55; color: var(--text-2); margin: 4px 0 16px; }
.meth-lede b { color: var(--text); font-weight: 700; }

/* dropzone */
.meth-drop { position: relative; display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: 7px; padding: clamp(20px, 4.5vw, 30px) 18px; border-radius: var(--r-md); cursor: pointer; overflow: hidden;
  border: 1.5px dashed color-mix(in srgb, var(--violet) 42%, var(--border));
  background: color-mix(in srgb, var(--violet) 6%, var(--surface-2));
  transition: border-color .25s, background .25s, transform .25s var(--ease-out), box-shadow .25s; }
.meth-drop[hidden] { display: none; }
.meth-drop > * { position: relative; z-index: 1; }
.meth-drop:hover { border-color: color-mix(in srgb, var(--violet) 66%, var(--border));
  background: color-mix(in srgb, var(--violet) 10%, var(--surface-2)); }
.meth-drop:focus-visible { outline: 2px solid var(--violet); outline-offset: 3px; }
.meth-drop.drag { border-color: var(--violet); border-style: solid; transform: scale(1.012);
  background: color-mix(in srgb, var(--violet) 14%, var(--surface-2));
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--violet) 16%, transparent),
              0 20px 44px -22px color-mix(in srgb, var(--violet) 72%, transparent); }
.meth-drop-glow { position: absolute; z-index: 0; top: -34%; left: 50%; transform: translateX(-50%);
  width: 62%; height: 84%; pointer-events: none; opacity: .55; filter: blur(20px); transition: opacity .3s;
  background: radial-gradient(circle, color-mix(in srgb, var(--violet) 42%, transparent), transparent 70%); }
.meth-drop:hover .meth-drop-glow, .meth-drop.drag .meth-drop-glow { opacity: 1; }
.meth-drop-ring { position: absolute; z-index: 0; top: -32%; left: 50%; width: 116px; height: 116px;
  transform: translateX(-50%); border-radius: 50%; pointer-events: none; opacity: 0;
  border: 1.5px dashed color-mix(in srgb, var(--violet) 55%, transparent); transition: opacity .3s; }
.meth-drop.drag .meth-drop-ring { opacity: .8; animation: methRing 9s linear infinite; }
@keyframes methRing { to { transform: translateX(-50%) rotate(360deg); } }
.meth-drop-ic { width: 56px; height: 56px; display: grid; place-items: center; border-radius: 17px; color: #fff;
  margin-bottom: 4px; background: linear-gradient(135deg, var(--violet), var(--blue-2));
  box-shadow: 0 14px 28px -12px color-mix(in srgb, var(--violet) 75%, transparent), inset 0 1px 0 rgba(255,255,255,.3);
  animation: methBob 5s var(--ease-out) infinite; }
.meth-drop-ic svg { width: 26px; height: 26px; }
@keyframes methBob { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
.meth-drop.drag .meth-drop-ic { transform: translateY(-3px) scale(1.05); animation-play-state: paused; }
.meth-drop-title { font-family: var(--font-display); font-weight: 650; font-size: 15px; color: var(--text); }
.meth-drop-or { display: inline-flex; align-items: center; gap: 9px; font-size: 10.5px; font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.meth-drop-or i { width: 26px; height: 1px; background: var(--border); }
.meth-drop-btn { display: inline-flex; align-items: center; gap: 7px; padding: 8px 16px; border-radius: 999px;
  font-size: 12.5px; font-weight: 700; color: var(--violet); background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--violet) 45%, var(--border));
  transition: color .2s, border-color .2s, background .2s, transform .2s; }
.meth-drop-btn svg { width: 14px; height: 14px; }
.meth-drop:hover .meth-drop-btn { background: color-mix(in srgb, var(--violet) 12%, var(--surface)); border-color: var(--violet); }
.meth-drop-hint { font-size: 11.5px; color: var(--muted-2); margin-top: 3px; }

/* selected-file card */
.meth-file { display: flex; align-items: center; gap: 12px; padding: 12px 12px 12px 14px; border-radius: var(--r-md);
  border: 1px solid color-mix(in srgb, var(--violet) 30%, var(--border));
  background: color-mix(in srgb, var(--violet) 7%, var(--surface-2)); }
.meth-file[hidden] { display: none; }
.meth-file.in { animation: methCardIn .35s var(--ease-out); }
@keyframes methCardIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.meth-file-ic { width: 42px; height: 42px; flex: none; display: grid; place-items: center; border-radius: 11px; color: #fff;
  background: linear-gradient(135deg, var(--violet), var(--blue-2));
  box-shadow: 0 8px 20px -10px color-mix(in srgb, var(--violet) 70%, transparent); }
.meth-file-ic svg { width: 20px; height: 20px; }
.meth-file-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.meth-file-tx b { font-size: 13.5px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.meth-file-tx small { font-size: 11.5px; color: var(--muted); margin-top: 2px; letter-spacing: .02em; }
.meth-file-ok { flex: none; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 50%; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2)); box-shadow: 0 0 0 4px color-mix(in srgb, var(--teal) 12%, transparent); }
.meth-file-ok svg { width: 15px; height: 15px; }
.meth-file-x { flex: none; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; cursor: pointer;
  color: var(--muted); border: 1px solid var(--border); background: var(--fill-1);
  transition: color .18s, border-color .18s, background .18s, transform .18s var(--ease-spring); }
.meth-file-x svg { width: 13px; height: 13px; }
.meth-file-x:hover { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, var(--border));
  background: var(--danger-soft); transform: rotate(90deg); }
.meth-file-x:focus-visible { outline: 2px solid var(--violet); outline-offset: 2px; }

/* trust row */
.meth-trust { list-style: none; margin: 16px 0 2px; padding: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.meth-trust li { display: flex; align-items: center; gap: 9px; padding: 10px 11px; border-radius: var(--r-sm);
  background: var(--fill-1); border: 1px solid var(--border-soft); }
.meth-trust li svg { width: 17px; height: 17px; flex: none; color: var(--violet); }
.meth-trust li span { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.meth-trust li b { font-size: 12px; color: var(--text); }
.meth-trust li small { font-size: 10.5px; color: var(--muted); margin-top: 2px; }

/* footer + violet primary button */
.meth-foot { gap: 10px; }
.meth-go { position: relative; overflow: hidden; border: 0; color: #fff; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  font-family: var(--font-display); font-weight: 700;
  background: linear-gradient(125deg, color-mix(in srgb, var(--violet) 88%, #fff) 0%, var(--violet) 46%,
                                      color-mix(in srgb, var(--violet) 62%, var(--blue-2)) 100%);
  box-shadow: 0 12px 26px -12px color-mix(in srgb, var(--violet) 78%, transparent), inset 0 1px 0 rgba(255,255,255,.30);
  transition: transform .25s var(--ease-out), box-shadow .25s, filter .25s, opacity .25s; }
.meth-go svg { width: 16px; height: 16px; flex: none; }
.meth-go::after { content: ''; position: absolute; top: 0; bottom: 0; left: -60%; width: 42%; z-index: 0;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.40), transparent);
  transform: skewX(-18deg); animation: methSheen 4.6s var(--ease-out) infinite; }
.meth-go > * { position: relative; z-index: 1; }
@keyframes methSheen { 0% { left: -60%; } 42%, 100% { left: 140%; } }
.meth-go:not(:disabled):hover { transform: translateY(-2px); filter: saturate(1.06) brightness(1.03); }
.meth-go:not(:disabled):active { transform: scale(.985); }
.meth-go:focus-visible { outline: 2px solid var(--violet); outline-offset: 3px; }
.meth-go:disabled { opacity: .42; cursor: not-allowed; box-shadow: none; filter: grayscale(.25); }
.meth-go:disabled::after { display: none; }
.meth-go.busy { pointer-events: none; }
.meth-go.busy svg, .meth-go.busy span { opacity: 0; }
.meth-go.busy::after { display: none; }
.meth-go.busy::before { content: ''; position: absolute; left: 50%; top: 50%; width: 18px; height: 18px; z-index: 2;
  border-radius: 50%; border: 2.4px solid rgba(255,255,255,.4); border-top-color: #fff;
  transform: translate(-50%, -50%); animation: methSpin .7s linear infinite; }
@keyframes methSpin { to { transform: translate(-50%, -50%) rotate(360deg); } }
.meth-go.done { background: linear-gradient(135deg, var(--teal), var(--blue-2)); }
.meth-go.done::after { display: none; }

[data-theme="light"] .meth-drop { background: #f7f4ff; }
[data-theme="light"] .meth-file { background: #f7f4ff; }
[data-theme="light"] .meth-drop-btn { background: #fff; }

@media (max-width: 640px) {
  .meth-foot { flex-direction: column-reverse; }
  .meth-trust { gap: 8px; }
  .meth-trust li { flex-direction: column; text-align: center; gap: 5px; padding: 11px 7px; }
  .meth-trust li span { align-items: center; }
}
@media (prefers-reduced-motion: reduce) {
  .meth-hero-aura, .meth-hero-helix, .meth-hero-spark, .meth-drop-ic, .meth-drop-ring,
  .meth-go::after, .meth-go.busy::before, .meth-file.in { animation: none; }
}

/* ===========================================================================
   F132 · CONNECT-DNA CTA + GUIDE POPUP — shown when NEITHER the DNA nor the
   Methylation panel is connected. The engine CTA gets a teal/helix variant; the
   popup reuses the .idn-modal shell with a teal hero + a two-step "sign in →
   DNA Coach" guide anchored by a framed BackOffice screenshot (branded fallback
   if the asset isn't present). Tokenized · dual-theme · responsive · a11y. */
.ov-eng-cta-dna {
  background: linear-gradient(125deg,
    color-mix(in srgb, var(--teal) 88%, #ffffff) 0%,
    var(--teal) 44%,
    var(--blue-2) 100%);
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--teal) 72%, transparent),
              0 2px 6px -3px color-mix(in srgb, var(--teal) 52%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, .30);
}
.ov-eng-cta-dna:focus-visible { outline-color: var(--blue-2); }
@media (hover: hover) {
  .ov-eng-cta-dna:hover {
    box-shadow: 0 16px 30px -12px color-mix(in srgb, var(--teal) 80%, transparent),
                0 3px 8px -3px color-mix(in srgb, var(--teal) 58%, transparent),
                inset 0 1px 0 rgba(255, 255, 255, .34);
  }
}

.dnac-modal { width: min(540px, 100%); }

/* teal branded hero — animated banner with a floating helix + sparks */
.dnac-hero { position: relative; height: clamp(112px, 22vw, 138px); flex: none; overflow: hidden;
  background: linear-gradient(125deg, color-mix(in srgb, var(--teal) 88%, #fff) 0%, var(--teal) 44%, var(--blue-2) 100%); }
.dnac-hero::after { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, transparent 52%, color-mix(in srgb, var(--bg) 32%, transparent)); }
.dnac-hero-grid { position: absolute; inset: 0; opacity: .5; pointer-events: none;
  background-image: linear-gradient(rgba(255,255,255,.10) 1px, transparent 1px),
                    linear-gradient(90deg, rgba(255,255,255,.10) 1px, transparent 1px);
  background-size: 26px 26px;
  -webkit-mask-image: radial-gradient(120% 92% at 72% 0%, #000 32%, transparent 76%);
          mask-image: radial-gradient(120% 92% at 72% 0%, #000 32%, transparent 76%); }
.dnac-hero-aura { position: absolute; left: 50%; top: 50%; width: 300px; height: 300px;
  transform: translate(-50%, -50%); pointer-events: none;
  background: radial-gradient(circle, rgba(255,255,255,.32), transparent 60%); filter: blur(14px);
  animation: methAura 5s var(--ease-out) infinite; }
.dnac-hero-helix { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); color: #fff;
  filter: drop-shadow(0 10px 20px rgba(0,0,0,.28)); animation: methHeroFloat 6s var(--ease-out) infinite; }
.dnac-hero-helix svg { width: clamp(48px, 13vw, 62px); height: auto; }
.dnac-hero-spark { position: absolute; width: 6px; height: 6px; border-radius: 50%; background: #fff;
  box-shadow: 0 0 10px rgba(255,255,255,.85); }
.dnac-hero-spark.s1 { left: 23%; top: 36%; animation: methTwinkle 2.6s ease-in-out infinite; }
.dnac-hero-spark.s2 { right: 25%; top: 30%; width: 4px; height: 4px; animation: methTwinkle 3.1s ease-in-out .4s infinite; }
.dnac-hero-spark.s3 { left: 33%; bottom: 26%; width: 5px; height: 5px; animation: methTwinkle 2.2s ease-in-out .8s infinite; }

/* close X sits ON the colored hero → high-contrast glass disc */
.dnac-modal .dnac-x { color: #fff; border-color: rgba(255,255,255,.6); background: rgba(11,18,32,.46);
  -webkit-backdrop-filter: blur(8px) saturate(140%); backdrop-filter: blur(8px) saturate(140%);
  box-shadow: 0 4px 16px -2px rgba(0,0,0,.45), inset 0 0 0 1px rgba(255,255,255,.10); }
.dnac-modal .dnac-x:hover { color: #fff; border-color: #fff; background: rgba(11,18,32,.66); transform: rotate(90deg); }
.dnac-modal .dnac-x:focus-visible { outline-color: #fff; outline-offset: 2px; }
.dnac-modal .idn-modal-grab { background: rgba(255,255,255,.72); }

/* head + lede */
.dnac-modal .idn-modal-head { padding-top: 18px; }
.dnac-lede { font-size: 13.5px; line-height: 1.55; color: var(--text-2); margin: 4px 0 16px; }
.dnac-lede b { color: var(--text); font-weight: 700; }

/* the two-step ladder */
.dnac-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.dnac-step { position: relative; display: flex; gap: 13px; padding: 14px 15px; border-radius: var(--r-md);
  background: color-mix(in srgb, var(--teal) 6%, var(--surface-2));
  border: 1px solid color-mix(in srgb, var(--teal) 22%, var(--border)); }
.dnac-step-n { flex: none; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%;
  font-family: var(--font-display); font-weight: 800; font-size: 14px; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 8px 18px -8px color-mix(in srgb, var(--teal) 70%, transparent), inset 0 1px 0 rgba(255,255,255,.3); }
.dnac-step-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.dnac-step-tx > b { font-family: var(--font-display); font-weight: 700; font-size: 14.5px; color: var(--text); line-height: 1.25; }
.dnac-step-tx > small { font-size: 12px; color: var(--text-2); line-height: 1.45; }
.dnac-step-tx b b { font-weight: 800; color: var(--text); }
.dnac-hl { display: inline-block; padding: 0 6px; border-radius: 6px; font-weight: 800; color: var(--blue-2);
  background: color-mix(in srgb, var(--teal) 16%, transparent); }

/* the framed BackOffice screenshot */
.dnac-shot { position: relative; margin: 9px 0 2px; border-radius: var(--r-md); overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--teal) 30%, var(--border));
  background: color-mix(in srgb, var(--teal) 8%, var(--surface));
  box-shadow: 0 14px 34px -18px color-mix(in srgb, var(--teal) 60%, transparent); }
.dnac-shot-img { display: block; width: 100%; height: auto; }
.dnac-shot.no-img .dnac-shot-img { display: none; }
.dnac-shot-fallback { display: none; align-items: center; justify-content: center; gap: 10px;
  min-height: 118px; padding: 20px; text-align: center; font-size: 12.5px; color: var(--muted);
  background: repeating-linear-gradient(45deg,
    color-mix(in srgb, var(--teal) 5%, var(--surface)) 0 12px,
    color-mix(in srgb, var(--teal) 9%, var(--surface)) 12px 24px); }
.dnac-shot.no-img .dnac-shot-fallback { display: flex; }
.dnac-shot-fallback svg { width: 22px; height: 22px; flex: none; color: var(--teal); }
.dnac-shot-fallback b { color: var(--text); font-weight: 700; }
.dnac-shot-tag { position: absolute; left: 10px; bottom: 10px; z-index: 1; display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px 5px 9px; border-radius: 999px; font-size: 10.5px; font-weight: 800; letter-spacing: .03em; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 8px 20px -8px color-mix(in srgb, var(--teal) 75%, transparent), inset 0 1px 0 rgba(255,255,255,.28); }
.dnac-shot-tag svg { width: 13px; height: 13px; flex: none; }
.dnac-shot.no-img .dnac-shot-tag { display: none; }

/* trust row (reuses .meth-trust grid) — recolor the icons teal */
.dnac-trust li svg { color: var(--teal); }

/* F404 · in-app DNA upload — the .meth-* upload chrome, recolored TEAL inside
   the dnac sheet (dropzone, browse pill, file card, busy spinner). */
.dnac-modal .meth-drop { border-color: color-mix(in srgb, var(--teal) 42%, var(--border));
  background: color-mix(in srgb, var(--teal) 6%, var(--surface-2)); }
.dnac-modal .meth-drop:hover { border-color: color-mix(in srgb, var(--teal) 66%, var(--border));
  background: color-mix(in srgb, var(--teal) 10%, var(--surface-2)); }
.dnac-modal .meth-drop:focus-visible { outline-color: var(--teal); }
.dnac-modal .meth-drop.drag { border-color: var(--teal);
  background: color-mix(in srgb, var(--teal) 14%, var(--surface-2));
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--teal) 16%, transparent),
              0 20px 44px -22px color-mix(in srgb, var(--teal) 72%, transparent); }
.dnac-modal .meth-drop-glow { background: radial-gradient(circle, color-mix(in srgb, var(--teal) 42%, transparent), transparent 70%); }
.dnac-modal .meth-drop-ring { border-color: color-mix(in srgb, var(--teal) 55%, transparent); }
.dnac-modal .meth-drop-ic { background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 14px 28px -12px color-mix(in srgb, var(--teal) 75%, transparent), inset 0 1px 0 rgba(255,255,255,.3); }
.dnac-modal .meth-drop-btn { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 45%, var(--border)); }
.dnac-modal .meth-drop:hover .meth-drop-btn { background: color-mix(in srgb, var(--teal) 12%, var(--surface)); border-color: var(--teal); }
.dnac-modal .meth-file { border-color: color-mix(in srgb, var(--teal) 30%, var(--border));
  background: color-mix(in srgb, var(--teal) 7%, var(--surface-2)); }
.dnac-modal .meth-file-ic { background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 8px 20px -10px color-mix(in srgb, var(--teal) 70%, transparent); }
.dnac-modal .meth-file-x:focus-visible { outline-color: var(--teal); }
[data-theme="light"] .dnac-modal .meth-drop,
[data-theme="light"] .dnac-modal .meth-file { background: #f2fbfd; }

/* status line — live upload feedback under the file card */
.dnac-status { display: flex; align-items: flex-start; gap: 9px; margin: 0; padding: 11px 13px;
  border-radius: var(--r-md); font-size: 13px; line-height: 1.45; color: var(--text);
  border: 1px solid color-mix(in srgb, var(--teal) 30%, var(--border));
  background: color-mix(in srgb, var(--teal) 7%, var(--surface-2));
  animation: methCardIn .3s var(--ease-out); }
.dnac-status[hidden] { display: none; }
.dnac-status svg { width: 16px; height: 16px; flex: none; margin-top: 1px; color: var(--teal);
  animation: dnacStatusSpin 2.4s linear infinite; }
.dnac-status.ok svg, .dnac-status.err svg { animation: none; }
.dnac-status.ok { border-color: color-mix(in srgb, var(--success, var(--teal)) 40%, var(--border));
  background: color-mix(in srgb, var(--success, var(--teal)) 9%, var(--surface-2)); }
.dnac-status.ok svg { color: var(--success, var(--teal)); }
.dnac-status.err { border-color: color-mix(in srgb, var(--danger) 40%, var(--border));
  background: color-mix(in srgb, var(--danger) 8%, var(--surface-2)); }
.dnac-status.err svg { color: var(--danger); }
@keyframes dnacStatusSpin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .dnac-status svg, .dnac-status { animation: none; } }

/* footer primary — teal/helix (rides the .meth-go chrome: sheen, busy spinner,
   disabled + done states; only the gradient/glow re-tone to teal) */
.dnac-go { background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--teal) 72%, transparent), inset 0 1px 0 rgba(255,255,255,.30); }
.dnac-go:focus-visible { outline: 2px solid var(--blue-2); outline-offset: 3px; }

/* ── F409 · UPDATE-SUBSCRIPTION CONFIRMATION SHEET ───────────────────────────
   The premium before/after change review for an active subscriber. */
/* Above .future-view (z 1200) — the à-la-carte / manage-regimen sheets can be
   the opener, and the confirmation must land ON TOP of them, never behind. */
.suc-backdrop { z-index: 1300; }
/* height:auto — the ≤1024px bottom-sheet rule stretches .idn-modal to 96dvh;
   this sheet hugs its content instead (same pattern as .pcre-modal). Wider
   (620px) so the price reveal + change rows breathe like a full statement. */
.idn-modal.suc-modal { max-width: 620px; width: min(620px, calc(100vw - 24px));
  height: auto; max-height: min(94dvh, 900px); overflow: hidden; }
.suc-modal .idn-modal-body { flex: 0 1 auto; }
/* cinematic hero band — grid + aura + drifting pill, mirrors the dnac hero */
.suc-hero { position: absolute; inset: 0 0 auto 0; height: 118px; pointer-events: none; overflow: hidden;
  -webkit-mask: linear-gradient(#000 55%, transparent); mask: linear-gradient(#000 55%, transparent); }
.suc-hero-grid { position: absolute; inset: 0;
  background-image: linear-gradient(color-mix(in srgb, var(--teal) 9%, transparent) 1px, transparent 1px),
    linear-gradient(90deg, color-mix(in srgb, var(--teal) 9%, transparent) 1px, transparent 1px);
  background-size: 26px 26px;
  -webkit-mask: radial-gradient(120% 100% at 50% 0%, #000 30%, transparent 78%);
  mask: radial-gradient(120% 100% at 50% 0%, #000 30%, transparent 78%); }
.suc-hero-aura { position: absolute; top: -70%; left: 50%; transform: translateX(-50%);
  width: 78%; height: 150%; border-radius: 50%; filter: blur(26px); opacity: .5;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 38%, transparent), transparent 68%);
  animation: sucAura 7s var(--ease-out) infinite; }
@keyframes sucAura { 0%,100% { opacity: .38; } 50% { opacity: .62; } }
.suc-hero-orbit { position: absolute; top: -54px; left: 50%; width: 168px; height: 168px;
  transform: translateX(-50%); }
.suc-hero-orbit i { position: absolute; inset: 0; border-radius: 50%;
  border: 1px dashed color-mix(in srgb, var(--teal) 34%, transparent);
  animation: sucOrbit 26s linear infinite; }
.suc-hero-orbit i:last-child { inset: -26px; opacity: .55; animation-duration: 40s; animation-direction: reverse; }
@keyframes sucOrbit { to { transform: rotate(360deg); } }
.suc-hero-pill { position: absolute; top: 38px; right: 84px; width: 34px; height: 34px;
  display: grid; place-items: center; border-radius: 11px; color: var(--teal); opacity: .9;
  background: color-mix(in srgb, var(--teal) 12%, var(--surface-2));
  border: 1px solid color-mix(in srgb, var(--teal) 35%, var(--border));
  box-shadow: 0 10px 24px -10px color-mix(in srgb, var(--teal) 60%, transparent);
  animation: sucPillBob 5.5s var(--ease-out) infinite; }
.suc-hero-pill svg { width: 17px; height: 17px; }
@keyframes sucPillBob { 0%,100% { transform: translateY(0) rotate(-4deg); } 50% { transform: translateY(-6px) rotate(4deg); } }
.suc-modal .idn-modal-head, .suc-modal .idn-modal-body, .suc-modal .idn-modal-foot { position: relative; z-index: 1; }
.suc-ico { color: var(--teal);
  background: color-mix(in srgb, var(--teal) 12%, transparent);
  border-color: color-mix(in srgb, var(--teal) 35%, var(--border)); }
.suc-tag { color: var(--teal); }
.suc-body { display: flex; flex-direction: column; gap: 15px; }
.suc-lede { font-size: 13px; line-height: 1.55; color: var(--muted); margin: 0; }
.suc-lede b { color: var(--text); font-weight: 650; }

/* old → new price reveal — the emotional center of the sheet */
.suc-price { display: flex; align-items: stretch; gap: 0; }
.suc-price-col { flex: 1; position: relative; display: flex; flex-direction: column; gap: 3px;
  padding: 16px 16px 14px; border-radius: 16px; border: 1px solid var(--border);
  background: color-mix(in srgb, var(--surface-2) 66%, transparent);
  animation: sucRise .45s var(--ease-out) both; }
.suc-price-col small { font-size: 10px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--muted-2); }
.suc-price-col b { font-family: var(--font-display); font-weight: 750; font-size: 27px;
  letter-spacing: -0.02em; color: var(--muted); line-height: 1.15; }
.suc-price-col span { font-size: 11px; color: var(--muted-2); }
.suc-price-col.is-new { animation-delay: .08s;
  border-color: color-mix(in srgb, var(--teal) 55%, var(--border));
  background:
    radial-gradient(130% 110% at 85% -10%, color-mix(in srgb, var(--teal) 16%, transparent), transparent 60%),
    color-mix(in srgb, var(--teal) 6%, var(--surface-2));
  box-shadow: 0 14px 34px -16px color-mix(in srgb, var(--teal) 55%, transparent),
              inset 0 1px 0 color-mix(in srgb, #ffffff 8%, transparent); }
.suc-price-col.is-new small { color: var(--teal); }
.suc-price-col.is-new b { color: var(--text);
  background: linear-gradient(120deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.suc-price-col.is-new span { color: var(--muted); }
/* monthly delta chip — pinned to the new card's corner */
.suc-delta { position: absolute; top: -9px; right: 12px; font-style: normal; font-size: 10.5px;
  font-weight: 800; letter-spacing: .02em; padding: 3px 9px; border-radius: 999px; color: #fff;
  animation: sucDeltaPop .4s var(--ease-out) .25s both; }
.suc-delta.up { background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 6px 14px -5px color-mix(in srgb, var(--teal) 75%, transparent); }
.suc-delta.down { background: linear-gradient(135deg, var(--success, #22c55e), var(--teal));
  box-shadow: 0 6px 14px -5px color-mix(in srgb, var(--success, #22c55e) 70%, transparent); }
@keyframes sucDeltaPop { from { opacity: 0; transform: translateY(4px) scale(.8); } to { opacity: 1; transform: none; } }
/* connector — beam + floating arrow bridging the two cards */
.suc-price-arrow { align-self: center; flex: none; position: relative; z-index: 1; width: 34px; height: 34px;
  margin: 0 -8px; display: grid; place-items: center; border-radius: 50%; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  border: 2.5px solid var(--surface);
  box-shadow: 0 8px 20px -6px color-mix(in srgb, var(--teal) 80%, transparent);
  animation: sucRise .45s var(--ease-out) .04s both; }
.suc-price-arrow svg { width: 15px; height: 15px; }
.suc-arrow-beam { position: absolute; left: 50%; top: 50%; width: 68px; height: 2px; z-index: -1;
  transform: translate(-50%, -50%);
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--teal) 55%, transparent), transparent); }
@keyframes sucRise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* the changes card — label + staggered rows */
.suc-changes { display: flex; flex-direction: column; gap: 8px; padding: 13px 14px 12px;
  border-radius: 16px; border: 1px solid var(--border);
  background: color-mix(in srgb, var(--surface-2) 50%, transparent); }
.suc-changes-lbl { font-size: 10px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--muted-2); }
.suc-lines { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px;
  max-height: 196px; overflow-y: auto; overscroll-behavior: contain; }
.suc-line { display: flex; align-items: center; gap: 10px; padding: 8px 11px 8px 8px; border-radius: 12px;
  font-size: 13px; border: 1px solid transparent;
  animation: sucRise .38s var(--ease-out) calc(.14s + var(--suc-i, 0) * .05s) both; }
.suc-line-ic { flex: none; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 9px; }
.suc-line-ic svg { width: 13px; height: 13px; }
.suc-line-tx { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: 5px; }
.suc-line-tx b { color: var(--text); font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.suc-line em { flex: none; display: inline-flex; align-items: center; gap: 4px; font-style: normal;
  font-size: 10.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase;
  padding: 3px 8px; border-radius: 999px; }
.suc-line em svg { width: 10px; height: 10px; }
.suc-line em s { text-decoration: line-through; opacity: .65; font-weight: 700; }
.suc-line .suc-qty { font-style: normal; font-weight: 750; font-size: 11.5px; color: var(--teal); }
.suc-line.add { background: color-mix(in srgb, var(--teal) 6%, transparent); }
.suc-line.add .suc-line-ic { color: var(--teal); background: color-mix(in srgb, var(--teal) 14%, transparent); }
.suc-line.add em { color: var(--teal); background: color-mix(in srgb, var(--teal) 13%, transparent); }
.suc-line.qty { background: color-mix(in srgb, var(--blue-2) 6%, transparent); }
.suc-line.qty .suc-line-ic { color: var(--blue-2); background: color-mix(in srgb, var(--blue-2) 14%, transparent); }
.suc-line.qty em { color: var(--blue-2); background: color-mix(in srgb, var(--blue-2) 13%, transparent); }
.suc-line.rm { background: color-mix(in srgb, var(--danger) 5%, transparent); }
.suc-line.rm .suc-line-ic { color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); }
.suc-line.rm .suc-line-tx b { color: var(--muted); text-decoration: line-through;
  text-decoration-color: color-mix(in srgb, var(--danger) 65%, transparent); }
.suc-line.rm em { color: var(--danger); background: color-mix(in srgb, var(--danger) 11%, transparent); }
.suc-kept { display: flex; align-items: center; gap: 7px; margin: 2px 0 0; font-size: 11.5px; color: var(--muted); }
.suc-kept svg { width: 12px; height: 12px; flex: none; color: var(--success, var(--teal)); }
.suc-nochange { margin: 0; font-size: 13px; color: var(--muted); }

/* guarantees strip */
.suc-facts { list-style: none; margin: 0; padding: 13px 2px 0; display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 10px; border-top: 1px solid var(--border); }
.suc-facts li { display: flex; align-items: center; gap: 9px; min-width: 0; }
.suc-facts svg { width: 16px; height: 16px; flex: none; color: var(--teal); }
.suc-facts span { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.suc-facts b { font-size: 11.5px; color: var(--text); font-weight: 650; }
.suc-facts small { font-size: 10.5px; color: var(--muted); }
.suc-foot { gap: 10px; }
.suc-keep { white-space: nowrap; }

[data-theme="light"] .suc-price-col { background: #f6f9fc; }
[data-theme="light"] .suc-price-col.is-new { background:
  radial-gradient(130% 110% at 85% -10%, color-mix(in srgb, var(--teal) 13%, transparent), transparent 60%), #f0fbf9; }
[data-theme="light"] .suc-price-arrow { border-color: #fff; }
[data-theme="light"] .suc-changes { background: #f6f9fc; }
[data-theme="light"] .suc-hero-pill { background: #eafaf7; }
@media (max-width: 640px) {
  .suc-foot { flex-direction: column-reverse; }
  .suc-foot .btn { width: 100%; }
  .suc-facts { grid-template-columns: 1fr; gap: 9px; }
  .suc-price-col b { font-size: 23px; }
}
@media (prefers-reduced-motion: reduce) {
  .suc-hero-aura, .suc-hero-orbit i, .suc-hero-pill, .suc-price-col, .suc-price-arrow,
  .suc-line, .suc-delta { animation: none; }
}

/* ── F409 · UPDATE THEATER — full-screen "rebuilding your plan" act (z 1400) */
.suc-theater { position: fixed; inset: 0; z-index: 1400; display: grid; place-items: center;
  opacity: 0; pointer-events: none; transition: opacity .38s var(--ease-out);
  background:
    radial-gradient(90% 70% at 50% 38%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 70%),
    color-mix(in srgb, var(--bg, #060b18) 90%, transparent);
  -webkit-backdrop-filter: blur(22px) saturate(130%); backdrop-filter: blur(22px) saturate(130%); }
.suc-theater.show { opacity: 1; pointer-events: auto; }
.suc-theater.leave { opacity: 0; pointer-events: none; }
/* cart-bound acts sit ABOVE the storefront slideout (z 100002) — the cart
   opens underneath and is revealed only when the theater lifts */
.suc-theater.over-cart { z-index: 100003; }
.suc-th-stage { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center;
  padding: 0 24px; animation: sucThIn .5s var(--ease-out) both; }
@keyframes sucThIn { from { opacity: 0; transform: translateY(14px) scale(.96); } to { opacity: 1; transform: none; } }
/* the core — pulsing heart + expanding rings + orbiting product glyphs */
.suc-th-core { position: relative; width: 168px; height: 168px; margin-bottom: 18px; }
.suc-th-ring { position: absolute; inset: 0; border-radius: 50%;
  border: 1.5px solid color-mix(in srgb, var(--teal) 45%, transparent);
  animation: sucThRing 2.6s var(--ease-out) infinite; }
.suc-th-ring.r2 { animation-delay: .85s; }
.suc-th-ring.r3 { animation-delay: 1.7s; }
@keyframes sucThRing { 0% { transform: scale(.42); opacity: 0; } 28% { opacity: .85; } 100% { transform: scale(1.14); opacity: 0; } }
.suc-th-heart { position: absolute; inset: 50px; display: grid; place-items: center; border-radius: 50%;
  color: #fff; background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 18px 46px -14px color-mix(in srgb, var(--teal) 85%, transparent),
              inset 0 1.5px 0 rgba(255,255,255,.35);
  animation: sucThPulse 1.8s var(--ease-out) infinite; transition: transform .4s var(--ease-out), opacity .3s; }
.suc-th-heart svg { width: 30px; height: 30px; animation: sucThSpin 2.6s linear infinite; }
@keyframes sucThPulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.07); } }
@keyframes sucThSpin { to { transform: rotate(360deg); } }
/* orbiting product glyphs — the plan literally reassembling around the core */
.suc-th-orb { position: absolute; top: 50%; left: 50%; width: 38px; height: 38px; margin: -19px 0 0 -19px;
  display: grid; place-items: center; border-radius: 13px; color: var(--teal);
  background: color-mix(in srgb, var(--teal) 11%, var(--surface-2));
  border: 1px solid color-mix(in srgb, var(--teal) 38%, var(--border));
  box-shadow: 0 10px 26px -10px color-mix(in srgb, var(--teal) 65%, transparent);
  animation: sucThOrbit 4.4s linear infinite; }
.suc-th-orb svg { width: 17px; height: 17px; animation: sucThCounter 4.4s linear infinite; }
.suc-th-orb.o2 { animation-delay: -1.466s; } .suc-th-orb.o2 svg { animation-delay: -1.466s; }
.suc-th-orb.o3 { animation-delay: -2.933s; } .suc-th-orb.o3 svg { animation-delay: -2.933s; }
@keyframes sucThOrbit { from { transform: rotate(0) translateX(84px) rotate(0); } to { transform: rotate(360deg) translateX(84px) rotate(-360deg); } }
@keyframes sucThCounter { from { transform: rotate(0); } to { transform: rotate(0); } }
/* success bloom — the heart yields to the ✓ */
.suc-th-check { position: absolute; inset: 50px; display: grid; place-items: center; border-radius: 50%;
  color: #fff; opacity: 0; transform: scale(.4);
  background: linear-gradient(135deg, var(--success, #22c55e), var(--teal));
  box-shadow: 0 18px 46px -14px color-mix(in srgb, var(--success, #22c55e) 80%, transparent);
  transition: opacity .35s var(--ease-out) .1s, transform .45s var(--ease-out) .1s; }
.suc-th-check svg { width: 32px; height: 32px; }
.suc-theater.done .suc-th-heart { transform: scale(.4); opacity: 0; animation: none; }
.suc-theater.done .suc-th-check { opacity: 1; transform: scale(1); }
.suc-theater.done .suc-th-orb { animation-play-state: paused; opacity: 0; transition: opacity .4s; }
.suc-theater.done .suc-th-ring { border-color: color-mix(in srgb, var(--success, #22c55e) 50%, transparent); }
.suc-th-title { font-family: var(--font-display); font-weight: 750; font-size: clamp(19px, 2.6vw, 24px);
  letter-spacing: -0.015em; color: var(--text); }
.suc-th-step { font-size: 13px; color: var(--muted); min-height: 20px; }
[data-theme="light"] .suc-theater { background:
  radial-gradient(90% 70% at 50% 38%, color-mix(in srgb, var(--teal) 10%, transparent), transparent 70%),
  rgba(244, 249, 252, .88); }
@media (prefers-reduced-motion: reduce) {
  .suc-th-ring, .suc-th-heart, .suc-th-heart svg, .suc-th-orb, .suc-th-orb svg, .suc-th-stage { animation: none; }
  .suc-th-orb { display: none; }
}

[data-theme="light"] .dnac-step { background: #f2fbfd; }
[data-theme="light"] .dnac-shot { background: #f2fbfd; }

@media (max-width: 640px) {
  .dnac-foot { flex-direction: column-reverse; }
}
@media (prefers-reduced-motion: reduce) {
  .dnac-hero-aura, .dnac-hero-helix, .dnac-hero-spark { animation: none; }
}

/* ── F415 · DNA SEQUENCING THEATER — the $70B processing chamber ────────────
   Replaces the drop zone + trust rows while the report is parsing. Pulsing
   helix core inside counter-rotating precision rings, orbiting nodes, a
   sweeping scan beam, rising data motes, live gradient progress. All
   transform/opacity-only; tokenized dual-theme; reduced-motion collapses to a
   calm static core + bar. */
.dnac-processing > .meth-drop, .dnac-processing > .meth-file,
.dnac-processing > .dnac-trust, .dnac-processing > .dnac-lede,
.dnac-processing > .dnac-meth, .dnac-processing > .dnac-status { display: none; }
.dnac-foot.dnac-foot-hidden { display: none; }
.dnac-theater { display: flex; flex-direction: column; align-items: center; gap: 16px;
  padding: 18px 10px 8px; animation: methCardIn .4s var(--ease-out); }
.dnac-th-stage { position: relative; width: clamp(150px, 38vw, 190px); height: clamp(150px, 38vw, 190px); flex: none; }
.dnac-th-aura { position: absolute; inset: 8%; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 26%, transparent), color-mix(in srgb, var(--blue-2) 10%, transparent) 55%, transparent 72%);
  animation: dnacThBreath 3.2s var(--ease-lux, ease-in-out) infinite; }
.dnac-th-ring { position: absolute; inset: 0; border-radius: 50%; }
.dnac-th-ring.r1 { border: 1.5px dashed color-mix(in srgb, var(--teal) 45%, transparent);
  animation: dnacThSpin 9s linear infinite; }
.dnac-th-ring.r2 { inset: 11%; border: 1px solid color-mix(in srgb, var(--blue-2) 38%, transparent);
  border-top-color: var(--teal); animation: dnacThSpin 5.5s linear infinite reverse; }
.dnac-th-orbit { position: absolute; inset: 0; animation: dnacThSpin 7s linear infinite; }
.dnac-th-orbit i { position: absolute; width: 7px; height: 7px; border-radius: 50%;
  background: var(--teal); box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 80%, transparent); }
.dnac-th-orbit i:nth-child(1) { left: 50%; top: -3px; margin-left: -3.5px; }
.dnac-th-orbit i:nth-child(2) { left: 8%; bottom: 16%; background: var(--blue-2);
  box-shadow: 0 0 10px color-mix(in srgb, var(--blue-2) 80%, transparent); width: 5px; height: 5px; }
.dnac-th-orbit i:nth-child(3) { right: 6%; bottom: 26%; background: var(--violet, var(--blue-2)); width: 5px; height: 5px;
  box-shadow: 0 0 10px color-mix(in srgb, var(--violet, var(--blue-2)) 80%, transparent); }
.dnac-th-helix { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  color: var(--teal); animation: dnacThPulse 2.2s var(--ease-lux, ease-in-out) infinite;
  filter: drop-shadow(0 0 18px color-mix(in srgb, var(--teal) 65%, transparent)); }
.dnac-th-helix svg { width: clamp(52px, 13vw, 66px); height: auto; }
.dnac-th-scan { position: absolute; left: 14%; right: 14%; top: 18%; height: 3px; border-radius: 99px;
  background: linear-gradient(90deg, transparent, var(--teal), transparent);
  opacity: .85; animation: dnacThScan 2.8s var(--ease-lux, ease-in-out) infinite; }
.dnac-th-mote { position: absolute; left: calc(12% + (var(--i) * 6.5%)); bottom: 8%;
  width: 3px; height: 3px; border-radius: 50%; background: var(--teal); opacity: 0;
  animation: dnacThMote 3.6s linear infinite; animation-delay: calc(var(--i) * -0.3s); }
.dnac-th-mote:nth-child(even) { background: var(--blue-2); width: 2.5px; height: 2.5px; }
.dnac-th-copy { display: flex; flex-direction: column; align-items: center; gap: 5px; text-align: center; }
.dnac-th-title { font-family: var(--font-display); font-size: 17px; font-weight: 750; letter-spacing: -.01em; color: var(--text); }
.dnac-th-line { font-size: 13px; color: var(--text-2); min-height: 19px; animation: methCardIn .35s var(--ease-out); }
.dnac-th-bar { position: relative; width: min(340px, 82%); height: 7px; border-radius: 99px;
  background: var(--fill-2); border: 1px solid var(--border); overflow: visible; }
.dnac-th-bar i { position: absolute; inset: 0; border-radius: 99px; transform: scaleX(0); transform-origin: left center;
  background: linear-gradient(90deg, var(--teal), var(--blue-2), var(--violet, var(--blue-2)));
  transition: transform .35s var(--ease-out);
  box-shadow: 0 0 12px color-mix(in srgb, var(--teal) 45%, transparent); }
.dnac-th-pct { position: absolute; right: -4px; top: -24px; font-size: 11.5px; font-weight: 750;
  font-family: var(--font-display); color: var(--teal); letter-spacing: .03em; }
.dnac-th-note { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--muted); }
.dnac-th-note svg { width: 12px; height: 12px; flex: none; }
/* resolved state — chamber settles, helix becomes the check */
.dnac-theater.done .dnac-th-ring, .dnac-theater.done .dnac-th-orbit { animation-play-state: paused; opacity: .45; }
.dnac-theater.done .dnac-th-scan, .dnac-theater.done .dnac-th-mote { display: none; }
.dnac-theater.done .dnac-th-helix { animation: none; color: var(--success, var(--teal)); }
.dnac-theater.done .dnac-th-aura { animation: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--success, var(--teal)) 24%, transparent), transparent 70%); }
.dnac-theater.done .dnac-th-title { color: var(--success, var(--teal)); }
@keyframes dnacThSpin { to { transform: rotate(360deg); } }
@keyframes dnacThBreath { 0%, 100% { transform: scale(.94); opacity: .8; } 50% { transform: scale(1.05); opacity: 1; } }
@keyframes dnacThPulse { 0%, 100% { transform: translate(-50%, -50%) scale(1); } 50% { transform: translate(-50%, -50%) scale(1.07); } }
@keyframes dnacThScan { 0%, 100% { transform: translateY(0); opacity: .25; } 50% { transform: translateY(105px); opacity: .9; } }
@keyframes dnacThMote { 0% { transform: translateY(0); opacity: 0; } 12% { opacity: .9; } 85% { opacity: .5; } 100% { transform: translateY(-118px); opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
  .dnac-th-aura, .dnac-th-ring, .dnac-th-orbit, .dnac-th-helix, .dnac-th-scan, .dnac-th-mote, .dnac-th-line, .dnac-theater { animation: none; }
  .dnac-th-scan, .dnac-th-mote { display: none; }
}

/* F079 · vitamin showcase — fills the score card's open side with a floating fan
   of the member's real IDLife products. Flex-wraps: it rides on the RIGHT when the
   card is wide (tablet / desktop / mobile Home page) and drops CENTERED below the
   ring when the card is narrow (the desktop side column / small phones). */
.ov-score-main { display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: clamp(16px, 3vw, 30px); }
/* z-index:2 lifts the ring/Precision-Engine/Health-Trend column ABOVE the product
   fan (its stack is z-index:1), so the fortress backdrop's leftward overflow sits
   BEHIND these elements instead of clipping them (F089). */
.ov-score-main > .ov-score-left { flex: 1 1 300px; min-width: 0; display: flex; flex-direction: column;
  position: relative; z-index: 2;
  /* F220 · top-aligned: the Living Health Shield column is TALLER than this one,
     and center-alignment was stranding "Your next move" ~90px below the brand
     banner. Pin it to the top; the shield stays vertically centered on its own. */
  align-self: flex-start;
  gap: clamp(14px, 1.8vw, 20px); }   /* ring+meta stacked above the health-trend widget; grows → fan to the right */
.ov-showcase { appearance: none; -webkit-appearance: none; border: 0; background: transparent; color: inherit;
  font: inherit; cursor: pointer; text-align: center;
  flex: 0 0 auto; position: relative; display: flex; flex-direction: column; align-items: center;
  gap: 12px; padding: 8px 6px 6px; border-radius: var(--r-lg);
  transform: scale(var(--shc-scale, 1)); transform-origin: center;
  transition: transform .4s var(--ease-out); }
/* F221 · on computer, top-align the shield with the left column (it was centered,
   so it hung lower than the brand banner) and lift it up a touch for symmetry.
   F233 · scoped to the TRUE two-column layout — body:not(.myai-open) — because
   when MyAI opens the page collapses to ONE column and this negative lift would
   drag the shield UP into the Health Trend widget above it. */
@media (min-width: 1121px) {
  .ov-score-main { align-items: flex-start; }
  /* F247 · desktop only — push the whole board ~10px further down from the top
     header, and open a real 60px gutter between the two columns (60px on the
     left column's right edge + 60px on the shield column's left edge). MyAI-open
     collapses to one column, so the column gutters are scoped to two-column. */
  #screen-overview .ov-wrap { padding-top: 10px; }
  body:not(.myai-open) .ov-score-main > .ov-score-left { margin-right: 60px; }
  body:not(.myai-open) .ov-showcase--lhs { margin-left: 60px; }
  /* F246 · softened the negative lift (was -88/-48px) — it was pulling the shield
     up UNDER the top header, clipping the "Up-To-Date Assessment" tag + plate.
     A gentler lift keeps the top-alignment intent while giving real headroom. */
  body:not(.myai-open) .ov-showcase--lhs { align-self: flex-start; margin-top: clamp(-40px, -2vw, -16px); }
  /* F223 · pull the "N supplements in your plan" cap up into the shield's
     lower dead-space so the CTA row below the fold rises onto screen. */
  body:not(.myai-open) .ov-showcase--lhs .ov-shc-cap { margin-top: clamp(-72px, -4vw, -36px); }
}
/* F414 · thin desktop (1121–1320) — the 120px of column gutters starves the
   left rail; halve them so both columns keep honest width. */
@media (min-width: 1121px) and (max-width: 1320px) {
  body:not(.myai-open) .ov-score-main > .ov-score-left { margin-right: 24px; }
  body:not(.myai-open) .ov-showcase--lhs { margin-left: 24px; }
}
/* F233 · whenever the shield STACKS below the Health Trend widget (MyAI open at
   any width, or tablet/mobile single-column), reserve headroom above it so the
   pinned "Up-To-Date Assessment" tag — which floats above the plate — is never
   cut off by the Health Trend card. */
body.myai-open .ov-showcase--lhs { margin-top: 0; padding-top: 48px; }
/* F404 · MEMBER layout — the shield + "What's shaping your score" card share one
   column (.ov-shield-col): the card sits DIRECTLY beneath the shield at the
   shield column's width. The column inherits the showcase's flex slot; the
   inner showcase sheds its own desktop gutter/lift (the column carries them). */
.ov-shield-col { flex: 0 1 auto; min-width: 0; display: flex; flex-direction: column;
  align-items: stretch; gap: clamp(14px, 1.8vw, 20px); }
.ov-shield-col > .ov-showcase { align-self: center; }
/* width:0 + min-width:100% — the card ADOPTS the shield's width instead of
   inflating the column's intrinsic size with its own content. */
.ov-shield-col > .ov-scorefx { width: 0; min-width: 100%; margin: 0; }
@media (min-width: 1121px) {
  body:not(.myai-open) .ov-score-main > .ov-shield-col { align-self: flex-start;
    margin-left: 60px; margin-top: clamp(-40px, -2vw, -16px); }
  body:not(.myai-open) .ov-shield-col .ov-showcase--lhs { margin-left: 0; margin-top: 0; }
}
/* F414 · thin desktop (1121–1320): the shield's 60px shove starves the left
   rail — pull it back so the cards keep real width. */
@media (min-width: 1121px) and (max-width: 1320px) {
  body:not(.myai-open) .ov-score-main > .ov-shield-col { margin-left: 20px; }
}
body.myai-open .ov-shield-col .ov-showcase--lhs { margin-top: 0; }
@media (max-width: 1120px) {
  .ov-showcase--lhs { padding-top: 48px; }
  /* F238 · phone/tablet ONLY — dissolve the left column so the next-move widget,
     the Living Shield and the Health Trend become flex items of .ov-score-main,
     then order them: next-move (1) → shield (2) → trend (3). The shield used to
     sit ABOVE next-move; now it slots BETWEEN move and trend. Computer (≥1025)
     keeps its untouched two-column layout. */
  .ov-score-main { flex-direction: column; align-items: stretch; }
  .ov-score-main > .ov-score-left { display: contents; }
  /* F405 · member stacking: plan card (1) → shield + What's-shaping (2) →
     Top 3 Health Priorities (3) → product recommendations (4). */
  .ov-score-left > .ov-score-row { order: 1; }
  .ov-score-main > .ov-showcase,
  .ov-score-main > .ov-shield-col { order: 2; width: 100%; }
  .ov-score-left > .ov-trend,
  .ov-score-left > .ov-top3,
  .ov-score-left > .ov-lockmini { order: 3; }
  .ov-score-left > .ov-reco-slot { order: 4; width: 100%; }
  .ov-score-left > .ov-cta { order: 5; width: 100%; }
}
.ov-showcase:focus-visible { outline: 2px solid var(--teal); outline-offset: 4px; }
.ov-showcase:active { transform: translateY(-1px) scale(calc(var(--shc-scale, 1) * .99)); }
.ov-showcase--nodes-only { cursor: default; }
.ov-showcase--nodes-only:active { transform: none; }
/* F181 · preview showcase — give the fortress some breathing room up top so the
   castle turrets aren't shoved against the card's edge. */
.ov-showcase--pv { padding-top: clamp(28px, 4vw, 52px); }
@media (hover: hover) {
  .ov-showcase:hover { transform: translateY(-3px) scale(var(--shc-scale, 1)); }
  .ov-showcase:hover .ov-shc-glow { opacity: 1; }
  .ov-showcase--nodes-only:hover { transform: none; }
}
/* F087 · a soft, ALWAYS-ON tri-color brand aura grounds the fan so it no longer
   floats — teal (left) → blue (center) → violet (right), echoing the palette.
   Sits behind the photos, blooms a touch more on hover.
   F095 · the LEFT side (facing the castle) is masked out so no blue/purple blur
   bleeds toward it — only the middle-to-right of the aura keeps the blur. */
.ov-shc-glow { position: absolute; z-index: 0; inset: -20% -14% 24%; pointer-events: none;
  background:
    radial-gradient(42% 50% at 25% 42%, color-mix(in srgb, var(--teal) 42%, transparent),   transparent 70%),
    radial-gradient(66% 64% at 50% 52%, color-mix(in srgb, var(--blue) 30%, transparent),   transparent 74%);
  filter: blur(26px); opacity: .4; transition: opacity .5s var(--ease-out);
  /* fade BOTH edges so the halo melts into the page — no hard line where it stops */
  -webkit-mask-image: linear-gradient(to right, transparent 0%, transparent 42%, #000 60%, #000 78%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0%, transparent 42%, #000 60%, #000 78%, transparent 100%); }

/* ═══════════════════════════════════════════════════════════════════════════
   F217 · THE LIVING HEALTH SHIELD
   Layered SVG + HTML overlay. Dimensional without weight: a gradient contour,
   a glass inner surface, seven domain nodes, energy paths, orbital rings, a
   grounding glow, and the central score chamber. Tokenized for BOTH themes;
   every animation is opacity/transform-only (GPU-friendly), reduced-motion
   collapses to the final static state, and .lhs-paused (hidden tab) freezes
   all ambience.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Shield-local theme knobs (dark defaults; light overrides below). */
.lhs-stage {
  --lhs-glass-hi:  #16294f;
  --lhs-glass-mid: #091228;
  --lhs-glass-lo:  #030712;
  --lhs-chamber-hi: rgba(20, 38, 82, .97);
  --lhs-chamber-mid: rgba(8, 16, 38, .98);
  --lhs-chamber-lo: rgba(2, 5, 14, .995);
  --lhs-line:      color-mix(in srgb, var(--blue) 34%, transparent);
  --lhs-lattice:   rgba(122, 168, 255, .1);
  --lhs-node-bg:   rgba(10, 20, 44, .92);
  --lhs-boost:     var(--shield);           /* the DISTINCT green for category boosts */
  position: relative; z-index: 1; display: block; flex: none;
  /* F235 · grown to command the column — the orbital field around it reaches
     wider still, so the right side of the computer screen reads FULL */
  width: clamp(350px, 41vw, 560px); aspect-ratio: 260 / 300;
}
[data-theme="light"] .lhs-stage {
  --lhs-glass-hi:  #ffffff;
  --lhs-glass-mid: #e9f3ff;
  --lhs-glass-lo:  #cbdefa;
  --lhs-chamber-hi: #ffffff;
  --lhs-chamber-mid: #f2f7ff;
  --lhs-chamber-lo: #dcebff;
  --lhs-line:      color-mix(in srgb, var(--blue-2) 38%, transparent);
  --lhs-lattice:   rgba(22, 82, 240, .1);
  --lhs-node-bg:   #ffffff;
}
.lhs-svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }

/* ── DEPTH STACK · bloom → beveled rim → glass → lattice → facets → sheen ── */
/* cast bloom — a blurred rim duplicate breathing softly behind the plate */
.lhs-bloom { fill: none; stroke-width: 10; stroke-linejoin: round; opacity: .5;
  filter: blur(14px); animation: lhsBloom 7s var(--ease-lux) infinite; }
@keyframes lhsBloom { 0%, 100% { opacity: .38; } 50% { opacity: .62; } }
[data-theme="light"] .lhs-bloom { opacity: .34; }
[data-theme="light"] .lhs-bloom { animation-name: lhsBloomLt; }
@keyframes lhsBloomLt { 0%, 100% { opacity: .24; } 50% { opacity: .42; } }

/* beveled metal rim — dark undercut beneath a bright gradient face + a hairline
   inner light edge = a machined, jewel-set frame instead of a flat outline */
.lhs-rim-under { fill: none; stroke: rgba(2, 6, 18, .78); stroke-width: 6.5; stroke-linejoin: round;
  transform: translateY(1.6px); }
[data-theme="light"] .lhs-rim-under { stroke: rgba(84, 118, 168, .38); }
.lhs-contour { fill: none; stroke-width: 4.2; stroke-linejoin: round; opacity: 1;
  filter: drop-shadow(0 14px 34px color-mix(in srgb, var(--blue) 34%, transparent)); }
.lhs-rim-edge { fill: none; stroke: rgba(255, 255, 255, .55); stroke-width: .8;
  stroke-linejoin: round; opacity: .8; }
[data-theme="light"] .lhs-rim-edge { stroke: rgba(255, 255, 255, .95); }

.lhs-glass { stroke: none; }
.lhs-lattice { opacity: .9;
  -webkit-mask-image: radial-gradient(58% 52% at 50% 48%, #000 30%, transparent 92%);
          mask-image: radial-gradient(58% 52% at 50% 48%, #000 30%, transparent 92%); }

/* cut-gem facet planes — whisper-quiet luminance shifts that read as 3D planes */
.lhs-facet { fill: #ffffff; opacity: .035; }
.lhs-facet-2 { fill: #000000; opacity: .06; }
.lhs-facet-3 { fill: #ffffff; opacity: .02; }
[data-theme="light"] .lhs-facet { opacity: .5; }
[data-theme="light"] .lhs-facet-2 { fill: #9db9e4; opacity: .16; }
[data-theme="light"] .lhs-facet-3 { opacity: .3; }

.lhs-innerline { fill: none; stroke: var(--lhs-line); stroke-width: 1; opacity: .55;
  stroke-dasharray: 3 5; }
.lhs-sheen { fill: #ffffff; opacity: .08; }
[data-theme="light"] .lhs-sheen { opacity: .55; }

/* drifting data motes inside the glass — alive, never busy */
.lhs-mote { fill: var(--teal); opacity: .5; animation: lhsMote 11s var(--ease-lux) infinite; }
.lhs-mote-2 { fill: var(--blue); animation-duration: 14s; animation-delay: 2s; }
.lhs-mote-3 { fill: var(--violet); animation-duration: 16s; animation-delay: 5s; }
.lhs-mote-4 { animation-duration: 13s; animation-delay: 7s; }
.lhs-mote-5 { fill: var(--blue); animation-duration: 17s; animation-delay: 3.5s; }
.lhs-mote-6 { fill: var(--violet); animation-duration: 15s; animation-delay: 9s; }
@keyframes lhsMote {
  0%, 100% { transform: translate(0, 0); opacity: .22; }
  25% { opacity: .6; }
  50% { transform: translate(7px, -13px); opacity: .38; }
  75% { opacity: .55; }
}

/* F220 · jewel glints — 4-point star sparkles that catch the light RARELY.
   Long cycles + tiny on-windows = precious, never glittery. */
.lhs-glint { fill: #ffffff; opacity: 0; transform-box: fill-box; transform-origin: center;
  animation: lhsGlint 9s var(--ease-lux) infinite; }
.lhs-glint-2 { animation-duration: 13s; animation-delay: 4s; }
.lhs-glint-3 { animation-duration: 11s; animation-delay: 7.5s; }
.lhs-glint-4 { animation-duration: 15s; animation-delay: 2.2s; }
@keyframes lhsGlint {
  0%, 86%, 100% { opacity: 0; transform: scale(.3) rotate(0deg); }
  90% { opacity: .95; transform: scale(1) rotate(24deg); }
  94% { opacity: 0; transform: scale(.3) rotate(45deg); }
}
[data-theme="light"] .lhs-glint { fill: #ffffff;
  filter: drop-shadow(0 0 4px rgba(22, 82, 240, .55)); }

/* ── score edge illumination: soft under-glow + base arc + GREEN bonus arc ── */
.lhs-arc-track { fill: none; stroke: var(--track); stroke-width: 5.2; stroke-linejoin: round; }
.lhs-arc-underglow { fill: none; stroke-width: 11; stroke-linecap: round; stroke-linejoin: round;
  opacity: .5; filter: blur(7px); transition: stroke-dasharray 1.1s var(--ease-lux); }
.lhs-arc-base { fill: none; stroke-width: 5.2; stroke-linecap: round; stroke-linejoin: round;
  transition: stroke-dasharray 1.1s var(--ease-lux);
  filter: drop-shadow(0 0 8px var(--teal-glow)); }
.lhs-arc-bonus { fill: none; stroke: var(--lhs-boost); stroke-width: 5.2; stroke-linecap: round;
  stroke-linejoin: round; transition: stroke-dasharray 1.1s var(--ease-lux) .25s;
  filter: drop-shadow(0 0 9px var(--shield-glow)); }

/* ── energy paths (node → chamber) ── */
.lhs-link { stroke: var(--lhs-line); stroke-width: 1; opacity: .34;
  stroke-dasharray: 1 9; stroke-dashoffset: 0; }

/* ── central score chamber — the reference's bold gradient instrument ring ── */
.lhs-chamber-glow { fill: none; stroke: color-mix(in srgb, var(--teal) 30%, transparent);
  stroke-width: 8; filter: blur(10px); opacity: .8; }
[data-theme="light"] .lhs-chamber-glow { stroke: color-mix(in srgb, var(--blue-2) 26%, transparent); opacity: .6; }
.lhs-chamber { stroke: none;
  filter: drop-shadow(0 10px 26px rgba(2, 8, 24, .6)); }
[data-theme="light"] .lhs-chamber { filter: drop-shadow(0 8px 22px rgba(70, 110, 180, .3)); }
.lhs-chamber-rim { fill: none; stroke-width: 5; stroke-linecap: round; opacity: 1;
  filter: drop-shadow(0 0 8px var(--teal-glow)) drop-shadow(0 0 22px color-mix(in srgb, var(--blue-2) 34%, transparent)); }
[data-theme="light"] .lhs-chamber-rim { filter: drop-shadow(0 2px 10px rgba(22, 82, 240, .28)); }


/* ── ambient light sweep (every ~8s) + assessment scan band ── */
.lhs-sweep { opacity: 0; animation: lhsSweep 8s var(--ease-lux) infinite 2s; }
@keyframes lhsSweep {
  0%, 78% { transform: translateY(0); opacity: 0; }
  80% { opacity: 1; }
  96%, 100% { transform: translateY(400px); opacity: 0; }
}
.lhs-scan { opacity: 0; }
.lhs-p2 .lhs-scan { animation: lhsScanUp 1.2s var(--ease-lux) both; }
@keyframes lhsScanUp {
  0% { transform: translateY(0); opacity: 0; }
  12% { opacity: 1; }
  88% { opacity: 1; }
  100% { transform: translateY(-400px); opacity: 0; }
}

/* ── F236 · THE PROTECTION FIELD — the $70B atmosphere behind the shield ───
   CONTAINED BY DESIGN: the whole field lives in a modest box around the plate
   and the ENTIRE layer is edge-masked with a radial fade — every ring, pulse
   and mote dissolves into the page before its own bounding edge, so nothing
   can ever hard-clip at the viewport or grow the document. GPU-only. */
.lhs-rings { position: absolute; inset: -18% -34%; z-index: -1; pointer-events: none;
  perspective: 1100px;
  /* HARD containment — the 3D-projected orbits are clipped at this box so they
     can NEVER contribute scrollable overflow (the mask hides the clip line) */
  overflow: clip; border-radius: 50%;
  /* the visual guarantee — the field melts away radially before its edges */
  -webkit-mask-image: radial-gradient(60% 58% at 50% 48%, #000 55%, transparent 97%);
          mask-image: radial-gradient(60% 58% at 50% 48%, #000 55%, transparent 97%); }
/* F263 · DESKTOP CINEMA — keep the Shield as the gravity source, but let the
   protection field breathe across the hero lane. These long, low-opacity arcs
   read like comet trails escaping the shield's magnetosphere, then dissolve
   before they can fight the left cards. Tablet/mobile keep the tighter field. */
@media (min-width: 1025px) {
  .lhs-rings { inset: -24% -82% -20%;
    -webkit-mask-image: radial-gradient(62% 58% at 50% 48%, #000 48%, rgba(0,0,0,.72) 66%, transparent 98%);
            mask-image: radial-gradient(62% 58% at 50% 48%, #000 48%, rgba(0,0,0,.72) 66%, transparent 98%); }
  .lhs-rings::before,
  .lhs-rings::after { content: ''; position: absolute; inset: 18% 6%; border-radius: 50%;
    opacity: .46; will-change: transform;
    background: conic-gradient(from 118deg,
      transparent 0 35%,
      color-mix(in srgb, var(--violet) 18%, transparent) 47%,
      color-mix(in srgb, var(--teal) 34%, transparent) 58%,
      color-mix(in srgb, #fff 58%, var(--blue)) 61%,
      color-mix(in srgb, var(--blue) 22%, transparent) 65%,
      transparent 76% 100%);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 1px));
            mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 1px));
    filter: blur(.15px) drop-shadow(0 0 18px color-mix(in srgb, var(--teal) 22%, transparent));
    animation: lhsWideArc 190s linear infinite; }
  .lhs-rings::after { inset: 26% 0%; opacity: .34;
    background: conic-gradient(from 292deg,
      transparent 0 43%,
      color-mix(in srgb, var(--teal) 14%, transparent) 54%,
      color-mix(in srgb, var(--blue) 32%, transparent) 64%,
      color-mix(in srgb, #fff 46%, var(--violet)) 66.5%,
      color-mix(in srgb, var(--violet) 18%, transparent) 71%,
      transparent 82% 100%);
    animation-duration: 260s; animation-direction: reverse; }
}
@keyframes lhsWideArc { from { transform: rotateX(71deg) rotateZ(-9deg) rotate(0deg); }
  to { transform: rotateX(71deg) rotateZ(-9deg) rotate(360deg); } }
/* F240 · BRAND-NEW USER (never assessed → dormant shield) — hide the orbiting
   comet rings + precision bezel that rotate around/behind the plate. The
   dormant state stays calm (nebula, light-shaft, motes, stardust remain); the
   orbits return the moment a real Health Score exists. */
.lhs-dormant .lhs-orb { display: none; }

/* crown light-shaft — a soft god-ray descending onto the plate from above,
   breathing almost imperceptibly. The quiet luxury layer. */
.lhs-shaft { position: absolute; left: 50%; top: -2%; width: 46%; height: 66%;
  transform: translateX(-50%);
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--teal) 13%, transparent),
    color-mix(in srgb, var(--blue) 7%, transparent) 55%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 30%, #000 70%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 30%, #000 70%, transparent);
  filter: blur(18px); opacity: .48; animation: lhsShaft 18s var(--ease-lux) infinite; }
@keyframes lhsShaft { 0%, 100% { opacity: .26; } 50% { opacity: .52; } }
[data-theme="light"] .lhs-shaft { opacity: .32; }

/* aurora nebula — a slow tri-color space wash filling the air around the plate */
.lhs-nebula { position: absolute; inset: 2% 4%; border-radius: 50%;
  background:
    radial-gradient(36% 42% at 30% 36%, color-mix(in srgb, var(--teal) 15%, transparent), transparent 70%),
    radial-gradient(42% 46% at 72% 30%, color-mix(in srgb, var(--blue) 13%, transparent), transparent 72%),
    radial-gradient(38% 44% at 58% 74%, color-mix(in srgb, var(--violet) 10%, transparent), transparent 70%);
  filter: blur(34px); opacity: .55;
  animation: lhsNebula 34s var(--ease-lux) infinite; }
@keyframes lhsNebula {
  0%, 100% { opacity: .32; transform: rotate(0deg) scale(1); }
  50% { opacity: .58; transform: rotate(4deg) scale(1.035); } }
[data-theme="light"] .lhs-nebula { opacity: .34; filter: blur(38px); }

/* comet orbits — each `i` is a tilted orbital plane that spins; inside it the
  ::before paints a finite conic light-trail masked to a hairline ring. The
  back half is fully transparent, so the tail fades away like a jet trail
  instead of drawing a permanent ring. The ::after jewel
   rides the head of the trail at the top of the ring. Trail + jewel rotate
   together, so the comet always leads its own light. */
.lhs-orb { position: absolute; border-radius: 50%; will-change: transform; opacity: .90; }
.lhs-orb::before { content: ''; position: absolute; inset: 0; border-radius: 50%;
  background: conic-gradient(from 0deg,
   transparent 0 72%,
   color-mix(in srgb, var(--orb-c, var(--teal)) 3%, transparent) 80%,
   color-mix(in srgb, var(--orb-c, var(--teal)) 12%, transparent) 88%,
   color-mix(in srgb, var(--orb-c, var(--teal)) 32%, transparent) 95%,
   color-mix(in srgb, var(--orb-c, var(--teal)) 72%, #fff) 99.1%,
   transparent 100%);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 6.2px), #000 calc(100% - 1.5px));
      mask: radial-gradient(farthest-side, transparent calc(100% - 6.2px), #000 calc(100% - 1.5px)); }
  [data-theme="light"] .lhs-orb::before {
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 7px), #000 calc(100% - 1.4px));
      mask: radial-gradient(farthest-side, transparent calc(100% - 7px), #000 calc(100% - 1.4px)); }
.lhs-orb::after { content: ''; position: absolute; top: -3px; left: 50%; width: 6px; height: 6px;
  margin-left: -3px; border-radius: 50%;
  background: color-mix(in srgb, var(--orb-c, var(--teal)) 42%, #fff);
  box-shadow: 0 0 10px 3px color-mix(in srgb, var(--orb-c, var(--teal)) 46%, transparent),
              0 0 24px 8px color-mix(in srgb, var(--orb-c, var(--teal)) 18%, transparent); }

/* three inclinations — a gyroscope of crossing planes at different radii/speeds,
   all tucked INSIDE the masked field so their far edges melt away gracefully */
.lhs-orb-a { --orb-c: var(--teal);   inset: 12% 10%; animation: lhsOrbA 112s linear infinite; }
.lhs-orb-b { --orb-c: var(--blue);   inset: 6% 1%;   animation: lhsOrbB 168s linear infinite; }
.lhs-orb-c { --orb-c: var(--violet); inset: 1% -7%;  animation: lhsOrbC 236s linear infinite reverse; }
@keyframes lhsOrbA { from { transform: rotateX(72deg) rotate(128deg); }   to { transform: rotateX(72deg) rotate(488deg); } }
@keyframes lhsOrbB { from { transform: rotate(-10deg) rotateX(67deg) rotate(246deg); } to { transform: rotate(-10deg) rotateX(67deg) rotate(606deg); } }
@keyframes lhsOrbC { from { transform: rotate(9deg) rotateX(74deg) rotate(18deg); }   to { transform: rotate(9deg) rotateX(74deg) rotate(378deg); } }

/* the precision bezel — the outermost, faintest instrument ring: fine dashes,
   counter-rotating imperceptibly slowly. Its rim rides the mask's fade zone,
   so it reads as sinking into deep space rather than being a drawn circle. */
.lhs-orb-halo { inset: -3% -13%;
  border: 1px dashed color-mix(in srgb, var(--blue) 14%, transparent);
  box-shadow: 0 0 24px -20px var(--teal-glow), inset 0 0 24px -22px var(--teal-glow);
  opacity: .34; animation: lhsOrbHalo 240s linear infinite reverse; }
.lhs-orb-halo::before, .lhs-orb-halo::after { content: none; }
@keyframes lhsOrbHalo { from { transform: rotateX(70deg) rotate(0deg); } to { transform: rotateX(70deg) rotate(360deg); } }

/* rising energy motes — five tiny lights ascending slowly past the plate and
   fading out near the crown, like sparks drawn upward into the light shaft */
.lhs-risers { position: absolute; inset: 0; }
.lhs-risers s { position: absolute; bottom: 18%; width: 3.5px; height: 3.5px; border-radius: 50%;
  background: color-mix(in srgb, var(--teal) 80%, #fff);
  box-shadow: 0 0 6px 1px color-mix(in srgb, var(--teal) 26%, transparent);
  opacity: 0; animation: lhsRise 22s linear infinite; }
.lhs-risers s:nth-child(1) { left: 20%; animation-delay: 0s; }
.lhs-risers s:nth-child(2) { left: 33%; animation-delay: 7.8s; animation-duration: 26s;
  background: color-mix(in srgb, var(--blue) 80%, #fff);
  box-shadow: 0 0 6px 1px color-mix(in srgb, var(--blue) 26%, transparent); }
.lhs-risers s:nth-child(3) { left: 66%; animation-delay: 4.4s; animation-duration: 30s; }
.lhs-risers s:nth-child(4) { left: 79%; animation-delay: 13.6s;
  background: color-mix(in srgb, var(--violet) 80%, #fff);
  box-shadow: 0 0 6px 1px color-mix(in srgb, var(--violet) 26%, transparent); }
.lhs-risers s:nth-child(5) { left: 51%; animation-delay: 18s; animation-duration: 34s; }
@keyframes lhsRise {
  0%   { opacity: 0; transform: translateY(0) scale(.7); }
  12%  { opacity: .46; }
  70%  { opacity: .24; }
  100% { opacity: 0; transform: translateY(-52vh) scale(1.1); } }

/* stardust — 8 pinprick stars scattered across the field, twinkling on long
   offset cycles so at most one or two breathe at once. Precious, never busy. */
.lhs-stars { position: absolute; inset: 0; }
.lhs-stars s { position: absolute; width: 3px; height: 3px; border-radius: 50%;
  background: color-mix(in srgb, var(--text) 75%, transparent);
  opacity: 0; animation: lhsStar 13s var(--ease-lux) infinite; }
.lhs-stars s:nth-child(1) { left: 8%;  top: 30%; animation-delay: 0s; }
.lhs-stars s:nth-child(2) { left: 16%; top: 66%; animation-delay: 4.8s; animation-duration: 17s; }
.lhs-stars s:nth-child(3) { left: 27%; top: 12%; animation-delay: 4.8s; }
.lhs-stars s:nth-child(4) { left: 70%; top: 8%;  animation-delay: 2.4s; animation-duration: 19s; }
.lhs-stars s:nth-child(5) { left: 84%; top: 38%; animation-delay: 10s; }
.lhs-stars s:nth-child(6) { left: 91%; top: 62%; animation-delay: 7.2s; animation-duration: 15s; }
.lhs-stars s:nth-child(7) { left: 60%; top: 88%; animation-delay: 13s; }
.lhs-stars s:nth-child(8) { left: 35%; top: 92%; animation-delay: 9.4s; animation-duration: 18s; }
@keyframes lhsStar {
  0%, 78%, 100% { opacity: 0; transform: scale(.4); }
  86% { opacity: .42; transform: scale(1.08); }
  94% { opacity: 0; transform: scale(.4); } }
[data-theme="light"] .lhs-stars s { background: color-mix(in srgb, var(--blue-2) 70%, transparent); }

/* the field folds inward on tablet/mobile so the crossing orbits never crowd
   the single-column layout — still alive, just tucked closer to the plate */
@media (max-width: 1024px) {
  .lhs-rings { inset: -8% -12%; }
  .lhs-orb-c { inset: 3% -2%; }
  .lhs-orb-halo { inset: 0 -6%; }
  .lhs-risers s { animation-name: lhsRiseSm; }
  @keyframes lhsRiseSm {
    0%   { opacity: 0; transform: translateY(0) scale(.7); }
    12%  { opacity: .85; }
    70%  { opacity: .5; }
    100% { opacity: 0; transform: translateY(-38vh) scale(1.1); } }
}

/* ── grounding: a luminous pool + a faint inverted reflection of the plate ── */
.lhs-ground { position: absolute; left: 50%; bottom: -8%; width: 88%; height: 15%;
  transform: translateX(-50%); pointer-events: none; border-radius: 50%;
  background:
    radial-gradient(46% 60% at 50% 42%, color-mix(in srgb, var(--teal) 38%, transparent), transparent 68%),
    radial-gradient(72% 90% at 50% 50%, color-mix(in srgb, var(--blue-2) 22%, transparent), transparent 74%);
  filter: blur(13px); opacity: .8;
  animation: lhsGroundBreath 7s var(--ease-lux) infinite; }
@keyframes lhsGroundBreath { 0%, 100% { opacity: .62; transform: translateX(-50%) scaleX(.96); }
  50% { opacity: .88; transform: translateX(-50%) scaleX(1.03); } }
[data-theme="light"] .lhs-ground {
  background:
    radial-gradient(46% 60% at 50% 42%, color-mix(in srgb, var(--blue-2) 34%, transparent), transparent 68%),
    radial-gradient(72% 90% at 50% 50%, color-mix(in srgb, var(--teal) 16%, transparent), transparent 74%);
  opacity: .55; }

/* ── the score core (HTML overlay → crisp typography) ── */
.lhs-core { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 2px;
  width: 52%; text-align: center; pointer-events: none; }
.lhs-core-label { font-family: var(--font-display); font-weight: 700; font-size: clamp(12px, 1.3vw, 15px);
  letter-spacing: .24em; text-transform: uppercase; color: var(--text-2); opacity: .92;
  white-space: nowrap; }
.lhs-num { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.045em;
  font-size: clamp(50px, 5.4vw, 70px); line-height: .95; color: var(--text);
  /* F220 · liquid-platinum ramp — white heat at the crown melting through mint
     into arctic blue; a slow shimmering pan makes the digits feel ALIVE. */
  background: linear-gradient(165deg, #ffffff 4%, #eafffb 26%, #c8f6ef 44%, #9fe8ff 66%, #8fb8ff 92%);
  background-size: 130% 130%;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,.3)) drop-shadow(0 6px 26px var(--teal-glow));
  animation: lhsNumShimmer 9s var(--ease-lux) infinite;
  transition: filter .5s var(--ease-out); }
@keyframes lhsNumShimmer {
  0%, 100% { background-position: 0% 0%; }
  50% { background-position: 60% 40%; }
}
[data-theme="light"] .lhs-num {
  background: linear-gradient(160deg, #071f4d 0%, #0d3fb8 38%, #1652f0 60%, #0b87c9 88%, #0fb6b0 110%);
  background-size: 130% 130%;
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,.85)) drop-shadow(0 5px 18px rgba(22, 82, 240, .28)); }
.lhs-pct { font-style: normal; font-size: .44em; font-weight: 700; letter-spacing: 0;
  vertical-align: baseline; margin-left: 1px; }
/* with the trajectory block on board, the headline number cedes a little height */
.lhs-core--traj .lhs-num { font-size: clamp(50px, 5.4vw, 72px); }
.lhs-num--pending { filter: blur(7px) drop-shadow(0 4px 16px var(--teal-glow)); opacity: .35; }
.lhs-num--resolving { filter: blur(2.5px) drop-shadow(0 4px 16px var(--teal-glow)); opacity: .92; }

/* the DISTINCT green boost chip — "these connections lift my score".
   F220 · glassy jewel pill: inner top-light, soft outer glow, breathing halo. */
.lhs-boost { display: inline-flex; align-items: center; gap: 4px; margin-top: 1px;
  font-size: 10.5px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
  color: var(--lhs-boost); padding: 3px 10px; border-radius: 999px;
  background:
    linear-gradient(180deg, rgba(255,255,255,.12), transparent 55%),
    var(--shield-soft);
  border: 1px solid color-mix(in srgb, var(--lhs-boost) 46%, transparent);
  box-shadow: 0 0 14px -4px var(--shield-glow), inset 0 1px 0 rgba(255,255,255,.18); }
.lhs-boost svg { width: 10px; height: 10px; }
[data-theme="light"] .lhs-boost { color: #067a5e;
  background:
    linear-gradient(180deg, rgba(255,255,255,.85), rgba(255,255,255,.35) 55%),
    var(--shield-soft);
  border-color: color-mix(in srgb, #10b8a0 60%, transparent);
  box-shadow: 0 2px 10px -3px rgba(16, 184, 160, .4), inset 0 1px 0 rgba(255,255,255,.9); }

/* real score delta (returning member) — always neutral in tone */
.lhs-delta { font-size: clamp(10px, 1vw, 11.5px); font-weight: 600; color: var(--text-2);
  margin-top: 1px; white-space: nowrap; max-width: 200%; }
.lhs-delta.up { color: var(--lhs-boost); }
[data-theme="light"] .lhs-delta.up { color: #067a5e; }

/* ── OVERALL HEALTH TRAJECTORY — the band crown at the shield's head ──────
   Sits inside the plate's upper chevron, above the score chamber. Its color
   is the band's own token (.b-thrive / .b-strong / .b-build / .b-prio /
   .b-coord set --hrband), so the crown always states the member's real band. */
.lhs-crown { position: absolute; left: 50%; top: 15%; transform: translateX(-50%);
  z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 7px;
  width: 66%; pointer-events: none; }
.lhs-crown b { font-family: var(--font-display); font-weight: 700; line-height: 1.08;
  font-size: clamp(15.5px, 1.75vw, 23px); letter-spacing: -0.012em; text-align: center;
  white-space: nowrap; max-width: 100%; overflow: visible;
  color: color-mix(in srgb, var(--hrband, var(--teal)) 72%, #ffffff);
  text-shadow: 0 1px 0 rgba(255,255,255,.08),
    0 2px 24px color-mix(in srgb, var(--hrband, var(--teal)) 66%, transparent); }
.lhs-crown-rule { display: block; width: 17%; height: 2px; border-radius: 99px;
  background: linear-gradient(90deg, transparent,
    color-mix(in srgb, var(--hrband, var(--teal)) 78%, transparent), transparent);
  box-shadow: 0 0 10px color-mix(in srgb, var(--hrband, var(--teal)) 45%, transparent); }
[data-theme="light"] .lhs-crown b { color: color-mix(in srgb, var(--hrband, var(--teal)) 88%, #04102c);
  text-shadow: none; }
[data-theme="light"] .lhs-crown-rule { box-shadow: none; }

/* "out of 100" — quiet system caption directly under the big number */
.lhs-outof { font-size: clamp(12.5px, 1.3vw, 16px); font-weight: 600;
  letter-spacing: .01em; color: var(--text-2); opacity: .92; margin-top: 2px; }

/* the trajectory-age block under the score — the member's Health Trajectory
   Age Estimate plus how it sits against their calendar age */
.lhs-core--traj { gap: 1px; }
.lhs-traj { display: flex; flex-direction: column; align-items: center; gap: 2px;
  margin-top: clamp(10px, 1.3vw, 17px); width: 118%; }
.lhs-traj-rule { display: block; width: 68%; height: 1.5px; border-radius: 99px;
  margin-bottom: clamp(8px, 1.05vw, 13px);
  background: linear-gradient(90deg, transparent, var(--border-hi), transparent); }
.lhs-traj-label { font-family: var(--font-display); font-weight: 700;
  font-size: clamp(10.5px, 1.15vw, 13.5px); letter-spacing: .24em; text-transform: uppercase;
  color: var(--text-2); opacity: .92; white-space: nowrap; }
.lhs-traj-num { display: inline-flex; align-items: baseline; gap: 6px; }
.lhs-traj-num b { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.035em;
  font-size: clamp(31px, 3.35vw, 45px); line-height: 1.02; color: var(--text);
  text-shadow: 0 2px 14px rgba(4, 10, 26, .35); }
.lhs-traj-num i { font-style: normal; font-size: clamp(12.5px, 1.3vw, 16px); font-weight: 600;
  color: var(--text-2); }
.lhs-traj-note { display: inline-flex; align-items: center; gap: 5px; margin-top: 3px;
  font-size: clamp(10px, 1.05vw, 12px); font-weight: 600; color: var(--text-2); white-space: nowrap; }
.lhs-traj-note svg { width: 1.25em; height: 1.25em; flex: none; }
.lhs-traj-note.is-down { color: var(--teal); }
.lhs-traj-note.is-up { color: var(--warning); }
[data-theme="light"] .lhs-traj-num b { text-shadow: none; }
[data-theme="light"] .lhs-traj-note.is-down { color: #067a5e; }

/* dormant core (new user / invalid score) — a living spark, never a number */
.lhs-core--dormant { gap: 10px; }
.lhs-spark { position: relative; display: grid; place-items: center;
  width: clamp(48px, 5.2vw, 64px); aspect-ratio: 1;
  border-radius: 50%; color: var(--teal);
  background:
    radial-gradient(60% 60% at 50% 34%, rgba(255,255,255,.16), transparent 70%),
    color-mix(in srgb, var(--teal) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 44%, transparent);
  box-shadow: 0 0 34px var(--teal-glow), inset 0 1px 0 rgba(255,255,255,.22);
  animation: lhsSparkPulse 3.6s var(--ease-lux) infinite; }
.lhs-spark::after { content: ''; position: absolute; inset: -9px; border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent);
  animation: lhsSparkHalo 3.6s var(--ease-lux) infinite; }
@keyframes lhsSparkHalo { 0%, 100% { transform: scale(.94); opacity: .4; } 50% { transform: scale(1.05); opacity: .9; } }
.lhs-spark svg { width: 55%; height: 55%; filter: drop-shadow(0 0 8px var(--teal-glow)); }
@keyframes lhsSparkPulse { 0%, 100% { transform: scale(1); opacity: .92; } 50% { transform: scale(1.08); opacity: 1; } }
.lhs-core-hint { font-family: var(--font-display); font-weight: 700; line-height: 1.28;
  font-size: clamp(13.5px, 1.5vw, 17px); color: var(--text);
  text-shadow: 0 2px 12px rgba(4, 10, 26, .4); }
[data-theme="light"] .lhs-core-hint { color: #0c2f66; text-shadow: none; }

/* ── the 7 health-domain nodes ── */
.lhs-node { position: absolute; left: var(--nx); top: var(--ny); z-index: 3;
  width: clamp(40px, 4.2vw, 52px); aspect-ratio: 1; margin: 0;
  transform: translate(-50%, -50%); display: grid; place-items: center;
  border-radius: 50%; cursor: default; pointer-events: auto;
  -webkit-tap-highlight-color: transparent; }
.lhs-node[data-lhs-node] { cursor: pointer; }
.lhs-node-ring { position: absolute; inset: 0; border-radius: 50%;
  background:
    radial-gradient(65% 65% at 50% 28%, rgba(255,255,255,.14), transparent 72%),
    var(--lhs-node-bg);
  border: 1.5px solid var(--border);
  box-shadow: 0 4px 14px rgba(2, 8, 24, .45), inset 0 1px 0 rgba(255, 255, 255, .14);
  transition: border-color .3s, box-shadow .3s, transform .3s var(--ease-out); }
[data-theme="light"] .lhs-node-ring {
  box-shadow: 0 4px 14px rgba(70, 110, 180, .22), inset 0 1px 0 rgba(255, 255, 255, .9); }
.lhs-node-ic { position: relative; z-index: 1; display: grid; place-items: center;
  width: 52%; height: 52%; color: var(--muted); transition: color .3s; }
.lhs-node-ic svg { width: 100%; height: 100%; }

/* ACTIVATED — lit, brand-connected, with the green "boost" rim */
.lhs-node.is-on .lhs-node-ring { border-color: color-mix(in srgb, var(--lhs-boost) 62%, transparent);
  box-shadow: 0 0 14px var(--shield-glow), var(--shadow-sm), inset 0 1px 0 rgba(255, 255, 255, .12); }
.lhs-node.is-on .lhs-node-ic { color: var(--lhs-boost); }
[data-theme="light"] .lhs-node.is-on .lhs-node-ic { color: #067a5e; }
/* the always-on assessment node (bonus 0) reads brand-teal, not green */
.lhs-node.is-on[data-lhs-node="assessment"] .lhs-node-ring {
  border-color: color-mix(in srgb, var(--teal) 58%, transparent);
  box-shadow: 0 0 13px var(--teal-glow), var(--shadow-sm); }
.lhs-node.is-on[data-lhs-node="assessment"] .lhs-node-ic { color: var(--teal); }
[data-theme="light"] .lhs-node.is-on[data-lhs-node="assessment"] .lhs-node-ic { color: #0b7f8e; }

/* NOT CONNECTED — a greyed-out red: intuitively signals "look into this",
   without alarming. Coming-soon categories (.lhs-node--soon) are EXEMPT — they
   stay neutral-dormant since the member can't act on them yet. */
.lhs-node.is-off:not(.lhs-node--soon) .lhs-node-ring {
  border-style: dashed;
  border-color: color-mix(in srgb, var(--danger) 42%, var(--border));
  opacity: .9; }
.lhs-node.is-off:not(.lhs-node--soon) .lhs-node-ic {
  color: color-mix(in srgb, var(--danger) 55%, var(--muted));
  opacity: .8; }
/* light mode: give the node body a clear red wash so it reads as "needs attention" */
[data-theme="light"] .lhs-node.is-off:not(.lhs-node--soon) .lhs-node-ring {
  background:
    radial-gradient(65% 65% at 50% 28%, rgba(255,255,255,.2), transparent 72%),
    color-mix(in srgb, var(--danger) 16%, var(--lhs-node-bg));
  box-shadow: 0 4px 14px color-mix(in srgb, var(--danger) 22%, transparent), inset 0 1px 0 rgba(255, 255, 255, .8); }
/* coming-soon dormant nodes keep the original quiet, neutral treatment */
.lhs-node.is-off.lhs-node--soon .lhs-node-ring { border-style: dashed; opacity: .78; }
.lhs-node.is-off.lhs-node--soon .lhs-node-ic { opacity: .55; }

/* NEEDS UPDATE — a gentle amber cue (never alarming) */
.lhs-node.is-due .lhs-node-ring { border-color: color-mix(in srgb, var(--warning) 58%, transparent);
  box-shadow: 0 0 12px color-mix(in srgb, var(--warning) 30%, transparent), var(--shadow-sm); }
.lhs-node.is-due .lhs-node-ic { color: var(--warning); }

/* LOCKED (new user) — the padlock story: the assessment is the key */
.lhs-node.is-locked .lhs-node-ring { opacity: .6; }
.lhs-node.is-locked .lhs-node-ic { color: var(--muted); opacity: .75; }

/* independent low-intensity breathing (dormant + idle) */
.lhs-node { animation: lhsNodeBreath 5.2s var(--ease-lux) infinite; }
.lhs-node:nth-child(2n) { animation-delay: 1.4s; }
.lhs-node:nth-child(3n) { animation-delay: 2.6s; }
@keyframes lhsNodeBreath {
  0%, 100% { transform: translate(-50%, -50%) scale(1); }
  50% { transform: translate(-50%, -50%) scale(1.045); }
}

/* hover / focus / inspected node */
.lhs-node:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }
@media (hover: hover) {
  .lhs-node[data-lhs-node]:hover .lhs-node-ring { transform: scale(1.1); border-color: var(--border-hi); }
}
.lhs-node.is-focus .lhs-node-ring { transform: scale(1.12); border-color: var(--border-hi);
  box-shadow: var(--glow-teal), var(--shadow-sm); }
/* inspecting one node dims the unrelated connections slightly */
.lhs-inspect .lhs-link { opacity: .14; }
.lhs-inspect .lhs-node:not(.is-focus) { opacity: .62; }

/* the inspection tip — official category name. F224 · long labels (e.g.
   "Methylation Panel Not Connected") must WRAP inside the bubble, never spill
   past it: nowrap + max-width was clipping the text out of its background. */
.lhs-tip { position: absolute; z-index: 6; transform: translateX(-50%);
  width: max-content; max-width: min(180px, 82%); text-align: center; line-height: 1.3;
  padding: 7px 13px; border-radius: 11px; pointer-events: none;
  white-space: normal; overflow-wrap: break-word; word-break: break-word;
  font-family: var(--font-display); font-weight: 700; font-size: 12px; color: var(--text);
  background: var(--surface-2); border: 1px solid var(--border-hi);
  box-shadow: var(--shadow-md); }
[data-theme="light"] .lhs-tip { background: #ffffff; }

/* F225 · PINNED assessment label — always visible so members learn the OTHER
   nodes are inspectable. Same bubble as .lhs-tip, anchored just above its node
   (top-left of the shield) and left-clamped so it never spills off-stage. */
.lhs-node--pinned { overflow: visible; }
/* Assessment sits top-LEFT, so the tag opens slightly RIGHTWARD (small -28%
   bias) — that keeps the whole bubble on-stage even on a narrow phone. */
.lhs-node-tag { position: absolute; left: 50%; bottom: calc(100% + 7px); z-index: 5;
  transform: translateX(-28%); width: max-content; max-width: 150px; text-align: center;
  line-height: 1.25; padding: 5px 11px; border-radius: 10px; pointer-events: none;
  white-space: normal; overflow-wrap: break-word;
  font-family: var(--font-display); font-weight: 700; font-size: 11px; letter-spacing: .01em;
  color: var(--text); background: var(--surface-2); border: 1px solid var(--border-hi);
  box-shadow: var(--shadow-md);
  animation: lhsTagIn .5s var(--ease-out) both; }
[data-theme="light"] .lhs-node-tag { background: #ffffff; }
/* a tiny caret pointing down at the node (aligned with the -28% bias) */
.lhs-node-tag::after { content: ''; position: absolute; top: 100%; left: 28%; transform: translateX(-50%);
  border: 5px solid transparent; border-top-color: var(--border-hi); }
.lhs-node-tag::before { content: ''; position: absolute; top: calc(100% - 1.5px); left: 28%;
  transform: translateX(-50%); border: 4px solid transparent; border-top-color: var(--surface-2); z-index: 1; }
[data-theme="light"] .lhs-node-tag::before { border-top-color: #ffffff; }
/* the pinned tag rides ALONG with the node's breathing (node is the offset parent) */
@keyframes lhsTagIn { from { opacity: 0; transform: translateX(-28%) translateY(4px); }
  to { opacity: 1; transform: translateX(-28%) translateY(0); } }
@media (prefers-reduced-motion: reduce) { .lhs-node-tag { animation: none; } }

/* ═══ F226 · CATEGORY POPUP INTERNALS (.lhsp-*) — rides inside the detail
   sheet (.idn-modal/.ds-modal): centered card on computer, bottom sheet on
   phone, dark+light via tokens. Everything below is body-content styling. ═══ */
.lhsp { display: flex; flex-direction: column; gap: 15px; }
/* status row — live state pill + the score-boost jewel chip */
.lhsp-statusrow { display: flex; flex-wrap: wrap; align-items: center; gap: 9px; }
.lhsp-status { display: inline-flex; align-items: center; gap: 7px; padding: 6px 13px;
  border-radius: 999px; font-family: var(--font-display); font-weight: 700; font-size: 11.5px;
  letter-spacing: .05em; text-transform: uppercase;
  color: var(--text-2); background: var(--fill-2); border: 1px solid var(--border); }
.lhsp-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--muted); flex: none; }
.lhsp-status.is-on { color: var(--shield); border-color: color-mix(in srgb, var(--shield) 40%, transparent);
  background: var(--shield-soft); }
.lhsp-status.is-on .lhsp-dot { background: var(--shield); box-shadow: 0 0 8px var(--shield-glow);
  animation: lhspDotPulse 2.6s var(--ease-lux) infinite; }
.lhsp-status.is-due { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 42%, transparent);
  background: color-mix(in srgb, var(--warning) 9%, transparent); }
.lhsp-status.is-due .lhsp-dot { background: var(--warning); }
/* Precision sources that are missing read as an alert, not neutral grey. */
.lhsp-status.is-alert { color: rgb(255, 97, 115);
  border-color: color-mix(in srgb, rgb(255, 97, 115) 42%, transparent);
  background: color-mix(in srgb, rgb(255, 97, 115) 9%, transparent); }
.lhsp-status.is-alert .lhsp-dot { background: rgb(255, 97, 115); }
@keyframes lhspDotPulse { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }
[data-theme="light"] .lhsp-status.is-on { color: #067a5e; }
.lhsp-boost { display: inline-flex; align-items: center; gap: 6px; padding: 6px 13px;
  border-radius: 999px; font-weight: 800; font-size: 11px; letter-spacing: .04em;
  text-transform: uppercase; color: var(--shield);
  background: linear-gradient(180deg, rgba(255,255,255,.1), transparent 55%), var(--shield-soft);
  border: 1px solid color-mix(in srgb, var(--shield) 42%, transparent); }
.lhsp-boost svg { width: 11px; height: 11px; }
[data-theme="light"] .lhsp-boost { color: #067a5e; }
.lhsp-boost--zero { color: var(--teal); background: color-mix(in srgb, var(--teal) 9%, transparent);
  border-color: color-mix(in srgb, var(--teal) 38%, transparent); }
[data-theme="light"] .lhsp-boost--zero { color: #0b7f8e; }
/* lead paragraph */
.lhsp-lead { margin: 0; font-size: 14.5px; line-height: 1.62; color: var(--text-2); }
.lhsp-lead b { color: var(--text); }
/* benefit rows */
.lhsp-rows { display: flex; flex-direction: column; gap: 4px; }
.lhsp-row { display: flex; align-items: flex-start; gap: 12px; padding: 10px 12px;
  border-radius: 13px; background: var(--fill-1); border: 1px solid var(--border-soft); }
.lhsp-row-ic { flex: none; display: grid; place-items: center; width: 32px; height: 32px;
  border-radius: 10px; color: var(--teal);
  background: color-mix(in srgb, var(--teal) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent); }
.lhsp-row-ic svg { width: 16px; height: 16px; }
.lhsp-row-tx { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.lhsp-row-tx b { font-family: var(--font-display); font-weight: 700; font-size: 13px; color: var(--text); }
.lhsp-row-tx span { font-size: 12.5px; line-height: 1.5; color: var(--muted); }
[data-theme="light"] .lhsp-row { background: #ffffff;
  box-shadow: 0 4px 14px -10px rgba(20, 50, 120, .2); }
/* primary in-body CTA */
.lhsp-ctarow { display: flex; }
.lhsp-cta { width: 100%; justify-content: center; gap: 8px; }
/* trust note */
.lhsp-note { display: flex; align-items: center; gap: 7px; margin: 0; font-size: 11.5px;
  color: var(--muted); }
.lhsp-note svg { width: 12px; height: 12px; flex: none; opacity: .8; }

/* ── DNA signals block (connected DNA only) ── */
.lhsp-risks { display: flex; flex-direction: column; gap: 10px; padding: 13px 13px 14px;
  border-radius: 15px; border: 1px solid color-mix(in srgb, var(--teal) 22%, transparent);
  background:
    radial-gradient(120% 90% at 50% -10%, color-mix(in srgb, var(--teal) 8%, transparent), transparent 60%),
    var(--fill-1); }
[data-theme="light"] .lhsp-risks { background:
    radial-gradient(120% 90% at 50% -10%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 60%),
    #ffffff; }
.lhsp-risks-head { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; }
.lhsp-risks-head svg { width: 15px; height: 15px; color: var(--teal); flex: none; }
.lhsp-risks-head b { font-family: var(--font-display); font-weight: 700; font-size: 13.5px; color: var(--text); }
.lhsp-risks-head span { font-size: 11px; color: var(--muted); flex-basis: 100%; }
.lhsp-chiprow { display: flex; flex-wrap: wrap; gap: 7px; }
.lhsp-chip { appearance: none; display: inline-flex; align-items: center; gap: 8px;
  padding: 7px 11px; border-radius: 999px; cursor: pointer; font: inherit;
  color: var(--text); background: var(--fill-2); border: 1px solid var(--border);
  transition: transform .25s var(--ease-out), border-color .25s, box-shadow .25s; }
.lhsp-chip:hover, .lhsp-chip:focus-visible { transform: translateY(-1px); border-color: var(--border-hi);
  box-shadow: var(--shadow-sm); }
.lhsp-chip:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.lhsp-chip-t { font-family: var(--font-display); font-weight: 700; font-size: 12px; white-space: nowrap; }
.lhsp-chip-tag { font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  padding: 2.5px 8px; border-radius: 999px; white-space: nowrap;
  color: var(--muted); background: var(--fill-1); border: 1px solid var(--border-soft); }
.lhsp-chip.is-risk .lhsp-chip-tag { color: var(--danger, #ff6b81);
  background: color-mix(in srgb, #ff6b81 10%, transparent);
  border-color: color-mix(in srgb, #ff6b81 34%, transparent); }
.lhsp-chip.is-risk { border-color: color-mix(in srgb, #ff6b81 30%, transparent); }
.lhsp-chip.is-watch .lhsp-chip-tag { color: var(--warning);
  background: color-mix(in srgb, var(--warning) 10%, transparent);
  border-color: color-mix(in srgb, var(--warning) 34%, transparent); }
.lhsp-chip.is-good .lhsp-chip-tag { color: var(--shield);
  background: var(--shield-soft);
  border-color: color-mix(in srgb, var(--shield) 32%, transparent); }
[data-theme="light"] .lhsp-chip { background: #ffffff; }
[data-theme="light"] .lhsp-chip.is-risk .lhsp-chip-tag { color: #c2334d; }
[data-theme="light"] .lhsp-chip.is-good .lhsp-chip-tag { color: #067a5e; }

/* ── F229 · G8way Max — the member's most recent movement assessment ── */
.lhsp-g8 { display: flex; flex-direction: column; gap: 12px; padding: 14px 14px 15px;
  border-radius: 15px; border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent);
  background:
    radial-gradient(120% 90% at 50% -10%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 60%),
    var(--fill-1); }
[data-theme="light"] .lhsp-g8 { background:
    radial-gradient(120% 90% at 50% -10%, color-mix(in srgb, var(--teal) 10%, transparent), transparent 60%),
    #ffffff; }
.lhsp-g8-head { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; }
.lhsp-g8-head svg { width: 15px; height: 15px; color: var(--teal); flex: none; }
.lhsp-g8-head b { font-family: var(--font-display); font-weight: 700; font-size: 13.5px; color: var(--text); }
.lhsp-g8-head span { margin-left: auto; font-size: 11px; color: var(--muted); }
.lhsp-g8-grid { display: flex; align-items: stretch; gap: 12px; }
/* the hero grade — gradient number, instrument-style */
.lhsp-g8-grade { flex: none; display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: 2px; min-width: 96px; padding: 10px 14px;
  border-radius: 13px; border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  background: color-mix(in srgb, var(--teal) 7%, transparent); }
.lhsp-g8-num { font-family: var(--font-display); font-weight: 700; font-size: 40px; line-height: 1;
  letter-spacing: -0.04em;
  background: linear-gradient(160deg, #ffffff 8%, #d9fbf5 40%, #9fe8ff 74%, #8fb8ff 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 3px 12px var(--teal-glow)); }
[data-theme="light"] .lhsp-g8-num {
  background: linear-gradient(160deg, #071f4d 0%, #114bd6 55%, #0e9cc4 110%);
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 2px 8px rgba(22, 82, 240, .2)); }
.lhsp-g8-lbl { font-size: 9.5px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;
  color: var(--muted); white-space: nowrap; }
/* strong / caution / at-risk datapoint cells */
.lhsp-g8-cells { flex: 1; display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; min-width: 0; }
.lhsp-g8-cell { display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 1px; padding: 8px 4px; border-radius: 11px; text-align: center;
  background: var(--fill-2); border: 1px solid var(--border-soft); }
.lhsp-g8-cell b { font-family: var(--font-display); font-weight: 700; font-size: 19px; color: var(--text); }
.lhsp-g8-cell span { font-size: 9.5px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--muted); }
.lhsp-g8-cell.is-safe { border-color: color-mix(in srgb, var(--shield) 32%, transparent); }
.lhsp-g8-cell.is-safe b { color: var(--shield); }
[data-theme="light"] .lhsp-g8-cell.is-safe b { color: #067a5e; }
.lhsp-g8-cell.is-watch { border-color: color-mix(in srgb, var(--warning) 34%, transparent); }
.lhsp-g8-cell.is-watch b { color: var(--warning); }
.lhsp-g8-cell.is-risk { border-color: color-mix(in srgb, #ff6b81 34%, transparent); }
.lhsp-g8-cell.is-risk b { color: #ff6b81; }
[data-theme="light"] .lhsp-g8-cell.is-risk b { color: #c2334d; }
[data-theme="light"] .lhsp-g8-cell { background: #ffffff; }
/* trend line */
.lhsp-g8-trend { display: flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 600;
  color: var(--text-2); }
.lhsp-g8-trend svg { width: 13px; height: 13px; flex: none; color: var(--muted); }
.lhsp-g8-trend.is-improving { color: var(--shield); }
.lhsp-g8-trend.is-improving svg { color: var(--shield); }
[data-theme="light"] .lhsp-g8-trend.is-improving { color: #067a5e; }
[data-theme="light"] .lhsp-g8-trend.is-improving svg { color: #067a5e; }
/* focus chips (pain points) */
.lhsp-g8-focus { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 11.5px; color: var(--muted); }
.lhsp-g8-focus i { font-style: normal; font-weight: 700; font-size: 11px; color: var(--text-2);
  padding: 3px 9px; border-radius: 999px; background: var(--fill-2); border: 1px solid var(--border-soft); }
[data-theme="light"] .lhsp-g8-focus i { background: #ffffff; }
/* full report link */
.lhsp-g8-report { display: inline-flex; align-items: center; gap: 7px; width: fit-content;
  font-size: 12.5px; font-weight: 700; color: var(--teal); text-decoration: none;
  padding: 8px 13px; border-radius: 999px;
  background: color-mix(in srgb, var(--teal) 9%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 34%, transparent);
  transition: transform .25s var(--ease-out), box-shadow .25s; }
.lhsp-g8-report:hover { transform: translateY(-1px); box-shadow: var(--shadow-sm); }
.lhsp-g8-report svg { width: 13px; height: 13px; }
[data-theme="light"] .lhsp-g8-report { color: #0b7f8e; }
@media (max-width: 640px) {
  .lhsp-g8-grid { flex-direction: column; }
  .lhsp-g8-grade { min-width: 0; }
}

/* phone — chips get a touch more tap area; rows tighten */
@media (max-width: 640px) {
  .lhsp-chip { padding: 9px 12px; }
  .lhsp-lead { font-size: 14px; }
  .lhsp-statusrow { gap: 7px; }
}
@media (prefers-reduced-motion: reduce) {
  .lhsp-status.is-on .lhsp-dot { animation: none; }
  .lhsp-chip { transition: none; }
}

/* ── REVEAL TIMELINE ── */
/* waiting (pre-reveal, below the fold on mobile): soft dormant silhouette */
.lhs-waiting .lhs-svg, .lhs-waiting .lhs-core, .lhs-waiting .lhs-node { opacity: .45; filter: saturate(.7); }
.lhs-waiting .lhs-rings i, .lhs-waiting .lhs-rings b, .lhs-waiting .lhs-rings s { animation-play-state: paused; }
/* P1 · AWAKEN — sharpen into focus, chamber pulse, rings begin */
.lhs-p1 .lhs-svg, .lhs-p1 .lhs-core, .lhs-p1 .lhs-node { opacity: 1; filter: none;
  transition: opacity .5s var(--ease-out), filter .5s var(--ease-out); }
.lhs-p1 .lhs-chamber-rim { animation: lhsChamberPulse .6s var(--ease-out) 1; }
@keyframes lhsChamberPulse { 0% { stroke-width: 1.6; opacity: .85; } 45% { stroke-width: 4; opacity: 1; } 100% { stroke-width: 1.6; opacity: .85; } }
/* P2 · SCAN — nodes activate as the band passes (JS adds .lhs-lit per node) */
.lhs-node.lhs-lit .lhs-node-ring { border-color: var(--border-hi);
  box-shadow: var(--glow-teal), var(--shadow-sm); transform: scale(1.12); }
.lhs-node.lhs-lit .lhs-node-ic { color: var(--teal); opacity: 1; }
.lhs-p2 .lhs-link { animation: lhsLinkFlash 1.5s var(--ease-out) 1; }
@keyframes lhsLinkFlash { 0%, 100% { opacity: .34; } 55% { opacity: .9; } }
/* P3/P4 handled inline by JS (arc dasharray + digit resolution) */

/* paused (hidden tab) — freeze all ambience */
.lhs-paused, .lhs-paused * { animation-play-state: paused !important; }

/* reduced motion — static final state, ambience off */
@media (prefers-reduced-motion: reduce) {
  .lhs-stage, .lhs-node, .lhs-spark, .lhs-spark::after, .lhs-rings i, .lhs-rings b,
  .lhs-rings s, .lhs-sweep, .lhs-link,
  .lhs-bloom, .lhs-mote, .lhs-glint, .lhs-num, .lhs-chamber-glow, .lhs-chamber-ticks,
  .lhs-chamber-detail, .lhs-ground { animation: none !important; }
  .lhs-glint { opacity: 0 !important; }
  .lhs-sweep { opacity: 0 !important; }
  .lhs-stars s { opacity: 0 !important; }
  .lhs-waiting .lhs-svg, .lhs-waiting .lhs-core, .lhs-waiting .lhs-node { opacity: 1; filter: none; }
}


/* F113 · BILLION-DOLLAR PLAN HEADLINE — the dynamic "N supplements in your plan"
   + "Shield-screened for you" caption beneath the product fan. It used to be
   plain text that looked "stuck"; now it's a hero stat (an oversized gradient
   count) headline, a glassy verified Shield badge, and a brand-tinted CTA pill.
   Fully tokenized + dual-theme; clamp/vw sizing reads premium on computer,
   tablet AND mobile. */
.ov-shc-cap { position: relative; z-index: 1; text-align: center; display: flex; flex-direction: column;
  align-items: center; gap: clamp(9px, 1.1vw, 13px); }

/* hero stat — an oversized gradient number stacked over its refined label */
.ov-shc-count { display: flex; flex-direction: column; align-items: center; gap: 1px; line-height: 1; }
.ov-shc-count-n { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.03em;
  font-size: clamp(34px, 4vw, 48px); line-height: 0.95;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  filter: drop-shadow(0 5px 18px var(--teal-glow)); }
/* dark mode — use the SAME light-mode white-blue gradient so the number pops
   identically in both themes (Jacob's ask: make the "6" light-mode in dark too) */
:root:not([data-theme="light"]) .ov-shc-count-n {
  background: linear-gradient(120deg, #eaf9ff 0%, #a8d4ff 46%, #7ab4ff 100%);
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 2px 6px rgba(9,26,64,.32)) drop-shadow(0 6px 18px rgba(122,180,255,.5)); }
/* light mode only — a much lighter white-blue so the number pops off the ripple */
[data-theme="light"] .ov-shc-count-n {
  background: linear-gradient(120deg, #eaf9ff 0%, #a8d4ff 46%, #7ab4ff 100%);
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 2px 6px rgba(9,26,64,.32)) drop-shadow(0 6px 18px rgba(122,180,255,.5)); }
.ov-shc-count-l { font-family: var(--font-display); font-weight: 600; letter-spacing: 0.005em;
  font-size: clamp(13px, 1.45vw, 15.5px); color: var(--text-2); }
/* no-plan fallback: the label itself becomes the gradient headline */
.ov-shc-count-l--solo { font-weight: 700; font-size: clamp(18px, 2.2vw, 24px); letter-spacing: -0.02em;
  color: transparent; background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; }

/* verified Shield badge — glassy shield-tinted pill, micro-caps */
.ov-shc-shield { display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 5px 13px 5px 11px; border-radius: 999px;
  font-size: 11px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; white-space: nowrap;
  color: var(--shield); background: var(--shield-soft);
  border: 1px solid color-mix(in srgb, var(--shield) 38%, transparent);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--shield) 7%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, 0.12); }
.ov-shc-shield svg { width: 13px; height: 13px; flex: none; color: var(--shield);
  filter: drop-shadow(0 0 6px var(--shield-glow)); }

/* CTA — brand-tinted pill with a primary-action feel */
.ov-shc-cta { display: inline-flex; align-items: center; gap: 6px; margin-top: 1px;
  font-size: 12.5px; font-weight: 700; color: var(--text);
  padding: 7px 15px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--teal) 30%, var(--border));
  background: linear-gradient(180deg, color-mix(in srgb, var(--teal) 9%, transparent), transparent), var(--fill-1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
  transition: color .2s, border-color .2s, background .2s, box-shadow .2s, transform .2s; }
.ov-shc-cta svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
.ov-shc-cta svg:last-child { transition: transform .25s var(--ease-out); }
@media (hover: hover) {
  .ov-showcase:hover .ov-shc-cta { color: var(--teal); border-color: var(--border-hi);
    background: var(--teal-soft); box-shadow: var(--glow-teal), inset 0 1px 0 rgba(255, 255, 255, 0.10);
    transform: translateY(-1px); }
  .ov-showcase:hover .ov-shc-cta svg:last-child { transform: translateX(3px); }
  .ov-showcase--nodes-only:hover .ov-shc-cta { color: var(--text); border-color: color-mix(in srgb, var(--teal) 30%, var(--border));
    background: linear-gradient(180deg, color-mix(in srgb, var(--teal) 9%, transparent), transparent), var(--fill-1);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); transform: none; }
  .ov-showcase--nodes-only:hover .ov-shc-cta svg:last-child { transform: none; }
  /* dark mode — hover fills the CTA the SAME green as light mode, black text/icons */
  :root:not([data-theme="light"]) .ov-showcase:hover .ov-shc-cta {
    color: #0c1320;
    background: color-mix(in srgb, #16c08a 24%, #fff);
    border-color: color-mix(in srgb, #16c08a 50%, transparent);
    box-shadow: 0 10px 24px -13px color-mix(in srgb, #16c08a 62%, transparent), inset 0 1px 0 rgba(255, 255, 255, .55); }
  :root:not([data-theme="light"]) .ov-showcase:hover .ov-shc-cta svg { color: #0c1320; }
  :root:not([data-theme="light"]) .ov-showcase--nodes-only:hover .ov-shc-cta { color: var(--text);
    background: linear-gradient(180deg, color-mix(in srgb, var(--teal) 9%, transparent), transparent), var(--fill-1);
    border-color: color-mix(in srgb, var(--teal) 30%, var(--border)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); }
  :root:not([data-theme="light"]) .ov-showcase--nodes-only:hover .ov-shc-cta svg { color: var(--teal); }
}
/* light mode — on the frosted plate these captions read WHITE; the CTA flips to
   black only while the whole showcase is hovered (its pill fills green then) */
[data-theme="light"] .ov-shc-shield { color: #fff; }
[data-theme="light"] .ov-shc-shield svg { color: #fff; filter: none; }
[data-theme="light"] .ov-shc-cta { color: #fff; }
[data-theme="light"] .ov-shc-cta svg { color: #fff; }
@media (hover: hover) {
  /* hover the showcase → the CTA fills green, text + icons flip to black */
  [data-theme="light"] .ov-showcase:hover .ov-shc-cta {
    color: #0c1320;
    background: color-mix(in srgb, #16c08a 24%, #fff);
    border-color: color-mix(in srgb, #16c08a 50%, transparent);
    box-shadow: 0 10px 24px -13px color-mix(in srgb, #16c08a 62%, transparent), inset 0 1px 0 rgba(255, 255, 255, .55); }
  [data-theme="light"] .ov-showcase:hover .ov-shc-cta svg { color: #0c1320; }
  [data-theme="light"] .ov-showcase--nodes-only:hover .ov-shc-cta { color: #fff;
    background: linear-gradient(180deg, color-mix(in srgb, var(--teal) 9%, transparent), transparent), var(--fill-1);
    border-color: color-mix(in srgb, var(--teal) 30%, var(--border)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); }
  [data-theme="light"] .ov-showcase--nodes-only:hover .ov-shc-cta svg { color: #fff; }
}

/* COUNCIL FIX (light) — the count + Shield badge + CTA cluster no longer floats
   orphaned: a frosted deep-glass plate grounds it beside the polished left cards
   and lifts every caption to full contrast, while the white-blue hero number pops
   even harder against the darker plate. */
[data-theme="light"] .ov-shc-cap {
  padding: clamp(13px, 1.5vw, 18px) clamp(20px, 2.2vw, 28px) clamp(15px, 1.7vw, 20px);
  border-radius: 22px;
  background: linear-gradient(180deg,
      color-mix(in srgb, #0e2748 44%, transparent),
      color-mix(in srgb, #0a1c34 54%, transparent));
  border: 1px solid color-mix(in srgb, #7ab4ff 30%, transparent);
  box-shadow: 0 22px 48px -24px rgba(8, 20, 44, .55),
              inset 0 1px 0 rgba(255, 255, 255, .16);
  -webkit-backdrop-filter: blur(13px) saturate(1.1); backdrop-filter: blur(13px) saturate(1.1);
}
/* the "supplements in your plan" caption reads pale-white on the plate (was a
   low-contrast grey floating on the ripple) */
[data-theme="light"] .ov-shc-count-l { color: color-mix(in srgb, #eaf3ff 94%, transparent); }

@keyframes ovShcFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
@media (prefers-reduced-motion: reduce) { .lhs-stage { animation: none; } }

/* F217 · computer — the Living Health Shield breathes in the score card's right
   half with generous negative space; nothing overlaps nav/CTA/content below. */
@media (min-width: 1025px) {
  .ov-showcase { --shc-scale: 1; }
  .ov-card.ov-score-card { overflow: visible; }
  .ov-hero { margin: 10px 0 2px; }
  .ov-card.ov-score-card { padding-top: 6px; }
  .ov-showcase--lhs { padding-bottom: clamp(28px, 2.6vw, 44px); gap: clamp(20px, 2vw, 30px); }
}

/* F082 · HEALTH TREND — the score-trajectory micro-chart that fills the hero
   card's open real estate. Premium glass panel: a gradient sparkline of the
   member's real check-ins drawing in toward the Strong-75 horizon, latest
   point pulsing "live." Tokenized, dual-theme, reduced-motion safe. */
.ov-trend { position: relative; width: 100%; display: flex; flex-direction: column; gap: 11px;
  padding: 15px 16px 14px; border-radius: var(--r-md); text-align: left; overflow: hidden;
  background:
    radial-gradient(120% 130% at 0% 0%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 46%),
    radial-gradient(130% 140% at 100% 100%, color-mix(in srgb, var(--violet) 9%, transparent), transparent 48%),
    linear-gradient(180deg, color-mix(in srgb, var(--surface-2) 78%, transparent),
                            color-mix(in srgb, var(--surface) 88%, transparent));
  border: 1px solid var(--border);
  box-shadow: var(--shadow-sm), inset 0 1px 0 color-mix(in srgb, #ffffff 6%, transparent);
  animation: ovTrIn .6s var(--ease-out) both; }
.ov-trend::before { content: ''; position: absolute; inset: 0 0 auto 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--teal) 55%, transparent), transparent); opacity: .6; }
@keyframes ovTrIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
/* F094 · on the computer, halve the trend panel's width so the check-in points
   sit closer together and the curve reads tighter (it's percentage-positioned,
   so a narrower box compresses everything). Left-aligned; phones stay full-width.
   F098 · +40px wider on computer only (100px → 140px).
   F118 · trimmed 140px → 40px so the widget edge no longer overlaps the castle. */
@media (min-width: 700px) {
  .ov-score-left > .ov-trend { width: calc(50% + 40px); align-self: flex-start; }
}
/* F245 · DESKTOP ONLY — the hero masthead was removed (F243), so the Next Move +
   Health Trend cards now FILL the full left column instead of the old narrow
   calc(50% + 40px). This balances the two-column layout so the shield on the
   right no longer looks oversized against a thin left rail. The left column
   already stops short of the shield (its own grid track), so 100% never overlaps
   the fortress. Scoped ≥1025px so tablet/mobile single-column stacking is
   untouched; the higher specificity + source order beats the F118 fallback. */
@media (min-width: 1121px) {
  .ov-score-card .ov-score-row > .ov-nextmove,
  .ov-score-card .ov-score-row > .ov-plancard { max-width: 90%; }
  .ov-score-card .ov-score-left > .ov-trend { width: 90%; }
  .ov-score-card .ov-score-left > .ov-cta { width: 90%; align-self: flex-start; }
}
/* F414 · thin desktop — the left-rail cards claim the full column */
@media (min-width: 1121px) and (max-width: 1320px) {
  .ov-score-card .ov-score-row > .ov-nextmove,
  .ov-score-card .ov-score-row > .ov-plancard { max-width: 100%; }
  .ov-score-card .ov-score-left > .ov-trend { width: 100%; }
  .ov-score-card .ov-score-left > .ov-cta { width: 100%; }
}
/* the panel is no longer one big button — each point + the footer button are the
   interactive bits, so the container stays a calm glass surface. */
.ov-trend .ov-tr-chart[data-trend-chart] { cursor: crosshair; }

.ov-tr-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.ov-tr-eyebrow { display: inline-flex; align-items: center; gap: 7px; font-size: 11px; font-weight: 800;
  letter-spacing: .08em; text-transform: uppercase; color: var(--text-2); }
.ov-tr-eyebrow svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
.ov-tr-count { flex: none; font-size: 11px; font-weight: 700; color: var(--muted);
  background: var(--fill-2); padding: 3px 9px; border-radius: 999px; white-space: nowrap;
  border: 1px solid var(--border-soft); }

.ov-tr-chart { position: relative; width: 100%; height: clamp(96px, 21vw, 116px); touch-action: pan-y;
  --tr-label-lane: 18px; }
.ov-tr-glowfield { position: absolute; inset: 6% -2% 14% -2%; z-index: 0; pointer-events: none; opacity: .75;
  background: radial-gradient(62% 92% at 50% 72%, color-mix(in srgb, var(--blue-2) 13%, transparent), transparent 72%);
  filter: blur(9px); }
.ov-tr-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; overflow: visible; z-index: 1; }
.ov-tr-band { opacity: 0; animation: ovTrArea .9s var(--ease-out) .25s forwards; }
.ov-tr-target { stroke: color-mix(in srgb, var(--blue) 48%, transparent); stroke-width: 1.4; stroke-dasharray: 3 4; }
.ov-tr-area { opacity: 0; animation: ovTrArea .9s var(--ease-out) .35s forwards; }
@keyframes ovTrArea { to { opacity: 1; } }
/* neon depth: a wide translucent under-stroke (uniform via non-scaling-stroke) */
.ov-tr-glowline { opacity: 0; animation: ovTrGlow 1.1s var(--ease-out) .5s forwards; }
@keyframes ovTrGlow { to { opacity: .5; } }
.ov-tr-line { stroke-dasharray: 1; stroke-dashoffset: 1; animation: ovTrDraw 1.25s var(--ease-out) .12s forwards; }
@keyframes ovTrDraw { to { stroke-dashoffset: 0; } }

/* Strong-75 horizon flag — lives in its own top lane so it never overlaps dots */
.ov-tr-target-lb { position: absolute; left: 0; top: 0 !important; transform: none; z-index: 5; pointer-events: none;
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 9.5px; font-weight: 800; letter-spacing: .02em; padding: 2px 8px 2px 6px; border-radius: 999px;
  color: color-mix(in srgb, var(--blue) 82%, var(--text));
  background: color-mix(in srgb, var(--blue) 14%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--blue) 26%, transparent);
  box-shadow: 0 4px 12px -8px color-mix(in srgb, var(--blue) 60%, transparent); }
.ov-tr-target-lb svg { width: 11px; height: 11px; flex: none; }

/* a faint "you are here" column under the latest check-in */
.ov-tr-nowline { position: absolute; top: 6%; bottom: 8%; left: 0; width: 1.5px; z-index: 1; pointer-events: none;
  transform: translateX(-50%);
  background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--teal) 42%, transparent) 26%,
                                      color-mix(in srgb, var(--teal) 16%, transparent)); }

/* §11.6 · scoring-model baseline break — dashed boundary + honest note so an
   RC7→RC8 recalibration never reads as a health change. Tokenized dual-theme. */
.ov-tr-break { position: absolute; top: 4%; bottom: 10%; left: 0; width: 0; z-index: 1; pointer-events: none;
  border-left: 1.5px dashed color-mix(in srgb, var(--violet) 55%, transparent); transform: translateX(-50%); }
.ov-tr-break-lb { position: absolute; top: 2%; transform: translate(-50%, -2px); z-index: 2; pointer-events: none;
  font-size: 9.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap;
  color: color-mix(in srgb, var(--violet) 78%, var(--text)); padding: 2px 7px; border-radius: 999px;
  background: color-mix(in srgb, var(--violet) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--violet) 30%, transparent); }
.ov-tr-break-note { display: flex; align-items: flex-start; gap: 7px; margin: 8px 2px 0;
  font-size: 11.5px; line-height: 1.45; color: var(--muted); }
.ov-tr-break-note svg { width: 13px; height: 13px; flex: none; margin-top: 1.5px;
  color: color-mix(in srgb, var(--violet) 70%, var(--text)); }

/* live crosshair + floating tooltip (score · date · Δ) */
.ov-tr-cross { position: absolute; top: 4%; bottom: 12%; width: 1.5px; transform: translateX(-50%); z-index: 2;
  background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--blue) 60%, transparent), transparent);
  opacity: 0; transition: opacity .18s; pointer-events: none; }
.ov-tr-cross.on { opacity: 1; }
.ov-tr-tip { position: absolute; transform: translate(-50%, calc(-100% - 13px)); z-index: 6; pointer-events: none;
  display: inline-flex; align-items: baseline; gap: 6px; white-space: nowrap;
  padding: 5px 9px; border-radius: 10px; background: var(--surface-hi); border: 1px solid var(--border-hi);
  box-shadow: var(--shadow-md); opacity: 0; transition: opacity .16s var(--ease-out); }
.ov-tr-tip.on { opacity: 1; }
.ov-tr-tip b { font-family: var(--font-display); font-weight: 700; font-size: 14px; color: var(--text); }
.ov-tr-tip span { font-size: 10.5px; color: var(--muted); }
.ov-tr-tip em { font-style: normal; font-size: 10.5px; font-weight: 800; padding: 1px 5px; border-radius: 999px; }
.ov-tr-tip em.up { color: var(--teal); background: var(--teal-soft); }
.ov-tr-tip em.down { color: var(--danger); background: var(--danger-soft); }
.ov-tr-tip::after { content: ''; position: absolute; left: 50%; bottom: -5px; width: 9px; height: 9px;
  transform: translateX(-50%) rotate(45deg); background: var(--surface-hi);
  border-right: 1px solid var(--border-hi); border-bottom: 1px solid var(--border-hi); }

/* the latest value rides above the now-point — a premium gradient pill */
.ov-tr-val.now { position: absolute; transform: translate(-50%, calc(-100% - 13px)); pointer-events: none; z-index: 5;
  font-family: var(--font-display); font-weight: 800; font-size: 12.5px; line-height: 1; color: #fff;
  padding: 4px 9px; border-radius: 999px; letter-spacing: .01em;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 6px 16px -7px color-mix(in srgb, var(--blue-2) 72%, transparent), inset 0 1px 0 rgba(255,255,255,.32); }
.ov-tr-val.now.b-building { background: linear-gradient(135deg, var(--blue-2), var(--violet)); }
.ov-tr-val.now.b-focus { background: linear-gradient(135deg, var(--warning), color-mix(in srgb, var(--warning) 55%, var(--danger))); }

/* INTERACTIVE points — real buttons, band-colored, with a generous tap target */
.ov-tr-dot { position: absolute; appearance: none; -webkit-appearance: none; padding: 0; margin: 0;
  width: 11px; height: 11px; border-radius: 50%; transform: translate(-50%, -50%);
  border: 2px solid var(--surface); background: var(--blue-2); cursor: pointer; z-index: 4;
  box-shadow: 0 1px 4px rgba(8,16,32,.35);
  opacity: 0; animation: ovTrDot .42s var(--ease-out) forwards; animation-delay: calc(.5s + var(--di, 0) * .07s);
  transition: width .18s var(--ease-spring), height .18s var(--ease-spring), box-shadow .2s; }
.ov-tr-dot::before { content: ''; position: absolute; inset: -9px; border-radius: 50%; }   /* invisible hit area */
.ov-tr-dot.b-strong { background: var(--teal); }
.ov-tr-dot.b-building { background: var(--blue-2); }
.ov-tr-dot.b-focus { background: var(--warning); }
@keyframes ovTrDot { from { opacity: 0; transform: translate(-50%, -50%) scale(.4); } to { opacity: 1; transform: translate(-50%, -50%) scale(1); } }
@media (hover: hover) { .ov-tr-dot:hover { width: 16px; height: 16px; box-shadow: 0 3px 12px rgba(8,16,32,.45); } }
.ov-tr-dot.active { width: 16px; height: 16px; box-shadow: 0 3px 12px rgba(8,16,32,.45); }
.ov-tr-dot:focus-visible { outline: 2px solid var(--blue); outline-offset: 3px; }
.ov-tr-dot.now { width: 13px; height: 13px; background: radial-gradient(circle, #fff 0 24%, var(--teal) 32%);
  box-shadow: 0 0 0 3px var(--surface), 0 0 16px 2px var(--teal-glow); }
.ov-tr-dot.now::after { content: ''; position: absolute; inset: -5px; border-radius: 50%;
  border: 2px solid var(--teal); opacity: .6; animation: ovTrPulse 2.6s var(--ease-out) infinite; pointer-events: none; }
@keyframes ovTrPulse { 0% { transform: scale(.55); opacity: .7; } 70%, 100% { transform: scale(1.5); opacity: 0; } }

.ov-tr-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.ov-tr-since { font-size: 11.5px; color: var(--muted); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-tr-now { flex: none; font-size: 12px; color: var(--text-2); }
.ov-tr-now b { font-family: var(--font-display); font-weight: 700; color: var(--text); }
.ov-tr-allbtn { flex: none; appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 700;
  color: var(--teal); padding: 5px 11px; border-radius: 999px; background: var(--teal-soft);
  border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  transition: background .18s, border-color .18s, transform .18s var(--ease-spring); }
.ov-tr-allbtn svg { width: 13px; height: 13px; }
.ov-tr-allbtn svg:last-child { transition: transform .25s var(--ease-out); }
.ov-tr-allbtn:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (hover: hover) {
  .ov-tr-allbtn:hover { background: color-mix(in srgb, var(--teal) 15%, transparent);
    border-color: color-mix(in srgb, var(--teal) 48%, transparent); transform: translateY(-1px); }
  .ov-tr-allbtn:hover svg:last-child { transform: translateX(3px); }
}

@media (prefers-reduced-motion: reduce) {
  .ov-trend { animation: none; }
  .ov-tr-line, .ov-tr-area, .ov-tr-band, .ov-tr-glowline, .ov-tr-dot { animation: none; opacity: 1; stroke-dashoffset: 0; }
  .ov-tr-glowline { opacity: .5; }
  .ov-tr-dot { transform: translate(-50%, -50%); }
  .ov-tr-dot.now::after { animation: none; }
}

/* F082b · per-check-in popup (dsCheckin) — an elegant mini-report for one point */
.ds-modal.tone-trend .ds-ico, .ds-modal.tone-trend .ds-tag { color: var(--blue); }
.dsk-hero { display: flex; align-items: center; gap: 18px; margin-bottom: 16px; }
.dsk-ring { --p: 0; position: relative; flex: none; width: 96px; height: 96px; border-radius: 50%;
  background: conic-gradient(var(--dsk-c, var(--blue-2)) calc(var(--p) * 1%), var(--track) 0); display: grid; place-items: center; }
.dsk-ring.b-strong { --dsk-c: var(--teal); }
.dsk-ring.b-building { --dsk-c: var(--blue-2); }
.dsk-ring.b-focus { --dsk-c: var(--warning); }
.dsk-ring-in { position: relative; z-index: 1; width: 76px; height: 76px; border-radius: 50%; background: var(--surface);
  display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1; }
.dsk-ring-num { font-family: var(--font-display); font-weight: 700; font-size: 28px; color: var(--text); }
.dsk-ring-in small { font-size: 10px; color: var(--muted); margin-top: 3px; letter-spacing: .04em; }
.dsk-meta { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.dsk-grade-row { display: flex; align-items: center; gap: 10px; }
.dsk-band { font-family: var(--font-display); font-weight: 600; font-size: 16px; color: var(--text); }
.dsk-band.b-strong { color: var(--teal); }
.dsk-band.b-building { color: var(--blue); }
.dsk-band.b-focus { color: var(--warning); }
.dsk-delta { display: inline-flex; align-items: center; gap: 6px; width: fit-content;
  font-size: 12.5px; font-weight: 600; padding: 4px 10px; border-radius: 999px; }
.dsk-delta svg { width: 14px; height: 14px; flex: none; }
.dsk-delta.pos { color: var(--teal); background: var(--teal-soft); }
.dsk-delta.neg { color: var(--danger); background: var(--danger-soft); }
.dsk-delta.neu { color: var(--muted); background: var(--fill-2); }
.dsk-pos { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--muted); }
.dsk-pos svg { width: 13px; height: 13px; flex: none; }
.dsk-rows { list-style: none; margin: 0 0 14px; padding: 0; display: flex; flex-direction: column; gap: 11px; }
.dsk-row { display: flex; gap: 11px; align-items: flex-start; }
.dsk-row-ic { flex: none; width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center;
  color: var(--blue); background: var(--blue-soft); border: 1px solid color-mix(in srgb, var(--blue) 22%, transparent); }
.dsk-row-ic svg { width: 16px; height: 16px; }
.dsk-row-tx { font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
.dsk-row-tx b { display: block; font-size: 13px; color: var(--text); font-weight: 650; margin-bottom: 1px; }
.dsk-note { font-size: 11.5px; line-height: 1.5; color: var(--muted); }
@media (max-width: 480px) {
  .dsk-ring { width: 84px; height: 84px; } .dsk-ring-in { width: 66px; height: 66px; } .dsk-ring-num { font-size: 24px; }
}

/* F217 · tablet + mobile — the shield scales proportionally, secondary rings
   soften, and it never causes horizontal overflow. */
@media (max-width: 1024px) {
  .lhs-stage { width: clamp(300px, 66vw, 430px); margin: 0 auto; }
  .lhs-rings { opacity: .6; }
  .ov-showcase { gap: clamp(20px, 5vw, 32px); }
  .lhs-num { font-size: clamp(48px, 8.4vw, 64px); }
  .lhs-core--traj .lhs-num { font-size: clamp(46px, 8.4vw, 62px); }
  .lhs-crown b { font-size: clamp(14.5px, 3vw, 21px); }
  .lhs-outof { font-size: 13px; }
  .lhs-traj-label { font-size: 11px; }
  .lhs-traj-num b { font-size: clamp(28px, 5.8vw, 37px); }
  .lhs-traj-num i { font-size: 12.5px; }
  .lhs-traj-note { font-size: 10.5px; }
}
@media (max-width: 460px) {
  /* the shield claims (nearly) the FULL SCREEN width on phones — the showcase
     stretches, its padding dissolves, the score card stops clipping, and the
     stage reaches through the card padding AND the page gutter. A much bigger
     plate = every line of text inside it has real room. */
  .ov-shield-col > .ov-showcase { align-self: stretch; }
  .ov-showcase--lhs { padding-left: 0; padding-right: 0; }
  .ov-card.ov-score-card { overflow: visible; }
  .lhs-stage { width: calc(100% + 58px); margin: 0 -29px; }
  .ov-shc-glow { opacity: .7; }
  /* keep the score highly legible on the smallest phones */
  .lhs-num { font-size: clamp(44px, 14vw, 54px); }
  .lhs-delta { font-size: 9.5px; }
  /* the trajectory block tucks in so it stays inside the score chamber */
  /* lift the whole core a touch — the age note then lands where the plate is
     still wide, so it never has to shrink into the tapering tip */
  .lhs-core--traj { top: 47.5%; }
  .lhs-core--traj .lhs-num { font-size: clamp(42px, 13vw, 52px); }
  .lhs-crown b { font-size: clamp(13.5px, 4.4vw, 17px); }
  .lhs-outof { font-size: 12px; margin-top: 0; }
  .lhs-traj { width: 112%; margin-top: 3px; }
  .lhs-traj-rule { margin-bottom: 4px; }
  .lhs-traj-label { font-size: 9.5px; letter-spacing: .2em; }
  .lhs-traj-num b { font-size: 26px; }
  .lhs-traj-num i { font-size: 12px; }
  .lhs-traj-note { font-size: 10px; margin-top: 1px; }

  /* fewer motes / no lattice cost on small GPUs */
  .lhs-mote-4, .lhs-mote-5, .lhs-mote-6 { display: none; }
}

/* current program */
/* F161 · single-column: tier selector row on top, live panel below. */
.ov-program-body { display: block; }
.ov-tierpick { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.ov-tier { position: relative; display: flex; align-items: center; gap: 11px; width: 100%; min-width: 0; text-align: left; padding: 13px 14px;
  border-radius: var(--r-md); border: 1px solid var(--border); background: var(--fill-1); cursor: pointer; color: var(--text);
  transition: border-color .2s, background .2s, box-shadow .2s, transform .2s; }
.ov-tier:hover { background: var(--fill-2); transform: translateY(-1px); }
.ov-tier.on { border-color: var(--border-hi); background: var(--teal-soft); box-shadow: var(--glow-teal); }
.ov-tier-ic { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 10px; background: var(--fill-2); color: var(--teal); flex: none; }
.ov-tier.on .ov-tier-ic { background: var(--grad-brand); color: var(--ink-on-brand); }
.ov-tier-ic svg { width: 18px; height: 18px; }
.ov-tier-tx { display: flex; flex-direction: column; flex: 1; min-width: 0; }
.ov-tier-tx b { font-size: 14.5px; color: var(--text); }
.ov-tier-tx small { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-tier-price { display: flex; flex-direction: column; align-items: flex-end; flex: none; font-family: var(--font-display); font-weight: 700; font-size: 17px; color: var(--text); line-height: 1; }
.ov-tier.on .ov-tier-price { background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.ov-tier-price small { font-size: 10px; font-weight: 600; color: var(--muted); -webkit-text-fill-color: var(--muted); margin-top: 2px; }
.ov-tier-flag { position: absolute; top: -9px; right: 10px; display: inline-flex; align-items: center; gap: 4px;
  font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--ink-on-brand);
  padding: 3px 9px; border-radius: 999px; background: var(--grad-brand); box-shadow: 0 3px 10px color-mix(in srgb, var(--teal) 34%, transparent); }
.ov-tier-flag svg { width: 10px; height: 10px; }

/* F161 · the live tier panel (price + product cards + metrics) */
.ov-tier-panel { margin-top: 16px; }
.ov-tp-in { animation: ovTpIn .34s var(--ease-out, ease-out); }
@keyframes ovTpIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.ov-tp-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; margin-bottom: 14px; }
.ov-tp-price-big b { font-size: clamp(26px, 5vw, 34px); }
.ov-tp-fit { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 700;
  padding: 7px 13px; border-radius: 999px; color: var(--teal);
  background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent); }
.ov-tp-fit svg { width: 14px; height: 14px; }
.ov-tp-fit.fit-stretch { color: var(--blue-2); background: color-mix(in srgb, var(--blue-2) 8%, transparent); border-color: color-mix(in srgb, var(--blue-2) 26%, transparent); }
.ov-tp-fit.fit-above { color: var(--warning, #f5a623); background: color-mix(in srgb, var(--warning, #f5a623) 8%, transparent); border-color: color-mix(in srgb, var(--warning, #f5a623) 30%, transparent); }
.ov-tp-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.ov-tp-card { display: flex; flex-direction: column; text-align: left; padding: 0 0 12px; cursor: pointer;
  border-radius: 14px; overflow: hidden; border: 1px solid var(--border); background: var(--fill-1);
  transition: border-color .2s, transform .2s, box-shadow .2s; }
.ov-tp-card:hover { border-color: var(--border-hi); transform: translateY(-3px); box-shadow: 0 10px 26px rgba(2,8,26,.2); }
[data-theme="light"] .ov-tp-card { background: #fff; }
[data-theme="light"] .ov-tp-card:hover { box-shadow: 0 8px 22px rgba(16,42,98,.12); }
/* half-height product banner (was 16/10) — the text block keeps its own scale */
.ov-tp-media { position: relative; aspect-ratio: 16 / 5; background: var(--fill-2); display: grid; place-items: center; overflow: hidden; }
.ov-tp-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* F447 · square transparent capsule renders: contain (never crop the pill) on
   a soft brand-tinted stage instead of edge-to-edge cover. */
.ov-tp-media.is-capsule { background:
  radial-gradient(90% 130% at 50% 118%, color-mix(in srgb, var(--teal) 13%, transparent), transparent 62%),
  var(--fill-2); }
.ov-tp-media.is-capsule .ov-tp-img { object-fit: contain; padding: 6px 0;
  filter: drop-shadow(0 5px 9px rgba(2, 8, 26, .22)); }
.ov-tp-media.no-img .ov-tp-img { display: none; }
.ov-tp-media:not(.no-img) .ov-tp-fb { display: none; }
.ov-tp-fb { color: var(--teal); opacity: .5; }
.ov-tp-fb svg { width: 30px; height: 30px; }
.ov-tp-tx { display: flex; flex-direction: column; gap: 2px; padding: 11px 12px 0; }
.ov-tp-tx b { font-size: 13.5px; color: var(--text); font-weight: 700; line-height: 1.25; }
.ov-tp-tx small { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.ov-tp-price { font-size: 13px; font-weight: 700; color: var(--teal); margin-top: 3px; }
/* F370b · price + "Why this fits you" share the card's bottom white row; the
   why-cue is an outline PILL in the BOTTOM-RIGHT corner, to the right of the
   price. Frosted brand pill (mirrors the explainer tag) — uniform text size. */
.ov-tp-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 4px; }
.ov-tp-foot .ov-tp-price { margin-top: 0; }
/* ══ F452 · THE "WHY" PILL ═══════════════════════════════════════════════════
   A gradient-rim capsule (teal → violet) over a themed glass core with a
   glowing sparkle cluster. The rim is a 1.5px padding ring so the gradient
   never touches the label; the core carries the theme so light and dark are
   both first-class. Everything is token-driven — no hardcoded brand hex.
   Markup: .ov-tp-why-foot > .wf-core > (svg.sparkles + .wf-t) */
.ov-tp-why-foot {
  --wf-rim: 1.5px;
  position: relative; isolation: isolate;
  display: inline-flex; align-items: center; flex: none;
  padding: var(--wf-rim); border-radius: 999px; border: 0;
  background: linear-gradient(115deg, var(--teal), var(--blue-2, #5b8dff) 46%, var(--violet));
  box-shadow: 0 3px 12px -6px color-mix(in srgb, var(--teal) 60%, transparent);
  white-space: nowrap; cursor: pointer; -webkit-tap-highlight-color: transparent;
  transition: transform .22s var(--ease-out, ease), box-shadow .22s var(--ease-out, ease), filter .22s ease;
}
/* the soft outer bloom — painted behind the pill, revealed on hover/focus */
.ov-tp-why-foot::after {
  content: ''; position: absolute; inset: -5px; z-index: -1; border-radius: inherit;
  background: linear-gradient(115deg, var(--teal), var(--violet));
  filter: blur(9px); opacity: 0;
  transition: opacity .24s var(--ease-out, ease);
}
.ov-tp-why-foot .wf-core {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px 5px 9px; border-radius: inherit;
  background: var(--surface, #fff);
  transition: background .22s ease;
}
.ov-tp-why-foot .wf-t {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 10.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  line-height: 1;
  background: linear-gradient(100deg, var(--teal), var(--violet), var(--teal));
  background-size: 220% 100%; background-position: 0 0;
  -webkit-background-clip: text; background-clip: text;
  color: transparent; -webkit-text-fill-color: transparent;
  transition: background-position .6s var(--ease-out, ease);
}
.ov-tp-why-foot svg { width: 13px; height: 13px; flex: none; color: var(--teal);
  filter: drop-shadow(0 0 3px color-mix(in srgb, var(--teal) 55%, transparent)); }
/* the three stars twinkle out of phase — subtle, never busy */
.ov-tp-why-foot .wsp { transform-box: fill-box; transform-origin: center;
  animation: wfTwinkle 3.4s var(--ease-out, ease-in-out) infinite; }
.ov-tp-why-foot .wsp-2 { animation-delay: .5s; }
.ov-tp-why-foot .wsp-3 { animation-delay: 1.05s; }
@keyframes wfTwinkle {
  0%, 62%, 100% { opacity: .82; transform: scale(1); }
  22%           { opacity: 1;   transform: scale(1.16); }
}
/* LEVEL 1 — hovering the CARD lifts the pill and lights the bloom (the cue) */
.ov-tp-card:hover .ov-tp-why-foot, .ov-tp-card:focus-visible .ov-tp-why-foot,
.pcx-prod:hover .ov-tp-why-foot, .pcx-prod:focus-visible .ov-tp-why-foot {
  transform: translateY(-1px);
  box-shadow: 0 8px 20px -8px color-mix(in srgb, var(--violet) 60%, transparent);
}
.ov-tp-card:hover .ov-tp-why-foot::after, .pcx-prod:hover .ov-tp-why-foot::after { opacity: .34; }
.ov-tp-why-foot:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }
.ov-tp-why-foot:active { transform: translateY(-1px) scale(.96); }

/* ── LEVEL 2 — hovering the PILL ITSELF is a different, richer moment ───────
   Three quiet things happen at once, none of them looping-loud:
   · the rim turns into a slowly rotating aurora (teal→violet→blue conic)
   · a single specular light band sweeps across the core, once per entry
   · the label's gradient slides and the sparkles do one crisp burst
   Everything is transform/paint only — the row never reflows. */
@property --wf-ang { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
.ov-tp-why-foot .wf-core { position: relative; overflow: hidden; }
.ov-tp-why-foot .wf-core > * { position: relative; z-index: 1; }
.ov-tp-why-foot .wf-core::before {
  content: ''; position: absolute; top: -40%; bottom: -40%; left: 0; width: 42%;
  z-index: 0; pointer-events: none; transform: translateX(-220%) skewX(-18deg);
  background: linear-gradient(90deg, transparent,
    color-mix(in srgb, var(--teal) 34%, transparent), transparent);
  opacity: 0;
}
.ov-tp-why-foot:hover, .ov-tp-why-foot:focus-visible {
  transform: translateY(-2px) scale(1.045);
  background: conic-gradient(from var(--wf-ang),
    var(--teal), var(--violet) 30%, var(--blue-2, #4f8ef7) 62%, var(--teal));
  animation: wfAurora 2.8s linear infinite;
  box-shadow: 0 10px 26px -10px color-mix(in srgb, var(--violet) 72%, transparent);
}
.ov-tp-why-foot:hover::after, .ov-tp-why-foot:focus-visible::after { opacity: .5; }
.ov-tp-why-foot:hover .wf-core::before, .ov-tp-why-foot:focus-visible .wf-core::before {
  animation: wfSweep .78s var(--ease-out, ease) 1 both;
}
.ov-tp-why-foot:hover .wf-t, .ov-tp-why-foot:focus-visible .wf-t { background-position: 100% 0; }
.ov-tp-why-foot:hover .wsp, .ov-tp-why-foot:focus-visible .wsp {
  animation: wfBurst .52s var(--ease-spring, cubic-bezier(.34,1.56,.64,1)) 1 both;
}
.ov-tp-why-foot:hover .wsp-2 { animation-delay: .06s; }
.ov-tp-why-foot:hover .wsp-3 { animation-delay: .12s; }
@keyframes wfAurora { to { --wf-ang: 360deg; } }
@keyframes wfSweep {
  0%   { opacity: 0;  transform: translateX(-220%) skewX(-18deg); }
  18%  { opacity: 1; }
  100% { opacity: 0;  transform: translateX(320%)  skewX(-18deg); }
}
@keyframes wfBurst {
  0%   { opacity: .85; transform: scale(1)    rotate(0deg); }
  45%  { opacity: 1;   transform: scale(1.34) rotate(24deg); }
  100% { opacity: 1;   transform: scale(1)    rotate(0deg); }
}
/* — light mode: crisp white core, saturated label + sparkle so the pill keeps
     its weight on white (the dark-mode glow reads as washout here) — */
[data-theme="light"] .ov-tp-why-foot .wf-core { background: #fff; }
[data-theme="light"] .ov-tp-why-foot { box-shadow: 0 3px 12px -7px rgba(16, 42, 98, .5); }
/* the pale cyan sparkles vanished on white — paint them with the brand gradient
   itself (SVG gradient fill) so they carry real ink weight at 13px */
[data-theme="light"] .ov-tp-why-foot svg {
  color: var(--blue, #1652f0);
  filter: drop-shadow(0 1px 1px color-mix(in srgb, var(--blue) 28%, transparent)); }
[data-theme="light"] .ov-tp-why-foot .wsp-1 { fill: var(--blue, #1652f0); }
[data-theme="light"] .ov-tp-why-foot .wsp-2 { fill: var(--teal-2, #0aa6b6); }
[data-theme="light"] .ov-tp-why-foot .wsp-3 { fill: var(--violet, #7c4dff); }
[data-theme="light"] .ov-tp-why-foot .wf-t {
  background: linear-gradient(100deg, var(--teal-2, #0aa6b6), var(--blue, #1652f0) 42%, var(--violet, #7c4dff), var(--teal-2, #0aa6b6));
  background-size: 220% 100%;
  -webkit-background-clip: text; background-clip: text; }
[data-theme="light"] .ov-tp-why-foot:hover .wf-core::before {
  background: linear-gradient(90deg, transparent,
    color-mix(in srgb, var(--blue) 20%, transparent), transparent); }
[data-theme="light"] .ov-tp-card:hover .ov-tp-why-foot,
[data-theme="light"] .pcx-prod:hover .ov-tp-why-foot {
  box-shadow: 0 8px 20px -9px color-mix(in srgb, var(--violet) 55%, transparent); }
/* — dark mode: deep tinted glass core, brighter label so it never muddies — */
[data-theme="dark"] .ov-tp-why-foot .wf-core {
  background: linear-gradient(150deg,
    color-mix(in srgb, var(--teal) 13%, var(--surface)),
    color-mix(in srgb, var(--violet) 11%, var(--surface)));
}
[data-theme="dark"] .ov-tp-why-foot .wf-t {
  background: linear-gradient(100deg,
    color-mix(in srgb, var(--teal) 40%, #ffffff),
    color-mix(in srgb, var(--violet) 34%, #ffffff));
  -webkit-background-clip: text; background-clip: text;
}
[data-theme="dark"] .ov-tp-why-foot svg { color: color-mix(in srgb, var(--teal) 65%, #ffffff); }
[data-theme="dark"] .ov-tp-card:hover .ov-tp-why-foot .wf-core,
[data-theme="dark"] .pcx-prod:hover .ov-tp-why-foot .wf-core {
  background: linear-gradient(150deg,
    color-mix(in srgb, var(--teal) 22%, var(--surface)),
    color-mix(in srgb, var(--violet) 19%, var(--surface)));
}
/* — tablet + phone: bigger tap target, label stays legible — */
@media (max-width: 1024px) {
  .ov-tp-why-foot .wf-core { padding: 6px 13px 6px 10px; }
  .ov-tp-why-foot svg { width: 14px; height: 14px; }
  .ov-tp-why-foot .wf-t { font-size: 11px; }
}
@media (max-width: 640px) {
  .ov-tp-why-foot { --wf-rim: 1.4px; }
  .ov-tp-why-foot .wf-core { padding: 7px 13px 7px 10px; min-height: 32px; }
  .ov-tp-why-foot .wf-t { font-size: 10.5px; letter-spacing: .09em; }
  /* touch has no hover — keep the bloom off so it never sticks after a tap */
  .ov-tp-card:hover .ov-tp-why-foot, .pcx-prod:hover .ov-tp-why-foot { transform: none; }
}
@media (hover: none) {
  .ov-tp-why-foot:hover::after, .ov-tp-card:hover .ov-tp-why-foot::after,
  .pcx-prod:hover .ov-tp-why-foot::after { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-tp-why-foot, .ov-tp-why-foot::after, .ov-tp-why-foot .wf-core,
  .ov-tp-why-foot .wf-t { transition: none; }
  .ov-tp-why-foot .wsp, .ov-tp-why-foot:hover, .ov-tp-why-foot:hover .wsp,
  .ov-tp-why-foot:hover .wf-core::before, .ov-tp-why-foot:focus-visible,
  .ov-tp-why-foot:focus-visible .wsp, .ov-tp-why-foot:focus-visible .wf-core::before { animation: none; }
  .ov-tp-card:hover .ov-tp-why-foot, .pcx-prod:hover .ov-tp-why-foot,
  .ov-tp-why-foot:hover, .ov-tp-why-foot:focus-visible, .ov-tp-why-foot:active { transform: none; }
}
/* Windows/Firefox high-contrast + forced colors: fall back to a real border */
@media (forced-colors: active) {
  .ov-tp-why-foot { border: 1px solid ButtonText; background: ButtonFace; }
  .ov-tp-why-foot .wf-t { color: ButtonText; -webkit-text-fill-color: ButtonText; }
}
.ov-tp-more { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  border-radius: 14px; border: 1px dashed color-mix(in srgb, var(--blue-2) 34%, transparent);
  background: color-mix(in srgb, var(--blue-2) 5%, transparent); min-height: 120px; }
.ov-tp-more b { font-family: var(--font-display); font-weight: 700; font-size: 24px; color: var(--blue-2); }
.ov-tp-more small { font-size: 11px; color: var(--muted); }
.ov-tp-metrics { margin-top: 16px; }
.ov-tp-cta-row { display: flex; align-items: center; justify-content: flex-start; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
.ov-tp-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; width: 100%; }
/* "Compare plans" + "Customize à la carte" are IDENTICAL secondary buttons —
   quiet ghost pills that read as real buttons without competing with Checkout. */
.ov-tp-compare,
.ov-tp-customize { display: inline-flex; align-items: center; gap: 7px; cursor: pointer; font-family: inherit;
  font-size: 12.5px; font-weight: 600; color: var(--text-2, var(--muted)); padding: 10px 14px; border-radius: 999px;
  background: var(--fill-1); border: 1px solid var(--border);
  transition: color .18s, border-color .18s, background .18s; }
.ov-tp-compare svg,
.ov-tp-customize svg { width: 15px; height: 15px; color: var(--teal); }
.ov-tp-compare:hover,
.ov-tp-customize:hover { border-color: color-mix(in srgb, var(--teal) 45%, transparent); background: var(--fill-hover); color: var(--text); }
/* Checkout / Update Subscription — THE hero CTA. Pushed to the far right of the
   row (margin-left:auto), premium gradient + glowing sheen, SAME height as the
   others (10px vertical padding — never taller). */
.ov-tp-checkout { margin-left: auto; position: relative; overflow: hidden;
  display: inline-flex; align-items: center; gap: 8px; cursor: pointer; font-family: var(--font-display, 'Space Grotesk'), inherit;
  font-size: 13px; font-weight: 800; letter-spacing: .01em; color: var(--ink-on-brand); border: none;
  padding: 10px 22px; border-radius: 999px;
  background: linear-gradient(135deg, var(--violet), var(--blue-2, var(--blue)) 48%, var(--teal));
  box-shadow: 0 8px 22px -6px color-mix(in srgb, var(--blue) 55%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 34%, transparent);
  transition: transform .18s, box-shadow .22s, filter .2s; }
.ov-tp-checkout svg { width: 15px; height: 15px; position: relative; z-index: 1; }
.ov-tp-checkout > * { position: relative; z-index: 1; }
/* animated sheen sweep — the "$70B" shimmer, no extra height */
.ov-tp-checkout::after { content: ''; position: absolute; top: 0; left: -60%; width: 45%; height: 100%; z-index: 0;
  background: linear-gradient(100deg, transparent, color-mix(in srgb, #fff 55%, transparent), transparent);
  transform: skewX(-18deg); animation: ovCoSheen 4.5s ease-in-out infinite; }
@keyframes ovCoSheen { 0%, 62% { left: -60%; } 82%, 100% { left: 130%; } }
.ov-tp-checkout:hover { transform: translateY(-1px); filter: brightness(1.05);
  box-shadow: 0 14px 30px -8px color-mix(in srgb, var(--blue) 62%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 42%, transparent); }
.ov-tp-checkout[disabled] { opacity: .7; cursor: default; }
@media (prefers-reduced-motion: reduce) { .ov-tp-checkout::after { animation: none; display: none; } }

/* ── DELIBERATE QUANTITY ADJUSTMENTS ────────────────────────────────────────
   Raising a supplement's quantity from its popup is a real change to what the
   member will be billed for — so the plan says so loudly: a gradient-rimmed
   banner listing every change + the new total, and a ×N badge on the card. */
.ov-tp-adj {
  position: relative;
  display: flex; align-items: flex-start; gap: 11px; margin: 0 0 14px;
  padding: 12px 14px; border-radius: 14px;
  background: linear-gradient(135deg, color-mix(in srgb, var(--violet) 10%, transparent), color-mix(in srgb, var(--teal) 10%, transparent));
  border: 1px solid color-mix(in srgb, var(--teal) 42%, transparent);
  box-shadow: 0 10px 26px -18px color-mix(in srgb, var(--violet) 70%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 24%, transparent);
  animation: ovAdjIn .3s var(--ease-out, ease) backwards;
}
@keyframes ovAdjIn { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: none; } }
.ov-tp-adj-ic { display: inline-flex; flex: none; color: var(--teal); margin-top: 1px; }
.ov-tp-adj-ic svg { width: 17px; height: 17px; }
.ov-tp-adj-tx { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1 1 auto; }
.ov-tp-adj-tx > b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 12.5px; font-weight: 800;
  letter-spacing: .045em; text-transform: uppercase; color: var(--violet);
}
.ov-tp-adj-tx small { font-size: 12px; line-height: 1.45; color: var(--text-2, var(--muted)); }
.ov-tp-adj-tx small b { color: var(--teal); font-weight: 800; }
/* Reset is a real escape hatch — it has to be findable inside a gradient
   banner, so it reads as a solid teal-outlined pill rather than a grey ghost. */
.ov-tp-adj-reset {
  flex: none; cursor: pointer; font-family: inherit; font-size: 11.5px; font-weight: 700;
  color: var(--teal); padding: 6px 12px; border-radius: 999px;
  background: color-mix(in srgb, var(--teal) 12%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--teal) 52%, transparent);
  box-shadow: 0 2px 8px -4px color-mix(in srgb, var(--teal) 55%, transparent);
  transition: color .18s ease, border-color .18s ease, background .18s ease, box-shadow .18s ease;
}
.ov-tp-adj-reset:hover {
  color: var(--ink-on-brand, #fff); background: var(--teal); border-color: var(--teal);
  box-shadow: 0 6px 16px -6px color-mix(in srgb, var(--teal) 70%, transparent); }
.ov-tp-adj-reset:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
/* ×N badge on an adjusted product card */
.ov-tp-qty-badge {
  position: absolute; top: 6px; right: 6px; z-index: 2;
  display: inline-flex; align-items: center; padding: 3px 8px; border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 11.5px; font-weight: 800;
  color: var(--ink-on-brand, #fff); background: linear-gradient(135deg, var(--violet), var(--teal));
  box-shadow: 0 4px 12px -4px color-mix(in srgb, var(--violet) 70%, transparent);
}
.ov-tp-card--adj { border-color: color-mix(in srgb, var(--teal) 55%, transparent); }

/* ── PRESCRIBED DOSE LABEL ──────────────────────────────────────────────────
   The plan opens at the quantity the member's OWN triggers earned, so the card
   says so out loud. Teal = the recommendation; violet = they changed it. */
.ov-tp-dose {
  display: block; margin-top: 5px;
  font-size: 10.5px; line-height: 1.3; letter-spacing: .01em; color: var(--text-2, var(--muted));
}
.ov-tp-dose b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-weight: 800;
  font-size: 11px; color: var(--teal);
}
.ov-tp-dose--off b { color: var(--violet); }

/* ── QUANTITY ON THE PRODUCT BANNER ─────────────────────────────────────────
   Every plan card carries its own −/N/+ in the image's top-right corner, so a
   member can change what they're billed for without opening anything. Frosted
   glass over the photo so it reads on any banner, in either theme. */
.ov-tp-qty {
  position: absolute; top: 6px; right: 6px; z-index: 3;
  display: inline-flex; align-items: center; gap: 1px;
  padding: 2px 3px; border-radius: 999px;
  background: color-mix(in srgb, #0b1020 52%, transparent);
  border: 1px solid color-mix(in srgb, #fff 30%, transparent);
  box-shadow: 0 4px 14px -6px rgba(2, 8, 26, .6), inset 0 1px 0 color-mix(in srgb, #fff 22%, transparent);
  backdrop-filter: blur(9px) saturate(150%); -webkit-backdrop-filter: blur(9px) saturate(150%);
  transition: border-color .18s ease, background .18s ease;
}
.ov-tp-card:hover .ov-tp-qty { border-color: color-mix(in srgb, var(--teal) 70%, transparent); }
.ov-tp-qty-btn {
  display: grid; place-items: center; width: 21px; height: 21px; cursor: pointer;
  border: 0; border-radius: 50%; background: none; color: #fff;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 14px; font-weight: 800; line-height: 1;
  transition: background .15s ease, transform .12s ease;
}
.ov-tp-qty-btn:hover:not([disabled]) { background: color-mix(in srgb, #fff 22%, transparent); transform: scale(1.08); }
.ov-tp-qty-btn[disabled] { opacity: .35; cursor: default; }
.ov-tp-qty-n {
  min-width: 15px; text-align: center; color: #fff;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 12px; font-weight: 800;
  font-variant-numeric: tabular-nums;
}
/* AM/PM timing segments — quiet icon+label cells fused into the qty pill,
   each closed off by a hairline divider (reads as one segmented control).
   Tokenized: dual-theme for free. */
.ov-tp-ampm {
  align-self: stretch; display: inline-flex; align-items: center; gap: 5px;
  margin: -2px 0 -2px -3px; padding: 0 11px 0 10px;
  border-right: 1px solid color-mix(in srgb, currentColor 26%, transparent);
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 11px; font-weight: 700; letter-spacing: .08em; line-height: 1;
  white-space: nowrap;
}
.ov-tp-ampm:first-child { border-radius: 999px 0 0 999px; }
.ov-tp-ampm svg { width: 13px; height: 13px; flex: none; opacity: .9; }
/* base = the frosted DARK photo-overlay pill (always dark, white base text) */
.ov-tp-ampm.is-am { color: #eec643; }
.ov-tp-ampm.is-pm { color: #b9a4ff; }
.ov-tp-ampm + .ov-tp-ampm { margin-left: 0; }
.ov-tp-qty--static { cursor: default; }

/* ── ADDED À LA CARTE — a product the member pulled in themselves ────────────
   It must sit shoulder-to-shoulder with the prescribed cards yet be instantly
   readable as an ADDITION: a teal→violet gradient rim (drawn as a mask so the
   photo stays untouched), a matching corner badge, and a labelled bottom rail
   that says plainly it is not part of the prescribed plan. */
.ov-tp-card--added {
  position: relative; border-color: transparent;
  box-shadow: 0 8px 24px -14px color-mix(in srgb, var(--violet) 72%, transparent);
}
/* Gradient rim drawn as a masked ring OVERLAY — a border-box gradient would
   show through the card in dark mode (its surface token is translucent). */
.ov-tp-card--added::after {
  content: ''; position: absolute; inset: 0; z-index: 4; pointer-events: none;
  border-radius: inherit; padding: 1.5px;
  background: linear-gradient(135deg, var(--teal), var(--violet) 55%, var(--blue-2, var(--blue)));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
}
.ov-tp-card--added:hover {
  border-color: transparent;
  box-shadow: 0 14px 32px -14px color-mix(in srgb, var(--violet) 80%, transparent);
}
/* corner badge (top-LEFT so it never collides with the qty stepper) */
.ov-tp-add-badge {
  position: absolute; top: 6px; left: 6px; z-index: 3;
  display: inline-flex; align-items: center; gap: 3px; padding: 3px 9px 3px 6px; border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 10.5px; font-weight: 800;
  letter-spacing: .05em; text-transform: uppercase; color: var(--ink-on-brand, #fff);
  background: linear-gradient(135deg, var(--teal), var(--violet));
  box-shadow: 0 4px 14px -5px color-mix(in srgb, var(--violet) 75%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 30%, transparent);
}
.ov-tp-add-badge svg { width: 11px; height: 11px; flex: none; }
.ov-tp-add-badge b { font-weight: 800; font-size: inherit; letter-spacing: inherit; }
/* labelled bottom rail — the honest sentence, always visible */
.ov-tp-added-rail {
  display: flex; flex-direction: column; gap: 1px; margin: 10px 12px 0; padding: 7px 10px;
  border-radius: 10px; text-align: left;
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 12%, transparent), color-mix(in srgb, var(--violet) 12%, transparent));
  border: 1px solid color-mix(in srgb, var(--violet) 30%, transparent);
}
.ov-tp-added-rail b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 10.5px; font-weight: 800;
  letter-spacing: .05em; text-transform: uppercase; color: var(--violet);
}
.ov-tp-added-rail small { font-size: 10.5px; line-height: 1.35; color: var(--text-2, var(--muted)); }
@media (prefers-reduced-motion: reduce) {
  .ov-tp-adj { animation: none; } .ov-tp-adj-reset { transition: none; }
  .ov-tp-qty, .ov-tp-qty-btn { transition: none; }
  .ov-tp-qty-btn:hover:not([disabled]) { transform: none; }
}

/* Quantity stepper inside a product detail sheet — sits beside the price chip. */
.ds-qty {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 3px 5px; border-radius: 999px;
  background: var(--fill-1); border: 1px solid color-mix(in srgb, var(--teal) 40%, transparent);
}
.ds-qty-btn {
  display: grid; place-items: center; width: 24px; height: 24px; cursor: pointer;
  border: 0; border-radius: 50%; background: none; color: var(--teal);
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 16px; font-weight: 800; line-height: 1;
  transition: background .15s ease, transform .12s ease;
}
.ds-qty-btn:hover:not([disabled]) { background: color-mix(in srgb, var(--teal) 15%, transparent); }
.ds-qty-btn:active:not([disabled]) { transform: scale(.9); }
.ds-qty-btn[disabled] { opacity: .35; cursor: default; }
.ds-qty-n {
  min-width: 22px; text-align: center; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 13px; font-weight: 800; color: var(--text);
}
.ds-pchip-price small { font-weight: 600; opacity: .7; font-size: 11px; }
@media (prefers-reduced-motion: reduce) { .ds-qty-btn { transition: none; } .ds-qty-btn:active:not([disabled]) { transform: none; } }
.ov-alacarte-cta { position: relative; }
.ov-inc-title { font-family: var(--font-display); font-weight: 600; font-size: 14px; color: var(--text); margin-bottom: 11px; }
.ov-inc-list { list-style: none; margin: 0 0 14px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.ov-inc-list li { display: flex; align-items: center; gap: 9px; font-size: 13.5px; color: var(--text-2); }
.ov-inc-list li svg { width: 16px; height: 16px; color: var(--teal); flex: none; }
.ov-price { display: flex; flex-direction: column; gap: 2px; }
.ov-price b { font-family: var(--font-display); font-weight: 700; font-size: clamp(22px, 4vw, 28px);
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.ov-price small { font-size: 12px; color: var(--muted); }
.ov-program-foot { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 18px; }
.ov-resume-card { display: flex; flex-direction: column; align-items: flex-start; }

/* ── F088 · plan value panel (replaces the plain includes checklist) ───────── */
.ov-program-sub { font-size: 13px; color: var(--muted); margin: 7px 0 0; line-height: 1.45; max-width: 48ch; }
.ov-plan-value { display: flex; flex-direction: column; gap: 14px; }
.ov-plan-metrics { display: flex; flex-wrap: wrap; gap: 10px; }
.ov-plan-metric { flex: 1 1 86px; min-width: 0; padding: 11px 13px; border-radius: var(--r-md);
  border: 1px solid var(--border); background: var(--fill-1); }
.ov-plan-metric b { display: block; font-family: var(--font-display); font-weight: 700; font-size: 21px; color: var(--text); line-height: 1.05;
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.ov-plan-metric small { display: block; margin-top: 3px; font-size: 11.5px; color: var(--muted); }
.ov-plan-goals { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; }
.ov-program-goals { margin-top: 9px; }
.ov-plan-goals-lbl { font-size: 11px; text-transform: uppercase; letter-spacing: .08em; font-weight: 600; color: var(--muted); margin-right: 2px; }
.ov-plan-goal { font-size: 12.5px; font-weight: 600; color: var(--teal); padding: 4px 11px; border-radius: 999px;
  background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 22%, transparent);
  white-space: nowrap; }
/* phones — all 3 goal chips hold ONE line, NEVER truncated: the chips keep
   their natural width and fitProgramGoals() scales --pg-fs down until the row
   fits. Padding is em-based so the pills shrink with the type. */
@media (max-width: 640px) {
  .ov-program-goals { flex-wrap: nowrap; gap: 4px; min-width: 0; overflow: hidden; }
  .ov-program-goals .ov-plan-goals-lbl { flex: none; font-size: 9px; letter-spacing: .05em; margin-right: 0; }
  .ov-program-goals .ov-plan-goal { flex: none; min-width: 0; text-align: center;
    overflow: visible; text-overflow: clip; white-space: nowrap;
    font-size: var(--pg-fs, 10px); padding: .3em .72em; }
}
@media (max-width: 480px) {
  .ov-program-goals .ov-plan-goals-lbl { display: none; }
  .ov-program-goals .ov-plan-goal { padding: .3em .8em; }
}
.ov-plan-shield { display: flex; align-items: flex-start; gap: 8px; font-size: 12.5px; color: var(--text-2); margin: 2px 0 0; line-height: 1.45; }
.ov-plan-shield svg { width: 15px; height: 15px; color: var(--shield); flex: none; margin-top: 1px; }

/* ── F088 · YOUR IDLIFE REGIMEN — the products you already have ─────────────── */
.ov-regimen { position: relative; }
.ov-reg-topglow { position: absolute; inset: 0 0 auto; height: 3px; z-index: 1; background: var(--grad-brand-3); opacity: .85; }
.ov-reg-sub { font-size: 13.5px; color: var(--text-2); margin: -4px 0 16px; line-height: 1.5; }
.ov-reg-shield { display: inline-flex; align-items: center; gap: 5px; color: var(--shield); font-weight: 600; white-space: nowrap; }
.ov-reg-shield svg { width: 14px; height: 14px; }
.ov-reg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(158px, 1fr)); gap: 14px; }
.ov-reg-card { position: relative; display: flex; flex-direction: column; text-align: left; padding: 0; color: var(--text);
  border-radius: var(--r-md); border: 1px solid var(--border); background: var(--surface); cursor: pointer; overflow: hidden;
  transition: transform .24s var(--ease-out), border-color .2s, box-shadow .24s; }
.ov-reg-card:hover { transform: translateY(-3px); border-color: var(--border-hi); box-shadow: var(--shadow-md); }
.ov-reg-card:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.ov-reg-media { position: relative; aspect-ratio: 16 / 11; overflow: hidden; background: var(--grad-brand); display: grid; place-items: center; }
.ov-reg-img { width: 100%; height: 100%; object-fit: cover; object-position: center; display: block; }
.ov-reg-media::after { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, transparent 46%, rgba(8, 16, 32, .42)); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .08); }
/* F447 · square transparent capsule renders: contain on a themed stage; drop
   the darkening scrim (built for photo art) so the pill reads clean. */
.ov-reg-media.is-capsule { background:
  radial-gradient(85% 120% at 50% 115%, color-mix(in srgb, var(--teal) 16%, transparent), transparent 60%),
  var(--fill-2); }
.ov-reg-media.is-capsule .ov-reg-img { object-fit: contain; padding: 10px 8px;
  filter: drop-shadow(0 6px 12px rgba(2, 8, 26, .25)); }
.ov-reg-media.is-capsule::after { background: none;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--border) 80%, transparent); }
.ov-reg-fb { display: none; }
.ov-reg-media.no-img .ov-reg-img { display: none; }
.ov-reg-media.no-img .ov-reg-fb { display: grid; place-items: center; color: #fff; }
.ov-reg-media.no-img .ov-reg-fb svg { width: 32px; height: 32px; opacity: .92; }
.ov-reg-status { position: absolute; top: 8px; left: 8px; z-index: 2; display: inline-flex; align-items: center; gap: 4px;
  font-size: 10.5px; font-weight: 700; letter-spacing: .02em; color: #fff;
  background: rgba(8, 18, 26, .5); backdrop-filter: blur(7px); -webkit-backdrop-filter: blur(7px);
  border: 1px solid rgba(255, 255, 255, .2); padding: 3px 8px 3px 6px; border-radius: 999px; }
.ov-reg-status svg { width: 12px; height: 12px; color: var(--teal-2); }
.ov-reg-tx { display: flex; flex-direction: column; gap: 3px; padding: 11px 12px 30px; flex: 1; }
.ov-reg-tx b { font-size: 13.5px; font-weight: 600; color: var(--text); line-height: 1.25; }
.ov-reg-tag { font-size: 10.5px; text-transform: uppercase; letter-spacing: .05em; font-weight: 600; color: var(--muted); }
.ov-reg-price { margin-top: 1px; font-size: 12.5px; font-weight: 600; color: var(--teal); }
.ov-reg-go { position: absolute; right: 11px; bottom: 10px; color: var(--muted); opacity: 0; transform: translateX(-4px);
  transition: opacity .2s, transform .2s; }
.ov-reg-card:hover .ov-reg-go, .ov-reg-card:focus-visible .ov-reg-go { opacity: 1; transform: none; }
.ov-reg-go svg { width: 15px; height: 15px; }
.ov-reg-more { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; text-align: center;
  border-radius: var(--r-md); border: 1px dashed var(--border-hi); background: var(--fill-1); color: var(--muted); min-height: 132px; padding: 10px; }
.ov-reg-more b { font-family: var(--font-display); font-weight: 700; font-size: 20px; color: var(--text-2); }
.ov-reg-more small { font-size: 11px; }
.ov-reg-foot { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap;
  margin-top: 16px; padding-top: 15px; border-top: 1px solid var(--hairline); }
.ov-reg-val { display: flex; flex-direction: column; gap: 1px; }
.ov-reg-val b { font-family: var(--font-display); font-weight: 700; font-size: 19px; color: var(--text); line-height: 1.1; }
.ov-reg-val small { font-size: 12px; color: var(--muted); }

/* shield */
.ov-shield-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.ov-shield-list li { display: flex; align-items: center; gap: 9px; font-size: 13.5px; color: var(--text-2); }
.ov-shield-list li svg { width: 16px; height: 16px; color: var(--shield); flex: none; }
.ov-shield-foot { margin-top: 14px; display: flex; align-items: center; gap: 9px; font-size: 13px;
  padding: 10px 12px; border-radius: var(--r-sm); background: var(--danger-soft); color: var(--text-2); }
.ov-shield-foot svg { width: 16px; height: 16px; color: var(--danger); flex: none; }
.ov-shield-foot.ok { background: var(--shield-soft); }
.ov-shield-foot.ok svg { color: var(--shield); }

/* F367 · the actual Shield-blocked products, side by side on computer/tablet,
   stacked on phones. Reuses the à la carte .alc-item.alc-blocked card look. */
.ov-shield-blocked {
  margin-top: 12px;
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  align-items: stretch;
}
/* read-only here (no hover-to-add affordance) */
.ov-shield-blocked .alc-item { cursor: default; }
.ov-shield-blocked .alc-item:hover { border-color: color-mix(in srgb, var(--danger) 62%, transparent); }
/* SYMMETRIC padding on every blocked card: align content to the top, keep the
   thumb from stretching, and reserve equal room at the bottom for the corner
   tag so cards of different reason-lengths still share identical padding. */
.ov-shield-blocked .alc-item.alc-blocked {
  align-items: flex-start;
  padding: 14px 14px 30px;
}
.ov-shield-blocked .alc-thumb { align-self: flex-start; }
.ov-shield-blocked .alc-item-tx { align-self: flex-start; }
.ov-shield-blocked .alc-item-tx b { margin-bottom: 3px; }
/* the Shield reason: wrap up to 3 lines (never clipped to one), so it stays
   readable while every card keeps a symmetric, predictable footprint. */
.ov-shield-blocked .ov-blk-reason {
  white-space: normal; overflow: hidden; text-overflow: ellipsis;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;
  line-height: 1.4;
}
@media (max-width: 640px) {
  .ov-shield-blocked { grid-template-columns: 1fr; }
}

/* precision */
.ov-pct { font-family: var(--font-display); font-weight: 700; font-size: 18px; color: var(--teal); }
.ov-data .meter { margin: 4px 0 14px; }

/* report cards */
.ov-reports { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; margin-top: clamp(16px, 2vw, 24px); }
.ov-report { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-radius: var(--r-md);
  border: 1px solid var(--border); background: var(--surface); cursor: pointer; text-align: left; color: var(--text);
  transition: transform .2s var(--ease-out), border-color .2s, box-shadow .2s; }
.ov-report:hover { transform: translateY(-2px); border-color: var(--border-hi); box-shadow: var(--shadow-sm); }
.ov-report-ic { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 12px; background: var(--fill-2); color: var(--blue); flex: none; }
.ov-report-ic svg { width: 20px; height: 20px; }
.ov-report.st-on .ov-report-ic { background: var(--teal-soft); color: var(--teal); }
.ov-report.st-off .ov-report-ic { background: var(--violet-soft); color: var(--violet); }
.ov-report-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.ov-report-tx b { font-size: 14px; color: var(--text); }
/* T2.6 · subtitles wrap to two tidy lines — never mid-word ellipses at desktop */
.ov-report-tx small { font-size: 12px; color: var(--muted); overflow: hidden;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.35; }
.ov-report-go { color: var(--muted); flex: none; display: grid; place-items: center; }
.ov-report-go svg { width: 16px; height: 16px; }

/* bottom 3-up: insights / history / activity */
.ov-grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2vw, 24px); margin-top: clamp(16px, 2vw, 24px); align-items: start; }
/* F399 · the Health Report's Trends tab carries only two of them */
.hr-trends-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 900px) { .hr-trends-grid { grid-template-columns: 1fr; } }
.ov-ins-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 16px; }
.ov-ins small { display: block; text-transform: uppercase; letter-spacing: .08em; font-size: 11px; color: var(--muted); margin-bottom: 9px; font-weight: 600; }
.ov-ins ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.ov-ins li { display: flex; gap: 8px; align-items: flex-start; font-size: 13.5px; color: var(--text-2); }
.ov-ins li svg { width: 15px; height: 15px; color: var(--teal); flex: none; margin-top: 1px; }
.ov-ins-mean p { font-size: 13.5px; color: var(--text-2); line-height: 1.5; margin: 0; }

.ov-hist-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.ov-hist { display: flex; align-items: center; gap: 10px; padding: 11px 2px; border-bottom: 1px solid var(--hairline); }
.ov-hist:last-child { border-bottom: none; }
.ov-hist-dot { width: 10px; height: 10px; border-radius: 50%; flex: none; }
.ov-hist-dot.b-strong { background: var(--teal); }
.ov-hist-dot.b-building { background: var(--blue); }
.ov-hist-dot.b-focus { background: var(--warning); }
.ov-hist-date { font-size: 13px; color: var(--text-2); min-width: 52px; }
/* T2.10 · same-day repeat check-ins carry a quiet "· earlier" disambiguator */
.ov-hist-nth { font-style: normal; font-size: 10.5px; font-weight: 600; color: var(--muted); white-space: nowrap; }
.ov-hist-score { font-family: var(--font-display); font-weight: 700; font-size: 15px; color: var(--text); min-width: 24px; }
.ov-hist-band { font-size: 11.5px; color: var(--muted); }
.ov-hist.current .ov-hist-band { color: var(--teal); font-weight: 600; }
.ov-hist-view { margin-left: auto; background: none; border: none; cursor: pointer; color: var(--blue);
  font-size: 12.5px; font-family: var(--font-body); display: inline-flex; align-items: center; gap: 4px; }
.ov-hist-view svg { width: 13px; height: 13px; }

.ov-act-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.ov-act { display: flex; align-items: center; gap: 12px; padding: 10px 2px; border-bottom: 1px solid var(--hairline); }
.ov-act:last-child { border-bottom: none; }
.ov-act-ic { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 10px; background: var(--fill-2); color: var(--teal); flex: none; }
.ov-act-ic svg { width: 17px; height: 17px; }
.ov-act-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.ov-act-tx b { font-size: 13.5px; color: var(--text); }
.ov-act-tx small { font-size: 12px; color: var(--muted); }
.ov-act-when { font-size: 11.5px; color: var(--muted-2); flex: none; }

/* primary actions + footer */
.ov-cta { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; justify-content: center; margin-top: 0;
  container-type: inline-size; }
@media (min-width: 1025px) {
  .ov-score-card .ov-cta { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: stretch; }
  .ov-score-card .ov-cta .btn { width: 100%; min-width: 0;
    padding-left: clamp(10px, 3.4cqw, 22px); padding-right: clamp(10px, 3.4cqw, 22px); }
  .ov-score-card .ov-cta #ov-update,
  .ov-score-card .ov-cta #ov-view { gap: clamp(5px, 1.7cqw, 10px);
    font-size: clamp(12px, 3.75cqw, 17px); line-height: 1; letter-spacing: -0.01em; }
  .ov-score-card .ov-cta #ov-update svg,
  .ov-score-card .ov-cta #ov-view svg { width: clamp(13px, 3.8cqw, 18px); height: clamp(13px, 3.8cqw, 18px); flex: none; }
  .ov-score-card .ov-cta #ov-fresh { grid-column: 1 / -1; justify-self: center; width: auto; min-height: 46px; padding: 11px 18px; }
}
/* COUNCIL F1 · ONE hero action — the secondary buttons recede so the gradient
   primary owns the row. In light mode the ghosts stop rendering as loud white
   pills; "Start a fresh assessment" demotes to a tertiary text action in BOTH
   themes. Scoped to .ov-cta only — every other .btn-ghost is untouched. */
[data-theme="light"] .ov-cta .btn-ghost { background: rgba(255,255,255,.52); border-color: rgba(16,42,98,0.14);
  color: var(--text-2); box-shadow: none; }
[data-theme="light"] .ov-cta .btn-ghost:hover { background: rgba(255,255,255,.82); color: var(--text); }
.ov-cta #ov-fresh { background: transparent; border-color: transparent; box-shadow: none; color: var(--muted); }
.ov-cta #ov-fresh:hover { background: var(--fill-2); border-color: transparent; color: var(--text); transform: none; }
/* dark mode — make "Start a fresh assessment" lighter for better visibility (Jacob's ask) */
:root:not([data-theme="light"]) .ov-cta #ov-fresh { color: var(--text-2); }
[data-theme="light"] .ov-cta #ov-fresh { background: transparent; border-color: transparent; color: #55648a; }
[data-theme="light"] .ov-cta #ov-fresh:hover { background: rgba(16,42,98,0.06); color: var(--text); }
.ov-disc { display: none; max-width: 920px; margin: 20px auto 8px; }
/* COUNCIL F2 · light-mode AA contrast pass — quiet meta copy that sits on the
   bright ripple field gets real ink. Dark mode is untouched. */
[data-theme="light"] .ov-disc { color: #4d5c7d; }
[data-theme="light"] .ov-score-when { color: #55648a; }
[data-theme="light"] .ov-tr-since { color: var(--text-2); }
[data-theme="light"] .ov-mom-scale { color: #55648a; }

/* F134 · PREVIEW PORTAL — the honest "example data" band + the single begin CTA
   a first-time visitor sees. On-brand glass, dual-theme, responsive. */
.ov-preview-band { display: flex; align-items: center; gap: 16px; margin: 4px auto 26px; max-width: 980px;
  padding: 14px 18px; border-radius: var(--r-md); background: var(--grad-card); border: 1px solid var(--border);
  box-shadow: var(--shadow-sm); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); }
.ov-pv-ic { flex: none; width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center;
  color: var(--teal); background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent); }
.ov-pv-ic svg { width: 19px; height: 19px; }
.ov-pv-tx { margin: 0; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
/* F143 · headline removed — the single invite line carries the band on its own */
.ov-pv-tx span { font-size: 13.5px; font-weight: 600; line-height: 1.5; color: var(--text); }
.ov-preview-band .btn { flex: none; margin-left: auto; }
[data-theme="light"] .ov-preview-band { background: rgba(255,255,255,.82); }
.ov-cta-note { flex-basis: 100%; display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  font-size: 12.5px; color: var(--text-2); }
.ov-cta-note svg { width: 14px; height: 14px; flex: none; color: var(--teal); }
@media (max-width: 700px) {
  .ov-preview-band { flex-direction: column; align-items: flex-start; }
  .ov-preview-band .btn { margin-left: 0; width: 100%; justify-content: center; }
}

/* ── F147 · persistent "Sample" watermark — preview portal only ─────────────
   The invite band scrolls away; the honesty must not. Every data-bearing card
   in the preview shell wears a quiet corner tag so a mid-page skimmer can never
   mistake the example score/plan for their own. Pure CSS (::after), dual-theme,
   zero DOM cost, gone the instant the portal graduates to member state. */
body.on-overview .ov-shell--preview .ov-card::after {
  content: 'Sample'; position: absolute; top: 10px; right: 10px; z-index: 3;
  padding: 3px 9px; border-radius: 999px; pointer-events: none;
  font-family: var(--font-display); font-size: 9.5px; font-weight: 800;
  letter-spacing: .08em; text-transform: uppercase;
  color: var(--text-2); background: color-mix(in srgb, var(--surface-hi) 82%, transparent);
  border: 1px solid var(--border); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  box-shadow: 0 2px 8px -4px rgba(4, 9, 26, .35);
}
[data-theme="light"] .ov-shell--preview .ov-card::after {
  background: rgba(255, 255, 255, .88); color: var(--muted);
}
/* cards whose content is real even in preview (invitations, activity feed,
   Shield promise, report launchers) stay untagged — only example DATA is tagged.
   The score card is untagged too: it's paint-stripped (F109, no box to pin to),
   already says "Example data — not you, yet", and the topbar chip reads Sample. */
body.on-overview .ov-shell--preview .ov-card.ov-activity::after,
body.on-overview .ov-shell--preview .ov-card.ov-shield::after,
body.on-overview .ov-shell--preview .ov-card.ov-data::after,
body.on-overview .ov-shell--preview .ov-card.ov-history::after,
body.on-overview .ov-shell--preview .ov-card.ov-score-card::after { content: none; }

.ov-top { z-index: 55; }
/* F118 · the supplements caption is transform-dropped on desktop; the showcase
   reserves that height (F123) so the action row reflows clear on its own. */

/* responsive — the overview two-column grid needs real width to breathe;
   1121px is the floor (F414: thin desktops made the left-rail cards look
   starved, so tablet stacking now starts sooner). */
@media (max-width: 1120px) {
  .ov-grid { grid-template-columns: 1fr; }
  .ov-grid3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  .ov-tp-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 680px) {
  .ov-grid3 { grid-template-columns: 1fr; }
  .ov-tp-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* tier selector stacks to a vertical list on phones for tap comfort */
  .ov-tierpick { grid-template-columns: 1fr; }
  .ov-tier { gap: 10px; padding: 12px 14px; }
  .ov-tier-ic { width: 32px; height: 32px; }
  .ov-tier-price { font-size: 16px; }
  /* keep the "Budget" flag clear of the price on the stacked row */
  .ov-tier-flag { top: -8px; right: auto; left: 12px; }
  .ov-tp-cta-row { flex-direction: column; align-items: stretch; }
  .ov-tp-customize { justify-content: center; }
}
@media (max-width: 640px) {
  .ov-topbar .score-chip { display: none; }
  .ov-cta .btn { flex: 1 1 100%; justify-content: center; }
  .ov-score-row { gap: 16px; }
  .ov-tp-head { gap: 8px; }
}
@media (max-width: 400px) {
  .ov-tp-grid { grid-template-columns: 1fr; }
}

/* When MyAI opens and pinches the portal into the left lane, keep tiers legible */
body.myai-open #screen-overview .ov-tp-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
body.myai-open #screen-overview .ov-tierpick { grid-template-columns: 1fr; }

@media (prefers-reduced-motion: reduce) {
  .ov-ring-fill { transition: none !important; }
  .ov-report:hover { transform: none; }
  .ov-tp-in { animation: none; }
  .ov-tier:hover, .ov-tp-card:hover, .ov-tp-customize:hover { transform: none; }
}
.ov-home-deck { display: flex; flex-direction: column; gap: clamp(16px, 2vw, 22px); }
.ov-deck-2 { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(16px, 2vw, 22px); align-items: stretch; }
.ov-deck-2 > .ov-card { margin: 0; }

/* ── A · momentum / trajectory ─────────────────────────────────────────────── */
/* F112 · "kill the background" — the trajectory card's inner contents (score ring,
   grade, progress track, stat row, button) now sit FREE on the page instead of
   inside the ugly white .ov-card box. We strip ONLY the card's paint (surface,
   border, shadow); the element + its padding stay so everything keeps its exact
   place and the home-deck layout/stacking is undisturbed. (Same move as F109 on
   the score card.) */
.ov-card.ov-momentum {
  background: none;
  border: 0;
  box-shadow: none;
}
.ov-momentum .ov-mom-head { font-size: clamp(18px, 2.6vw, 23px); font-weight: 700; line-height: 1.15; }
.ov-momentum .ov-mom-head b { font-family: var(--font-display); font-weight: 800; }
.ov-mom-badge { flex: none; width: 40px; height: 40px; display: grid; place-items: center; border-radius: 12px;
  background: var(--teal-soft); color: var(--teal); }
.ov-mom-badge svg { width: 20px; height: 20px; }
/* F093 · the relocated score ring + grade meta now lead the trajectory card */
.ov-mom-score { display: flex; align-items: center; gap: clamp(14px, 3vw, 26px); flex-wrap: wrap; margin: 8px 0 6px; }
.ov-mom-score .ov-score-meta { gap: 8px; }
.ov-mom-track { position: relative; height: 12px; border-radius: 99px; background: var(--track); margin: 24px 0 9px; }
.ov-mom-fill { position: absolute; inset: 0 auto 0 0; width: 0; height: 100%; border-radius: 99px;
  background: var(--grad-brand-3); box-shadow: 0 0 18px var(--teal-glow); transition: width 1.1s var(--ease-out); }
.ov-mom-fill::after { content: ''; position: absolute; right: 0; top: 50%; width: 15px; height: 15px; border-radius: 50%;
  background: var(--surface); border: 3px solid var(--teal); transform: translate(50%, -50%);
  box-shadow: 0 0 0 4px var(--teal-soft), var(--shadow-sm); }
.ov-mom-tick { position: absolute; top: -5px; bottom: -5px; width: 2px; border-radius: 2px;
  background: var(--border-hi); transform: translateX(-50%); opacity: .8; }
.ov-mom-scale { display: flex; justify-content: space-between; font-size: 12.5px; color: var(--muted); }
.ov-mom-scale b { color: var(--text); font-family: var(--font-display); font-weight: 700; }
.ov-mom-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(92px, 1fr)); gap: 12px;
  margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--hairline); }
.ov-mom-stat b { display: block; font-family: var(--font-display); font-weight: 800; font-size: clamp(18px, 3vw, 24px);
  background: var(--grad-brand-3); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; line-height: 1.05; }
/* dark mode only — trajectory stat numbers are solid white */
:root:not([data-theme="light"]) .ov-mom-stat b {
  background: none; -webkit-text-fill-color: #fff; color: #fff; }
/* light mode only — trajectory stat numbers + labels are solid black */
[data-theme="light"] .ov-mom-stat b {
  background: none; -webkit-text-fill-color: #0c1320; color: #0c1320; }
[data-theme="light"] .ov-momentum .ov-mom-stat small {
  color: #0c1320; }
/* dark mode only — supporting trajectory labels become white text */
:root:not([data-theme="light"]) .ov-momentum .ov-ring-center small,
:root:not([data-theme="light"]) .ov-momentum .ov-score-when,
:root:not([data-theme="light"]) .ov-momentum .ov-mom-stat small,
:root:not([data-theme="light"]) .ov-momentum .ov-mom-more {
  color: #fff; }
.ov-mom-stat small { display: block; font-size: 11.5px; color: var(--muted); margin-top: 4px; letter-spacing: .01em; }

/* ── B · body systems intelligence ─────────────────────────────────────────── */
.ov-sysmap-n { color: var(--muted); font-size: 13px; font-weight: 600; }
/* the engine's pulsing teal "live" bar — a glowing accent line that fills the
   title row between the heading and the "N mapped" count. */
.ov-sysmap-line { flex: 1; min-width: 28px; height: 6px; align-self: center; border-radius: 999px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--teal) 60%, transparent) 40%, var(--teal));
  box-shadow: 0 0 0 0 color-mix(in srgb, var(--teal) 55%, transparent);
  animation: ovEngLive 2.4s ease-out infinite; }
.ov-sysmap-sub { font-size: 13.5px; color: var(--text-2); line-height: 1.5; margin: 2px 0 18px; max-width: 660px; }
.ov-sysmap-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(18px, 3vw, 34px); }
.ov-sysmap-col { display: flex; flex-direction: column; gap: 13px; }
.ov-sysmap-lbl { display: flex; align-items: center; gap: 7px; font-family: var(--font-display); font-weight: 700;
  font-size: 12px; text-transform: uppercase; letter-spacing: .07em; margin-bottom: 2px; }
.ov-sysmap-lbl svg { width: 15px; height: 15px; }
.ov-sysmap-lbl.up { color: var(--teal); }
.ov-sysmap-lbl.down { color: var(--blue); }
.ov-sys { display: flex; align-items: center; gap: 12px; }
.ov-sys-ic { width: 36px; height: 36px; flex: none; display: grid; place-items: center; border-radius: 11px;
  background: var(--fill-2); color: var(--text-2); }
.ov-sys-ic svg { width: 18px; height: 18px; }
.ov-sys-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.ov-sys-name { font-size: 13.5px; font-weight: 600; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ov-sys-meter { height: 6px; border-radius: 99px; background: var(--track); overflow: hidden; }
.ov-sys-meter > span { display: block; height: 100%; border-radius: 99px; }
.ov-sys-meter > span.b-strong { background: var(--teal); }
.ov-sys-meter > span.b-building { background: var(--blue); }
.ov-sys-meter > span.b-focus { background: var(--warning); }
.ov-sys-score { font-family: var(--font-display); font-weight: 800; font-size: 15px; min-width: 26px; text-align: right; flex: none; }
.ov-sys-score.b-strong { color: var(--teal); }
.ov-sys-score.b-building { color: var(--blue); }
.ov-sys-score.b-focus { color: var(--warning); }

/* dynamic before/after delta chip (vs last check-in, or first assessment) */
.ov-sys-delta { flex: none; display: inline-flex; align-items: center; gap: 2px; min-width: 0;
  font-family: var(--font-display); font-weight: 700; font-size: 11.5px; line-height: 1;
  padding: 3px 8px 3px 6px; border-radius: 999px; letter-spacing: .01em; }
.ov-sys-delta svg { width: 11px; height: 11px; }
.ov-sys-delta.up   { color: var(--teal);    background: var(--teal-soft); }
.ov-sys-delta.down { color: var(--warning); background: rgba(255, 181, 71, 0.14); }
.ov-sys-delta.flat { color: var(--muted);   background: var(--fill-1); }

/* ── C · priority moves ────────────────────────────────────────────────────── */
.ov-priomoves { display: flex; flex-direction: column; }
.ov-prio-list { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ov-prio { display: flex; align-items: flex-start; gap: 13px; padding: 13px 14px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px solid var(--border); }
.ov-prio-n { width: 26px; height: 26px; flex: none; display: grid; place-items: center; border-radius: 8px;
  background: var(--grad-brand); color: var(--ink-on-brand); font-family: var(--font-display); font-weight: 800; font-size: 13px; }
.ov-prio-tx { font-size: 14px; color: var(--text); line-height: 1.45; padding-top: 3px; }
.ov-prio-ask { margin-top: 16px; display: inline-flex; align-items: center; gap: 9px; align-self: flex-start;
  padding: 11px 17px; border-radius: 999px; border: 1px solid var(--border-hi); background: var(--teal-soft);
  color: var(--teal); font-family: var(--font-display); font-weight: 600; font-size: 13.5px; cursor: pointer;
  transition: box-shadow .22s var(--ease-out), transform .22s var(--ease-out); }
.ov-prio-ask svg { width: 17px; height: 17px; }
.ov-prio-ask svg:last-child { width: 15px; height: 15px; transition: transform .22s var(--ease-out); }
.ov-prio-ask:hover { box-shadow: var(--glow-teal); }
.ov-prio-ask:hover svg:last-child { transform: translateX(3px); }
.ov-prio-ask:active { transform: scale(.97); }
.ov-prio-ask:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }

/* ── D · what's shaping your score ─────────────────────────────────────────── */
.ov-fx-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(16px, 2.4vw, 26px); }
.ov-fx-lbl { display: flex; align-items: center; gap: 7px; font-family: var(--font-display); font-weight: 700;
  font-size: 12px; text-transform: uppercase; letter-spacing: .07em; margin-bottom: 12px; }
.ov-fx-lbl svg { width: 15px; height: 15px; }
.ov-fx.up .ov-fx-lbl { color: var(--teal); }
.ov-fx.down .ov-fx-lbl { color: var(--warning); }
.ov-fx ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ov-fx li { display: flex; gap: 9px; align-items: flex-start; font-size: 13.5px; color: var(--text-2); line-height: 1.4; }
.ov-fx li svg { width: 16px; height: 16px; flex: none; margin-top: 1px; }
.ov-fx.up li svg { color: var(--teal); }
.ov-fx.down li svg { color: var(--warning); }
.ov-fx.down li.ok svg { color: var(--teal); }

/* composite before/after trend chip in the card header */
.ov-fx-trend { display: inline-flex; align-items: center; gap: 4px; font-family: var(--font-display);
  font-weight: 700; font-size: 12px; line-height: 1; padding: 5px 11px; border-radius: 999px; white-space: nowrap; }
.ov-fx-trend svg { width: 12px; height: 12px; }
.ov-fx-trend.up   { color: var(--teal);    background: var(--teal-soft); }
.ov-fx-trend.down { color: var(--warning); background: rgba(255, 181, 71, 0.14); }
.ov-fx-trend.flat { color: var(--muted);   background: var(--fill-1); }

@media (max-width: 820px) {
  .ov-deck-2 { grid-template-columns: 1fr; }
  .ov-sysmap-grid { grid-template-columns: 1fr; gap: 20px; }
  .ov-fx-grid { grid-template-columns: 1fr; gap: 18px; }
}
@media (max-width: 460px) {
  .ov-mom-stats { grid-template-columns: 1fr; gap: 0; }
  .ov-mom-stat { display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
    padding: 10px 0; border-bottom: 1px solid var(--hairline); }
  .ov-mom-stat:last-child { border-bottom: none; }
  .ov-mom-stat small { margin-top: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .ov-mom-fill { transition: none !important; }
  .ov-prio-ask, .ov-prio-ask svg { transition: none !important; }
}

/* ===========================================================================
   F065 · PHYSICIAN ACCESS + SUGGESTED CHANGES  (on the overview / $5B home)
   Interactive, secure, on-brand (dual-theme), fully responsive. Lives inside the
   overview so it inherits the opaque surfaces + ambient freeze (F024 scroll law).
   =========================================================================== */
.ph-grid { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr);
  gap: clamp(16px, 2vw, 24px); margin-top: clamp(16px, 2vw, 24px); align-items: start; }
.ph-grid-solo { grid-template-columns: minmax(0, 1fr); }

/* avatars (provider initials / stethoscope) */
.ph-avatar { width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; flex: none;
  font-family: var(--font-display); font-weight: 700; font-size: 16px; letter-spacing: .02em;
  background: var(--grad-brand-3); color: var(--ink-on-brand); box-shadow: var(--glow-teal); }
.ph-avatar.sm { width: 40px; height: 40px; font-size: 14px; }
.ph-avatar.ghost { background: var(--fill-2); color: var(--teal); box-shadow: none; }
.ph-avatar.ghost svg { width: 22px; height: 22px; }

/* suggested-changes head */
.ph-head { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 16px; }
.ph-head-tx { min-width: 0; }
.ph-head-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ph-head-row h3 { font-family: var(--font-display); font-weight: 600; font-size: clamp(16px, 2.4vw, 20px); color: var(--text); margin: 0; }
.ph-new { font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-on-brand);
  background: var(--grad-brand); padding: 3px 9px; border-radius: 999px; }
.ph-byline { font-size: 13px; color: var(--text-2); margin: 5px 0 0; line-height: 1.45; }
.ph-byline b { color: var(--text); font-weight: 600; }

/* current → suggested plan summary */
.ph-vs { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 12px;
  padding: 14px; border-radius: var(--r-md); background: var(--fill-1); border: 1px solid var(--border); margin-bottom: 14px; }
.ph-plan { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ph-plan small { font-size: 11px; text-transform: uppercase; letter-spacing: .07em; color: var(--muted); font-weight: 600; }
.ph-plan b { font-family: var(--font-display); font-weight: 700; font-size: 15.5px; color: var(--text); }
.ph-plan span { font-size: 12px; color: var(--muted); }
.ph-plan.suggested b { color: var(--teal); }
.ph-vs-arrow { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%;
  background: var(--surface); border: 1px solid var(--border); color: var(--teal); }
.ph-vs-arrow svg { width: 15px; height: 15px; }

/* change rows */
.ph-changes { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.ph-change { display: flex; align-items: center; gap: 12px; padding: 11px 13px; border-radius: var(--r-sm);
  background: var(--surface); border: 1px solid var(--border); }
.ph-change-ic { width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; flex: none;
  background: var(--teal-soft); color: var(--teal); }
.ph-change-ic svg { width: 16px; height: 16px; }
.ph-change.is-add .ph-change-ic { background: var(--violet-soft); color: var(--violet); }
.ph-change-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.ph-change-main b { font-size: 13.5px; color: var(--text); font-weight: 600; }
.ph-change-main small { font-size: 11.5px; color: var(--muted); }
.ph-change-flow { display: flex; align-items: center; gap: 8px; flex: none; }
.ph-from { font-size: 12.5px; color: var(--muted); text-decoration: line-through; }
.ph-arrow { color: var(--muted); display: grid; place-items: center; }
.ph-arrow svg { width: 14px; height: 14px; }
.ph-to { font-family: var(--font-display); font-weight: 700; font-size: 13.5px; color: var(--teal);
  background: var(--teal-soft); padding: 4px 10px; border-radius: 999px; white-space: nowrap; }
.ph-to.add { color: var(--violet); background: var(--violet-soft); }

/* review toggle + rationale (collapsible) */
.ph-review { display: inline-flex; align-items: center; gap: 7px; margin-top: 12px; padding: 0;
  background: none; border: none; color: var(--blue); font-family: var(--font-body); font-size: 13px; cursor: pointer; }
.ph-review svg { width: 15px; height: 15px; }
.ph-rationale { max-height: 0; overflow: hidden; transition: max-height .3s var(--ease-out); }
.ph-suggest.open .ph-rationale { max-height: 240px; }
.ph-rationale p { font-size: 12.5px; color: var(--text-2); line-height: 1.55; margin: 10px 0 0;
  padding: 12px 14px; background: var(--fill-1); border-radius: var(--r-sm); border: 1px solid var(--border); }

/* decision banner + actions */
.ph-decided { display: flex; align-items: flex-start; gap: 10px; margin-top: 14px; padding: 11px 13px;
  border-radius: var(--r-sm); font-size: 13px; color: var(--text-2); }
.ph-decided svg { width: 18px; height: 18px; flex: none; margin-top: 1px; }
.ph-decided b { color: var(--text); }
.ph-decided.accepted { background: var(--teal-soft); } .ph-decided.accepted svg { color: var(--teal); }
.ph-decided.kept { background: var(--fill-2); } .ph-decided.kept svg { color: var(--muted); }
.ph-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 16px; }
.ph-actions .btn svg { width: 16px; height: 16px; }
.ph-actions-after { margin-top: 12px; }
/* T1.3 · post-decision undo — a quiet text affordance, never a rival CTA */
.ph-undo { display: inline-flex; align-items: center; gap: 7px; padding: 6px 4px;
  background: none; border: none; cursor: pointer; font: 500 12.5px/1.4 var(--font, inherit);
  color: var(--muted); transition: color .18s ease; }
.ph-undo svg { width: 13px; height: 13px; transform: rotate(180deg); opacity: .7; }
.ph-undo:hover { color: var(--text-2); text-decoration: underline; text-underline-offset: 3px; }
.ph-undo:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; border-radius: 6px; }

/* empty-state skeleton */
.ph-skeleton { opacity: .5; }
.ph-skeleton li { height: 46px; border: none; background: linear-gradient(90deg, var(--fill-1), var(--fill-2), var(--fill-1));
  background-size: 200% 100%; animation: phShimmer 1.6s linear infinite; }
@keyframes phShimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
.ph-empty .ph-byline { max-width: 480px; }

/* physician access card */
.ph-access .eyebrow { display: inline-flex; align-items: center; gap: 6px; }
.ph-access .eyebrow svg { width: 13px; height: 13px; }
.ph-pill { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 600;
  padding: 5px 11px; border-radius: 999px; white-space: nowrap; }
.ph-pill svg { width: 13px; height: 13px; }
.ph-pill.ok { color: var(--teal); background: var(--teal-soft); }
.ph-pill.off { color: var(--muted); background: var(--fill-2); }
.ph-prov { display: flex; align-items: center; gap: 12px; padding: 12px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px solid var(--border); margin-bottom: 14px; }
.ph-prov.muted { opacity: .85; }
.ph-prov-tx { min-width: 0; display: flex; flex-direction: column; }
.ph-prov-tx b { font-size: 14px; color: var(--text); }
.ph-prov-tx small { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ph-consent { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.ph-consent li { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--text-2); }
.ph-consent li svg { width: 15px; height: 15px; color: var(--shield); flex: none; }
.ph-shares { margin-bottom: 12px; }
.ph-shares small { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .07em; color: var(--muted); font-weight: 600; margin-bottom: 7px; }
.ph-share-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ph-chip { font-size: 12px; font-weight: 600; color: var(--blue); background: var(--blue-soft); padding: 4px 10px; border-radius: 999px; }
.ph-last { font-size: 12px; color: var(--muted); display: flex; align-items: center; gap: 6px; margin: 0 0 12px; }
.ph-last svg { width: 14px; height: 14px; }
.ph-access-copy { font-size: 13.5px; color: var(--text-2); line-height: 1.5; margin: 0 0 14px; }
.ph-access-foot { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ph-link { display: inline-flex; align-items: center; gap: 5px; background: none; border: none; cursor: pointer;
  color: var(--blue); font-family: var(--font-body); font-size: 13px; padding: 6px 2px; }
.ph-link svg { width: 14px; height: 14px; }
.ph-more { font-size: 12px; color: var(--muted); margin: 10px 0 0; }
.btn.btn-sm { padding: 8px 14px; font-size: 13px; }

/* ── Care · edit medications & conditions (logs a new assessment) ──────────── */
/* eyebrow wears the branded iD shield mark (logo vibe) in both themes */
.ov-safety-card .eyebrow { display: inline-flex; align-items: center; gap: 12px; }
.ov-safety-card .sfx-brandmark { display: inline-flex; flex: none; }
.ov-safety-card .sfx-brandmark svg { width: 46px; height: 53px;
  filter: drop-shadow(0 2px 8px var(--teal-glow)); }
/* enlarge only the "iD" lettering within the brand shell (keep its lowercase i) */
.ov-safety-card .sfx-brandmark svg text { font-size: 31px; text-transform: none; }
.ov-safety-card .sfx-intro { font-size: 13.5px; color: var(--text-2); line-height: 1.55; margin: 0 0 18px; }
.sfx-status { display: inline-flex; align-items: center; gap: 6px; flex: none; font-size: 12.5px; font-weight: 600;
  color: var(--shield); background: var(--shield-soft); border: 1px solid color-mix(in srgb, var(--shield) 30%, transparent);
  border-radius: var(--r-pill); padding: 6px 12px; }
.sfx-status[hidden] { display: none; }
.sfx-status svg { width: 14px; height: 14px; }
.sfx-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; align-items: start; }
.sfx-block { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.sfx-block-head { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-display); font-weight: 700;
  font-size: 14.5px; color: var(--text); }
.sfx-block-head svg { width: 17px; height: 17px; color: var(--shield); flex: none; }
.sfx-mount .sp { margin-top: 2px; }
.sfx-foot { margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--hairline);
  display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.sfx-note { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--muted); margin: 0; max-width: 46ch; line-height: 1.45; }
.sfx-note svg { width: 14px; height: 14px; flex: none; color: var(--muted); }
.sfx-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
@media (max-width: 720px) {
  .sfx-grid { grid-template-columns: 1fr; gap: 26px; }
  .sfx-foot { flex-direction: column; align-items: stretch; }
  .sfx-actions { justify-content: stretch; }
  .sfx-actions .btn { flex: 1; justify-content: center; }
}

/* ── secure add-a-provider modal ──────────────────────────────────────────── */
.prov-modal-backdrop { position: fixed; inset: 0; z-index: 10000; display: grid; place-items: center; padding: 20px;
  background: rgba(4, 9, 26, .55); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  opacity: 0; transition: opacity .22s var(--ease-out); }
.prov-modal-backdrop.show { opacity: 1; }
.prov-modal-backdrop[hidden] { display: none; }
.prov-modal { width: min(560px, 100%); max-height: calc(100dvh - 40px); overflow-y: auto; position: relative;
  background: var(--surface); border: 1px solid var(--border-hi); border-radius: var(--r-lg); box-shadow: var(--shadow-lg);
  padding: clamp(20px, 3vw, 30px); transform: translateY(16px) scale(.98); transition: transform .3s var(--ease-spring); }
.prov-modal-backdrop.show .prov-modal { transform: none; }
.prov-modal-x { position: absolute; top: 14px; right: 14px; width: 36px; height: 36px; border-radius: 50%;
  display: grid; place-items: center; background: var(--fill-2); border: 1px solid var(--border); color: var(--muted); cursor: pointer; }
.prov-modal-x svg { width: 18px; height: 18px; }
.prov-modal-x:hover { color: var(--danger); border-color: var(--danger-soft); }
.prov-modal-head { display: flex; align-items: center; gap: 14px; margin-bottom: 8px; padding-right: 36px; }
.prov-modal-ic { width: 48px; height: 48px; border-radius: 14px; display: grid; place-items: center; flex: none;
  background: var(--grad-brand-3); color: var(--ink-on-brand); box-shadow: var(--glow-teal); }
.prov-modal-ic svg { width: 24px; height: 24px; }
.prov-modal-head h3 { font-family: var(--font-display); font-weight: 700; font-size: clamp(18px, 3vw, 22px); color: var(--text); margin: 3px 0 0; }
.prov-modal-head .eyebrow { display: inline-flex; align-items: center; gap: 6px; }
.prov-modal-head .eyebrow svg { width: 13px; height: 13px; }
.prov-modal-sub { font-size: 13px; color: var(--text-2); line-height: 1.5; margin: 0 0 18px; }
.prov-form { display: flex; flex-direction: column; gap: 14px; }
.prov-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.prov-field { display: flex; flex-direction: column; gap: 6px; }
.prov-field > span { font-size: 12.5px; font-weight: 600; color: var(--text); }
.prov-field > span i { color: var(--danger); font-style: normal; }
.prov-field > span small { font-weight: 400; color: var(--muted); }
.prov-field input, .prov-field select { width: 100%; padding: 11px 13px; border-radius: var(--r-md); border: 1px solid var(--border);
  background: var(--fill-1); color: var(--text); font-family: var(--font-body); font-size: 14px; transition: border-color .2s, box-shadow .2s; }
.prov-field input:focus, .prov-field select:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 3px var(--teal-soft); }
.prov-field input::placeholder { color: var(--muted-2); }
.prov-shares { border: 1px solid var(--border); border-radius: var(--r-md); padding: 12px 14px; display: flex; flex-wrap: wrap; gap: 8px 18px; }
.prov-shares legend { font-size: 11px; font-weight: 600; color: var(--muted); padding: 0 6px; text-transform: uppercase; letter-spacing: .06em; }
.prov-check { display: inline-flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--text-2); cursor: pointer; }
.prov-check input { width: 17px; height: 17px; accent-color: var(--teal); flex: none; }
.prov-check span { display: inline-flex; align-items: center; gap: 6px; }
.prov-check span svg { width: 15px; height: 15px; color: var(--teal); }
.prov-consent { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; border-radius: var(--r-md);
  background: var(--teal-soft); font-size: 12.5px; color: var(--text-2); line-height: 1.45; cursor: pointer; }
.prov-consent input { width: 18px; height: 18px; accent-color: var(--teal); flex: none; margin-top: 1px; }
.prov-foot { display: flex; justify-content: flex-end; gap: 10px; margin-top: 6px; }
.prov-foot .btn svg { width: 15px; height: 15px; }
#prov-submit.loading { opacity: .7; pointer-events: none; }

/* status toast (bottom-center) */
.ov-toast { position: fixed; left: 50%; bottom: 26px; transform: translate(-50%, 20px); z-index: 10001;
  max-width: min(440px, calc(100vw - 32px)); padding: 12px 18px; border-radius: var(--r-pill);
  background: var(--surface-hi); border: 1px solid var(--border-hi); color: var(--text); font-size: 13.5px; font-weight: 500;
  box-shadow: var(--shadow-lg), var(--glow-teal); opacity: 0; pointer-events: none; text-align: center;
  transition: opacity .25s, transform .3s var(--ease-spring); }
.ov-toast.show { opacity: 1; transform: translate(-50%, 0); }

/* responsive */
@media (max-width: 1024px) { .ph-grid { grid-template-columns: 1fr; } }
@media (max-width: 560px) {
  .prov-row { grid-template-columns: 1fr; }
  .ph-change { flex-wrap: wrap; }
  .ph-change-flow { width: 100%; justify-content: flex-end; }
  .ph-vs { grid-template-columns: 1fr; }
  .ph-vs-arrow { transform: rotate(90deg); justify-self: start; }
  .ph-actions .btn { flex: 1 1 100%; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .prov-modal-backdrop, .prov-modal, .ov-toast, .ph-rationale { transition: none !important; }
  .ph-skeleton li { animation: none; }
}

/* ===========================================================================
   F066 · REPORT NAVIGATOR — switch across every dated assessment ($1B nav)
   A premium switcher that lives in the results topbar and ONLY appears when a
   user has more than one assessment. A date pill (Report X of N) flanked by
   prev/next steppers, plus a dropdown of every check-in (score · grade · Δ).
   Dual-theme · responsive (anchored dropdown → full-width on phones) ·
   reduced-motion safe. The sticky chrome owns a backdrop-filter, so the panel
   is positioned ABSOLUTE (never fixed) to stay correctly contained.
   =========================================================================== */
.report-switch-host[hidden] { display: none; }
.report-switch-host { display: inline-flex; }
.report-switch { position: relative; display: inline-flex; align-items: center; gap: 6px; }

/* prev / next steppers */
.rs-step { width: 34px; height: 34px; flex: none; border-radius: 50%; display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--border); background: var(--fill-1); color: var(--text-2);
  transition: color .18s, border-color .18s, background .18s, transform .18s var(--ease-spring); }
.rs-step svg { width: 16px; height: 16px; }
.rs-step:hover:not(:disabled) { color: var(--teal); border-color: var(--border-hi); transform: translateY(-1px); }
.rs-step:active:not(:disabled) { transform: scale(.92); }
.rs-step:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.rs-step:disabled { opacity: .38; cursor: default; }

/* the date pill (dropdown trigger) */
.rs-btn { display: inline-flex; align-items: center; gap: 10px; cursor: pointer;
  padding: 6px 12px; border-radius: var(--r-pill); border: 1px solid var(--border);
  background: var(--fill-1); color: var(--text); font-family: var(--font-display);
  transition: border-color .18s, background .18s, box-shadow .18s, transform .18s var(--ease-spring); }
.rs-btn:hover { border-color: var(--border-hi); background: var(--fill-2); transform: translateY(-1px); }
.rs-btn:active { transform: scale(.98); }
.rs-btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.rs-btn-ic { display: grid; place-items: center; width: 24px; height: 24px; flex: none; border-radius: 50%;
  background: var(--teal-soft); color: var(--teal); }
.rs-btn-ic svg { width: 14px; height: 14px; }
.rs-btn-tx { display: flex; flex-direction: column; line-height: 1.08; text-align: left; }
.rs-btn-tx small { font-size: 10px; font-weight: 600; letter-spacing: .02em; color: var(--muted); text-transform: uppercase; }
.rs-btn-tx b { font-size: 13.5px; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
.rs-btn-chev { display: grid; place-items: center; color: var(--muted); transition: transform .22s var(--ease-spring); }
.rs-btn-chev svg { width: 15px; height: 15px; }
.report-switch.open .rs-btn-chev { transform: rotate(180deg); }
.report-switch.open .rs-btn { border-color: color-mix(in srgb, var(--teal) 42%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 16%, transparent), 0 8px 22px -12px var(--teal-glow); }
.rs-btn.loading { opacity: .6; pointer-events: none; }

/* dropdown panel */
.rs-pop { position: absolute; top: calc(100% + 10px); right: 0; z-index: 40; width: min(338px, calc(100vw - 28px));
  background: var(--surface-hi); border: 1px solid var(--border-hi); border-radius: var(--r-lg);
  box-shadow: var(--shadow-lg); overflow: hidden;
  opacity: 0; transform: translateY(-8px) scale(.98); transform-origin: top right; pointer-events: none;
  transition: opacity .18s var(--ease-out), transform .22s var(--ease-spring); }
.rs-pop[hidden] { display: none; }
.report-switch.open .rs-pop { opacity: 1; transform: none; pointer-events: auto; }
.rs-pop-head { display: flex; align-items: center; gap: 8px; padding: 13px 15px;
  border-bottom: 1px solid var(--hairline); font-family: var(--font-display); }
.rs-pop-head svg { width: 15px; height: 15px; color: var(--teal); flex: none; }
.rs-pop-head > span { font-size: 13px; font-weight: 700; color: var(--text); }
.rs-pop-head b { margin-left: auto; font-size: 11px; font-weight: 600; color: var(--muted);
  background: var(--fill-2); padding: 3px 9px; border-radius: var(--r-pill); }

.rs-list { max-height: min(56vh, 384px); overflow-y: auto; padding: 6px; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
.rs-item { width: 100%; display: grid; grid-template-columns: auto minmax(0,1fr) auto auto auto; align-items: center; gap: 10px;
  padding: 10px 11px; border-radius: var(--r-md); border: 1px solid transparent; background: transparent; cursor: pointer;
  text-align: left; font-family: var(--font-body); transition: background .15s, border-color .15s; }
.rs-item + .rs-item { margin-top: 2px; }
.rs-item:hover { background: var(--fill-1); }
.rs-item:focus-visible { outline: 2px solid var(--teal); outline-offset: -2px; }
.rs-item.current { background: var(--teal-soft); border-color: color-mix(in srgb, var(--teal) 30%, transparent); cursor: default; }
.rs-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.rs-dot.b-strong { background: var(--shield); }
.rs-dot.b-building { background: var(--blue); }
.rs-dot.b-focus { background: var(--warning); }
.rs-item-main { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.rs-item-main b { font-size: 13px; font-weight: 700; color: var(--text); }
.rs-item-main small { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rs-item-score { font-family: var(--font-display); font-weight: 800; font-size: 15px; color: var(--text); font-variant-numeric: tabular-nums; }
.rs-delta { display: inline-flex; align-items: center; gap: 3px; font-size: 11px; font-weight: 700; padding: 3px 7px;
  border-radius: var(--r-pill); font-variant-numeric: tabular-nums; white-space: nowrap; }
.rs-delta svg { width: 12px; height: 12px; }
.rs-delta.pos { color: var(--shield); background: var(--shield-soft); }
.rs-delta.neg { color: var(--warning); background: rgba(255,181,71,0.12); }
.rs-delta.neg svg { transform: scaleY(-1); }
.rs-delta.neu { color: var(--muted); background: var(--fill-2); }
.rs-item-go { display: grid; place-items: center; color: var(--muted); }
.rs-item-go svg { width: 15px; height: 15px; }
.rs-item.current .rs-item-go { color: var(--teal); }

.rs-pop-foot { display: flex; align-items: center; gap: 7px; padding: 10px 15px; border-top: 1px solid var(--hairline);
  font-size: 11.5px; color: var(--muted); }
.rs-pop-foot svg { width: 13px; height: 13px; flex: none; color: var(--teal); }

/* Tablet — keep the anchored dropdown, just a touch tighter */
@media (max-width: 1024px) { .rs-btn-tx small { font-size: 9.5px; } }

/* Phone — drop the steppers (the list handles nav) and let the panel span the
   full topbar width. The switcher goes position:static so the panel anchors to
   the sticky chrome (the nearest positioned ancestor) instead of the narrow
   pill — robust, never clipped, never off-screen. */
@media (max-width: 640px) {
  .rs-step { display: none; }
  .rs-btn { padding: 6px 10px; }
  .report-switch { position: static; }
  .rs-pop { left: clamp(12px, 4vw, 18px); right: clamp(12px, 4vw, 18px); width: auto; max-width: none;
    transform-origin: top center; }
  .rs-list { max-height: 58vh; }
}

@media (prefers-reduced-motion: reduce) {
  .rs-step, .rs-btn, .rs-btn-chev, .rs-pop, .rs-item { transition: none !important; }
}

/* ===========================================================================
   F067 + F068 · APP-NATIVE — sticky bottom tab bar + one-section-per-screen
   The returning-user Home (overview) and the Results dashboard present as a
   native app at EVERY width: a sticky bottom tab bar pages between sections,
   each tab revealing ONLY its own section. body.mpaged is now ALWAYS-ON for
   these two screens (set by JS); CSS adapts the bar — edge-to-edge on phones,
   a floating centered pill on tablet + desktop. .mtabbar / [data-mpage] are
   scoped to the two screens, so every other screen is unaffected.
   =========================================================================== */
:root { --mtabbar-h: 58px; }

.mtabbar { display: none; }   /* inert until JS enables app-native mode */

/* shared bar shell (placement/shape set per breakpoint below) */
body.mpaged .mtabbar {
  position: fixed; z-index: 65;
  /* F108 · OPAQUE floating nav — --topbar-bg is translucent, so page content
     ghosted through behind the pill. Seal it with a solid --bg-1 base UNDER the
     tinted gradient: same look, nothing shows through. Theme-aware (dark+light). */
  background: var(--topbar-bg), var(--bg-1);
  -webkit-backdrop-filter: blur(20px) saturate(140%); backdrop-filter: blur(20px) saturate(140%);
}
/* shared tab */
.mtab { display: flex; align-items: center; justify-content: center;
  background: none; border: 0; cursor: pointer; color: var(--muted); border-radius: var(--r-md);
  min-width: 0; -webkit-tap-highlight-color: transparent;
  /* F071: a touch slower + unified so the active highlight CROSS-FADES gracefully
     between tabs (was a quick .18s snap). The press stays snappy on its own curve. */
  transition: color .24s var(--ease-out), background .24s var(--ease-out), transform .18s var(--ease-spring); }
.mtab-ic { display: grid; place-items: center; transition: background .24s var(--ease-out), transform .24s var(--ease-out); }
.mtab-lb { font-family: var(--font-display); font-weight: 600; line-height: 1;
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mtab.active { color: var(--teal); }
.mtab:active { transform: scale(.93); }
.mtab:focus-visible { outline: 2px solid var(--teal); outline-offset: -2px; }

/* ONE section per screen — hide every page that isn't the active tab (all widths) */
body.mpaged #screen-results [data-mpage]:not(.mpage-active),
body.mpaged #screen-overview [data-mpage]:not(.mpage-active) { display: none !important; }

/* F071 · APP-NATIVE PAGE TRANSITION — the active section reveals with ONE
   identical, gentle fade+rise on EVERY tab switch (the motion that used to come
   from a variable smooth window-scroll, which felt different on every click).
   `backwards` fill (NEVER forwards/both) so it can't clobber F069's lane
   translateX after it settles — the exact fill-forwards trap the handoff warns of. */
@keyframes mpageIn   { from { opacity: 0; transform: translate3d(0, 12px, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }
@keyframes mpageFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes mtabbarIn { from { opacity: 0; } to { opacity: 1; } }
body.mpaged #screen-results [data-mpage].mpage-active,
body.mpaged #screen-overview [data-mpage].mpage-active { animation: mpageIn .44s var(--ease-out) backwards; }
/* F452c · SWIPE = DIRECTIONAL GLIDE — a physical flick slides the incoming page
   in from the side the finger is travelling toward (native-pager feel) instead
   of the generic rise-up. The body class is set by the swipe handler right
   before the page switch and cleared a beat later, so taps/keys keep mpageIn. */
@keyframes mpageInL { from { opacity: 0; transform: translate3d(44px, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }
@keyframes mpageInR { from { opacity: 0; transform: translate3d(-44px, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }
body.swipe-nav-l.mpaged #screen-results [data-mpage].mpage-active,
body.swipe-nav-l.mpaged #screen-overview [data-mpage].mpage-active { animation: mpageInL .34s var(--ease-out) backwards; }
body.swipe-nav-r.mpaged #screen-results [data-mpage].mpage-active,
body.swipe-nav-r.mpaged #screen-overview [data-mpage].mpage-active { animation: mpageInR .34s var(--ease-out) backwards; }
@media (prefers-reduced-motion: reduce) {
  body.swipe-nav-l.mpaged #screen-results [data-mpage].mpage-active,
  body.swipe-nav-l.mpaged #screen-overview [data-mpage].mpage-active,
  body.swipe-nav-r.mpaged #screen-results [data-mpage].mpage-active,
  body.swipe-nav-r.mpaged #screen-overview [data-mpage].mpage-active { animation: none !important; }
}
/* F379 · while the Shield Moment overlay is fading out to hand off to the Plan
   page, the plan must be FULLY SETTLED underneath (no rise-in) — otherwise the
   plan animates up (opacity 0→1) at the same instant the overlay fades away on
   top of it, and the Shield report text ghosts through the half-built plan (the
   "flashing expandable rows"). Suppress the entrance so the overlay reveals a
   static, finished plan in ONE clean fade. */
body.sm-finishing.mpaged #screen-overview [data-mpage].mpage-active { animation: none !important; }
/* the floating nav fades in once with the page (opacity-only → it can never fight
   the desktop translateX(-50%) centering or the F069 left-lane glide). */
body.mpaged .mtabbar { animation: mtabbarIn .5s var(--ease-out) backwards; }

/* flatten the overview grids so each card pages independently (all widths) */
body.mpaged #screen-overview .ov-grid,
body.mpaged #screen-overview .ov-col,
body.mpaged #screen-overview .ov-grid3 { display: contents; }
body.mpaged #screen-overview [data-mpage] { margin: 0 0 16px; }
/* the hero DOCKS onto the science widget: a negative bottom margin cancels the score
   card's top padding so the "JACOB'S iD NUTRITION" pill sits flush on the widget's top
   edge (this always-on mpaged rule wins over the base .ov-hero margin). */
body.mpaged #screen-overview .ov-hero { margin: 16px 0 clamp(-15px, -1.05vw, -9px); }
/* the widget sits ON TOP of the hero lockup so the pill tucks behind its top edge */
body.mpaged #screen-overview .ov-card.ov-score-card { position: relative; z-index: 1; }

/* the top section-chip nav + back-to-top give way to the bottom bar (all widths) */
body.mpaged #screen-results .results-nav { display: none; }
body.mpaged .back-top, body.mpaged .ov-top { display: none !important; }

/* ── phone + tablet (≤1024): edge-to-edge footer bar, icon over label ─────── */
@media (max-width: 1024px) {
  body.mpaged .mtabbar {
    left: 0; right: 0; bottom: 0;
    display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; align-items: stretch; gap: 2px;
    height: calc(var(--mtabbar-h) + env(safe-area-inset-bottom));
    padding: 5px 6px env(safe-area-inset-bottom);
    border-top: 1px solid var(--border-soft);
    box-shadow: 0 -8px 24px -16px rgba(4, 9, 26, 0.6);
  }
  .mtab { flex-direction: column; gap: 3px; padding: 4px 2px; }
  .mtab-ic { width: 30px; height: 24px; border-radius: 999px; }
  .mtab-ic svg { width: 21px; height: 21px; }
  .mtab-lb { font-size: 10.5px; letter-spacing: .01em; }
  .mtab.active .mtab-ic { background: var(--teal-soft); }

  body.mpaged #screen-results .results-shell { padding-bottom: calc(var(--mtabbar-h) + env(safe-area-inset-bottom) + 22px); }
  body.mpaged #screen-overview .ov-wrap { padding-bottom: calc(var(--mtabbar-h) + env(safe-area-inset-bottom) + 22px); }
  body.mpaged .myai-fab { bottom: calc(var(--mtabbar-h) + env(safe-area-inset-bottom) + 14px); }
}

/* the report footer's Home tab is footer-only — the header already has a Home
   pill when the bar rides the desktop top slot. */
.mtabbar--top .mtab[data-mtab="gohome"] { display: none; }

/* ── desktop (≥1025): floating centered pill, icon + label inline ─────────── */
@media (min-width: 1025px) {
  body.mpaged .mtabbar {
    left: 50%; transform: translateX(-50%); bottom: clamp(16px, 2.2vw, 26px);
    display: flex; gap: 4px; max-width: calc(100vw - 40px); overflow-x: auto;
    padding: 7px; border: 2px solid color-mix(in srgb, var(--blue) 66%, transparent); border-radius: var(--r-pill);
    box-shadow: var(--shadow-lg),
      0 12px 44px -12px color-mix(in srgb, var(--blue) 50%, transparent),
      0 0 0 1px color-mix(in srgb, var(--blue) 16%, transparent),
      inset 0 1px 0 color-mix(in srgb, #ffffff 14%, transparent);
    scrollbar-width: none;
    /* F069: a slow, gradual "float" — the pill drifts dead-center → left lane,
       no bounce, gentle start + soft settle (see --ease-lux). */
    transition: left 1.1s var(--ease-lux), transform 1.1s var(--ease-lux),
                max-width 1.1s var(--ease-lux), box-shadow .6s var(--ease-out);
  }
  body.mpaged .mtabbar::-webkit-scrollbar { display: none; }
  .mtab { flex: none; flex-direction: row; gap: 8px; padding: 9px 17px; border-radius: var(--r-pill); }
  .mtab-ic svg { width: 18px; height: 18px; }
  .mtab-lb { font-size: 13.5px; letter-spacing: .01em; }
  .mtab:hover { color: var(--text); background: var(--fill-1); }
  .mtab.active, .mtab.active:hover { color: var(--blue); background: color-mix(in srgb, var(--blue) 16%, transparent);
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--blue) 34%, transparent); }

  /* wide, screen-filling "page" for the flattened overview cards on desktop —
     fills most of the viewport (no narrow iPad column on a big monitor) while
     keeping a comfortable gutter and a sane cap on ultrawide displays. */
  body.mpaged #screen-overview .ov-wrap { max-width: min(1500px, 94vw); }

  /* clearance so the last content clears the floating pill */
  body.mpaged #screen-results .results-shell { padding-bottom: clamp(98px, 9vw, 128px); }
  body.mpaged #screen-overview .ov-wrap { padding-bottom: clamp(98px, 9vw, 128px); }
}

@media (prefers-reduced-motion: reduce) {
  .mtab, .mtab-ic { transition: none !important; }
  body.mpaged .mtabbar { transition: none !important; animation: none !important; }   /* F069: no glide · F071: no fade-in */
  /* F069: the width-pinch is functional (content must stay visible beside MyAI) —
     keep it, but SNAP instead of animating for motion-sensitive users. */
  #screen-overview .ov-wrap,
  #screen-results .results-shell > [data-mpage] { transition: none !important; }
  /* F071: the tab-switch page entrance is a flourish — snap it for reduced motion. */
  body.mpaged #screen-results [data-mpage].mpage-active,
  body.mpaged #screen-overview [data-mpage].mpage-active { animation: none !important; }
  /* F073: the reflow fade-dip is also a flourish — snap it for reduced motion. */
  body.myai-pinch #screen-overview .ov-wrap,
  body.myai-pinch.mpaged #screen-results .results-shell > [data-mpage].mpage-active,
  body.myai-pinch-out #screen-overview .ov-wrap,
  body.myai-pinch-out.mpaged #screen-results .results-shell > [data-mpage].mpage-active { animation: none !important; }
}

/* ===========================================================================
   F069 · MyAI EXPAND — wide companion + tabs glide aside (computer ≥1025px)
   The instant MyAI opens on a computer, body.myai-open is set (myaiOpenPop).
   The docked popup roughly DOUBLES its width, growing INWARD from its fixed
   bottom-right anchor (transform-origin: bottom right), while the app-native
   tab pill springs out of dead-center into the LEFT lane to clear the runway.
   Gated to ≥1025px so phone (full-screen sheet) + tablet keep MyAI byte-for-
   byte. body.myai-open is toggled by myaiOpenPop() / myaiClosePop().
   =========================================================================== */
@media (min-width: 1025px) {
  /* F075 · while MyAI is open on a computer, retire the "viewing previous
     results" bar — it tucks under the widened companion and the user is focused
     in the chat. Eased fade-out (opacity + tiny slide); keeps the -50% centering
     so it never jumps; restores gently on close. */
  body.myai-open .prior-view-bar {
    opacity: 0; transform: translate(-50%, 8px); pointer-events: none;
  }
  /* the widened companion — ~2x the resting 420px, capped so a left lane for the
     tabs always survives, even on a 13" laptop. --lane-* describe the open space
     LEFT of the companion (reused by the background pinch below). */
  body.myai-open {
    --myai-pop-w: min(840px, 54vw);
    --lane-w: calc(100vw - var(--myai-pop-w) - 56px);          /* content width in the lane */
    --lane-x: calc(20px - (var(--myai-pop-w) + 56px) / 2);     /* shift to pin it ~20px from the left */
  }
  body.myai-open .myai-pop { width: var(--myai-pop-w); }

  /* the tab pill springs out of the center into the left lane, making room. its
     max-width is the exact space left of the companion, so they never collide. */
  body.myai-open.mpaged .mtabbar {
    left: clamp(16px, 2.4vw, 30px);
    transform: translateX(0);
    max-width: calc(100vw - var(--myai-pop-w) - 72px);
    box-shadow: var(--shadow-lg), 0 0 40px -8px var(--teal-glow);
  }
  /* tighten the tabs a hair so the five labels still breathe in the narrower lane */
  body.myai-open.mpaged .mtab { padding: 9px 14px; }

  /* ── background pinch → reflow the page into the visible LEFT lane ──────────
     Don't just SHRINK the page (a uniform scale either leaves it hidden behind
     the companion or makes it too tiny to read) — PINCH its WIDTH down to the
     lane left of MyAI so its widgets REFLOW into a tall, single-column view with
     EVERYTHING visible. The content narrows (max-width → --lane-w) and glides
     left (translateX → --lane-x) in one slow lux move; the topbar stays full-
     width chrome; the pill (screen root) + popup (<body>) stay crisp + fixed. */
  #screen-overview .ov-wrap,
  #screen-results .results-shell > [data-mpage] {
    transition: max-width 1.5s var(--ease-lux), transform 1.5s var(--ease-lux);
  }
  body.myai-open #screen-overview .ov-wrap {
    max-width: var(--lane-w); transform: translateX(var(--lane-x));
  }
  body.myai-open #screen-results .results-shell > [data-mpage] {
    max-width: var(--lane-w); margin-inline: auto; transform: translateX(var(--lane-x));
  }
  /* F071: while MyAI is open the section already carries the lane translateX, so
     the tab-switch entrance must be OPACITY-ONLY (a translateY keyframe would
     momentarily override the lane offset, then snap). Same .44s curve, kept. */
  body.myai-open.mpaged #screen-overview [data-mpage].mpage-active,
  body.myai-open.mpaged #screen-results .results-shell > [data-mpage].mpage-active {
    animation-name: mpageFade;
  }
  /* collapse the remaining multi-column card internals → a truly vertical column */
  body.myai-open #screen-overview .ov-program-body,
  body.myai-open #screen-overview .ov-deck-2,
  body.myai-open #screen-overview .ov-sysmap-grid,
  body.myai-open #screen-overview .ov-fx-grid,
  body.myai-open #screen-results .results-hero,
  body.myai-open #screen-results .results-grid,
  body.myai-open #screen-results .results-secondary { grid-template-columns: 1fr; }

  /* F126 · in MyAI's narrow left lane, let the Science ("science behind your
     number") + Health-Trend widgets fill their column edge-to-edge — drop the
     desktop half-row caps and the page gutter so they reclaim the blank space. */
  body.myai-open #screen-overview .ov-wrap {
    padding-inline: clamp(10px, 1.4vw, 18px);
  }
  body.myai-open #screen-overview .ov-score-row,
  body.myai-open #screen-overview .ov-score-left,
  body.myai-open #screen-overview .ov-score-row > .ov-engine,
  body.myai-open #screen-overview .ov-score-row > .ov-nextmove,
  body.myai-open #screen-overview .ov-score-left > .ov-trend {
    width: 100%; max-width: none; flex-basis: auto; align-self: stretch;
  }

  /* ── F073 · reflow fade-dip — eased cross-fade into / out of the vertical lane ──
     The width-pinch GLIDES (1.5s lux), but the multi-column → single-column REFLOW
     snaps instantly at t=0 — that bare snap is the "hard crash". Mask it with a
     gentle opacity dip: a quick-but-smooth fade-out covers the snap, the content
     HOLDS dim through the WHOLE glide, then a long, very gentle ease-lux reveal
     brings it back ONLY once the geometry has fully settled (no squeeze ever
     visible = no crash). JS marks the glide with body.myai-pinch on OPEN *and*
     CLOSE. The steady tab-switch entrance keeps its own .44s mpageFade, never
     touched here. Chrome + the fixed tab pill stay crisp (they're siblings). */
  @keyframes idnPinchFade {
    0%   { opacity: 1;   animation-timing-function: cubic-bezier(.16,1,.3,1); }  /* quick, smooth dim — covers the t=0 reflow snap */
    11%  { opacity: .06; animation-timing-function: linear; }                     /* hold dim through the ENTIRE width-glide */
    60%  { opacity: .06; animation-timing-function: cubic-bezier(.42,0,.12,1); }  /* …then a long, VERY gentle reveal (--ease-lux) */
    100% { opacity: 1; }
  }
  /* CLOSE = the same reflow in reverse. The user wants it "ever so slightly", so
     this twin dips only to .6 (vs the OPEN .06) — a barely-there veil that still
     softens the snap-back without dimming the whole view. */
  @keyframes idnPinchFadeSoft {
    0%   { opacity: 1;  animation-timing-function: cubic-bezier(.16,1,.3,1); }
    15%  { opacity: .6; animation-timing-function: linear; }
    55%  { opacity: .6; animation-timing-function: cubic-bezier(.42,0,.12,1); }
    100% { opacity: 1; }
  }
  body.myai-pinch #screen-overview .ov-wrap {
    animation: idnPinchFade 1.5s;
  }
  /* results: dim ONLY the visible page (chrome is a sibling in the shell). The
     transient .myai-pinch flag + equal specificity placed AFTER the mpageFade
     override means the OPEN/CLOSE move dips, while plain tab-switches don't. */
  body.myai-pinch.mpaged #screen-results .results-shell > [data-mpage].mpage-active {
    animation: idnPinchFade 1.5s;
  }
  /* F073b · the gentle CLOSE counterpart — same two targets, shallow soft dip. */
  body.myai-pinch-out #screen-overview .ov-wrap,
  body.myai-pinch-out.mpaged #screen-results .results-shell > [data-mpage].mpage-active {
    animation: idnPinchFadeSoft 1.5s;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F153 · THE IDLIFE SHIELD INTRO — the in-assessment $40B landing moment
   + the live Shield status pill (red Inactive → teal Active, forever).
   All tokenized (dual-theme); reduced-motion neutralized at the end.
   ═══════════════════════════════════════════════════════════════════════════ */
/* Break the Shield intro out of the narrow question column — this moment owns
   the FULL width of the device on every screen size.
   NOTE: hard-reset the legacy .shield-intro rule (max-width/display/padding)
   used by an unrelated older component — this in-assessment intro is its own
   full-width layout. */
.shield-intro {
  display: block; width: 100%; max-width: none;
  padding: 0; gap: 0; text-align: center;
}
.q-wrap:has(.shield-intro) { max-width: min(1180px, 96vw); }
/* the broad ring field is meant to bleed to the screen edges — clip overflow on
   BOTH axes at the flow container so its wide orbits never produce a scrollbar
   or dead space below the fold. Decorative only (pointer-events:none); the real
   content fits inside, and the Back footer lives outside this box. */
.flow-main:has(.shield-intro) { overflow: clip; }

/* ── F233 · THE SHIELD PAGE IS A FULL-SCREEN HERO ─────────────────────────────
   The hero fills the whole viewport (the flow-main flex:1 expands once the Back
   footer is pulled out of flow). The Back footer is dropped to the BACK layer
   (absolute, z-index:0) so it no longer occupies its own row / dead band under
   the fold. The hero background is click-transparent so the Back button behind
   it stays reachable; the hero's real content (.q-wrap) still takes its clicks. */
#screen-question:has(.shield-intro) { position: relative; }
#screen-question:has(.shield-intro) > div:last-of-type {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 0;
}
/* flow-main must OWN a stacking context ABOVE the now-positioned footer —
   otherwise the footer (positioned, z-index:0) paints over flow-main's in-flow
   content and its bottom edge covers the Activate button's lower rim, eating
   the click. z-index:1 lifts the whole hero above the footer; pointer-events
   are none so the Back button behind still receives clicks where the hero's
   real content (.q-wrap) doesn't reach. */
.flow-main:has(.shield-intro) { flex: 1; min-height: 0; position: relative; z-index: 1; pointer-events: none; }
/* F329 · the shield-intro hero is tall and its lower area overlaps the absolute
   Back footer beneath it. The ONLY interactive element in this hero is the
   Activate/Continue CTA, so keep the whole hero click-transparent and re-enable
   pointer events on just the real controls — clicks anywhere the CTA doesn't
   cover fall through to the Back button. */
.flow-main:has(.shield-intro) .q-wrap { pointer-events: none; }
.flow-main:has(.shield-intro) .si-cta,
.flow-main:has(.shield-intro) button,
.flow-main:has(.shield-intro) a { pointer-events: auto; }

.si {
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(24px, 4vw, 44px); padding-top: 6px; width: 100%;
}

/* ── F401 · TWO-COLUMN COMPOSITION — the living world/Shield emblem owns the
   LEFT column (centered on both axes); the editorial statement owns the RIGHT
   (also centered on both axes). Tablet/phone stack it: emblem, then copy. ── */
.si-constellation {
  position: relative; /* positioning context for the broad ring field */
  display: grid; grid-template-columns: 1fr; justify-items: center;
  gap: clamp(14px, 3vw, 22px); width: 100%;
}
/* ── F226 · THE ATMOSPHERE — the whole page becomes near-earth space: a deep
   air glow pooling behind the planet. F401 · it must read as LIGHT, never as a
   panel: every layer is radial (a boxy linear gradient produced hard left/right
   edges), and an elliptical mask feathers the whole layer out to nothing on all
   four sides so it dissolves into the page instead of ending on a seam. */
.si-constellation::before {
  content: ''; position: absolute; inset: -30% -18%; z-index: 0; pointer-events: none;
  background:
    radial-gradient(52% 46% at 50% 48%, color-mix(in srgb, var(--blue-2) 16%, transparent), transparent 72%),
    radial-gradient(34% 32% at 24% 20%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 74%),
    radial-gradient(36% 34% at 78% 74%, color-mix(in srgb, var(--violet) 10%, transparent), transparent 74%),
    radial-gradient(64% 58% at 50% 52%, color-mix(in srgb, var(--blue-2) 5%, transparent), transparent 76%);
  -webkit-mask-image: radial-gradient(closest-side ellipse at 50% 50%, #000 34%, rgba(0,0,0,.55) 62%, transparent 100%);
          mask-image: radial-gradient(closest-side ellipse at 50% 50%, #000 34%, rgba(0,0,0,.55) 62%, transparent 100%);
  filter: blur(18px);
}
/* the air itself — a full-viewport atmospheric wash behind the whole screen.
   F401 · EVERY colour stop must run all the way to `transparent 100%`. Ending a
   radial early (…, transparent 62%) leaves a visible arc where the gradient
   stops — that was the "hard line" cutting across the left of the page. The
   extra mid-stops keep the same density while fading to nothing at the edge. */
.flow-main:has(.shield-intro) {
  background:
    radial-gradient(150% 92% at 50% 118%,
      color-mix(in srgb, var(--blue-2) 20%, transparent) 0%,
      color-mix(in srgb, var(--blue-2) 9%, transparent) 38%,
      color-mix(in srgb, var(--blue-2) 2%, transparent) 68%,
      transparent 100%),
    radial-gradient(130% 78% at 50% -18%,
      color-mix(in srgb, var(--teal) 7%, transparent) 0%,
      color-mix(in srgb, var(--teal) 3%, transparent) 42%,
      transparent 100%);
}
/* dark mode adds a faint starfield in the upper air */
:root:not([data-theme="light"]) .flow-main:has(.shield-intro) {
  background:
    radial-gradient(1.5px 1.5px at 12% 18%, rgba(255,255,255,.5), transparent 100%),
    radial-gradient(1px 1px at 30% 8%,  rgba(255,255,255,.38), transparent 100%),
    radial-gradient(1.5px 1.5px at 58% 12%, rgba(255,255,255,.32), transparent 100%),
    radial-gradient(1px 1px at 76% 22%, rgba(255,255,255,.42), transparent 100%),
    radial-gradient(1px 1px at 90% 9%,  rgba(255,255,255,.3),  transparent 100%),
    radial-gradient(1.5px 1.5px at 44% 30%, rgba(255,255,255,.22), transparent 100%),
    radial-gradient(1px 1px at 6% 44%,  rgba(255,255,255,.26), transparent 100%),
    radial-gradient(1px 1px at 96% 42%, rgba(255,255,255,.3),  transparent 100%),
    radial-gradient(150% 92% at 50% 118%,
      color-mix(in srgb, var(--blue-2) 24%, transparent) 0%,
      color-mix(in srgb, var(--blue-2) 11%, transparent) 38%,
      color-mix(in srgb, var(--blue-2) 3%, transparent) 68%,
      transparent 100%),
    radial-gradient(130% 78% at 50% -18%,
      color-mix(in srgb, var(--teal) 8%, transparent) 0%,
      color-mix(in srgb, var(--teal) 3%, transparent) 42%,
      transparent 100%);
}
/* the centered set-piece: emblem + live status pill */
.si-core {
  position: relative; z-index: 1; /* sit above the ring field */
  order: -1; /* emblem leads on the stacked layouts */
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(14px, 2.2vw, 22px);
  /* F233 · the emblem is purely decorative (aria-hidden). Its large box can
     overlap the Activate button that sits below it, and being z-index:1 it was
     stealing the button's clicks (elementFromPoint hit .si-stage, not the CTA).
     Make the whole emblem stack click-transparent so clicks fall through to the
     button beneath it — nothing inside .si-core is interactive. */
  pointer-events: none;
}

/* ── F218 · THE BROAD RING FIELD — concentric orbits centered on the Shield
   that spread across the whole screen behind the constellation. Absolutely
   centered on the container (which is where the shield sits), so it costs the
   layout nothing (pointer-events:none, doesn't affect above-the-fold math).
   Hidden on stacked mobile (the emblem carries its own rings there). ── */
.si-ringfield {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 0; height: 0; pointer-events: none; z-index: 0; display: none;
}
.si-rf-ring {
  position: absolute; left: 50%; top: 50%; border-radius: 50%;
  transform: translate(-50%, -50%);
  border: 1px solid color-mix(in srgb, var(--teal) 18%, transparent);
}
/* four broad orbits — the widest reaches the edges of the viewport */
.si-rf-1 { width: 44vmin;  height: 44vmin; border-color: color-mix(in srgb, var(--teal) 24%, transparent); }
.si-rf-2 { width: 74vmin;  height: 74vmin; border-color: color-mix(in srgb, var(--blue-2) 18%, transparent);
  border-style: dashed; animation: siSpin 60s linear infinite; }
.si-rf-3 { width: 108vmin; height: 108vmin; border-color: color-mix(in srgb, var(--violet) 15%, transparent);
  animation: siSpin 90s linear infinite reverse; }
.si-rf-4 { width: 146vmin; height: 146vmin; border-color: color-mix(in srgb, var(--teal) 11%, transparent);
  animation: siSpin 130s linear infinite; }
/* orbiting jewels ride the two rotating rings */
.si-rf-dot {
  position: absolute; top: -4px; left: 50%; width: 8px; height: 8px; border-radius: 50%;
  transform: translateX(-50%); background: var(--teal);
  box-shadow: 0 0 14px color-mix(in srgb, var(--teal) 80%, transparent);
}
.si-rf-dot-v { background: var(--violet); box-shadow: 0 0 14px color-mix(in srgb, var(--violet) 80%, transparent); }

/* ── the emblem stage — a cinematic set-piece ── */
.si-stage {
  position: relative; width: clamp(190px, 56vw, 340px); height: clamp(190px, 56vw, 340px);
  display: grid; place-items: center; isolation: isolate;
}
.si-glow {
  position: absolute; inset: -18%; border-radius: 50%; z-index: -1;
  background: radial-gradient(circle,
    color-mix(in srgb, var(--blue-2) 26%, transparent) 0%,
    color-mix(in srgb, var(--teal) 14%, transparent) 38%, transparent 70%);
  filter: blur(6px); animation: siGlow 5s ease-in-out infinite;
}
@keyframes siGlow { 0%,100% { opacity: .6; transform: scale(.97); } 50% { opacity: 1; transform: scale(1.06); } }
.si-ring {
  position: absolute; border-radius: 50%; pointer-events: none;
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent);
}
.si-ring-1 { inset: 4%; }
.si-ring-2 { inset: -12%; border-color: color-mix(in srgb, var(--blue-2) 22%, transparent); }
.si-ring-dash {
  inset: -12%; border: 1px dashed color-mix(in srgb, var(--violet) 30%, transparent);
  animation: siSpin 22s linear infinite;
}
@keyframes siSpin { to { transform: rotate(360deg); } }
/* orbiting particles ride invisible rings */
.si-orbit { position: absolute; inset: 4%; border-radius: 50%; pointer-events: none; }
.si-orbit-1 { animation: siSpin 12s linear infinite; }
.si-orbit-2 { inset: -12%; animation: siSpin 18s linear infinite reverse; }
.si-orbit i {
  position: absolute; top: -3px; left: 50%; width: 6px; height: 6px; border-radius: 50%;
  background: var(--teal); box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 80%, transparent);
  transform: translateX(-50%);
}
.si-orbit-2 i:nth-child(2) { top: auto; bottom: -3px; background: var(--violet);
  box-shadow: 0 0 10px color-mix(in srgb, var(--violet) 80%, transparent); }
.si-aura {
  position: absolute; inset: 16%; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 24%, transparent) 0%, transparent 66%);
  animation: siAura 4.2s ease-in-out infinite;
}
@keyframes siAura { 0%,100% { transform: scale(1); opacity: .8; } 50% { transform: scale(1.12); opacity: 1; } }
/* ── F224 · the disc IS a photographic world — the SVG paints the planet
   (ocean, continents, cloud decks, sun glint); the disc shell provides the
   ATMOSPHERE: Rayleigh-blue scatter rim, space-black limb falloff, and the
   day→night terminator. Space-photo realism, Shield standing on top. ── */
.si-disc {
  position: relative; width: 66%; height: 66%; border-radius: 50%;
  display: grid; place-items: center; overflow: hidden;
  perspective: 900px;
  background: #041233; /* abyssal base under the SVG planet */
  border: 1px solid rgba(140, 200, 255, .38);
  box-shadow:
    /* atmospheric scatter — the bright blue air line photographed from orbit */
    inset 0 0 3px 1px rgba(160, 214, 255, .5),
    inset 0 6px 22px rgba(140, 205, 255, .38),
    inset 0 -30px 54px rgba(2, 8, 26, .78),
    inset -20px -10px 50px rgba(9, 20, 60, .55),
    /* the glow the atmosphere throws into space */
    0 0 26px rgba(90, 170, 255, .38),
    0 0 74px rgba(60, 130, 245, .26),
    0 26px 80px rgba(10, 40, 130, .45);
}
/* day→night terminator sweeping the SE hemisphere — deep, photographic */
.si-disc::after {
  content: ''; position: absolute; inset: 0; border-radius: 50%; pointer-events: none;
  background:
    linear-gradient(118deg, transparent 40%, rgba(2, 8, 26, .34) 66%, rgba(2, 8, 26, .78) 92%),
    radial-gradient(circle at 32% 24%, rgba(255,255,255,.14), transparent 46%);
}
/* the painted planet */
.si-earth { position: absolute; inset: 0; display: grid; place-items: center; pointer-events: none; }
.si-earth-svg { width: 100%; height: 100%; display: block; }
/* cloud decks drift — the planet is alive (GPU-cheap: opacity/transform only) */
@media (prefers-reduced-motion: no-preference) {
  .si-earth-clouds { animation: siCloudDrift 46s ease-in-out infinite alternate; }
  .si-earth-land   { animation: siLandDrift 80s ease-in-out infinite alternate; }
}
@keyframes siCloudDrift {
  0%   { transform: translate(-2.5px, 0) rotate(0.001deg); opacity: .52; }
  50%  { opacity: .66; }
  100% { transform: translate(2.5px, -1.5px) rotate(0.001deg); opacity: .56; }
}
@keyframes siLandDrift {
  0%   { transform: translate(1.2px, 0); }
  100% { transform: translate(-1.2px, .8px); }
}
/* holographic overlay grid — whisper-faint tech layer, dialled back so the
   photographic sphere shading reads first */
.si-earth-grid ellipse {
  stroke: rgba(150, 220, 255, .12); stroke-width: .4;
}
/* network nodes pulsing above the surface — life on the planet */
.si-earth-node {
  fill: #7ff0e2;
  animation: siNodePulse 3.2s ease-in-out var(--nd, 0s) infinite;
}
@keyframes siNodePulse {
  0%, 100% { opacity: .2; }
  50%      { opacity: .95; }
}
/* night-side civilisation — warm city lights twinkling on the shaded
   hemisphere. Hidden in daylight (light theme), alive in the dark. */
.si-earth-lights { opacity: 0; }
:root:not([data-theme="light"]) .si-earth-lights { opacity: 1; }
.si-earth-light {
  fill: #ffdca6;
  filter: drop-shadow(0 0 1.8px rgba(255, 190, 110, .95));
  animation: siCityTwinkle 4.2s ease-in-out var(--ld, 0s) infinite;
}
@keyframes siCityTwinkle {
  0%, 100% { opacity: .45; }
  50%      { opacity: 1; }
}

/* ── F226 · THE SCREENING THEATER — meds/conditions fly at the shield and get
   BLOCKED (red, deflected) or APPROVED (green, absorbed). Desktop only. ── */
.si-theater { position: absolute; inset: 0; z-index: 2; pointer-events: none; overflow: visible; }
.si-fly {
  position: absolute; display: inline-flex; align-items: center; gap: 7px;
  padding: 7px 13px; border-radius: 999px; white-space: nowrap; will-change: transform, opacity;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 12.5px; font-weight: 600; letter-spacing: .02em; color: var(--text);
  background: color-mix(in srgb, var(--surface) 78%, transparent);
  border: 1px solid color-mix(in srgb, var(--blue-2) 30%, var(--border, transparent));
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: 0 8px 24px color-mix(in srgb, var(--bg) 40%, transparent);
}
.si-fly-dot { width: 7px; height: 7px; border-radius: 50%; flex: none;
  background: var(--blue-2); box-shadow: 0 0 8px color-mix(in srgb, var(--blue-2) 70%, transparent); }
.si-fly-ic { display: none; width: 15px; height: 15px; flex: none; border-radius: 50%;
  background-position: center; background-repeat: no-repeat; background-size: 9px; }
/* verdict states — the chip itself declares the ruling */
.si-fly.is-blocked {
  color: var(--danger); border-color: color-mix(in srgb, var(--danger) 55%, transparent);
  background: color-mix(in srgb, var(--danger) 14%, var(--surface));
  box-shadow: 0 0 22px color-mix(in srgb, var(--danger) 34%, transparent);
  transition: color .18s, border-color .18s, background .18s, box-shadow .18s;
}
.si-fly.is-blocked .si-fly-dot { background: var(--danger); box-shadow: 0 0 10px var(--danger); }
.si-fly.is-blocked .si-fly-ic { display: block;
  background-color: var(--danger);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.4' stroke-linecap='round'%3E%3Cpath d='m7 7 10 10M17 7 7 17'/%3E%3C/svg%3E"); }
.si-fly.is-passed {
  color: var(--teal); border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  background: color-mix(in srgb, var(--teal) 13%, var(--surface));
  box-shadow: 0 0 22px color-mix(in srgb, var(--teal) 32%, transparent);
  transition: color .18s, border-color .18s, background .18s, box-shadow .18s;
}
.si-fly.is-passed .si-fly-dot { background: var(--teal); box-shadow: 0 0 10px var(--teal); }
.si-fly.is-passed .si-fly-ic { display: block;
  background-color: var(--teal);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.2 4.2L19 7.5'/%3E%3C/svg%3E"); }
/* verdict ring — pulses out from the contact point on the shield's aura */
.si-vring {
  position: absolute; width: 22px; height: 22px; border-radius: 50%;
  transform: translate(-50%, -50%) scale(.4); opacity: 0; pointer-events: none;
  border: 2px solid var(--teal);
  animation: siVring .85s cubic-bezier(.16,1,.3,1) forwards;
}
.si-vring.is-blocked { border-color: var(--danger);
  box-shadow: 0 0 24px color-mix(in srgb, var(--danger) 50%, transparent); }
.si-vring.is-passed { border-color: var(--teal);
  box-shadow: 0 0 24px color-mix(in srgb, var(--teal) 45%, transparent); }
@keyframes siVring {
  0%   { transform: translate(-50%,-50%) scale(.4); opacity: .95; }
  100% { transform: translate(-50%,-50%) scale(3.4); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) { .si-theater { display: none; } }
/* light theme: daylight-side earth — brighter air, softer space falloff */
[data-theme="light"] .si-disc {
  border-color: rgba(120, 185, 255, .55);
  box-shadow:
    inset 0 0 3px 1px rgba(190, 228, 255, .6),
    inset 0 8px 24px rgba(170, 218, 255, .45),
    inset 0 -26px 48px rgba(6, 18, 52, .55),
    inset -18px -9px 44px rgba(20, 40, 100, .35),
    0 0 26px rgba(110, 180, 255, .42),
    0 0 70px rgba(80, 145, 245, .28),
    0 24px 70px rgba(30, 70, 170, .35);
}
[data-theme="light"] .si-disc::after {
  background:
    linear-gradient(118deg, transparent 46%, rgba(4, 12, 38, .22) 72%, rgba(4, 12, 38, .55) 96%),
    radial-gradient(circle at 32% 24%, rgba(255,255,255,.2), transparent 48%);
}
[data-theme="light"] .si-earth-grid ellipse { stroke: rgba(255, 255, 255, .28); }
/* F189 · the brand iD shield as a two-sided 3D coin — a slow, luxe flip that
   holds the iD face, turns to reveal a self-drawing verified checkmark, holds,
   then turns back forever. Front/back never both show (backface-visibility).
   The iD mark is inset small inside the shell for a clean $40B presentation. */
.si-coin {
  position: relative; z-index: 2; /* the Shield stands in front of the world */
  width: 60%; aspect-ratio: 1; place-self: center;
  transform-style: preserve-3d; will-change: transform;
  animation: siCoin 9.5s cubic-bezier(.65,0,.35,1) infinite;
}
.si-face {
  position: absolute; inset: 0; display: grid; place-items: center;
  -webkit-backface-visibility: hidden; backface-visibility: hidden;
}
.si-face-back { transform: rotateY(180deg); }
.si-shield-svg, .si-brand-svg { width: 100%; height: 100%; display: block; }
/* F221 · the dimensional shield throws real light: deep blue ambient + a teal
   energy kiss + a tight contact shadow so it sits IN the scene, not on it */
.si-brand-svg.si3d {
  filter:
    drop-shadow(0 18px 34px color-mix(in srgb, var(--blue-2) 52%, transparent))
    drop-shadow(0 4px 10px color-mix(in srgb, #04102e 55%, transparent))
    drop-shadow(0 0 26px color-mix(in srgb, var(--teal) 26%, transparent));
}
.si3d-mark { filter: drop-shadow(0 1px 1.4px rgba(3, 9, 28, .5)); }
@keyframes siCoin {
  0%   { transform: rotateY(0deg); }
  38%  { transform: rotateY(0deg); }
  50%  { transform: rotateY(180deg); }
  88%  { transform: rotateY(180deg); }
  100% { transform: rotateY(360deg); }
}
.si-check2 { stroke-dasharray: 12; stroke-dashoffset: 12;
  animation: siCheckDraw 9.5s ease-out infinite; }
@keyframes siCheckDraw {
  0%, 50%   { stroke-dashoffset: 12; }
  64%       { stroke-dashoffset: 0; }
  86%       { stroke-dashoffset: 0; }
  92%, 100% { stroke-dashoffset: 12; }
}
/* sweeping scan beam across the disc */
.si-scan {
  position: absolute; width: 62%; height: 62%; border-radius: 50%; overflow: hidden;
  pointer-events: none; -webkit-mask: radial-gradient(circle, #000 99%, transparent);
          mask: radial-gradient(circle, #000 99%, transparent);
}
.si-scan::before {
  content: ''; position: absolute; inset: -50%;
  background: linear-gradient(90deg, transparent 42%, color-mix(in srgb, var(--teal) 55%, transparent) 50%, transparent 58%);
  animation: siScan 3.6s ease-in-out infinite;
}
@keyframes siScan { 0% { transform: translateX(-60%); opacity: 0; } 40%,60% { opacity: 1; } 100% { transform: translateX(60%); opacity: 0; } }
.si-stage.si-activating .si-disc { animation: siFlip .65s cubic-bezier(.16,1,.3,1); }
.si-stage.si-activating .si-glow { animation: siBurst .9s cubic-bezier(.16,1,.3,1); }
@keyframes siFlip { 0% { transform: scale(1); } 42% { transform: scale(1.14); } 100% { transform: scale(1); } }
@keyframes siBurst { 0% { opacity: .6; } 45% { opacity: 1; transform: scale(1.28); } 100% { opacity: .8; transform: scale(1.06); } }

/* ── the status line — the red→teal flip is THE moment. A jewel, not a shout. ── */
.si-status {
  display: inline-flex; align-items: center; gap: 10px;
  position: relative; z-index: 4; isolation: isolate;
  padding: clamp(9px, 1.2vw, 13px) clamp(20px, 2.6vw, 30px); border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: clamp(13px, 2vw, 16.5px); letter-spacing: .14em;
  text-transform: uppercase;
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  transition: color .45s ease, border-color .45s ease, background .45s ease, box-shadow .45s ease;
}
.si-status .si-dot { width: 10px; height: 10px; border-radius: 50%; flex: none; }
.si-status.inactive {
  color: var(--danger);
  border: 1px solid color-mix(in srgb, var(--danger) 42%, transparent);
  background: color-mix(in srgb, var(--danger) 12%, var(--bg));
}
.si-status.inactive .si-dot { background: var(--danger); animation: qspPulse 1.6s ease-in-out infinite; }
.si-status.active {
  color: var(--teal);
  border: 1px solid color-mix(in srgb, var(--teal) 45%, transparent);
  background: color-mix(in srgb, var(--teal) 12%, var(--bg));
  box-shadow: 0 6px 24px color-mix(in srgb, var(--teal) 22%, transparent);
}
.si-status.active .si-dot { background: var(--teal); box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 70%, transparent); }

/* ── F401 · "BUILT INTO YOUR ASSESSMENT" — the branded line the world spins
   under. Letter-spaced small caps with a live teal beacon. ── */
.si-eyebrow {
  display: inline-flex; align-items: center; gap: 10px;
  position: relative; z-index: 4;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: clamp(10.5px, 1vw, 12.5px);
  letter-spacing: .3em; text-transform: uppercase;
  color: var(--teal);
}
.si-eyebrow i {
  width: 7px; height: 7px; border-radius: 50%; flex: none;
  background: var(--teal); box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 75%, transparent);
  animation: qspPulse 2.4s ease-in-out infinite;
}

/* ── F401 · THE EDITORIAL COLUMN — statement, lede, body, scope marks,
   responsibility note, CTA. Center-aligned; vertically centered in its lane. */
.si-copy {
  position: relative; z-index: 2;
  display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: clamp(14px, 1.8vw, 22px); width: 100%; max-width: 680px; margin: 0 auto;
}
.si-eyebrow-tx {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: clamp(10.5px, 1vw, 12.5px);
  letter-spacing: .3em; text-transform: uppercase; color: var(--teal);
}
.si-statement {
  margin: 0;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; letter-spacing: -.035em; line-height: 1.04;
  font-size: clamp(30px, 4.4vw, 54px); color: var(--text);
  text-wrap: balance;
}
.si-lede {
  margin: 0; color: var(--text);
  font-size: clamp(16px, 1.6vw, 21px); font-weight: 700; line-height: 1.4;
  letter-spacing: -.01em; text-wrap: balance;
}
.si-body {
  margin: 0; color: var(--muted-2, var(--text-2, var(--muted)));
  font-size: clamp(14.5px, 1.25vw, 17px); line-height: 1.62; max-width: 62ch;
}
.si-foot {
  margin: 0; color: var(--muted);
  font-size: clamp(13px, 1.1vw, 15px); line-height: 1.55; max-width: 58ch;
}
/* the three scope words carry the emphasis inline in the body copy now */
.si-body strong { color: var(--text); font-weight: 700; }

/* ── CTA row + trust footnote ── */
.si-cta-row {
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  width: 100%; margin-top: 4px;
  /* F233 · keep the real CTA above the decorative emblem overflow */
  position: relative; z-index: 2;
  /* F329 · full-width row, but only its button/note are interactive. Its empty
     side area sits over the absolute Back footer, so let clicks fall through the
     row and re-enable pointer events on its real children only. */
  pointer-events: none;
}
.si-cta-row > * { pointer-events: auto; }
.si-cta {
  min-width: min(300px, 100%);
  font-size: clamp(15.5px, 1.5vw, 18px);
  padding: clamp(14px, 1.6vw, 18px) clamp(28px, 3vw, 40px);
}
.si-cta svg { width: 18px; height: 18px; }

/* F401 · the footer Continue is a MOBILE-ONLY twin of the in-copy CTA (so Back +
   Continue sit where every other question puts them). Hidden by default; the
   phone media block turns it on and hides the in-copy `.si-cta-row`. */
.si-foot-cta { display: none; }

/* F401 · the Shield-intro owns its own hero chrome entirely — the eyebrow,
   statement and lede all render INSIDE the right-hand `.si-copy` column, so the
   default question header at the top of `.q-wrap` is suppressed. */
.q-wrap:has(.shield-intro) > .q-domain,
.q-wrap:has(.shield-intro) > .q-headline,
.q-wrap:has(.shield-intro) > .q-subtext { display: none; }

/* ── TABLET (≥641px) · stacked, but roomier — emblem block on top, the
   editorial statement centered beneath it. ── */
@media (min-width: 641px) and (max-width: 1023px) {
  .si { gap: clamp(18px, 3vw, 30px); }
  .si-constellation { max-width: 720px; margin: 0 auto; }
  .si-core { padding: clamp(8px, 2vw, 20px) 0 0; }
  .si-copy { max-width: 620px; }
}

/* ── DESKTOP (≥1024px) · THE TWO-COLUMN COMPOSITION — the living world/Shield
   emblem centered in the LEFT column (horizontally + vertically), the editorial
   statement centered in the RIGHT. `.si` becomes the grid so the CTA travels
   with the copy it belongs to. ── */
@media (min-width: 1024px) {
  .si {
    display: grid; align-items: center; justify-items: center;
    grid-template-columns: minmax(360px, 1fr) minmax(420px, 1.04fr);
    column-gap: clamp(36px, 5vw, 88px); row-gap: 0;
    max-width: min(1440px, 94vw); margin: 0 auto;
    padding-top: 0; min-height: 100%;
  }
  .si-constellation {
    grid-column: 1; align-self: center; justify-self: center;
    display: flex; align-items: center; justify-content: center;
    height: 100%; max-width: none; margin: 0;
  }
  .si-core {
    order: 0; justify-self: center; align-self: center;
    gap: clamp(16px, 2.2vw, 26px); padding: 0;
  }
  .si-copy { grid-column: 2; align-self: center; }
  .si-cta-row { margin-top: clamp(4px, 0.8vw, 10px); }
}

/* the emblem is commanding on desktop (it is the hero) — sized against the
   VIEWPORT HEIGHT so it can be as big as possible while the whole composition
   (incl. the CTA) still lives above the fold */
@media (min-width: 1024px) {
  .si-stage { width: clamp(300px, 46vh, 480px); height: clamp(300px, 46vh, 480px); }
  /* the WORLD fills the stage — the emblem IS the planet now */
  .si-disc { width: 78%; height: 78%; }
  /* the broad ring field turns ON at desktop — it spreads across the screen */
  .si-ringfield { display: block; }
  /* the emblem's own small orbit rings + scan are redundant behind the wide
     field on desktop — quiet them so the composition reads clean & broad */
  .si-stage .si-ring, .si-stage .si-orbit { opacity: 0; }
}

/* ── F401 · ABOVE-THE-FOLD on desktop — the two columns are each vertically
   centered, so height is set by whichever column is taller (usually the copy).
   Tighten the emblem + copy rhythm per viewport height so the CTA always lands
   above the fold with the world still commanding its column. ── */
@media (min-width: 1024px) and (max-height: 900px) {
  .si-core { gap: clamp(10px, 1.6vw, 18px); }
  .si-stage { width: clamp(280px, 42vh, 440px); height: clamp(280px, 42vh, 440px); }
  .si-copy { gap: clamp(11px, 1.4vw, 17px); }
  .si-statement { font-size: clamp(28px, 4.4vh, 44px); }
  .si-cta-row { margin-top: 0; }
  .si-cta { padding: clamp(11px, 1.2vw, 15px) clamp(26px, 2.6vw, 38px); }
}

/* mid-height laptops */
@media (min-width: 1024px) and (max-height: 820px) {
  .si-stage { width: clamp(260px, 39vh, 400px); height: clamp(260px, 39vh, 400px); }
  .si-body { font-size: clamp(14px, 1.15vw, 15.5px); line-height: 1.55; }
}

/* short laptops (13" chrome ~ 720-780px usable) */
@media (min-width: 1024px) and (max-height: 760px) {
  .si-statement { font-size: clamp(25px, 3.9vh, 36px); }
  .si-stage { width: clamp(230px, 35vh, 350px); height: clamp(230px, 35vh, 350px); }
  .si-copy { gap: clamp(9px, 1.1vw, 14px); }
  .si-lede { font-size: clamp(15px, 1.4vw, 18px); }
}

/* very short viewports (small laptop windows / not-fullscreen) — keep the
   CTA comfortably above the fold */
@media (min-width: 1024px) and (max-height: 700px) {
  .si-statement { font-size: clamp(23px, 3.5vh, 31px); }
  .si-stage { width: clamp(210px, 32vh, 310px); height: clamp(210px, 32vh, 310px); }
  .si-core { gap: clamp(8px, 1.2vw, 13px); }
  .si-foot { font-size: 12.5px; }
}

/* compact (returner / Shield Active) variant — a smaller world, same two
   columns. The copy column is unchanged; only the emblem shrinks. */
.si-compact .si-stage { width: clamp(130px, 40vw, 200px); height: clamp(130px, 40vw, 200px); }
@media (min-width: 1024px) {
  .si-compact .si-stage { width: clamp(240px, 34vh, 380px); height: clamp(240px, 34vh, 380px); }
}

/* ── the topbar Shield pill (every question) ── */
.q-shield-pill {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 13px; border-radius: 999px; flex: none;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 600; font-size: 12px; letter-spacing: .02em;
  transition: color .45s ease, border-color .45s ease, background .45s ease;
}
.q-shield-pill svg { width: 13px; height: 13px; }
.q-shield-pill .qsp-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.q-shield-pill.inactive {
  color: var(--danger);
  border: 1px solid color-mix(in srgb, var(--danger) 40%, transparent);
  background: var(--danger-soft);
}
.q-shield-pill.inactive .qsp-dot { background: var(--danger); animation: qspPulse 1.6s ease-in-out infinite; }
.q-shield-pill.active {
  color: var(--teal);
  border: 1px solid color-mix(in srgb, var(--teal) 42%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent);
}
.q-shield-pill.active .qsp-dot { background: var(--teal); box-shadow: 0 0 8px color-mix(in srgb, var(--teal) 65%, transparent); }
/* Same slot, different job: the way back to the portal on a portal-started run. */
.q-shield-pill.q-home-pill {
  color: var(--text-2); cursor: pointer;
  border: 1px solid var(--border); background: var(--fill-1);
  transition: color .25s, border-color .25s, background .25s, transform .25s var(--ease-out);
}
.q-shield-pill.q-home-pill:hover {
  color: var(--text); border-color: var(--border-hi);
  background: var(--fill-hover); transform: translateY(-1px);
}
.q-shield-pill.q-home-pill svg { width: 14px; height: 14px; }
@keyframes qspPulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }

/* responsive: icon-only Shield pill on phones */
@media (max-width: 640px) {
  .q-shield-pill .qsp-tx { display: none; }
  .q-shield-pill { padding: 5px 9px; }
}

/* ── PHONE PERFORMANCE PROFILE · Shield intro ──────────────────────────────
  Mobile keeps the premium Shield story, including flying safety chips and the
  inactive→active moment, but caps the animation budget: one theater chip at a
  time, lighter filters, slower ambient motion, and no full-screen activation
  flight. The CTA stays sticky and tap-safe on low-memory browsers. */
@media (max-width: 640px) {
  #screen-question:has(.shield-intro) { min-height: 100dvh; overflow: hidden; }
  /* F401 · the Back footer joins the column instead of sitting absolutely behind
     the content. It used to be hidden under the CTA's opaque sticky bar; with
     that slab gone it must own real space or it collides with the trust note.
     (The footer carries an inline `display:flex`, so display can't be toggled.) */
  #screen-question:has(.shield-intro) > div:last-of-type {
    position: static; z-index: 1; padding: 4px 14px max(12px, env(safe-area-inset-bottom));
  }
  #screen-question:has(.shield-intro) .flow-topbar { padding: 12px calc(64px + env(safe-area-inset-right)) 12px 14px; }
  /* F401 · the ambient wash lives on the whole SECTION (which fills 100dvh), not
     on the scrollable .flow-main — otherwise the fixed Back footer sibling below
     it shows the bare page (a white strip) and the backdrop looks cut off. */
  #screen-question:has(.shield-intro) {
    background:
      radial-gradient(140% 62% at 50% -4%,
        color-mix(in srgb, var(--teal) 10%, transparent) 0%,
        color-mix(in srgb, var(--teal) 4%, transparent) 44%,
        transparent 100%),
      radial-gradient(150% 74% at 50% 104%,
        color-mix(in srgb, var(--blue-2) 16%, transparent) 0%,
        color-mix(in srgb, var(--blue-2) 7%, transparent) 46%,
        transparent 100%);
  }
  :root:not([data-theme="light"]) #screen-question:has(.shield-intro) {
    background:
      radial-gradient(1px 1px at 18% 12%, rgba(255,255,255,.32), transparent 100%),
      radial-gradient(1px 1px at 78% 15%, rgba(255,255,255,.24), transparent 100%),
      radial-gradient(140% 62% at 50% -4%,
        color-mix(in srgb, var(--teal) 10%, transparent) 0%,
        color-mix(in srgb, var(--teal) 4%, transparent) 44%,
        transparent 100%),
      radial-gradient(150% 74% at 50% 104%,
        color-mix(in srgb, var(--blue-2) 18%, transparent) 0%,
        color-mix(in srgb, var(--blue-2) 8%, transparent) 46%,
        transparent 100%);
  }
  #screen-question:has(.shield-intro) .flow-main {
    flex: 1; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain; contain: layout paint;
    background: none;
  }
  #screen-question:has(.shield-intro) .q-wrap {
    width: 100%; max-width: 100%; min-height: auto;
    padding: 4px 14px max(26px, calc(14px + env(safe-area-inset-bottom)));
  }
  .shield-intro { min-height: auto; }
  .si { gap: 16px; padding: 0; }
  .si-constellation { gap: 10px; max-width: 430px; margin: 0 auto; }
  /* F401 · hide both eyebrows on phones — the "Built into your assessment" line
     under the globe and the duplicate "IDLife Shield" label — to save space. */
  .si-eyebrow, .si-eyebrow-tx { display: none; }
  /* F401 · size the statement so it lands on TWO lines on phones (was 3) —
     "What we don't recommend," / "matters too." — with balanced wrapping. */
  .si-statement { font-size: clamp(22px, 6.4vw, 27px); line-height: 1.12; }
  .si-lede { font-size: 15.5px; line-height: 1.38; }
  .si-body { font-size: 14px; line-height: 1.55; }
  .si-foot { display: none; }
  .si-constellation::before { inset: -16% -12%; filter: blur(10px); opacity: .62; }
  .si-ringfield, .si-ring-2, .si-orbit,
  .si-earth-grid, .si-earth-nodes, .si-earth-lights { display: none !important; }
  .si-core { gap: 8px; order: -1; padding: 0 0 2px; }
  .si-stage { width: clamp(190px, 58vw, 252px); height: clamp(190px, 58vw, 252px); }
  .si-glow { inset: -10%; filter: blur(4px); opacity: .76; animation: none; }
  .si-ring-1 { inset: 5%; opacity: .6; }
  .si-ring-dash { display: block; inset: -8%; opacity: .42; animation-duration: 46s; }
  .si-aura { animation-duration: 6.8s; opacity: .62; }
  .si-disc {
    width: 70%; height: 70%; perspective: none; transform: translateZ(0);
    box-shadow:
      inset 0 0 3px rgba(190, 228, 255, .42),
      inset 0 -20px 38px rgba(6, 18, 52, .46),
      0 12px 34px rgba(40, 92, 190, .22);
  }
  .si-disc::after { background: radial-gradient(circle at 32% 24%, rgba(255,255,255,.16), transparent 48%); }
  .si-earth-clouds, .si-earth-land { animation: none !important; }
  .si-coin { animation-duration: 13s; will-change: transform; }
  .si-scan { display: block; width: 60%; height: 60%; opacity: .34; }
  .si-scan::before { animation-duration: 5.4s; }
  .si-brand-svg.si3d { filter: drop-shadow(0 8px 18px color-mix(in srgb, var(--blue-2) 38%, transparent)); }
  .si-stage.si-mobile-activated .si-disc { animation: siMobileShieldPop .74s cubic-bezier(.16,1,.3,1); }
  .si-stage.si-mobile-activated .si-glow { animation: siMobileGlowPop .74s cubic-bezier(.16,1,.3,1); }
  @keyframes siMobileShieldPop { 0% { transform: scale(1); } 42% { transform: scale(1.08); } 100% { transform: scale(1); } }
  @keyframes siMobileGlowPop { 0% { opacity: .72; transform: scale(.98); } 45% { opacity: 1; transform: scale(1.12); } 100% { opacity: .76; transform: scale(1); } }
  .si-status {
    padding: 8px 16px; font-size: 12px; letter-spacing: .11em;
    -webkit-backdrop-filter: none; backdrop-filter: none;
    transition: color .18s ease, border-color .18s ease, background .18s ease, box-shadow .18s ease;
  }
  .si-status.inactive .si-dot, .q-shield-pill.inactive .qsp-dot { animation: none; }
  .si-status.active { box-shadow: 0 5px 18px color-mix(in srgb, var(--teal) 18%, transparent); }
  .si-theater { display: block; inset: 0; overflow: visible; }
  .si-fly {
    padding: 6px 10px; gap: 6px; font-size: 11.5px; max-width: min(184px, 54vw);
    overflow: hidden; text-overflow: ellipsis;
    -webkit-backdrop-filter: none; backdrop-filter: none;
    box-shadow: 0 7px 18px color-mix(in srgb, var(--bg) 22%, transparent);
  }
  .si-vring { animation-duration: .62s; }
  .si-mobile-fly-home {
    position: fixed; z-index: 1300; pointer-events: none; opacity: 0;
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    transform: translate3d(0,0,0) scale(.72);
    will-change: transform, opacity;
    padding: 0 14px; border-radius: 999px;
    font-family: var(--font-display, 'Space Grotesk'), sans-serif;
    font-size: 12px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;
    background: color-mix(in srgb, var(--bg) 82%, transparent);
    border: 1px solid currentColor;
    box-shadow: 0 14px 34px color-mix(in srgb, var(--bg) 48%, transparent);
    filter: drop-shadow(0 0 18px color-mix(in srgb, currentColor 28%, transparent));
    transition: opacity .12s ease, color .18s ease, background .18s ease, border-color .18s ease, box-shadow .18s ease;
  }
  .si-mobile-fly-home.show { opacity: 1; }
  .si-mobile-fly-home.is-inactive { color: var(--danger); background: color-mix(in srgb, var(--danger) 14%, var(--bg)); }
  .si-mobile-fly-home.is-active {
    color: var(--teal); background: color-mix(in srgb, var(--teal) 15%, var(--bg));
    box-shadow: 0 14px 34px color-mix(in srgb, var(--teal) 24%, transparent);
  }
  .si-mobile-fly-ic { width: 18px; height: 18px; display: grid; place-items: center; flex: none; }
  .si-mobile-fly-ic svg { width: 18px; height: 18px; display: block; }
  /* F401 · on mobile the in-copy CTA is REPLACED by a footer Continue that sits
     in the exact Back/Continue position of every other question — so users can
     spam-tap the same spot to fly through. Hide the in-copy CTA row here; the
     footer button (below) proxies its click. */
  .si-cta-row { display: none; }
  /* the shield footer mirrors a normal .q-foot: Back left, full-width Continue
     right, same row the pages before/after use. */
  #screen-question:has(.shield-intro) > div:last-of-type { padding: 0 14px max(16px, calc(12px + env(safe-area-inset-bottom))); }
  #screen-question:has(.shield-intro) .q-foot { flex-wrap: nowrap; margin-top: 8px; }
  .si-foot-cta { display: inline-flex; flex: 1 1 auto; min-height: 54px; }
}

@media (prefers-reduced-motion: reduce) {
  .si-glow, .si-aura, .si-ring-dash, .si-orbit, .si-scan::before, .si-coin, .si-check2,
  .si-rf-2, .si-rf-3, .si-rf-4, .si-earth-node, .si-earth-clouds, .si-earth-land,
  .si-earth-light,
  .si-status.inactive .si-dot, .q-shield-pill.inactive .qsp-dot { animation: none; }
  .si-eyebrow i { animation: none; }
  .si-stage.si-activating .si-disc, .si-stage.si-activating .si-glow { animation: none; }
  .si-status, .q-shield-pill { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F374 · THE SHIELD MOMENT — full-screen cinematic. The photographic globe from
   "Meet the IDLife Shield" is the living centerpiece; the member's own blocked
   products deflect off it (red) while the ranked recommended products are
   accepted into it (green), on a perpetual memory-safe loop. Dual-theme,
   responsive (phone / tablet / computer), reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */
/* F379c · PRELOADER BRIDGE — an opaque, full-screen cover that reuses the exact
   pre-reveal processing animation to bridge the Shield Moment → Plan handoff.
   Sits ABOVE the Shield report (z 1300 > 1200) so it hides the report while it
   fades in, then fades away over the settled Plan. One opaque layer = no flash. */
.sm-bridge {
  position: fixed; inset: 0; z-index: 1300;
  display: grid; place-items: center;
  opacity: 0; transition: opacity .42s cubic-bezier(.22,1,.36,1);
  overflow: hidden;
  will-change: opacity; transform: translateZ(0);
  -webkit-backface-visibility: hidden; backface-visibility: hidden;
}
.sm-bridge.show { opacity: 1; }
.sm-bridge .sm-bridge-veil {
  position: absolute; inset: 0;
  /* EXACT replica of the app's ambient `.bg` mesh — the same backdrop the real
     #screen-processing sits on (opaque var(--bg-1) base + the identical
     blue/teal/violet radials), so the bridge is indistinguishable from the
     pre-reveal processing screen in BOTH themes. */
  background:
    radial-gradient(120% 90% at 78% -10%,  rgba(79,142,247,0.16),  transparent 55%),
    radial-gradient(110% 90% at 12% 108%,  rgba(20,224,203,0.16),  transparent 55%),
    radial-gradient(90%  80% at 100% 60%,  rgba(181,108,255,0.10), transparent 60%),
    var(--bg-1);
}
/* EXACT replica of `#screen-processing .flow.proc-flow` (those rules are
   ID-scoped so they don't reach the clone) — same grid centering, same sizing,
   so the stage sits centered in the viewport precisely like the real screen. */
.sm-bridge .flow.proc-flow {
  position: relative; z-index: 1;
  display: grid; place-items: center; gap: 0;
  width: 100%; max-width: var(--w-flow); min-height: 60vh;
}

.shield-moment {
  position: fixed; inset: 0; z-index: 1200;
  display: flex; align-items: center; justify-content: center;
  padding: 0;
  opacity: 0; transition: opacity .45s cubic-bezier(.22,1,.36,1);
  overflow: hidden;   /* F374 · never let the broad ring field spill past the device */
  /* F375 · GPU-composite the whole overlay so the fade-in stays buttery in
     every browser (Safari/Firefox included) — promote to its own layer and
     hint the compositor so the heavy backdrop-blur never causes entrance jank. */
  will-change: opacity;
  transform: translateZ(0);
  -webkit-backface-visibility: hidden; backface-visibility: hidden;
}
.shield-moment.show { opacity: 1; }
.sm-veil {
  position: absolute; inset: 0;
  /* OPAQUE base first (the assessment score behind must never show through),
     then the atmospheric glows layered on top of it. */
  background:
    radial-gradient(120% 80% at 50% -10%, color-mix(in srgb, var(--blue-2) 22%, transparent), transparent 60%),
    radial-gradient(90% 60% at 50% 120%, color-mix(in srgb, var(--teal) 12%, transparent), transparent 58%),
    var(--bg, #03060f);
  backdrop-filter: blur(22px) saturate(1.15);
  -webkit-backdrop-filter: blur(22px) saturate(1.15);
}
/* dark mode gets a faint starfield in the upper air (mirrors the shield-intro) */
:root:not([data-theme="light"]) .sm-veil {
  background:
    radial-gradient(1.5px 1.5px at 14% 16%, rgba(255,255,255,.5), transparent 100%),
    radial-gradient(1px 1px at 32% 9%, rgba(255,255,255,.4), transparent 100%),
    radial-gradient(1.5px 1.5px at 60% 13%, rgba(255,255,255,.34), transparent 100%),
    radial-gradient(1px 1px at 78% 22%, rgba(255,255,255,.42), transparent 100%),
    radial-gradient(1px 1px at 90% 10%, rgba(255,255,255,.3), transparent 100%),
    radial-gradient(1.5px 1.5px at 46% 30%, rgba(255,255,255,.22), transparent 100%),
    radial-gradient(120% 80% at 50% -10%, color-mix(in srgb, var(--blue-2) 26%, transparent), transparent 60%),
    radial-gradient(90% 60% at 50% 120%, color-mix(in srgb, var(--teal) 12%, transparent), transparent 58%),
    var(--bg, #03060f);
}
.sm-card {
  position: relative; z-index: 1;
  width: 100%; height: 100%; max-height: 100dvh;
  overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch;
  /* vertically CENTER the whole report so there's no dead space above the hero;
     `margin:auto` on a flex column keeps it centered but lets it scroll when it
     grows taller than the viewport (no clipped top). */
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: clamp(16px, 2.2vh, 26px);
  text-align: center;
  padding: clamp(20px, 3vh, 40px) clamp(18px, 4vw, 56px);
  background: transparent; border: none; box-shadow: none;
  transform: translate3d(0, 18px, 0) scale(.985);
  transition: transform .55s cubic-bezier(.22,1,.36,1);
  will-change: transform;
}
.sm-card > * { flex: none; }
.shield-moment.show .sm-card { transform: translate3d(0, 0, 0) scale(1); }
.sm-back,
.fv-back {
  position: absolute; top: 16px; left: 16px; z-index: 4;
  display: inline-flex; align-items: center; gap: 7px;
  min-height: 38px; padding: 0 13px; border-radius: var(--r-pill);
  border: 1px solid var(--border); background: var(--surface-2);
  color: var(--text-2); font-family: var(--font-display); font-weight: 700; font-size: 12.5px;
  cursor: pointer; transition: color .2s var(--ease-out), background .2s var(--ease-out), transform .2s var(--ease-out);
}
.sm-back:hover,
.fv-back:hover { color: var(--text); background: var(--surface-hi); transform: translateY(-1px); }
.sm-back svg,
.fv-back svg { width: 15px; height: 15px; }
/* branded close X — same disc treatment as the product explainer / Future You */
.sm-close {
  position: absolute; top: 14px; right: 14px; z-index: 4;
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--border); background: var(--fill-1); color: var(--muted);
  transition: color .18s, border-color .18s, background .18s, transform .18s var(--ease-spring);
}
.sm-close:hover { color: var(--text); border-color: var(--border-hi); background: var(--fill-2); transform: rotate(90deg); }
.sm-close:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.sm-close svg { width: 15px; height: 15px; }

/* ── the hero: the living globe scene beside the headline copy ── */
.sm-hero {
  width: 100%; max-width: 1180px;
  display: grid; grid-template-columns: 1fr; justify-items: center; align-items: center;
  gap: clamp(8px, 2vh, 20px);
}
.sm-scene {
  position: relative; width: clamp(240px, 62vw, 420px); aspect-ratio: 1;
  display: grid; place-items: center; isolation: isolate;
}
/* the broad orbiting ring field is a viewport-centered BACKDROP layer that sits
   inside the overlay (which clips overflow), so its 146vmin outer ring never
   pushes a scrollbar or spills past the device edges. */
.sm-rings {
  position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden;
}
.sm-rings .si-ringfield { display: block; }
.sm-scene .si-core { order: 0; }
.sm-scene .si-stage { width: 100%; height: 100%; }
/* contact pulses on the globe when a chip lands */
.sm-scene .si-disc.sm-disc-pass { box-shadow: 0 0 40px color-mix(in srgb, var(--teal) 55%, transparent), 0 0 90px color-mix(in srgb, var(--teal) 30%, transparent), inset 0 0 30px color-mix(in srgb, var(--teal) 24%, transparent); }
.sm-scene .si-disc.sm-disc-block { box-shadow: 0 0 40px color-mix(in srgb, var(--danger) 50%, transparent), 0 0 90px color-mix(in srgb, var(--danger) 26%, transparent), inset 0 0 30px color-mix(in srgb, var(--danger) 22%, transparent); }
.sm-scene .si-disc { transition: box-shadow .5s var(--ease-out); }

.sm-hero-copy { display: flex; flex-direction: column; align-items: center; gap: 12px; max-width: 620px; }
.sm-live {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 15px; border-radius: 999px;
  color: var(--teal); font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 600; font-size: 13px;
  border: 1px solid color-mix(in srgb, var(--teal) 42%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent);
}
.sm-live .sm-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--teal);
  box-shadow: 0 0 9px color-mix(in srgb, var(--teal) 70%, transparent); animation: pulse 1.8s ease-in-out infinite; }

.sm-title {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(24px, 4.4vw, 40px); font-weight: 800; color: var(--text);
  line-height: 1.14; margin: 0; max-width: 22ch; letter-spacing: -.01em;
}
.sm-lede { color: var(--text-2); font-size: clamp(13.5px, 1.4vw, 15.5px); line-height: 1.6; margin: 0; max-width: 54ch; }

.sm-stats { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 10px; width: 100%; max-width: 560px; }
.sm-stat {
  display: flex; flex-direction: column; gap: 3px; padding: 14px 10px;
  border-radius: 14px; background: color-mix(in srgb, var(--surface) 60%, transparent);
  border: 1px solid var(--border, rgba(20,224,203,.14));
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  opacity: 0; animation: smIn .5s cubic-bezier(.16,1,.3,1) forwards;
  animation-delay: calc(.18s + var(--i, 0) * .12s);
}
@keyframes smIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.sm-stat b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(19px, 3.4vw, 28px); font-weight: 800;
  background: linear-gradient(135deg, var(--teal), var(--blue-2)); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
.sm-stat span { color: var(--muted); font-size: 11.5px; line-height: 1.35; }

.sm-screened { display: flex; flex-wrap: wrap; justify-content: center; gap: 7px; }
.sm-chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 4px 11px; border-radius: 999px; font-size: 12px; color: var(--muted-2, var(--muted));
  border: 1px solid var(--border, rgba(20,224,203,.14)); background: color-mix(in srgb, var(--surface) 50%, transparent);
  text-transform: capitalize;
}
.sm-chip svg { width: 11px; height: 11px; color: var(--teal); }

/* ── the ledger: two columns — CLEARED (rank order) vs TURNED AWAY ── */
.sm-ledger {
  width: 100%; max-width: 1180px;
  display: grid; grid-template-columns: 1fr; gap: clamp(14px, 2vw, 22px);
  text-align: left;
}
.sm-col { display: flex; flex-direction: column; gap: 9px; min-width: 0; }
.sm-col-h {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-weight: 700; font-size: 14px; color: var(--text);
}
.sm-col-h svg { width: 17px; height: 17px; flex: none; }
.sm-col-h small { color: var(--muted); font-weight: 600; font-size: 12px; }
.sm-col-h-ok svg { color: var(--teal); }
.sm-col-h-block svg { color: var(--danger); }

.sm-accept-grid, .sm-block-grid { display: flex; flex-direction: column; gap: 8px; }

/* accepted (cleared, rank order) rows */
.sm-accept {
  display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 14px;
  background: color-mix(in srgb, var(--teal) 6%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent);
  opacity: 0; animation: smIn .5s cubic-bezier(.16,1,.3,1) forwards;
  animation-delay: calc(.3s + var(--i, 0) * .08s);
}
.sm-accept-rank {
  width: 28px; height: 28px; flex: none; border-radius: 9px; display: grid; place-items: center;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-weight: 800; font-size: 13px;
  color: var(--ink-on-brand, #fff); background: var(--grad-brand);
  box-shadow: 0 6px 16px -6px color-mix(in srgb, var(--teal) 60%, transparent);
}
.sm-accept-tx { flex: 1; min-width: 0; }
.sm-accept-tx b { display: block; color: var(--text); font-size: 13.5px; font-weight: 700; }
.sm-accept-tx small { color: var(--muted); font-size: 12px; line-height: 1.4; display: block; }
.sm-accept-tag {
  flex: none; display: inline-flex; align-items: center; gap: 4px;
  font-size: 10.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--teal); padding: 3px 9px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--teal) 34%, transparent);
}
.sm-accept-tag svg { width: 11px; height: 11px; }

/* blocked (turned away) rows */
.sm-block {
  display: flex; align-items: center; gap: 12px; padding: 12px 14px;
  border-radius: 14px;
  background: color-mix(in srgb, var(--danger) 5%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--danger) 22%, transparent);
  opacity: 0; animation: smIn .5s cubic-bezier(.16,1,.3,1) forwards;
  animation-delay: calc(.4s + var(--i, 0) * .08s);
}
.sm-block-ic {
  width: 32px; height: 32px; border-radius: 10px; flex: none; display: grid; place-items: center;
  color: var(--danger); background: var(--danger-soft);
}
.sm-block-ic svg { width: 16px; height: 16px; }
.sm-block-tx { flex: 1; min-width: 0; }
.sm-block-tx b { display: block; color: var(--text); font-size: 13.5px; font-weight: 700; }
.sm-block-tx small { color: var(--muted); font-size: 12px; line-height: 1.4; display: block; }
/* F413 · the row opens the "why this was blocked" science sheet */
.sm-block[data-blk-i] { cursor: pointer;
  transition: transform .22s var(--ease-out), border-color .22s, background .22s, box-shadow .22s; }
@media (hover: hover) {
  .sm-block[data-blk-i]:hover { transform: translateY(-2px);
    background: color-mix(in srgb, var(--danger) 9%, var(--surface));
    border-color: color-mix(in srgb, var(--danger) 42%, transparent);
    box-shadow: 0 14px 30px -18px color-mix(in srgb, var(--danger) 60%, transparent); }
}
.sm-block[data-blk-i]:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
.sm-block-tag {
  flex: none; font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  color: var(--danger); padding: 3px 9px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--danger) 34%, transparent);
}

/* ── F446 · BLOCKED SHOWCASE — full-width exclusion cards (Care page) ────────
   Product art tile · exclusion eyebrow · red "why" rail · rationale CTA.
   Fully tokenized: --danger/--surface/--text flow through both themes. ── */
.sm-blockx {
  align-items: stretch; gap: clamp(14px, 2.2vw, 22px);
  padding: clamp(14px, 2vw, 20px); border-radius: 20px;
  background:
    radial-gradient(120% 140% at 0% 0%, color-mix(in srgb, var(--danger) 7%, transparent), transparent 55%),
    color-mix(in srgb, var(--danger) 3%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--danger) 26%, transparent);
  box-shadow: 0 18px 44px -30px color-mix(in srgb, var(--danger) 45%, transparent);
}
.sm-blockx-media {
  position: relative; flex: none; align-self: center;
  width: clamp(96px, 14vw, 132px); aspect-ratio: 1; border-radius: 16px;
  display: grid; place-items: center; overflow: hidden;
  background: color-mix(in srgb, var(--danger) 5%, var(--fill-1, var(--surface-2)));
  border: 1px solid color-mix(in srgb, var(--danger) 18%, var(--border));
}
.sm-blockx-media img {
  width: 82%; height: 82%; object-fit: contain;
  filter: saturate(.55) opacity(.9);
}
.sm-blockx-media .sm-blockx-fb { display: none; color: color-mix(in srgb, var(--danger) 55%, var(--muted)); }
.sm-blockx-media .sm-blockx-fb svg { width: 34px; height: 34px; }
.sm-blockx-media.no-img img { display: none; }
.sm-blockx-media.no-img .sm-blockx-fb { display: grid; }
.sm-blockx-x {
  position: absolute; right: 7px; bottom: 7px;
  width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center;
  color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--danger) 36%, transparent);
}
.sm-blockx-x svg { width: 14px; height: 14px; }
.sm-blockx-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 11px; }
.sm-blockx-top { display: flex; align-items: flex-start; gap: 12px; }
.sm-blockx-id { flex: 1; min-width: 0; }
.sm-blockx-eyebrow {
  display: block; font-size: 10.5px; font-weight: 700; letter-spacing: .1em;
  text-transform: uppercase; color: var(--muted); margin-bottom: 3px;
}
.sm-blockx-name {
  display: block; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(16px, 2vw, 19px); font-weight: 800; color: var(--text); line-height: 1.2;
}
.sm-blockx-why {
  padding: 12px 14px; border-radius: 12px;
  background: color-mix(in srgb, var(--danger) 6%, transparent);
  border-left: 3px solid var(--danger);
}
.sm-blockx-why-h {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: 12.5px; color: var(--danger); margin-bottom: 5px;
}
.sm-blockx-why-h svg { width: 14px; height: 14px; flex: none; }
.sm-blockx-why p { margin: 0; color: var(--text-2); font-size: 13px; line-height: 1.6; }
.sm-blockx-cta {
  align-self: flex-start; display: inline-flex; align-items: center; gap: 7px;
  min-height: 34px; padding: 0 14px; border-radius: var(--r-pill, 999px);
  border: 1px solid color-mix(in srgb, var(--danger) 30%, var(--border));
  background: color-mix(in srgb, var(--surface) 60%, transparent);
  color: var(--text-2); font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: 12.5px;
  transition: color .2s var(--ease-out), border-color .2s, background .2s;
}
.sm-blockx-cta svg { width: 15px; height: 15px; flex: none; }
@media (hover: hover) {
  .sm-blockx:hover .sm-blockx-cta {
    color: var(--danger);
    border-color: color-mix(in srgb, var(--danger) 52%, transparent);
    background: color-mix(in srgb, var(--danger) 8%, var(--surface));
  }
}
/* phone: grid layout — art tile beside the name row, then the "why" rail and
   the CTA each break out to the card's FULL width (display:contents lifts the
   body's children into the card grid). CTA centers horizontally, stays last. */
@media (max-width: 640px) {
  .sm-blockx { display: grid; grid-template-columns: 74px minmax(0, 1fr); align-items: start; }
  .sm-blockx-media { width: 74px; grid-column: 1; grid-row: 1; align-self: start; }
  .sm-blockx-body { display: contents; }
  .sm-blockx-top { grid-column: 2; grid-row: 1; align-self: center; min-width: 0; }
  .sm-blockx-why { grid-column: 1 / -1; }
  .sm-blockx-cta { grid-column: 1 / -1; justify-self: center; }
}
.sm-more { color: var(--muted); font-size: 12px; text-align: center; margin: 2px 0 0; }

.sm-clear {
  display: flex; align-items: center; gap: 12px; text-align: left;
  width: 100%; padding: 14px 16px; border-radius: 14px;
  background: color-mix(in srgb, var(--teal) 6%, var(--surface));
  border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent);
}
.sm-clear > svg { width: 22px; height: 22px; color: var(--teal); flex: none; }
.sm-clear b { display: block; color: var(--text); font-size: 14px; }
.sm-clear small { color: var(--muted); font-size: 12.5px; line-height: 1.45; }

.sm-note { color: var(--muted); font-size: 12px; line-height: 1.5; max-width: 52ch; margin: 0; }
.sm-cta { min-width: 260px; }

/* the flying theater chips sit above the globe */
.sm-theater { z-index: 3; }

/* ── tablet + up: hero becomes globe | copy side-by-side, ledger two columns ── */
@media (min-width: 860px) {
  .sm-hero {
    grid-template-columns: minmax(280px, 42%) 1fr;
    justify-items: stretch; text-align: left; gap: clamp(20px, 3vw, 46px);
  }
  .sm-hero-copy { align-items: flex-start; text-align: left; }
  .sm-stats { max-width: none; }
  .sm-ledger { grid-template-columns: 1fr 1fr; align-items: start; }
}

/* ── phone: tighter, single column, globe leads ── */
@media (max-width: 640px) {
  /* content can grow taller than the phone on the smallest devices — start it
     from the top there (justify-content:flex-start) so nothing clips, with a
     compact top pad clear of the Back button. */
  .sm-card { justify-content: flex-start; gap: 14px; padding: 60px 16px 24px; }
  .sm-stats { grid-template-columns: repeat(3, 1fr); gap: 7px; }
  .sm-stat { padding: 11px 6px; }
  .sm-cta { width: 100%; min-width: 0; }
  .sm-title { font-size: clamp(22px, 6.6vw, 30px); }
}

@media (prefers-reduced-motion: reduce) {
  .shield-moment, .sm-card { transition: none; }
  .sm-stat, .sm-block, .sm-accept { animation: none; opacity: 1; }
  .sm-live .sm-dot { animation: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F155 · THE NETWORK — the member's community world (Network tab)
   Journey feed · share-safe milestone card · the IDLife social universe.
   All tokenized (dual-theme); paged via data-mpage="network".
   ═══════════════════════════════════════════════════════════════════════════ */
.ov-network { display: flex; flex-direction: column; gap: clamp(16px, 2vw, 24px); margin-top: clamp(16px, 2vw, 24px); }
.nw-head { text-align: center; max-width: 640px; margin: 0 auto 4px; }
.nw-title {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(24px, 4vw, 34px); font-weight: 700; color: var(--text);
  margin: 6px 0 8px; line-height: 1.15;
}
.nw-sub { color: var(--muted); font-size: 14.5px; line-height: 1.6; margin: 0; }

/* ── journey feed — the member's own algorithmic scroll ── */
.nw-posts { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.nw-post {
  display: flex; align-items: center; gap: 13px;
  padding: 14px 16px; border-radius: 16px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  transition: border-color .2s ease, transform .2s ease;
}
.nw-post:hover { border-color: color-mix(in srgb, var(--teal) 38%, transparent); transform: translateY(-1px); }
.nw-post-ic {
  width: 38px; height: 38px; border-radius: 12px; flex: none;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 70%, var(--violet));
}
.nw-post-ic svg { width: 18px; height: 18px; }
.nw-post-tx { flex: 1; min-width: 0; }
.nw-post-tx b { display: block; color: var(--text); font-size: 14px; font-weight: 700; }
.nw-post-tx small { color: var(--muted); font-size: 12.5px; line-height: 1.45; }
.nw-post-tag {
  flex: none; font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--teal); padding: 3px 10px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent);
  background: color-mix(in srgb, var(--teal) 6%, transparent);
}

/* ── share-safe milestone card ── */
.nw-safe { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--muted); font-weight: 600; }
.nw-safe svg { width: 12px; height: 12px; color: var(--teal); }
.nw-share-card {
  display: flex; align-items: center; gap: 16px;
  margin-top: 12px; padding: 18px 20px; border-radius: 18px;
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--teal) 9%, transparent),
    color-mix(in srgb, var(--blue-2) 9%, transparent) 55%,
    color-mix(in srgb, var(--violet) 9%, transparent));
  border: 1px solid color-mix(in srgb, var(--blue-2) 28%, transparent);
}
.nw-sc-ring {
  width: 74px; height: 74px; border-radius: 50%; flex: none;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  border: 2.5px solid transparent;
  background:
    linear-gradient(var(--surface, #080f23), var(--surface, #080f23)) padding-box,
    linear-gradient(135deg, var(--teal), var(--blue-2), var(--violet)) border-box;
}
.nw-sc-ring b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 24px; font-weight: 700;
  background: linear-gradient(135deg, var(--teal), var(--blue-2)); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
.nw-sc-ring small { color: var(--muted); font-size: 10px; }
.nw-sc-tx b { display: block; color: var(--text); font-size: 15px; font-weight: 700; line-height: 1.35; }
.nw-sc-tx small { color: var(--muted); font-size: 12.5px; }
.nw-share-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
.nw-privacy {
  display: flex; align-items: flex-start; gap: 7px;
  color: var(--muted); font-size: 12px; line-height: 1.5; margin: 12px 0 0;
}
.nw-privacy svg { width: 13px; height: 13px; flex: none; margin-top: 2px; color: var(--teal); }

/* ── the IDLife universe ── */
.nw-groups { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 12px; }
.nw-group {
  padding: 15px 16px; border-radius: 16px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}
.nw-group-h b { display: block; color: var(--text); font-size: 14.5px; font-weight: 700; }
.nw-group-h small { color: var(--muted); font-size: 12px; line-height: 1.4; display: block; margin-top: 2px; }
.nw-group-links { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
.nw-so {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border-radius: 999px; text-decoration: none;
  font-size: 12px; font-weight: 600; color: var(--muted-2, var(--muted));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  background: var(--fill-1, rgba(255,255,255,.02));
  transition: color .18s ease, border-color .18s ease, transform .18s ease;
}
.nw-so:hover { color: var(--text); border-color: color-mix(in srgb, var(--blue-2) 45%, transparent); transform: translateY(-1px); }
.nw-so svg { width: 13px; height: 13px; }
.nw-community-soon {
  display: flex; align-items: center; gap: 8px;
  margin: 14px 0 0; padding: 11px 14px; border-radius: 12px;
  color: var(--muted); font-size: 12.5px;
  border: 1px dashed color-mix(in srgb, var(--violet) 34%, transparent);
  background: color-mix(in srgb, var(--violet) 4%, transparent);
}
.nw-community-soon svg { width: 14px; height: 14px; flex: none; color: var(--violet); }

@media (max-width: 640px) {
  .nw-groups { grid-template-columns: 1fr; }
  .nw-share-card { flex-direction: column; text-align: center; }
  .nw-share-actions { flex-direction: column; }
  .nw-share-actions .btn { width: 100%; }
  .nw-post-tag { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .nw-post, .nw-so { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F156 · À LA CARTE — tier customize + full-catalog browser overlay
   Add/remove products, live monthly total, buy on idlife.com. Dual-theme.
   ═══════════════════════════════════════════════════════════════════════════ */
/* results-band CTA + tier "Customize" link */
.alacarte-cta {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  flex-wrap: wrap; margin-top: clamp(18px, 3vw, 28px);
  padding: 18px 22px; border-radius: 18px;
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--violet) 7%, transparent),
    color-mix(in srgb, var(--teal) 7%, transparent));
  border: 1px solid color-mix(in srgb, var(--violet) 24%, transparent);
}
.alc-cta-tx b { display: flex; align-items: center; gap: 8px; color: var(--text); font-size: 15px; font-weight: 700; }
.alc-cta-tx b svg { width: 16px; height: 16px; color: var(--violet); }
.alc-cta-tx span { display: block; color: var(--muted); font-size: 13px; margin-top: 3px; }

.tier-customize {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  width: 100%; margin-top: 8px; padding: 8px; border: none; background: none; cursor: pointer;
  color: var(--muted-2, var(--muted)); font-family: inherit; font-size: 12.5px; font-weight: 600;
  border-radius: 10px; transition: color .18s ease, background .18s ease;
}
.tier-customize svg { width: 13px; height: 13px; }
.tier-customize:hover { color: var(--text); background: var(--fill-1, rgba(255,255,255,.04)); }

/* the overlay */
.alc-overlay {
  position: fixed; inset: 0; z-index: 1250;
  display: flex; align-items: center; justify-content: center;
  padding: clamp(12px, 3vw, 34px); opacity: 0; transition: opacity .22s ease;
}
.alc-overlay.show { opacity: 1; }
.alc-veil {
  position: absolute; inset: 0;
  background: color-mix(in srgb, var(--bg, #03060f) 74%, transparent);
  backdrop-filter: blur(16px) saturate(1.1); -webkit-backdrop-filter: blur(16px) saturate(1.1);
}
.alc-card {
  position: relative; width: min(920px, 100%); max-height: 90dvh;
  display: flex; flex-direction: column;
  border-radius: 24px; overflow: hidden;
  background: var(--surface, rgba(8,15,35,.96));
  border: 1px solid color-mix(in srgb, var(--teal) 22%, transparent);
  box-shadow: 0 30px 90px rgba(0,0,0,.5);
  transform: translateY(16px) scale(.985); transition: transform .3s cubic-bezier(.16,1,.3,1);
}
.alc-overlay.show .alc-card { transform: none; }

.alc-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 14px;
  padding: 22px 24px 16px; border-bottom: 1px solid var(--border, rgba(20,224,203,.12));
}
.alc-head-tx h2 { font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: clamp(19px, 3vw, 24px); font-weight: 700; color: var(--text); margin: 0; }
.alc-head-tx p { color: var(--muted); font-size: 13.5px; margin: 4px 0 0; }
.alc-close {
  flex: none; width: 36px; height: 36px; border-radius: 10px; cursor: pointer;
  display: grid; place-items: center; color: var(--muted); font-size: 16px;
  background: var(--fill-1, rgba(255,255,255,.04)); border: 1px solid var(--border, rgba(20,224,203,.12));
  transition: color .18s ease, background .18s ease;
}
.alc-close:hover { color: var(--text); background: var(--fill-hover, rgba(255,255,255,.08)); }
.alc-close svg { width: 16px; height: 16px; }

.alc-body { flex: 1; overflow-y: auto; padding: 18px 24px; display: flex; flex-direction: column; gap: 22px; }
.alc-group-h {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 13px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--muted-2, var(--muted)); margin-bottom: 12px;
}
.alc-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }

/* SORT BAR — the à la carte list defaults to the member's own priority order
   (same engine as the admin member ranking); this lets them re-sort. */
.alc-sortbar { position: relative; display: flex; justify-content: flex-end; }
.alc-sortbtn {
  display: inline-flex; align-items: center; gap: 7px; cursor: pointer;
  padding: 7px 12px; border-radius: 999px; font-family: inherit; font-size: 12px;
  font-weight: 600; color: var(--muted); background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.14)); transition: all .18s ease;
}
.alc-sortbtn:hover, .alc-sortbtn.on { color: var(--text); border-color: color-mix(in srgb, var(--teal) 45%, transparent); }
.alc-sortbtn b { font-weight: 700; color: var(--teal); }
.alc-sortbtn svg { width: 14px; height: 14px; flex: none; }
.alc-sortbtn svg:last-child { width: 12px; height: 12px; opacity: .65; }
.alc-sortmenu {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 6; min-width: 218px;
  display: flex; flex-direction: column; padding: 6px; border-radius: 14px;
  background: var(--surface-hi, var(--surface)); border: 1px solid var(--border-hi, var(--border));
  box-shadow: var(--shadow-md, 0 18px 44px -18px rgba(0,0,0,.55));
}
.alc-sortmenu[hidden] { display: none; }
.alc-sortopt {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; cursor: pointer; text-align: left; padding: 9px 11px; border-radius: 9px;
  font-family: inherit; font-size: 12.5px; font-weight: 600; color: var(--muted);
  background: none; border: 0; transition: background .15s ease, color .15s ease;
}
.alc-sortopt:hover { background: var(--fill-1, rgba(255,255,255,.05)); color: var(--text); }
.alc-sortopt.on { color: var(--teal); background: color-mix(in srgb, var(--teal) 10%, transparent); }
.alc-sortopt svg { width: 13px; height: 13px; flex: none; }
.alc-list { display: flex; flex-direction: column; gap: 22px; }

.alc-item {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 14px; border-radius: 14px; position: relative; overflow: hidden;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.12));
  transition: border-color .18s ease, background .18s ease;
}
/* the whole card is the "see why" click target (except the Add toggle) */
.alc-item[data-alc-why] { cursor: pointer; }
.alc-item[data-alc-why]:hover { border-color: color-mix(in srgb, var(--violet) 40%, transparent); }
.alc-item[data-alc-why]:focus-visible { outline: 2px solid color-mix(in srgb, var(--violet) 60%, transparent); outline-offset: 2px; }
.alc-item.on { border-color: color-mix(in srgb, var(--teal) 50%, transparent); background: color-mix(in srgb, var(--teal) 7%, transparent); }

/* F331 · Shield-BLOCKED product (blocked on the most current assessment) —
   the card keeps a RED border, but its content is NO LONGER dimmed or covered:
   the product name + picture stay fully visible so the user can see what was set
   aside. A compact "Shield Blocked" tag sits in the bottom-right corner, on and
   touching the container edge. The card can still never be added. */
.alc-item.alc-blocked {
  border-color: color-mix(in srgb, var(--danger) 62%, transparent);
  /* reserve room at the bottom-right so the corner tag never covers the name */
  padding-bottom: 20px;
}
/* the redundant right-side toggle/buy action is hidden — the corner tag is the
   single, clear "blocked" signal (and the item is un-addable anyway). */
.alc-item.alc-blocked .alc-item-actions { display: none; }
/* the veil no longer fills/blurs the card — it only anchors the corner tag. */
.alc-blocked-veil {
  position: absolute; right: 0; bottom: 0; z-index: 4;
  display: block; pointer-events: none;
  background: none; -webkit-backdrop-filter: none; backdrop-filter: none;
}
.alc-blocked-badge {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px;
  /* hug the card's bottom-right corner: rounded top-left, square outer edges,
     bottom-right matches the card radius so it sits flush in the corner. */
  border-radius: 11px 0 14px 0;
  background: color-mix(in srgb, var(--danger) 92%, #000 8%);
  color: #fff; letter-spacing: .05em; text-transform: uppercase;
  box-shadow: 0 6px 18px -8px color-mix(in srgb, var(--danger) 72%, transparent),
              inset 0 1px 0 rgba(255,255,255,.22);
}
.alc-blocked-badge svg { width: 13px; height: 13px; flex: none; }
.alc-blocked-badge b { font-size: 10.5px; font-weight: 800; }
.alc-toggle:disabled {
  cursor: not-allowed; color: #fff;
  background: color-mix(in srgb, var(--danger) 82%, transparent);
  border-color: color-mix(in srgb, var(--danger) 60%, transparent);
}
.alc-thumb {
  width: 46px; height: 46px; border-radius: 11px; flex: none; overflow: hidden;
  display: grid; place-items: center; color: var(--teal);
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 16%, transparent), color-mix(in srgb, var(--blue-2) 16%, transparent));
}
.alc-thumb img { width: 100%; height: 100%; object-fit: cover; }
.alc-thumb svg { width: 20px; height: 20px; }
.alc-item-tx { flex: 1; min-width: 0; }
.alc-item-tx b { display: block; color: var(--text); font-size: 13.5px; font-weight: 700; }
.alc-item-tx small { display: block; color: var(--muted); font-size: 11.5px; line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alc-price { display: inline-block; color: var(--teal); font-size: 12.5px; font-weight: 700; margin-top: 3px; }
.alc-item-actions { display: flex; flex-direction: column; align-items: center; gap: 6px; flex: none; }
.alc-toggle {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  padding: 7px 12px; border-radius: 999px; font-family: inherit; font-size: 12px; font-weight: 600;
  color: var(--text); background: var(--fill-1, rgba(255,255,255,.05));
  border: 1px solid var(--border, rgba(20,224,203,.16)); transition: all .18s ease;
}
.alc-toggle svg { width: 12px; height: 12px; }
.alc-item.on .alc-toggle { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 45%, transparent); background: color-mix(in srgb, var(--teal) 10%, transparent); }
/* Qty +/− stepper — appears under Add once a product is selected. Quantity is
   stored on the Cart_ID at checkout (name + qty; server prices it live). */
.alc-qty {
  display: inline-flex; align-items: center; gap: 2px;
  border: 1px solid color-mix(in srgb, var(--teal) 34%, transparent); border-radius: 999px;
  padding: 2px 4px; background: var(--fill-1, rgba(255,255,255,.04));
}
.alc-qty.alc-qty-hidden { display: none; }
.alc-qty-btn {
  display: grid; place-items: center; width: 22px; height: 22px; cursor: pointer;
  border: 0; border-radius: 50%; background: none; color: var(--teal);
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 15px; font-weight: 800; line-height: 1;
  transition: background .15s ease, transform .12s ease;
}
.alc-qty-btn:hover:not([disabled]) { background: color-mix(in srgb, var(--teal) 14%, transparent); }
.alc-qty-btn:active:not([disabled]) { transform: scale(.9); }
.alc-qty-btn[disabled] { opacity: .35; cursor: default; }
.alc-qty-n {
  min-width: 20px; text-align: center; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 12.5px; font-weight: 700; color: var(--text);
}
@media (prefers-reduced-motion: reduce) { .alc-qty-btn { transition: none; } .alc-qty-btn:active:not([disabled]) { transform: none; } }

.alc-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap;
  padding: 16px 24px; border-top: 1px solid var(--border, rgba(20,224,203,.12));
  background: var(--fill-1, rgba(255,255,255,.02));
}
.alc-total { display: flex; flex-direction: column; gap: 1px; }
.alc-total small { color: var(--muted); font-size: 11.5px; }
.alc-total b { font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 24px; font-weight: 700; color: var(--text); }
.alc-total b span { font-size: 13px; color: var(--muted); font-weight: 500; }
.alc-count { color: var(--muted); font-size: 12px; }
.alc-foot-actions .btn { text-decoration: none; }
.alc-note {
  display: flex; align-items: center; gap: 7px; justify-content: center;
  padding: 0 24px 16px; color: var(--muted); font-size: 11.5px; margin: 0;
}
.alc-note svg { width: 12px; height: 12px; flex: none; color: var(--teal); }

@media (max-width: 640px) {
  .alc-grid { grid-template-columns: 1fr; }
  .alacarte-cta { flex-direction: column; align-items: flex-start; }
  .alacarte-cta .btn { width: 100%; }
  /* PHONE COMPACTION — the head + foot were eating the scrollable product lane.
     Both shrink to the minimum that still reads well, and the body claims the
     rest (min-height:0 lets a flex child actually scroll inside a column). */
  .alc-overlay { padding: 8px; }
  .alc-card { width: 100%; max-height: calc(100dvh - 16px); border-radius: 18px; }
  .alc-head { padding: 12px 14px 10px; gap: 10px; align-items: center; }
  .alc-head-tx h2 { font-size: 17px; line-height: 1.2; }
  .alc-head-tx p { display: none; }                 /* subtitle is a nicety, not the job */
  .alc-close { width: 30px; height: 30px; border-radius: 9px; }
  .alc-body { padding: 12px 14px; gap: 14px; min-height: 0; }
  .alc-group-h { font-size: 11.5px; margin-bottom: 8px; }
  /* product rows stay SHORT + the text column keeps its room: the thumb shrinks,
     the actions stack in a narrow right column, and nothing wraps to a 2nd line */
  .alc-item { padding: 10px; gap: 9px; }
  .alc-thumb { width: 42px; height: 42px; }
  .alc-item-tx b { font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .alc-why-hint { font-size: 10.5px; }
  .alc-item-actions { flex-direction: column; gap: 5px; }
  .alc-toggle { padding: 5px 9px; font-size: 11px; }
  .alc-qty { padding: 1px 3px; }
  .alc-qty-btn { width: 19px; height: 19px; font-size: 13px; }
  .alc-qty-n { min-width: 15px; font-size: 11px; }
  /* ONE compact footer row: total · search · Checkout — search shrinks, never wraps */
  .alc-foot { flex-direction: row; align-items: center; flex-wrap: nowrap; gap: 8px; padding: 9px 12px; }
  .alc-total { flex: none; flex-direction: row; align-items: baseline; gap: 5px; }
  .alc-total small, .alc-count { display: none; }
  .alc-total b { font-size: 18px; }
  .alc-search { flex: 1 1 auto; min-width: 0; width: auto; flex-basis: auto; padding: 6px 9px; }
  .alc-search-input { font-size: 12.5px; }
  .alc-foot-actions { flex: none; display: flex; gap: 8px; }
  .alc-foot-actions .btn { width: auto; justify-content: center; padding: 9px 13px; font-size: 12.5px; }
}
@media (prefers-reduced-motion: reduce) {
  .alc-overlay, .alc-card, .alc-item, .alc-toggle { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F332 · NEPQ PERSONALIZED "WHY THIS PRODUCT" PANEL
   ---------------------------------------------------------------------------
   Clicking a product's name/body opens an expert-marketer explainer built from
   the member's OWN assessment. On computer it fills a right-side rail inside the
   à la carte popup's free white space; on tablet/mobile it drops inline BELOW
   the tapped card, spanning the grid row. Dual-theme tokenized · reduced-motion
   safe · responsive across all three breakpoints.
   ═══════════════════════════════════════════════════════════════════════════ */

/* the middle band that holds the scrolling catalog + (desktop) the rail */
.alc-main { flex: 1; min-height: 0; display: flex; overflow: hidden; }
.alc-main .alc-body { flex: 1; min-width: 0; }

/* the "Why this fits me" affordance is ALWAYS visible (not hover-gated). */
.alc-why-hint {
  display: inline-flex; align-items: center; gap: 4px; margin-top: 5px;
  color: var(--violet); font-size: 11px; font-weight: 700; letter-spacing: .01em;
  transition: color .18s ease;
}
.alc-why-hint svg { width: 11px; height: 11px; }
.alc-item[data-alc-why]:hover .alc-why-hint,
.alc-item[data-alc-why]:focus-visible .alc-why-hint { color: var(--teal); }
.alc-item.alc-detail-active {
  border-color: color-mix(in srgb, var(--violet) 50%, transparent);
  background: color-mix(in srgb, var(--violet) 7%, transparent);
}

/* the desktop right rail — hidden by default (tablet/mobile use inline rows);
   the ≥1025px media query turns it into the always-open second pane. */
.alc-rail {
  display: none; flex: none;
  border-left: 1px solid var(--border, rgba(20,224,203,.12));
  background:
    radial-gradient(120% 80% at 100% 0%, color-mix(in srgb, var(--violet) 8%, transparent), transparent 60%),
    var(--fill-1, rgba(255,255,255,.02));
}
/* the panel keeps a comfortable reading measure inside the wide rail */
.alc-rail .alc-nepq { max-width: 760px; margin: 0 auto; }

/* empty state shown in the desktop rail until a product is chosen */
.alc-rail-empty {
  height: 100%; min-height: 320px;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 12px; text-align: center; padding: 40px 34px;
  color: var(--muted);
}
.alc-rail-empty-ic {
  width: 64px; height: 64px; border-radius: 20px; display: grid; place-items: center;
  color: var(--violet); background: color-mix(in srgb, var(--violet) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--violet) 22%, transparent);
}
.alc-rail-empty-ic svg { width: 28px; height: 28px; }
.alc-rail-empty b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 16px; font-weight: 700; color: var(--text);
}
.alc-rail-empty span { font-size: 13px; line-height: 1.5; max-width: 30ch; }

/* the inline (tablet/mobile) row spans the whole grid width, below the card */
.alc-detail-row {
  grid-column: 1 / -1;
  margin-top: -4px;
  animation: alcDetailIn .28s cubic-bezier(.16,1,.3,1) both;
}

/* ── the panel itself ── */
.alc-nepq {
  position: relative;
  display: flex; flex-direction: column; gap: 14px;
  padding: 20px 20px 18px;
  border-radius: 18px;
  border: 1px solid color-mix(in srgb, var(--violet) 24%, transparent);
  background:
    radial-gradient(130% 90% at 0% 0%, color-mix(in srgb, var(--teal) 6%, transparent), transparent 55%),
    radial-gradient(130% 90% at 100% 100%, color-mix(in srgb, var(--violet) 7%, transparent), transparent 55%),
    var(--surface-2, rgba(13,23,48,.9));
  box-shadow: 0 20px 54px -22px rgba(2,8,26,.6), inset 0 1px 0 rgba(255,255,255,.05);
  animation: alcDetailIn .3s cubic-bezier(.16,1,.3,1) both;
}
.alc-rail .alc-nepq {
  border: none; border-radius: 0; box-shadow: none; background: none;
  padding: 22px 22px 26px; min-height: 100%;
}
.alc-nepq-head { display: flex; align-items: center; gap: 13px; }
.alc-nepq-thumb {
  width: 52px; height: 52px; border-radius: 13px; flex: none; overflow: hidden;
  display: grid; place-items: center; color: var(--teal);
  background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 16%, transparent), color-mix(in srgb, var(--violet) 16%, transparent));
}
.alc-nepq-thumb img { width: 100%; height: 100%; object-fit: cover; }
.alc-nepq-thumb svg { width: 22px; height: 22px; }
.alc-nepq-htx { min-width: 0; }
.alc-nepq-tag {
  display: inline-flex; align-items: center; gap: 5px;
  color: var(--violet); font-size: 11px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase;
}
.alc-nepq-tag svg { width: 12px; height: 12px; }
.alc-nepq-tag b { color: var(--teal); font-weight: 800; }
.alc-nepq-htx h3 {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(17px, 2.4vw, 20px); font-weight: 700; color: var(--text); margin: 2px 0 0;
}
.alc-nepq-price { display: block; color: var(--teal); font-size: 12.5px; font-weight: 700; margin-top: 2px; }

.alc-nepq-lede {
  margin: 0; color: var(--text-2, var(--text)); font-size: 13.5px; line-height: 1.5;
}
.alc-nepq-lede b { color: var(--text); font-weight: 700; }
.alc-nepq-lede i { color: var(--teal); font-style: italic; }

.alc-nepq-reasons { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
.alc-nepq-reason { display: flex; gap: 11px; align-items: flex-start; }
.alc-nepq-ic {
  flex: none; width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center;
  color: var(--teal); background: color-mix(in srgb, var(--teal) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 22%, transparent);
}
.alc-nepq-ic svg { width: 15px; height: 15px; }
.alc-nepq-rtx { min-width: 0; }
.alc-nepq-rtx b { display: block; color: var(--text); font-size: 12.5px; font-weight: 700; margin-bottom: 1px; }
.alc-nepq-rtx span { display: block; color: var(--muted); font-size: 12.5px; line-height: 1.45; }
.alc-nepq-rtx span b { display: inline; color: var(--text); font-size: inherit; }
/* the science micro-list inside a reason ("Each active is here for a reason") */
.alc-nepq-sci { list-style: none; margin: 7px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.alc-nepq-sci li {
  position: relative; padding-left: 15px; color: var(--muted); font-size: 12.5px; line-height: 1.45;
}
.alc-nepq-sci li::before {
  content: ''; position: absolute; left: 0; top: 7px; width: 6px; height: 6px; border-radius: 50%;
  background: var(--teal);
}
.alc-nepq-sci li b { color: var(--text); font-weight: 700; }

.alc-nepq-ings { display: flex; flex-wrap: wrap; gap: 7px; }
.alc-nepq-ing {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 5px 10px; border-radius: 999px; font-size: 11.5px; font-weight: 600;
  color: var(--text-2, var(--text)); background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.12));
}
.alc-nepq-ing svg { width: 12px; height: 12px; color: var(--teal); }

/* ── F353 · INTERACTIVE INGREDIENT CHIPS + PREMIUM TOOLTIP ──────────────────
   Each active is a chip that reveals WHY it's in the formula. The hint verb is
   responsive: "Hover over" on computer, "Tap on" on tablet/phone. Tooltip is a
   fully OPAQUE, expensive-looking card (solid surface, deep shadow, teal rim)
   shown on hover AND on tap/keyboard focus (tabindex). */
.alc-nepq-ingwrap { display: flex; flex-direction: column; gap: 8px; }
.alc-nepq-ings-hint {
  display: flex; align-items: center; gap: 6px; margin: 0;
  color: var(--muted); font-size: 11.5px; line-height: 1.4; font-weight: 600;
}
.alc-nepq-ings-hint svg { width: 12px; height: 12px; flex: none; color: var(--teal); }
.alc-nepq-ings-hint b { color: var(--text); font-weight: 700; }
.alc-hint-verb::before { content: attr(data-hover); }
@media (max-width: 1024px) { .alc-hint-verb::before { content: attr(data-tap); } }
@media (pointer: coarse) { .alc-hint-verb::before { content: attr(data-tap); } }

.alc-nepq-ing.has-tip {
  position: relative; cursor: pointer;
  transition: border-color .18s ease, background .18s ease, transform .18s ease;
}
.alc-nepq-ing.has-tip:hover,
.alc-nepq-ing.has-tip:focus-visible,
.alc-nepq-ing.has-tip:focus,
.alc-nepq-ing.has-tip.tip-active {
  border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  background: color-mix(in srgb, var(--teal) 10%, var(--fill-1, transparent));
  transform: translateY(-1px);
  outline: none;
}

/* F354 · The floating tooltip — a SINGLE element appended to <body>,
   position:fixed and JS-positioned + viewport-clamped, so it can NEVER be
   clipped by the scrolling modal body and always paints above MyAI (z-1300). */
.alc-ing-tip-float {
  position: fixed; z-index: 2000; left: 0; top: 0;
  max-width: 300px;
  display: flex; flex-direction: column; gap: 5px; text-align: left;
  padding: 13px 15px; border-radius: 13px; white-space: normal;
  /* FULLY OPAQUE premium surface — never see-through. */
  background: var(--surface-hi);
  border: 1px solid color-mix(in srgb, var(--teal) 45%, var(--border-hi, transparent));
  box-shadow:
    0 22px 44px -12px rgba(0, 0, 0, .45),
    0 4px 14px -4px rgba(0, 0, 0, .3),
    inset 0 1px 0 rgba(255, 255, 255, .12),
    0 0 0 3px color-mix(in srgb, var(--teal) 10%, transparent);
  opacity: 0; visibility: hidden; pointer-events: none;
  transform: translateY(4px);
  transition: opacity .16s ease, transform .16s ease, visibility .16s;
}
.alc-ing-tip-float.show { opacity: 1; visibility: visible; pointer-events: auto; transform: translateY(0); }
.alc-ing-tip-float b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  color: var(--teal); font-size: 12px; font-weight: 800; letter-spacing: .02em;
}
.alc-ing-tip-float > span { color: var(--text); font-size: 12px; line-height: 1.55; font-weight: 500; }
/* Arrow — points down to the chip when the card is above (default), up when below. */
.alc-ing-tip-arrow {
  position: absolute; left: var(--arrow-x, 50%); top: 100%; transform: translateX(-50%);
  border: 7px solid transparent; border-top-color: var(--surface-hi);
  filter: drop-shadow(0 1px 0 color-mix(in srgb, var(--teal) 45%, transparent));
}
.alc-ing-tip-float.below .alc-ing-tip-arrow {
  top: auto; bottom: 100%;
  border-top-color: transparent; border-bottom-color: var(--surface-hi);
  filter: drop-shadow(0 -1px 0 color-mix(in srgb, var(--teal) 45%, transparent));
}
@media (prefers-reduced-motion: reduce) {
  .alc-nepq-ing.has-tip { transition: none; }
  .alc-nepq-ing.has-tip:hover { transform: none; }
  .alc-ing-tip-float { transition: none; }
}

/* ── THE REAL SCIENCE — clinical evidence + study citations from the member's
      own assessment (same source as the plan product pages) ── */
.alc-nepq-science {
  border-radius: 14px; padding: 15px 16px;
  background:
    radial-gradient(120% 80% at 0% 0%, color-mix(in srgb, var(--blue-2) 6%, transparent), transparent 60%),
    var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid color-mix(in srgb, var(--blue-2) 22%, transparent);
}
.alc-nepq-science-h { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; margin-bottom: 12px; }
.alc-nepq-science-h svg { width: 16px; height: 16px; color: var(--blue-2); flex: none; }
.alc-nepq-science-h b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 13.5px; font-weight: 700; color: var(--text);
}
.alc-nepq-science-h span {
  flex-basis: 100%; color: var(--muted); font-size: 11.5px; padding-left: 24px;
}
.alc-nepq-studies { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.alc-nepq-study {
  padding-left: 13px; border-left: 2px solid color-mix(in srgb, var(--blue-2) 40%, transparent);
}
.alc-nepq-study-via {
  display: inline-flex; align-items: center; gap: 5px; margin-bottom: 5px;
  color: var(--teal); font-size: 11px; font-weight: 700; line-height: 1.35;
}
.alc-nepq-study-via svg { width: 11px; height: 11px; flex: none; }
.alc-nepq-study-tx { margin: 0; color: var(--text-2, var(--text)); font-size: 12.5px; line-height: 1.5; }
.alc-nepq-study-cite {
  margin: 6px 0 0; color: var(--muted-2, var(--muted)); font-size: 10.5px; line-height: 1.4;
  font-style: italic;
}

/* GENERIC science — visibly NEUTRAL (not the blue "your evidence" look) so a
   member can never confuse general product facts with personalized, triggered
   evidence. Muted fill, no accent gradient, neutral study rules. */
.alc-nepq-science.is-generic {
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px dashed color-mix(in srgb, var(--muted) 34%, transparent);
}
.alc-nepq-science.is-generic .alc-nepq-science-h svg { color: var(--muted); }
.alc-nepq-science.is-generic .alc-nepq-study {
  border-left-color: color-mix(in srgb, var(--muted) 32%, transparent);
}

.alc-nepq-cta { display: flex; flex-direction: column; gap: 9px; margin-top: 2px; }

/* "WHY THIS FITS YOU" ACCORDION TOGGLE — plan popups only. Same violet→teal
   brand as the .alc-nepq-tag, styled as a premium full-width pill that opens
   the collapsed "The science behind it" section below it. */
.alc-cta-why {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px; cursor: pointer;
  align-self: center; width: auto; max-width: 100%; padding: 14px 26px; border-radius: 13px;
  background: linear-gradient(135deg, var(--violet), var(--teal));
  border: 1px solid transparent;
  box-shadow: 0 12px 28px -12px color-mix(in srgb, var(--violet) 60%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 32%, transparent);
  transition: transform .18s var(--ease-out, ease), box-shadow .2s ease, filter .2s ease;
}
.alc-cta-why:hover {
  transform: translateY(-1px);
  filter: brightness(1.05);
  box-shadow: 0 16px 34px -12px color-mix(in srgb, var(--teal) 60%, transparent), inset 0 1px 0 color-mix(in srgb, #fff 40%, transparent);
}
.alc-cta-why:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.alc-cta-why-tag {
  display: inline-flex; align-items: center; gap: 6px;
  color: #fff; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 13px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase;
}
.alc-cta-why-tag svg { width: 14px; height: 14px; }
.alc-cta-why-tag b { color: #fff; font-weight: 800; }
.alc-cta-why-chev {
  display: inline-flex; color: rgba(255,255,255,.9); transition: transform .24s var(--ease-out, ease);
}
.alc-cta-why-chev svg { width: 18px; height: 18px; }
.alc-cta-why.open .alc-cta-why-chev { transform: rotate(180deg); }
@media (prefers-reduced-motion: reduce) {
  .alc-cta-why { transition: none; } .alc-cta-why:hover { transform: none; }
  .alc-cta-why-chev { transition: none; }
}

/* PRIMARY action — a bold, unmissable solid teal fill (dark ink) that reads
   clearly in both light and dark themes. */
.alc-cta-add {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; cursor: pointer;
  padding: 14px 18px; border-radius: 13px; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 14.5px; font-weight: 700; letter-spacing: .01em;
  color: var(--ink-on-brand, #03081a); background: var(--teal);
  border: 1px solid color-mix(in srgb, var(--teal) 70%, #000 12%);
  box-shadow: 0 12px 28px -10px var(--teal-glow, rgba(20,224,203,.45)), inset 0 1px 0 rgba(255,255,255,.35);
  transition: transform .18s ease, box-shadow .18s ease, background .18s ease;
}
.alc-cta-add svg { width: 16px; height: 16px; }
.alc-cta-add:hover { transform: translateY(-1px); background: var(--teal-2, var(--teal)); box-shadow: 0 16px 34px -10px var(--teal-glow, rgba(20,224,203,.5)), inset 0 1px 0 rgba(255,255,255,.4); }
/* Added state — a clear confirmed look, still high-contrast + obvious. */
.alc-cta-add.on {
  color: var(--teal); background: color-mix(in srgb, var(--teal) 14%, transparent);
  border: 1.5px solid color-mix(in srgb, var(--teal) 62%, transparent);
  box-shadow: none;
}
.alc-cta-add.on:hover { transform: none; background: color-mix(in srgb, var(--teal) 18%, transparent); box-shadow: none; }
/* SECONDARY action — a refined outline pill (the loud gradient is reserved for
   the primary "Add to my plan" now). */
.alc-cta-shop {
  position: relative; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 12px 18px; border-radius: 13px; text-decoration: none;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 13.5px; font-weight: 700;
  color: var(--text); letter-spacing: .01em;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid color-mix(in srgb, var(--blue-2) 32%, transparent);
  transition: transform .2s var(--ease-out, ease), border-color .2s ease, color .2s ease, background .2s ease;
}
.alc-cta-shop svg { width: 16px; height: 16px; color: var(--blue-2); }
.alc-cta-shop:hover {
  transform: translateY(-1px); color: var(--blue-2);
  border-color: color-mix(in srgb, var(--blue-2) 55%, transparent);
  background: color-mix(in srgb, var(--blue-2) 8%, transparent);
}
/* F369 · "See Supplement Facts" — the tertiary CTA that sits directly beneath
   "Learn more about …". A teal-accented outline pill so it reads as a distinct,
   document-style action (the official Supplement Facts PDF). */
.alc-cta-facts {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 12px 18px; border-radius: 13px; text-decoration: none;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 13.5px; font-weight: 700;
  color: var(--text); letter-spacing: .01em;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent);
  transition: transform .2s var(--ease-out, ease), border-color .2s ease, color .2s ease, background .2s ease;
}
.alc-cta-facts svg { width: 16px; height: 16px; color: var(--teal); }
.alc-cta-facts:hover {
  transform: translateY(-1px); color: var(--teal);
  border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent);
}
@media (prefers-reduced-motion: reduce) { .alc-cta-facts { transition: none; } .alc-cta-facts:hover { transform: none; } }
/* "Ask MyAI about {product}" — a secondary outline pill matching the Learn more
   / See Facts formatting, violet-accented so it reads as the MyAI action. Sits
   directly below the "Why this fits you" toggle and above Learn more. */
.alc-cta-ask {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px; cursor: pointer;
  padding: 12px 18px; border-radius: 13px; text-decoration: none;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 13.5px; font-weight: 700;
  color: var(--text); letter-spacing: .01em;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid color-mix(in srgb, var(--violet) 32%, transparent);
  transition: transform .2s var(--ease-out, ease), border-color .2s ease, color .2s ease, background .2s ease;
}
.alc-cta-ask svg { width: 16px; height: 16px; color: var(--violet); }
.alc-cta-ask:hover {
  transform: translateY(-1px); color: var(--violet);
  border-color: color-mix(in srgb, var(--violet) 55%, transparent);
  background: color-mix(in srgb, var(--violet) 8%, transparent);
}
@media (prefers-reduced-motion: reduce) { .alc-cta-ask { transition: none; } .alc-cta-ask:hover { transform: none; } }
.alc-nepq-fine {
  display: flex; align-items: center; gap: 6px; margin: 2px 0 0;
  color: var(--muted-2, var(--muted)); font-size: 10.5px; line-height: 1.4;
}
.alc-nepq-fine svg { width: 11px; height: 11px; flex: none; color: var(--teal); }

/* F351 · NEPQ panel embedded inside the plan-tab product detail sheet
   (Your current program / Your subscribed regimen popups). The sheet already
   provides the hero image + title, so the embed drops the panel's own card
   chrome and header and inherits the sheet's padding. */
.ds-body .alc-nepq-embed {
  background: none; border: none; border-radius: 0; padding: 0; box-shadow: none;
  display: flex; flex-direction: column; gap: 14px; margin: 4px 0 10px;
  animation: none;
}
/* Static "Active in your plan" chip — the confirmed .alc-cta-add.on look,
   without button semantics (plan items are already owned; nothing to toggle). */
.alc-cta-static { cursor: default; pointer-events: none; }

@keyframes alcDetailIn {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .alc-rail { transition: none; }
  .alc-nepq, .alc-detail-row { animation: none; }
  .alc-why-hint, .alc-cta-shop, .alc-cta-shop::after { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F157 · RESULTS TAB — the most recent assessment, decoded inside the castle.
   Reuses .ov-card glass + .ov-sys rows; dual-theme tokens; reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */
.ov-results { display: flex; flex-direction: column; gap: 18px; }
/* F383 · the journey lives on the results screen now — give it the results
   page's section rhythm + the top offset the sticky chrome expects. */
#screen-results .res-journey { padding-block: clamp(20px, 3vw, 40px) clamp(28px, 4vw, 56px);
  scroll-margin-top: calc(var(--chrome-h, 112px) + 12px); }

/* header card: score + 4-bucket breakdown */
.ovr-hero {
  display: grid; grid-template-columns: auto 1fr; gap: clamp(18px, 3vw, 40px);
  align-items: center; margin-top: 6px;
}
.ovr-score { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.ovr-score > b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(52px, 7vw, 84px); font-weight: 700; line-height: 1; letter-spacing: -.03em;
}
.ovr-score > small { color: var(--muted); font-size: 13.5px; font-weight: 600; }
.ovr-breakdown { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px 22px; }
.ovr-bd-top { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; }
.ovr-bd-top span { color: var(--muted); font-size: 12.5px; font-weight: 600; letter-spacing: .02em; }
.ovr-bd-top b { font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 17px; color: var(--text); }
.ovr-bd-meter { height: 6px; border-radius: 99px; background: var(--fill-1, rgba(255,255,255,.06)); overflow: hidden; }
.ovr-bd-meter > span { display: block; height: 100%; border-radius: inherit; }
.ovr-bd-meter > span.b-strong { background: var(--teal); }
.ovr-bd-meter > span.b-building { background: var(--blue); }
.ovr-bd-meter > span.b-focus { background: var(--warning); }

/* systems grid — the same clickable .ov-sys rows, two columns on wide */
.ovr-sys-grid { display: grid; grid-template-columns: 1fr; gap: 8px; }
.ovr-tap { color: var(--muted-2, var(--muted)); font-size: 12px; font-weight: 500; }

/* shield findings */
.ovr-shield-n { color: var(--teal); font-size: 12.5px; }
.ovr-screened { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 4px; }
.ovr-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border-radius: 999px; font-size: 12.5px; font-weight: 600;
  color: var(--teal); background: color-mix(in srgb, var(--teal) 9%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
}
.ovr-chip svg { width: 12px; height: 12px; }
.ovr-blocks { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.ovr-block {
  display: flex; align-items: center; gap: 12px; text-align: left;
  padding: 12px 14px; border-radius: var(--r-lg, 14px);
  background: var(--danger-soft);
  border: 1px solid color-mix(in srgb, var(--danger) 26%, transparent);
}
.ovr-block-ic { width: 30px; height: 30px; border-radius: 9px; flex: none; display: grid; place-items: center;
  color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); }
.ovr-block-ic svg { width: 15px; height: 15px; }
.ovr-block-tx { flex: 1; min-width: 0; }
.ovr-block-tx b { display: block; color: var(--text); font-size: 13.5px; }
.ovr-block-tx small { color: var(--muted); font-size: 12px; line-height: 1.4; display: block; }
/* F414 · the row opens the same "why this was blocked" science sheet */
.ovr-block[data-ovr-blk] { cursor: pointer;
  transition: transform .22s var(--ease-out), border-color .22s, background .22s, box-shadow .22s; }
@media (hover: hover) {
  .ovr-block[data-ovr-blk]:hover { transform: translateY(-2px);
    background: color-mix(in srgb, var(--danger) 9%, var(--surface));
    border-color: color-mix(in srgb, var(--danger) 42%, transparent);
    box-shadow: 0 14px 30px -18px color-mix(in srgb, var(--danger) 60%, transparent); }
}
.ovr-block[data-ovr-blk]:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
.ovr-block-tag { flex: none; font-size: 10.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--danger); padding: 4px 9px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--danger) 34%, transparent); }
.ovr-more { color: var(--muted); font-size: 12.5px; margin: 4px 0 0; }
/* Same readability rule as the All-Time card — clinical copy is never grey. */
.ovr-shield .ovr-block-tx small,
.ovr-shield .ovr-clear,
.ovr-shield .ovr-more { color: var(--text); }
[data-theme="light"] .ovr-shield .ovr-block-tx small,
[data-theme="light"] .ovr-shield .ovr-clear,
[data-theme="light"] .ovr-shield .ovr-more { color: #000; }
.ov-shield-report .sm-block-tx small { color: var(--text); }
[data-theme="light"] .ov-shield-report .sm-block-tx small { color: #000; }
.ovr-clear {
  display: flex; align-items: center; gap: 10px; margin-top: 10px;
  padding: 13px 15px; border-radius: var(--r-lg, 14px);
  color: var(--muted); font-size: 13.5px;
  background: color-mix(in srgb, var(--teal) 6%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 24%, transparent);
}
.ovr-clear svg { width: 16px; height: 16px; color: var(--teal); flex: none; }
.ovr-clear b { color: var(--text); }

/* the plan card */
.ovr-plan-price { font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-weight: 700;
  font-size: 17px; color: var(--text); white-space: nowrap; }
.ovr-plan-sub { color: var(--muted); font-size: 13.5px; margin: 4px 0 14px; }
.ovr-plan-foot { display: flex; gap: 10px; flex-wrap: wrap; }

@media (min-width: 760px) {
  .ovr-sys-grid { grid-template-columns: 1fr 1fr; column-gap: 18px; }
  .ovr-breakdown { grid-template-columns: repeat(4, 1fr); }
}
@media (min-width: 760px) {
  .ovr-sys-grid { grid-template-columns: 1fr 1fr; column-gap: 18px; }
  .ovr-breakdown { grid-template-columns: repeat(4, 1fr); }
}
@media (max-width: 640px) {
  .ovr-hero { grid-template-columns: 1fr; }
  .ovr-plan-foot .btn { flex: 1; }
  /* stack the header: eyebrow + title above, button below full-width */
  .ovr-head .ov-card-head { flex-direction: column; align-items: stretch; gap: 12px; }
  .ovr-head .ov-card-head .btn { width: 100%; justify-content: center; }
  .ovr-breakdown { grid-template-columns: repeat(2, 1fr); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F158 · RESULTS-TAB NAVIGATOR — prev/next through every dated assessment.
   A calm glass strip under the header: older ◀ · "Assessment X of N · date" · ▶ newer.
   ═══════════════════════════════════════════════════════════════════════════ */
.ovr-nav {
  display: flex; align-items: center; gap: 10px; margin: 4px 0 2px;
  padding: 8px 10px; border-radius: 999px;
  background: var(--fill-1, rgba(255,255,255,.05));
  border: 1px solid var(--stroke-1, rgba(255,255,255,.08));
  width: fit-content;
}
.ovr-nav-step {
  width: 34px; height: 34px; flex: none; display: grid; place-items: center;
  border-radius: 50%; cursor: pointer; color: var(--text);
  background: var(--card-2, rgba(255,255,255,.04));
  border: 1px solid var(--stroke-1, rgba(255,255,255,.1));
  transition: background .16s ease, transform .16s ease, opacity .16s ease;
}
.ovr-nav-step svg { width: 15px; height: 15px; }
.ovr-nav-step:hover:not(:disabled) { background: color-mix(in srgb, var(--teal) 14%, transparent);
  border-color: color-mix(in srgb, var(--teal) 34%, transparent); transform: translateY(-1px); }
.ovr-nav-step:active:not(:disabled) { transform: scale(.94); }
.ovr-nav-step:disabled { opacity: .32; cursor: default; }
.ovr-nav-mid { display: flex; flex-direction: column; align-items: center; gap: 1px; min-width: 130px; text-align: center; }
.ovr-nav-mid small { color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: .03em; text-transform: uppercase; }
.ovr-nav-mid b { color: var(--text); font-size: 13.5px; font-weight: 700; }

/* per-report delta chip (mirrors .ov-delta) */
.ovr-delta { display: inline-flex; align-items: center; gap: 5px; margin-top: 2px;
  padding: 4px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.ovr-delta svg { width: 12px; height: 12px; }
.ovr-delta.pos { color: var(--teal); background: color-mix(in srgb, var(--teal) 10%, transparent); }
.ovr-delta.neg { color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent); }
.ovr-delta.neu { color: var(--muted); background: var(--fill-1, rgba(255,255,255,.05)); }

/* lazy-load state — quiet fade while an older report is being fetched */
.ov-results.ovr-loading { opacity: .55; pointer-events: none; transition: opacity .18s ease; }

@media (prefers-reduced-motion: reduce) {
  .ovr-nav-step { transition: none; }
  .ovr-nav-step:hover:not(:disabled) { transform: none; }
  .ov-results.ovr-loading { transition: none; }
}
@media (max-width: 640px) {
  .ovr-nav { width: 100%; justify-content: space-between; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F160 · THE SOCIAL NETWORK — reels · story · groups · community · profile
   The Network tab elevated into a full social world: a sub-tab nav (Feed /
   Reels / Story / Groups / Profile), a community feed w/ likes + comments
   (device-local preview), a vertical reels rail, the member's IDLife story
   timeline, joinable wellness circles, and the member's own profile card.
   All tokenized (dual-theme), responsive, reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── sub-tab navigation ── */
.nw-nav {
  display: flex; gap: 6px; justify-content: center; flex-wrap: wrap;
  padding: 6px; border-radius: 999px; margin: 0 auto;
  width: fit-content; max-width: 100%;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}
.nw-nav-btn {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 9px 16px; border-radius: 999px; border: 1px solid transparent;
  background: transparent; color: var(--muted); cursor: pointer;
  font-family: inherit; font-size: 13px; font-weight: 700;
  transition: color .18s ease, background .18s ease, border-color .18s ease;
  min-height: 38px;
}
.nw-nav-btn svg { width: 15px; height: 15px; }
.nw-nav-btn:hover { color: var(--text); }
.nw-nav-btn.on {
  color: var(--ink-on-brand, #03081a);
  background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2)));
  border-color: transparent;
}
.nw-panel { display: flex; flex-direction: column; gap: clamp(14px, 2vw, 22px); }
.nw-panel[hidden] { display: none; }

/* ── shared preview chip ── */
.nw-preview-chip {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--violet); padding: 3px 10px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--violet) 34%, transparent);
  background: color-mix(in srgb, var(--violet) 6%, transparent);
}
.nw-preview-chip svg { width: 11px; height: 11px; }

/* ── community posts (feed tab) ── */
.nw-cposts { display: flex; flex-direction: column; gap: 12px; margin-top: 12px; }
.nw-cpost {
  padding: 15px 16px; border-radius: 16px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}
.nw-cp-head { display: flex; align-items: center; gap: 11px; }
.nw-cp-av {
  width: 38px; height: 38px; border-radius: 50%; flex: none;
  display: grid; place-items: center; color: #fff;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 15px; font-weight: 700;
}
.nw-cp-who { flex: 1; min-width: 0; }
.nw-cp-who b { display: block; color: var(--text); font-size: 13.5px; font-weight: 700; }
.nw-cp-who small { color: var(--muted); font-size: 11.5px; }
.nw-cp-body { color: var(--text-2, var(--text)); font-size: 14px; line-height: 1.55; margin: 10px 0 0; }
.nw-cp-actions { display: flex; gap: 8px; margin-top: 11px; }
.nw-act-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 13px; border-radius: 999px; cursor: pointer;
  font-family: inherit; font-size: 12.5px; font-weight: 700; color: var(--muted);
  border: 1px solid var(--border, rgba(20,224,203,.14));
  background: var(--fill-1, rgba(255,255,255,.02));
  transition: color .18s ease, border-color .18s ease, transform .18s ease;
  min-height: 32px;
}
.nw-act-btn svg { width: 14px; height: 14px; }
.nw-act-btn:hover { color: var(--text); border-color: color-mix(in srgb, var(--teal) 40%, transparent); }
.nw-act-btn.nw-like.on {
  color: #fff;
  background: linear-gradient(135deg, #f43f7a, var(--violet));
  border-color: transparent;
}
.nw-act-btn.nw-like.on svg { fill: currentColor; }
/* comments */
.nw-cp-comments { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border, rgba(20,224,203,.12)); display: flex; flex-direction: column; gap: 9px; }
.nw-cm { display: flex; align-items: flex-start; gap: 9px; }
.nw-cm-av {
  width: 26px; height: 26px; border-radius: 50%; flex: none;
  display: grid; place-items: center; color: #fff; font-size: 11px; font-weight: 700;
  background: linear-gradient(135deg, var(--blue-2), var(--violet));
}
.nw-cm-mine .nw-cm-av, .nw-cm-av-me { background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2))); color: var(--ink-on-brand, #03081a); }
.nw-cm-tx { flex: 1; min-width: 0; font-size: 13px; color: var(--text-2, var(--text)); line-height: 1.5;
  padding: 8px 12px; border-radius: 12px; background: var(--fill-1, rgba(255,255,255,.03)); }
.nw-cm-tx b { color: var(--text); margin-right: 6px; font-weight: 700; }
.nw-cm-empty { color: var(--muted); font-size: 12.5px; padding: 2px 0; }
.nw-cm-compose { display: flex; align-items: center; gap: 9px; }
.nw-cm-input {
  flex: 1; min-width: 0; min-height: 36px; padding: 8px 14px; border-radius: 999px;
  font-family: inherit; font-size: 16px; color: var(--text);
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  outline: none; transition: border-color .18s ease;
}
.nw-cm-input:focus { border-color: color-mix(in srgb, var(--teal) 55%, transparent); }
.nw-cm-input::placeholder { color: var(--muted); }
.nw-cm-send {
  width: 36px; height: 36px; border-radius: 50%; flex: none; cursor: pointer;
  display: grid; place-items: center; border: none;
  color: var(--ink-on-brand, #03081a);
  background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2)));
  transition: transform .18s ease;
}
.nw-cm-send svg { width: 15px; height: 15px; }
.nw-cm-send:hover { transform: scale(1.06); }

/* ── reels rail ── */
.nw-reels {
  display: grid; grid-auto-flow: column; grid-auto-columns: clamp(150px, 22vw, 196px);
  gap: 12px; margin-top: 12px; overflow-x: auto; padding-bottom: 8px;
  scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}
.nw-reel {
  position: relative; aspect-ratio: 9 / 15.5; border-radius: 18px; overflow: hidden;
  display: flex; flex-direction: column; justify-content: flex-end;
  text-decoration: none; scroll-snap-align: start;
  border: 1px solid var(--border, rgba(20,224,203,.14));
  transition: transform .22s ease, border-color .22s ease;
}
.nw-reel:hover { transform: translateY(-3px); border-color: color-mix(in srgb, var(--teal) 45%, transparent); }
.nw-reel-bg { position: absolute; inset: 0; background: var(--reel-grad, linear-gradient(160deg, var(--blue-2), #0a1030)); }
.nw-reel-thumb {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; object-position: center;
}
.nw-reel-bg::after {
  content: ''; position: absolute; inset: 0;
  background:
    radial-gradient(90% 60% at 50% 0%, rgba(255,255,255,.14), transparent 55%),
    linear-gradient(to top, rgba(2,6,20,.86) 0%, rgba(2,6,20,.28) 45%, transparent 70%);
}
.nw-reel.no-thumb .nw-reel-bg { display: block; }
.nw-reel-ic {
  position: absolute; z-index: 3; top: 14px; left: 14px; width: 34px; height: 34px; border-radius: 11px;
  display: grid; place-items: center; color: #fff;
  background: rgba(255,255,255,.14); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
}
.nw-reel-ic svg { width: 17px; height: 17px; }
.nw-reel-play {
  position: absolute; z-index: 3; top: 50%; left: 50%; transform: translate(-50%, -58%);
  width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center;
  color: #fff; background: rgba(255,255,255,.16);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,.3);
  transition: transform .22s ease, background .22s ease;
}
.nw-reel-play svg { width: 18px; height: 18px; margin-left: 2px; }
.nw-reel:hover .nw-reel-play { transform: translate(-50%, -58%) scale(1.1); background: rgba(255,255,255,.26); }
.nw-reel-meta {
  position: relative; z-index: 3; display: block;
  margin: 0 10px 10px;
  padding: 10px 10px 9px;
  border-radius: 12px;
  border: 1px solid rgba(255,255,255,.15);
  background: color-mix(in srgb, #050d24 86%, var(--blue-2) 14%);
  box-shadow: 0 8px 18px rgba(2, 6, 20, .34);
}
.nw-reel-meta b { display: block; color: #fff; font-size: 13.5px; font-weight: 700; line-height: 1.3; }
.nw-reel-meta small { display: block; color: rgba(238,245,255,.84); font-size: 11px; line-height: 1.4; margin-top: 3px; }
[data-theme="light"] .nw-reel-meta {
  border-color: color-mix(in srgb, var(--blue-2) 24%, #ffffff);
  background: color-mix(in srgb, #ffffff 90%, var(--teal) 10%);
  box-shadow: 0 8px 18px rgba(16, 42, 98, .14);
}
[data-theme="light"] .nw-reel-meta b { color: #112955; }
[data-theme="light"] .nw-reel-meta small { color: #27477e; }
.nw-reel-dur {
  position: absolute; z-index: 3; top: 14px; right: 12px;
  font-size: 10.5px; font-weight: 700; color: #fff;
  padding: 3px 8px; border-radius: 999px; background: rgba(2,6,20,.5);
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
}

/* ── story timeline ── */
.nw-story { position: relative; display: flex; flex-direction: column; gap: 0; margin-top: 14px; padding-left: 4px; }
.nw-story-step { position: relative; display: flex; align-items: flex-start; gap: 14px; padding: 0 0 22px 0; }
.nw-story-step:last-child { padding-bottom: 4px; }
.nw-story-step::before {
  content: ''; position: absolute; left: 19px; top: 40px; bottom: -2px; width: 2px;
  background: linear-gradient(to bottom, color-mix(in srgb, var(--teal) 45%, transparent), color-mix(in srgb, var(--violet) 30%, transparent));
}
.nw-story-step:last-child::before { display: none; }
.nw-story-node {
  width: 40px; height: 40px; border-radius: 50%; flex: none; z-index: 1;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 70%, var(--violet));
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--teal) 10%, transparent);
}
.nw-story-node svg { width: 18px; height: 18px; }
.nw-story-tx { padding-top: 2px; }
.nw-story-tx b { display: block; color: var(--text); font-size: 14.5px; font-weight: 700; }
.nw-story-tx small { color: var(--muted); font-size: 12.5px; line-height: 1.5; display: block; margin-top: 2px; }

/* ── wellness circles (groups tab) ── */
.nw-circles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 12px; }
.nw-circle {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 15px; border-radius: 16px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  transition: border-color .2s ease, transform .2s ease;
}
.nw-circle:hover { border-color: color-mix(in srgb, var(--gc, var(--teal)) 40%, transparent); transform: translateY(-1px); }
.nw-circle-ic {
  width: 40px; height: 40px; border-radius: 13px; flex: none;
  display: grid; place-items: center;
  color: var(--gc, var(--teal));
  background: color-mix(in srgb, var(--gc, var(--teal)) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--gc, var(--teal)) 26%, transparent);
}
.nw-circle-ic svg { width: 19px; height: 19px; }
.nw-circle-tx { flex: 1; min-width: 0; }
.nw-circle-tx b { display: block; color: var(--text); font-size: 14px; font-weight: 700; }
.nw-circle-tx small { color: var(--muted); font-size: 12px; line-height: 1.45; display: block; margin-top: 2px; }
.nw-join {
  display: inline-flex; align-items: center; gap: 5px; flex: none; cursor: pointer;
  padding: 7px 14px; border-radius: 999px; min-height: 34px;
  font-family: inherit; font-size: 12px; font-weight: 700; color: var(--text);
  border: 1px solid color-mix(in srgb, var(--gc, var(--teal)) 40%, transparent);
  background: transparent;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.nw-join svg { width: 13px; height: 13px; }
.nw-join:hover { background: color-mix(in srgb, var(--gc, var(--teal)) 10%, transparent); }
.nw-join.on {
  color: var(--ink-on-brand, #03081a);
  background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2)));
  border-color: transparent;
}

/* ── the member's profile card ── */
.nw-pf-hero { display: flex; align-items: center; gap: 16px; margin-top: 8px; }
.nw-pf-av {
  position: relative; width: 72px; height: 72px; border-radius: 50%; flex: none;
  display: grid; place-items: center;
  background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2)));
}
.nw-pf-av b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 28px; font-weight: 700; color: var(--ink-on-brand, #03081a);
}
.nw-pf-av-ring {
  position: absolute; inset: -5px; border-radius: 50%;
  border: 2px solid transparent;
  background: linear-gradient(135deg, var(--teal), var(--blue-2), var(--violet)) border-box;
  -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);
  mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
  animation: nwPfSpin 8s linear infinite;
}
@keyframes nwPfSpin { to { transform: rotate(360deg); } }
.nw-pf-id { flex: 1; min-width: 0; }
.nw-pf-id b { display: block; color: var(--text); font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: clamp(19px, 3vw, 24px); font-weight: 700; }
.nw-pf-id small { color: var(--muted); font-size: 12.5px; }
.nw-pf-score { text-align: center; flex: none; }
.nw-pf-score b {
  display: block; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(26px, 4vw, 34px); font-weight: 700;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent;
}
.nw-pf-score small { color: var(--muted); font-size: 11.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.nw-pf-stats {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 18px;
}
.nw-pf-stat {
  text-align: center; padding: 13px 8px; border-radius: 14px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}
.nw-pf-stat b { display: block; color: var(--text); font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 20px; font-weight: 700; }
.nw-pf-stat small { color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: .03em; text-transform: uppercase; }
.nw-pf-badges { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.nw-pf-badge {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: var(--text-2, var(--text));
  border: 1px solid var(--border, rgba(20,224,203,.16));
  background: var(--fill-1, rgba(255,255,255,.03));
}
.nw-pf-badge svg { width: 13px; height: 13px; color: var(--teal); }
.nw-pf-circles { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 14px; }
.nw-pf-circles > small { flex-basis: 100%; color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.nw-pf-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: var(--text);
  border: 1px solid color-mix(in srgb, var(--gc, var(--teal)) 32%, transparent);
  background: color-mix(in srgb, var(--gc, var(--teal)) 7%, transparent);
}
.nw-pf-chip svg { width: 13px; height: 13px; color: var(--gc, var(--teal)); }

/* ── responsive ── */
@media (max-width: 640px) {
  .nw-nav { width: 100%; }
  .nw-nav-btn { flex: 1; justify-content: center; padding: 9px 6px; }
  .nw-nav-btn span { display: none; }
  .nw-nav-btn svg { width: 18px; height: 18px; }
  .nw-circles { grid-template-columns: 1fr; }
  .nw-reels { grid-auto-columns: 46vw; }
  .nw-pf-hero { flex-wrap: wrap; }
  .nw-pf-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (prefers-reduced-motion: reduce) {
  .nw-nav-btn, .nw-act-btn, .nw-cm-send, .nw-reel, .nw-reel-play, .nw-circle, .nw-join { transition: none; }
  .nw-reel:hover, .nw-circle:hover { transform: none; }
  .nw-pf-av-ring { animation: none; }
}
/* light-mode polish — keep community/reel surfaces crisp on white */
[data-theme="light"] .nw-cm-tx { background: color-mix(in srgb, var(--blue-2) 5%, transparent); }
[data-theme="light"] .nw-reel { border-color: color-mix(in srgb, var(--blue-2) 22%, transparent); }
[data-theme="light"] .nw-pf-stat b { color: var(--text); }

/* ═══════════════════════════════════════════════════════════════════════════
   F160b · NETWORK CONTRAST + ORGANIZATION PASS — kill the grey-on-grey.
   Every card gets a REAL surface (not translucent grey over grey), every
   supporting line steps up from --muted to --text-2, rows get crisp borders.
   Plus: the i) universe, the Messages inbox, and the circle-welcome popup.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── real surfaces: rows pop off the card, cards pop off the page ── */
.nw-post, .nw-cpost, .nw-group, .nw-circle {
  background: var(--surface, rgba(10,18,40,.55));
  border-color: var(--border-hi, rgba(20,224,203,.22));
}
[data-theme="light"] .nw-post, [data-theme="light"] .nw-cpost,
[data-theme="light"] .nw-group, [data-theme="light"] .nw-circle {
  background: #fff;
  border-color: color-mix(in srgb, var(--blue-2) 16%, transparent);
  box-shadow: 0 1px 6px rgba(16, 42, 98, .06);
}

/* ── contrast: supporting copy steps up from muted grey ── */
.nw-post-tx small, .nw-cp-who small, .nw-circle-tx small,
.nw-sc-tx small, .nw-story-tx small { color: var(--text-2, var(--muted)); }
.nw-privacy, .nw-note, .nw-community-soon { color: var(--text-2, var(--muted)); }

/* ── organization: tighter head, breathing room between blocks ── */
.nw-head { margin-bottom: 2px; }
.nw-title { margin: 0 0 4px; }

/* ── quiet trust note (replaces the dashed "coming soon" look) ── */
.nw-note {
  display: flex; align-items: flex-start; gap: 8px;
  margin: 14px 0 0; font-size: 12.5px; line-height: 1.5;
}
.nw-note svg { width: 13px; height: 13px; flex: none; margin-top: 2px; color: var(--teal); }

/* ── the i) universe ── */
.nw-universe .block-title .id-logo { width: 24px; height: 24px; flex: none; }
.nw-uni-word {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-weight: 700;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  margin-left: -4px;
}
.nw-group { display: flex; flex-direction: column; gap: 10px; }
.nw-group-name { color: var(--text); font-size: 14.5px; font-weight: 700; }
.nw-so { color: var(--text-2, var(--muted)); }

/* ── MESSAGES — circle inbox list ── */
.nw-msg-root { margin-top: 12px; }
.nw-msg-list { display: flex; flex-direction: column; gap: 10px; }
.nw-msg-row {
  display: flex; align-items: center; gap: 13px; width: 100%; text-align: left;
  padding: 14px 16px; border-radius: 16px; cursor: pointer; font-family: inherit;
  background: var(--surface, rgba(10,18,40,.55));
  border: 1px solid var(--border-hi, rgba(20,224,203,.22));
  transition: border-color .2s ease, transform .2s ease;
}
.nw-msg-row:hover { border-color: color-mix(in srgb, var(--gc, var(--teal)) 48%, transparent); transform: translateY(-1px); }
[data-theme="light"] .nw-msg-row { background: #fff; border-color: color-mix(in srgb, var(--blue-2) 16%, transparent); box-shadow: 0 1px 6px rgba(16,42,98,.06); }
.nw-msg-row-tx { flex: 1; min-width: 0; }
.nw-msg-row-tx b { display: block; color: var(--text); font-size: 14px; font-weight: 700; }
.nw-msg-row-tx small { color: var(--text-2, var(--muted)); font-size: 12px; }
.nw-msg-row-go { color: var(--muted); transform: rotate(-90deg); }
.nw-msg-row-go svg { width: 16px; height: 16px; }

/* empty state */
.nw-msg-empty {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: 8px; padding: 28px 18px;
}
.nw-msg-empty-ic {
  width: 52px; height: 52px; border-radius: 17px; display: grid; place-items: center;
  color: var(--ink-on-brand, #03081a);
  background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2)));
  margin-bottom: 4px;
}
.nw-msg-empty-ic svg { width: 24px; height: 24px; }
.nw-msg-empty b { color: var(--text); font-size: 16px; font-weight: 700; }
.nw-msg-empty small { color: var(--text-2, var(--muted)); font-size: 13px; line-height: 1.55; max-width: 40ch; }
.nw-msg-empty .btn { margin-top: 10px; }

/* thread view */
.nw-thread-head { display: flex; align-items: center; gap: 11px; padding-bottom: 12px;
  border-bottom: 1px solid var(--border, rgba(20,224,203,.14)); }
.nw-thread-head b { color: var(--text); font-size: 15px; font-weight: 700; }
.nw-thread-head .nw-circle-ic { width: 34px; height: 34px; border-radius: 11px; }
.nw-thread-back {
  width: 34px; height: 34px; border-radius: 50%; flex: none; cursor: pointer;
  display: grid; place-items: center; color: var(--text);
  border: 1px solid var(--border-hi, rgba(20,224,203,.22)); background: transparent;
  transition: border-color .18s ease;
}
.nw-thread-back svg { width: 16px; height: 16px; }
.nw-thread-back:hover { border-color: color-mix(in srgb, var(--teal) 55%, transparent); }
.nw-thread-msgs {
  display: flex; flex-direction: column; gap: 10px;
  max-height: min(46vh, 440px); overflow-y: auto; padding: 14px 2px;
}
.nw-msg { display: flex; align-items: flex-start; gap: 9px; }
.nw-msg-bubble {
  flex: 1; min-width: 0; font-size: 13.5px; color: var(--text); line-height: 1.5;
  padding: 9px 13px; border-radius: 14px;
  background: var(--surface, rgba(10,18,40,.55));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}
.nw-msg-bubble b { display: block; font-size: 11.5px; color: var(--text-2, var(--muted)); font-weight: 700; margin-bottom: 2px; }
.nw-msg.mine .nw-msg-bubble { background: color-mix(in srgb, var(--teal) 9%, transparent); border-color: color-mix(in srgb, var(--teal) 30%, transparent); }
.nw-msg.official .nw-msg-bubble { border-color: color-mix(in srgb, var(--blue-2) 34%, transparent); }
.nw-msg.official .nw-cm-av { background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2))); color: var(--ink-on-brand, #03081a); }
.nw-msg.official .nw-cm-av svg { width: 14px; height: 14px; }
[data-theme="light"] .nw-msg-bubble { background: #fff; box-shadow: 0 1px 4px rgba(16,42,98,.05); }
.nw-msg-loading { color: var(--text-2, var(--muted)); font-size: 13px; padding: 10px 2px; }
.nw-thread-compose { margin-top: 4px; }

/* ── circle-welcome popup accents ── */
.nw-welcome-stage .fx-disc { color: var(--fx, var(--teal)); }
.nw-welcome-seal {
  position: absolute; right: 8%; bottom: 8%; width: 30px; height: 30px; border-radius: 50%;
  display: grid; place-items: center; color: var(--ink-on-brand, #03081a);
  background: var(--grad-brand, linear-gradient(135deg, var(--teal), var(--blue-2)));
  box-shadow: 0 4px 14px color-mix(in srgb, var(--teal) 40%, transparent);
}
.nw-welcome-seal svg { width: 15px; height: 15px; }

@media (max-width: 640px) {
  .nw-thread-msgs { max-height: 52vh; }
}
@media (prefers-reduced-motion: reduce) {
  .nw-msg-row, .nw-thread-back { transition: none; }
  .nw-msg-row:hover { transform: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F160c · NETWORK $40B PASS — strong-fill nav pills · luxe Messages
   (attachments, links, timestamps) · feed polish. Dual-theme, reduced-motion.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── sub-tab nav: solid readable pills (kills the ghost-grey buttons) ── */
.nw-nav {
  gap: 8px; padding: 7px;
  background: var(--surface, rgba(10,18,40,.6));
  border: 1px solid var(--border-hi, rgba(20,224,203,.24));
  box-shadow: 0 6px 22px rgba(2, 8, 26, .18);
}
[data-theme="light"] .nw-nav {
  background: #fff;
  border-color: color-mix(in srgb, var(--blue-2) 20%, transparent);
  box-shadow: 0 3px 14px rgba(16, 42, 98, .10);
}
.nw-nav-btn {
  color: var(--text);
  background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  font-size: 13.5px; min-height: 40px;
}
[data-theme="light"] .nw-nav-btn {
  background: color-mix(in srgb, var(--blue-2) 6%, #fff);
  border-color: color-mix(in srgb, var(--blue-2) 16%, transparent);
  color: var(--text);
}
.nw-nav-btn svg { opacity: .85; }
.nw-nav-btn:hover {
  border-color: color-mix(in srgb, var(--teal) 45%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent);
}
.nw-nav-btn.on {
  color: #fff;
  background: linear-gradient(135deg, var(--blue-2), var(--violet));
  border-color: transparent;
  box-shadow: 0 6px 18px color-mix(in srgb, var(--blue-2) 42%, transparent);
}
.nw-nav-btn.on svg { opacity: 1; }
[data-theme="light"] .nw-nav-btn.on { color: #fff; }

/* ── thread header: identity + live presence ── */
.nw-thread-id { flex: 1; min-width: 0; }
.nw-thread-id b { display: block; color: var(--text); font-size: 15px; font-weight: 700; }
.nw-thread-id small { color: var(--text-2, var(--muted)); font-size: 11.5px; }
.nw-thread-live {
  width: 9px; height: 9px; border-radius: 50%; flex: none;
  background: var(--teal);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--teal) 22%, transparent);
  animation: nwLivePulse 2.4s ease-in-out infinite;
}
@keyframes nwLivePulse { 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--teal) 8%, transparent); } }

/* ── messages: meta row, linkified urls, image + file attachments ── */
.nw-msg-bubble { display: flex; flex-direction: column; gap: 5px; max-width: min(78%, 560px); flex: 0 1 auto; }
.nw-msg { align-items: flex-end; }
.nw-msg.mine { flex-direction: row-reverse; }
.nw-msg.mine .nw-msg-bubble { border-bottom-right-radius: 5px; }
.nw-msg:not(.mine) .nw-msg-bubble { border-bottom-left-radius: 5px; }
.nw-msg-meta { display: flex; align-items: baseline; gap: 8px; }
.nw-msg-meta b { font-size: 11.5px; color: var(--text-2, var(--muted)); font-weight: 700; margin: 0; }
.nw-msg-meta time { font-size: 10.5px; color: var(--muted); }
.nw-msg-body { font-size: 13.5px; color: var(--text); line-height: 1.5; overflow-wrap: anywhere; }
.nw-msg-bubble > b { display: none; } /* superseded by .nw-msg-meta */
.nw-msg-link {
  color: var(--blue-2); font-weight: 600; text-decoration: none;
  border-bottom: 1px solid color-mix(in srgb, var(--blue-2) 40%, transparent);
  overflow-wrap: anywhere;
}
.nw-msg-link:hover { border-bottom-color: var(--blue-2); }
.nw-msg-img { display: block; border-radius: 12px; overflow: hidden; max-width: 300px;
  border: 1px solid var(--border, rgba(20,224,203,.14)); }
.nw-msg-img img { display: block; width: 100%; height: auto; max-height: 260px; object-fit: cover; }
.nw-msg-file {
  display: flex; align-items: center; gap: 10px; text-decoration: none;
  padding: 10px 12px; border-radius: 12px; max-width: 300px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border-hi, rgba(20,224,203,.2));
  transition: border-color .18s ease;
}
.nw-msg-file:hover { border-color: color-mix(in srgb, var(--teal) 50%, transparent); }
.nw-msg-file > svg { width: 15px; height: 15px; color: var(--muted); flex: none; }
.nw-msg-file-ic {
  width: 34px; height: 34px; border-radius: 10px; flex: none;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--blue-2), var(--violet));
}
.nw-msg-file-ic svg { width: 16px; height: 16px; }
.nw-msg-file-tx { flex: 1; min-width: 0; }
.nw-msg-file-tx b { display: block; color: var(--text); font-size: 12.5px; font-weight: 700;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nw-msg-file-tx small { color: var(--text-2, var(--muted)); font-size: 11px; }
[data-theme="light"] .nw-msg-file { background: #fff; }

/* ── composer: attach button + input + gradient send ── */
.nw-composer { display: flex; align-items: center; gap: 9px; margin-top: 10px; }
.nw-att-btn {
  width: 38px; height: 38px; border-radius: 50%; flex: none; cursor: pointer;
  display: grid; place-items: center; color: var(--text);
  border: 1px solid var(--border-hi, rgba(20,224,203,.24));
  background: var(--fill-1, rgba(255,255,255,.03));
  transition: border-color .18s ease, color .18s ease, transform .18s ease;
}
.nw-att-btn svg { width: 16px; height: 16px; }
.nw-att-btn:hover { border-color: color-mix(in srgb, var(--teal) 55%, transparent); color: var(--teal); transform: scale(1.05); }
[data-theme="light"] .nw-att-btn { background: #fff; }
.nw-composer .nw-cm-input { min-height: 40px; }
.nw-composer .nw-cm-send { width: 40px; height: 40px; }
.nw-composer .nw-cm-send:disabled { opacity: .5; cursor: default; transform: none; }

/* attachment preview tray */
.nw-att-tray { margin-top: 10px; }
.nw-att-chip {
  display: flex; align-items: center; gap: 11px;
  padding: 9px 12px; border-radius: 13px;
  background: color-mix(in srgb, var(--teal) 6%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
}
.nw-att-thumb { width: 38px; height: 38px; border-radius: 9px; object-fit: cover; flex: none; }
.nw-att-name { flex: 1; min-width: 0; }
.nw-att-name b { display: block; color: var(--text); font-size: 12.5px; font-weight: 700;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nw-att-name small { color: var(--text-2, var(--muted)); font-size: 11px; }
.nw-att-x {
  width: 28px; height: 28px; border-radius: 50%; flex: none; cursor: pointer;
  display: grid; place-items: center; color: var(--muted);
  border: 1px solid var(--border, rgba(20,224,203,.14)); background: transparent;
  transition: color .18s ease, border-color .18s ease;
}
.nw-att-x svg { width: 13px; height: 13px; }
.nw-att-x:hover { color: var(--danger, #ff4d4d); border-color: color-mix(in srgb, var(--danger, #ff4d4d) 45%, transparent); }
.nw-att-err { border-color: color-mix(in srgb, var(--warning, #f5a623) 45%, transparent);
  background: color-mix(in srgb, var(--warning, #f5a623) 7%, transparent);
  color: var(--text); font-size: 12.5px; font-weight: 600; }
.nw-att-err svg { width: 15px; height: 15px; color: var(--warning, #f5a623); flex: none; }

/* ── feed polish: accent spines + hover lift for a livelier scroll ── */
.nw-post, .nw-cpost { position: relative; overflow: hidden; }
.nw-post::before, .nw-cpost::before {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: linear-gradient(to bottom, var(--teal), var(--blue-2) 70%, var(--violet));
  opacity: .75;
}
.nw-post:hover, .nw-cpost:hover { transform: translateY(-2px); box-shadow: 0 10px 26px rgba(2, 8, 26, .22); }
[data-theme="light"] .nw-post:hover, [data-theme="light"] .nw-cpost:hover { box-shadow: 0 8px 22px rgba(16, 42, 98, .12); }
.nw-cpost { transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease; }
.nw-post { transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease; }

@media (max-width: 640px) {
  .nw-msg-bubble { max-width: 86%; }
  .nw-msg-img, .nw-msg-file { max-width: 240px; }
}
@media (prefers-reduced-motion: reduce) {
  .nw-thread-live { animation: none; }
  .nw-att-btn, .nw-msg-file { transition: none; }
  .nw-att-btn:hover { transform: none; }
  .nw-post:hover, .nw-cpost:hover { transform: none; box-shadow: none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   F162 · MAXIMIZED POPUPS — kill needless in-modal scrolling on big screens.
   Every popup (detail sheets · product explainers · why/fx modals · methylation
   upload · à la carte) now expands DYNAMICALLY to the available real estate:
   height stays CONTENT-DRIVEN (flex column + max-height ceiling → a short
   popup stays compact, a long one grows to near-full viewport before it ever
   scrolls) and the width ceilings rise per breakpoint. Pure CSS — no JS
   measuring, no ResizeObserver, no layout thrash → zero lag on Safari /
   Chrome / Firefox. MUST live at the very END of the stylesheet so the
   equal-specificity base rules (.idn-modal L2445 · .alc-card L6994) lose the
   cascade; the docked-lane variant (.ds-backdrop.docked .ds-modal, 0-3-0)
   still outranks these and keeps its lane sizing.
   ═══════════════════════════════════════════════════════════════════════ */

/* Tablet (641–1024): wider + taller than the 560/78dvh base */
@media (min-width: 641px) {
  .idn-modal { width: min(760px, calc(100vw - 48px)); max-height: calc(100dvh - 48px); }
  .alc-card  { width: min(960px, calc(100vw - 48px)); max-height: calc(100dvh - 48px); }
}

/* Computer (≥1025px): take the room — popups grow into the free margin */
@media (min-width: 1025px) {
  .idn-modal { width: min(940px, calc(100vw - 128px)); max-height: calc(100dvh - 64px); }
  /* fx invitation/celebration popups are hero-emblem centered — slightly
     narrower so the composition never feels sparse */
  .idn-modal.fx-modal { width: min(760px, calc(100vw - 128px)); }
  /* methylation upload keeps its focused dropzone composition */
  .meth-modal { width: min(760px, calc(100vw - 128px)); }
  /* à la carte is a catalog — give it maximum real estate. F332: the popup
     runs as a persistent two-pane on computer — a single-column product lane on
     the left and an always-open personalized "Why this fits me" panel on the
     right that consumes the LION'S SHARE of the width. */
  .alc-card { width: min(1440px, calc(100vw - 96px)); max-height: calc(100dvh - 64px); }
  .alc-main .alc-body { flex: 0 0 clamp(340px, 32%, 460px); }
  /* single column so the two products that shared a row (Energy · Immune) now
     STACK on top of each other inside their section. */
  .alc-grid { grid-template-columns: 1fr; }
  .alc-rail { display: block; flex: 1 1 auto; min-width: 0; overflow-y: auto; }
  /* wider shells breathe: match the padding to the new scale */
  .idn-modal-head { padding: 26px 68px 16px 30px; }
  .idn-modal-body { padding: 4px 30px 12px; }
  .idn-modal-foot { padding: 12px 30px 24px; }
  /* product hero banners scale up with the wider canvas */
  .idn-modal-hero { height: 190px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F165 · NETWORK $40,000,000,000 PASS — headline removed · Reels-first order ·
   an elevated glass command bar, cinematic reels rail, and luxe card chrome.
   Lives at EOF so the equal-specificity F155/F160c rules lose the cascade.
   Dual-theme · responsive · reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── the section breathes without its old headline ── */
.ov-network { gap: clamp(18px, 2.4vw, 28px); margin-top: clamp(10px, 1.4vw, 18px); }

/* ── COMMAND BAR — a floating glass dock, not a row of chips ── */
.nw-nav {
  position: sticky; top: clamp(64px, 8vh, 76px); z-index: 5;
  gap: 6px; padding: 8px;
  border-radius: 22px;
  background: color-mix(in srgb, var(--surface, #0a1228) 78%, transparent);
  -webkit-backdrop-filter: blur(18px) saturate(1.3); backdrop-filter: blur(18px) saturate(1.3);
  border: 1px solid var(--border-hi, rgba(20,224,203,.22));
  box-shadow:
    0 18px 44px rgba(2, 8, 26, .34),
    inset 0 1px 0 rgba(255,255,255,.06);
}
[data-theme="light"] .nw-nav {
  background: rgba(255,255,255,.86);
  border-color: color-mix(in srgb, var(--blue-2) 18%, transparent);
  box-shadow: 0 14px 34px rgba(16, 42, 98, .12), inset 0 1px 0 #fff;
}
.nw-nav-btn {
  border-radius: 16px;
  padding: 10px 18px; min-height: 44px;
  font-size: 13.5px; letter-spacing: .01em;
  transition: color .2s ease, background .2s ease, border-color .2s ease,
    box-shadow .2s ease, transform .2s ease;
}
.nw-nav-btn:hover { transform: translateY(-1px); }
.nw-nav-btn svg { width: 16px; height: 16px; }
.nw-nav-btn.on {
  position: relative;
  color: #fff;
  background: linear-gradient(135deg, var(--teal) -20%, var(--blue-2) 55%, var(--violet) 130%);
  box-shadow:
    0 10px 26px color-mix(in srgb, var(--blue-2) 46%, transparent),
    inset 0 1px 0 rgba(255,255,255,.28);
  transform: translateY(-1px);
}
.nw-nav-btn.on::after {
  content: ''; position: absolute; left: 22%; right: 22%; bottom: -9px; height: 10px;
  border-radius: 50%; filter: blur(6px);
  background: color-mix(in srgb, var(--blue-2) 55%, transparent);
  pointer-events: none;
}

/* ── card chrome — every network card becomes a lit glass slab ── */
.ov-network .ov-card {
  border-radius: 24px;
  border: 1px solid var(--border-hi, rgba(20,224,203,.2));
  background:
    radial-gradient(120% 90% at 12% 0%, color-mix(in srgb, var(--teal) 5%, transparent), transparent 52%),
    radial-gradient(120% 90% at 95% 100%, color-mix(in srgb, var(--violet) 5%, transparent), transparent 55%),
    var(--surface, rgba(10,18,40,.6));
  box-shadow: 0 22px 54px rgba(2, 8, 26, .28), inset 0 1px 0 rgba(255,255,255,.05);
}
[data-theme="light"] .ov-network .ov-card {
  background:
    radial-gradient(120% 90% at 12% 0%, color-mix(in srgb, var(--teal) 5%, transparent), transparent 52%),
    radial-gradient(120% 90% at 95% 100%, color-mix(in srgb, var(--violet) 4%, transparent), transparent 55%),
    #fff;
  box-shadow: 0 16px 40px rgba(16, 42, 98, .10), inset 0 1px 0 #fff;
}

/* ── REELS — the hero surface: bigger cinematic tiles + sheen sweep ── */
.nw-reels {
  grid-auto-columns: clamp(180px, 24vw, 236px);
  gap: 16px; padding-bottom: 12px;
}
.nw-reel {
  border-radius: 22px;
  box-shadow: 0 14px 36px rgba(2, 8, 26, .3);
  transition: transform .28s cubic-bezier(.2,.9,.3,1.2), border-color .28s ease, box-shadow .28s ease;
}
.nw-reel-thumb { z-index: 1; }
.nw-reel.no-thumb .nw-reel-thumb { display: none; }
.nw-reel::after {
  content: ''; position: absolute; inset: 0; z-index: 2; pointer-events: none;
  background: linear-gradient(115deg, transparent 30%, rgba(255,255,255,.16) 48%, transparent 62%);
  transform: translateX(-120%);
  transition: transform .7s ease;
}
.nw-reel:hover { transform: translateY(-6px) scale(1.015); box-shadow: 0 26px 52px rgba(2, 8, 26, .42); }
.nw-reel:hover::after { transform: translateX(120%); }
.nw-reel-play {
  width: 54px; height: 54px;
  background: rgba(255,255,255,.2);
  box-shadow: 0 8px 26px rgba(2,6,20,.45), 0 0 0 8px rgba(255,255,255,.06);
}
.nw-reel:hover .nw-reel-play { transform: translate(-50%, -58%) scale(1.14); background: rgba(255,255,255,.32); }
.nw-reel-meta b { font-size: 14.5px; text-shadow: 0 2px 10px rgba(2,6,20,.5); }
[data-theme="light"] .nw-reel-meta b { text-shadow: none; }

/* ── feed / community / circles: lifted hover states ── */
.nw-post, .nw-cpost, .nw-circle, .nw-msg-row {
  border-radius: 18px;
}
.nw-post:hover, .nw-cpost:hover, .nw-circle:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 30px rgba(2, 8, 26, .22);
}
[data-theme="light"] .nw-post:hover,
[data-theme="light"] .nw-cpost:hover,
[data-theme="light"] .nw-circle:hover { box-shadow: 0 10px 26px rgba(16, 42, 98, .12); }

/* ── mobile: the dock hugs the edge, icons carry it ── */
@media (max-width: 640px) {
  .nw-nav { top: 8px; border-radius: 18px; padding: 6px; }
  .nw-nav-btn { border-radius: 13px; min-height: 42px; }
  .nw-nav-btn.on::after { display: none; }
  .nw-reels { grid-auto-columns: clamp(160px, 44vw, 200px); }
  .nw-reel-meta { margin: 0 8px 8px; padding: 8px 8px 7px; border-radius: 10px; }
}

/* ── reduced motion: no lifts, no sheen, no shadow dance ── */
@media (prefers-reduced-motion: reduce) {
  .nw-nav-btn, .nw-reel, .nw-post, .nw-cpost, .nw-circle { transition: none; }
  .nw-nav-btn:hover, .nw-nav-btn.on, .nw-reel:hover,
  .nw-post:hover, .nw-cpost:hover, .nw-circle:hover { transform: none; }
  .nw-reel::after { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F166 · RESULTS TAB $40B POWER PASS — animated score ring hero · insight
   tiles · the interactive Journey band (all assessments, tappable dots,
   personal-best crown, records row) · per-system ▲/▼ momentum chips.
   EOF placement wins the cascade over the F157/F158 base rules.
   Dual-theme · responsive · reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── HERO v2 — ring left, meta right ── */
.ovr-hero-v2 {
  display: flex; align-items: center; gap: clamp(18px, 3vw, 34px);
  padding: clamp(6px, 1vw, 12px) 0 2px;
}
.ovr-ring-wrap { position: relative; width: clamp(118px, 15vw, 150px); flex: none; }
.ovr-ring { width: 100%; height: auto; display: block; }
.ovr-ring-track { fill: none; stroke: var(--fill-2, rgba(255,255,255,.07)); stroke-width: 9; }
.ovr-ring-fill {
  fill: none; stroke-width: 9; stroke-linecap: round;
  transition: stroke-dashoffset 1.15s cubic-bezier(.22,.8,.28,1);
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--teal) 35%, transparent));
}
.ovr-ring-center {
  position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; pointer-events: none;
}
.ovr-ring-center b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(30px, 4vw, 40px); font-weight: 700; line-height: 1;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
.ovr-ring-center small { color: var(--muted); font-size: 10.5px; margin-top: 3px; }
.ovr-hero-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 12px; }
.ovr-label-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ovr-label {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(17px, 2.2vw, 21px); font-weight: 700; color: var(--text);
}
.ovr-grade {
  font-size: 11.5px; font-weight: 700; letter-spacing: .04em;
  color: var(--blue-2); padding: 3px 11px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--blue-2) 34%, transparent);
  background: color-mix(in srgb, var(--blue-2) 7%, transparent);
}

/* ── INSIGHT TILES — the check-in's four power facts ── */
.ovr-insights {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px; margin-top: clamp(14px, 2vw, 20px);
}
.ovr-ins {
  display: flex; align-items: center; gap: 11px; text-align: left;
  padding: 13px 14px; border-radius: 16px; min-width: 0;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  font-family: inherit; color: inherit; cursor: default;
}
button.ovr-ins { cursor: pointer; transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease; }
button.ovr-ins:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(2, 8, 26, .2); }
.ovr-ins-ic {
  width: 36px; height: 36px; border-radius: 12px; flex: none;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
}
.ovr-ins.ins-focus .ovr-ins-ic { background: linear-gradient(135deg, var(--blue-2), var(--violet)); }
.ovr-ins.ins-shield .ovr-ins-ic { background: linear-gradient(135deg, var(--violet), var(--blue-2)); }
.ovr-ins.ins-rules .ovr-ins-ic { background: linear-gradient(135deg, var(--blue-2), var(--teal)); }
.ovr-ins-ic svg { width: 17px; height: 17px; }
.ovr-ins-tx { min-width: 0; }
.ovr-ins-tx small { display: block; color: var(--muted); font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.ovr-ins-tx b { display: block; color: var(--text); font-size: 13.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
button.ovr-ins.ins-strong:hover { border-color: color-mix(in srgb, var(--teal) 46%, transparent); }
button.ovr-ins.ins-focus:hover { border-color: color-mix(in srgb, var(--violet) 46%, transparent); }

/* ── THE JOURNEY BAND — every assessment, one interactive line ── */
.ovr-journey .ovr-tap { color: var(--muted); font-size: 11.5px; font-weight: 600; }
.ovr-spark-wrap {
  position: relative; height: clamp(150px, 22vw, 210px);
  margin: 18px 2px 26px;
}
.ovr-spark { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.ovr-spark-grid { stroke: var(--border, rgba(255,255,255,.07)); stroke-width: 1; stroke-dasharray: 3 5; }
.ovr-spark-line { stroke-dasharray: 1; stroke-dashoffset: 1; }
.ovr-go .ovr-spark-line { animation: ovrDraw 1.3s cubic-bezier(.3,.7,.3,1) forwards; }
@keyframes ovrDraw { to { stroke-dashoffset: 0; } }
.ovr-dot {
  position: absolute; transform: translate(-50%, -50%);
  width: 30px; height: 30px; display: grid; place-items: center;
  background: none; border: none; padding: 0; cursor: pointer;
}
.ovr-dot i {
  width: 11px; height: 11px; border-radius: 50%; display: block;
  background: var(--surface, #0a1228);
  border: 2.5px solid var(--teal);
  transition: transform .18s ease, box-shadow .18s ease;
}
.ovr-dot:hover i { transform: scale(1.35); box-shadow: 0 0 0 5px color-mix(in srgb, var(--teal) 16%, transparent); }
.ovr-dot.cur i {
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  border-color: transparent;
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--teal) 20%, transparent);
}
.ovr-dot.best i { border-color: #f4b23f; }
.ovr-dot.best.cur i { background: linear-gradient(135deg, #f4b23f, var(--teal)); }
.ovr-dot-val {
  position: absolute; transform: translate(-50%, calc(-100% - 12px));
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 12px; font-weight: 700; color: var(--muted); pointer-events: none;
  white-space: nowrap;
}
.ovr-dot-val.cur {
  font-size: 13.5px;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
.ovr-crown { font-style: normal; color: #f4b23f; font-size: 10px; margin-left: 3px; -webkit-text-fill-color: #f4b23f; }
.ovr-spark-x { position: absolute; bottom: -22px; font-size: 11px; color: var(--muted); font-weight: 600; }
.ovr-spark-x.l { left: 0; }
.ovr-spark-x.r { right: 0; }

/* ── records row under the journey ── */
.ovr-records {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px; margin-top: 10px;
}
.ovr-rec {
  text-align: center; padding: 12px 8px; border-radius: 14px;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}
.ovr-rec b {
  display: block; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(19px, 2.4vw, 24px); font-weight: 700; color: var(--text);
}
.ovr-rec.rec-best b { color: #f4b23f; }
.ovr-rec.rec-up b { color: var(--teal); }
.ovr-rec.rec-down b { color: var(--warning, #f47a5f); }
.ovr-rec small { color: var(--muted); font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }

/* ── per-system ▲/▼ momentum chips (vs previous check-in) ── */
.ovr-sys-d {
  flex: none; font-size: 11px; font-weight: 800; letter-spacing: .02em;
  padding: 2px 8px; border-radius: 999px; margin-right: 2px;
}
.ovr-sys-d.pos { color: var(--teal); background: color-mix(in srgb, var(--teal) 10%, transparent); }
.ovr-sys-d.neg { color: var(--warning, #f47a5f); background: color-mix(in srgb, var(--warning, #f47a5f) 10%, transparent); }

/* ── responsive ── */
@media (max-width: 860px) {
  .ovr-insights { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .ovr-hero-v2 { flex-direction: column; align-items: center; text-align: center; gap: 14px; }
  .ovr-hero-meta { width: 100%; }
  .ovr-label-row { justify-content: center; }
  .ovr-records { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ovr-spark-wrap { height: 140px; margin-bottom: 30px; }
  .ovr-dot-val { font-size: 10.5px; }
}

/* ── reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .ovr-ring-fill { transition: none; }
  .ovr-go .ovr-spark-line { animation: none; stroke-dashoffset: 0; }
  button.ovr-ins, .ovr-dot i { transition: none; }
  button.ovr-ins:hover { transform: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F169 · RESULTS SUITE — control bar · All-Time view · Future You · Compare
   All tokenized (both themes), responsive, reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */

/* shared band coloring for the numbers in these components */
.ovr-at-now-row b.b-strong, .cmp-check-score.b-strong, .cmp-stat b.b-strong,
.fv-ba b.b-strong { color: var(--teal); }
.ovr-at-now-row b.b-building, .cmp-check-score.b-building, .cmp-stat b.b-building,
.fv-ba b.b-building { color: var(--blue); }
.ovr-at-now-row b.b-focus, .cmp-check-score.b-focus, .cmp-stat b.b-focus,
.fv-ba b.b-focus { color: var(--warning); }

/* ── control bar ─────────────────────────────────────────────────────────── */
.ovr-controls {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 12px; margin-bottom: 16px;
}
.ovr-seg {
  display: inline-flex; padding: 4px; gap: 3px;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--r-pill);
}
.ovr-seg-btn {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 8px 15px; border: 0; background: transparent; cursor: pointer;
  color: var(--muted); font-family: var(--font-body); font-size: 13px; font-weight: 700;
  border-radius: var(--r-pill); transition: color .2s var(--ease-out), background .2s var(--ease-out);
}
.ovr-seg-btn svg { width: 15px; height: 15px; }
.ovr-seg-btn:hover { color: var(--text-2); }
.ovr-seg-btn.on {
  color: var(--ink-on-brand); background: var(--grad-brand);
  box-shadow: var(--shadow-sm);
}
.ovr-acts { display: inline-flex; gap: 9px; flex-wrap: wrap; }
.ovr-act {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 16px; cursor: pointer;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-pill); color: var(--text);
  font-family: var(--font-body); font-size: 13px; font-weight: 700;
  transition: transform .2s var(--ease-out), border-color .2s var(--ease-out), box-shadow .2s var(--ease-out);
}
.ovr-act:hover { transform: translateY(-1px); box-shadow: var(--shadow-sm); }
.ovr-act-ic { display: inline-flex; }
.ovr-act-ic svg { width: 16px; height: 16px; }
.ovr-act-future { border-color: color-mix(in srgb, var(--teal) 42%, transparent); }
.ovr-act-future .ovr-act-ic { color: var(--teal); }
.ovr-act-future:hover { border-color: var(--teal); }
.ovr-act-compare { border-color: color-mix(in srgb, var(--blue) 42%, transparent); }
.ovr-act-compare .ovr-act-ic { color: var(--blue); }
.ovr-act-compare:hover { border-color: var(--blue); }

/* ── All-Time view ───────────────────────────────────────────────────────── */
.ovr-at-empty { text-align: center; padding: 40px 24px; }
.ovr-at-empty-emblem {
  width: 64px; height: 64px; margin: 0 auto 16px; display: grid; place-items: center;
  border-radius: var(--r-lg); background: var(--teal-soft); color: var(--teal);
}
.ovr-at-empty-emblem svg { width: 30px; height: 30px; }
.ovr-at-empty h3 { font-family: var(--font-display); font-size: 20px; margin: 0 0 8px; }
.ovr-at-empty p { color: var(--text-2); max-width: 42ch; margin: 0 auto; line-height: 1.55; }

.ovr-at-hero { margin-bottom: 14px; }
.ovr-at-now-lab { color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; }
.ovr-at-now-row { display: flex; align-items: baseline; gap: 12px; margin: 6px 0 8px; flex-wrap: wrap; }
.ovr-at-now-row b { font-family: var(--font-display); font-size: 48px; line-height: 1; font-weight: 800; }
.ovr-at-now-meta { color: var(--text-2); font-size: 14px; font-weight: 600; }
.ovr-at-momo {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 800; padding: 4px 11px; border-radius: var(--r-pill);
}
.ovr-at-momo svg { width: 14px; height: 14px; }
.ovr-at-momo.up { color: var(--teal); background: var(--teal-soft); }
.ovr-at-momo.down { color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent); }
.ovr-at-records { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.ovr-at-grow { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.ovr-at-gchip {
  display: inline-grid; place-items: center; min-width: 34px; height: 34px; padding: 0 8px;
  border-radius: var(--r-sm); font-family: var(--font-display); font-weight: 800; font-size: 15px;
  background: var(--surface-2); border: 1px solid var(--border);
}
.ovr-at-gchip.b-strong { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 40%, transparent); }
.ovr-at-gchip.b-building { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 40%, transparent); }
.ovr-at-gchip.b-focus { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 40%, transparent); }
.ovr-at-garrow { color: var(--muted-2); font-size: 15px; }

.ovr-at-syslist { display: flex; flex-direction: column; gap: 2px; }
.ovr-at-sys {
  display: grid; grid-template-columns: auto 1fr auto auto; align-items: center; gap: 12px;
  padding: 11px 10px; border-radius: var(--r-sm); cursor: pointer;
  transition: background .18s var(--ease-out);
}
.ovr-at-sys:hover { background: var(--surface-2); }
.ovr-at-sys .ov-sys-ic { display: inline-flex; color: var(--muted); }
.ovr-at-sys .ov-sys-ic svg { width: 18px; height: 18px; }
.ovr-at-sys-name { font-weight: 700; font-size: 14px; display: flex; align-items: center; gap: 8px; }
.ovr-at-sys-track { display: inline-flex; align-items: center; justify-content: flex-end; min-width: 54px; }
.ovr-at-sys-nums { display: inline-flex; align-items: baseline; gap: 8px; }
.ovr-at-sys-nums b { font-family: var(--font-display); font-size: 18px; font-weight: 800; }
.ovr-at-sys-range { color: var(--muted); font-size: 11px; font-weight: 700; white-space: nowrap; }
.ovr-at-sys-d { font-size: 11px; font-weight: 800; padding: 1px 7px; border-radius: var(--r-pill); }
.ovr-at-sys-d.pos { color: var(--teal); background: var(--teal-soft); }
.ovr-at-sys-d.neg { color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent); }
.ovr-at-note { color: var(--muted); font-size: 12px; text-align: center; margin: 10px 0 0; }

/* ── F414 · ALL-TIME SHIELD — sift every check-in the Shield screened ────── */
.ovr-at-shstats { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: 14px; }
.ovr-at-shrail {
  display: flex; align-items: center; gap: 6px; margin-top: 14px; padding-bottom: 4px;
  overflow-x: auto; scrollbar-width: none;
}
.ovr-at-shrail::-webkit-scrollbar { display: none; }
.ovr-at-shtab {
  flex: none; display: inline-flex; align-items: center; gap: 7px;
  padding: 8px 13px; border-radius: var(--r-pill); cursor: pointer;
  background: var(--surface-2); border: 1px solid var(--border);
  color: var(--muted); font-family: var(--font-body); font-size: 12.5px; font-weight: 700;
  white-space: nowrap;
  transition: color .2s var(--ease-out), background .2s var(--ease-out), border-color .2s var(--ease-out);
}
.ovr-at-shtab:hover { color: var(--text-2); border-color: var(--border-soft); }
.ovr-at-shtab.on {
  color: var(--text); background: var(--surface);
  border-color: color-mix(in srgb, var(--danger) 40%, transparent);
  box-shadow: 0 6px 18px -12px color-mix(in srgb, var(--danger) 70%, transparent);
}
.ovr-at-shtab-n {
  min-width: 20px; padding: 1px 6px; border-radius: var(--r-pill);
  font-size: 11px; font-weight: 800; text-align: center;
  color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent);
}
.ovr-at-shtab-n.zero { color: var(--teal); background: var(--teal-soft); }
.ovr-at-shtab-now {
  margin-left: 6px; padding: 1px 6px; border-radius: var(--r-pill);
  font-size: 9.5px; font-weight: 800; font-style: normal; letter-spacing: .05em; text-transform: uppercase;
  color: var(--teal); background: var(--teal-soft);
}
.ovr-at-shbody { margin-top: 12px; }
.ovr-at-shpanel[hidden] { display: none; }
.ovr-at-shpanel.on { animation: smIn .34s var(--ease-out) both; }
.ovr-at-shhead { margin: 0 0 10px; }
.ovr-at-shhead b { display: block; color: var(--text); font-size: 13.5px; font-weight: 700; }
.ovr-at-shhead span { display: block; color: var(--muted); font-size: 12px; line-height: 1.45; }
/* Phone: the "Blocked" pill would squeeze the reason into a sliver — drop it
   under the text and let the copy use the full row. */
@media (max-width: 640px) {
  .ovr-block { flex-wrap: wrap; align-items: flex-start; row-gap: 8px; }
  .ovr-block-ic { margin-top: 1px; }
  .ovr-block-tx { flex: 1 1 calc(100% - 42px); }   /* fills line 1, forcing the pill to wrap */
  .ovr-block-tag { order: 3; margin-left: 42px; }
}
.ovr-block-when {
  display: inline-flex; align-items: center; gap: 5px; margin-top: 6px;
  font-size: 11px; font-weight: 700; color: var(--muted);
}
.ovr-block-when svg { width: 12px; height: 12px; }
@media (max-width: 900px) { .ovr-at-shstats { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* The Shield section carries dense clinical copy — muted grey is too faint for
   it, so every secondary line runs at full text weight in BOTH themes. */
.ovr-at-shield .ovr-block-tx small,
.ovr-at-shield .ovr-block-when,
.ovr-at-shield .ovr-at-shhead span,
.ovr-at-shield .ovr-rec small,
.ovr-at-shield .ovr-clear,
.ovr-at-shield .ovr-at-shtab { color: var(--text); }
.ovr-at-shield .ovr-at-shtab:hover { color: var(--text); }
[data-theme="light"] .ovr-at-shield .ovr-block-tx small,
[data-theme="light"] .ovr-at-shield .ovr-block-when,
[data-theme="light"] .ovr-at-shield .ovr-at-shhead span,
[data-theme="light"] .ovr-at-shield .ovr-rec small,
[data-theme="light"] .ovr-at-shield .ovr-clear,
[data-theme="light"] .ovr-at-shield .ovr-at-shtab { color: #000; }

/* ── overlay shell (Future You + Compare share this) ─────────────────────── */
.future-view {
  position: fixed; inset: 0; z-index: 1200;
  display: grid; place-items: center; padding: clamp(10px, 1.8vw, 20px);
  opacity: 0; pointer-events: none;
  transition: opacity .24s var(--ease-out);
}
.future-view.show { opacity: 1; pointer-events: auto; }
.fv-veil { position: absolute; inset: 0; background: rgba(3, 6, 15, 0.62); backdrop-filter: blur(8px); }
.fv-card {
  position: relative; z-index: 1; width: min(1400px, 100%);
  max-height: 95vh; overflow: auto; -webkit-overflow-scrolling: touch;
  background: var(--grad-card); border: 1px solid var(--border);
  border-radius: var(--r-xl); box-shadow: var(--shadow-lg);
  padding: clamp(20px, 2.4vw, 34px); backdrop-filter: var(--glass-blur);
  transform: translateY(14px) scale(.985);
  transition: transform .28s var(--ease-out);
}
.future-view.show .fv-card { transform: none; }
.fv-close {
  position: absolute; top: 14px; right: 14px; z-index: 3;
  width: 36px; height: 36px; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--border); background: var(--fill-1); color: var(--muted);
  transition: color .18s, border-color .18s, background .18s, transform .18s var(--ease-spring);
}
.fv-close:hover { color: var(--text); border-color: var(--border-hi); background: var(--fill-2); transform: rotate(90deg); }
.fv-close:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.fv-close svg { width: 15px; height: 15px; }
.fv-back { top: 16px; left: 16px; }

/* F193 · on the LOCKED Future You popup, MyAI floats ABOVE the overlay (z-1200)
   so the member can talk to their coach without leaving the projection, and the
   FAB stays reachable to reopen it after closing. Low-score system rows become
   tappable — a tap opens MyAI with a consultative, sales-forward question. */
body.fv-locked .myai-pop { z-index: 1300; }
body.fv-locked .myai-fab { z-index: 1300; }
.future-view .fv-sys--tap { cursor: pointer; transition: transform .16s var(--ease-out); }
.future-view .fv-sys--tap:hover { transform: translateX(3px); }
.future-view .fv-sys--tap:hover .fv-sys-top > span:first-child { color: var(--teal); }

/* F195 · when MyAI is pulled up on a computer (≥1025px), slide the Future You /
   Compare overlay card out of dead-center and into the visible LEFT lane —
   mirroring the background page pinch — so the projection stays fully readable
   beside the widened companion instead of hiding behind it. Reuses --lane-w /
   --lane-x that body.myai-open already defines. */
@media (min-width: 1025px) {
  body.myai-open .future-view {
    justify-items: start;
  }
  body.myai-open .fv-card {
    width: min(var(--lane-w), 1400px);
    transition: transform .28s var(--ease-out), width 1.5s var(--ease-lux);
  }
}

.fv-head { text-align: center; margin-bottom: 22px; padding: 0 8px; }
.fv-eyebrow { display: inline-flex; align-items: center; gap: 7px; justify-content: center; color: var(--teal); }
.fv-eyebrow svg { width: 15px; height: 15px; }
.fv-title { font-family: var(--font-display); font-size: clamp(22px, 5vw, 30px); font-weight: 800; margin: 8px 0 6px; }
.fv-sub { color: var(--text-2); font-size: 14px; line-height: 1.55; margin: 0 auto; max-width: 46ch; }

/* Future You — hero ring + before/after */
.fv-hero { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; justify-content: center; margin-bottom: 22px; }
.fv-ring-wrap { position: relative; width: 172px; height: 172px; flex: none; }
.fv-ring { width: 100%; height: 100%; }
.fv-ring-track { fill: none; stroke: var(--surface-hi); stroke-width: 9; }
.fv-ring-base { fill: none; stroke: var(--muted-2); stroke-width: 9; stroke-linecap: round; opacity: .5; }
.fv-ring-fill { fill: none; stroke-width: 9; stroke-linecap: round; transition: stroke-dashoffset 1s var(--ease-out); }
.fv-ring-center { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; }
.fv-ring-center small { color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; }
.fv-ring-center b { font-family: var(--font-display); font-size: 46px; font-weight: 800; line-height: 1; display: block; margin: 2px 0; }
.fv-ring-of { color: var(--muted); font-size: 11px; font-weight: 700; }
.fv-hero-meta { flex: 1 1 240px; min-width: 220px; }
.fv-beforeafter { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.fv-ba { text-align: center; }
.fv-ba small { display: block; color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }
.fv-ba b { font-family: var(--font-display); font-size: 30px; font-weight: 800; }
.fv-ba-proj { color: var(--teal); }
.fv-ba-arrow { color: var(--muted-2); display: inline-flex; }
.fv-ba-arrow svg { width: 20px; height: 20px; }
.fv-delta {
  margin-left: auto; font-family: var(--font-display); font-weight: 800; font-size: 16px;
  color: var(--teal); background: var(--teal-soft); padding: 5px 12px; border-radius: var(--r-pill);
}
.fv-feel { color: var(--text-2); font-size: 13.5px; line-height: 1.6; margin: 14px 0 0; }
.fv-feel b { color: var(--text); }

.fv-panel { min-width: 0; }
.fv-connections {
  padding: clamp(13px, 1.2vw, 18px); border-radius: 22px;
  background: color-mix(in srgb, var(--surface) 62%, transparent);
  border: 1px solid var(--border); box-shadow: 0 14px 42px -34px color-mix(in srgb, var(--blue-2) 46%, transparent);
}
.fv-conn-head { display: flex; align-items: center; gap: 9px; margin-bottom: 12px; }
.fv-conn-head > span { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 999px; background: var(--teal-soft); color: var(--teal); }
.fv-conn-head svg { width: 15px; height: 15px; }
.fv-conn-head b { font-family: var(--font-display); font-size: 15px; color: var(--text); }
.fv-conn-head small { margin-left: auto; color: var(--muted); font-size: 11.5px; font-weight: 700; }
.fv-conn-pills { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.fv-conn-pill {
  display: grid; grid-template-columns: 28px minmax(0, 1fr); align-items: center; gap: 8px;
  min-width: 0; padding: 8px 9px; border-radius: 15px;
  border: 1px solid var(--border); background: var(--surface-2); color: var(--text-2);
}
.fv-conn-ic { width: 28px; height: 28px; border-radius: 999px; display: grid; place-items: center; background: var(--fill-1); color: var(--muted); }
.fv-conn-ic svg { width: 14px; height: 14px; }
.fv-conn-tx { min-width: 0; display: block; }
.fv-conn-tx b { display: block; color: var(--text); font-size: 11.5px; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fv-conn-tx small { display: block; margin-top: 2px; color: var(--muted); font-size: 10.5px; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fv-conn-pill.is-on { border-color: color-mix(in srgb, var(--teal) 32%, transparent); background: color-mix(in srgb, var(--teal) 7%, var(--surface-2)); }
.fv-conn-pill.is-on .fv-conn-ic { background: var(--grad-brand); color: var(--ink-on-brand); }
.fv-conn-pill.is-due { border-color: color-mix(in srgb, var(--warning) 34%, transparent); background: color-mix(in srgb, var(--warning) 8%, var(--surface-2)); }
.fv-conn-pill.is-due .fv-conn-ic { color: var(--warning); background: color-mix(in srgb, var(--warning) 14%, transparent); }
.fv-conn-pill.is-off .fv-conn-ic,
.fv-conn-pill.is-locked .fv-conn-ic { color: var(--muted-2); }

.fv-section { margin-top: 20px; }
.fv-cols { display: grid; gap: clamp(16px, 2vw, 24px); align-items: start; margin-top: 20px; }
.fv-cols .fv-section { margin-top: 0; }
@media (min-width: 900px) { .fv-cols { grid-template-columns: 1fr 1fr; } }
.fv-sec-h { display: flex; align-items: center; gap: 8px; font-family: var(--font-display); font-weight: 700; font-size: 15px; margin-bottom: 12px; }
.fv-sec-h svg { width: 17px; height: 17px; color: var(--teal); }
.fv-sec-h small { color: var(--muted); font-weight: 600; font-size: 12px; }
.fv-levers { display: flex; flex-direction: column; gap: 9px; }
.fv-lever {
  display: grid; grid-template-columns: auto 1fr auto auto; align-items: center; gap: 13px;
  width: 100%; text-align: left; cursor: pointer;
  padding: 13px 15px; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-md); transition: border-color .2s var(--ease-out), background .2s var(--ease-out);
}
.fv-lever-ic { display: inline-flex; color: var(--muted); }
.fv-lever-ic svg { width: 19px; height: 19px; }
.fv-lever-tx b { display: block; font-size: 14px; font-weight: 700; }
.fv-lever-tx small { display: block; color: var(--muted); font-size: 12px; margin-top: 1px; }
.fv-lever-pts { font-family: var(--font-display); font-weight: 800; font-size: 14px; color: var(--muted-2); }
.fv-lever-check {
  width: 26px; height: 26px; display: grid; place-items: center; border-radius: var(--r-pill);
  border: 1.5px solid var(--border); color: transparent; transition: all .2s var(--ease-out);
}
.fv-lever-check svg { width: 14px; height: 14px; }
.fv-lever.on { border-color: color-mix(in srgb, var(--teal) 55%, transparent); background: var(--teal-soft); }
.fv-lever.on .fv-lever-ic { color: var(--teal); }
.fv-lever.on .fv-lever-pts { color: var(--teal); }
.fv-lever.on .fv-lever-check { background: var(--grad-brand); border-color: transparent; color: var(--ink-on-brand); }

.fv-syslist { display: flex; flex-direction: column; gap: 12px; }
.fv-sys-top { display: flex; align-items: center; justify-content: space-between; font-size: 13px; font-weight: 700; margin-bottom: 6px; }
.fv-sys-nums { display: inline-flex; align-items: center; gap: 6px; }
.fv-sys-nums b { font-family: var(--font-display); }
.fv-sys-arrow { color: var(--muted-2); display: inline-flex; }
.fv-sys-arrow svg { width: 13px; height: 13px; }
.fv-sys-proj-n { color: var(--teal); }
.fv-sys-track { position: relative; height: 8px; border-radius: var(--r-pill); background: var(--surface-hi); overflow: hidden; }
.fv-sys-cur { position: absolute; inset: 0 auto 0 0; height: 100%; background: var(--muted-2); border-radius: var(--r-pill); opacity: .55; }
.fv-sys-proj { position: absolute; inset: 0 auto 0 0; height: 100%; background: var(--grad-brand); border-radius: var(--r-pill); transition: width .5s var(--ease-out); }

.fv-cta-row { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 24px; }
.fv-cta-row .btn { flex: 1 1 auto; }
.fv-note {
  display: flex; align-items: flex-start; gap: 8px; margin: 16px 0 0;
  color: var(--muted); font-size: 12px; line-height: 1.5;
}
.fv-note svg { width: 14px; height: 14px; flex: none; margin-top: 1px; }

/* ═══════════════════════════════════════════════════════════════════════════
   F196 · FUTURE YOU — full-screen cinematic "sell without selling" pass.
   The single most important screen: it fills the computer viewport (no dead
   side margins), splits into a sticky projection RAIL (ring + before/after +
   narrative) beside the interactive levers/systems PANEL, and dials every
   surface up. NEPQ (Jeremy-Miner) selling = the emotional gap between "today"
   and "projected" does the persuading; the member flips their own levers and
   sells themselves. Tokenized both themes, responsive, reduced-motion safe.
   ALL F193 wiring + IDs preserved (#fv-ring-fill/#fv-proj-num/levers/#fv-plan). */

/* premium veil — a deep radial wash instead of a flat dim */
.future-view .fv-veil {
  background:
    radial-gradient(120% 85% at 50% -8%, color-mix(in srgb, var(--blue-2) 20%, transparent), transparent 62%),
    rgba(3, 6, 15, 0.68);
}
/* living top-rim glow inside the card; lift real content above it */
.fv-card::before {
  content: ""; position: absolute; inset: 0; z-index: 0; border-radius: inherit; pointer-events: none;
  background: radial-gradient(150% 60% at 50% 0%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 55%);
}
.fv-card > * { position: relative; z-index: 1; }
/* the close X must stay pinned to the top-right corner — override the generic
   `.fv-card > *` flow positioning above (same specificity, later wins). */
.fv-close { position: absolute; top: 14px; right: 14px; z-index: 3; }
/* aura behind the projection ring */
.fv-ring-wrap::before {
  content: ""; position: absolute; inset: -13%; border-radius: 50%; pointer-events: none; z-index: 0;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 24%, transparent), transparent 68%);
  filter: blur(15px); opacity: .7;
}
.fv-ring { position: relative; z-index: 1; }
.fv-ring-center { z-index: 1; }

@media (min-width: 1025px) {
  /* FILL the screen — kill the inch-wide dead margins */
  .future-view { padding: clamp(16px, 2.2vh, 30px) clamp(18px, 2vw, 40px); }
  .fv-card {
    width: 100%; max-width: min(1860px, 100%);
    max-height: calc(100vh - clamp(30px, 4.4vh, 60px));
    padding: clamp(28px, 3vw, 46px);
  }
  .fv-title { font-size: clamp(30px, 3.2vw, 46px); }
  .fv-sub { font-size: 15px; max-width: 58ch; }

  /* two-plane composition: projection RAIL | interactive PANEL */
  .fv-stage {
    display: grid; grid-template-columns: minmax(320px, 0.82fr) 1.42fr;
    gap: clamp(28px, 3vw, 56px); align-items: start; margin-top: 28px;
  }
  .fv-stage .fv-hero {
    flex-direction: column; text-align: center; gap: 18px; margin: 0;
    position: sticky; top: 4px;
    padding: clamp(22px, 1.7vw, 32px);
    background: color-mix(in srgb, var(--surface) 60%, transparent);
    border: 1px solid var(--border); border-radius: var(--r-xl);
    box-shadow: var(--shadow-md);
  }
  .fv-stage .fv-hero-meta { flex: none; width: 100%; min-width: 0; }
  .fv-stage .fv-beforeafter { justify-content: center; }
  .fv-stage .fv-delta { margin-left: 0; font-size: 18px; padding: 6px 14px; }
  .fv-stage .fv-ba b { font-size: clamp(30px, 2.4vw, 38px); }
  .fv-stage .fv-feel {
    font-size: 14.5px; text-align: left; margin-top: 16px;
    padding-top: 16px; border-top: 1px solid var(--border);
  }
  .fv-stage .fv-cols { margin-top: 0; }
  .fv-stage .fv-panel { min-width: 0; }
  .fv-stage .fv-ring-wrap { width: clamp(204px, 14vw, 246px); height: clamp(204px, 14vw, 246px); }
  .fv-stage .fv-ring-center b { font-size: clamp(52px, 4.2vw, 64px); }

  /* when MyAI is open the card is squeezed into the left lane → collapse to one column */
  body.myai-open .fv-card { padding: clamp(20px, 2vw, 30px); }
  body.myai-open .fv-stage { grid-template-columns: 1fr; }
  body.myai-open .fv-stage .fv-hero { position: static; }
  body.myai-open .fv-conn-pills { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.myai-open .fv-cols { grid-template-columns: 1fr; }
}

@media (max-width: 980px) {
  .fv-conn-pills { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 520px) {
  .fv-conn-pills { grid-template-columns: 1fr; }
  .sm-back span,
  .fv-back span { display: none; }
  .sm-back,
  .fv-back { width: 38px; padding: 0; justify-content: center; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F197 · FUTURE YOU — the $40B "sell without selling" layer on top of F196.
   Earned-reveal staggered entrance · loss+gain gap line · felt-outcome system
   rows · a living (breathing) projected number + ring aura pulse · live
   lever-attribution chips that float onto the ring · a soft, no-pressure path
   for the not-yet-ready. Tokenized both themes; ALL motion is gated behind
   prefers-reduced-motion so reduced-motion users get the full, static screen. */

/* loss + gain gap line — quiet, right under the before/after */
.fv-gap { margin: 12px 0 0; font-size: 13.5px; line-height: 1.55; color: var(--text-2); }
.fv-gap b { color: var(--teal); font-family: var(--font-display); }

/* felt-outcome line under each rising system bar */
.fv-sys-out { display: block; margin-top: 6px; font-size: 12px; line-height: 1.4; color: var(--muted); font-style: italic; }
.future-view .fv-sys--tap:hover .fv-sys-out { color: var(--text-2); }

/* soft, no-pressure reassurance path */
.fv-reassure { text-align: center; margin: 12px 0 0; font-size: 12.5px; color: var(--muted); }
.fv-reassure-link {
  background: none; border: 0; padding: 0; cursor: pointer; font: inherit; font-weight: 700;
  color: var(--teal); text-decoration: underline; text-underline-offset: 2px;
}
.fv-reassure-link:hover { color: var(--blue-2); }

/* live lever attribution — points float up (added) / drift down (removed) over the ring */
.fv-float {
  position: absolute; left: 50%; top: 12%; transform: translateX(-50%);
  font-family: var(--font-display); font-weight: 800; font-size: 20px;
  pointer-events: none; z-index: 4; white-space: nowrap;
}
.fv-float--up { color: var(--teal); animation: fvFloatUp 1.15s var(--ease-out) forwards; }
.fv-float--down { color: var(--muted-2); animation: fvFloatDown 1.15s var(--ease-out) forwards; }
@keyframes fvFloatUp {
  0%   { opacity: 0; transform: translate(-50%, 8px) scale(.8); }
  22%  { opacity: 1; transform: translate(-50%, -4px) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -34px) scale(1); }
}
@keyframes fvFloatDown {
  0%   { opacity: 0; transform: translate(-50%, -8px) scale(.8); }
  22%  { opacity: .9; transform: translate(-50%, 2px) scale(1); }
  100% { opacity: 0; transform: translate(-50%, 30px) scale(.95); }
}

@media (prefers-reduced-motion: no-preference) {
  /* staggered "earned reveal" entrance — each plane rises into place in sequence */
  .future-view .fv-head,
  .future-view .fv-hero,
  .future-view .fv-cols .fv-section,
  .future-view .fv-cta-row,
  .future-view .fv-reassure {
    opacity: 0; transform: translateY(14px);
    transition: opacity .6s var(--ease-lux), transform .6s var(--ease-lux);
  }
  .future-view.show .fv-head { opacity: 1; transform: none; transition-delay: .05s; }
  .future-view.show .fv-hero { opacity: 1; transform: none; transition-delay: .18s; }
  .future-view.show .fv-cols .fv-section:nth-child(1) { opacity: 1; transform: none; transition-delay: .42s; }
  .future-view.show .fv-cols .fv-section:nth-child(2) { opacity: 1; transform: none; transition-delay: .56s; }
  .future-view.show .fv-cta-row { opacity: 1; transform: none; transition-delay: .70s; }
  .future-view.show .fv-reassure { opacity: 1; transform: none; transition-delay: .80s; }

  /* living projected number — a slow breathing glow, like it's already yours */
  .fv-ring-center b { animation: fvBreathe 3.4s var(--ease-lux) infinite; }
  @keyframes fvBreathe {
    0%, 100% { text-shadow: 0 0 0 transparent; }
    50%      { text-shadow: 0 0 18px color-mix(in srgb, var(--teal) 45%, transparent); }
  }
  /* ring aura pulse — a calm, ~breathing cadence behind the ring */
  .fv-ring-wrap::before { animation: fvAura 3.4s var(--ease-lux) infinite; }
  @keyframes fvAura {
    0%, 100% { opacity: .55; transform: scale(1); }
    50%      { opacity: .8;  transform: scale(1.05); }
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F198 · FUTURE YOU — aesthetic elevation ($40B vibe). Layers depth + light on
   top of the F196/F197 structure WITHOUT touching wiring: aurora backdrop,
   gradient hairline card frame, gradient projected number, glowing ring,
   gradient lever tiles, shimmering system bars, a balanced centered composition,
   and a glowing CTA. Tokenized both themes; all motion gated by reduced-motion. */

/* 1 · aurora — teal + blue light pooling behind the card for depth */
.future-view .fv-veil {
  background:
    radial-gradient(50% 42% at 14% 6%,  color-mix(in srgb, var(--teal) 17%, transparent), transparent 60%),
    radial-gradient(48% 42% at 88% 96%, color-mix(in srgb, var(--blue-2) 22%, transparent), transparent 62%),
    radial-gradient(130% 90% at 50% -10%, color-mix(in srgb, var(--blue-2) 18%, transparent), transparent 62%),
    rgba(3, 6, 15, 0.70);
}

/* 2 · richer glass + a gradient hairline frame on the card */
.fv-card {
  box-shadow:
    var(--shadow-lg),
    0 0 90px color-mix(in srgb, var(--blue-2) 10%, transparent),
    inset 0 1px 0 color-mix(in srgb, #fff 10%, transparent);
}
.fv-card::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; z-index: 4; pointer-events: none;
  padding: 1px;
  background: linear-gradient(155deg,
    color-mix(in srgb, var(--teal) 60%, transparent),
    color-mix(in srgb, var(--blue-2) 34%, transparent) 26%,
    transparent 58%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
}

/* 3 · gradient projected number + a glowing ring stroke */
.fv-ring-center b {
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}
.fv-ring-fill { filter: drop-shadow(0 0 6px color-mix(in srgb, var(--teal) 42%, transparent)); }
.fv-ring-track { stroke: color-mix(in srgb, var(--surface-hi) 86%, var(--teal)); }

/* 4 · lever icons become gradient tiles that light up when active */
.fv-lever {
  transition: border-color .2s var(--ease-out), background .2s var(--ease-out),
              transform .2s var(--ease-out), box-shadow .2s var(--ease-out);
}
.fv-lever:hover {
  transform: translateY(-1px);
  border-color: color-mix(in srgb, var(--teal) 40%, transparent);
  box-shadow: var(--shadow-md);
}
.fv-lever-ic {
  width: 38px; height: 38px; border-radius: 11px; display: grid; place-items: center;
  background: color-mix(in srgb, var(--teal) 10%, var(--surface-2));
  border: 1px solid var(--border); color: var(--teal);
  transition: background .2s var(--ease-out), color .2s var(--ease-out), border-color .2s var(--ease-out);
}
.fv-lever.on { box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 22%, transparent), var(--shadow-md); }
.fv-lever.on .fv-lever-ic {
  background: var(--grad-brand); color: var(--ink-on-brand);
  border-color: transparent; box-shadow: var(--glow-teal);
}

/* 5 · system bars — thicker, glowing projected fill */
.fv-sys-track { height: 9px; }
.fv-sys-proj { box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 38%, transparent); }

/* 8 · a glowing, lifting "See my plan" CTA */
#future-view .fv-cta-row .btn-primary {
  box-shadow: var(--glow-teal), 0 10px 30px color-mix(in srgb, var(--blue-2) 26%, transparent);
  transition: transform .2s var(--ease-out), box-shadow .2s var(--ease-out), filter .2s var(--ease-out);
}
#future-view .fv-cta-row .btn-primary:hover { transform: translateY(-2px); filter: brightness(1.03); }

@media (min-width: 1025px) {
  /* 6 · balance the frame — center the interactive plane against the tall rail */
  .fv-stage { align-items: center; }
  .fv-stage .fv-hero { align-self: start; }
  body.myai-open .fv-stage { align-items: stretch; }
}

@media (prefers-reduced-motion: no-preference) {
  /* gradient text can't carry a text-shadow — glow the number via the wrapper */
  .fv-ring-center b { animation: none; }
  .fv-ring-center { animation: fvNumGlow 3.4s var(--ease-lux) infinite; }
  @keyframes fvNumGlow {
    0%, 100% { filter: drop-shadow(0 0 0 transparent); }
    50%      { filter: drop-shadow(0 0 16px color-mix(in srgb, var(--teal) 42%, transparent)); }
  }
  /* 7 · momentum — a slow light sweep across each projected system fill */
  .fv-sys-proj { overflow: hidden; }
  .fv-sys-proj::after {
    content: ""; position: absolute; inset: 0; border-radius: inherit;
    background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 42%, transparent), transparent);
    transform: translateX(-120%); animation: fvShimmer 3s ease-in-out infinite;
  }
  @keyframes fvShimmer { 0% { transform: translateX(-120%); } 55%, 100% { transform: translateX(220%); } }
}

/* ═══ F199 · Future You — earned motion: a projected-trajectory sparkline, system
   bars that visibly react to the lever you flip, and a whisper of light drift on
   the reveal. Everything below is strictly reduced-motion gated. ═══════════════ */
.fv-spark { width: 74px; height: 18px; margin: 5px auto 0; display: block; overflow: visible; }
.fv-spark-area { opacity: .85; }
.fv-spark-line {
  fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
  filter: drop-shadow(0 1px 3px color-mix(in srgb, var(--teal) 32%, transparent));
}

.fv-particles { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: visible; }
.fv-particle {
  position: absolute; bottom: 18%; border-radius: 50%; opacity: 0;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 92%, #fff) 0%, transparent 68%);
}

@media (min-width: 1025px) {
  .fv-stage .fv-spark { width: 92px; height: 22px; }
}

@media (prefers-reduced-motion: no-preference) {
  /* the sparkline eases as it rises with the count on reveal + on every lever flip */
  .fv-spark-line, .fv-spark-area { transition: d .9s var(--ease-lux); }

  /* reactive system bar — pulse the projected fill that actually moved */
  .fv-sys-proj.fv-pulse { animation: fvSysPulse .6s var(--ease-out); }
  @keyframes fvSysPulse {
    0%   { box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 38%, transparent); }
    28%  { box-shadow: 0 0 20px color-mix(in srgb, var(--teal) 72%, transparent); filter: brightness(1.14); }
    100% { box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 38%, transparent); filter: none; }
  }

  /* reveal-only light drift — motes rise once through the ring, then self-remove */
  .fv-particle {
    animation-name: fvDrift; animation-timing-function: var(--ease-out); animation-fill-mode: forwards;
  }
  @keyframes fvDrift {
    0%   { opacity: 0; transform: translate(0, 8px) scale(.5); }
    18%  { opacity: .75; }
    100% { opacity: 0; transform: translate(var(--dx, 0), -92px) scale(1.05); }
  }
}

/* ── Compare check-ins ───────────────────────────────────────────────────── */
.cmp-card { width: min(1400px, 100%); }
.cmp-loading, .cmp-empty, .cmp-nochange { text-align: center; color: var(--text-2); padding: 34px 20px; }
.cmp-loading { display: flex; align-items: center; justify-content: center; gap: 9px; font-weight: 700; }
.cmp-loading svg, .cmp-empty svg, .cmp-nochange svg { width: 22px; height: 22px; color: var(--teal); }
.cmp-empty svg, .cmp-nochange svg { display: block; margin: 0 auto 12px; width: 30px; height: 30px; }
.cmp-empty p, .cmp-nochange p { max-width: 44ch; margin: 0 auto; line-height: 1.55; }

.cmp-arc {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg); padding: 18px; margin-bottom: 22px;
}
.cmp-arc-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
.cmp-stat { text-align: center; }
.cmp-stat b { font-family: var(--font-display); font-size: 26px; font-weight: 800; line-height: 1; display: block; }
.cmp-stat b.pos { color: var(--teal); } .cmp-stat b.neg { color: var(--warning); }
.cmp-stat small { color: var(--muted); font-size: 10.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.cmp-ledger { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 4px; -webkit-overflow-scrolling: touch; }
.cmp-check {
  flex: 0 0 auto; min-width: 128px; text-align: center;
  background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-md);
  padding: 12px; display: flex; flex-direction: column; align-items: center; gap: 4px;
}
.cmp-check.now { border-color: color-mix(in srgb, var(--teal) 45%, transparent); background: var(--teal-soft); }
.cmp-check-date { color: var(--muted); font-size: 11px; font-weight: 700; }
.cmp-check-score { font-family: var(--font-display); font-size: 30px; font-weight: 800; line-height: 1; }
.cmp-check-grade { color: var(--text-2); font-size: 12px; font-weight: 600; }
.cmp-check-d { font-size: 11.5px; font-weight: 800; padding: 2px 9px; border-radius: var(--r-pill); }
.cmp-check-d.pos { color: var(--teal); background: color-mix(in srgb, var(--teal) 12%, transparent); }
.cmp-check-d.neg { color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent); }
.cmp-check-d.flat { color: var(--muted); background: var(--surface-hi); }

.cmp-section-h {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-family: var(--font-display); font-weight: 700; font-size: 16px; margin-bottom: 14px;
}
.cmp-section-h svg { width: 17px; height: 17px; color: var(--teal); }
.cmp-section-h small { color: var(--muted); font-weight: 600; font-size: 12px; }
.cmp-sec { margin-bottom: 20px; }
.cmp-grid { display: grid; gap: 10px; align-items: start;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 480px), 1fr)); }
.cmp-grid .cmp-change { margin-bottom: 0; }
.cmp-sec-h { color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 10px; }
.cmp-change {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-md); padding: 14px 16px; margin-bottom: 10px;
}
.cmp-change-q { font-size: 14px; font-weight: 700; margin-bottom: 11px; line-height: 1.4; }
.cmp-timeline { display: flex; align-items: stretch; gap: 8px; overflow-x: auto; padding-bottom: 4px; -webkit-overflow-scrolling: touch; }
.cmp-point {
  flex: 0 0 auto; min-width: 118px; padding: 9px 11px; border-radius: var(--r-sm);
  background: var(--surface-2); border: 1px solid var(--border);
}
.cmp-point.moved { border-color: color-mix(in srgb, var(--teal) 50%, transparent); background: var(--teal-soft); }
.cmp-point-date { display: block; color: var(--muted); font-size: 10.5px; font-weight: 700; margin-bottom: 2px; }
.cmp-point-val { display: block; font-size: 13px; font-weight: 700; line-height: 1.35; }
.cmp-point.moved .cmp-point-val { color: var(--teal); }
.cmp-point-link { display: inline-flex; align-items: center; color: var(--muted-2); }
.cmp-point-link svg { width: 15px; height: 15px; }
.cmp-change-net {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 11px;
  font-size: 12.5px; font-weight: 700;
}
.cmp-net-from { color: var(--muted); text-decoration: line-through; }
.cmp-net-arrow { display: inline-flex; color: var(--teal); }
.cmp-net-arrow svg { width: 14px; height: 14px; }
.cmp-net-to { color: var(--teal); }

/* ══════════════════════════════════════════════════════════
   F368 · COMPARE PLANS — full-screen personalized program comparison
   Reuses the .future-view overlay spine; adds a 3-column comparison board
   with a live "look inside" rail. Fully tokenized (dual theme), responsive
   at all 3 breakpoints, reduced-motion safe.
   ══════════════════════════════════════════════════════════ */
.pc-card { width: min(1480px, 100%); }
.pc-head { margin-bottom: clamp(14px, 1.8vw, 22px); }
.pc-goals { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.pc-goals-lbl { font-size: 11.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.pc-goal { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: var(--text-2);
  background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent); }
.pc-goal svg { width: 13px; height: 13px; color: var(--teal); }
.pc-goal-pv { background: var(--fill-1); border-color: var(--border); color: var(--muted); }

.pc-layout { display: grid; grid-template-columns: minmax(280px, 340px) 1fr; gap: clamp(14px, 1.6vw, 22px); align-items: start; }

/* ── the "look inside" rail ── */
.pc-rail { position: sticky; top: 0; display: flex; flex-direction: column; gap: 10px;
  padding: 16px; border-radius: var(--r-lg); background: var(--fill-1); border: 1px solid var(--border); }
.pc-rail-head { font-size: 13.5px; color: var(--text); padding-bottom: 10px; border-bottom: 1px dashed var(--border); }
.pc-rail-head b { font-family: var(--font-display); font-size: 15px; }
.pc-rail-head em { font-style: normal; color: var(--teal); font-weight: 700; }
.pc-rail-list { display: flex; flex-direction: column; gap: 8px; max-height: min(46vh, 460px); overflow-y: auto;
  overscroll-behavior: contain; padding-right: 2px; }
.pc-rail-list.pc-in { animation: pcRailIn .28s var(--ease-out); }
@keyframes pcRailIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.pc-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 12px; width: 100%;
  text-align: left; font-family: inherit; cursor: pointer;
  background: var(--surface-2); border: 1px solid var(--border-soft);
  transition: border-color .16s var(--ease-out), transform .16s var(--ease-out), background .16s var(--ease-out); }
.pc-item:hover { border-color: color-mix(in srgb, var(--teal) 50%, transparent); transform: translateX(2px); background: var(--fill-hover); }
.pc-item:focus-visible { outline: 2px solid color-mix(in srgb, var(--teal) 60%, transparent); outline-offset: 2px; }
.pc-item.new { border-color: color-mix(in srgb, var(--teal) 45%, transparent); background: var(--teal-soft); }
.pc-item.new:hover { border-color: color-mix(in srgb, var(--teal) 62%, transparent); }
@media (prefers-reduced-motion: reduce) { .pc-item:hover { transform: none; } }
.pc-item-thumb { width: 36px; height: 36px; flex: none; border-radius: 9px; overflow: hidden; display: grid; place-items: center;
  color: var(--teal); background: linear-gradient(135deg, color-mix(in srgb, var(--teal) 16%, transparent), color-mix(in srgb, var(--blue-2) 16%, transparent)); }
.pc-item-thumb img { width: 100%; height: 100%; object-fit: cover; }
.pc-item-thumb svg { width: 17px; height: 17px; }
.pc-item-tx { flex: 1; min-width: 0; }
.pc-item-tx b { display: block; font-size: 12.5px; font-weight: 700; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-item-tx small { display: block; font-size: 10.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-item-new { flex: none; font-size: 9.5px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase;
  color: var(--teal); padding: 3px 8px; border-radius: 999px; background: var(--teal-soft);
  border: 1px solid color-mix(in srgb, var(--teal) 40%, transparent); }
.pc-item-pr { flex: none; font-size: 11.5px; font-weight: 700; color: var(--teal); }
.pc-rail-shield { display: flex; align-items: flex-start; gap: 8px; margin: 2px 0 0; font-size: 11.5px; line-height: 1.5; color: var(--muted); }
.pc-rail-shield svg { width: 15px; height: 15px; flex: none; color: var(--shield); margin-top: 1px; }
.pc-rail-shield b { color: var(--text-2); }
.pc-rail-alc { justify-content: center; width: 100%; margin-top: 4px; }
/* when a product is opened FROM the compare overlay, its explainer sheet must
   sit ABOVE the overlay (compare = z-1200; the sheet defaults to z-100). */
body.pc-open .ds-backdrop { z-index: 1260; }

/* ── MANAGE MY REGIMEN — full-page prescribed-program popup ────────────────
   Reuses the .future-view spine; the embedded .ov-program drops its card
   chrome (the fv-card IS the surface) so the tier selector + panel render
   exactly as they do inline on the Plan tab. */
.mr-card { width: min(1400px, 100%); }
.mr-title { font-family: var(--font-display); font-size: clamp(21px, 4.6vw, 28px); font-weight: 800; margin: 8px 0 6px; }
.mr-head .mr-goals { justify-content: center; margin-top: 4px; }
.manage-regimen .ov-program.mr-program {
  background: none; border: none; border-radius: 0; padding: 0; box-shadow: none; overflow: visible;
}
.manage-regimen .ov-program.mr-program::before { display: none; }
/* compare stacks ABOVE this overlay (both are z-1200 → later sibling wins, but
   pin it explicitly so the order is never DOM-luck) */
#plan-compare { z-index: 1210; }

/* ── the 3 tier columns ── */
.pc-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(10px, 1.2vw, 16px); align-items: stretch; }
.pc-col { position: relative; display: flex; flex-direction: column; gap: 12px; cursor: pointer;
  padding: clamp(14px, 1.6vw, 20px); border-radius: var(--r-lg);
  background: var(--surface-2); border: 1.5px solid var(--border);
  transition: border-color .2s var(--ease-out), transform .2s var(--ease-out), box-shadow .2s var(--ease-out); }
.pc-col:hover { transform: translateY(-2px); border-color: color-mix(in srgb, var(--teal) 45%, transparent); }
.pc-col:focus-visible { outline: 2px solid color-mix(in srgb, var(--teal) 60%, transparent); outline-offset: 2px; }
.pc-col.sel { border-color: var(--teal); box-shadow: 0 10px 34px -14px color-mix(in srgb, var(--teal) 55%, transparent); }
.pc-col.rec { background: color-mix(in srgb, var(--teal) 4%, var(--surface-2)); }
.pc-rec-badge { position: absolute; top: -11px; left: 50%; transform: translateX(-50%); white-space: nowrap;
  display: inline-flex; align-items: center; gap: 5px; padding: 4px 12px; border-radius: 999px;
  font-size: 10.5px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
  color: var(--ink-on-brand); background: var(--grad-brand);
  box-shadow: 0 6px 16px -6px color-mix(in srgb, var(--teal) 60%, transparent); }
.pc-rec-badge svg { width: 12px; height: 12px; }
.pc-col-head { text-align: center; padding-bottom: 12px; border-bottom: 1px dashed var(--border); }
.pc-col-name { display: block; font-family: var(--font-display); font-weight: 700; font-size: clamp(16px, 1.4vw, 19px); color: var(--text); }
.pc-col-tag { display: block; font-size: 11.5px; color: var(--muted); margin-top: 2px; }
.pc-col-price { margin-top: 9px; }
.pc-col-price b { font-family: var(--font-display); font-weight: 700; font-size: clamp(19px, 1.8vw, 24px);
  background: var(--grad-brand); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.pc-price-up { display: block; margin-top: 3px; font-size: 11px; font-weight: 700; color: var(--teal); }
.pc-price-up.pc-price-start { color: var(--muted); }
.pc-rows { display: flex; flex-direction: column; gap: 10px; flex: 1; }
.pc-row { display: flex; flex-direction: column; gap: 4px; padding: 8px 10px; border-radius: 10px; background: var(--fill-1); }
.pc-row small { font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); }
.pc-val { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text); }
.pc-val b { font-family: var(--font-display); font-weight: 700; font-size: 15px; }
.pc-val em { font-style: normal; font-size: 12px; color: var(--text-2); }
.pc-val.pc-ok svg { width: 14px; height: 14px; color: var(--shield); flex: none; }
.pc-val.pc-dim { color: var(--muted); }
.pc-dim { color: var(--muted); font-style: normal; font-size: 12px; }
.pc-dots { display: inline-flex; gap: 3px; }
.pc-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--fill-2); }
.pc-dot.on { background: var(--teal); }
.pc-fit { display: inline-flex; align-items: center; font-size: 12px; font-weight: 700; }
.pc-fit.ok { color: var(--shield); }
.pc-fit.stretch { color: var(--warning); }
.pc-fit.above { color: var(--danger); }
.pc-adds { display: flex; flex-wrap: wrap; gap: 5px; }
.pc-add { font-size: 10.5px; font-weight: 700; color: var(--teal); padding: 3px 9px; border-radius: 999px;
  background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.pc-add-more { color: var(--muted); background: var(--fill-1); border-color: var(--border); }
.pc-add-base { color: var(--text-2); background: var(--surface-2); border-color: var(--border); }
/* "Everything in <prev tier>" cumulative-inclusion row */
.pc-incl { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 12.5px; color: var(--text); }
.pc-incl svg { width: 14px; height: 14px; color: var(--shield); flex: none; }
.pc-incl em { font-style: normal; font-weight: 700; color: var(--text-2); }
.pc-incl b { font-family: var(--font-display); font-weight: 700; color: var(--teal); }
/* new support areas each step unlocks */
.pc-areas { display: flex; flex-wrap: wrap; gap: 5px; }
.pc-area { font-size: 10.5px; font-weight: 700; color: var(--blue-2); padding: 3px 9px; border-radius: 999px;
  background: color-mix(in srgb, var(--blue-2) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--blue-2) 30%, transparent);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
/* "why it's on your list" — the personalized trigger line */
.pc-why { display: flex; align-items: flex-start; gap: 7px; font-size: 12px; line-height: 1.45; color: var(--text-2); }
.pc-why svg { width: 13px; height: 13px; color: var(--teal); flex: none; margin-top: 2px; }
.pc-why em { font-style: normal; }
.pc-best { font-size: 12px; line-height: 1.45; color: var(--text-2); }
/* shared-inclusions strip — the facts identical across all 3 plans, said ONCE */
.pc-shared { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 8px 18px;
  margin-top: clamp(14px, 1.8vw, 20px); padding: 12px 16px; border-radius: var(--r-md);
  background: var(--fill-1); border: 1px solid var(--border-soft); }
.pc-shared-lbl { font-size: 10.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.pc-shared-item { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--text-2); }
.pc-shared-item svg { width: 14px; height: 14px; color: var(--teal); flex: none; }
.pc-choose { margin-top: 2px; cursor: pointer; font-family: inherit; font-size: 13px; font-weight: 700;
  padding: 11px 14px; border-radius: 999px; color: var(--text);
  background: var(--fill-1); border: 1px solid var(--border);
  transition: transform .18s, border-color .18s, box-shadow .18s, background .18s; }
.pc-choose:hover { transform: translateY(-1px); border-color: color-mix(in srgb, var(--teal) 55%, transparent); }
.pc-choose.primary { color: var(--ink-on-brand); border: none; background: var(--grad-brand);
  box-shadow: 0 4px 14px color-mix(in srgb, var(--teal) 30%, transparent); }
.pc-choose.primary:hover { box-shadow: 0 8px 20px color-mix(in srgb, var(--teal) 40%, transparent); }
.pc-foot { display: flex; align-items: center; justify-content: center; gap: 8px; margin: clamp(14px, 1.8vw, 20px) 0 0;
  font-size: 12.5px; color: var(--muted); text-align: center; }
.pc-foot svg { width: 14px; height: 14px; color: var(--shield); flex: none; }

/* tablet — rail moves above the columns */
@media (max-width: 1024px) {
  .pc-layout { grid-template-columns: 1fr; }
  .pc-rail { position: static; order: 2; }
  .pc-cols { order: 1; }
  .pc-rail-list { max-height: 300px; }
}
/* mobile — columns stack, recommended first by DOM highlight (not reorder) */
@media (max-width: 640px) {
  .pc-cols { grid-template-columns: 1fr; gap: 18px; }
  .pc-col { padding: 16px 14px; }
  .pc-rec-badge { top: -10px; }
  .pc-goals { gap: 6px; }
  .pc-foot { font-size: 11.5px; }
  .pc-shared { flex-direction: column; align-items: flex-start; gap: 8px; }
}
@media (prefers-reduced-motion: reduce) {
  .pc-col, .pc-choose, .ov-tp-compare { transition: none; }
  .pc-col:hover, .pc-choose:hover, .ov-tp-compare:hover { transform: none; }
  .pc-rail-list.pc-in { animation: none; }
}

/* ── responsive ── */
@media (max-width: 640px) {
  .ovr-controls { flex-direction: column; align-items: stretch; }
  .ovr-seg { width: 100%; }
  .ovr-seg-btn { flex: 1; justify-content: center; }
  .ovr-acts { justify-content: center; }
  .ovr-act { flex: 1; justify-content: center; }
  .ovr-at-records { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ovr-at-now-row b { font-size: 40px; }
  .fv-card, .cmp-card { padding: 22px 18px; border-radius: var(--r-lg); }
  .fv-hero { gap: 16px; }
  .fv-ring-wrap { width: 148px; height: 148px; }
  .fv-cta-row { flex-direction: column; }
  .cmp-arc-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ── reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .future-view, .fv-card, .fv-ring-fill, .fv-sys-proj { transition: none; }
  .fv-card { transform: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F174 · À LA CARTE SEARCH + FILTER TOGGLES + LAYERED RESULTS POPUP
   A search bar sits between the running total (left) and the cart CTA (right).
   Focusing / typing opens a popup ABOVE the à la carte modal (z 1350) with
   sort + filter toggles. Shield-BLOCKED products carry their giant overlay
   through search (they reuse the same .alc-item card markup). Dual-theme,
   responsive (mobile bottom-sheet → 3-across desktop), reduced-motion safe,
   and sized to use the full real estate so results never truncate.
   Lives at true EOF so equal-specificity base rules lose the cascade.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── footer search bar (grows into the middle of .alc-foot) ── */
.alc-search {
  flex: 1 1 260px; min-width: 0; position: relative;
  display: flex; align-items: center; gap: 8px;
  padding: 0 12px; height: 44px; border-radius: 999px;
  background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.16));
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}
.alc-search:focus-within {
  border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--teal) 16%, transparent);
  background: color-mix(in srgb, var(--teal) 6%, transparent);
}
.alc-search-ic { display: inline-flex; color: var(--teal); cursor: pointer; flex: none; }
.alc-search-ic svg { width: 17px; height: 17px; }
.alc-search-input {
  flex: 1; min-width: 0; border: 0; outline: 0; background: transparent;
  font-family: inherit; font-size: 13.5px; color: var(--text);
}
.alc-search-input::placeholder { color: var(--muted); }
.alc-search-input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.alc-search-kbd {
  flex: none; font-size: 11px; color: var(--muted); font-family: inherit; line-height: 1;
  padding: 3px 7px; border-radius: 7px;
  border: 1px solid var(--border, rgba(20,224,203,.16));
  background: var(--fill-1, rgba(255,255,255,.03));
}

/* ── the layered search popup — floats above the à la carte modal ── */
.alc-sp {
  position: fixed; inset: 0; z-index: 1350;
  display: flex; align-items: center; justify-content: center;
  padding: clamp(12px, 3vw, 34px); opacity: 0; transition: opacity .2s ease;
}
.alc-sp.show { opacity: 1; }
.alc-sp-veil {
  position: absolute; inset: 0;
  background: color-mix(in srgb, var(--bg, #03060f) 62%, transparent);
  -webkit-backdrop-filter: blur(12px) saturate(1.1); backdrop-filter: blur(12px) saturate(1.1);
}
.alc-sp-card {
  position: relative; width: min(1080px, 100%); max-height: 92dvh;
  display: flex; flex-direction: column; overflow: hidden;
  border-radius: 24px;
  background: var(--surface, rgba(8,15,35,.98));
  border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent);
  box-shadow: 0 40px 110px rgba(0,0,0,.6);
  transform: translateY(16px) scale(.985); transition: transform .28s cubic-bezier(.16,1,.3,1);
}
.alc-sp.show .alc-sp-card { transform: none; }

.alc-sp-head {
  display: flex; align-items: center; gap: 12px;
  padding: 16px 18px; border-bottom: 1px solid var(--border, rgba(20,224,203,.12));
}
.alc-sp-search {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 10px;
  padding: 0 14px; height: 48px; border-radius: 14px;
  background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.16));
  transition: border-color .18s ease, box-shadow .18s ease;
}
.alc-sp-search:focus-within {
  border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--teal) 15%, transparent);
}
.alc-sp-ic { display: inline-flex; color: var(--teal); flex: none; }
.alc-sp-ic svg { width: 19px; height: 19px; }
.alc-sp-input {
  flex: 1; min-width: 0; border: 0; outline: 0; background: transparent;
  font-family: inherit; font-size: 15px; color: var(--text);
}
.alc-sp-input::placeholder { color: var(--muted); }
.alc-sp-input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.alc-sp-rescount { flex: none; font-size: 12px; font-weight: 600; color: var(--muted); white-space: nowrap; }
.alc-sp-close {
  flex: none; width: 40px; height: 40px; border-radius: 11px; cursor: pointer;
  display: grid; place-items: center; color: var(--muted);
  background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.12));
  transition: color .18s ease, background .18s ease;
}
.alc-sp-close:hover { color: var(--text); background: var(--fill-hover, rgba(255,255,255,.08)); }
.alc-sp-close svg { width: 16px; height: 16px; }

/* ── toggle toolbar: sort segment + filter chips + category select ── */
.alc-sp-tools {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 12px 18px; border-bottom: 1px solid var(--border, rgba(20,224,203,.1));
}
.alc-seg {
  display: inline-flex; padding: 3px; gap: 2px; border-radius: 12px;
  background: var(--fill-1, rgba(255,255,255,.05));
  border: 1px solid var(--border, rgba(20,224,203,.12));
}
.alc-seg-btn {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  padding: 7px 13px; border-radius: 9px; border: 0; background: transparent;
  font-family: inherit; font-size: 12.5px; font-weight: 600; color: var(--muted);
  transition: color .16s ease, background .16s ease;
}
.alc-seg-btn:hover { color: var(--text); }
.alc-seg-btn.on {
  color: var(--text); background: color-mix(in srgb, var(--teal) 16%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--teal) 40%, transparent);
}
.alc-chips { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.alc-chip {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  padding: 7px 13px; border-radius: 999px;
  font-family: inherit; font-size: 12.5px; font-weight: 600; color: var(--muted);
  background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  transition: color .16s ease, background .16s ease, border-color .16s ease;
}
.alc-chip:hover { color: var(--text); border-color: color-mix(in srgb, var(--teal) 32%, transparent); }
.alc-chip svg { width: 12px; height: 12px; }
.alc-chip.on {
  color: var(--teal); background: color-mix(in srgb, var(--teal) 12%, transparent);
  border-color: color-mix(in srgb, var(--teal) 48%, transparent);
}
.alc-sp-cat {
  margin-left: auto; cursor: pointer; font-family: inherit; font-size: 12.5px; font-weight: 600;
  color: var(--text); padding: 8px 12px; border-radius: 10px;
  background: var(--fill-1, rgba(255,255,255,.04));
  border: 1px solid var(--border, rgba(20,224,203,.14));
}

/* ── results body ── */
.alc-sp-body { flex: 1; overflow-y: auto; padding: 16px 18px; }
.alc-sp-body .alc-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.alc-sp-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
  text-align: center; padding: 52px 20px; color: var(--muted);
}
.alc-sp-empty svg { width: 34px; height: 34px; color: color-mix(in srgb, var(--teal) 60%, var(--muted)); }
.alc-sp-empty b { color: var(--text); font-size: 15px; }
.alc-sp-empty span { font-size: 12.5px; max-width: 340px; line-height: 1.5; }

/* ── mini footer (mirrors the running total, "Done" returns to the plan) ── */
.alc-sp-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  padding: 14px 18px; border-top: 1px solid var(--border, rgba(20,224,203,.12));
  background: var(--fill-1, rgba(255,255,255,.02));
}
.alc-sp-mini { display: flex; align-items: baseline; gap: 10px; }
.alc-sp-mini b { font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 20px; font-weight: 700; color: var(--text); }
.alc-sp-mini b span { font-size: 12px; color: var(--muted); font-weight: 500; }
.alc-sp-foot .btn { text-decoration: none; }

/* ── wide screens — take the room, 3-across, never truncate ── */
@media (min-width: 900px) {
  .alc-sp-card { width: min(1180px, calc(100vw - 96px)); max-height: calc(100dvh - 64px); }
  .alc-sp-body .alc-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ── light theme ── */
[data-theme="light"] .alc-sp-veil { background: color-mix(in srgb, #0a1730 28%, transparent); }
[data-theme="light"] .alc-sp-card {
  background: #fff; border-color: color-mix(in srgb, var(--blue-2) 22%, transparent);
  box-shadow: 0 40px 100px rgba(16,42,98,.22);
}
[data-theme="light"] .alc-search,
[data-theme="light"] .alc-sp-search,
[data-theme="light"] .alc-seg,
[data-theme="light"] .alc-chip,
[data-theme="light"] .alc-sp-cat,
[data-theme="light"] .alc-search-kbd,
[data-theme="light"] .alc-sp-close { background: #f4f7fc; }

/* ── mobile (bottom-sheet) ── */
@media (max-width: 640px) {
  .alc-search { width: 100%; flex-basis: 100%; }
  .alc-search-kbd { display: none; }
  .alc-sp { padding: 0; align-items: flex-end; }
  .alc-sp-card { width: 100%; max-height: 94dvh; border-radius: 20px 20px 0 0; }
  .alc-sp-tools { gap: 8px; }
  .alc-sp-cat { margin-left: 0; width: 100%; }
  .alc-sp-body .alc-grid { grid-template-columns: 1fr; }
  .alc-sp-foot .btn { flex: 1; justify-content: center; }
}

/* ── reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .alc-sp, .alc-sp-card, .alc-search, .alc-sp-search, .alc-chip, .alc-seg-btn { transition: none; }
  .alc-sp-card { transform: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F177 · PRIVATE PORTAL LINK CARD (Care tab)
   A calm, premium panel for the permanent no-login access link. Dual-theme
   (tokens only), responsive, reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */
.ov-portal-card { display: flex; flex-direction: column; gap: 14px; }
.ov-portal-head { display: flex; gap: 14px; align-items: flex-start; }
.ov-portal-ic {
  flex: 0 0 auto; width: 42px; height: 42px; border-radius: 12px;
  display: grid; place-items: center;
  background: color-mix(in srgb, var(--teal) 16%, transparent);
  color: var(--teal); border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
}
.ov-portal-ic svg { width: 22px; height: 22px; }
.ov-portal-head-tx h3 { margin: 0 0 3px; font-size: 17px; font-weight: 700; color: var(--text); }
.ov-portal-head-tx p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text-2); }

.ov-portal-body { min-height: 44px; }
.ov-portal-loading { font-size: 13px; color: var(--muted); padding: 6px 2px; }

.ov-portal-empty { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.ov-portal-empty p { margin: 0; font-size: 13.5px; color: var(--text-2); }

.ov-portal-linkrow {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  background: var(--fill-1); border: 1px solid var(--border);
  border-radius: 12px; padding: 10px 12px; margin-bottom: 12px;
}
.ov-portal-url {
  flex: 1 1 auto; min-width: 0; font-family: ui-monospace, 'SF Mono', Menlo, monospace;
  font-size: 12.5px; color: var(--text); word-break: break-all;
  letter-spacing: .01em;
}
.ov-portal-url:not(.is-shown) { color: var(--text-2); letter-spacing: .06em; }
.ov-portal-mini {
  flex: 0 0 auto; background: transparent; border: 1px solid var(--border);
  color: var(--text-2); font-size: 12px; font-weight: 600; padding: 5px 11px;
  border-radius: 999px; cursor: pointer; transition: border-color .18s, color .18s;
}
.ov-portal-mini:hover { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 45%, transparent); }

.ov-portal-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.ov-portal-actions .btn { font-size: 13.5px; }
.ov-portal-quiet {
  background: transparent; border: none; color: var(--muted);
  font-size: 12.5px; font-weight: 600; cursor: pointer; padding: 6px 4px;
  text-decoration: underline; text-underline-offset: 3px; transition: color .18s;
}
.ov-portal-quiet:hover { color: var(--danger); }

.ov-portal-note {
  display: flex; gap: 8px; align-items: flex-start; margin: 2px 0 0;
  font-size: 12.5px; line-height: 1.5; color: var(--text-2);
  padding-top: 12px; border-top: 1px solid var(--border);
}
.ov-portal-note svg { flex: 0 0 auto; width: 16px; height: 16px; color: var(--teal); margin-top: 1px; }

@media (max-width: 640px) {
  .ov-portal-actions { width: 100%; }
  .ov-portal-actions .btn { flex: 1 1 auto; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-portal-mini, .ov-portal-quiet { transition: none; }
}

/* ═══ F180 · GENUINE FIRST-TIMER LOCK ZONE ═══════════════════════════════════
   A brand-new visitor's entire lower portal (trajectory → bottom) is sealed
   behind a blurred veil + a single "Begin my assessment" invitation, so the
   only obvious way forward is to start. Members are never affected. */
.ov-lockzone { position: relative; margin-top: clamp(10px, 2vw, 20px); }
.ov-lockzone-content {
  filter: blur(6px) saturate(.85);
  opacity: .42;
  pointer-events: none;
  user-select: none;
  -webkit-user-select: none;
  transform: scale(.995);
  transform-origin: top center;
}
.ov-lockzone-veil {
  position: absolute; inset: 0; z-index: 6;
  display: flex; justify-content: center; align-items: flex-start;
  padding: clamp(16px, 4vw, 32px);
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--bg) 30%, transparent) 0%,
    color-mix(in srgb, var(--bg) 62%, transparent) 40%,
    color-mix(in srgb, var(--bg) 88%, transparent) 100%);
}
.ov-lockzone-card {
  position: sticky; top: clamp(90px, 18vh, 180px);
  margin-top: clamp(40px, 9vh, 110px);
  width: min(560px, 100%);
  display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: 12px;
  padding: clamp(28px, 4vw, 44px) clamp(22px, 4vw, 40px);
  border-radius: 26px;
  background: var(--surface, rgba(8,15,35,.92));
  border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent);
  box-shadow: 0 30px 90px rgba(0,0,0,.42), 0 0 0 1px color-mix(in srgb, var(--blue-2) 10%, transparent);
}
.ov-lockzone-badge {
  width: 62px; height: 62px; border-radius: 20px; flex: none;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 55%, var(--violet));
  box-shadow: 0 12px 36px color-mix(in srgb, var(--blue-2) 42%, transparent);
  animation: ovLockPulse 3.4s ease-in-out infinite;
}
.ov-lockzone-badge svg { width: 28px; height: 28px; }
@keyframes ovLockPulse { 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); } }
.ov-lockzone-eyebrow { color: var(--teal); }
.ov-lockzone-eyebrow svg { width: 13px; height: 13px; }
.ov-lockzone-h {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(20px, 3.4vw, 27px); font-weight: 700; color: var(--text);
  line-height: 1.22; margin: 0; max-width: 22ch;
}
.ov-lockzone-p { color: var(--muted); font-size: 13.5px; line-height: 1.55; margin: 0; max-width: 42ch; }
.ov-lockzone-card .btn { margin-top: 4px; min-width: 250px; }
.ov-lockzone-note {
  display: inline-flex; align-items: center; gap: 6px;
  color: var(--muted); font-size: 11.5px; line-height: 1.4;
}
.ov-lockzone-note svg { width: 12px; height: 12px; color: var(--teal); }

[data-theme="light"] .ov-lockzone-card {
  background: #fff;
  border-color: color-mix(in srgb, var(--blue-2) 22%, transparent);
  box-shadow: 0 24px 70px rgba(20,40,90,.16);
}

@media (max-width: 640px) {
  .ov-lockzone-card { width: 100%; }
  .ov-lockzone-card .btn { width: 100%; min-width: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-lockzone-badge { animation: none; }
}

/* F180 · a compact lock for a single sealed card (e.g. Health Trend) — a light
   blur on the content with a small "Unlocks with your first check-in" chip; kept
   subtle so it never reads like a big frosted panel crowding the castle. */
.ov-lockmini { position: relative; display: inline-flex; align-self: flex-start; border-radius: 14px; }
.ov-lockmini-content {
  filter: blur(3px) saturate(.9);
  opacity: .5;
  pointer-events: none;
  user-select: none;
  -webkit-user-select: none;
}
.ov-lockmini-veil {
  position: absolute; inset: 0; z-index: 4;
  display: flex; align-items: center; justify-content: center;
  padding: 6px;
  border-radius: inherit;
}
.ov-lockmini-chip {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 7px 13px; border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 600; font-size: 12px; color: var(--text);
  background: var(--surface, rgba(8,15,35,.92));
  border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  box-shadow: 0 8px 22px rgba(0,0,0,.24);
}
.ov-lockmini-chip svg { width: 13px; height: 13px; color: var(--teal); }
[data-theme="light"] .ov-lockmini-chip {
  background: #fff;
  border-color: color-mix(in srgb, var(--blue-2) 24%, transparent);
  box-shadow: 0 8px 24px rgba(20,40,90,.14);
}
/* ═══════════════════════════════════════════════════════════════════════════
   F200 · "WELCOME TO YOUR iD ASSESSMENT" — the $40B primer page
   Full-screen on every device; renders after the identity gate, before Q1.
   Dual-theme (OS-following), responsive (mobile ≤640 / tablet / desktop),
   reduced-motion safe. All colour via tokens — no hardcoded hex.
   ══════════════════════════════════════════════════════════════════════════ */
/* Break the primer out of the narrow question column — this moment owns the
   full width of the device. */
.q-wrap.wi-wrap { max-width: min(1180px, 96vw); }
.welcome-intro {
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(24px, 4vw, 44px); width: 100%; text-align: center;
  padding-top: clamp(4px, 1.6vw, 12px);
}

/* ── HERO ── */
.wi-hero {
  display: flex; flex-direction: column; align-items: center;
  gap: clamp(14px, 2vw, 20px); width: 100%;
}
.wi-orb {
  position: relative; width: clamp(112px, 22vw, 168px); height: clamp(112px, 22vw, 168px);
  display: grid; place-items: center; isolation: isolate; margin-bottom: 2px;
}
.wi-orb-glow {
  position: absolute; inset: -22%; border-radius: 50%; z-index: -1;
  background: radial-gradient(circle,
    color-mix(in srgb, var(--blue-2) 30%, transparent) 0%,
    color-mix(in srgb, var(--teal) 16%, transparent) 40%, transparent 72%);
  filter: blur(6px); animation: wiGlow 5s ease-in-out infinite;
}
@keyframes wiGlow { 0%,100% { opacity: .62; transform: scale(.96); } 50% { opacity: 1; transform: scale(1.07); } }
.wi-orb-ring {
  position: absolute; border-radius: 50%; pointer-events: none;
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent);
}
.wi-orb-ring-1 { inset: 2%; }
.wi-orb-ring-2 { inset: -14%; border-color: color-mix(in srgb, var(--blue-2) 24%, transparent); }
.wi-orb-ring-dash {
  inset: -14%; border: 1px dashed color-mix(in srgb, var(--violet) 30%, transparent);
  animation: wiSpin 24s linear infinite;
}
@keyframes wiSpin { to { transform: rotate(360deg); } }
.wi-orb-core {
  position: relative; width: 60%; height: 60%; border-radius: 50%;
  display: grid; place-items: center; color: var(--teal);
  background: radial-gradient(circle at 34% 28%,
    color-mix(in srgb, var(--surface) 92%, #fff 8%),
    color-mix(in srgb, var(--surface) 96%, transparent));
  border: 1px solid color-mix(in srgb, var(--teal) 22%, transparent);
  box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 30%, transparent),
    0 16px 40px color-mix(in srgb, var(--blue-2) 24%, transparent);
}
.wi-orb-core svg { width: 52%; height: 52%;
  filter: drop-shadow(0 4px 12px color-mix(in srgb, var(--teal) 40%, transparent)); }

.wi-eyebrow {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 6px 14px; border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 600; font-size: 12px; letter-spacing: .06em; text-transform: uppercase;
  color: var(--teal);
  background: color-mix(in srgb, var(--teal) 8%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent);
}
.wi-eyebrow svg { width: 13px; height: 13px; }
.wi-title {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; letter-spacing: -.02em; line-height: 1.05; color: var(--text);
  font-size: clamp(30px, 6vw, 60px); margin: 0; max-width: 16ch;
}
.wi-grad {
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 55%, var(--violet));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.wi-lede {
  color: var(--text-2); font-size: clamp(15px, 2.3vw, 19px); line-height: 1.6;
  margin: 0; max-width: 58ch;
}

/* ── METRICS (the science, in numbers) ── */
.wi-metrics {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(10px, 1.6vw, 16px);
  width: 100%;
}
.wi-metric {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  padding: clamp(18px, 2.6vw, 28px) clamp(12px, 1.8vw, 20px);
  border-radius: var(--r-lg, 16px); text-align: center;
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  transition: transform .22s var(--ease-out, ease), border-color .22s, box-shadow .22s;
}
.wi-metric:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--teal) 40%, transparent);
  box-shadow: 0 14px 34px color-mix(in srgb, var(--blue-2) 14%, transparent);
}
.wi-metric-ic {
  width: clamp(38px, 4vw, 46px); height: clamp(38px, 4vw, 46px); border-radius: 13px;
  display: grid; place-items: center; margin-bottom: 6px; color: #fff;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow: 0 8px 20px color-mix(in srgb, var(--blue-2) 26%, transparent);
}
.wi-metric-ic svg { width: 55%; height: 55%; }
.wi-metric-n {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: clamp(26px, 4.6vw, 40px); line-height: 1; letter-spacing: -.02em;
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.wi-metric-lb { color: var(--text); font-size: clamp(13px, 1.3vw, 15px); font-weight: 600; letter-spacing: -.01em; }
.wi-metric-sub { color: var(--muted); font-size: clamp(11.5px, 1.1vw, 13px); line-height: 1.4; }

/* ── PILLARS (what you get) ── */
.wi-pillars {
  display: grid; grid-template-columns: 1fr; gap: clamp(10px, 1.6vw, 14px); width: 100%;
}
.wi-pillar {
  display: flex; align-items: flex-start; gap: 15px; text-align: left;
  padding: clamp(16px, 2.2vw, 24px) clamp(16px, 2vw, 22px); border-radius: var(--r-lg, 16px);
  background: var(--fill-1, rgba(255,255,255,.03));
  border: 1px solid var(--border, rgba(20,224,203,.14));
  transition: transform .22s var(--ease-out, ease), border-color .22s, box-shadow .22s;
}
.wi-pillar:hover {
  transform: translateY(-2px);
  border-color: color-mix(in srgb, var(--teal) 38%, transparent);
  box-shadow: 0 12px 30px color-mix(in srgb, var(--blue-2) 12%, transparent);
}
.wi-pillar-ic {
  width: clamp(42px, 4vw, 50px); height: clamp(42px, 4vw, 50px); border-radius: 13px; flex: none;
  display: grid; place-items: center; color: #fff;
  background: linear-gradient(135deg, var(--blue-2), var(--violet));
  box-shadow: 0 8px 20px color-mix(in srgb, var(--violet) 22%, transparent);
}
.wi-pillar-ic svg { width: 50%; height: 50%; }
.wi-pillar-tx { flex: 1; }
.wi-pillar-tx b { display: block; color: var(--text); font-size: clamp(15px, 1.4vw, 17px); font-weight: 700; margin-bottom: 5px; letter-spacing: -.01em; }
.wi-pillar-tx small { color: var(--muted); font-size: clamp(13px, 1.2vw, 14.5px); line-height: 1.5; }

/* ── TRUST bar + line ── */
.wi-trust { display: flex; flex-direction: column; align-items: center; gap: 12px; width: 100%; max-width: 560px; }
.wi-trust-bar {
  width: 100%; height: 4px; border-radius: 999px; overflow: hidden;
  background: var(--fill-1, rgba(255,255,255,.05));
}
.wi-tb-fill {
  display: block; height: 100%; width: 100%;
  background: linear-gradient(90deg, var(--teal), var(--blue-2) 55%, var(--violet));
  transform-origin: left; animation: wiFill 1.4s var(--ease-out, cubic-bezier(.16,1,.3,1)) both;
}
@keyframes wiFill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.wi-trust-tx {
  display: inline-flex; align-items: center; gap: 8px; margin: 0;
  color: var(--muted-2, var(--muted)); font-size: clamp(13px, 1.2vw, 15px);
}
.wi-trust-tx svg { width: 15px; height: 15px; flex: none; color: var(--teal); }

/* ── CTA row ── */
.wi-cta-row { display: flex; flex-direction: column; align-items: center; gap: 12px; width: 100%; }
.wi-cta {
  min-width: min(320px, 100%);
  font-size: clamp(15.5px, 1.5vw, 18px);
  padding: clamp(14px, 1.6vw, 18px) clamp(28px, 3vw, 40px);
}
.wi-cta svg { width: 18px; height: 18px; }
.wi-note { display: inline-flex; align-items: center; gap: 8px; color: var(--muted); font-size: 13px; margin: 0; }
.wi-note svg { width: 14px; height: 14px; flex: none; color: var(--teal); }

/* ── TABLET+ : metrics 4-across ── */
@media (min-width: 641px) {
  .wi-metrics { grid-template-columns: repeat(4, 1fr); }
  .wi-pillars { grid-template-columns: repeat(2, 1fr); }
}

/* ── DESKTOP : roomier, CTA row inline ── */
@media (min-width: 960px) {
  .wi-cta-row { flex-direction: row; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
  .wi-orb-glow, .wi-orb-ring-dash { animation: none; }
  .wi-tb-fill { animation: none; }
  .wi-metric, .wi-pillar { transition: none; }
}

/* ── LIGHT THEME tuning ── */
[data-theme="light"] .wi-metric,
[data-theme="light"] .wi-pillar {
  background: #fff;
  border-color: color-mix(in srgb, var(--blue-2) 16%, transparent);
  box-shadow: 0 6px 20px rgba(20,40,90,.06);
}
[data-theme="light"] .wi-orb-core {
  background: radial-gradient(circle at 34% 28%, #fff, color-mix(in srgb, #fff 90%, var(--teal)));
}
[data-theme="light"] .wi-trust-bar { background: color-mix(in srgb, var(--blue-2) 10%, transparent); }

/* ═══════════════════════════════════════════════════════════════════════════
   F201 · GOALS PRIORITY SCREEN
   Full-screen premium goals step with top-3 selection + drag ranking.
   ══════════════════════════════════════════════════════════════════════════ */
.q-wrap:has(.goals-priority) {
  max-width: min(1560px, 96vw);
  min-height: clamp(560px, calc(100dvh - 190px), 860px);
}

/* Keep this step inside the viewport and avoid a hidden global footer button.
   The goals panel has its own in-card Back/Continue controls. */
#screen-question:has(.goals-priority) .flow-main {
  justify-content: flex-start;
}

#screen-question:has(.goals-priority) > div:last-child {
  display: none !important;
}

/* F201 cleanup: this step has its own bespoke hero inside .gp-head; hide the
   default question chrome (domain + headline + subtext) to avoid duplication. */
.q-wrap:has(.goals-priority) > .q-domain,
.q-wrap:has(.goals-priority) > .q-headline,
.q-wrap:has(.goals-priority) > .q-subtext {
  display: none;
}

.goals-priority {
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding-top: clamp(8px, 1.8vw, 20px);
}

.gp-wrap {
  width: 100%;
  display: grid;
  gap: clamp(18px, 2.6vw, 30px);
}

.gp-head {
  text-align: center;
  display: grid;
  gap: 8px;
  padding-block: clamp(6px, 1.1vw, 12px) clamp(8px, 1.6vw, 18px);
}

.gp-title {
  margin: 0;
  color: var(--text);
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(26px, 4.2vw, 44px);
  line-height: 1.06;
  letter-spacing: -.02em;
}

.gp-sub {
  margin: 0;
  color: var(--text-2);
  font-size: clamp(13.5px, 1.6vw, 16px);
  line-height: 1.5;
}

.gp-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(14px, 2vw, 24px);
  align-items: start;
}

.gp-select {
  min-width: 0;
}

/* ── Goal cards — icon-over-title tiles (screenshot-2 layout) ────────────── */
.gp-grid {
  display: grid;
  gap: clamp(10px, 1.2vw, 14px);
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.gp-opt {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 9px;
  min-height: 118px;
  border-radius: var(--r-xl, 18px);
  padding: clamp(14px, 1.8vw, 20px) 14px;
  color: var(--text);
  border: 1px solid var(--border);
  background:
    linear-gradient(180deg,
      color-mix(in srgb, #fff 4%, transparent),
      transparent 46%),
    var(--fill-1, rgba(255,255,255,.03));
  overflow: hidden;
  animation: gpCardIn .5s var(--ease-out) both;
  animation-delay: calc(var(--i, 0) * 34ms);
  transition: transform .22s var(--ease-out), border-color .22s, box-shadow .22s, background .22s;
}

@keyframes gpCardIn {
  from { opacity: 0; transform: translateY(10px) scale(.985); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

.gp-opt:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--teal) 44%, transparent);
  box-shadow:
    0 16px 34px color-mix(in srgb, var(--blue-2) 18%, transparent),
    0 4px 10px color-mix(in srgb, #000 10%, transparent);
}

.gp-opt[data-accent="violet"]:hover {
  border-color: color-mix(in srgb, var(--violet) 44%, transparent);
  box-shadow:
    0 16px 34px color-mix(in srgb, var(--violet) 16%, transparent),
    0 4px 10px color-mix(in srgb, #000 10%, transparent);
}

.gp-opt:hover .gp-opt-ic {
  transform: translateY(-2px) scale(1.05);
}

.gp-opt.selected {
  border-color: color-mix(in srgb, var(--teal) 58%, transparent);
  background:
    radial-gradient(120% 90% at 50% -20%,
      color-mix(in srgb, var(--teal) 18%, transparent),
      transparent 60%),
    linear-gradient(150deg,
      color-mix(in srgb, var(--teal) 13%, var(--surface)),
      color-mix(in srgb, var(--blue-2) 11%, var(--surface)));
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 40%, transparent),
    0 16px 34px color-mix(in srgb, var(--teal) 20%, transparent);
}

.gp-opt-ic {
  width: clamp(44px, 3.4vw, 52px);
  height: clamp(44px, 3.4vw, 52px);
  border-radius: 14px;
  flex: none;
  display: grid;
  place-items: center;
  color: var(--ink-on-brand);
  background: linear-gradient(135deg, var(--teal), var(--blue-2));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.34),
    0 10px 22px color-mix(in srgb, var(--teal) 26%, transparent);
  transition: transform .22s var(--ease-out);
}

.gp-opt[data-accent="blue"] .gp-opt-ic {
  background: linear-gradient(135deg, var(--blue-2), var(--blue, #2f6bff));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.34),
    0 10px 22px color-mix(in srgb, var(--blue-2) 28%, transparent);
}

.gp-opt[data-accent="violet"] .gp-opt-ic {
  background: linear-gradient(135deg, var(--blue-2), var(--violet));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.34),
    0 10px 22px color-mix(in srgb, var(--violet) 26%, transparent);
}

.gp-opt-ic svg { width: clamp(21px, 1.7vw, 24px); height: clamp(21px, 1.7vw, 24px); }

.gp-opt-lb {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(14.5px, 1.3vw, 16px);
  font-weight: 700;
  letter-spacing: -.01em;
}

.gp-opt-desc {
  color: var(--text-2);
  font-size: 12px;
  line-height: 1.4;
  max-width: 22ch;
}

/* Rank badge (top-left) — appears only when the card is picked */
.gp-opt-rank {
  position: absolute;
  top: 10px;
  left: 10px;
  width: 24px;
  height: 24px;
  border-radius: 999px;
  display: grid;
  place-items: center;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 12px;
  font-weight: 700;
  color: var(--ink-on-brand);
  background: var(--grad-brand);
  box-shadow: 0 6px 14px color-mix(in srgb, var(--teal) 32%, transparent);
}

/* Check tick (top-right) — appears only when the card is picked */
.gp-opt-check {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 22px;
  height: 22px;
  border-radius: 999px;
  display: grid;
  place-items: center;
  color: var(--ink-on-brand);
  background: var(--grad-brand);
  opacity: 0;
  transform: scale(.6);
  transition: opacity .18s, transform .18s var(--ease-out);
}

.gp-opt-check svg { width: 13px; height: 13px; }

.gp-opt.selected .gp-opt-check {
  opacity: 1;
  transform: scale(1);
}

/* ── Priorities panel — blue gradient card (screenshot-2 right rail) ─────── */
.gp-priority {
  position: relative;
  border-radius: var(--r-2xl, 22px);
  padding: clamp(18px, 2.2vw, 26px);
  display: grid;
  gap: 14px;
  color: #fff;
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.14);
  background:
    radial-gradient(130% 80% at 82% -12%, rgba(122,190,255,.42), transparent 56%),
    radial-gradient(110% 90% at -8% 108%, rgba(20,20,80,.5), transparent 58%),
    linear-gradient(160deg, #2f6bff 0%, #1e49c8 58%, #16308f 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.24),
    0 24px 60px color-mix(in srgb, var(--blue-2) 34%, transparent),
    0 6px 18px rgba(10,20,60,.22);
}

/* Quiet diagonal sheen so the panel reads as glass, not flat paint. */
.gp-priority::before {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(115deg, transparent 42%, rgba(255,255,255,.07) 50%, transparent 58%);
}

.gp-priority > * { position: relative; }

.gp-pri-head {
  display: grid;
  gap: 3px;
}

.gp-pri-title {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.gp-pri-title svg { width: 18px; height: 18px; color: #fff; }

.gp-pri-title b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(18px, 2.1vw, 22px);
  color: #fff;
}

.gp-pri-head small {
  color: rgba(255,255,255,.72);
  font-size: 12.5px;
}

.gp-pri-help-mobile { display: none; }

.gp-pri-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 10px;
}

.gp-pri-list:empty { display: none; }

.gp-pri-slot {
  border-radius: 14px;
  display: flex;
  align-items: center;
}

.gp-pri-slot.over .gp-pri-item {
  box-shadow: 0 0 0 2px rgba(255,255,255,.5);
}

.gp-pri-item {
  width: 100%;
  min-height: 58px;
  border-radius: 14px;
  border: 1px solid rgba(255,255,255,.2);
  background: linear-gradient(180deg, rgba(255,255,255,.18), rgba(255,255,255,.11));
  backdrop-filter: blur(6px);
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 0 12px;
  cursor: grab;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.16), 0 4px 12px rgba(10,20,70,.16);
  animation: gpPriIn .32s var(--ease-out) both;
  transition: background .2s, box-shadow .2s, transform .2s var(--ease-out);
}

@keyframes gpPriIn {
  from { opacity: 0; transform: translateX(8px); }
  to   { opacity: 1; transform: translateX(0); }
}

.gp-pri-item:hover {
  background: linear-gradient(180deg, rgba(255,255,255,.24), rgba(255,255,255,.14));
}

.gp-pri-item.dragging { opacity: .5; }

.gp-pri-num {
  width: 28px;
  height: 28px;
  border-radius: 999px;
  flex: none;
  display: grid;
  place-items: center;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 13px;
  font-weight: 700;
  color: #1e49c8;
  background: #fff;
}

.gp-pri-ic {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  flex: none;
  display: grid;
  place-items: center;
  color: #fff;
}

.gp-pri-ic svg { width: 18px; height: 18px; }

.gp-pri-lb {
  flex: 1;
  font-size: 14.5px;
  color: #fff;
  font-weight: 650;
}

.gp-pri-tools {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.gp-pri-move {
  width: 26px;
  height: 26px;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,.3);
  background: rgba(255,255,255,.12);
  color: #fff;
  display: grid;
  place-items: center;
  padding: 0;
  transition: background .18s, opacity .18s;
}

.gp-pri-move svg { width: 13px; height: 13px; }

.gp-pri-move.gp-pri-up svg { transform: rotate(180deg); }

.gp-pri-move:hover:not(:disabled) {
  background: rgba(255,255,255,.26);
}

.gp-pri-move:disabled {
  opacity: .32;
  cursor: default;
}

.gp-pri-grip {
  flex: none;
  display: grid;
  place-items: center;
  color: rgba(255,255,255,.55);
}

.gp-pri-grip svg { width: 18px; height: 18px; }

.gp-pri-empty {
  display: flex;
  align-items: center;
  gap: 12px;
  border-radius: 14px;
  padding: 14px;
  border: 1px dashed rgba(255,255,255,.3);
  background: rgba(255,255,255,.08);
}

.gp-pri-list:not(:empty) + .gp-pri-empty { display: none; }

.gp-pri-empty-ic {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  flex: none;
  display: grid;
  place-items: center;
  color: #fff;
  background: rgba(255,255,255,.16);
}

.gp-pri-empty-ic svg { width: 17px; height: 17px; }

.gp-pri-empty p {
  margin: 0;
  color: rgba(255,255,255,.82);
  font-size: 13px;
  line-height: 1.4;
}

.gp-pri-cta {
  display: grid;
  gap: 8px;
  margin-top: 4px;
}

.gp-pri-cta .gp-continue {
  width: 100%;
  justify-content: center;
  min-height: 48px;
  background: #fff;
  color: #1e49c8;
  border: none;
  box-shadow: 0 10px 26px rgba(8,16,60,.28), inset 0 -1px 0 rgba(20,40,140,.12);
  transition: transform .18s var(--ease-out), box-shadow .18s, filter .18s;
}

.gp-pri-cta .gp-continue:hover:not(:disabled) {
  background: #fff;
  filter: brightness(.985);
  transform: translateY(-1px);
  box-shadow: 0 14px 32px rgba(8,16,60,.34), inset 0 -1px 0 rgba(20,40,140,.12);
}

.gp-pri-cta .gp-continue:disabled {
  opacity: .6;
  cursor: default;
}

.gp-pri-cta .gp-continue svg { color: #1e49c8; }

.gp-pri-cta .gp-back {
  width: 100%;
  justify-content: center;
  color: rgba(255,255,255,.82);
  background: transparent;
  border: 1px solid rgba(255,255,255,.28);
  min-height: 44px;
}

.gp-pri-cta .gp-back:hover {
  color: #fff;
  border-color: rgba(255,255,255,.5);
}

.gp-wrap.gp-limit .gp-priority,
.gp-wrap.gp-limit .gp-select {
  animation: gpWiggle .28s ease;
}

@keyframes gpWiggle {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-4px); }
  75% { transform: translateX(4px); }
}

/* Tablet: three-across tiles before the side rail appears. */
@media (min-width: 700px) and (max-width: 979px) {
  .gp-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (min-width: 980px) {
  .gp-layout {
    grid-template-columns: minmax(0, 1.7fr) minmax(320px, .86fr);
  }
  .gp-grid {
    /* Computer view: EXACTLY 5 cards per row, and the leftover last row is
       CENTERED (not left-aligned). CSS grid can't center a partial last row, so
       use flexbox: each card is locked to a 5-column basis (full rows stay
       edge-to-edge) and the final short row centers via justify-content. */
    --gp-gap: clamp(8px, 0.85vw, 12px);
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
  }
  .gp-priority {
    position: sticky;
    top: 96px;
    align-self: start;
  }

  /* Computer view: the step FILLS the available height below the topbar so the
     goal tiles + priorities panel consume the lower white space instead of
     leaving a big empty band. The grid rows stretch (grid-auto-rows: 1fr) and
     each card grows to 100% of its row — desktop only; tablet/mobile untouched. */
  .q-wrap:has(.goals-priority) {
    min-height: calc(100dvh - 118px);
    display: flex;
    flex-direction: column;
  }
  .goals-priority {
    padding-top: 4px;
    flex: 1;
    min-height: 0;
  }
  .gp-wrap {
    gap: clamp(12px, 1.4vw, 18px);
    flex: 1;
    min-height: 0;
    grid-template-rows: auto 1fr;
  }
  .gp-layout {
    min-height: 0;
    align-items: stretch;
  }
  .gp-select {
    display: flex;
    flex-direction: column;
    min-height: 0;
  }
  .gp-head {
    padding-block: 0 clamp(4px, 0.8vw, 10px);
    gap: 4px;
  }
  .gp-title {
    font-size: clamp(24px, 2.6vw, 34px);
  }
  .gp-sub {
    font-size: clamp(13px, 1vw, 14.5px);
  }
  .gp-grid {
    gap: var(--gp-gap, clamp(8px, 0.85vw, 12px));
    flex: 1;
    min-height: 0;
    align-content: stretch;
  }
  .gp-opt {
    /* 5 across: basis = (100% − 4 gaps) / 5; max-width caps growth so the last
       row's cards stay card-sized and center instead of stretching wide. */
    flex: 1 1 calc((100% - 4 * var(--gp-gap)) / 5);
    max-width: calc((100% - 4 * var(--gp-gap)) / 5);
    min-height: 0;
    height: auto;
    justify-content: center;
    padding: clamp(12px, 1.1vw, 18px) 12px;
    gap: 8px;
  }
  .gp-opt-ic {
    width: clamp(38px, 2.6vw, 44px);
    height: clamp(38px, 2.6vw, 44px);
    border-radius: 12px;
  }
  .gp-opt-ic svg {
    width: clamp(18px, 1.4vw, 21px);
    height: clamp(18px, 1.4vw, 21px);
  }
  .gp-opt-lb {
    font-size: clamp(13.5px, 1.05vw, 15px);
  }
  .gp-opt-desc {
    font-size: clamp(11px, 0.82vw, 12.5px);
    line-height: 1.32;
  }
}


/* Short computer viewports (laptops, or when the resume banner is showing):
   drop the per-card description + tighten further so the full grid + priorities
   panel stay above the fold. The description is echoed in the priorities panel. */
@media (min-width: 980px) and (max-height: 760px) {
  .gp-opt-desc {
    display: none;
  }
  .gp-opt {
    padding: clamp(8px, 0.7vw, 11px) 10px;
  }
  .gp-head {
    padding-block: 0 6px;
  }
}

@media (max-width: 640px) {
  .q-wrap:has(.goals-priority) {
    min-height: 0;
  }
  .gp-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 9px;
  }
  .gp-opt {
    min-height: 100px;
    padding: 14px 10px;
    gap: 8px;
  }
  .gp-opt-ic {
    width: 42px;
    height: 42px;
  }
  .gp-opt-lb {
    font-size: 13.5px;
  }
  .gp-opt-desc {
    display: none;
  }
  .gp-opt-rank {
    top: 8px;
    left: 8px;
    width: 21px;
    height: 21px;
    font-size: 11px;
  }
  .gp-opt-check {
    top: 8px;
    right: 8px;
    width: 20px;
    height: 20px;
  }
  .gp-priority {
    border-radius: var(--r-xl, 18px);
    padding: 16px 14px;
  }
  .gp-pri-help-desktop { display: none; }
  .gp-pri-help-mobile { display: block; }
  .gp-pri-item {
    min-height: 54px;
    padding: 0 10px;
    gap: 9px;
  }
  .gp-pri-grip {
    display: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gp-opt,
  .gp-opt-ic,
  .gp-pri-slot,
  .gp-pri-item,
  .gp-pri-cta .gp-continue,
  .gp-wrap.gp-limit .gp-priority,
  .gp-wrap.gp-limit .gp-select {
    transition: none;
    animation: none;
  }
}

/* Light mode: goal tiles read as clean white cards on the page (matches the
   screenshot-2 example). The blue priorities panel is intentionally the same
   in both themes. */
[data-theme="light"] .gp-opt {
  background: var(--surface-hi, #fff);
  border-color: color-mix(in srgb, var(--blue-2) 14%, transparent);
  box-shadow: 0 2px 6px rgba(20,40,90,.04), 0 10px 24px rgba(20,40,90,.06);
}

[data-theme="light"] .gp-opt:hover {
  box-shadow: 0 4px 10px rgba(20,40,90,.06), 0 18px 38px rgba(20,40,90,.12);
}

/* Light mode: selected goal cards clearly read as "chosen". */
[data-theme="light"] .gp-opt.selected {
  background:
    radial-gradient(120% 90% at 50% -20%,
      color-mix(in srgb, var(--teal) 30%, transparent),
      transparent 66%),
    linear-gradient(150deg,
      color-mix(in srgb, var(--teal) 30%, #fff),
      color-mix(in srgb, var(--teal) 22%, #fff));
  border-color: color-mix(in srgb, var(--teal) 62%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 42%, transparent),
    0 14px 30px color-mix(in srgb, var(--teal) 22%, transparent);
}

[data-theme="light"] .gp-opt-desc {
  color: var(--text-2);
}

[data-theme="light"] .gp-priority {
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.28),
    0 24px 56px rgba(30,73,200,.26),
    0 6px 18px rgba(30,73,200,.14);
}

/* Dark mode: unselected tiles are outlined in the branded purple; selected
   tiles fill with the light teal-green so "chosen" reads instantly. */
[data-theme="dark"] .gp-opt {
  background:
    linear-gradient(180deg, rgba(255,255,255,.05), transparent 48%),
    var(--surface, rgba(10,18,40,.9));
  border-color: color-mix(in srgb, var(--violet) 72%, transparent);
  box-shadow: 0 4px 14px rgba(0,0,0,.24);
}

[data-theme="dark"] .gp-opt:hover {
  border-color: var(--violet);
  box-shadow:
    0 18px 38px rgba(0,0,0,.34),
    0 0 0 1px color-mix(in srgb, var(--violet) 55%, transparent),
    0 0 22px color-mix(in srgb, var(--violet) 30%, transparent);
}

[data-theme="dark"] .gp-opt.selected {
  border-color: color-mix(in srgb, var(--teal) 70%, transparent);
  background:
    radial-gradient(120% 90% at 50% -20%,
      color-mix(in srgb, var(--teal) 30%, transparent),
      transparent 62%),
    linear-gradient(150deg,
      color-mix(in srgb, var(--teal) 26%, var(--surface)),
      color-mix(in srgb, var(--teal) 16%, var(--surface)));
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 55%, transparent),
    0 18px 40px color-mix(in srgb, var(--teal) 20%, rgba(0,0,0,.4));
}

[data-theme="dark"] .gp-opt.selected:hover {
  border-color: color-mix(in srgb, var(--teal) 80%, transparent);
}


/* ═══════════════════════════════════════════════════════════════════════════
   F216 · SHIELD ACTIVATION CINEMATIC + intro-page uplevel
   The once-in-a-lifetime moment: shield lifts out of the emblem → full-screen
   3D spin at center → shockwaves radiate all the way out → SHIELD ACTIVE
   stamp → shrinks + spins home into the topbar pill → landing ripple.
   All tokenized (dual-theme). Reduced-motion users never see the overlay
   (the JS routes them to the instant flip), but everything is neutralized
   below anyway as a belt-and-braces guard.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── page uplevel · cinematic entrance — each act arrives in sequence ── */
@media (prefers-reduced-motion: no-preference) {
  .si .si-core        { animation: siRise .7s var(--ease-out) both .05s; }
  .si .si-eyebrow-tx  { animation: siRise .7s var(--ease-out) both .14s; }
  .si .si-statement   { animation: siRise .7s var(--ease-out) both .20s; }
  .si .si-lede        { animation: siRise .7s var(--ease-out) both .28s; }
  .si .si-body        { animation: siRise .7s var(--ease-out) both .34s; }
  .si .si-foot        { animation: siRise .7s var(--ease-out) both .46s; }
  .si .si-cta-row     { animation: siRise .7s var(--ease-out) both .52s; }
}
@keyframes siRise { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }

/* ── page uplevel · aurora energy field behind the emblem.
   F401 · stops run to `transparent 100%` and the whole layer is radially
   masked, so the aurora dissolves into the page instead of ending on a rim. */
.si-stage::before {
  content: ''; position: absolute; inset: -34%; border-radius: 50%; z-index: -2;
  background:
    radial-gradient(closest-side at 30% 30%, color-mix(in srgb, var(--teal) 16%, transparent), transparent 100%),
    radial-gradient(closest-side at 72% 64%, color-mix(in srgb, var(--violet) 13%, transparent), transparent 100%),
    radial-gradient(closest-side at 55% 20%, color-mix(in srgb, var(--blue-2) 15%, transparent), transparent 100%);
  -webkit-mask-image: radial-gradient(closest-side circle, #000 40%, rgba(0,0,0,.5) 70%, transparent 100%);
          mask-image: radial-gradient(closest-side circle, #000 40%, rgba(0,0,0,.5) 70%, transparent 100%);
  filter: blur(16px);
  animation: siAurora 9s ease-in-out infinite alternate;
}
@keyframes siAurora {
  0%   { transform: rotate(0deg) scale(1); opacity: .8; }
  100% { transform: rotate(24deg) scale(1.1); opacity: 1; }
}

/* ── page uplevel · the CTA breathes — it is THE button of the flow ── */
@media (prefers-reduced-motion: no-preference) {
  #si-activate { animation: siCtaBreath 2.6s ease-in-out infinite; }
}
@keyframes siCtaBreath {
  0%, 100% { box-shadow: 0 10px 30px color-mix(in srgb, var(--blue-2) 34%, transparent),
                         0 0 0 0 color-mix(in srgb, var(--teal) 44%, transparent); }
  50%      { box-shadow: 0 14px 40px color-mix(in srgb, var(--blue-2) 46%, transparent),
                         0 0 0 12px color-mix(in srgb, var(--teal) 0%, transparent); }
}

/* the moment the cinematic launches, the on-page coin yields the star role */
.si-stage.si-launched .si-coin { opacity: 0; transition: opacity .4s ease; }

/* ── the full-screen cinematic overlay ── */
.si-cine {
  position: fixed; inset: 0; z-index: 1400; pointer-events: none;
  opacity: 0; transition: opacity .3s ease;
}

/* COMPUTER ONLY · the assessment header must NEVER disappear behind the Shield
   activation cinematic. The overlay lives at <body> level, above main.app's own
   stacking context, so a header z-index can't escape it — instead we mask the
   veil transparent across the top header strip (same proven trick the mobile
   path uses) so the topbar stays fully visible the entire animation. */
@media (min-width: 1025px) {
  .si-cine-veil {
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, transparent 82px, #000 108px, #000 100%);
    mask-image: linear-gradient(to bottom, transparent 0, transparent 82px, #000 108px, #000 100%);
  }
}

@media (min-width: 641px) and (max-width: 1024px) {
  .si-cine-veil {
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, transparent 76px, #000 108px, #000 100%);
    mask-image: linear-gradient(to bottom, transparent 0, transparent 76px, #000 108px, #000 100%);
  }
}

@media (min-width: 641px) {
  body.si-shield-handoff:has(.si-cine) #screen-question:has(.shield-intro) .flow-main,
  body.si-shield-handoff:has(.si-cine) #screen-question:has(.shield-intro) > div:last-of-type {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
  }
}

.si-cine.show { opacity: 1; }
.si-cine.out { opacity: 0; transition: opacity .55s ease; }
.si-cine-veil {
  position: absolute; inset: 0;
  background:
    radial-gradient(circle at 50% 44%, color-mix(in srgb, var(--blue-2) 14%, transparent), transparent 52%),
    color-mix(in srgb, var(--bg) 82%, transparent);
  -webkit-backdrop-filter: blur(16px) saturate(1.15); backdrop-filter: blur(16px) saturate(1.15);
}

@media (min-width: 641px) {
  .si-cine-veil {
    background-color: var(--bg);
    background-image: radial-gradient(circle at 50% 44%, color-mix(in srgb, var(--blue-2) 10%, transparent), transparent 52%);
  }
}

/* the flying shield (position/scale/rotation driven by WAAPI in app.js) */
.si-cine-shield { position: absolute; will-change: transform, opacity; opacity: 0; }
.si-cine-shield .scs { width: 100%; height: 100%; display: block;
  filter: drop-shadow(0 24px 70px color-mix(in srgb, var(--blue-2) 55%, transparent))
          drop-shadow(0 0 44px color-mix(in srgb, var(--teal) 38%, transparent)); }
.si-cine-shield .scs-check { stroke-dasharray: 12; stroke-dashoffset: 12; }
.si-cine.ignited .scs-check { animation: siCineCheck .5s var(--ease-out) .18s forwards; }
@keyframes siCineCheck { to { stroke-dashoffset: 0; } }
/* the i) yields the face BEFORE the check draws — they never overlap */
.si-cine-shield .si-cine-idmark { transition: opacity .22s ease, transform .22s ease; transform-origin: 50% 50%; }
.si-cine.ignited .si-cine-idmark { opacity: 0; transform: scale(.72); }

/* shockwave epicenter — waves radiate ALL THE WAY OUT on ignition */
.si-cine-core { position: absolute; width: 0; height: 0; }
.si-cine-wave {
  position: absolute; left: 0; top: 0; width: 60px; height: 60px; border-radius: 50%;
  transform: translate(-50%, -50%) scale(0); opacity: 0;
  border: 2px solid color-mix(in srgb, var(--teal) 62%, transparent);
  box-shadow: 0 0 34px color-mix(in srgb, var(--teal) 34%, transparent),
    inset 0 0 22px color-mix(in srgb, var(--teal) 22%, transparent);
}
.si-cine-wave.w2 { border-color: color-mix(in srgb, var(--blue-2) 55%, transparent);
  box-shadow: 0 0 34px color-mix(in srgb, var(--blue-2) 30%, transparent); }
.si-cine-wave.w3 { border-color: color-mix(in srgb, var(--violet) 46%, transparent);
  box-shadow: 0 0 34px color-mix(in srgb, var(--violet) 26%, transparent); }
.si-cine.ignited .si-cine-wave    { animation: siCineWave 1.7s cubic-bezier(.16,1,.3,1) forwards; }
.si-cine.ignited .si-cine-wave.w2 { animation-delay: .14s; }
.si-cine.ignited .si-cine-wave.w3 { animation-delay: .30s; }
@keyframes siCineWave {
  0%   { transform: translate(-50%, -50%) scale(0);  opacity: .95; }
  100% { transform: translate(-50%, -50%) scale(46); opacity: 0; }
}

/* radial particle burst at ignition */
.si-cine-p {
  position: absolute; left: 0; top: 0; width: 7px; height: 7px; border-radius: 50%;
  background: var(--teal); opacity: 0;
  box-shadow: 0 0 12px color-mix(in srgb, var(--teal) 85%, transparent);
}
.si-cine-p:nth-child(3n)   { background: var(--blue-2); box-shadow: 0 0 12px color-mix(in srgb, var(--blue-2) 85%, transparent); }
.si-cine-p:nth-child(4n+1) { background: var(--violet); box-shadow: 0 0 12px color-mix(in srgb, var(--violet) 85%, transparent); }
.si-cine.ignited .si-cine-p { animation: siCineBurst 1.25s cubic-bezier(.16,1,.3,1) var(--pd, 0ms) forwards; }
@keyframes siCineBurst {
  0%   { transform: rotate(var(--ang)) translateX(0) scale(1); opacity: 1; }
  100% { transform: rotate(var(--ang)) translateX(var(--dist)) scale(.2); opacity: 0; }
}

/* the SHIELD ACTIVE stamp beneath the spinning shield */
.si-cine-cap {
  position: absolute; left: 50%; transform: translateX(-50%) translateY(14px) scale(.94);
  display: flex; flex-direction: column; align-items: center; gap: 5px;
  text-align: center; opacity: 0; white-space: nowrap;
}
.si-cine.ignited .si-cine-cap { animation: siCineCap .6s var(--ease-out) .12s forwards; }
.si-cine.leaving .si-cine-cap { animation: siCineCapOut .4s ease forwards; }
@keyframes siCineCap    { to { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); } }
@keyframes siCineCapOut { to { opacity: 0; transform: translateX(-50%) translateY(-10px) scale(.96); } }
.si-cine-cap b {
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-weight: 700; font-size: clamp(24px, 4.6vw, 42px); letter-spacing: .10em;
  text-transform: uppercase;
  background: linear-gradient(135deg, var(--teal), var(--blue-2) 60%, var(--violet));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 4px 22px color-mix(in srgb, var(--teal) 40%, transparent));
}
.si-cine-cap span { font-size: clamp(12px, 1.6vw, 14.5px); color: var(--muted); letter-spacing: .03em; }

/* Mobile runs the SAME F216 cinematic path as desktop. These phone-only rules
   keep the sequence identical (lift out, center spin, SHIELD ACTIVE stamp, fly
   home, topbar landing ripple) but make it Apple-smooth: the compositor never
   re-rasterizes a live backdrop-filter, shadows are pre-baked, and every moving
   layer is promoted to its own GPU layer so only transform/opacity change. */
@media (max-width: 640px) {
  .si-cine--mobile { contain: layout paint size; }
  body.si-cine-mobile-lock #screen-question.active .flow-topbar {
    position: fixed; top: 0; left: 0; right: 0; z-index: 1501;
    background: var(--bg); box-shadow: 0 10px 30px color-mix(in srgb, var(--bg) 72%, transparent);
  }
  body.si-cine-mobile-lock #screen-question.active .flow-main,
  body.si-cine-mobile-lock #screen-question.active > div:last-of-type,
  body.si-cine-mobile-lock #acct-btn {
    opacity: 0; visibility: hidden; pointer-events: none;
  }
  body.si-post-shield-reveal #screen-question.active .flow-main {
    animation: siQuestionReveal .54s cubic-bezier(.16,1,.3,1) both;
  }
  @keyframes siQuestionReveal {
    from { opacity: 0; transform: translateY(12px) scale(.992); }
    to { opacity: 1; transform: translateY(0) scale(1); }
  }
  /* KILL the animated backdrop-filter — it recomposites the whole page every
     frame on phones (the #1 jank source). A flat gradient reads identically. */
  .si-cine--mobile .si-cine-veil {
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    background:
      radial-gradient(circle at 50% 42%, color-mix(in srgb, var(--blue-2) 16%, transparent), transparent 56%),
      color-mix(in srgb, var(--bg) 90%, transparent);
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, transparent 76px, #000 112px, #000 100%);
    mask-image: linear-gradient(to bottom, transparent 0, transparent 76px, #000 112px, #000 100%);
    will-change: opacity;
  }
  /* the flying shield is the ONLY heavy layer — give it a stable GPU layer and
     a lighter shadow so per-frame paint stays cheap */
  .si-cine--mobile .si-cine-shield {
    will-change: transform, opacity; backface-visibility: hidden;
    -webkit-transform: translateZ(0); transform: translateZ(0);
  }
  .si-cine--mobile .si-cine-shield .scs {
    filter: drop-shadow(0 14px 30px color-mix(in srgb, var(--blue-2) 38%, transparent));
  }
  /* shockwaves & particles: transform/opacity only, no live box-shadow blur */
  .si-cine--mobile .si-cine-wave {
    box-shadow: none; border-width: 2px; will-change: transform, opacity;
  }
  .si-cine--mobile .si-cine-p { width: 5px; height: 5px; box-shadow: none; will-change: transform, opacity; }
  .si-cine--mobile .si-cine-cap { width: min(92vw, 360px); white-space: normal; will-change: transform, opacity; }
  .si-cine--mobile .si-cine-cap b { font-size: clamp(22px, 7.2vw, 30px); letter-spacing: .08em; }
  .si-cine--mobile .si-cine-cap span { font-size: 12px; }
  /* the topbar landing ripple keeps its pop but drops the extra shadow layer */
  .si-cine--mobile ~ * .q-shield-pill.qsp-land { will-change: transform; }

/* ── landing ripple on the topbar Shield pill (fired by JS on touchdown) ── */
.q-shield-pill { position: relative; }
.q-shield-pill.qsp-land { animation: qspLandPop .55s cubic-bezier(.22,1.6,.36,1); }
.q-shield-pill.qsp-land::after {
  content: ''; position: absolute; inset: -3px; border-radius: 999px; pointer-events: none;
  border: 2px solid color-mix(in srgb, var(--teal) 70%, transparent);
  animation: qspLandRipple .9s var(--ease-out) forwards;
}
@keyframes qspLandPop    { 0% { transform: scale(1); } 35% { transform: scale(1.22); } 100% { transform: scale(1); } }
@keyframes qspLandRipple { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(2.1); } }

/* belt-and-braces: neutralize every F216 animation for reduced motion */
@media (prefers-reduced-motion: reduce) {
  .si-stage::before, #si-activate,
  .si-cine.ignited .scs-check, .si-cine.ignited .si-cine-wave, .si-cine.ignited .si-cine-p,
  .si-cine.ignited .si-cine-cap, .si-cine.leaving .si-cine-cap,
  .q-shield-pill.qsp-land, .q-shield-pill.qsp-land::after { animation: none; }
  .si-cine { display: none; }
}
} /* ← closes the long-unclosed @media (max-width: 640px) F308 block above (was
     auto-closed at EOF before F372 was appended — everything after this brace
     is GLOBAL again) */

/* ===========================================================================
   F372 · COMING SOON — the $70B arrival invitations (Reports · Network ·
   Daily Habits). A cinematic hero: breathing halo, twin gyroscopic orbits,
   drifting stars, floating emblem disc wearing a brand gem — crowned by a
   giant gradient "Coming Soon" wordmark with a slow light sweep. Members-only
   seal jewels on the nav tabs. Tokenized · dual-theme · fully responsive ·
   reduced-motion-safe.
   ========================================================================== */
/* ── the sealed tab jewel — a gleaming spark, never a grey disabled state ── */
.mtab.mtab-soon { position: relative; }
.mtab.mtab-soon .mtab-lb, .mtab.mtab-soon .mtab-ic { opacity: .58; transition: opacity .24s var(--ease-out); }
.mtab.mtab-soon:hover .mtab-lb, .mtab.mtab-soon:hover .mtab-ic { opacity: .85; }
.mtab-soonjewel { display: inline-grid; place-items: center; flex: none; width: 15px; height: 15px; border-radius: 999px;
  color: #fff;
  background: linear-gradient(135deg, var(--violet), var(--blue-2) 55%, var(--teal));
  box-shadow: 0 2px 8px color-mix(in srgb, var(--violet) 45%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
  transition: transform .24s var(--ease-spring), box-shadow .24s var(--ease-out); }
.mtab-soonjewel svg { width: 9px; height: 9px; }
.mtab.mtab-soon:hover .mtab-soonjewel { transform: scale(1.14) rotate(12deg);
  box-shadow: 0 4px 12px color-mix(in srgb, var(--violet) 55%, transparent), inset 0 1px 0 rgba(255,255,255,.5); }
/* Phone/tablet footer bar stacks icon OVER label (column flow), so a static
   jewel became a stray third row and fell off the bottom of the screen. Pin it
   to the icon's top-right corner — the same law .mtab-lock / .mtab-gem follow. */
@media (max-width: 1024px) {
  .mtabbar:not(.mtabbar--top) .mtab.mtab-soon { overflow: visible; }
  .mtabbar:not(.mtabbar--top) .mtab-soonjewel {
    position: absolute; top: 2px; left: 50%; transform: translateX(10px); z-index: 2; }
  .mtabbar:not(.mtabbar--top) .mtab.mtab-soon:hover .mtab-soonjewel {
    transform: translateX(10px) scale(1.14) rotate(12deg); }
}
@media (prefers-reduced-motion: reduce) {
  .mtab-soonjewel { transition: none; }   /* keep the phone translateX pin, drop the hover spring */
}

/* ── the hero stage ── */
.cs-pop .fx-hero { gap: 10px; padding: 10px 0 4px; }
.cs-hero { position: relative; width: 150px; height: 150px; display: grid; place-items: center; }
.cs-halo { position: absolute; inset: -12%; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--fx, var(--teal)) 40%, transparent), transparent 66%);
  filter: blur(17px); animation: fxAura 4.6s var(--ease-out) infinite; }
.cs-orbit { position: absolute; inset: 6px; border-radius: 50%; pointer-events: none;
  border: 1.5px solid transparent;
  border-top-color: color-mix(in srgb, var(--fx, var(--teal)) 62%, transparent);
  border-right-color: color-mix(in srgb, var(--fx, var(--teal)) 22%, transparent); }
.cs-orbit-a { animation: csOrbit 9s linear infinite; }
.cs-orbit-b { inset: 17px; opacity: .6; animation: csOrbit 14s linear infinite reverse; }
@keyframes csOrbit { to { transform: rotate(360deg); } }
.cs-stars { position: absolute; inset: 0; pointer-events: none; }
.cs-stars s { position: absolute; width: 4px; height: 4px; border-radius: 50%;
  background: color-mix(in srgb, var(--fx, var(--teal)) 80%, #fff);
  opacity: 0; animation: csStar 5.2s var(--ease-out) infinite; }
.cs-stars s:nth-child(1) { left: 8%;  top: 30%; animation-delay: 0s; }
.cs-stars s:nth-child(2) { left: 88%; top: 22%; animation-delay: .9s; }
.cs-stars s:nth-child(3) { left: 76%; top: 78%; animation-delay: 1.7s; }
.cs-stars s:nth-child(4) { left: 16%; top: 74%; animation-delay: 2.6s; }
.cs-stars s:nth-child(5) { left: 50%; top: 4%;  animation-delay: 3.4s; }
.cs-stars s:nth-child(6) { left: 94%; top: 52%; animation-delay: 4.2s; }
@keyframes csStar { 0%, 100% { opacity: 0; transform: scale(.4) translateY(2px); }
  40% { opacity: 1; transform: scale(1) translateY(-2px); } 70% { opacity: .4; } }
.cs-disc { position: relative; width: 96px; height: 96px; border-radius: 30%; display: grid; place-items: center;
  color: #fff; z-index: 1;
  background: linear-gradient(140deg, var(--fx, var(--teal)), color-mix(in srgb, var(--fx, var(--teal)) 52%, var(--violet)));
  box-shadow: 0 20px 46px color-mix(in srgb, var(--fx, var(--teal)) 42%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
  animation: fxFloat 5s var(--ease-out) infinite; }
.cs-disc svg { width: 44px; height: 44px; }
.cs-disc::after { content: ''; position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(180deg, rgba(255,255,255,.34), transparent 55%); pointer-events: none; }
.cs-gem { position: absolute; right: 16px; bottom: 16px; z-index: 2; width: 34px; height: 34px;
  display: grid; place-items: center; border-radius: 999px; color: #fff;
  background: linear-gradient(135deg, var(--violet), var(--blue-2) 55%, var(--teal));
  box-shadow: 0 8px 20px color-mix(in srgb, var(--violet) 50%, transparent), inset 0 1px 0 rgba(255,255,255,.5);
  animation: csGemPulse 3.2s var(--ease-out) infinite; }
.cs-gem svg { width: 16px; height: 16px; }
@keyframes csGemPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } }

/* ── the giant COMING SOON wordmark — gradient ink + slow light sweep ── */
.cs-coming { position: relative; display: inline-block; overflow: hidden; padding: 2px 8px; max-width: 100%; }
.cs-coming-tx { display: block; font-family: var(--font-display); font-weight: 800;
  font-size: clamp(30px, 8vw, 46px); line-height: 1.06; letter-spacing: -0.02em; text-align: center;
  background: linear-gradient(100deg,
    var(--text) 0%,
    color-mix(in srgb, var(--fx, var(--teal)) 85%, var(--text)) 42%,
    var(--fx, var(--teal)) 58%,
    color-mix(in srgb, var(--fx, var(--teal)) 55%, var(--violet)) 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
.cs-coming-sheen { position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(115deg, transparent 30%, rgba(255,255,255,.5) 50%, transparent 70%);
  transform: translateX(-120%); animation: csSheen 3.6s var(--ease-out) infinite; mix-blend-mode: overlay; }
[data-theme="light"] .cs-coming-sheen { background: linear-gradient(115deg, transparent 30%, rgba(255,255,255,.85) 50%, transparent 70%); mix-blend-mode: normal; }
@keyframes csSheen { 0%, 55% { transform: translateX(-120%); } 90%, 100% { transform: translateX(120%); } }

/* ── rows wear a spark chip instead of the lock (this is a promise, not a gate) ── */
.cs-row .cs-chk { color: var(--fx, var(--teal));
  background: color-mix(in srgb, var(--fx, var(--teal)) 12%, var(--surface));
  border-radius: 999px; width: 26px; height: 26px;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fx, var(--teal)) 32%, transparent); }
.cs-row .cs-chk svg { width: 14px; height: 14px; }

/* ── responsive: phones get a tighter stage, wordmark scales via clamp ── */
@media (max-width: 640px) {
  .cs-hero { width: 128px; height: 128px; }
  .cs-disc { width: 84px; height: 84px; }
  .cs-disc svg { width: 38px; height: 38px; }
  .cs-gem { width: 30px; height: 30px; right: 12px; bottom: 12px; }
  .cs-gem svg { width: 14px; height: 14px; }
}

/* ── Coming Soon shield nodes (Daily Habits, Blood Work) wear the LOCK seal ── */
.lhs-node--soon .lhs-node-soonlock { position: absolute; right: -3px; top: -3px; z-index: 3;
  width: 18px; height: 18px; display: grid; place-items: center; border-radius: 999px;
  color: #fff;
  background: linear-gradient(135deg, var(--violet), var(--blue-2) 55%, var(--teal));
  box-shadow: 0 3px 10px color-mix(in srgb, var(--violet) 48%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
  transition: transform .24s var(--ease-spring); }
.lhs-node--soon .lhs-node-soonlock svg { width: 10px; height: 10px; }
.lhs-node--soon:hover .lhs-node-soonlock { transform: scale(1.15) rotate(8deg); }
@media (max-width: 640px) {
  .lhs-node--soon .lhs-node-soonlock { width: 15px; height: 15px; right: -2px; top: -2px; }
  .lhs-node--soon .lhs-node-soonlock svg { width: 8.5px; height: 8.5px; }
}

/* ── reduced motion: everything settles, nothing spins ── */
@media (prefers-reduced-motion: reduce) {
  .cs-halo, .cs-orbit-a, .cs-orbit-b, .cs-stars s, .cs-disc, .cs-gem, .cs-coming-sheen { animation: none; }
  .cs-stars s { opacity: .5; }
  .cs-coming-sheen { display: none; }
}

/* ══ F380 · REVEAL PAGE RETIRED — its data folded into the Home deck ═══════
   The 12-system dial constellation now renders inside the existing "Body
   systems intelligence" card; priority moves + score factors carry the reveal's
   detail lines; the personal score story leads the score-factors card. */
.ov-sysmap-dials { margin-top: 14px; }
.ov-sysmap-dials .rv-sys { cursor: pointer; }
.ov-sysmap-dials .rv-sys:hover { transform: translateY(-2px); }
.ov-sysmap-dials .rv-sys:focus-visible { outline: 2px solid var(--border-hi); outline-offset: 2px; border-radius: 14px; }
.ov-sysmap-dials .rv-sys .ov-sys-delta { position: absolute; top: 6px; right: 6px; z-index: 1; }
.ov-fx-story { margin: 10px 0 0; font-size: 13.5px; line-height: 1.6; color: var(--text-2);
  padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-sm);
  background: color-mix(in srgb, var(--teal) 5%, transparent); }
/* the up/down columns sit the same distance below the story as the story sits
   below the card title (title's 8px bottom margin + the story's 10px top) */
.ov-fx-story + .ov-fx-grid { margin-top: 18px; }
/* F381 · symmetry pass — one-line detail rows (the story always renders in full) */
.ov-fx-story-tx { display: block; }
.ov-prio-sub, .ov-fx-sub { display: block; margin-top: 3px; font-size: 12px; line-height: 1.5; color: var(--muted); font-weight: 400;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.ov-fx li > span, .ov-prio-tx { min-width: 0; overflow: hidden; flex: 1; }
/* nowrap sub-lines must not inflate the grid's min-content width */
.ov-fx-grid > .ov-fx { min-width: 0; }
@media (prefers-reduced-motion: reduce) {
  .ov-sysmap-dials .rv-sys:hover { transform: none; }
}

/* ══ F384 · PLAN CARD TRASH + REMOVAL LINE ────────────────────────────
   A trash can sits beside the qty stepper on every plan card; removals get
   their own line (with per-product Undo) inside the adjustment banner. */
/* one row on the banner: [− n +] then the trash to its RIGHT */
.ov-tp-tools { position: absolute; top: 6px; right: 6px; z-index: 3;
  display: inline-flex; align-items: center; gap: 6px; }
.ov-tp-tools .ov-tp-qty { position: static; top: auto; right: auto; }
.ov-tp-trash { flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; padding: 0; border-radius: 999px; cursor: pointer;
  color: #fff;
  background: color-mix(in srgb, #0b1020 52%, transparent);
  border: 1px solid color-mix(in srgb, #fff 30%, transparent);
  box-shadow: 0 4px 14px -6px rgba(2, 8, 26, .6), inset 0 1px 0 color-mix(in srgb, #fff 22%, transparent);
  backdrop-filter: blur(9px) saturate(150%); -webkit-backdrop-filter: blur(9px) saturate(150%);
  transition: border-color .18s ease, background .18s ease, color .18s ease, transform .14s var(--ease-spring); }
.ov-tp-trash svg { width: 14px; height: 14px; }
.ov-tp-card:hover .ov-tp-trash { border-color: color-mix(in srgb, var(--danger) 65%, transparent); }
.ov-tp-trash:hover { color: var(--danger); background: color-mix(in srgb, var(--danger) 26%, #0b1020);
  border-color: var(--danger); transform: translateY(-1px); }
.ov-tp-trash:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
.ov-tp-adj-removed { display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  margin-top: 8px; padding-top: 8px; border-top: 1px solid color-mix(in srgb, var(--teal) 24%, transparent);
  color: var(--text-2); font-size: 12.5px; line-height: 1.5; }
.ov-tp-adj-removed > svg { width: 14px; height: 14px; flex: none; color: var(--danger); }
.ov-tp-adj-removed b { color: var(--text); }
.ov-tp-adj-undo { display: inline-flex; align-items: center; gap: 4px; cursor: pointer;
  padding: 3px 10px; border-radius: 999px; font-family: var(--font-display);
  font-weight: 700; font-size: 11.5px; color: var(--teal);
  background: var(--teal-soft); border: 1px solid color-mix(in srgb, var(--teal) 45%, transparent);
  transition: background .18s ease, color .18s ease, transform .14s var(--ease-spring); }
.ov-tp-adj-undo:hover { background: color-mix(in srgb, var(--teal) 22%, transparent); transform: translateY(-1px); }
.ov-tp-adj-undo:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
@media (max-width: 640px) {
  .ov-tp-tools { gap: 4px; }
}
@media (prefers-reduced-motion: reduce) {
  .ov-tp-trash:hover, .ov-tp-adj-undo:hover { transform: none; }
}

/* ══ F382 · SHIELD MOMENT → CARE PAGE — the popup's full "$70B" experience
   inside the Care tab's Protection card. Reuses every .sm-* piece verbatim;
   the ring-field backdrop clips to the card, content stacks above it. */
.ov-shield-report { display: flex; flex-direction: column; align-items: center; gap: clamp(16px, 2.2vh, 26px);
  text-align: center; padding: clamp(24px, 3.4vw, 44px) clamp(18px, 3vw, 44px); }
/* .sm-accept's own display beats the UA [hidden] rule — make hidden real */
.ov-shield-report .sm-accept[hidden], .ov-shield-report .sm-more[hidden] { display: none; }
/* .btn's inline-flex likewise beats [hidden] — empty à la carte cart hides checkout */
.alc-foot-actions .btn[hidden] { display: none; }

/* ══ F391 · LANDING — outcome-led hero + the forming capsule ─────────────
   The DNA shield emblem is retired. A two-tone brand capsule assembles from
   streaming nutrient particles: they arc inward, the capsule snaps in with a
   pop, a shimmer sweeps it, then the particle stream loops gently. Pure
   CSS/SVG; reduced-motion shows the finished capsule, static. */
#screen-landing .ls-outcome { font-size: clamp(26px, 3.4vw, 40px); line-height: 1.16; letter-spacing: -0.026em;
  max-width: 19ch; margin-inline: auto; }
#screen-landing .ls-lead { max-width: 52ch; }

/* THE BUILD — the pill is assembled voxel-by-voxel by the particles, ONCE,
   then stays. The pill exists twice: as ~90 luminous voxels (.cap-voxel,
   flight keyframes injected by capsuleParticleField() in app.js) and as the
   smooth SVG (.pc-capsule). Timeline:
     0–.95s    voxels swirl in from dark space (counter-rotating shells)
     .95–3.3s  base → cap: each dives as a stretched light-trail and LOCKS
               into its lattice slot — the pill IS the landed particles
     ~3.4s     last voxel lands: flash + distortion rings, and the voxel
               lattice fuses (cross-fades) into the smooth pill
     3.4s → ∞  formed forever: energy core pulses, shimmer sweeps, slow 3D
               drift, ambient particles keep feeding it
   Everything is transform/opacity only — pure compositor. */
.pc-capsule { width: 102%; height: auto; transform-origin: 50% 50%; opacity: 0;
  filter: drop-shadow(0 14px 26px color-mix(in srgb, var(--blue) 44%, transparent))
          drop-shadow(0 0 20px rgba(190, 214, 255, .35));
  animation: capReal .6s ease-out 3.3s both,
             capLockIn .7s var(--ease-spring) 3.4s both,
             capDrift 9s ease-in-out 4.2s infinite;
  will-change: transform, opacity; }
/* the fuse: smooth pill fades in under the flash as the voxels fade out */
@keyframes capReal { from { opacity: 0; } to { opacity: 1; } }

/* the voxel lattice — same box as .pc-core so lattice %-coords line up with
   the SVG; fades out once the smooth pill has taken over. visibility:hidden
   at the end releases all ~104 voxel layers from the compositor for good. */
.cap-voxels { position: relative; width: clamp(112px, 14.5vw, 184px); aspect-ratio: 1;
  pointer-events: none; animation: capVoxOut .7s ease-out 3.55s both; }
@keyframes capVoxOut { from { opacity: 1; } to { opacity: 0; visibility: hidden; } }
.cap-voxel { position: absolute; aspect-ratio: 1; border-radius: 50%; opacity: 0; }
.cap-voxel.vt { background: radial-gradient(circle at 32% 30%, #fff, #5b9bff 55%, #2f6bf2);
  box-shadow: 0 0 7px rgba(91, 155, 255, .85), 0 0 16px rgba(47, 107, 242, .45); }
.cap-voxel.vb { background: radial-gradient(circle at 32% 30%, #fff, #eef2fb 62%, #b9c8e8);
  box-shadow: 0 0 7px rgba(255, 255, 255, .8), 0 0 14px rgba(170, 197, 255, .38); }
/* body voxels read slate-gray in flight, then brighten to white as they land
   (each voxel's landing sits at ~86–95% of its own duration, so 82→94 covers it) */
@keyframes capVbTint {
  0%, 82%   { filter: brightness(.58) saturate(.6); }
  94%, 100% { filter: none; }
}

/* the final particle lands → the whole pill surges */
@keyframes capLockIn {
  0%   { transform: scale(1); }
  45%  { transform: scale(1.09); }
  100% { transform: scale(1); }
}
/* formed · slow dimensional drift so the light bands travel the form */
@keyframes capDrift {
  0%, 100% { transform: perspective(700px) rotateY(0) rotateX(0) translateY(0); }
  25%      { transform: perspective(700px) rotateY(9deg) rotateX(3deg) translateY(-4px); }
  50%      { transform: perspective(700px) rotateY(0) rotateX(-2deg) translateY(2px); }
  75%      { transform: perspective(700px) rotateY(-9deg) rotateX(2.5deg) translateY(-3px); }
}

/* completion flash at the moment the build locks in (fires once) */
.cap-flash { position: absolute; left: 50%; top: 50%; width: 46%; aspect-ratio: 1;
  border-radius: 50%; pointer-events: none; opacity: 0;
  background: radial-gradient(circle, #fff 0%, #dbe9ff 26%, color-mix(in srgb, var(--blue) 70%, transparent) 55%, transparent 72%);
  transform: translate(-50%, -50%) scale(.3);
  animation: capFlash 1s ease-out 3.32s both; }
@keyframes capFlash {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(.3); }
  18%  { opacity: .9; transform: translate(-50%, -50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.7); visibility: hidden; }
}

/* distortion waves rippling out from the completed build (fire once) */
.cap-shock { position: absolute; left: 50%; top: 50%; width: 44%; aspect-ratio: 1;
  border-radius: 50%; pointer-events: none; opacity: 0;
  border: 1.5px solid color-mix(in srgb, var(--blue) 60%, #fff);
  box-shadow: 0 0 24px color-mix(in srgb, var(--blue) 55%, transparent), inset 0 0 20px color-mix(in srgb, var(--blue) 40%, transparent);
  transform: translate(-50%, -50%) scale(.25);
  animation: capShock 1.4s ease-out 3.36s both; }
.cap-shock-2 { border-color: rgba(255, 255, 255, .85);
  box-shadow: 0 0 22px rgba(210, 228, 255, .55);
  animation-delay: 3.55s; }
@keyframes capShock {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(.25); }
  12%  { opacity: .85; }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(2.3); visibility: hidden; }
}

/* shimmer sweeps the glass, then rests between passes */
.cap-shimmer { transform: translateX(-34px) skewX(-14deg); transform-box: fill-box;
  opacity: 0; animation: capShimmer 5.4s linear 3.9s infinite; }
@keyframes capShimmer {
  0%       { transform: translateX(-34px) skewX(-14deg); opacity: 0; }
  4%       { opacity: 1; }
  15%      { transform: translateX(76px) skewX(-14deg); opacity: 0; }
  100%     { transform: translateX(76px) skewX(-14deg); opacity: 0; }
}

/* the energy core breathing down the pill axis once it locks in */
.cap-energy { opacity: 0; animation: capPulse 3.4s ease-in-out 3.4s infinite;
  transform-box: fill-box; transform-origin: 50% 50%; }
@keyframes capPulse {
  0%, 100% { opacity: .35; transform: scale(.96); }
  50%      { opacity: .95; transform: scale(1.14); }
}

/* ambient feed particles — flight paths injected by JS; here only the look */
.cap-flow { position: absolute; inset: 0; pointer-events: none; }
.cap-particle { position: absolute; left: 50%; top: 50%; width: 5px; height: 5px;
  border-radius: 50%; opacity: 0;
  background: radial-gradient(circle at 32% 30%, #fff, #7fb0ff 55%, var(--blue));
  box-shadow: 0 0 8px rgba(127, 176, 255, .7), 0 0 18px color-mix(in srgb, var(--blue) 48%, transparent); }
.cap-particle:nth-child(2n) { width: 4px; height: 4px;
  background: radial-gradient(circle at 32% 30%, #fff, #e8f0ff 55%, #9db9ff);
  box-shadow: 0 0 7px rgba(230, 240, 255, .7); }

@media (prefers-reduced-motion: reduce) {
  .pc-capsule { animation: none; opacity: 1; transform: none; }
  .cap-voxels, .cap-voxel { animation: none !important; opacity: 0; }
  .cap-flash, .cap-shock { animation: none; opacity: 0; }
  .cap-shimmer { animation: none; opacity: 0; }
  .cap-energy { animation: none; opacity: .55; transform: none; }
  .cap-particle { animation: none !important; opacity: 0; }
}

/* ══ F390 · Goal cards drop their icon on phone + tablet ─────────────────
   The goals grid gets 2–3 cards per row below 980px (where the desktop 5-across
   layout begins), so the label is the only thing that needs to read. Computer
   keeps the gradient tiles. */
@media (max-width: 979px) {
  .gp-opt-ic { display: none !important; }
  /* the min-height was sized around the icon tile — collapse to the label */
  .gp-opt { min-height: 0; padding: 18px 12px; }
  /* icon gone → the label carries the card, so give it real presence */
  .gp-opt-lb { font-size: 16.5px !important; line-height: 1.3; }
}
/* iPad / tablet: label only — the description is echoed in the priorities panel */
@media (min-width: 641px) and (max-width: 979px) {
  .gp-opt-desc { display: none !important; }
  .gp-opt { min-height: 62px; justify-content: center; }
}
@media (max-width: 640px) {
  .gp-opt { min-height: 0; padding: 17px 12px; }
  .gp-opt-lb { font-size: 15.5px !important; }
}

/* ══ F389 · No manual theme switch mid-assessment on phone/tablet ─────────
   The question flow is the one screen where the top-right is already crowded
   (brand · progress · % · Shield pill). The toggle stays on desktop, and on
   every other screen at every width; the theme still follows the OS. Keyed to
   .progress-track so it only applies while questions are actually showing. */
@media (max-width: 1024px) {
  #screen-question.active:has(.progress-track) ~ #acct-btn,
  body:has(#screen-question.active .progress-track) #acct-btn { display: none !important; }
  /* reclaim the gutter the toggle was reserving */
  body:has(#screen-question.active .progress-track) #screen-question .flow-topbar {
    padding-right: clamp(18px, 4vw, 40px); }
}

/* ══ F387 · "See my plan" — the shield caption is its own click target ────
   The nodes-only shield suppresses the showcase-wide hover (so the shield body
   never looks clickable); the caption re-enables the SAME green fill for itself. */
.ov-shc-cap[data-shc-plan] { cursor: pointer; }
.ov-shc-cap[data-shc-plan]:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; border-radius: 22px; }
@media (hover: hover) {
  .ov-showcase--nodes-only .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta,
  .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta {
    color: #0c1320;
    background: color-mix(in srgb, #16c08a 24%, #fff);
    border-color: color-mix(in srgb, #16c08a 50%, transparent);
    box-shadow: 0 10px 24px -13px color-mix(in srgb, #16c08a 62%, transparent), inset 0 1px 0 rgba(255, 255, 255, .55);
    transform: translateY(-1px); }
  .ov-showcase--nodes-only .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta svg,
  .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta svg { color: #0c1320; }
  .ov-showcase--nodes-only .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta svg:last-child,
  .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta svg:last-child { transform: translateX(3px); }
}
@media (prefers-reduced-motion: reduce) {
  .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta,
  .ov-shc-cap[data-shc-plan]:hover .ov-shc-cta svg:last-child { transform: none; }
}
.ov-shield-report > .sm-rings { position: absolute; inset: 0; z-index: 0; }
.ov-shield-report > *:not(.sm-rings) { position: relative; z-index: 1; }
.ov-shield-report .sm-hero { justify-items: center; }
.ov-shield-report .sm-ledger { width: 100%; max-width: 1180px; text-align: left; }
/* F446 · the Care report stacks: full-width Blocked showcase first, Cleared
   below — at EVERY breakpoint (overrides the 860px two-column ledger rule). */
.ov-shield-report .sm-ledger { grid-template-columns: 1fr; }
@media (max-width: 640px) {
  .ov-shield-report { padding: 20px 14px; }
}

/* ═══ OPEN SHOP ACCOUNT STEP — password page in the identity-gate shell ═══ */
.sa-forgot {
  display: block; width: 100%; margin-top: 10px; padding: 10px 12px;
  background: transparent; border: none; cursor: pointer;
  font: 500 12.5px/1.4 "Inter", sans-serif; color: var(--ink-soft, var(--muted));
  text-align: center; border-radius: 10px;
  transition: color .18s ease, background .18s ease;
}
.sa-forgot:hover { color: var(--ink); background: color-mix(in srgb, var(--teal) 8%, transparent); }
.sa-forgot:disabled { cursor: default; opacity: .75; background: transparent; }
/* Inline back link under Continue — returns to the email page */
.sa-back-inline {
  display: flex; align-items: center; justify-content: center; gap: 7px;
  width: 100%; margin-top: 8px; padding: 10px 12px;
  background: transparent; border: none; cursor: pointer; border-radius: 10px;
  font: 500 13px/1.4 "Inter", sans-serif; color: var(--ink-soft, var(--muted));
  transition: color .18s ease, background .18s ease;
}
.sa-back-inline svg { width: 15px; height: 15px; }
.sa-back-inline:hover { color: var(--ink); background: color-mix(in srgb, var(--teal) 8%, transparent); }
.sa-back-inline:focus-visible { outline: 2px solid var(--teal); outline-offset: 1px; }
/* Password field + show/hide eye (inside the input, right-aligned) */
.sa-pw-wrap { position: relative; display: block; }
.sa-pw-wrap input { width: 100%; padding-right: 46px; }
.sa-pw-eye {
  position: absolute; top: 50%; right: 8px; transform: translateY(-50%);
  display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; padding: 0; border: none; border-radius: 9px;
  background: transparent; cursor: pointer; color: var(--muted);
  transition: color .18s ease, background .18s ease;
}
.sa-pw-eye svg { width: 19px; height: 19px; }
.sa-pw-eye:hover { color: var(--ink); background: color-mix(in srgb, var(--teal) 10%, transparent); }
.sa-pw-eye.on { color: var(--teal); }
.sa-pw-eye:focus-visible { outline: 2px solid var(--teal); outline-offset: 1px; }
@media (prefers-reduced-motion: reduce) {
  .sa-forgot, .sa-pw-eye { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F369 · OPEN SHOP CART SLIDEOUT — Plan-page checkout panel
   ---------------------------------------------------------------------------
   Themed entirely through the components' own --os-* CSS variables so both
   IDN themes (dark default + light) flow through automatically — zero
   hardcoded hex, everything maps to tokens.css. The components render in the
   light DOM, so plain selectors work for the few structural overrides.
   ═══════════════════════════════════════════════════════════════════════════ */
:root {
  /* Global Open Shop tokens → IDN theme (dark values come from tokens.css) */
  --os-foreground:            var(--text);
  --os-muted-foreground:      var(--muted);
  --os-primary:               var(--teal);
  --os-primary-foreground:    var(--ink-on-brand);
  --os-border:                var(--border);
  /* Slideout panel */
  --os-cart-width:            420px;
  --os-cart-bg:               var(--surface-2);
  --os-cart-shadow:           var(--shadow-lg);
  --os-cart-overlay-bg:       rgba(3, 6, 15, 0.72);
  --os-cart-title-color:      var(--text);
  --os-cart-section-title-color: var(--text-2);
  --os-cart-section-divider-color: var(--border-soft);
  /* Empty state */
  --os-cart-empty-header-color:    var(--text);
  --os-cart-empty-subheader-color: var(--muted);
  /* Summary rows */
  --os-cart-summary-row-color:        var(--muted);
  --os-cart-summary-row-value-color:  var(--text);
  --os-cart-summary-total-color:      var(--text);
  --os-cart-summary-note-color:       var(--muted);
  --os-cart-summary-actions-total-row-color: var(--text);
  /* Buttons */
  --os-cart-btn-radius:           12px;
  --os-cart-btn-primary-bg:       var(--teal);
  --os-cart-btn-primary-bg-hover: var(--teal-2);
  --os-cart-btn-primary-bg-active: var(--teal-2);
  --os-cart-btn-primary-color:    var(--ink-on-brand);
  --os-cart-btn-link-color:       var(--text-2);
  --os-cart-btn-link-bg-active:   var(--fill-hover);
  /* Line items */
  --os-cart-item-image-border:  1px solid var(--border-soft);
  --os-cart-item-image-radius:  10px;
  --os-cart-item-name-color:    var(--text);
  --os-cart-item-desc-color:    var(--muted);
  --os-cart-item-price-color:   var(--text);
  --os-cart-item-original-price-color: var(--muted-2);
  --os-cart-item-frequency-border: 1px solid var(--border);
  --os-cart-item-frequency-color:  var(--teal);
  --os-cart-item-qty-color:        var(--text);
  --os-cart-item-qty-border-hover: var(--border);
  --os-cart-item-subscribe-bg:        transparent;
  --os-cart-item-subscribe-bg-hover:  var(--fill-hover);
  --os-cart-item-subscribe-bg-active: var(--fill-hover);
  --os-cart-item-subscribe-color:     var(--text-2);
  --os-cart-item-subscribe-border:    1px solid var(--border);
  --os-cart-item-subscribe-radius:    10px;
  /* Quantity select + spinner */
  --os-select-background-color:         var(--surface-3);
  --os-select-border-color:             var(--border);
  --os-select-hover-background-color:   var(--surface-hi);
  --os-select-checked-background-color: var(--surface-hi);
  --os-select-checkmark-color:          var(--teal);
  --os-spinner-color:                   var(--teal);
}
/* The components ship z-index 40/50 — beneath IDN overlays. Lift the pair
   above everything (top IDN layer is 100000). */
#os-cart-host .os-cart-overlay { z-index: 100001 !important; }
#os-cart-host os-cart-slideout .os-cart-slideout { z-index: 100002 !important; }
/* The hidden trigger button — programmatic open only, never visible. */
#os-cart-trigger {
  position: fixed; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); opacity: 0; pointer-events: none;
}
/* Mobile ≤640px: full-width sheet (best small-screen cart UX). */
@media (max-width: 640px) {
  :root { --os-cart-width: 100vw; }
}

/* ── F370 · THE $70,000,000,000 CART — structural polish (both themes) ─────
   The component's own markup, restyled with IDN's layered-depth language:
   glass panel, display-type header, brand-gradient checkout, product tiles
   that feel like the regimen shelf. Light DOM → plain selectors, no !important
   except where the bundle inlines styles. */
#os-cart-host .os-cart-slideout {
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--teal) 4%, transparent), transparent 220px),
    var(--os-cart-bg) !important;
  border-left: 1px solid var(--border);
  box-shadow: -30px 0 90px rgba(0, 0, 0, 0.5), var(--shadow-lg) !important;
}
[data-theme="light"] #os-cart-host .os-cart-slideout {
  box-shadow: -24px 0 70px rgba(20, 50, 120, 0.18) !important;
}
/* Overlay: deeper, blurred — the portal recedes behind the purchase moment */
#os-cart-host .os-cart-overlay {
  -webkit-backdrop-filter: blur(14px) saturate(120%) !important;
  backdrop-filter: blur(14px) saturate(120%) !important;
}
/* Header — display face + hairline, like every IDN sheet */
#os-cart-host .os-cart-header {
  padding: 18px 20px 14px !important;
  border-bottom: 1px solid var(--hairline);
}
#os-cart-host .os-cart-title,
#os-cart-host .os-cart-header > span:first-child {
  font-family: var(--font-display) !important;
  font-size: 20px !important; font-weight: 700 !important;
  letter-spacing: -0.02em;
  background: var(--grad-text);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent !important;
}
/* Close button — the bundle inlines fill="#020617" on the ✕ (invisible on
   dark). Take the SVG over entirely and give the button a real hit state. */
/* IDN's standard popup ✕ (mirrors .modal-close): bordered pill, muted → text
   on hover with the signature 90° spin. Overrides the bundle's bare 40px box. */
#os-cart-host .os-cart-close {
  width: 34px !important; height: 34px !important;
  top: 12px; right: 14px;
  border-radius: 11px;
  border: 1px solid var(--border) !important;
  background: var(--fill-1) !important;
  color: var(--muted);
  transition: color .2s, border-color .2s, background .2s, transform .3s var(--ease-spring);
}
#os-cart-host .os-cart-close:hover {
  color: var(--text);
  border-color: var(--border-hi) !important;
  background: var(--fill-hover) !important;
  transform: rotate(90deg);
}
#os-cart-host .os-cart-close:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
#os-cart-host .os-cart-close svg { width: 15px !important; height: 15px !important; }
#os-cart-host .os-cart-close svg,
#os-cart-host .os-cart-close svg path { fill: currentColor !important; }
@media (prefers-reduced-motion: reduce) {
  #os-cart-host .os-cart-close { transition: none; }
  #os-cart-host .os-cart-close:hover { transform: none; }
}
/* The quantity dropdown trigger (bits-select) — pointless for the single
   IDNutrition line; quantity lives on the Plan page. */
#os-cart-host [data-select-trigger] { display: none !important; }
/* Section titles — quiet, tracked-out labels */
#os-cart-host .os-cart-section-title {
  font-size: 11.5px !important; font-weight: 700 !important;
  letter-spacing: 0.09em; text-transform: uppercase;
  color: var(--muted) !important;
}
/* Line items — regimen-shelf tiles: soft card, hairline, product glow */
#os-cart-host .os-cart-item {
  position: relative;   /* anchors the absolute trash can to THIS tile */
  background: var(--grad-card);
  border: 1px solid var(--border-soft);
  border-radius: 16px;
  padding: 12px !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
[data-theme="light"] #os-cart-host .os-cart-item {
  background: #ffffff;
  border-color: rgba(16, 42, 98, 0.10);
  box-shadow: 0 6px 18px -10px rgba(20, 50, 120, 0.14);
}
#os-cart-host .os-cart-item-image {
  background: radial-gradient(120% 120% at 30% 20%, color-mix(in srgb, var(--teal) 14%, transparent), transparent 70%), var(--surface-3) !important;
  border: 1px solid var(--border-soft) !important;
}
[data-theme="light"] #os-cart-host .os-cart-item-image { background: #f2f7ff !important; }
#os-cart-host .os-cart-item-name {
  font-family: var(--font-display) !important;
  letter-spacing: -0.01em;
  font-size: 18px !important;
  font-weight: 700 !important;
  line-height: 1.25 !important;
}
#os-cart-host .os-cart-item-price {
  font-size: 16.5px !important;
  font-weight: 650 !important;
}
/* One-time tiles have breathing room — let the product art fill it. */
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-image {
  width: 82px !important;
  height: 82px !important;
  object-fit: cover;
  border-radius: 14px !important;
  align-self: center;
}
/* ── F377b · ONE-TIME TILE LAYOUT — use the real estate ─────────────────────
   Two tight rows beside the art instead of a tall loose stack:
     row 1 · name (left) + chip/price (right)
     row 2 · Subscribe (left) + qty stepper (right)
   The trash pins tighter into the corner; the details column centers against
   the 82px art so nothing floats in dead space. */
#os-cart-host .os-cart-item.idn-otp-line { align-items: center; }
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-details-controls {
  flex: 1 1 auto; min-width: 0;
  display: flex; flex-direction: column; justify-content: center; gap: 9px;
}
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-details {
  display: flex; align-items: center; gap: 10px;
  padding-right: 30px;   /* clears the corner trash */
}
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-details-name-desc {
  flex: 1 1 auto; min-width: 0;
}
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-name {
  overflow-wrap: break-word;   /* never truncate — wrap; the tile grows */
}
/* The vendor's raw number input duplicates our stepper — the count itself is
   click-to-type now. */
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-qty { display: none !important; }
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-price-group {
  flex: none; display: inline-flex; align-items: center; gap: 6px; margin: 0;
}
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-controls {
  display: flex; align-items: center; gap: 10px; flex-wrap: nowrap;
}
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-subscribe { margin: 0; }
/* Subscribe must never spill out of its pill */
#os-cart-host .os-cart-item-subscribe {
  flex: none !important;
  white-space: nowrap;
  width: auto !important;
  max-width: 100%;
  height: auto !important;
  min-height: 32px;
  padding: 5px 12px !important;
  line-height: 1.3 !important;
}
/* F377d · locally-subscribed line (frontend simulation until RedSky attaches
   plans): reads exactly like the IDNutrition subscription line. */
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-subscribe { display: none !important; }
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-qty { display: none !important; }
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-controls {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  justify-content: flex-start;
}
/* The cloned select hugs the LEFT edge, exactly like IDNutrition's — same
   grid the IDN tile uses: art+details row 1, controls span the full tile. */
#os-cart-host .os-cart-item.idn-local-sub {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 10px 12px;
  align-items: center;
}
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-details-controls { display: contents; }
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-image { grid-column: 1; grid-row: 1; }
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-details { grid-column: 2; grid-row: 1; }
#os-cart-host .os-cart-item.idn-local-sub .os-cart-item-controls { grid-column: 1 / -1; grid-row: 2; }
#os-cart-host .idn-local-wrap { margin: 0 auto 0 0 !important; }
/* "SUBSCRIPTIONS · Cancel at any time" — the shared reassurance when 2+ subs */
#os-cart-host .idn-sub-cancel {
  font-style: normal;
  font-weight: 600;
  text-transform: none;
  letter-spacing: 0.01em;
  color: var(--teal);
}
[data-theme="light"] #os-cart-host .idn-sub-cancel { color: #0b8f80; }
/* "= $X today" — what the first charge actually is (mixed carts only).
   In the SUMMARY total row it takes its own line (the three-part string
   crowded the "Total" label); the sticky actions row keeps it inline and
   lets it wrap naturally when narrow. */
#os-cart-host .idn-total-today {
  font-style: normal;
  font-weight: 700;
  margin-left: 6px;
  color: var(--teal);
  white-space: nowrap;
}
[data-theme="light"] #os-cart-host .idn-total-today { color: #0b8f80; }
#os-cart-host .os-cart-summary-total .os-cart-summary-row-value { text-align: right; }
#os-cart-host .os-cart-summary-total .idn-total-today {
  display: block;
  margin-left: 0;
  margin-top: 2px;
}
#os-cart-host .os-cart-summary-row.os-cart-summary-total { gap: 12px; align-items: baseline; }
#os-cart-host .os-cart-summary-actions-total-row { flex-wrap: wrap; row-gap: 2px; }
/* Trash — tucked into the true corner of the TILE (the vendor's inner
   .os-cart-item-details is position:relative and steals the anchor). */
#os-cart-host .os-cart-item .os-cart-item-details,
#os-cart-host .os-cart-item .os-cart-item-details-controls { position: static !important; }
#os-cart-host .os-cart-item.idn-otp-line .os-cart-item-remove {
  top: 6px !important; right: 6px !important;
}
@media (max-width: 480px) {
  #os-cart-host .os-cart-item.idn-otp-line .os-cart-item-image { width: 66px !important; height: 66px !important; }
  #os-cart-host .os-cart-item.idn-otp-line .os-cart-item-details { flex-wrap: wrap; gap: 4px; }
}
/* Remove-item trash — pinned to the TILE's top-right, EXACT .ov-tp-trash
   aesthetic (frosted dark glass pill, white glyph, danger hover lift). */
#os-cart-host .os-cart-item-remove {
  position: absolute !important;
  top: 8px !important; right: 8px !important;
  left: auto !important; bottom: auto !important;
  width: 30px; height: 30px;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0; cursor: pointer;
  border-radius: 999px !important;
  color: #fff;
  background: color-mix(in srgb, #0b1020 52%, transparent) !important;
  border: 1px solid color-mix(in srgb, #fff 30%, transparent) !important;
  box-shadow: 0 4px 14px -6px rgba(2, 8, 26, .6), inset 0 1px 0 color-mix(in srgb, #fff 22%, transparent);
  backdrop-filter: blur(9px) saturate(150%); -webkit-backdrop-filter: blur(9px) saturate(150%);
  transition: border-color .18s ease, background .18s ease, color .18s ease, transform .14s var(--ease-spring);
}
#os-cart-host .os-cart-item-remove svg { width: 15px; height: 15px; }
#os-cart-host .os-cart-item-remove svg path { fill: #fff !important; }
#os-cart-host .os-cart-item:hover .os-cart-item-remove { border-color: color-mix(in srgb, var(--danger) 65%, transparent) !important; }
#os-cart-host .os-cart-item-remove:hover {
  background: color-mix(in srgb, var(--danger) 26%, #0b1020) !important;
  border-color: var(--danger) !important;
  transform: translateY(-1px);
}
#os-cart-host .os-cart-item-remove:hover svg path { fill: var(--danger) !important; }
#os-cart-host .os-cart-item-remove:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
/* Keep the name/price clear of the pinned trash can */
#os-cart-host .os-cart-item-details { padding-right: 34px; }
@media (prefers-reduced-motion: reduce) {
  #os-cart-host .os-cart-item-remove { transition: none; }
  #os-cart-host .os-cart-item-remove:hover { transform: none; }
}
/* Inline SVG chevron/refresh glyphs ship fill="#025712" (invisible on dark) */
#os-cart-host .os-select-refresh-icon,
#os-cart-host .os-select-refresh-icon path,
#os-cart-host .os-subscribe-select-chevron-down-icon,
#os-cart-host .os-subscribe-select-chevron-down-icon path,
#os-cart-host .os-select-chevron-down-icon,
#os-cart-host .os-select-chevron-down-icon path { fill: var(--teal) !important; }
/* F373 · the longer "Every month recurring" copy needs room — the vendor
   wrapper ships a fixed width that clips it */
#os-cart-host .os-select-wrapper { width: auto !important; min-width: 214px; }
/* F373 · "Cancel at any time" — quiet reassurance BELOW a subscribing line's
   frequency select (inserted by osCartAugment; the controls row wraps so the
   full-width note lands on its own line) */
#os-cart-host .os-cart-item-controls { flex-wrap: wrap; }
#os-cart-host .idn-freq-note {
  flex: 1 0 100%;
  display: block;
  margin-top: 2px;
  padding-left: 2px;
  font: 500 11.5px/1.4 var(--font-body);
  color: var(--muted);
  letter-spacing: 0.01em;
}
/* Subscribed line: the vendor's option-less select hides behind a static
   "Delivers Monthly" pill with the red × fused to its right edge — one
   control group, so the × clearly reverts THIS subscription to one-time. */
#os-cart-host .idn-freq-hidden { display: none !important; }
#os-cart-host .idn-checkout-hidden { display: none !important; }
#os-cart-host .idn-freq-group { display: inline-flex; align-items: stretch; }
#os-cart-host .idn-freq-static {
  display: inline-flex; align-items: center;
  height: 32px; padding: 0 12px;
  font: 600 13.5px/1 var(--font-body);
  letter-spacing: 0.01em;
  color: var(--teal);
  background: var(--surface-3);
  border: 1px solid var(--border);
  border-radius: 10px 0 0 10px;
  border-right: 0;
  white-space: nowrap;
}
[data-theme="light"] #os-cart-host .idn-freq-static { color: #0b8f80; background: #ffffff; }
#os-cart-host .idn-sub-x {
  display: inline-flex; align-items: center; justify-content: center;
  height: 32px; width: 30px;
  padding: 0; cursor: pointer;
  font: 700 17px/1 var(--font-body);
  color: var(--danger);
  border-radius: 0 10px 10px 0;
  background: color-mix(in srgb, var(--danger) 12%, var(--surface-3));
  border: 1px solid color-mix(in srgb, var(--danger) 55%, transparent);
  transition: background .18s ease, border-color .18s ease;
}
#os-cart-host .idn-sub-x:hover {
  background: color-mix(in srgb, var(--danger) 28%, var(--surface-3));
  border-color: var(--danger);
}
#os-cart-host .idn-sub-x:focus-visible { outline: 2px solid var(--danger); outline-offset: 2px; }
#os-cart-host .idn-sub-x:disabled { opacity: .55; cursor: default; }
@media (prefers-reduced-motion: reduce) {
  #os-cart-host .idn-sub-x { transition: none; }
}
/* Frequency select + qty trigger — proper IDN form controls */
#os-cart-host .os-cart-item-frequency-select,
#os-cart-host [data-select-trigger] {
  background: var(--surface-3) !important;
  color: var(--text) !important;
  border: 1px solid var(--border) !important;
  border-radius: 10px !important;
  transition: border-color .18s ease, background .18s ease;
}
[data-theme="light"] #os-cart-host .os-cart-item-frequency-select,
[data-theme="light"] #os-cart-host [data-select-trigger] { background: #ffffff !important; }
#os-cart-host .os-cart-item-frequency-select:hover,
#os-cart-host [data-select-trigger]:hover { border-color: var(--border-hi) !important; }
/* Summary block — receipt well */
#os-cart-host .os-cart-summary {
  background: var(--well);
  border: 1px solid var(--border-soft);
  border-radius: 16px;
  padding: 6px 10px !important;
}
[data-theme="light"] #os-cart-host .os-cart-summary { background: #f4f8fe; border-color: rgba(16, 42, 98, 0.08); }
#os-cart-host .os-cart-summary-total .os-cart-summary-row-value {
  font-family: var(--font-display) !important;
  font-size: 17px !important; font-weight: 700 !important;
}
/* Actions footer — hairline top + the money total in display type */
#os-cart-host .os-cart-summary-actions { border-top: 1px solid var(--hairline); padding-top: 14px !important; }
#os-cart-host .os-cart-summary-actions-total-row {
  font-family: var(--font-display) !important;
  font-size: 16px !important;
}
/* THE checkout button — brand gradient + glow, the flagship CTA */
#os-cart-host .os-cart-btn-primary {
  background: var(--grad-brand) !important;
  color: var(--ink-on-brand) !important;
  font-family: var(--font-display) !important;
  font-weight: 700 !important; letter-spacing: 0.01em;
  border: none !important;
  box-shadow: 0 12px 30px -10px var(--teal-glow), inset 0 1px 0 rgba(255, 255, 255, 0.25);
  transition: transform .2s var(--ease-spring), box-shadow .2s ease, filter .2s ease;
}
#os-cart-host .os-cart-btn-primary:hover {
  filter: brightness(1.06);
  transform: translateY(-1px);
  box-shadow: 0 16px 38px -10px var(--teal-glow), inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
#os-cart-host .os-cart-btn-primary:active { transform: translateY(0); }
#os-cart-host .os-cart-btn-link { border-radius: 12px; }
#os-cart-host .os-cart-btn-link:hover { background: var(--fill-hover); }
/* Empty state — display face */
#os-cart-host .os-cart-empty-header { font-family: var(--font-display) !important; letter-spacing: -0.02em; }
@media (prefers-reduced-motion: reduce) {
  #os-cart-host .os-cart-btn-primary { transition: none; }
}
/* ── F372 · "What's inside" — supplement names + quantities under IDNutrition.
   The box must span the FULL tile width — below the image + price row, above
   the frequency/qty controls. The component nests those in a right-hand
   column, so the tile that carries a box becomes a grid and the Svelte
   wrapper collapses via display:contents (pure CSS — re-render safe). */
#os-cart-host .os-cart-item:has(.idn-cart-contents) {
  display: grid;
  grid-template-columns: auto 1fr;
  column-gap: 12px; row-gap: 10px;
  align-items: start;
}
#os-cart-host .os-cart-item:has(.idn-cart-contents) .os-cart-item-details-controls { display: contents; }
#os-cart-host .os-cart-item:has(.idn-cart-contents) .os-cart-item-image { grid-column: 1; grid-row: 1; }
#os-cart-host .os-cart-item:has(.idn-cart-contents) .os-cart-item-details { grid-column: 2; grid-row: 1; }
#os-cart-host .os-cart-item:has(.idn-cart-contents) .idn-cart-contents { grid-column: 1 / -1; grid-row: 2; }
#os-cart-host .os-cart-item:has(.idn-cart-contents) .os-cart-item-controls { grid-column: 1 / -1; grid-row: 3; }
#os-cart-host .idn-cart-contents {
  display: flex; flex-direction: column; gap: 4px;
  padding: 10px 12px;
  background: var(--well);
  border: 1px solid var(--border-soft);
  border-radius: 12px;
}
[data-theme="light"] #os-cart-host .idn-cart-contents { background: #f4f8fe; border-color: rgba(16, 42, 98, 0.08); }
#os-cart-host .idn-cc-title {
  font: 700 10.5px/1.3 var(--font-body);
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--muted); margin-bottom: 2px;
}
#os-cart-host .idn-cc-row {
  display: flex; align-items: baseline; gap: 8px;
  font: 500 12.5px/1.45 var(--font-body); color: var(--text-2);
}
#os-cart-host .idn-cc-name { flex: 1 1 auto; }
/* À-la-carte "Added" chip — soft teal-tinted pill, readable in both themes.
   Sits flush left of the quantity so every row's right edge stays aligned. */
#os-cart-host .idn-cc-added {
  flex: none;
  display: inline-block;
  padding: 1px 8px 2px;
  font: 600 10.5px/1.4 var(--font-body);
  font-style: normal;
  letter-spacing: 0.01em;
  color: var(--teal);
  background: color-mix(in srgb, var(--teal) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 28%, transparent);
  border-radius: 99px;
  vertical-align: 0.5px;
}
[data-theme="light"] #os-cart-host .idn-cc-added {
  color: #0b8f80;
  background: rgba(11, 143, 128, 0.09);
  border-color: rgba(11, 143, 128, 0.25);
}
#os-cart-host .idn-cc-qty { flex: none; font: 700 12px/1 var(--font-display); color: var(--teal); }
[data-theme="light"] #os-cart-host .idn-cc-qty { color: #0b8f80; }
/* ── F372 · "Explore other products" — secondary CTA above the close link.
   Gradient hairline ring + soft brand wash: clearly premium, clearly not the
   primary Checkout. */
#os-cart-host .idn-cart-explore {
  appearance: none; -webkit-appearance: none; cursor: pointer; width: 100%;
  position: relative;
  display: flex; align-items: center; justify-content: center; gap: 8px;
  text-decoration: none; text-align: center;
  font-family: var(--font-display) !important;
  font-weight: 700; font-size: 14px; letter-spacing: 0.01em;
  color: var(--text) !important;
  background:
    linear-gradient(color-mix(in srgb, var(--teal) 7%, var(--os-cart-bg)), color-mix(in srgb, var(--blue) 7%, var(--os-cart-bg))) padding-box,
    var(--grad-brand-3) border-box !important;
  border: 1px solid transparent !important;
  border-radius: 12px;
  box-shadow: 0 6px 18px -12px var(--teal-glow);
  transition: box-shadow .2s ease, transform .2s var(--ease-spring), filter .2s ease;
}
#os-cart-host .idn-cart-explore svg { width: 15px; height: 15px; flex: none; }
#os-cart-host .idn-cart-explore:hover {
  transform: translateY(-1px);
  filter: brightness(1.05);
  box-shadow: 0 10px 26px -12px var(--teal-glow);
}
#os-cart-host .idn-cart-explore:active { transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
  #os-cart-host .idn-cart-explore { transition: none; }
}

/* ── F377 · ONE-TIME PURCHASE LINES — premium mixed-cart treatment ──────────
   One-time tiles carry a soft violet accent (vs the brand-teal subscription
   feel): tinted left rail, "One-time" chip beside the price, and a matching
   summary row. Fully tokenized — both themes resolve automatically. */
#os-cart-host .os-cart-item.idn-otp-line {
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--violet, #7c6cff) 7%, transparent) 0%, transparent 46%),
    var(--grad-card);
  border-color: color-mix(in srgb, var(--violet, #7c6cff) 22%, var(--border-soft));
  box-shadow: inset 3px 0 0 color-mix(in srgb, var(--violet, #7c6cff) 55%, transparent),
              inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
[data-theme="light"] #os-cart-host .os-cart-item.idn-otp-line {
  background:
    linear-gradient(90deg, rgba(108, 92, 231, 0.05) 0%, transparent 46%),
    #ffffff;
  border-color: rgba(108, 92, 231, 0.22);
  box-shadow: inset 3px 0 0 rgba(108, 92, 231, 0.45),
              0 6px 18px -10px rgba(20, 50, 120, 0.14);
}
/* One-Time Purchases section header echoes the accent. */
#os-cart-host .os-cart-section-title { position: relative; }
/* Summary "One-Time Purchase(s) Subtotal" row — same rhythm as the vendor
   rows, violet-tinted value so the split reads at a glance. */
#os-cart-host .idn-otp-row .os-cart-summary-row-value {
  color: var(--violet, #7c6cff);
  font-weight: 600;
}
[data-theme="light"] #os-cart-host .idn-otp-row .os-cart-summary-row-value { color: #5b4bd6; }
/* ── F377 · ONE-TIME QUANTITY STEPPER — exact .ov-tp-qty vibe (frosted dark
   glass pill, round white ± buttons, tabular count). Sits at the right edge
   of the controls row; IDNutrition never gets one (solo quantity). */
#os-cart-host .idn-otp-qty {
  display: inline-flex; align-items: center; gap: 1px;
  margin-left: auto;
  padding: 2px 3px; border-radius: 999px;
  background: color-mix(in srgb, #0b1020 52%, transparent);
  border: 1px solid color-mix(in srgb, #fff 30%, transparent);
  box-shadow: 0 4px 14px -6px rgba(2, 8, 26, .6), inset 0 1px 0 color-mix(in srgb, #fff 22%, transparent);
  backdrop-filter: blur(9px) saturate(150%); -webkit-backdrop-filter: blur(9px) saturate(150%);
  transition: border-color .18s ease, background .18s ease;
}
#os-cart-host .os-cart-item:hover .idn-otp-qty { border-color: color-mix(in srgb, var(--teal) 70%, transparent); }
#os-cart-host .idn-otp-qty button {
  display: grid; place-items: center; width: 21px; height: 21px; cursor: pointer;
  border: 0; border-radius: 50%; background: none; color: #fff;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 14px; font-weight: 800; line-height: 1;
  transition: background .15s ease, transform .12s ease;
}
#os-cart-host .idn-otp-qty button:hover:not([disabled]) { background: color-mix(in srgb, #fff 22%, transparent); transform: scale(1.08); }
#os-cart-host .idn-otp-qty button[disabled] { opacity: .35; cursor: default; }
#os-cart-host .idn-otp-qty b {
  min-width: 15px; text-align: center; color: #fff;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 12px; font-weight: 800;
  font-variant-numeric: tabular-nums;
  cursor: text;   /* tap the number → type a quantity */
  padding: 0 2px;
}
#os-cart-host .idn-otp-qty-input {
  width: 34px; height: 21px; text-align: center;
  border: 0; border-radius: 6px; outline: none;
  background: color-mix(in srgb, #fff 16%, transparent);
  color: #fff;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 12px; font-weight: 800;
  font-variant-numeric: tabular-nums;
  caret-color: var(--teal);
}
#os-cart-host .idn-otp-qty-input:focus { box-shadow: 0 0 0 2px color-mix(in srgb, var(--teal) 65%, transparent); }
@media (prefers-reduced-motion: reduce) {
  #os-cart-host .idn-otp-qty, #os-cart-host .idn-otp-qty button { transition: none; }
  #os-cart-host .idn-otp-qty button:hover:not([disabled]) { transform: none; }
}

/* ── F370 · TOP-RIGHT CART BUTTON (theme toggle transforms) ────────────────
   Same fixed pill as .acct-btn — in cart mode it carries the brand ring,
   the cart glyph, and a floating count badge. Both themes via tokens. */
.acct-btn.cart-mode {
  overflow: visible;
  color: var(--teal);
  border-color: color-mix(in srgb, var(--teal) 45%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 18%, transparent), 0 10px 26px -12px var(--teal-glow);
}
.acct-btn.cart-mode:hover { color: var(--teal); transform: translateY(-2px); }
[data-theme="light"] .acct-btn.cart-mode {
  background: #ffffff;
  color: #0b8f80;
  border-color: rgba(11, 143, 128, 0.4);
}
/* On the portal the fixed button sits inside the 66px .ov-topbar band —
   optically center it there ((66 − 44) / 2 = 11px). */
body.on-overview .acct-btn.cart-mode { top: max(11px, env(safe-area-inset-top)); }
/* While the fixed button is the cart, the account face rides IN the topbar
   (score chip's slot) — same 44px circle, in-flow, never the chip's shape. */
.acct-btn.acct-inline {
  position: static; top: auto; right: auto; z-index: auto;
  width: 44px; height: 44px; flex: none;
}
@media (max-width: 640px) {
  body.on-overview .acct-btn.acct-inline { width: 38px; height: 38px; }
}
.acct-btn .cart-count {
  position: absolute; top: -7px; right: -7px;
  min-width: 20px; height: 20px; padding: 0 5px;
  display: grid; place-items: center;
  border-radius: var(--r-pill);
  background: var(--grad-brand);
  color: var(--ink-on-brand);
  font: 700 11px/1 var(--font-display);
  letter-spacing: 0;
  border: 2px solid var(--bg-1);
  box-shadow: 0 4px 12px -4px var(--teal-glow);
  animation: cartCountIn .35s var(--ease-spring);
}
[data-theme="light"] .acct-btn .cart-count { border-color: #ffffff; }
@keyframes cartCountIn { from { transform: scale(.4); opacity: 0; } to { transform: scale(1); opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .acct-btn .cart-count { animation: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F381 · THE IDLIFE HEALTH REPORT — Passport (concise) + Atlas (expanded)
   Screen: cinematic left↔right deck. Print: top-to-bottom, one slide/page.
   Dual theme via tokens; Space Grotesk display + Inter body; reduced-motion
   safe; responsive at ≤640 / ≤1024 / desktop.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Hero path chooser ────────────────────────────────────────────────────*/
/* ── Report hero — personalized hail + destination-grade CTAs (F390) ──────*/
.hr-hail { max-width: 30ch; }
.hr-hail-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px;
  margin: 2px 0 4px; font: 500 13.5px/1.5 var(--font-body); color: var(--muted); }
.hr-hail-line b { font-family: var(--font-display); font-weight: 800; color: var(--text); }
.hr-hail-line i { font-style: normal; color: var(--muted-2); }

.hr-paths { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 20px 0 4px; }
.hr-path {
  position: relative; display: flex; align-items: center; gap: 16px; text-align: left;
  padding: 18px 20px; border-radius: var(--r-xl); cursor: pointer;
  border: 1px solid var(--border); background: var(--grad-card);
  box-shadow: var(--shadow-sm); overflow: hidden; isolation: isolate;
  transition: transform .28s var(--ease-out), border-color .28s, box-shadow .28s;
}
.hr-path::before { content: ''; position: absolute; inset: 0; z-index: -1; opacity: 0;
  transition: opacity .3s; pointer-events: none; }
.hr-path--passport::before { background:
  radial-gradient(130% 170% at 0% 0%, color-mix(in srgb, var(--teal) 18%, transparent), transparent 62%); }
.hr-path--atlas::before { background:
  radial-gradient(130% 170% at 0% 0%, color-mix(in srgb, var(--violet) 18%, transparent), transparent 62%); }
/* signature edge — a colored rail that ignites on hover */
.hr-path::after { content: ''; position: absolute; left: 0; top: 14px; bottom: 14px; width: 3px;
  border-radius: 0 3px 3px 0; opacity: .55; transition: opacity .3s, top .3s, bottom .3s; }
.hr-path--passport::after { background: var(--grad-brand); }
.hr-path--atlas::after { background: linear-gradient(180deg, var(--blue), var(--violet)); }
.hr-path:hover { transform: translateY(-3px); border-color: var(--border-hi); box-shadow: var(--shadow-md); }
.hr-path:hover::before { opacity: 1; }
.hr-path:hover::after { opacity: 1; top: 8px; bottom: 8px; }
.hr-path-art { flex: 0 0 auto; width: 52px; height: 52px; display: grid; place-items: center;
  border-radius: 16px; color: var(--ink-on-brand); transition: transform .3s var(--ease-out); }
.hr-path:hover .hr-path-art { transform: scale(1.06) rotate(-3deg); }
.hr-path--passport .hr-path-art { background: var(--grad-brand); box-shadow: 0 12px 30px -10px var(--teal-glow); }
.hr-path--atlas .hr-path-art { background: linear-gradient(135deg, var(--blue) 0%, var(--violet) 100%); box-shadow: 0 12px 30px -10px var(--violet-soft); }
.hr-path-art svg { width: 24px; height: 24px; }
.hr-path-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.hr-path-kicker { font: 700 9.5px/1 var(--font-display); letter-spacing: .16em; text-transform: uppercase; color: var(--muted-2); }
.hr-path--passport .hr-path-kicker { color: var(--teal); }
.hr-path--atlas .hr-path-kicker { color: var(--violet); }
.hr-path-title { font: 700 18px/1.2 var(--font-display); letter-spacing: -0.01em; color: var(--text); }
.hr-path-sub { font: 500 12px/1.45 var(--font-body); color: var(--muted); }
.hr-path-go { flex: 0 0 auto; width: 34px; height: 34px; display: grid; place-items: center;
  border-radius: 50%; border: 1px solid var(--border); color: var(--muted);
  transition: transform .28s var(--ease-out), color .2s, border-color .2s, background .2s; }
.hr-path-go svg { width: 16px; height: 16px; }
.hr-path:hover .hr-path-go { transform: translateX(4px); color: var(--ink-on-brand); border-color: transparent; }
.hr-path--passport:hover .hr-path-go { background: var(--grad-brand); }
.hr-path--atlas:hover .hr-path-go { background: linear-gradient(135deg, var(--blue), var(--violet)); }

/* desktop report overview — chrome quiets down: no duplicate shield pill.
   The account button stays: it is the member's only route to settings. */
@media (min-width: 1025px) {
  body.on-results .results-topbar .shield-badge { display: none; }
}

/* ── Overlay shell ────────────────────────────────────────────────────────*/
body.hr-open { overflow: hidden !important; }
#hr-overlay {
  position: fixed; inset: 0; z-index: 1200; display: flex; flex-direction: column;
  background:
    radial-gradient(120% 90% at 80% -10%, color-mix(in srgb, var(--blue) 10%, transparent), transparent 55%),
    radial-gradient(110% 90% at 10% 110%, color-mix(in srgb, var(--teal) 10%, transparent), transparent 55%),
    var(--bg-1);
  opacity: 0; transition: opacity .24s var(--ease-out);
}
#hr-overlay.in { opacity: 1; }
@media (prefers-reduced-motion: reduce) { #hr-overlay { transition: none; } }

.hr-chrome {
  flex: 0 0 auto; display: flex; align-items: center; gap: 16px;
  padding: max(12px, env(safe-area-inset-top)) clamp(16px, 3vw, 32px) 12px;
  border-bottom: 1px solid var(--hairline);
}
.hr-chrome-brand { display: inline-flex; align-items: center; gap: 12px; white-space: nowrap; flex: 0 0 auto; }
.hr-brandhome { cursor: pointer; }
.hr-brandhome .id-logo-svg { width: 24px; height: 24px; }
.hr-brandhome .ov-brandid-word { font: 800 15px/1 var(--font-display); letter-spacing: -.01em; color: var(--text); }
.hr-act--overview svg { transform: none; }
.hr-chrome-mid { flex: 1; display: flex; align-items: center; gap: 14px; min-width: 0; }
.hr-counter { font: 600 12px/1 var(--font-display); color: var(--muted); white-space: nowrap; }
.hr-counter b { color: var(--text); }
.hr-progress { flex: 1; height: 3px; border-radius: 99px; background: var(--track); overflow: hidden; }
#hr-progress-fill { display: block; height: 100%; width: 0; border-radius: 99px;
  background: var(--grad-brand-3); transition: width .3s var(--ease-out); }
.hr-chrome-actions { display: flex; align-items: center; gap: 8px; }
.hr-act { display: inline-flex; align-items: center; gap: 7px; padding: 8px 14px;
  border-radius: var(--r-pill); border: 1px solid var(--border); background: var(--fill-1);
  color: var(--text-2); font: 600 12.5px/1 var(--font-display); cursor: pointer;
  transition: background .2s, border-color .2s, color .2s; }
.hr-act:hover { background: var(--fill-hover); border-color: var(--border-hi); color: var(--text); }
.hr-act[hidden] { display: none !important; }   /* display:inline-flex beats the hidden attr otherwise */
.hr-act svg { width: 15px; height: 15px; }
.hr-act--close { width: 36px; height: 36px; padding: 0; justify-content: center; border-radius: 50%; }
.hr-act--close svg { width: 16px; height: 16px; }
/* Home — an explicit "back to Your health report is ready" affordance.
   Desktop already reads the Close (X) button clearly; mobile/tablet chrome
   collapses every action to an icon, so Home earns its own dedicated button
   there to stay unambiguous from Print/Contents/Close. */
.hr-act--home { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 34%, var(--border)); }
.hr-act--home:hover { color: var(--teal); border-color: var(--teal); }
@media (min-width: 1025px) { .hr-act--home { display: none; } }

/* ── Stage + slides (horizontal on screen) ────────────────────────────────*/
.hr-stage-clip { flex: 1; min-height: 0; overflow: hidden; }
.hr-stage { display: flex; height: 100%; transition: transform .52s var(--ease-lux); will-change: transform; }
.hr-slide {
  flex: 0 0 100%; min-width: 100%; height: 100%; overflow-y: auto; overflow-x: hidden;
  padding: clamp(22px, 4vh, 48px) clamp(20px, 6vw, 96px) 84px;
  display: flex; flex-direction: column; gap: 14px;
  scrollbar-width: thin;
}
.hr-slide > * { max-width: 980px; margin-inline: auto; width: 100%; }

/* nav arrows */
.hr-nav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 5;
  width: 52px; height: 52px; border-radius: 50%; cursor: pointer;
  display: grid; place-items: center;
  border: 1px solid var(--border); color: var(--text);
  background: var(--glass-bg); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  box-shadow: var(--shadow-md);
  transition: transform .22s var(--ease-out), border-color .2s, opacity .2s;
}
.hr-nav svg { width: 20px; height: 20px; }
.hr-nav[hidden] { display: none; }   /* fully removed at the first/last page (not just dimmed) */
.hr-nav--prev { left: clamp(10px, 2vw, 28px); }
.hr-nav--next { right: clamp(10px, 2vw, 28px); }
.hr-nav:hover:not(:disabled) { transform: translateY(-50%) scale(1.08); border-color: var(--border-hi); }
.hr-nav:disabled { opacity: .25; cursor: default; }

/* ── Shared slide typography ─────────────────────────────────────────────*/
.hr-eyebrow { display: block; font: 700 11px/1.3 var(--font-display); letter-spacing: .24em;
  text-transform: uppercase; color: var(--teal); margin-bottom: 2px; }
/* inline icons inside labels are decorative — never let them size to the box */
.hr-eyebrow svg, .hr-microlabel svg, .hr-fineprint svg {
  width: 13px; height: 13px; display: inline-block; vertical-align: -2px; flex: none; }
.hr-display { font: 700 clamp(34px, 5.6vw, 62px)/1.04 var(--font-display); letter-spacing: -0.025em; color: var(--text); }
.hr-h2 { font: 700 clamp(24px, 3.4vw, 38px)/1.1 var(--font-display); letter-spacing: -0.02em; color: var(--text); }
.hr-h3 { font: 700 clamp(19px, 2.4vw, 26px)/1.16 var(--font-display); letter-spacing: -0.015em; color: var(--text); }
.hr-dim { color: var(--muted); font-size: clamp(13.5px, 1.5vw, 15px); line-height: 1.55; }
.hr-body { color: var(--text-2); font-size: clamp(14px, 1.6vw, 16px); line-height: 1.62; }
.hr-fineprint { color: var(--muted-2); font-size: 11.5px; line-height: 1.5; margin-top: auto; }
.hr-microlabel { display: block; font: 700 10px/1.3 var(--font-display); letter-spacing: .2em;
  text-transform: uppercase; color: var(--muted); }
.hr-accentline { border-left: 3px solid var(--teal); padding-left: 14px; }

.hr-foot { display: flex; align-items: center; gap: 12px; margin-top: auto; padding-top: 18px;
  border-top: 1px solid var(--hairline); color: var(--muted-2); font: 600 10.5px/1 var(--font-display);
  letter-spacing: .1em; }
.hr-foot-brand b { color: var(--teal); }
.hr-foot-title { flex: 1; text-align: center; letter-spacing: .16em; text-transform: uppercase; }
.hr-foot-page b { color: var(--muted); letter-spacing: .12em; }
.hr-foot--empty { display: none !important; }

/* chips */
.hr-chiprow { display: flex; flex-wrap: wrap; gap: 6px; }
.hr-chip { display: inline-flex; align-items: center; gap: 5px; padding: 5px 10px;
  border-radius: var(--r-pill); border: 1px solid var(--border); background: var(--fill-1);
  font: 600 11px/1 var(--font-display); color: var(--text-2); letter-spacing: .04em; }
.hr-chip svg { width: 12px; height: 12px; color: var(--teal); }

/* Band accent colors — an ascending PROGRESSION, never a verdict. The lowest
   band is "Ready to Build", so it wears brand violet rather than alarm red. */
.b-thrive { --hrband: var(--teal); }
.b-strong { --hrband: var(--shield); }
.b-build  { --hrband: var(--blue); }
.b-prio   { --hrband: var(--blue-2); }
.b-coord  { --hrband: var(--violet); }

/* ── Contents (both editions) ────────────────────────────────────────*/
.hr-tocgroup { display: flex; flex-direction: column; gap: 8px; }
.hr-tocgroup + .hr-tocgroup { margin-top: 10px; }
.hr-toclist { display: flex; flex-direction: column; gap: 7px; }
.hr-tocgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 7px; }
.hr-tocrow { display: flex; align-items: center; gap: 13px; padding: 12px 16px; text-align: left;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1);
  cursor: pointer; transition: transform .2s var(--ease-out), background .18s, border-color .18s; }
.hr-tocrow:hover { transform: translateX(4px); background: var(--fill-hover); border-color: var(--border-hi); }
.hr-tocgrid .hr-tocrow:hover { transform: translateY(-2px); }
.hr-tocrow.chosen { border-color: color-mix(in srgb, var(--teal) 45%, transparent); background: var(--teal-soft); }
.hr-tocno { flex: 0 0 auto; min-width: 30px; font: 700 13px/1 var(--font-display); color: var(--teal); letter-spacing: .04em; }
.hr-tocrow.chosen .hr-tocno { color: var(--teal); }
.hr-tocmain { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.hr-tocmain b { font: 700 14.5px/1.25 var(--font-display); color: var(--text); }
.hr-tocmain small { font-size: 11.5px; line-height: 1.4; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hr-tocpage { flex: 0 0 auto; font: 700 11px/1 var(--font-display); letter-spacing: .12em; color: var(--muted-2); }

/* ── Band spectrum ────────────────────────────────────────────────────*/
.hr-bandspec { display: flex; flex-direction: column; gap: 10px; padding: 18px 20px 14px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-bandspec-track { position: relative; height: 10px; margin-top: 14px; }
.hr-bandseg { position: absolute; top: 0; height: 100%; border-radius: 99px;
  background: color-mix(in srgb, var(--hrband) 34%, transparent); }
.hr-bandmark { position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: 2; }
.hr-bandmark b { display: grid; place-items: center; min-width: 40px; height: 28px; padding: 0 8px;
  border-radius: var(--r-pill); background: var(--grad-brand); color: var(--ink-on-brand);
  font: 700 13px/1 var(--font-display); box-shadow: 0 6px 18px -6px var(--teal-glow); }
.hr-bandspec-labels { position: relative; height: 40px; }
.hr-bandspec-labels span { position: absolute; top: 0; text-align: center;
  font: 600 9.5px/1.25 var(--font-display); letter-spacing: .04em; text-transform: uppercase;
  color: var(--muted-2); padding: 0 3px; }
.hr-bandspec-labels span.on { color: var(--text); font-weight: 700; }
.hr-bandspec-labels i { display: block; margin-top: 3px; font-style: normal;
  font-size: 9px; letter-spacing: .06em; color: var(--muted-2); opacity: .85; }
.hr-bandspec-labels span.on i { color: var(--hrband, var(--teal)); opacity: 1; }

/* ── Findings (Passport) ─────────────────────────────────────────────────*/
.hr-tally { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.hr-tallycard { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 14px 10px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); text-align: center; }
.hr-tallycard b { font: 700 28px/1 var(--font-display); }
.hr-tallycard span { font: 700 9.5px/1.3 var(--font-display); letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.hr-tallycard.t-teal b { color: var(--shield); }
.hr-tallycard.t-amber b { color: var(--warning); }
.hr-tallycard.t-danger b { color: var(--danger); }
.hr-tallycard.t-dim b { color: var(--muted); }
.hr-findings { display: flex; flex-direction: column; gap: 12px; }
.hr-finding { display: flex; flex-direction: column; gap: 8px; padding: 18px 20px;
  border-radius: var(--r-lg); border: 1px solid var(--border); border-left: 3px solid var(--border);
  background: var(--grad-card); box-shadow: var(--shadow-sm); }
.hr-finding.f-danger { border-left-color: var(--danger); }
.hr-finding.f-amber { border-left-color: var(--warning); }
.hr-finding.f-teal { border-left-color: var(--shield); }
.hr-finding-top { display: flex; align-items: center; gap: 10px; }
.hr-finding-domain { margin-left: auto; font: 600 11.5px/1 var(--font-display); color: var(--muted); }
.hr-finding-quote { margin: 0; font: 600 clamp(15px, 1.9vw, 18px)/1.4 var(--font-display); color: var(--text); }
.hr-finding-story { font-size: 13px; line-height: 1.58; color: var(--text-2); }

/* ── Move meta (leverage stats) ────────────────────────────────────────*/
.hr-move-meta { display: flex; flex-wrap: wrap; gap: 8px; }
.hr-movestat { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px;
  border-radius: var(--r-pill); border: 1px solid var(--hairline); background: var(--fill-2);
  font: 600 11px/1 var(--font-display); color: var(--muted); letter-spacing: .04em; }
.hr-movestat svg { width: 12px; height: 12px; color: var(--teal); }

/* ── Atlas · Overture cards ─────────────────────────────────────────────*/
.hr-ovt-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.hr-ovt-card { display: flex; flex-direction: column; gap: 7px; padding: 18px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--grad-card);
  box-shadow: var(--shadow-sm); }
.hr-ovt-ic { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 11px; }
.hr-ovt-ic svg { width: 17px; height: 17px; }
.hr-ovt-ic.t-teal { color: var(--shield); background: var(--shield-soft); }
.hr-ovt-ic.t-amber { color: var(--warning); background: color-mix(in srgb, var(--warning) 10%, transparent); }
.hr-ovt-ic.t-violet { color: var(--violet); background: var(--violet-soft); }
.hr-ovt-card b { font: 700 13.5px/1.25 var(--font-display); color: var(--text); }
.hr-ovt-card p { font-size: 12.5px; line-height: 1.5; color: var(--text-2); }

/* ── Atlas · Scoreboard ────────────────────────────────────────────────*/
.hr-sb { display: flex; flex-direction: column; gap: 7px; }
.hr-sb-row { display: grid; grid-template-columns: minmax(150px, 210px) 1fr 44px minmax(120px, max-content);
  align-items: center; gap: 14px; padding: 11px 16px; text-align: left; cursor: pointer;
  border-radius: var(--r-md); border: 1px solid var(--hairline); background: var(--fill-1);
  transition: transform .2s var(--ease-out), background .18s, border-color .18s; }
.hr-sb-row:hover { transform: translateX(4px); background: var(--fill-hover); border-color: var(--border-hi); }
.hr-sb-row.chosen { border-color: color-mix(in srgb, var(--teal) 40%, transparent); background: var(--teal-soft); }
.hr-sb-name { display: inline-flex; align-items: center; gap: 7px;
  font: 700 13.5px/1.2 var(--font-display); color: var(--text); }
.hr-sb-star { color: var(--teal); font-style: normal; font-size: 12px; }
.hr-sb-track { position: relative; height: 8px; border-radius: 99px; background: var(--track); overflow: hidden; }
.hr-sb-track b { position: absolute; inset: 0 auto 0 0; border-radius: 99px;
  background: linear-gradient(90deg, color-mix(in srgb, var(--hrband, var(--teal)) 55%, transparent), var(--hrband, var(--teal))); }
.hr-sb-score { font: 700 16px/1 var(--font-display); color: var(--text); text-align: right; }
.hr-sb-band { font: 600 10.5px/1.3 var(--font-display); letter-spacing: .1em; text-transform: uppercase; color: var(--muted); }
.hr-sb-legend { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; margin-top: 4px; }
.hr-sb-legend em { font-style: normal; margin-left: 5px; padding: 1px 6px; border-radius: 99px;
  font: 700 9.5px/1.4 var(--font-display); letter-spacing: .05em;
  color: var(--hrband, var(--muted)); background: color-mix(in srgb, var(--hrband, var(--muted)) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--hrband, var(--muted)) 32%, transparent); }
.hr-sb-legend span { display: inline-flex; align-items: center; gap: 6px;
  font: 600 10.5px/1 var(--font-display); letter-spacing: .06em; color: var(--muted); }
.hr-sb-legend i { width: 9px; height: 9px; border-radius: 50%; background: var(--hrband, var(--muted)); }

/* ── Atlas · Chapter spread — masthead + finding cards ────────────────────*/
.hr-chs-mast { display: flex; align-items: center; gap: clamp(14px, 2vw, 26px);
  padding: clamp(16px, 2vw, 22px) clamp(18px, 2.4vw, 28px); border-radius: var(--r-xl);
  border: 1px solid var(--border); border-left: 4px solid var(--hrband, var(--border));
  background: var(--grad-card); box-shadow: var(--shadow-sm);
  position: relative; overflow: visible; }
.hr-chs-mast::before { border-radius: inherit; }
.hr-chs-mast::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(70% 120% at 0% 0%, color-mix(in srgb, var(--hrband, var(--blue)) 9%, transparent), transparent 60%); }
.hr-chs-flag { display: inline-block; margin-left: 10px; vertical-align: 1px;
  font: 700 8.5px/1 var(--font-display); font-style: normal; letter-spacing: .18em;
  text-transform: uppercase; color: var(--teal); padding: 4px 9px; border-radius: var(--r-pill);
  border: 1px solid color-mix(in srgb, var(--teal) 40%, transparent); background: var(--teal-soft); }
.hr-chs-no { flex: 0 0 auto; font: 700 clamp(40px, 5.4vw, 62px)/1 var(--font-display); letter-spacing: -0.04em;
  color: transparent; -webkit-text-stroke: 1.5px color-mix(in srgb, var(--text) 24%, transparent); }
.hr-chs-id { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; position: relative; }
.hr-chs-name { font: 700 clamp(24px, 3vw, 34px)/1.08 var(--font-display); letter-spacing: -0.02em;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-chs-line { font: 600 12.5px/1.5 var(--font-display); color: var(--text-2); max-width: 480px; }
.hr-chs-gauges { flex: 0 0 auto; display: flex; align-items: center; gap: 14px; position: relative; }
.hr-minidial { width: clamp(64px, 6vw, 84px); height: auto; flex: none; }
.hr-minidial-track { fill: none; stroke: var(--track); stroke-width: 9; }
.hr-minidial-arc { fill: none; stroke-width: 9; stroke-linecap: round; }
.hr-minidial-score { font: 700 34px var(--font-display); fill: var(--text); letter-spacing: -0.02em; }
.hr-chs-facts { display: flex; flex-direction: column; gap: 9px; }
.hr-chs-fact { display: flex; flex-direction: column; gap: 1px; }
.hr-chs-fact b { font: 700 14px/1.15 var(--font-display); color: var(--text); }
.hr-chs-fact i { font: 700 8.5px/1.3 var(--font-display); font-style: normal; letter-spacing: .14em;
  text-transform: uppercase; color: var(--muted); }

.hr-chs-findings { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; align-items: start; }
.hr-cfind { display: flex; flex-direction: column; gap: 9px; padding: 16px 18px;
  border-radius: var(--r-lg); border: 1px solid var(--border); border-left: 3px solid var(--border);
  background: var(--fill-1); }
.hr-cfind.f-danger { border-left-color: var(--danger); }
.hr-cfind.f-amber { border-left-color: var(--warning); }
.hr-cfind.f-teal { border-left-color: var(--shield); }
.hr-cfind.f-violet { border-left-color: var(--violet); }
.hr-cfind.f-dim { border-left-color: var(--muted-2); }
.hr-cfind-top { display: flex; align-items: center; gap: 9px; }
.hr-cfind-src { margin-left: auto; font: 600 10px/1.3 var(--font-display); letter-spacing: .08em;
  text-transform: uppercase; color: var(--muted-2); text-align: right; }
.hr-cfind-title { font: 700 15.5px/1.3 var(--font-display); color: var(--text); letter-spacing: -0.01em; }
.hr-cfind-qa { display: flex; flex-direction: column; gap: 3px; padding: 10px 13px;
  border-radius: var(--r-md); background: var(--fill-2); border: 1px solid var(--hairline); }
.hr-cfind-q { font: 600 10.5px/1.4 var(--font-display); color: var(--muted); }
.hr-cfind-a { font: 600 13px/1.4 var(--font-display); color: var(--text); }
.hr-cfind-why { font-size: 12.5px; line-height: 1.58; color: var(--text-2); }
.hr-cfind-links { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; margin-top: auto; }
.hr-cfind-links > span { font: 700 9.5px/1.3 var(--font-display); letter-spacing: .12em;
  text-transform: uppercase; color: var(--muted-2); }

/* keepsake vow line */
.hr-keepsake-vow { flex-basis: 100%; font-size: 12.5px; line-height: 1.55; color: var(--muted);
  border-top: 1px solid var(--hairline); padding-top: 12px; margin-top: 2px; }

/* F383b · Passport wrap-up — strengths + keepsake + journey on one page */
.hr-slide--wrapup { gap: clamp(24px, 3.5vh, 40px); }
.hr-wrap-sec { display: flex; flex-direction: column; gap: 14px; }
.hr-wrap-sec + .hr-wrap-sec { padding-top: clamp(20px, 3vh, 32px); border-top: 1px solid var(--hairline); }
.hr-wrap-sec .hr-h2 { margin-bottom: 2px; }

/* ── F383 · Results-journey slides (Shield / All-time / Compare / Future) ─*/
.hr-shield-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.hr-statcard--danger b { color: var(--danger); }
.hr-shield-cats { display: flex; flex-direction: column; gap: 8px; }
.hr-shield-blocks { display: flex; flex-direction: column; gap: 9px; }
.hr-shield-block { display: flex; align-items: center; gap: 13px; padding: 13px 16px;
  border-radius: var(--r-lg); border: 1px solid color-mix(in srgb, var(--danger) 26%, var(--border));
  background: var(--danger-soft); }
.hr-sblock-ic { flex: 0 0 auto; width: 34px; height: 34px; display: grid; place-items: center;
  border-radius: 11px; color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); }
.hr-sblock-ic svg { width: 18px; height: 18px; }
.hr-sblock-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.hr-sblock-tx b { font: 700 14px/1.25 var(--font-display); color: var(--text); }
.hr-sblock-tx small { font-size: 12px; line-height: 1.45; color: var(--text-2); }

.hr-at-chart { padding: 18px 18px 10px; border-radius: var(--r-lg);
  border: 1px solid var(--border); background: var(--grad-card); }
.hr-at-chart svg { width: 100%; height: auto; }
.hr-at-line { fill: none; stroke: var(--teal); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.hr-at-dot { fill: var(--hrband, var(--teal)); stroke: var(--surface); stroke-width: 2; }
.hr-at-dotlab { font: 700 12px var(--font-display); fill: var(--text); }
.hr-at-axis { display: flex; justify-content: space-between; margin-top: 6px;
  font: 600 10.5px/1 var(--font-display); letter-spacing: .08em; color: var(--muted); }
.hr-at-recs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }

/* ── The complete record — collapsible, foot of the Contents page ────────*/
.hr-record { flex: none; margin-top: 6px; border-radius: var(--r-lg); border: 1px solid var(--hairline);
  background: var(--fill-1); overflow: hidden; }
.hr-record-sum { display: flex; align-items: center; gap: 14px; padding: 14px 18px;
  cursor: pointer; list-style: none; user-select: none; }
.hr-record-sum::-webkit-details-marker { display: none; }
.hr-record-sum:hover { background: var(--fill-2); }
.hr-record-head { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.hr-record-head b { font: 700 14px/1.3 var(--font-display); color: var(--text); }
.hr-record-head small { font: 500 12px/1.35 var(--font-body); color: var(--muted); }
.hr-record-chev { flex: none; color: var(--muted); display: inline-flex;
  transition: transform .22s var(--ease); }
.hr-record-chev svg { width: 18px; height: 18px; }
.hr-record[open] .hr-record-chev { transform: rotate(180deg); }
.hr-record-body { display: flex; flex-direction: column; gap: 14px;
  padding: 4px 18px 18px; border-top: 1px solid var(--hairline); }

/* ── Compare check-ins (F385) — ledger + what-changed, report edition ─────*/
.hr-cmp-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.hr-cmp-ledger { display: flex; flex-direction: column; gap: 7px; }
.hr-cmp-check { display: grid; grid-template-columns: minmax(120px, 1fr) 46px minmax(74px, max-content) max-content;
  align-items: center; gap: 13px; padding: 11px 16px;
  border-radius: var(--r-md); border: 1px solid var(--hairline); background: var(--fill-1); }
.hr-cmp-check.now { border-color: color-mix(in srgb, var(--teal) 40%, transparent); background: var(--teal-soft); }
.hr-cmp-check-date { font: 600 13px/1.25 var(--font-display); color: var(--text); }
.hr-cmp-check-score { font: 700 18px/1 var(--font-display); color: var(--hrband, var(--text)); text-align: right; }
.hr-cmp-check-grade { font: 600 11.5px/1 var(--font-display); letter-spacing: .06em; color: var(--muted); }
.hr-cmp-gap { text-align: center; font: 600 10.5px/1 var(--font-display); letter-spacing: .14em;
  text-transform: uppercase; color: var(--muted-2); padding: 4px 0; }

.hr-cmp-changes { display: flex; flex-direction: column; gap: 12px; }
.hr-cmp-sec { display: flex; flex-direction: column; gap: 8px; }
.hr-cmp-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
.hr-cmp-change { display: flex; flex-direction: column; gap: 8px; padding: 13px 16px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--grad-card); }
.hr-cmp-q { font: 600 12.5px/1.4 var(--font-display); color: var(--text-2); }
.hr-cmp-move { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.hr-cmp-from, .hr-cmp-to { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0;
  padding: 8px 12px; border-radius: var(--r-md); border: 1px solid var(--hairline); }
.hr-cmp-from { background: var(--fill-2); color: var(--muted); font: 600 12.5px/1.35 var(--font-display); }
.hr-cmp-to { background: var(--teal-soft); border-color: color-mix(in srgb, var(--teal) 34%, transparent);
  color: var(--text); font: 700 12.5px/1.35 var(--font-display); }
.hr-cmp-from i, .hr-cmp-to i { font: 700 9px/1.3 var(--font-display); font-style: normal;
  letter-spacing: .14em; text-transform: uppercase; color: var(--muted-2); }
.hr-cmp-arrow { flex: none; color: var(--teal); display: inline-flex; }
.hr-cmp-arrow svg { width: 15px; height: 15px; }

.hr-cmp-steady { display: flex; flex-direction: column; gap: 8px; margin-top: 4px;
  padding-top: 14px; border-top: 1px solid var(--hairline); }
.hr-cmp-samegrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr)); gap: 7px; }
.hr-cmp-same { min-width: 0; display: flex; align-items: center; gap: 10px; padding: 9px 13px;
  border-radius: var(--r-md); border: 1px solid var(--hairline); background: var(--fill-1); }
.hr-cmp-same-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.hr-cmp-same b { font: 600 11.5px/1.4 var(--font-display); color: var(--muted); }
.hr-cmp-same em { font: 700 12.5px/1.4 var(--font-display); font-style: normal; color: var(--text); }
.hr-cmp-same i { flex: none; font: 700 9.5px/1 var(--font-display); font-style: normal;
  letter-spacing: .12em; text-transform: uppercase; color: var(--shield);
  padding: 4px 9px; border-radius: var(--r-pill); background: var(--shield-soft);
  border: 1px solid color-mix(in srgb, var(--shield) 34%, transparent); }

.hr-fut-hero { display: flex; align-items: center; gap: clamp(18px, 3vw, 34px); flex-wrap: wrap;
  padding: clamp(18px, 2.4vw, 26px); border-radius: var(--r-xl);
  border: 1px solid var(--border); background: var(--grad-card); box-shadow: var(--shadow-sm); }
/* projected ring (mirrors the Future You overlay's fv-ring) */
.hr-fut-ring { position: relative; flex: 0 0 auto; width: clamp(150px, 17vw, 190px); display: grid; place-items: center; }
.hr-fut-ring > svg { width: 100%; height: auto; }
.hr-futr-track { fill: none; stroke: var(--track); stroke-width: 9; }
.hr-futr-base  { fill: none; stroke: color-mix(in srgb, var(--text) 22%, transparent); stroke-width: 9; stroke-linecap: round; }
.hr-futr-fill  { fill: none; stroke-width: 9; stroke-linecap: round; }
.hr-fut-ringc { position: absolute; display: flex; flex-direction: column; align-items: center; gap: 1px; }
.hr-fut-ringc small { font: 700 9px/1.3 var(--font-display); letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.hr-fut-ringc > b { font: 700 clamp(34px, 4vw, 44px)/1 var(--font-display); letter-spacing: -0.02em;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-fut-ringc > span { font-size: 10.5px; color: var(--muted-2); }
.hr-fut-spark { width: 62px; height: 16px; margin-top: 3px; }
.hr-fut-sparkline { fill: none; stroke-width: 1.8; stroke-linecap: round; }
.hr-fut-meta { flex: 1; min-width: min(100%, 260px); display: flex; flex-direction: column; gap: 9px; }
.hr-fut-scores { display: flex; align-items: center; gap: clamp(14px, 3vw, 28px); }
.hr-fut-now, .hr-fut-then { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.hr-fut-now b, .hr-fut-then b { font: 700 clamp(38px, 5vw, 54px)/1 var(--font-display); letter-spacing: -0.02em; }
.hr-fut-now b { color: var(--text); }
.hr-fut-then b { background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-fut-now i, .hr-fut-then i { font: 700 10px/1.3 var(--font-display); font-style: normal;
  letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.hr-fut-arrow { color: var(--teal); }
.hr-fut-arrow svg { width: 26px; height: 26px; }
.hr-fut-gain { font: 700 13px/1.3 var(--font-display); color: var(--shield);
  padding: 8px 15px; border-radius: var(--r-pill);
  border: 1px solid color-mix(in srgb, var(--shield) 40%, transparent); background: var(--shield-soft); }
/* levers — the assumptions behind the projection (static in the report) */
.hr-fut-levers { display: flex; flex-direction: column; gap: 10px; }
.hr-fut-levergrid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
.hr-fut-lever { display: flex; align-items: center; gap: 12px; padding: 12px 15px;
  border-radius: var(--r-lg); border: 1px solid color-mix(in srgb, var(--teal) 26%, var(--border));
  background: var(--teal-soft); }
.hr-fut-lever-ic { flex: 0 0 auto; width: 32px; height: 32px; display: grid; place-items: center;
  border-radius: 10px; color: var(--ink-on-brand); background: var(--grad-brand); }
.hr-fut-lever-ic svg { width: 16px; height: 16px; }
.hr-fut-lever-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.hr-fut-lever-tx b { font: 700 13px/1.25 var(--font-display); color: var(--text); }
.hr-fut-lever-tx small { font-size: 11.5px; line-height: 1.4; color: var(--text-2); }
.hr-fut-lever-pts { flex: 0 0 auto; font: 700 13px/1 var(--font-display); color: var(--teal); }
.hr-fut-syslist { display: flex; flex-direction: column; gap: 9px; }
.hr-fut-sys { display: grid; grid-template-columns: minmax(130px, 200px) 1fr max-content;
  align-items: center; gap: 13px; padding: 10px 15px;
  border-radius: var(--r-md); border: 1px solid var(--hairline); background: var(--fill-1); }
.hr-fut-name { display: flex; flex-direction: column; gap: 1px;
  font: 700 13px/1.25 var(--font-display); color: var(--text); }
.hr-fut-name small { font: 400 11px/1.35 var(--font-body); color: var(--muted); }
.hr-fut-track { position: relative; height: 9px; border-radius: 99px; background: var(--track); overflow: hidden; }
.hr-fut-track .hr-fut-proj { position: absolute; inset: 0 auto 0 0; border-radius: 99px;
  background: color-mix(in srgb, var(--teal) 30%, transparent); }
.hr-fut-track .hr-fut-cur { position: absolute; inset: 0 auto 0 0; border-radius: 99px; z-index: 1;
  background: linear-gradient(90deg, var(--teal), var(--blue)); }
.hr-fut-nums { display: inline-flex; align-items: center; gap: 6px;
  font: 700 13.5px/1 var(--font-display); color: var(--muted); }
.hr-fut-nums b { color: var(--teal); }
.hr-fut-nums i { display: inline-flex; }
.hr-fut-nums i svg { width: 12px; height: 12px; color: var(--muted-2); }

/* ── Cover ────────────────────────────────────────────────────────────────*/
.hr-slide--cover { justify-content: center; text-align: center; position: relative; }
.hr-slide--cover::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(58% 42% at 50% 8%, color-mix(in srgb, var(--teal) 12%, transparent), transparent 70%),
    radial-gradient(50% 40% at 82% 88%, color-mix(in srgb, var(--violet) 10%, transparent), transparent 70%); }
.hr-cover-inner { display: flex; flex-direction: column; align-items: center; gap: 16px; position: relative; }
.hr-brandline { font: 700 15px/1 var(--font-display); letter-spacing: .3em; color: var(--text); }
.hr-brandline b { color: var(--teal); }
.hr-coverlead { font: 600 clamp(17px, 2.2vw, 22px)/1.4 var(--font-display); color: var(--text-2); }
.hr-prepared { display: flex; flex-direction: column; align-items: center; gap: 5px; margin-top: 18px;
  padding: 18px 34px; border-radius: var(--r-lg); border: 1px solid var(--border);
  background: var(--grad-card); box-shadow: var(--shadow-sm); }
.hr-prepared b { font: 700 20px/1.2 var(--font-display); color: var(--text); }
.hr-prepared span { font-size: 12px; color: var(--muted); letter-spacing: .06em; }

/* ── COVER 2 — the living emblem (F382) ──────────────────────────────────
   Page 1 as an artifact: aurora field, drifting star particles, a rotating
   orbital seal built from the member's real domain scores, shimmer title,
   staggered rise-in. Compositor-only animation; reduced-motion collapses
   everything to a static (still gorgeous) certificate. */
.hr-slide--cover2 { padding: 0 !important; justify-content: stretch; position: relative; }
.hr-slide--cover2::before { display: none; }
.hr-slide--cover2 > .hr-cover2 { max-width: none; height: 100%; }
.hr-cover2 { position: relative; flex: 1; display: flex; align-items: center; justify-content: center;
  overflow: hidden; isolation: isolate; min-height: 0; }

/* aurora field */
.hrcv-aurora { position: absolute; inset: -18%; z-index: -3; filter: blur(58px); opacity: .55; }
.hrcv-aurora b { position: absolute; border-radius: 50%; will-change: transform; }
.hrcv-aurora .a1 { width: 56%; height: 52%; left: -6%; top: -10%;
  background: radial-gradient(closest-side, color-mix(in srgb, var(--teal) 42%, transparent), transparent 70%);
  animation: hrcvDrift1 26s ease-in-out infinite alternate; }
.hrcv-aurora .a2 { width: 52%; height: 56%; right: -8%; top: 4%;
  background: radial-gradient(closest-side, color-mix(in srgb, var(--violet) 36%, transparent), transparent 70%);
  animation: hrcvDrift2 32s ease-in-out infinite alternate; }
.hrcv-aurora .a3 { width: 64%; height: 46%; left: 16%; bottom: -16%;
  background: radial-gradient(closest-side, color-mix(in srgb, var(--blue) 34%, transparent), transparent 70%);
  animation: hrcvDrift3 38s ease-in-out infinite alternate; }
@keyframes hrcvDrift1 { to { transform: translate3d(9%, 12%, 0) scale(1.12); } }
@keyframes hrcvDrift2 { to { transform: translate3d(-11%, 7%, 0) scale(1.08); } }
@keyframes hrcvDrift3 { to { transform: translate3d(6%, -9%, 0) scale(1.15); } }

/* star particles */
.hrcv-stars { position: absolute; inset: 0; z-index: -2; pointer-events: none; }
.hrcv-stars i { position: absolute; border-radius: 50%; background: var(--text);
  opacity: 0; animation: hrcvTwinkle var(--pt, 6s) ease-in-out var(--pd, 0s) infinite; }
@keyframes hrcvTwinkle { 0%, 100% { opacity: 0; transform: scale(.5); }
  50% { opacity: .34; transform: scale(1); } }

/* etched inner frame */
.hrcv-frame { position: absolute; inset: clamp(14px, 2.2vw, 28px); z-index: -1; pointer-events: none;
  border: 1px solid var(--hairline); border-radius: calc(var(--r-lg) + 6px); }
.hrcv-frame::before { content: ''; position: absolute; inset: 5px; border-radius: var(--r-lg);
  border: 1px solid color-mix(in srgb, var(--teal) 16%, transparent); }

/* layout */
.hrcv-grid { display: grid; grid-template-columns: minmax(300px, 0.92fr) 1.08fr;
  gap: clamp(20px, 4vw, 64px); align-items: center; width: 100%;
  max-width: 1060px; padding: clamp(24px, 4vh, 48px) clamp(28px, 5vw, 72px); }
.hrcv-copy { display: flex; flex-direction: column; align-items: flex-start; gap: 13px; min-width: 0; }
.hrcv-eyebrow { font: 800 11px/1.3 var(--font-display); letter-spacing: .26em; text-transform: uppercase;
  color: var(--teal); }
.hrcv-title { font: 700 clamp(38px, 5.2vw, 66px)/1.02 var(--font-display); letter-spacing: -0.028em; color: var(--text); }
.hrcv-sheen { background: linear-gradient(110deg, var(--teal) 0%, var(--blue) 30%, var(--violet) 52%, var(--teal) 78%, var(--blue) 100%);
  background-size: 240% 100%; -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: hrcvSheen 7s linear infinite; }
@keyframes hrcvSheen { to { background-position: -240% 0; } }
.hrcv-lead { font: 600 clamp(15px, 1.8vw, 19px)/1.5 var(--font-display); color: var(--text-2); }

/* prepared-for plaque */
.hrcv-prepared { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 4px;
  padding: 14px 20px 14px 14px; border-radius: var(--r-lg); border: 1px solid var(--border);
  background: var(--glass-bg); -webkit-backdrop-filter: var(--glass-blur); backdrop-filter: var(--glass-blur);
  box-shadow: var(--shadow-sm); }
.hrcv-mono { flex: 0 0 auto; width: 46px; height: 46px; display: grid; place-items: center;
  border-radius: 14px; background: var(--grad-brand); color: var(--ink-on-brand);
  font: 700 17px/1 var(--font-display); letter-spacing: .04em;
  box-shadow: 0 10px 26px -10px var(--teal-glow); }
.hrcv-prep-main { display: flex; flex-direction: column; gap: 1px; }
.hrcv-prep-main b { font: 700 18px/1.2 var(--font-display); color: var(--text); }
.hrcv-prep-main small { font-size: 11.5px; color: var(--muted); letter-spacing: .05em; }
.hrcv-gaptag { display: inline-flex; align-items: center; gap: 6px; margin-left: auto;
  font: 600 11px/1.3 var(--font-display); padding: 6px 11px; border-radius: var(--r-pill);
  border: 1px solid var(--border); color: var(--muted); }
.hrcv-gaptag svg { width: 12px; height: 12px; flex: none; }
.hrcv-gaptag.down { color: var(--shield); border-color: color-mix(in srgb, var(--shield) 40%, transparent); background: var(--shield-soft); }
.hrcv-gaptag.up { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 40%, transparent);
  background: color-mix(in srgb, var(--warning) 8%, transparent); }
.hrcv-gaptag.flat { color: var(--blue); border-color: color-mix(in srgb, var(--blue) 36%, transparent); background: var(--blue-soft); }

/* stat row */
.hrcv-stats { display: flex; align-items: center; gap: 16px; }
.hrcv-stat { display: flex; flex-direction: column; gap: 1px; }
.hrcv-stat b { font: 700 24px/1.1 var(--font-display); color: var(--text); }
.hrcv-stat i { font: 700 9.5px/1.35 var(--font-display); font-style: normal; letter-spacing: .15em;
  text-transform: uppercase; color: var(--muted); }
.hrcv-statdiv { width: 1px; height: 30px; background: var(--hairline); }

.hrcv-hint { display: inline-flex; align-items: center; gap: 7px; margin-top: 6px;
  font: 600 12px/1 var(--font-display); color: var(--muted); animation: hrcvNudge 2.6s ease-in-out infinite; }
.hrcv-hint svg { width: 14px; height: 14px; color: var(--teal); }
.hrcv-hint b { color: var(--text); }
@keyframes hrcvNudge { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(5px); } }

/* the emblem */
.hrcv-art { position: relative; display: grid; place-items: center; }
.hrcv-emblem { width: min(100%, 46vh, 430px); height: auto; filter: drop-shadow(0 24px 60px color-mix(in srgb, var(--blue) 22%, transparent)); }
.hrcv-ticks { fill: none; stroke: var(--hairline); stroke-width: 8; stroke-dasharray: 1 11; }
.hrcv-ticks-g { transform-origin: 200px 200px; animation: hrcvSpin 90s linear infinite; }
.hrcv-arc-track { fill: none; stroke: var(--track); stroke-width: 4; }
.hrcv-arc { fill: none; stroke-width: 4; stroke-linecap: round;
  animation: hrcvArcIn 1.5s var(--ease-out, ease-out) .3s both; }
@keyframes hrcvArcIn { from { stroke-dashoffset: var(--arcoff, 0); } to { stroke-dashoffset: 0; } }
.hrcv-orbit { fill: none; stroke: var(--grid-line); stroke-dasharray: 3 7; }
.hrcv-orbit-g { transform-origin: 200px 200px; animation: hrcvSpin 120s linear infinite reverse; }
@keyframes hrcvSpin { to { transform: rotate(360deg); } }
.hrcv-star-halo { fill: color-mix(in srgb, var(--hrband, var(--teal)) 14%, transparent); }
.hrcv-star-dot { fill: var(--hrband, var(--teal));
  animation: hrcvStarPulse 3.6s ease-in-out var(--tw, 0s) infinite; transform-origin: center; transform-box: fill-box; }
@keyframes hrcvStarPulse { 0%, 100% { opacity: .75; transform: scale(1); } 50% { opacity: 1; transform: scale(1.28); } }
.hrcv-comet { fill: var(--teal); }
.hrcv-comet-glow { fill: color-mix(in srgb, var(--teal) 30%, transparent); }
.hrcv-coredisc { fill: var(--surface); stroke: var(--border); }
.hrcv-age { font: 700 58px var(--font-display); letter-spacing: -0.02em; fill: var(--text); }
.hrcv-agelabel { font: 700 10px var(--font-display); letter-spacing: .2em; fill: var(--muted); }
.hrcv-agesub { font: 600 9px var(--font-display); letter-spacing: .16em; fill: var(--muted-2); }
.hrcv-scorepill { position: absolute; bottom: 4%; left: 50%; transform: translateX(-50%);
  display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; white-space: nowrap;
  border-radius: var(--r-pill); border: 1.5px solid var(--border-hi);
  background: var(--surface); -webkit-backdrop-filter: none; backdrop-filter: none;
  font: 600 12px/1 var(--font-display); color: var(--text-2); box-shadow: var(--shadow-md); }
.hrcv-scorepill b { font: 700 17px/1 var(--font-display);
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }

/* staggered rise-in */
.hrcv-rise { opacity: 0; transform: translateY(18px); animation: hrcvRise .8s var(--ease-lux, cubic-bezier(.22,1,.36,1)) var(--d, 0s) forwards; }
@keyframes hrcvRise { to { opacity: 1; transform: translateY(0); } }
.hrcv-art.hrcv-rise { transform: translateY(14px) scale(.96); }
.hrcv-scorepill.hrcv-rise { transform: translate(-50%, 14px); }
@keyframes hrcvRisePill { to { opacity: 1; transform: translate(-50%, 0); } }
.hrcv-scorepill.hrcv-rise { animation-name: hrcvRisePill; }

/* atlas flavor — violet-forward aurora */
.hr-cover2--atlas .hrcv-aurora .a1 { background: radial-gradient(closest-side, color-mix(in srgb, var(--violet) 40%, transparent), transparent 70%); }
.hr-cover2--atlas .hrcv-aurora .a2 { background: radial-gradient(closest-side, color-mix(in srgb, var(--blue) 38%, transparent), transparent 70%); }
.hr-cover2--atlas .hrcv-eyebrow { color: var(--violet); }
.hr-cover2--atlas .hrcv-mono { background: linear-gradient(135deg, var(--blue) 0%, var(--violet) 100%);
  box-shadow: 0 10px 26px -10px var(--violet-soft); }

/* cover foot pinned over the canvas */
.hr-slide--cover2 .hr-foot { position: absolute; left: clamp(28px, 5vw, 72px); right: clamp(28px, 5vw, 72px);
  bottom: clamp(10px, 2vh, 20px); margin-top: 0; }

/* cover copy alignment — title/lead/prepared/stats centered, hint right-aligned */
.hrcv-copy .hrcv-title { text-align: center; align-self: stretch; }
.hrcv-copy .hrcv-lead { text-align: center; align-self: stretch; }
.hrcv-copy .hrcv-prepared { align-self: center; justify-content: center; }
.hrcv-copy .hrcv-stats { align-self: center; justify-content: center; }
.hrcv-copy .hrcv-hint { align-self: flex-end; }

/* desktop upscale — fill the canvas on screen only (never applies in print) */
@media screen and (min-width: 1025px) {
  .hrcv-grid { max-width: min(1460px, 92vw); gap: clamp(40px, 5.5vw, 96px);
    padding: clamp(28px, 5vh, 64px) clamp(36px, 6vw, 96px); }
  .hrcv-emblem { width: min(100%, 64vh, 620px); }
  .hrcv-eyebrow { font-size: 12.5px; }
  .hrcv-title { font-size: clamp(52px, 6.4vw, 92px); }
  .hrcv-lead { font-size: clamp(17px, 1.9vw, 24px); }
  .hrcv-copy { gap: clamp(14px, 2.2vh, 22px); }
  .hrcv-prepared { padding: 20px 26px; gap: 16px; }
  .hrcv-mono { width: 54px; height: 54px; font-size: 20px; }
  .hrcv-prep-main b { font-size: 21px; }
  .hrcv-prep-main small { font-size: 12.5px; }
  .hrcv-stats { gap: 22px; }
  .hrcv-stat b { font-size: 30px; }
  .hrcv-stat i { font-size: 10.5px; }
  .hrcv-statdiv { height: 36px; }
  .hrcv-scorepill { padding: 10px 20px; font-size: 13px; }
  .hrcv-scorepill b { font-size: 19px; }
}

@media (max-width: 1024px) {
  .hrcv-grid { grid-template-columns: 1fr; gap: 18px; justify-items: center; text-align: center;
    padding: clamp(18px, 3vh, 32px) 22px 64px; }
  .hrcv-copy { align-items: center; }
  .hrcv-emblem { width: min(74vw, 52vh, 460px); }
  .hrcv-ring { transform: translateY(-7px); }
  .hrcv-prepared { justify-content: center; }
  .hrcv-gaptag { margin-left: 0; flex-basis: 100%; justify-content: center; }
  .hrcv-stats { justify-content: center; }
  .hr-slide--cover2 .hr-foot { display: none; }
  .hr-brandhome .ov-brandid-word { display: none; }
}
@media (max-width: 640px) {
  .hrcv-emblem { width: min(76vw, 46vh, 400px); }   /* fit inside the etched frame (grid pad + frame inset) */
  .hrcv-ring { transform: translateY(-9px); }
  .hrcv-title { font-size: clamp(30px, 9vw, 40px); }
  .hrcv-frame { inset: 10px; }
  .hrcv-stats { gap: 12px; }
  .hrcv-stat b { font-size: 20px; }
  .hrcv-prepared { padding: 12px 14px; }
  .hrcv-hint { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .hrcv-aurora b, .hrcv-stars i, .hrcv-ticks-g, .hrcv-orbit-g, .hrcv-arc,
  .hrcv-star-dot, .hrcv-sheen, .hrcv-hint, .hrcv-rise, .hrcv-scorepill.hrcv-rise { animation: none !important; }
  .hrcv-rise { opacity: 1; transform: none; }
  .hrcv-scorepill.hrcv-rise { transform: translateX(-50%); }
  .hrcv-stars i { opacity: .2; }
}

/* ── Baseline / glance ────────────────────────────────────────────────────*/
.hr-baseline-grid, .hr-glance-grid { display: grid; grid-template-columns: 1.25fr 1fr; gap: 18px; align-items: stretch; }
.hr-traj-hero { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
  text-align: center; padding: clamp(22px, 3.5vw, 40px); border-radius: var(--r-xl);
  border: 1px solid var(--border); background: var(--grad-card); box-shadow: var(--shadow-md);
  position: relative; overflow: hidden; }
.hr-traj-hero::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(80% 60% at 50% 0%, color-mix(in srgb, var(--teal) 10%, transparent), transparent 70%); }
.hr-traj-num { font: 700 clamp(56px, 8vw, 88px)/1 var(--font-display); letter-spacing: -0.03em;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-traj-label { font: 700 11px/1.3 var(--font-display); letter-spacing: .22em; text-transform: uppercase; color: var(--muted); }
.hr-traj-gap { font: 600 12.5px/1 var(--font-display); padding: 6px 12px; border-radius: var(--r-pill);
  border: 1px solid var(--border); }
.hr-traj-gap.up { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 40%, transparent);
  background: color-mix(in srgb, var(--warning) 8%, transparent); }
.hr-traj-gap.down { color: var(--shield); border-color: color-mix(in srgb, var(--shield) 40%, transparent);
  background: var(--shield-soft); }
.hr-baseline-side { display: flex; flex-direction: column; gap: 12px; }
.hr-statcard { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 1px;
  padding: 14px 20px; border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-statcard b { font: 700 26px/1.1 var(--font-display); color: var(--text); }
.hr-statcard span { font: 700 10.5px/1.4 var(--font-display); letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.hr-statcard small { font-size: 11.5px; color: var(--muted-2); }
.hr-statcard--score { align-items: center; text-align: center; justify-content: center; }
.hr-statcard--score b { font-size: clamp(44px, 6vw, 64px);
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }

/* ── Constellation ────────────────────────────────────────────────────────*/
.hr-map-wrap { display: grid; place-items: center; }
.hr-constellation { width: min(100vh, 100%, 820px); height: auto; }
.hrc-orbit { fill: none; stroke: var(--grid-line); stroke-dasharray: 3 6; }
.hrc-spoke { stroke: var(--hairline); }
.hrc-center { fill: var(--surface); stroke: var(--border); }
.hrc-age { font: 700 44px var(--font-display); letter-spacing: -0.02em; fill: var(--text); }
.hrc-agelabel { font: 700 9.5px var(--font-display); letter-spacing: .18em; fill: var(--muted); }
.hrc-dot { fill: var(--surface-2); stroke: var(--hrband, var(--border)); stroke-width: 2; }
.hrc-halo { fill: none; stroke: var(--teal); stroke-width: 1.5; stroke-dasharray: 4 5; opacity: .8; }
.hrc-score { font: 700 15px var(--font-display); fill: var(--text); }
.hrc-name { font: 600 12.5px var(--font-display); fill: var(--text-2); letter-spacing: .01em; }
.hrc-node.chosen .hrc-name { fill: var(--teal); font-weight: 700; }

/* ── Constellation, mobile edition — vertical stack (phones only) ─────────
   The radial SVG is unreadable at phone widths; this keeps the same story:
   trajectory core on top, a stem, then every domain as a band-colored row. */
.hr-mapv { display: none; }
@media (max-width: 640px) {
  .hr-map-wrap { display: none; }
  .hr-mapv { display: flex; flex-direction: column; align-items: stretch; gap: 0; }
  .hr-mapv-core { align-self: center; display: flex; flex-direction: column; align-items: center; gap: 2px;
    width: 148px; height: 148px; justify-content: center; border-radius: 50%;
    border: 1px solid var(--border); background:
      radial-gradient(70% 60% at 50% 38%, color-mix(in srgb, var(--teal) 16%, transparent), transparent 75%),
      var(--surface);
    box-shadow: 0 0 0 8px color-mix(in srgb, var(--blue) 7%, transparent), var(--shadow-sm); }
  .hr-mapv-core b { font: 700 40px/1 var(--font-display); letter-spacing: -0.02em; color: var(--text); }
  .hr-mapv-core i { font: 700 8.5px/1.3 var(--font-display); font-style: normal; letter-spacing: .17em;
    text-transform: uppercase; color: var(--muted); text-align: center; max-width: 110px; }
  .hr-mapv-stem { align-self: center; width: 1px; height: 22px;
    background: linear-gradient(180deg, var(--border-hi), transparent); }
  .hr-mapv-list { display: flex; flex-direction: column; gap: 7px; }
  .hr-mapv-row { display: grid; grid-template-columns: 40px 1fr max-content; align-items: center; gap: 11px;
    padding: 9px 12px; border-radius: var(--r-md); border: 1px solid var(--border);
    border-left: 3px solid var(--hrband, var(--border)); background: var(--fill-1); }
  .hr-mapv-row.chosen { border-color: color-mix(in srgb, var(--teal) 40%, transparent); background: var(--teal-soft); }
  .hr-mapv-dot { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 50%;
    background: var(--surface-2); border: 2px solid var(--hrband, var(--border)); }
  .hr-mapv-dot b { font: 700 14px/1 var(--font-display); color: var(--text); }
  .hr-mapv-name { display: inline-flex; align-items: center; gap: 6px; min-width: 0;
    font: 600 13.5px/1.25 var(--font-display); color: var(--text); }
  .hr-mapv-name .hr-sb-star { color: var(--teal); font-style: normal; }
  .hr-mapv-band { font: 700 9.5px/1.3 var(--font-display); letter-spacing: .1em; text-transform: uppercase;
    color: var(--hrband, var(--muted)); white-space: nowrap; }
}

/* Scoreboard block — merged onto the map page */
.hr-sb-block { display: flex; flex-direction: column; gap: 10px; margin-top: clamp(18px, 3vh, 30px);
  padding-top: clamp(16px, 2.5vh, 26px); border-top: 1px solid var(--hairline); }
/* leading its slide, it needs no separator — start level with every other slide */
.hr-slide > .hr-sb-block:first-child { margin-top: 0; padding-top: 0; border-top: 0; }

.hr-route-strip { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding: 14px 18px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-route-strip .hr-microlabel { flex-basis: 100%; }
.hr-routepill { display: inline-flex; align-items: center; gap: 9px; padding: 9px 16px 9px 9px;
  border-radius: var(--r-pill); border: 1px solid var(--border); background: var(--surface);
  font: 600 13.5px/1 var(--font-display); color: var(--text); }
.hr-routepill b { width: 26px; height: 26px; display: grid; place-items: center; border-radius: 50%;
  background: var(--grad-brand); color: var(--ink-on-brand); font-size: 12px; }
.hr-routepill small { color: var(--muted); font-size: 11px; }
.hr-routepill.next { opacity: .78; }
.hr-routepill.next b { background: var(--fill-2); color: var(--muted); }

.hr-story { padding: 16px 20px; border-radius: var(--r-lg); border: 1px solid var(--border);
  background: var(--grad-card); }
.hr-story p { margin-top: 6px; color: var(--text-2); line-height: 1.6; font-size: 14.5px; }

/* ── Moves / weeks / strengths ───────────────────────────────────────────*/
.hr-moves { display: flex; flex-direction: column; gap: 14px; }
.hr-move { display: flex; gap: 18px; padding: 20px 22px; border-radius: var(--r-lg);
  border: 1px solid var(--border); background: var(--grad-card); box-shadow: var(--shadow-sm); }
.hr-move-no { font: 700 30px/1 var(--font-display); letter-spacing: -0.02em;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-move-body { flex: 1; display: flex; flex-direction: column; gap: 8px; }
.hr-move-body h3 { font: 700 17.5px/1.25 var(--font-display); color: var(--text); }
.hr-move-body p { font-size: 13.5px; line-height: 1.55; color: var(--text-2); }

.hr-weeks { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.hr-week { display: flex; flex-direction: column; gap: 7px; padding: 18px 16px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-week-no { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%;
  background: var(--grad-brand); color: var(--ink-on-brand); font: 700 14px/1 var(--font-display); }
.hr-week-k { font: 700 11px/1.3 var(--font-display); letter-spacing: .14em; text-transform: uppercase; color: var(--teal); }
.hr-week p { font-size: 13px; line-height: 1.5; color: var(--text-2); }
.hr-track { margin-top: auto; font: 600 10.5px/1.4 var(--font-display); letter-spacing: .08em;
  text-transform: uppercase; color: var(--muted); }
.hr-day30 { padding: 16px 20px; border-radius: var(--r-lg);
  border: 1px solid color-mix(in srgb, var(--teal) 30%, transparent);
  background: var(--teal-soft); }
.hr-day30 p { margin-top: 5px; color: var(--text-2); font-size: 13.5px; line-height: 1.55; }

.hr-strengths { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.hr-strength { display: flex; flex-direction: column; gap: 6px; padding: 22px 20px;
  border-radius: var(--r-lg); border: 1px solid var(--border); border-top: 3px solid var(--hrband, var(--teal));
  background: var(--grad-card); box-shadow: var(--shadow-sm); }
.hr-strength b { font: 700 34px/1 var(--font-display); color: var(--text); }
.hr-strength h3 { font: 700 16.5px/1.2 var(--font-display); color: var(--text); }
.hr-strength p { font-size: 12.5px; line-height: 1.5; color: var(--muted); }

/* ── Keepsake ─────────────────────────────────────────────────────────────*/
.hr-promises { margin: 6px 0 0 0; padding: 0; list-style: none; counter-reset: hrp; display: flex; flex-direction: column; gap: 10px; }
.hr-promises li { counter-increment: hrp; display: flex; align-items: center; gap: 14px;
  padding: 14px 18px; border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1);
  font: 600 15px/1.4 var(--font-display); color: var(--text); }
.hr-promises li::before { content: counter(hrp); flex: 0 0 auto; width: 30px; height: 30px;
  display: grid; place-items: center; border-radius: 50%; background: var(--grad-brand);
  color: var(--ink-on-brand); font: 700 13px/1 var(--font-display); }
.hr-keepsake-stats { display: flex; align-items: center; gap: 18px; padding: 18px 22px;
  border-radius: var(--r-xl); border: 1px solid var(--border); background: var(--grad-card); }
.hr-traj-mini { display: flex; flex-direction: column; align-items: center; gap: 3px; }
.hr-traj-mini b { font: 700 44px/1 var(--font-display);
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-traj-mini span { font: 700 9.5px/1.3 var(--font-display); letter-spacing: .16em; text-transform: uppercase;
  color: var(--muted); text-align: center; max-width: 180px; }
.hr-keepsake-side { display: flex; flex-direction: column; gap: 8px; font-size: 13.5px; color: var(--muted); }
.hr-keepsake-side b { color: var(--text); font-family: var(--font-display); }

/* ── Journey + MyAI tease ────────────────────────────────────────────────*/
.hr-journey { display: flex; flex-direction: column; gap: 8px; }
.hr-journey-row { display: flex; align-items: center; gap: 12px; padding: 12px 16px;
  border-radius: var(--r-md); border: 1px solid var(--border); background: var(--fill-1);
  font-size: 13.5px; color: var(--text-2); }
.hr-journey-row.latest { border-color: var(--border-hi); background: var(--teal-soft); }
.hr-journey-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--hrband, var(--muted)); }
.hr-journey-date { font: 600 13px/1 var(--font-display); color: var(--text); min-width: 110px; }
.hr-journey-label { flex: 1; color: var(--muted); font-size: 12.5px; }
.hr-journey-score { font: 700 17px/1 var(--font-display); color: var(--text); }
.hr-journey-delta { font: 700 11.5px/1 var(--font-display); padding: 4px 9px; border-radius: var(--r-pill); }
.hr-journey-delta.pos { color: var(--shield); background: var(--shield-soft); }
.hr-journey-delta.neg { color: var(--danger); background: var(--danger-soft); }
.hr-journey-delta.neu { color: var(--muted); background: var(--fill-2); }
.hr-myai-tease { display: flex; align-items: center; gap: 16px; padding: 18px 20px;
  border-radius: var(--r-xl); border: 1px dashed color-mix(in srgb, var(--violet) 45%, transparent);
  background: var(--violet-soft); }
.hr-myai-orb { flex: 0 0 auto; width: 44px; height: 44px; display: grid; place-items: center;
  border-radius: 50%; background: linear-gradient(135deg, var(--blue) 0%, var(--violet) 100%);
  color: #fff; }
.hr-myai-orb svg { width: 22px; height: 22px; }
.hr-myai-tease b { font: 700 15px/1.3 var(--font-display); color: var(--text); }
.hr-myai-tease p { font-size: 12.5px; line-height: 1.5; color: var(--text-2); margin-top: 2px; }
.hr-soon { margin-left: auto; flex: 0 0 auto; font: 700 10px/1 var(--font-display); letter-spacing: .14em;
  text-transform: uppercase; color: var(--violet); padding: 6px 11px; border-radius: var(--r-pill);
  border: 1px solid color-mix(in srgb, var(--violet) 40%, transparent); }

/* ── Atlas: chapters, dives, route grid, indexes ─────────────────────────*/
.hr-slide--chapter { justify-content: center; position: relative; }
.hr-slide--chapter::before { content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(60% 46% at 22% 30%, color-mix(in srgb, var(--blue) 9%, transparent), transparent 70%); }
.hr-chapter-inner { display: flex; flex-direction: column; gap: 10px; position: relative; }
.hr-chapter-no { font: 700 clamp(64px, 10vw, 110px)/1 var(--font-display); letter-spacing: -0.04em;
  color: transparent; -webkit-text-stroke: 1.5px color-mix(in srgb, var(--text) 26%, transparent); }
.hr-chapter-name { font: 700 clamp(34px, 5vw, 56px)/1.05 var(--font-display); letter-spacing: -0.025em;
  background: var(--grad-text); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hr-chapter-line { font: 600 clamp(15px, 1.9vw, 19px)/1.5 var(--font-display); color: var(--text-2); max-width: 560px; }
.hr-chapter-stats { display: flex; gap: 14px; margin-top: 12px; }
.hr-stat { display: flex; flex-direction: column; gap: 2px; padding: 13px 20px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-stat b { font: 700 24px/1.1 var(--font-display); color: var(--text); }
.hr-stat span { font: 700 9.5px/1.4 var(--font-display); letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }

.hr-dive-head { display: flex; flex-direction: column; gap: 6px; }
.hr-dive-grid { display: grid; grid-template-columns: 170px 1fr; gap: 18px; align-items: start; }
.hr-dive-rail { display: flex; flex-direction: column; gap: 10px; position: sticky; top: 0; }
.hr-dive-body { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.hr-dive-tags { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.hr-srctag { font: 700 10.5px/1 var(--font-display); letter-spacing: .14em; text-transform: uppercase;
  color: var(--blue); padding: 6px 11px; border-radius: var(--r-pill);
  border: 1px solid color-mix(in srgb, var(--blue) 36%, transparent); background: var(--blue-soft); }
.hr-srckey { font: 600 11px/1 var(--font-display); letter-spacing: .08em; color: var(--muted-2);
  padding: 6px 10px; border-radius: var(--r-pill); border: 1px solid var(--hairline); }
.hr-impact { font: 700 10.5px/1 var(--font-display); letter-spacing: .12em; text-transform: uppercase;
  padding: 6px 11px; border-radius: var(--r-pill); border: 1px solid var(--border); color: var(--muted); }
.hr-impact.danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 42%, transparent); background: var(--danger-soft); }
.hr-impact.amber { color: var(--warning); border-color: color-mix(in srgb, var(--warning) 42%, transparent);
  background: color-mix(in srgb, var(--warning) 8%, transparent); }
.hr-impact.teal { color: var(--shield); border-color: color-mix(in srgb, var(--shield) 42%, transparent); background: var(--shield-soft); }
.hr-impact.violet { color: var(--violet); border-color: color-mix(in srgb, var(--violet) 42%, transparent); background: var(--violet-soft); }
.hr-answerbox { padding: 16px 20px; border-radius: var(--r-lg);
  border: 1px solid var(--border-hi); background: var(--grad-card); box-shadow: var(--shadow-sm); }
.hr-answerbox p { margin-top: 6px; font: 600 16px/1.45 var(--font-display); color: var(--text); }
.hr-why { padding: 16px 20px; border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-why p { margin-top: 6px; font-size: 13.5px; line-height: 1.62; color: var(--text-2); }
.hr-connections { display: flex; flex-direction: column; gap: 8px; }

.hr-route-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; }
.hr-routecard { display: flex; flex-direction: column; gap: 4px; padding: 14px 16px; text-align: left;
  border-radius: var(--r-lg); border: 1px solid var(--border); border-left: 3px solid var(--hrband, var(--border));
  background: var(--fill-1); cursor: pointer; transition: transform .22s var(--ease-out), border-color .2s, background .2s; }
.hr-routecard:hover { transform: translateY(-2px); border-color: var(--border-hi); background: var(--fill-hover); }
.hr-routecard b { font: 700 13px/1 var(--font-display); color: var(--muted); }
.hr-routecard-name { font: 700 15px/1.2 var(--font-display); color: var(--text); }
.hr-routecard-meta { font-size: 11.5px; color: var(--muted); }

.hr-connmap { display: flex; flex-direction: column; gap: 10px; }
.hr-connrow { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 14px 18px;
  border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--fill-1); }
.hr-connaction { display: inline-flex; align-items: center; gap: 10px; font: 700 14px/1.3 var(--font-display); color: var(--text); }
.hr-connaction b { width: 28px; height: 28px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 50%;
  background: var(--grad-brand); color: var(--ink-on-brand); font-size: 12px; }
.hr-connlinks { flex: 1; display: flex; justify-content: flex-end; }

.hr-index, .hr-ctxgroup { display: flex; flex-direction: column; gap: 6px; }
.hr-ctxgroup { margin-bottom: 10px; }
.hr-ctxgroup .hr-microlabel { margin: 8px 0 2px; }
.hr-idxrow { display: flex; align-items: flex-start; gap: 12px; padding: 10px 14px; text-align: left;
  border-radius: var(--r-md); border: 1px solid var(--hairline); background: var(--fill-1);
  cursor: pointer; transition: background .18s, border-color .18s; }
.hr-idxrow:hover { background: var(--fill-hover); border-color: var(--border-hi); }
.hr-idxdot { flex: 0 0 auto; width: 9px; height: 9px; margin-top: 5px; border-radius: 50%; background: var(--track); }
.hr-idxdot.i-danger { background: var(--danger); }
.hr-idxdot.i-amber { background: var(--warning); }
.hr-idxdot.i-teal { background: var(--shield); }
.hr-idxdot.i-dim { background: var(--muted-2); }
.hr-idxlabel { flex: 1; min-width: 0; font-size: 13px; line-height: 1.45; color: var(--text-2);
  overflow-wrap: anywhere; }
.hr-idxdomain { flex: 0 0 auto; margin-top: 2px; font: 600 11.5px/1.3 var(--font-display); color: var(--muted); }

/* ── Responsive ───────────────────────────────────────────────────────────*/
@media (max-width: 1024px) {
  .hr-weeks { grid-template-columns: repeat(2, 1fr); }
  .hr-strengths { grid-template-columns: 1fr; }
  .hr-baseline-grid, .hr-glance-grid { grid-template-columns: 1fr; }
  .hr-tally { grid-template-columns: repeat(2, 1fr); }
  .hr-ovt-grid { grid-template-columns: 1fr; }
  .hr-chs-findings { grid-template-columns: 1fr; }
  .hr-chs-mast { flex-wrap: wrap; }
  .hr-chs-no { order: -1; }
  .hr-shield-stats { grid-template-columns: 1fr; }
  .hr-at-recs { grid-template-columns: repeat(2, 1fr); }
  .hr-fut-levergrid { grid-template-columns: 1fr; }
  .hr-fut-hero { justify-content: center; text-align: center; }
  .hr-fut-scores { justify-content: center; }
  .hr-cmp-stats { grid-template-columns: repeat(2, 1fr); }
  .hr-cmp-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .hr-paths { grid-template-columns: 1fr; }
  .hr-path-sub { display: none; }
  .hr-path { padding: 14px 16px; gap: 13px; }
  .hr-path-art { width: 44px; height: 44px; }
  .hr-slide { padding: 18px 18px 96px; }
  .hr-nav { width: 42px; height: 42px; }
  .hr-nav--prev { left: 8px; } .hr-nav--next { right: 8px; }
  .hr-weeks { grid-template-columns: 1fr; }
  .hr-act span { display: none; }
  .hr-act { padding: 8px 10px; }
  .hr-chrome { gap: 10px; }
  .hr-counter { display: none; }
  .hr-keepsake-stats { flex-direction: column; }
  .hr-connlinks { justify-content: flex-start; }
  .hr-idxdomain { display: none; }
  .hr-constellation { width: 100%; }
  .hrc-name { font-size: 15px; }
  .hr-journey-label { display: none; }
  .hr-tocgrid { grid-template-columns: 1fr; }
  .hr-tocpage { display: none; }
  .hr-bandspec-labels { display: none; }
  .hr-finding-domain { display: none; }
  .hr-sb-row { grid-template-columns: 1fr 40px; }
  .hr-sb-track, .hr-sb-band { display: none; }
  .hr-chs-gauges { flex-basis: 100%; }
  .hr-cfind-src { display: none; }
  .hr-fut-sys { grid-template-columns: 1fr max-content; }
  .hr-fut-track { display: none; }
  .hr-fut-ring { width: min(58vw, 190px); }
  .hr-cmp-check { grid-template-columns: 1fr 40px max-content; }
  .hr-cmp-check-grade { display: none; }
  .hr-cmp-samegrid { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .hr-stage { transition: none !important; }
  .hr-path, .hr-nav, .hr-routecard { transition: none; }
}

/* ── PRINT — the deck becomes a top-to-bottom PDF, one slide per page ─────*/
@media print {
  body.hr-printing > *:not(#hr-overlay) { display: none !important; }
  body.hr-printing { overflow: visible !important; background: #fff !important; }
  body.hr-printing #hr-overlay { position: static; opacity: 1; background: #fff; display: block; }
  body.hr-printing .hr-chrome, body.hr-printing .hr-nav { display: none !important; }
  body.hr-printing .hr-stage-clip { overflow: visible; }
  body.hr-printing .hr-stage { display: block; transform: none !important; transition: none !important; height: auto; }
  /* Slides that fit one sheet stay one sheet; long slides FLOW onto the next
     page instead of being force-squeezed (break-inside:avoid on a slide taller
     than the sheet makes the engine slice mid-heading). Atomic units below
     carry their own break-inside guards. */
  body.hr-printing .hr-slide {
    display: block; min-width: 0; width: 100%; height: auto; min-height: 92vh;
    overflow: visible; page-break-after: always; break-after: page;
    padding: 40px 48px 28px;
  }
  body.hr-printing .hr-slide > * { margin-bottom: 14px; }
  body.hr-printing .hr-slide:last-child { page-break-after: auto; break-after: auto; }
  /* keep headings glued to what follows; never let them end a page */
  body.hr-printing .hr-h2, body.hr-printing .hr-h3, body.hr-printing .hr-eyebrow,
  body.hr-printing .hr-microlabel, body.hr-printing .hr-chs-mast,
  body.hr-printing .hr-display, body.hr-printing .hrcv-title {
    page-break-after: avoid; break-after: avoid;
    page-break-inside: avoid; break-inside: avoid;
  }
  /* atomic cards/rows — never slice one in half */
  body.hr-printing .hr-cfind, body.hr-printing .hr-tocrow, body.hr-printing .hr-idxrow,
  body.hr-printing .hr-week, body.hr-printing .hr-finding, body.hr-printing .hr-move,
  body.hr-printing .hr-sb-row, body.hr-printing .hr-ovt-card, body.hr-printing .hr-strength,
  body.hr-printing .hr-tallycard, body.hr-printing .hr-journey-row, body.hr-printing .hr-statcard,
  body.hr-printing .hr-traj-hero, body.hr-printing .hr-bandspec, body.hr-printing .hr-prepared,
  body.hr-printing .hr-keepsake-stats, body.hr-printing .hr-day30, body.hr-printing .hr-myai-tease,
  body.hr-printing .hr-routepill, body.hr-printing .hr-promises li, body.hr-printing .hr-ctxgroup .hr-microlabel,
  body.hr-printing .hr-shield-block, body.hr-printing .hr-cmp-check, body.hr-printing .hr-fut-sys,
  body.hr-printing .hr-fut-hero, body.hr-printing .hr-at-chart, body.hr-printing .hr-wrap-sec,
  body.hr-printing .hr-fut-lever, body.hr-printing .hr-fut-levers,
  body.hr-printing .hr-cmp-change, body.hr-printing .hr-cmp-same {
    page-break-inside: avoid; break-inside: avoid;
  }
  /* the record index is collapsed on screen — always fully printed */
  body.hr-printing .hr-record-body { display: block !important; }
  body.hr-printing .hr-record-chev { display: none; }
  body.hr-printing .hr-record { break-before: page; page-break-before: always; }
  body.hr-printing .hr-record-sum { break-after: avoid; page-break-after: avoid; }
  body.hr-printing .hr-ctxgroup, body.hr-printing .hr-idxrow { break-inside: avoid; page-break-inside: avoid; }
  /* flex/grid columns can't fragment across pages — flow the compare slide as blocks */
  body.hr-printing .hr-cmp-changes, body.hr-printing .hr-cmp-sec,
  body.hr-printing .hr-cmp-steady, body.hr-printing .hr-cmp-ledger,
  body.hr-printing .hr-cmp-grid, body.hr-printing .hr-cmp-samegrid { display: block; }
  body.hr-printing .hr-cmp-check { margin-bottom: 7px; }
  body.hr-printing .hr-cmp-sec { margin-bottom: 14px; }
  body.hr-printing .hr-cmp-grid { margin-top: 8px; }
  body.hr-printing .hr-cmp-change { margin-bottom: 10px; }
  body.hr-printing .hr-cmp-samegrid { margin-top: 8px; }
  body.hr-printing .hr-cmp-same { display: flex; margin-bottom: 7px; }
  body.hr-printing .hr-foot { page-break-inside: avoid; break-inside: avoid; }
  /* flex/grid parents keep their layout inside a block-flow slide */
  body.hr-printing .hr-chs-findings { grid-template-columns: repeat(2, 1fr); }
  body.hr-printing .hr-map-wrap { display: grid !important; }
  body.hr-printing .hr-mapv { display: none !important; }
  body.hr-printing .hr-map-wrap svg { max-height: 78vh; }
  /* light print palette regardless of on-screen theme */
  body.hr-printing #hr-overlay,
  body.hr-printing .hr-slide {
    --bg-1: #ffffff; --surface: #ffffff; --surface-2: #f6f9ff;
    --text: #0c1736; --text-2: #41506f; --muted: #6c7a98; --muted-2: #9aa6c0;
    --border: rgba(16,42,98,0.14); --border-soft: rgba(16,42,98,0.08);
    --border-hi: rgba(22,82,240,0.45); --hairline: rgba(16,42,98,0.10);
    --fill-1: rgba(16,42,98,0.035); --fill-2: rgba(16,42,98,0.06); --fill-hover: rgba(16,42,98,0.08);
    --track: rgba(16,42,98,0.10); --grid-line: rgba(16,42,98,0.10);
    --teal: #0fb6c6; --blue: #1652f0; --violet: #7c4dff; --shield: #0bb39a;
    --danger: #e5484d; --warning: #d98300; --ink-on-brand: #ffffff;
    --teal-soft: rgba(27,197,212,0.10); --blue-soft: rgba(22,82,240,0.08);
    --violet-soft: rgba(124,77,255,0.08); --shield-soft: rgba(16,184,160,0.10);
    --danger-soft: rgba(229,72,77,0.08);
    --grad-card: linear-gradient(180deg, #ffffff 0%, #f7faff 100%);
    --grad-brand: linear-gradient(135deg, #1BC5D4 0%, #1652F0 100%);
    --grad-brand-3: linear-gradient(120deg, #1BC5D4 0%, #1652F0 52%, #7C4DFF 100%);
    --grad-text: linear-gradient(120deg, #1652F0 0%, #12aecf 48%, #7C4DFF 100%);
    --shadow-sm: none; --shadow-md: none; --shadow-lg: none;
    background: #fff; color: var(--text);
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  body.hr-printing .hr-slide--cover::before,
  body.hr-printing .hr-slide--chapter::before { display: none; }
  body.hr-printing .hr-nav { display: none !important; }
  body.hr-printing .hr-slide > * { max-width: 100%; }
  body.hr-printing .hr-idxrow, body.hr-printing .hr-routecard,
  body.hr-printing .hr-tocrow { cursor: default; }
  body.hr-printing .hr-bandmark b { box-shadow: none; }
  /* COVER 2 → static certificate: freeze all motion, centered composition */
  body.hr-printing .hr-slide--cover2 { padding: 40px 48px 28px !important; }
  body.hr-printing .hrcv-aurora, body.hr-printing .hrcv-stars,
  body.hr-printing .hrcv-hint, body.hr-printing .hrcv-comet-g { display: none !important; }
  body.hr-printing .hrcv-rise { opacity: 1 !important; transform: none !important; animation: none !important; }
  body.hr-printing .hrcv-scorepill { opacity: 1 !important; transform: translateX(-50%) !important; }
  body.hr-printing .hrcv-ticks-g, body.hr-printing .hrcv-orbit-g,
  body.hr-printing .hrcv-arc, body.hr-printing .hrcv-star-dot,
  body.hr-printing .hrcv-sheen { animation: none !important; }
  body.hr-printing .hrcv-sheen { background: var(--grad-text); -webkit-background-clip: text; background-clip: text; }
  body.hr-printing .hrcv-emblem { filter: none; }
  body.hr-printing .hrcv-prepared, body.hr-printing .hrcv-scorepill { background: #fff; }
  body.hr-printing .hrcv-grid { grid-template-columns: minmax(280px, 0.9fr) 1.1fr; max-width: 100%; padding: 0; }
  body.hr-printing .hrcv-frame { inset: 8px; }
  body.hr-printing .hr-slide--cover2 .hr-foot { position: static; margin-top: auto; }
  body.hr-printing .hr-cover2 { overflow: visible; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F383 · CARE NETWORK — patient-side clinician surfaces
   (Care tab: team + grants + doctor notes · Plan tab: doctor's suggestions)
   Tokenized dual-theme; responsive at all 3 breakpoints; reduced-motion safe.
   ═══════════════════════════════════════════════════════════════════════════ */
.ov-care-net:empty, .ov-doc-orders:empty { display: none; }
.cn-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(300px, 1fr); gap: 18px; align-items: start; margin-top: 18px; }
.cn-grid-solo { grid-template-columns: 1fr; }
/* Notes launcher is a single full-width row; the care team card sits below. */
.cn-stack { display: grid; grid-template-columns: 1fr; gap: 18px; margin-top: 18px; }
.cn-sub { color: var(--text-2); font-size: 13.5px; margin: 6px 0 14px; }
.cn-sub b { color: var(--text); }
.cn-fine { display: flex; align-items: center; gap: 7px; font-size: 11px; color: var(--muted); margin-top: 14px; }
.cn-fine svg { width: 12px; height: 12px; flex: none; }
.cn-pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: var(--r-pill); font-size: 11px; font-weight: 700; white-space: nowrap; border: 1px solid transparent; }
.cn-pill svg { width: 11px; height: 11px; }
.cn-pill.ok { background: var(--shield-soft); color: var(--shield); border-color: rgba(58,235,181,.25); }
.cn-pill.new { background: var(--violet-soft); color: var(--violet); border-color: rgba(181,108,255,.3); }
.cn-pill.wait { background: rgba(255,181,71,.12); color: var(--warning); border-color: rgba(255,181,71,.3); }
.cn-pill.off { background: var(--fill-2); color: var(--muted); border-color: var(--border-soft); }

/* pending access request */
.cn-pending { margin-top: 18px; border-color: rgba(255,181,71,.35); }
.cn-scopes { border: 1px solid var(--border-soft); border-radius: var(--r-md); padding: 14px 16px; margin: 4px 0 16px; display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; }
.cn-scopes legend { font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); padding: 0 8px; }
.cn-scope { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--text-2); cursor: pointer; }
.cn-scope input { width: 16px; height: 16px; accent-color: var(--teal); flex: none; }
.cn-actions { display: flex; gap: 10px; flex-wrap: wrap; }

/* care team rows */
.cn-docs { display: grid; gap: 10px; }
.cn-docs--past { margin-top: 10px; opacity: .75; }
.cn-doc { display: flex; align-items: center; gap: 13px; padding: 13px; border-radius: var(--r-md); background: var(--fill-1); border: 1px solid var(--border-soft); }
.cn-doc-tx { min-width: 0; flex: 1; }
.cn-doc-tx b { display: block; font-size: 14px; line-height: 1.3; }
.cn-doc-tx small { display: block; color: var(--muted); font-size: 11.5px; }
.cn-doc-access { margin-top: 2px; color: var(--muted-2) !important; }
.cn-doc-side { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; flex: none; }
.cn-doc--off { opacity: .7; }
/* F408 · the unified care card footer holds both connect paths (invite code +
   add provider) — side-by-side on wider cards, stacked on phones. */
.cn-team-foot { margin-top: 14px; display: flex; flex-wrap: wrap; gap: 10px; }
.cn-team-foot .btn { flex: 1 1 220px; }
.cn-consent { margin-top: 4px; }
/* F408/F409 · empty-state — a clearly-labelled SAMPLE preview on the left and
   the right-aligned connect panel on the right, so the module's power is
   obvious while "not connected yet" stays unmistakably honest. */
/* the empty card carries a soft brand aurora so it never reads as a blank slab */
.cn-team--empty { padding: clamp(26px, 3.4vw, 40px) clamp(18px, 3vw, 30px);
  background:
    radial-gradient(90% 120% at 12% 0%, color-mix(in srgb, var(--teal) 9%, transparent), transparent 58%),
    radial-gradient(90% 120% at 100% 100%, color-mix(in srgb, var(--violet) 8%, transparent), transparent 55%),
    var(--surface); }
.cn-empty-grid { display: grid; grid-template-columns: minmax(0, .92fr) minmax(0, 1.08fr);
  gap: clamp(20px, 3vw, 40px); align-items: center; }
.cn-empty { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 0; }
.cn-empty h3 { font-family: var(--font-display); font-size: clamp(21px, 2.6vw, 27px);
  letter-spacing: -.015em; margin: 0; }
.cn-empty-lede { margin: 6px 0 0; font-size: 13px; color: var(--text-2); }
/* the emblem — a gradient-rimmed stethoscope medallion with a live halo */
.cn-empty-ic { position: relative; display: grid; place-items: center; width: 62px; height: 62px;
  margin-bottom: 14px; border-radius: 20px; color: var(--teal);
  background: linear-gradient(160deg, color-mix(in srgb, var(--teal) 16%, transparent),
                                      color-mix(in srgb, var(--violet) 12%, transparent));
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent);
  box-shadow: 0 18px 40px -20px color-mix(in srgb, var(--teal) 75%, transparent),
              inset 0 1px 0 color-mix(in srgb, #ffffff 16%, transparent); }
.cn-empty-ic::after { content: ''; position: absolute; inset: -12px; border-radius: 26px; pointer-events: none;
  background: radial-gradient(circle, color-mix(in srgb, var(--teal) 22%, transparent), transparent 68%);
  filter: blur(10px); opacity: .55; z-index: -1; }
.cn-empty-ic svg { width: 28px; height: 28px; }
/* three quiet glass trust chips — no consent claims, just the guarantees */
.cn-trust { display: flex; flex-wrap: wrap; justify-content: center; gap: 7px; margin: 16px 0 4px; }
.cn-trust-i { display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px; border-radius: 999px;
  font-size: 11px; color: var(--text-2);
  background: color-mix(in srgb, var(--surface-2) 60%, transparent);
  border: 1px solid var(--border-soft); }
.cn-trust-i svg { width: 12px; height: 12px; flex: none; color: var(--teal); }
.cn-trust-i b { font-weight: 650; }
.cn-empty .cn-team-foot { width: 100%; max-width: 360px; justify-content: center; margin-top: 16px; }
.cn-empty .cn-invite-live { width: 100%; max-width: 360px; text-align: left; }

/* the sample preview — inert and obviously NOT the member's data */
.cn-demo { position: relative; display: flex; flex-direction: column; gap: 10px;
  padding: clamp(14px, 1.8vw, 20px); border-radius: 20px;
  background:
    radial-gradient(110% 130% at 100% 0%, color-mix(in srgb, var(--violet) 7%, transparent), transparent 55%),
    color-mix(in srgb, var(--surface-2) 60%, transparent);
  border: 1px dashed color-mix(in srgb, var(--border-hi) 45%, var(--border));
  overflow: hidden; }
.cn-demo-tape { align-self: flex-start; display: inline-flex; align-items: center; white-space: nowrap;
  font-size: 10px; font-weight: 800; letter-spacing: .08em;
  text-transform: uppercase; padding: 4px 10px; border-radius: 999px; color: var(--muted);
  background: var(--fill-2); border: 1px dashed var(--border-hi); }
.cn-demo-card { position: relative; display: flex; flex-direction: column; gap: 11px;
  padding: 14px; border-radius: 14px; filter: saturate(.72);
  background: color-mix(in srgb, var(--surface) 60%, transparent);
  border: 1px solid var(--border-soft); }
.cn-demo-tape svg { width: 12px; height: 12px; vertical-align: -2px; margin-right: 4px; }
/* head — the illustrated (never stock-photo) sample clinician */
.cn-demo-head { display: flex; align-items: center; gap: 10px; }
.cn-demo-portrait { width: 40px; height: 40px; flex: none; color: var(--teal); }
.cn-demo-who { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.cn-demo-who b { font-family: var(--font-display); font-size: 14px; color: var(--text); }
.cn-demo-who small { font-size: 11.5px; color: var(--text-2); }
/* the current-vs-suggested plan comparison — two glass columns split by an
   arrow medallion; the suggested side glows teal so the upgrade reads instantly */
.cn-demo-vs { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: stretch; gap: 8px; }
.cn-demo-plan { min-width: 0; display: flex; flex-direction: column; gap: 7px;
  padding: 11px 12px 12px; border-radius: 14px;
  background: var(--fill-2); border: 1px solid var(--border); }
.cn-demo-plan.is-sug {
  background: radial-gradient(120% 130% at 100% 0%, color-mix(in srgb, var(--teal) 14%, transparent), transparent 60%),
              var(--fill-2);
  border-color: color-mix(in srgb, var(--teal) 45%, transparent); }
[data-theme="light"] .cn-demo-plan { background: #eef3fc; border-color: rgba(16, 42, 98, .16); }
[data-theme="light"] .cn-demo-plan.is-sug {
  background: radial-gradient(120% 130% at 100% 0%, color-mix(in srgb, var(--teal) 12%, transparent), transparent 60%), #eaf7f8;
  border-color: color-mix(in srgb, var(--teal) 50%, transparent); }
.cn-demo-plan > small { font-size: 9px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
  color: var(--text-2); }
.cn-demo-plan.is-sug > small { color: var(--teal); }
[data-theme="light"] .cn-demo-plan.is-sug > small { color: #0a8a96; }
.cn-demo-lines { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.cn-demo-lines li { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 7px;
  padding: 6px 8px; border-radius: 10px;
  background: color-mix(in srgb, var(--surface) 85%, transparent);
  border: 1px solid var(--border-soft);
  box-shadow: 0 1px 3px rgba(0, 0, 0, .12); }
[data-theme="light"] .cn-demo-lines li { background: #ffffff; border-color: rgba(16, 42, 98, .14);
  box-shadow: 0 1px 4px -1px rgba(20, 50, 120, .14); }
.cn-demo-lines li.is-up { grid-template-columns: 22px minmax(0, 1fr) auto auto;
  border-color: color-mix(in srgb, var(--teal) 26%, transparent); }
.cn-demo-lines li.is-new { grid-template-columns: 22px minmax(0, 1fr) auto auto;
  border-color: color-mix(in srgb, var(--teal) 34%, transparent);
  background: color-mix(in srgb, var(--teal) 8%, transparent); }
.cn-demo-pillic { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 7px;
  color: var(--teal); background: color-mix(in srgb, var(--teal) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 26%, transparent); }
[data-theme="light"] .cn-demo-pillic { color: #0a8a96; }
.cn-demo-pillic svg { width: 12px; height: 12px; }
.cn-demo-nm { font-size: 11.5px; font-weight: 650; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cn-demo-dose { font-family: var(--font-display); font-size: 12px; font-weight: 700; color: var(--text);
  white-space: nowrap; }
.cn-demo-up { display: grid; place-items: center; color: var(--teal); }
.cn-demo-up svg { width: 12px; height: 12px; }
.cn-demo-new { font-size: 8px; font-weight: 800; letter-spacing: .05em; padding: 2px 6px; border-radius: 999px;
  color: var(--teal); background: color-mix(in srgb, var(--teal) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--teal) 32%, transparent); white-space: nowrap; }
.cn-demo-vsdot { align-self: center; display: grid; place-items: center; width: 28px; height: 28px;
  border-radius: 50%; color: #fff;
  background: linear-gradient(115deg, var(--teal), var(--blue-2));
  box-shadow: 0 6px 16px -8px color-mix(in srgb, var(--blue-2) 70%, transparent); }
.cn-demo-vsdot svg { width: 13px; height: 13px; }
/* inert sample buttons — they LOOK like the real CTAs but never act */
.cn-demo-btns { display: flex; flex-wrap: wrap; gap: 8px; }
.cn-demo-btn { flex: 1 1 110px; text-align: center; padding: 8px 12px; border-radius: 11px;
  font-family: var(--font-display); font-weight: 700; font-size: 11.5px;
  color: var(--text-2); background: var(--fill-1); border: 1px solid var(--border-soft); }
.cn-demo-btn.is-primary { color: #fff; border-color: transparent;
  background: linear-gradient(115deg, var(--teal), var(--blue-2)); }
.cn-demo-cap { margin: 0; font-size: 11.5px; line-height: 1.5; color: var(--text-2); }
.cn-demo-cap svg { width: 12px; height: 12px; vertical-align: -2px; margin-right: 4px; color: var(--teal); }
/* tablet + phone — the sample preview is DROPPED entirely; the connect panel
   owns the card on its own, still centered. */
@media (max-width: 900px) {
  .cn-empty-grid { grid-template-columns: 1fr; }
  .cn-demo { display: none; }
}
.cn-invite-live { margin-top: 14px; padding: 12px 14px; border-radius: var(--r-sm); background: var(--teal-soft); border: 1px solid rgba(20,224,203,.3); display: grid; gap: 3px; }
.cn-invite-live .cn-invite-code { font-family: var(--font-display); font-weight: 700; color: var(--teal); font-size: 13px; }
.cn-invite-live small { font-size: 11.5px; color: var(--text-2); }

/* invite code modal */
.cn-code-big { font-family: var(--font-display); font-size: clamp(26px, 6vw, 38px); font-weight: 700; letter-spacing: .12em; text-align: center; padding: 22px 12px; margin: 6px 0 4px; border-radius: var(--r-md); background: var(--teal-soft); border: 1px dashed rgba(20,224,203,.45); color: var(--teal); user-select: all; }

/* doctor notes feed */
.cn-note-list { display: grid; gap: 12px; }
.cn-note { padding: 14px; border-radius: var(--r-md); background: var(--fill-1); border: 1px solid var(--border-soft); position: relative; }
.cn-note--new { border-color: var(--border-hi); box-shadow: 0 0 0 1px var(--teal-soft); }
.cn-note--new::after { content: 'NEW'; position: absolute; top: 12px; right: 12px; font-size: 9px; font-weight: 800; letter-spacing: .12em; color: var(--teal); }
.cn-note--done { opacity: .72; }
.cn-note-head { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-bottom: 7px; }
.cn-note-head b { font-size: 13px; }
.cn-note-head time { margin-left: auto; font-size: 11px; color: var(--muted-2); }
.cn-kind { padding: 2px 10px; border-radius: 99px; font-size: 9.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }
.cn-kind--note { background: var(--blue-soft); color: var(--blue); }
.cn-kind--concern { background: var(--danger-soft); color: var(--danger); }
.cn-kind--celebrate { background: var(--shield-soft); color: var(--shield); }
.cn-kind--question { background: var(--violet-soft); color: var(--violet); }
.cn-note-anchor { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--muted); margin-bottom: 6px; }
.cn-note-anchor svg { width: 12px; height: 12px; flex: none; color: var(--teal); }
.cn-note-body { font-size: 13.5px; color: var(--text-2); line-height: 1.55; }
.cn-note-myreply { margin-top: 10px; padding: 9px 13px; border-left: 3px solid var(--teal); background: var(--teal-soft); border-radius: 0 var(--r-xs) var(--r-xs) 0; font-size: 12.5px; color: var(--text-2); }
.cn-note-myreply small { display: block; color: var(--teal); font-weight: 700; font-size: 10px; letter-spacing: .1em; text-transform: uppercase; margin-bottom: 3px; }
.cn-note-foot { display: flex; gap: 14px; margin-top: 10px; align-items: center; }
.cn-note-foot .ph-link { font-size: 12px; }
.cn-done { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--shield); font-weight: 700; }
.cn-done svg { width: 12px; height: 12px; }
.cn-reply-box { margin-top: 10px; display: grid; gap: 10px; }
.cn-reply-box textarea { width: 100%; min-height: 70px; padding: 10px 13px; border-radius: var(--r-sm); border: 1px solid var(--border); background: var(--fill-1); color: var(--text); font: 13px/1.5 var(--font-body); outline: none; resize: vertical; }
.cn-reply-box textarea:focus { border-color: var(--border-hi); box-shadow: 0 0 0 3px var(--teal-soft); }

/* Plan tab · doctor's suggestions */
.do-card { margin-bottom: 18px; border-color: rgba(20,224,203,.3); }
/* F410 · the LIVE connected card wears the sample's skin: portrait head,
   Now → Suggested pill comparison, then the per-suggestion decision rows. */
.do-card--live { padding: clamp(14px, 1.8vw, 20px);
  background:
    radial-gradient(110% 130% at 100% 0%, color-mix(in srgb, var(--teal) 7%, transparent), transparent 55%),
    var(--surface); }
.do-live { border: 0; background: none; padding: 0; filter: none; }
.do-live .cn-demo-head .cn-pill { flex: none; }
.do-live .do-list { margin-top: 2px; }
.do-general { display: flex; align-items: flex-start; gap: 7px; margin: 0;
  padding: 10px 12px; border-radius: 12px; font-size: 12.5px; font-style: italic;
  line-height: 1.5; color: var(--text-2);
  background: var(--fill-1); border: 1px solid var(--border-soft); }
.do-general svg { width: 13px; height: 13px; flex: none; color: var(--violet); margin-top: 2px; }
/* extra pill-row states for the live comparison */
.cn-demo-down svg { transform: rotate(180deg); }
.cn-demo-lines li.is-down { grid-template-columns: 22px minmax(0, 1fr) auto auto;
  border-color: color-mix(in srgb, var(--blue-2) 30%, transparent); }
.cn-demo-lines li.is-down .cn-demo-up { color: var(--blue-2); }
.cn-demo-lines li.is-out { grid-template-columns: 22px minmax(0, 1fr) auto;
  border-color: color-mix(in srgb, var(--danger) 30%, transparent);
  background: color-mix(in srgb, var(--danger) 6%, transparent); }
.cn-demo-out { color: var(--danger); background: color-mix(in srgb, var(--danger) 10%, transparent);
  border-color: color-mix(in srgb, var(--danger) 32%, transparent); }
.cn-demo-lines li.is-out .cn-demo-pillic { color: var(--danger);
  background: color-mix(in srgb, var(--danger) 10%, transparent); }
.do-list { display: grid; gap: 7px; }
/* F410 · one compact pill-style decision line — mirrors .cn-demo-lines rows:
   kind chip · product + quoted note · inline Accept / Decline / dismiss. */
.do-row { display: flex; align-items: center; gap: 10px; padding: 9px 11px; border-radius: 12px;
  background: color-mix(in srgb, var(--surface) 85%, transparent);
  border: 1px solid var(--border);
  box-shadow: 0 1px 3px rgba(0, 0, 0, .10); }
[data-theme="light"] .do-row { background: #ffffff; border-color: rgba(16, 42, 98, .16);
  box-shadow: 0 2px 8px -3px rgba(20, 50, 120, .16); }
.do-ic { flex: none; width: 26px; height: 26px; border-radius: 8px; display: grid; place-items: center; }
.do-ic svg { width: 13px; height: 13px; }
.do-ic--add { background: var(--shield-soft); color: var(--shield); }
.do-ic--remove { background: var(--danger-soft); color: var(--danger); }
.do-ic--qty, .do-ic--timing { background: var(--blue-soft); color: var(--blue); }
.do-ic--general { background: var(--violet-soft); color: var(--violet); }
.do-tx { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.do-tx b { font-size: 12.5px; font-weight: 650; line-height: 1.3; display: inline-flex; align-items: baseline; gap: 6px; }
.do-kind { font-size: 9px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase;
  color: var(--text-2); align-self: center; padding: 2px 7px; border-radius: 999px;
  background: var(--fill-2); border: 1px solid var(--border-soft); }
.do-qty { font-style: normal; font-family: var(--font-display); font-weight: 700; color: var(--teal); }
[data-theme="light"] .do-qty { color: #0a8a96; }
.do-note { font-size: 12px; color: var(--text-2); font-style: italic; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
/* inline decision buttons — quiet glass, teal-gradient accept */
.do-actions { flex: none; display: flex; align-items: center; gap: 6px; }
.do-btn { appearance: none; -webkit-appearance: none; cursor: pointer; font: inherit;
  display: inline-flex; align-items: center; gap: 5px; min-height: 30px; padding: 6px 12px;
  border-radius: 999px; font-family: var(--font-display); font-weight: 700; font-size: 11px;
  color: var(--text); background: var(--fill-2); border: 1px solid var(--border);
  transition: transform .2s var(--ease-out), filter .2s, background .2s, color .2s, border-color .2s; }
[data-theme="light"] .do-btn:not(.do-btn--yes) { background: #f2f6fd; border-color: rgba(16, 42, 98, .2); }
.do-btn svg { width: 11px; height: 11px; flex: none; }
.do-btn:hover { color: var(--text); background: var(--fill-2); border-color: var(--border-hi); transform: translateY(-1px); }
.do-btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.do-btn--yes { color: #fff; border-color: transparent;
  background: linear-gradient(115deg, var(--teal), var(--blue-2));
  box-shadow: 0 6px 14px -8px color-mix(in srgb, var(--blue-2) 70%, transparent); }
.do-btn--yes:hover { color: #fff; background: linear-gradient(115deg, var(--teal), var(--blue-2)); filter: brightness(1.08); }
.do-x { flex: none; width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center;
  background: none; border: 1px solid var(--border-soft); color: var(--muted); cursor: pointer;
  transition: background .15s, color .15s, border-color .15s; }
.do-x:hover { background: var(--fill-hover); color: var(--text); border-color: var(--border-hi); }
.do-x svg { width: 11px; height: 11px; }
/* phones — the note gets its own line and the actions wrap under the text */
@media (max-width: 640px) {
  .do-row { flex-wrap: wrap; }
  .do-tx { flex: 1 1 calc(100% - 40px); }
  .do-note { white-space: normal; }
  .do-actions { margin-left: 36px; }
}
/* Undo button inside the toast */
.ov-toast-act { flex: none; margin-left: 12px; font-family: var(--font-display); font-size: 12px; font-weight: 700;
  color: var(--teal); background: none; border: 0; cursor: pointer; padding: 2px 4px;
  border-radius: var(--r-xs); letter-spacing: .02em; }
.ov-toast-act:hover { text-decoration: underline; }
/* F399 · Suggestion rows in the Doctor's Notes reader */
.do-sug-row { padding: 12px; border-radius: var(--r-md); border: 1px solid var(--border-soft); background: var(--fill-1); margin-bottom: 8px; }
.do-sug-row--dimiss { opacity: .75; }
.do-sug-answer { flex: none; }

@media (max-width: 640px) {
  .do-row-top { flex-wrap: nowrap; }
  .do-actions { flex-direction: row; width: 100%; }
  .do-actions .btn { flex: 1; }
}

/* F383 fixes: constrain eyebrow icons in care cards; NEW tag vs date collision */
.cn-team .eyebrow svg, .cn-notes .eyebrow svg, .cn-pending .eyebrow svg, .do-card .eyebrow svg { width: 13px; height: 13px; }
.cn-note--new::after { top: -7px; right: 10px; background: var(--surface); padding: 2px 7px; border-radius: 99px; border: 1px solid var(--border-hi); }

/* ═══ F387 · MEMBER MESSAGES + NOTE FOLDERS ════════════════════════════════ */
.ov-messages:empty { display: none; }
.msg-layout { display: grid; grid-template-columns: minmax(200px, 260px) minmax(0, 1fr); gap: 16px; margin-top: 16px; align-items: start; }
.msg-list { display: grid; gap: 6px; max-height: 420px; overflow-y: auto; }
.msg-row {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 10px 11px;
  border-radius: var(--r-md); text-align: left; background: none; border: 1px solid transparent;
  cursor: pointer; transition: background .15s, border-color .15s;
}
.msg-row:hover { background: var(--fill-hover); }
.msg-row.active { background: var(--teal-soft); border-color: rgba(20,224,203,.3); }
.msg-row-tx { flex: 1; min-width: 0; }
.msg-row-tx b { display: flex; align-items: center; gap: 7px; font-size: 13px; color: var(--text); }
.msg-row-tx small { display: block; color: var(--muted); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.msg-row time { flex: none; font-size: 10px; color: var(--muted-2); }
.msg-dot { min-width: 17px; height: 17px; padding: 0 5px; border-radius: 99px; display: inline-grid; place-items: center; background: var(--danger); color: #fff; font-size: 9.5px; font-weight: 800; }
.msg-thread { display: flex; flex-direction: column; min-height: 340px; border: 1px solid var(--border-soft); border-radius: var(--r-md); background: var(--fill-1); }
.msg-body { flex: 1; max-height: 380px; overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 11px; }
.msg-bub { max-width: 84%; padding: 10px 14px; border-radius: var(--r-md); font-size: 13.5px; line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; }
.msg-bub.mine { align-self: flex-end; background: var(--grad-brand); color: var(--ink-on-brand); border-bottom-right-radius: 5px; }
.msg-bub.theirs { align-self: flex-start; background: var(--surface); border: 1px solid var(--border-soft); border-bottom-left-radius: 5px; }
.msg-bub time { display: block; font-size: 9.5px; opacity: .7; margin-top: 5px; }
.msg-img img { max-width: 200px; border-radius: 9px; display: block; margin-bottom: 6px; }
.msg-file { display: flex; align-items: center; gap: 9px; padding: 8px 11px; border-radius: 9px; background: rgba(255,255,255,.1); margin-bottom: 6px; text-decoration: none; color: inherit; }
.msg-file svg { width: 17px; height: 17px; flex: none; }
.msg-file b { display: block; font-size: 12px; }
.msg-file small { font-size: 10px; opacity: .75; }
.msg-tray { padding: 0 16px 8px; }
.msg-att-chip { display: inline-flex; align-items: center; gap: 9px; padding: 7px 11px; border-radius: var(--r-sm); background: var(--fill-2); border: 1px solid var(--border-soft); font-size: 11.5px; }
.msg-att-chip img { width: 30px; height: 30px; object-fit: cover; border-radius: 5px; }
.msg-att-chip svg { width: 16px; height: 16px; color: var(--teal); }
.msg-att-chip b { display: block; }
.msg-att-chip small { color: var(--muted); }
.msg-att-chip button { width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; color: var(--muted); background: none; border: none; cursor: pointer; }
.msg-att-chip button svg { width: 11px; height: 11px; }
.msg-att-err { font-size: 11.5px; color: var(--danger); font-weight: 600; }
.msg-foot { display: flex; align-items: flex-end; gap: 8px; padding: 12px 16px 14px; border-top: 1px solid var(--border-soft); }
.msg-clip { width: 36px; height: 36px; flex: none; border-radius: 50%; display: grid; place-items: center; color: var(--muted); border: 1px solid var(--border); background: none; cursor: pointer; }
.msg-clip:hover { color: var(--teal); border-color: var(--border-hi); }
.msg-clip svg { width: 16px; height: 16px; }
.msg-input { flex: 1; padding: 10px 14px; border-radius: var(--r-pill); border: 1px solid var(--border); background: var(--surface); color: var(--text); outline: none; font: 13.5px/1.5 var(--font-body); resize: none; max-height: 100px; }
.msg-input:focus { border-color: var(--border-hi); box-shadow: 0 0 0 3px var(--teal-soft); }

/* nav badge (unread messages) */
.mtab-badge {
  position: absolute; top: 4px; right: 50%; transform: translateX(16px);
  min-width: 16px; height: 16px; padding: 0 5px; border-radius: 99px; display: grid; place-items: center;
  background: var(--danger); color: #fff; font-size: 9px; font-weight: 800; line-height: 1; z-index: 2;
}
.mtabbar--top .mtab-badge { top: -3px; right: -4px; transform: none; }
.mtab { position: relative; }

/* note folders */
.cn-folders { display: flex; flex-wrap: wrap; gap: 7px; margin: 14px 0 4px; }
.cn-fold {
  position: relative; display: inline-flex; align-items: center; gap: 6px; padding: 6px 13px;
  border-radius: var(--r-pill); font-size: 12px; font-weight: 600; cursor: pointer;
  border: 1px solid var(--border); background: var(--fill-1); color: var(--text-2);
}
.cn-fold:hover { border-color: var(--border-hi); color: var(--text); }
.cn-fold b { font-size: 10.5px; opacity: .7; }
.cn-fold.on { background: var(--teal-soft); border-color: rgba(20,224,203,.4); color: var(--teal); }
.cn-fold.f-blue.on { background: var(--blue-soft); border-color: rgba(91,149,255,.4); color: var(--blue); }
.cn-fold.f-violet.on { background: var(--violet-soft); border-color: rgba(181,108,255,.4); color: var(--violet); }
.cn-fold.f-amber.on { background: rgba(255,181,71,.12); border-color: rgba(255,181,71,.4); color: var(--warning); }
.cn-fold.f-rose.on { background: var(--danger-soft); border-color: rgba(255,97,115,.4); color: var(--danger); }
.cn-fold-x { display: inline-grid; place-items: center; width: 15px; height: 15px; border-radius: 50%; opacity: .45; }
.cn-fold-x svg { width: 9px; height: 9px; }
.cn-fold-x:hover { opacity: 1; background: var(--danger-soft); color: var(--danger); }
.cn-fold-new { border-style: dashed; }
.cn-fold-new svg { width: 11px; height: 11px; }
.cn-move svg { width: 12px; height: 12px; }
.cn-movemenu {
  position: absolute; z-index: 10002; min-width: 200px; padding: 8px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
  box-shadow: var(--shadow-md); display: grid; gap: 2px;
}
.cn-movemenu b { font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); padding: 4px 10px 6px; }
.cn-movemenu button {
  display: flex; align-items: center; gap: 7px; width: 100%; padding: 8px 10px; border-radius: var(--r-xs);
  font-size: 13px; text-align: left; color: var(--text-2); background: none; border: none; cursor: pointer;
}
.cn-movemenu button:hover { background: var(--fill-hover); color: var(--text); }
.cn-movemenu-new { border-top: 1px solid var(--hairline) !important; margin-top: 4px; padding-top: 10px !important; color: var(--teal) !important; }
.cn-movemenu-new svg { width: 12px; height: 12px; }

@media (max-width: 900px) { .msg-layout { grid-template-columns: 1fr; } .msg-list { max-height: 220px; } }

/* ═══ F388 · INLINE ATTACHMENT PREVIEWS (member messages) ══════════════════ */
.msg-att { display: block; margin-bottom: 8px; border-radius: 12px; overflow: hidden; background: rgba(0,0,0,.20); }
[data-theme="light"] .msg-bub.theirs .msg-att { background: rgba(16,42,98,.05); }
.msg-att img { display: block; width: 100%; max-width: 260px; max-height: 300px; object-fit: cover; cursor: zoom-in; }
.msg-att--pdf object { display: block; width: 100%; height: 300px; border: 0; background: #fff; }
.msg-att--txt pre {
  margin: 0; padding: 12px 14px; max-height: 220px; overflow: auto;
  font: 11.5px/1.55 ui-monospace, SFMono-Regular, Menlo, monospace;
  white-space: pre-wrap; word-break: break-word; color: inherit;
}
.msg-att-fallback { display: block; padding: 22px 14px; font-size: 12px; text-align: center; opacity: .8; }
.msg-att-bar {
  display: flex; align-items: center; gap: 8px; padding: 8px 11px;
  font-size: 11px; background: rgba(0,0,0,.28);
}
[data-theme="light"] .msg-bub.theirs .msg-att-bar { background: rgba(16,42,98,.07); }
.msg-att-bar svg { width: 14px; height: 14px; flex: none; opacity: .85; }
.msg-att-bar b { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.msg-att-bar small { flex: none; opacity: .7; }
.msg-att-bar a { flex: none; color: inherit; font-weight: 700; text-decoration: underline; opacity: .9; }
.msg-att-bar a:hover { opacity: 1; }

/* image lightbox */
.msg-lightbox {
  position: fixed; inset: 0; z-index: 10050; display: grid; place-items: center; padding: 5vh 4vw;
  background: rgba(3,6,15,.88); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  opacity: 0; transition: opacity .2s; cursor: zoom-out;
}
.msg-lightbox.on { opacity: 1; }
.msg-lightbox img { max-width: 100%; max-height: 90vh; border-radius: 12px; box-shadow: var(--shadow-lg); cursor: default; }
.msg-lb-x, .msg-lb-dl {
  position: absolute; top: 20px; display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--r-pill); background: rgba(255,255,255,.14); color: #fff;
  border: 1px solid rgba(255,255,255,.3); cursor: pointer; backdrop-filter: blur(8px);
}
.msg-lb-x { right: 20px; width: 40px; height: 40px; }
.msg-lb-x svg { width: 16px; height: 16px; }
.msg-lb-dl { right: 70px; height: 40px; padding: 0 18px; font: 700 13px var(--font-body); text-decoration: none; }
.msg-lb-x:hover, .msg-lb-dl:hover { background: rgba(255,255,255,.24); }
@media (max-width: 640px) { .msg-att--pdf object { height: 220px; } .msg-att img { max-width: 100%; } }

/* ═══ F389 · COLLAPSED CARE LAUNCHERS + FULLSCREEN READER ══════════════════ */
.cn-notes--collapsed { padding: 0; overflow: hidden; }
.cn-launch {
  display: flex; align-items: center; gap: 14px; width: 100%; text-align: left;
  padding: clamp(16px, 2vw, 20px); background: none; border: 0; cursor: pointer;
  transition: background .16s var(--ease-out);
}
.cn-launch:hover { background: var(--fill-hover); }
.cn-launch:focus-visible { outline: 2px solid var(--teal); outline-offset: -3px; }
.cn-launch-ic {
  position: relative; flex: none; width: 46px; height: 46px; border-radius: var(--r-md);
  display: grid; place-items: center; background: var(--teal-soft); color: var(--teal);
}
.cn-launch-ic svg { width: 21px; height: 21px; }
.cn-launch-badge {
  position: absolute; top: -6px; right: -6px; min-width: 20px; height: 20px; padding: 0 6px;
  border-radius: 99px; display: grid; place-items: center; background: var(--danger); color: #fff;
  font-size: 10.5px; font-weight: 800; border: 2px solid var(--surface);
}
.cn-launch-tx { flex: 1; min-width: 0; }
.cn-launch-tx b { display: flex; align-items: center; gap: 9px; font-size: 15.5px; font-family: var(--font-display); letter-spacing: -.01em; }
.cn-launch-tx small { display: block; color: var(--muted); font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-top: 3px; }
.cn-launch-meta { color: var(--muted-2) !important; font-size: 11px !important; }
.cn-launch-go { flex: none; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: var(--fill-2); color: var(--text-2); }
.cn-launch:hover .cn-launch-go { background: var(--teal-soft); color: var(--teal); }
.cn-launch-go svg { width: 15px; height: 15px; }

/* fullscreen reader */
body.cr-full-open { overflow: hidden !important; }
/* Entrance runs as a one-shot animation, not an opacity transition: a
   transition on a just-inserted node can be skipped (or stall in a throttled
   tab) and leave the overlay permanently invisible. */
.cr-full {
  position: fixed; inset: 0; z-index: 10040; display: flex; flex-direction: column;
  background: var(--bg-1);
  animation: crFullIn .26s var(--ease-out) both;
}
@keyframes crFullIn { from { opacity: 0; transform: scale(.985); } to { opacity: 1; transform: none; } }
.cr-full.closing { animation: crFullOut .2s var(--ease-in) both; }
@keyframes crFullOut { from { opacity: 1; transform: none; } to { opacity: 0; transform: scale(.99); } }
.cr-full-head {
  flex: none; display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: clamp(14px, 2vw, 20px) clamp(14px, 3vw, 32px);
  border-bottom: 1px solid var(--border); background: var(--surface);
}
.cr-full-ic { flex: none; width: 42px; height: 42px; border-radius: var(--r-md); display: grid; place-items: center; background: var(--teal-soft); color: var(--teal); }
.cr-full-ic svg { width: 20px; height: 20px; }
.cr-full-tx { min-width: 0; }
.cr-full-tx .eyebrow { font-size: 10px; }
.cr-full-tx .eyebrow svg { width: 12px; height: 12px; flex: none; }
.cr-full-tx h2 { font-family: var(--font-display); font-size: clamp(19px, 2.4vw, 26px); letter-spacing: -.02em; line-height: 1.15; }
.cr-full-tabs { margin-left: auto; display: flex; gap: 6px; padding: 4px; border-radius: var(--r-pill); background: var(--fill-1); border: 1px solid var(--border-soft); }
.cr-tab {
  position: relative; display: inline-flex; align-items: center; gap: 7px; padding: 8px 16px;
  border-radius: var(--r-pill); border: 0; background: none; cursor: pointer;
  font: 600 13px var(--font-body); color: var(--muted);
}
.cr-tab svg { width: 15px; height: 15px; }
.cr-tab:hover { color: var(--text); }
.cr-tab.on { background: var(--surface); color: var(--teal); box-shadow: var(--shadow-sm); }
.cr-tab-badge {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 99px; display: inline-grid; place-items: center;
  background: var(--danger); color: #fff; font-size: 9.5px; font-weight: 800; font-style: normal;
}
.cr-full-x { flex: none; width: 42px; height: 42px; border-radius: 50%; display: grid; place-items: center; border: 1px solid var(--border); background: var(--fill-1); color: var(--text-2); cursor: pointer; }
.cr-full-x:hover { background: var(--fill-hover); color: var(--text); }
.cr-full-x svg { width: 16px; height: 16px; }
.cr-full-body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(220px, 300px) minmax(0, 1fr); }
.cr-rail { border-right: 1px solid var(--border-soft); padding: 16px; overflow-y: auto; background: var(--bg-2); }
.cr-rail--msg { display: grid; gap: 6px; align-content: start; }
.cr-folders { margin: 0; flex-direction: column; align-items: stretch; }
.cr-folders .cn-fold { justify-content: space-between; }
.cr-scroll { overflow-y: auto; padding: clamp(16px, 2.4vw, 30px); }
.cr-scroll--msg { padding: 0; display: flex; flex-direction: column; min-height: 0; }
.cr-scroll--msg .msg-thread { flex: 1; min-height: 0; border: 0; border-radius: 0; background: transparent; }
.cr-scroll--msg .msg-body { max-height: none; }
.cr-scroll .cn-note-list { max-width: 860px; margin: 0 auto; }
.cr-empty { grid-column: 1 / -1; display: grid; place-content: center; justify-items: center; text-align: center; padding: 40px; color: var(--muted); }
.cr-empty svg { width: 46px; height: 46px; opacity: .5; margin-bottom: 14px; }
.cr-empty b { font-family: var(--font-display); font-size: 17px; color: var(--text-2); display: block; margin-bottom: 6px; }
.cr-empty p { font-size: 13px; max-width: 42ch; }

@media (max-width: 860px) {
  .cr-full-body { grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr); }
  .cr-rail { border-right: 0; border-bottom: 1px solid var(--border-soft); max-height: 40vh; }
  .cr-folders { flex-direction: row; flex-wrap: wrap; }
  .cr-full-tabs { margin-left: 0; order: 3; width: 100%; }
  .cr-tab { flex: 1; justify-content: center; }
}
@media (max-width: 640px) {
  .cn-launch { gap: 11px; padding: 14px; }
  .cn-launch-ic { width: 40px; height: 40px; }
  .cn-launch-tx b { font-size: 14.5px; }
  .cr-full-head { padding: 12px 14px calc(12px + env(safe-area-inset-top) * 0); }
  .cr-rail { max-height: 32vh; padding: 12px; }
}

/* F389: the body guard near the top is `overflow-y: visible !important`, so the
   reader's scroll-lock must carry !important to win. */
body.cr-full-open { overflow-y: hidden !important; }

/* ═══ F390 · "SHOW ME WHERE" — anchored note spotlight ═════════════════════ */
.cn-goto svg { width: 12px; height: 12px; }
.cn-spotlight {
  position: relative; z-index: 3;
  outline: 2px solid var(--teal); outline-offset: 5px; border-radius: var(--r-lg);
  animation: cnSpotPulse 2.2s var(--ease-out) 3;
}
@keyframes cnSpotPulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--teal-soft); }
  50%      { box-shadow: 0 0 0 14px transparent; }
}
.cn-spot {
  position: absolute; z-index: 10030; width: min(390px, calc(100vw - 24px));
  padding: 16px 18px; border-radius: var(--r-lg);
  background: var(--surface); border: 1px solid var(--border-hi);
  box-shadow: var(--shadow-lg), 0 0 40px var(--teal-glow);
  opacity: 0; transform: translateY(8px);
  animation: cnSpotIn .3s var(--ease-out) both;
}
@keyframes cnSpotIn { to { opacity: 1; transform: none; } }
/* No anchor element found → center it as a plain floating card. */
.cn-spot--center { position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%); }
.cn-spot--center { animation: none; opacity: 1; }
.cn-spot-head { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-bottom: 8px; }
.cn-spot-head b { font-size: 13px; }
.cn-spot-head time { margin-left: auto; font-size: 11px; color: var(--muted-2); }
.cn-spot-anchor { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--muted); margin-bottom: 7px; }
.cn-spot-anchor svg { width: 12px; height: 12px; flex: none; color: var(--teal); }
.cn-spot-body { font-size: 13.5px; line-height: 1.55; color: var(--text-2); }
.cn-spot-foot { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.cn-spot-foot .btn svg { width: 13px; height: 13px; }
@media (max-width: 640px) {
  /* On a phone the card docks to the bottom so it never covers the element. */
  .cn-spot { position: fixed !important; left: 8px !important; right: 8px !important;
    top: auto !important; bottom: calc(78px + env(safe-area-inset-bottom)); width: auto; }
  .cn-spot--center { transform: none; }
}

/* ═══ F397 · RICHER CLINICIAN CARD ON THE PATIENT'S CARE TAB ═══════════════ */
.ph-avatar { overflow: hidden; }
.ph-av-img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; display: block; }
.cn-doc-bio { margin-top: 6px; line-height: 1.55; color: var(--text-2); }
.cn-doc-facts { margin-top: 4px; color: var(--muted); font-size: 11.5px; }

/* ═══ F391 · CARE PERMISSIONS CONSOLE ══════════════════════════════════════
   The member's consent surface. Everything is OFF until they say otherwise,
   so the UI has to make "off" feel intentional rather than broken.          */
body.cp-open { overflow-y: hidden !important; }
.cp-back { align-items: center; justify-content: center; padding: 20px; overflow-y: auto; }
.cp-modal {
  width: min(680px, 100%); max-height: min(88vh, 900px);
  display: flex; flex-direction: column; padding: 0; overflow: hidden;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg); box-shadow: var(--shadow-lg);
  animation: cpIn .3s cubic-bezier(.2, .8, .25, 1) both;
}
@keyframes cpIn { from { opacity: 0; transform: translateY(16px) scale(.97); } to { opacity: 1; transform: none; } }

.cp-head {
  display: flex; align-items: center; gap: 14px;
  padding: clamp(20px, 2.6vw, 26px) clamp(20px, 2.6vw, 28px) 14px;
  border-bottom: 1px solid var(--border); position: relative;
}
.cp-head::after {
  content: ''; position: absolute; inset: auto 0 -1px 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--teal-glow), transparent);
}
.cp-av { width: 46px; height: 46px; font-size: 15px; flex: 0 0 auto; }
.cp-head-tx { min-width: 0; }
.cp-head-tx .eyebrow { display: inline-flex; align-items: center; gap: 5px; }
.cp-head-tx .eyebrow svg { width: 12px; height: 12px; flex: 0 0 auto; }
.cp-head-tx h3 { font: 700 clamp(17px, 2vw, 20px)/1.25 var(--font-display); margin: 3px 0 2px; }
.cp-head-tx small { color: var(--muted); font-size: 12.5px; }
.cp-sub { padding: 14px clamp(20px, 2.6vw, 28px) 0; color: var(--text-2); font-size: 13.5px; line-height: 1.6; }
.cp-count {
  margin: 12px clamp(20px, 2.6vw, 28px) 0; padding: 9px 14px; border-radius: 999px;
  background: var(--teal-soft, rgba(20, 224, 203, .08)); border: 1px solid var(--teal-glow);
  font-size: 12.5px; color: var(--text-2); width: fit-content;
}
.cp-count b { color: var(--teal); }
.cp-count span { color: var(--muted); }

.cp-body { flex: 1 1 auto; overflow-y: auto; padding: 6px clamp(20px, 2.6vw, 28px) 8px; }
.cp-group { margin-top: 22px; }
.cp-group-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.cp-group-head h4 { font: 700 14px/1.3 var(--font-display); letter-spacing: -.01em; }
.cp-group-head small { color: var(--muted); font-size: 12px; }
.cp-group-all {
  flex: 0 0 auto; background: none; border: 1px solid var(--border); color: var(--text-2);
  border-radius: 999px; padding: 5px 12px; font: 600 11.5px var(--font-body); cursor: pointer;
  transition: border-color .16s, color .16s;
}
.cp-group-all:hover { border-color: var(--teal); color: var(--teal); }

.cp-perms { display: grid; gap: 8px; }
.cp-perm {
  display: flex; align-items: center; gap: 14px; cursor: pointer;
  padding: 13px 15px; border-radius: var(--r-md);
  background: var(--surface-2); border: 1px solid var(--border);
  transition: border-color .16s, background .16s;
}
.cp-perm:hover { border-color: var(--teal-glow); }
.cp-perm:has(input:checked) { border-color: var(--teal); background: var(--teal-soft, rgba(20, 224, 203, .06)); }
.cp-perm-tx { flex: 1 1 auto; min-width: 0; }
.cp-perm-tx b { display: block; font: 600 13.5px/1.35 var(--font-body); margin-bottom: 3px; }
.cp-perm-tx small { display: block; color: var(--muted); font-size: 12px; line-height: 1.5; }
.cp-care-tag {
  display: inline-flex; align-items: center; gap: 4px; margin-left: 8px;
  padding: 2px 8px; border-radius: 999px; font: 600 10px var(--font-body);
  color: var(--warning); background: color-mix(in srgb, var(--warning) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--warning) 35%, transparent);
  vertical-align: middle; letter-spacing: .02em;
}
.cp-care-tag svg { width: 9px; height: 9px; }
.cp-perm--care:has(input:checked) { border-color: var(--warning); background: color-mix(in srgb, var(--warning) 7%, transparent); }

/* Switch */
.cp-switch { position: relative; flex: 0 0 auto; width: 44px; height: 26px; }
.cp-switch input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; z-index: 2; }
.cp-switch i {
  position: absolute; inset: 0; border-radius: 999px; pointer-events: none;
  background: var(--surface); border: 1px solid var(--border);
  transition: background .2s var(--ease-out), border-color .2s var(--ease-out);
}
.cp-switch i::after {
  content: ''; position: absolute; top: 50%; left: 3px; width: 18px; height: 18px;
  border-radius: 50%; background: var(--muted); transform: translateY(-50%);
  transition: transform .22s cubic-bezier(.2, .8, .25, 1), background .2s;
}
.cp-switch input:checked + i { background: var(--teal); border-color: var(--teal); }
.cp-switch input:checked + i::after { transform: translate(18px, -50%); background: #fff; }
.cp-perm--care .cp-switch input:checked + i { background: var(--warning); border-color: var(--warning); }
.cp-switch input:focus-visible + i { outline: 2px solid var(--teal); outline-offset: 2px; }

.cp-foot {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 16px clamp(20px, 2.6vw, 28px); border-top: 1px solid var(--border);
  background: var(--surface-2);
}
.cp-foot-sp { flex: 1 1 auto; }
.btn-danger-ghost {
  background: none; border: 1px solid color-mix(in srgb, var(--danger) 40%, transparent);
  color: var(--danger); border-radius: 999px; padding: 9px 16px;
  font: 600 12.5px var(--font-body); cursor: pointer; transition: background .16s, border-color .16s;
}
.btn-danger-ghost:hover { background: var(--danger-soft); border-color: var(--danger); }
.btn-danger-ghost.armed { background: var(--danger); color: #fff; border-color: var(--danger); }
.ph-chip--none { opacity: .7; font-style: italic; }

/* Grouped scope picker on the pending-request card */
.cn-scope-g { margin-top: 12px; }
.cn-scope-g > b { display: block; font: 700 11.5px var(--font-body); color: var(--muted);
  text-transform: uppercase; letter-spacing: .06em; margin-bottom: 6px; }
.cn-scope--care span { color: var(--warning); }

@media (max-width: 640px) {
  .cp-back { padding: 0; }
  .cp-modal { width: 100%; max-height: 100vh; height: 100%; border-radius: 0; border: 0; }
  .cp-foot { position: sticky; bottom: 0; padding-bottom: calc(16px + env(safe-area-inset-bottom)); }
  .cp-foot .btn, .btn-danger-ghost { flex: 1 1 auto; justify-content: center; }
  .cp-foot-sp { display: none; }
  .cp-perm { padding: 12px 13px; }
}
@media (prefers-reduced-motion: reduce) {
  .cp-modal { animation: none; }
  .cp-switch i, .cp-switch i::after { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   F398 · ACCOUNT & SETTINGS — the consumer's own account page
   A full-screen, on-brand navigation surface opened by the floating top-right
   account button. Dual theme via tokens · responsive (≤640 / ≤1024 / desktop) ·
   reduced-motion safe · zero hardcoded hex outside the light-mode retunes.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── The floating button's two account faces ──────────────────────────────*/
.acct-btn.is-member {
  color: var(--ink-on-brand);
  background: var(--grad-brand);
  border-color: transparent;
  box-shadow: 0 10px 26px -12px var(--teal-glow), inset 0 1px 0 rgba(255,255,255,.28);
}
.acct-btn.is-member:hover { color: var(--ink-on-brand); border-color: transparent; }
[data-theme="light"] .acct-btn.is-member { background: var(--grad-brand); border-color: transparent; }
/* the results-screen performance layer flattens every glass surface — the
   member monogram must keep its brand fill there too */
body.on-results .acct-btn.is-member,
[data-theme="light"] body.on-results .acct-btn.is-member { background: var(--grad-brand); }
.acct-mono {
  font: 800 14px/1 var(--font-display); letter-spacing: .01em;
  font-variant-numeric: tabular-nums; user-select: none;
}
@media (max-width: 640px) { .acct-mono { font-size: 10px; } }
@media (max-width: 640px) { body.on-overview .acct-mono { font-size: 13px; } }

/* ── Overlay shell ────────────────────────────────────────────────────────*/
/* body.modal-open already locks the page scroll; .acct-open is the state hook. */
#acct-overlay {
  position: fixed; inset: 0; z-index: 1250; display: flex; flex-direction: column;
  background:
    radial-gradient(120% 85% at 82% -12%, color-mix(in srgb, var(--violet) 11%, transparent), transparent 56%),
    radial-gradient(110% 85% at 8% 108%, color-mix(in srgb, var(--teal) 11%, transparent), transparent 56%),
    var(--bg-1);
  opacity: 0; transition: opacity .22s var(--ease-out);
}
#acct-overlay.in { opacity: 1; }
@media (prefers-reduced-motion: reduce) { #acct-overlay { transition: none; } }

.acct-chrome {
  flex: 0 0 auto; display: flex; align-items: center; gap: 14px;
  padding: max(12px, env(safe-area-inset-top)) clamp(14px, 3vw, 32px) 12px;
  border-bottom: 1px solid var(--hairline);
  background: var(--topbar-bg), var(--bg-1);
}
.acct-chrome .ov-brandid { cursor: pointer; }
.acct-chrome-title {
  flex: 1; min-width: 0; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  font: 700 13.5px/1 var(--font-display); letter-spacing: -.01em; color: var(--text);
}
.acct-chrome-title svg { width: 16px; height: 16px; color: var(--muted); }
.acct-x {
  flex: 0 0 auto; width: 38px; height: 38px; display: grid; place-items: center;
  border-radius: 50%; cursor: pointer; color: var(--muted);
  border: 1px solid var(--border); background: var(--fill-1);
  transition: color .2s, border-color .2s, background .2s, transform .2s var(--ease-out);
}
.acct-x:hover { color: var(--text); border-color: var(--border-hi); transform: rotate(90deg); }
.acct-x svg { width: 16px; height: 16px; }
.acct-x:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; }

.acct-scroll { flex: 1 1 auto; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.acct-wrap {
  max-width: 1180px; margin-inline: auto;
  padding: clamp(20px, 4vw, 40px) clamp(16px, 4vw, 40px) calc(clamp(32px, 6vw, 64px) + env(safe-area-inset-bottom));
}
.acct-loading { display: grid; place-items: center; gap: 12px; padding: 14vh 0; color: var(--muted); }
.acct-loading svg { width: 34px; height: 34px; color: var(--teal); opacity: .8; }
.acct-loading p { font: 500 13.5px var(--font-body); }

/* ── Identity hero ────────────────────────────────────────────────────────*/
.acct-hero {
  display: flex; align-items: center; gap: clamp(16px, 3vw, 26px);
  padding: clamp(18px, 3vw, 28px);
  border-radius: var(--r-xl); border: 1px solid var(--border);
  background:
    radial-gradient(120% 160% at 0% 0%, color-mix(in srgb, var(--teal) 12%, transparent), transparent 60%),
    var(--grad-card);
  box-shadow: var(--shadow-sm); margin-bottom: clamp(16px, 3vw, 24px);
}
.acct-avatar {
  flex: 0 0 auto; width: clamp(64px, 11vw, 84px); height: clamp(64px, 11vw, 84px);
  display: grid; place-items: center; border-radius: 50%;
  background: var(--grad-brand); color: var(--ink-on-brand);
  box-shadow: 0 16px 38px -14px var(--teal-glow), inset 0 1px 0 rgba(255,255,255,.3);
}
.acct-avatar span { font: 800 clamp(22px, 3.4vw, 30px)/1 var(--font-display); letter-spacing: .01em; }
.acct-avatar.is-anon { background: var(--fill-2); color: var(--muted); box-shadow: none; border: 1px solid var(--border); }
.acct-avatar.is-anon svg { width: 34px; height: 34px; }
.acct-hero-tx { flex: 1; min-width: 0; }
.acct-eyebrow { font: 700 9.5px/1 var(--font-display); letter-spacing: .18em; text-transform: uppercase; color: var(--teal); margin-bottom: 6px; }
.acct-hero-name { font: 800 clamp(22px, 3.4vw, 32px)/1.12 var(--font-display); letter-spacing: -.02em; color: var(--text); }
.acct-hero-sub { margin-top: 5px; font: 500 13.5px/1.5 var(--font-body); color: var(--muted); overflow-wrap: anywhere; }
.acct-hero-acts { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 10px; }
.acct-chips { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 8px; }
.acct-chip {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 11px; border-radius: var(--r-pill);
  border: 1px solid var(--border); background: var(--fill-1);
  font: 600 11.5px/1 var(--font-body); color: var(--muted);
}
.acct-chip svg { width: 13px; height: 13px; }
.acct-chip.ok { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 40%, transparent); }

/* ── Card grid ────────────────────────────────────────────────────────────*/
/* align-items:start keeps every card its own natural height — a settings page
   should never stretch a two-line card to match a ten-line one. */
.acct-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start;
  gap: clamp(12px, 2vw, 18px); }
.acct-card {
  display: flex; flex-direction: column; min-width: 0;
  padding: clamp(16px, 2.2vw, 22px);
  border-radius: var(--r-xl); border: 1px solid var(--border);
  background: var(--grad-card); box-shadow: var(--shadow-sm);
  transition: border-color .25s, box-shadow .25s;
}
.acct-card:hover { border-color: var(--border-hi); box-shadow: var(--shadow-md); }
.acct-card.tone-guard { border-color: color-mix(in srgb, var(--teal) 30%, var(--border)); }
.acct-card-h { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; }
.acct-card-ic {
  flex: 0 0 auto; width: 38px; height: 38px; display: grid; place-items: center;
  border-radius: 12px; border: 1px solid var(--border); background: var(--fill-1); color: var(--teal);
}
.acct-card-ic svg { width: 18px; height: 18px; }
.acct-card-ht { min-width: 0; }
.acct-card-ht h3 { font: 700 15.5px/1.25 var(--font-display); letter-spacing: -.01em; color: var(--text); }
.acct-card-ht p { margin-top: 3px; font: 500 12px/1.45 var(--font-body); color: var(--muted-2); }
.acct-card-b { flex: 1 1 auto; display: flex; flex-direction: column; gap: 2px; }
.acct-card-f { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 9px; }

.acct-row {
  display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
  padding: 9px 0; border-bottom: 1px solid var(--hairline);
}
.acct-row:last-child { border-bottom: 0; }
.acct-row.is-wide { flex-direction: column; align-items: flex-start; gap: 3px; }
.acct-row-k { flex: 0 0 auto; font: 500 12.5px/1.4 var(--font-body); color: var(--muted); }
.acct-row-v { min-width: 0; text-align: right; font: 600 13px/1.4 var(--font-body); color: var(--text); overflow-wrap: anywhere; }
.acct-row.is-wide .acct-row-v { text-align: left; }
.acct-row-v.is-empty { color: var(--muted-2); font-weight: 500; font-style: italic; }

.acct-note { margin-top: 12px; font: 500 12px/1.55 var(--font-body); color: var(--muted-2); }
.acct-note b { color: var(--text); font-weight: 700; }

.acct-state { display: flex; flex-direction: column; gap: 8px; margin-bottom: 6px; }
.acct-state p { font: 500 12.5px/1.55 var(--font-body); color: var(--muted); }
.acct-pill {
  align-self: flex-start; display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px; border-radius: var(--r-pill);
  font: 700 11.5px/1 var(--font-body); letter-spacing: .01em;
  border: 1px solid var(--border); background: var(--fill-1); color: var(--muted);
}
.acct-pill svg { width: 12px; height: 12px; }
.acct-pill.ok { color: var(--teal); border-color: color-mix(in srgb, var(--teal) 45%, transparent);
  background: color-mix(in srgb, var(--teal) 10%, transparent); }
.acct-pill.off { color: var(--muted); }

.acct-act { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; }
.acct-act svg { width: 15px; height: 15px; }
.acct-danger { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, transparent); }
.acct-danger:hover { background: color-mix(in srgb, var(--danger) 12%, transparent); border-color: var(--danger); }

/* ── Theme segmented control ──────────────────────────────────────────────*/
.acct-segs {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px;
  padding: 5px; border-radius: var(--r-lg);
  border: 1px solid var(--border); background: var(--fill-1);
}
.acct-seg {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  padding: 10px 8px; border-radius: calc(var(--r-lg) - 6px); cursor: pointer;
  border: 1px solid transparent; background: transparent; color: var(--muted);
  font: 600 12.5px/1 var(--font-body);
  transition: color .2s, background .2s, border-color .2s, transform .2s var(--ease-out);
}
.acct-seg svg { width: 15px; height: 15px; }
.acct-seg:hover { color: var(--text); }
.acct-seg.on {
  color: var(--ink-on-brand); background: var(--grad-brand); border-color: transparent;
  box-shadow: 0 8px 20px -10px var(--teal-glow);
}
.acct-seg:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }

.acct-legal {
  margin-top: clamp(20px, 3vw, 30px); padding-top: 16px; border-top: 1px solid var(--hairline);
  font: 500 11.5px/1.6 var(--font-body); color: var(--muted-2); text-align: center; max-width: 74ch; margin-inline: auto;
}

/* ── Light-mode retune (mirrors the portal card treatment) ────────────────*/
[data-theme="light"] .acct-hero,
[data-theme="light"] .acct-card {
  border-color: rgba(0, 0, 0, .7);
  box-shadow:
    0 4px 16px -10px rgba(0, 0, 0, .3),
    0 1px 6px -3px rgba(0, 0, 0, .2),
    inset 0 1px 0 rgba(255, 255, 255, .6);
}
[data-theme="light"] .acct-card-ic { background: #ffffff; }
[data-theme="light"] .acct-chrome { background: var(--topbar-bg), var(--bg-1); }

/* ── Tablet ───────────────────────────────────────────────────────────────*/
@media (max-width: 1024px) {
  .acct-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ── Phone ────────────────────────────────────────────────────────────────*/
@media (max-width: 720px) {
  .acct-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .acct-chrome-title span { display: none; }
  .acct-hero { flex-direction: column; align-items: flex-start; text-align: left; }
  .acct-hero-acts .btn { width: 100%; justify-content: center; }
  .acct-card-f { flex-direction: column; }
  .acct-card-f .btn, .acct-card-f .acct-act { width: 100%; justify-content: center; }
  .acct-row { flex-direction: column; align-items: flex-start; gap: 2px; }
  .acct-row-v { text-align: left; }
  .acct-segs { gap: 4px; }
  .acct-seg { flex-direction: column; gap: 5px; font-size: 11px; padding: 9px 4px; }
}

@media (prefers-reduced-motion: reduce) {
  .acct-x:hover { transform: none; }
  .acct-card, .acct-seg, .acct-x { transition: none; }
}

/* ── LEGACY IDN MIGRATION POPUPS (.lgm-*) ───────────────────────────────────
   The first thing a legacy IDNutrition subscriber ever sees here. Rides the
   F409 .suc-modal skeleton (hero band, head, body, foot) then uplevels it:
   gradient headline, colored icon chips with staggered entrances, and a
   shimmer CTA. Sits ABOVE every plan sheet (.future-view z-1200 / suc 1300). */
.lgm-backdrop { z-index: 1350; }
.lgm-modal { width: min(580px, 100%); }
/* the bobbing brand pill must NEVER cross the title text: park it high in the
   hero's clear zone and reserve its column so long titles wrap early */
.lgm-hero .suc-hero-pill { top: 14px; right: 62px; }
.lgm-modal .idn-modal-meta { padding-right: 78px; }
/* landing hold: the capsule build + every hero animation waits at frame 0
   while the migration welcome popup is up; closeLegacyPop releases it */
#screen-landing.lgm-hold .landing-hero,
#screen-landing.lgm-hold .landing-hero * { animation-play-state: paused !important; }
.lgm-modal .idn-modal-title {
  font-size: 21px; line-height: 1.22; letter-spacing: -.02em;
  background: linear-gradient(100deg, var(--text) 30%, var(--teal) 72%, var(--blue-2, var(--teal)) 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.lgm-tag { color: var(--teal); }
.lgm-hero .suc-hero-aura { opacity: .62; }
.lgm-sub { font-size: 13px; line-height: 1.58; color: var(--muted); margin: 12px 0 0; }
.lgm-sub b, .lgm-list b { color: var(--text); font-weight: 650; }
.lgm-list { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 8px; }
.lgm-list li {
  display: flex; align-items: center; gap: 12px;
  font-size: 13px; line-height: 1.5; color: var(--text);
  padding: 11px 13px; border: 1px solid var(--line);
  border-radius: 13px; background: var(--panel-2, var(--panel));
  position: relative; overflow: hidden;
  animation: lgmRowIn .5s var(--ease-out) both;
}
.lgm-list li::before { content: ''; position: absolute; left: 0; top: 14%; bottom: 14%; width: 3px;
  border-radius: 0 3px 3px 0; background: var(--lgm-c, var(--teal)); opacity: .85; }
.lgm-list li:nth-child(1) { --lgm-c: var(--teal); animation-delay: .06s; }
.lgm-list li:nth-child(2) { --lgm-c: var(--violet, #8b7cf6); animation-delay: .14s; }
.lgm-list li:nth-child(3) { --lgm-c: var(--blue-2, #4aa3ff); animation-delay: .22s; }
.lgm-list li:nth-child(4) { --lgm-c: var(--gold, #d9a53f); animation-delay: .30s; }
@keyframes lgmRowIn { from { opacity: 0; transform: translateY(9px); } to { opacity: 1; transform: none; } }
.lgm-chip {
  flex: none; width: 34px; height: 34px; display: grid; place-items: center;
  border-radius: 11px; color: var(--lgm-c, var(--teal));
  background: color-mix(in srgb, var(--lgm-c, var(--teal)) 12%, var(--surface-2, var(--panel)));
  border: 1px solid color-mix(in srgb, var(--lgm-c, var(--teal)) 30%, var(--border, var(--line)));
  box-shadow: 0 8px 18px -10px color-mix(in srgb, var(--lgm-c, var(--teal)) 55%, transparent);
}
.lgm-chip svg { width: 16px; height: 16px; }
.lgm-foot { gap: 10px; flex-wrap: wrap; }
.lgm-foot .lgm-go, .lgm-foot .lgm-yes { flex: 1 1 auto; position: relative; overflow: hidden; }
.lgm-foot .lgm-go::after, .lgm-foot .lgm-yes::after {
  content: ''; position: absolute; top: 0; left: -60%; width: 45%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .34), transparent);
  animation: lgmSheen 3.2s var(--ease-out) infinite;
}
@keyframes lgmSheen { 0%, 62% { left: -60%; } 100% { left: 130%; } }
.lgm-foot .lgm-solo { width: 100%; }
.lgm-cs {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  text-decoration: none; font-size: 13px; white-space: nowrap;
}
.lgm-cs svg { width: 15px; height: 15px; }
/* Overwrite confirm: the money line is the headline fact — stage it. */
.lgm-money {
  display: flex; align-items: center; gap: 12px; margin: 14px 0 0;
  padding: 13px 15px; border-radius: 14px;
  border: 1px solid color-mix(in srgb, var(--teal) 30%, var(--line));
  background: color-mix(in srgb, var(--teal) 7%, var(--panel-2, var(--panel)));
}
.lgm-money-ic { flex: none; width: 36px; height: 36px; display: grid; place-items: center;
  border-radius: 12px; color: var(--teal);
  background: color-mix(in srgb, var(--teal) 13%, var(--surface-2, var(--panel)));
  border: 1px solid color-mix(in srgb, var(--teal) 32%, var(--border, var(--line))); }
.lgm-money-ic svg { width: 17px; height: 17px; }
.lgm-money-tx { font-size: 12.5px; line-height: 1.45; color: var(--muted); }
.lgm-money-tx b { display: block; font-size: 15px; color: var(--text); letter-spacing: -.01em; }
@media (max-width: 640px) {
  .lgm-modal .idn-modal-title { font-size: 18.5px; }
  .lgm-foot { flex-direction: column-reverse; }
  .lgm-foot .btn, .lgm-foot .lgm-cs { width: 100%; }
  .lgm-list li { font-size: 12.5px; padding: 10px 11px; }
  .lgm-chip { width: 30px; height: 30px; border-radius: 9px; }
}
@media (prefers-reduced-motion: reduce) {
  .lgm-list li { animation: none; }
  .lgm-foot .lgm-go::after, .lgm-foot .lgm-yes::after { animation: none; }
}
/* ══ F451 · ONE UNIFIED PLAN PAGE — "MY PLAN" pill + thin product rows ═══════
   The regimen shelf + Manage-my-regimen popup are retired. The tier navigator
   is now the single plan surface: the PURCHASED tier wears a floating "MY
   PLAN" pill (active members only) and shows the exact paid total; the panel
   lists "Products in My Plan" as THIN full-width rows (thumb · name/category/
   price · Why · qty stepper · trash) instead of tall banner cards. */

/* — the purchased tier's floating pill (top-center, riding the card edge) — */
.ov-tier { overflow: visible; }
.ov-tier-myplan {
  position: absolute; top: -11px; left: 50%; transform: translateX(-50%); z-index: 2;
  display: inline-flex; align-items: center; padding: 4px 14px; border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 10.5px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
  color: var(--ink-on-brand, #fff); white-space: nowrap;
  background: linear-gradient(135deg, var(--teal), var(--blue-2, var(--blue)));
  border: 1px solid color-mix(in srgb, #fff 26%, transparent);
  box-shadow: 0 6px 18px -6px color-mix(in srgb, var(--teal) 70%, transparent),
    inset 0 1px 0 color-mix(in srgb, #fff 28%, transparent);
}
.ov-tier-mine { border-color: color-mix(in srgb, var(--teal) 55%, transparent); }
.ov-tier-mine.on { box-shadow: var(--glow-teal), 0 0 0 1px color-mix(in srgb, var(--teal) 35%, transparent); }

/* — panel header: "Products in My Plan" + count · exact price — */
.ov-tpl-head { display: flex; align-items: flex-end; justify-content: space-between;
  flex-wrap: wrap; gap: 8px 14px; margin-bottom: 12px; }
.ov-tpl-eyebrow { display: block; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 11px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--teal); margin-bottom: 3px; }
.ov-tpl-h { margin: 0; font-size: clamp(19px, 2.4vw, 24px); font-weight: 700; color: var(--text); line-height: 1.2; }
.ov-tpl-meta { font-size: 12.5px; font-weight: 600; color: var(--muted); padding-bottom: 3px; }

/* — THIN rows (the only look-and-feel change Jacob asked for) — */
.ov-tp-grid.ov-tpl-list { display: flex; flex-direction: column; gap: 9px; }
.ov-tp-card.ov-tpl-row { flex-direction: row; align-items: center; gap: 13px;
  padding: 9px 12px 9px 9px; border-radius: 14px; overflow: visible; }
.ov-tp-card.ov-tpl-row:hover { transform: translateY(-1px); }
.ov-tpl-row .ov-tp-media { flex: none; width: 74px; aspect-ratio: auto; height: 52px;
  border-radius: 10px; overflow: hidden; }
.ov-tpl-row .ov-tp-media .ov-tp-img { position: absolute; inset: 0; }
.ov-tpl-row .ov-tp-media.is-capsule .ov-tp-img { padding: 3px 0; }
.ov-tpl-row .ov-tp-fb svg { width: 22px; height: 22px; }
.ov-tpl-row .ov-tp-tx { flex: 1 1 auto; min-width: 0; padding: 0; gap: 1px; }
.ov-tpl-row .ov-tp-tx b { font-size: 14px; }
.ov-tpl-row .ov-tp-price { margin-top: 1px; }
.ov-tpl-row .ov-tp-dose { margin-top: 2px; }
/* "Added by you" rides inline next to the name — no gradient rim / rail rows */
.ov-tpl-added { display: inline-flex; align-items: center; gap: 3px; vertical-align: 1px;
  margin-left: 6px; padding: 2px 8px; border-radius: 999px; font-style: normal;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 9.5px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
  color: var(--ink-on-brand, #fff);
  background: linear-gradient(135deg, var(--teal), var(--violet)); }
.ov-tpl-added svg { width: 9px; height: 9px; }
.ov-tp-card--added.ov-tpl-row::after { padding: 1px; }
.ov-tpl-row .ov-tp-added-rail, .ov-tpl-row .ov-tp-add-badge { display: none; }

/* — right rail: Why pill · [− n +] · trash, all one row — */
.ov-tpl-acts { flex: none; display: inline-flex; align-items: center; gap: 9px; }
/* the frosted photo-overlay chrome doesn't suit a flat row — restyle in place */
.ov-tpl-row .ov-tp-tools { position: static; top: auto; right: auto; }
.ov-tpl-row .ov-tp-qty {
  position: static; padding: 3px 5px;
  background: var(--fill-2); border-color: var(--border);
  box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; }
/* the flat row pill follows the theme — deepen the tinted color over light */
.ov-tpl-row .ov-tp-ampm { margin: -3px 0 -3px -5px;
  border-right-color: var(--border); }
.ov-tpl-row .ov-tp-ampm.is-am { color: color-mix(in srgb, #c99a12 78%, var(--text)); }
.ov-tpl-row .ov-tp-ampm.is-pm { color: color-mix(in srgb, var(--violet, #7c4dff) 74%, var(--text)); }
[data-theme="dark"] .ov-tpl-row .ov-tp-ampm.is-am { color: #eec643; }
[data-theme="dark"] .ov-tpl-row .ov-tp-ampm.is-pm { color: #b9a4ff; }
.ov-tpl-row .ov-tp-qty-btn { color: var(--text); }
.ov-tpl-row .ov-tp-qty-btn:hover:not([disabled]) { background: var(--fill-hover, var(--fill-2)); }
.ov-tpl-row .ov-tp-qty-n { color: var(--text); }
.ov-tpl-row:hover .ov-tp-qty { border-color: color-mix(in srgb, var(--teal) 55%, transparent); }
/* F452 · REST STATE IS QUIET. Remove is a destructive action — it should be
   discoverable, not the loudest pixel on the page. At rest the trash is a bare
   muted glyph (no red, no fill, no ring, slightly dimmed); hovering the ROW
   brings it to full opacity with a soft danger ring; hovering the BUTTON is the
   full red commit — unchanged. Progressive disclosure, three steps. */
.ov-tpl-row .ov-tp-trash {
  width: 28px; height: 28px; color: var(--muted); opacity: .55;
  background: transparent; border-color: transparent;
  box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none;
  transition: opacity .18s ease, color .18s ease, background .18s ease,
              border-color .18s ease, transform .14s var(--ease-spring); }
.ov-tpl-row:hover .ov-tp-trash, .ov-tpl-row:focus-within .ov-tp-trash {
  opacity: 1; color: var(--danger);
  background: color-mix(in srgb, var(--danger) 9%, transparent);
  border-color: color-mix(in srgb, var(--danger) 32%, transparent); }
.ov-tpl-row .ov-tp-trash:hover { color: var(--ink-on-brand, #fff); background: var(--danger); border-color: var(--danger); }
/* touch has no hover — the row-hover reveal would never fire, so keep it visible */
@media (hover: none) {
  .ov-tpl-row .ov-tp-trash { opacity: .8; color: var(--muted); } }

/* — the purchased plan's "as you customized it" banner reads settled, not urgent — */
.ov-tp-adj--mine { border-color: color-mix(in srgb, var(--teal) 34%, transparent); }
.ov-tp-adj--mine .ov-tp-adj-ic { color: var(--teal); }

/* — responsive: phones keep everything on one row, trash hangs off the corner — */
@media (max-width: 640px) {
  .ov-tpl-head { align-items: flex-start; flex-direction: column; gap: 4px; }
  /* Reset docks INTO the banner's top-right corner (flush with both borders) so
     the copy underneath it runs the full width instead of being squeezed. Only
     the short title needs to clear it — the sentences below run edge to edge. */
  .ov-tp-adj { padding-top: 11px; overflow: hidden; }
  .ov-tp-adj-reset { position: absolute; top: 0; right: 0; z-index: 3;
    border-radius: 0 14px 0 12px; border-width: 0 0 1px 1px;
    padding: 6px 12px 6px 13px; }
  /* the long "to prescribed" suffix would swallow the corner — bare "Reset" */
  .ov-tp-adj-reset-long { display: none; }
  .ov-tp-adj-tx > b { padding-right: 62px; }
  /* the hanging trash needs breathing room between rows AND from the card above */
  .ov-tp-grid.ov-tpl-list { gap: 20px; padding-top: 8px; }
  .ov-tp-card.ov-tpl-row { flex-wrap: nowrap; gap: 9px; padding: 9px 10px; position: relative; }
  .ov-tpl-row .ov-tp-media { width: 60px; height: 46px; }
  .ov-tpl-row .ov-tp-tx { flex: 1 1 auto; min-width: 0; }
  /* Why sits below the trash's reach — never intersecting it */
  .ov-tpl-acts { flex: none; flex-direction: column; align-items: flex-end; gap: 8px;
    padding-top: 20px; }
  /* trash escapes the rail and hangs off the card's top-right corner — it needs
     a solid backing to sit ON the corner, but stays quiet grey until touched */
  .ov-tpl-row .ov-tp-trash { position: absolute; top: -12px; right: -10px; z-index: 2;
    opacity: 1; color: var(--muted);
    background: var(--surface); border-color: var(--border);
    box-shadow: 0 4px 12px -4px rgba(2, 8, 26, .28); }
  .ov-tpl-row:hover .ov-tp-trash, .ov-tpl-row:focus-within .ov-tp-trash {
    color: var(--danger); background: color-mix(in srgb, var(--danger) 9%, var(--surface));
    border-color: color-mix(in srgb, var(--danger) 32%, transparent); }
  .ov-tpl-row .ov-tp-trash:hover, .ov-tpl-row .ov-tp-trash:active {
    color: var(--ink-on-brand, #fff); background: var(--danger); border-color: var(--danger); }
}
@media (prefers-reduced-motion: reduce) {
  .ov-tp-card.ov-tpl-row:hover { transform: none; }
}

/* ══ F451c · COMPARE YOUR PLAN OPTIONS — mockup redesign ════════════════════
   Clean tier columns: icon+name+price head, "What's included" product rows
   with WHY, priorities-covered chips, one-line description, CTA. The ACTIVE
   member's purchased tier wears the floating MY PLAN pill + "Current Plan";
   a legacy Exigo autoship (old-assessment subscriber, no new sub) renders as
   a 4th honest column. Tokens only — dual theme for free. */
.pcx-card { max-width: 1480px; }
.pcx-back { left: 18px; right: auto; }
.pcx-back svg { width: 18px; height: 18px; }
.pcx-title-row { display: flex; align-items: center; justify-content: center; gap: 10px;
  padding: 6px 54px 18px; }
.pcx-title { margin: 0; text-align: center;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: clamp(15px, 1.6vw, 19px); font-weight: 700;
  letter-spacing: .18em; text-transform: uppercase; color: var(--teal); }
.pcx-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: clamp(12px, 1.6vw, 20px); align-items: stretch; }
.pcx-col { position: relative; display: flex; flex-direction: column; gap: 12px;
  padding: clamp(14px, 1.8vw, 20px); border-radius: 18px;
  border: 1px solid var(--border); background: var(--fill-1); }
.pcx-col.pcx-mine { border-color: color-mix(in srgb, var(--teal) 55%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--teal) 30%, transparent),
    0 14px 34px -18px color-mix(in srgb, var(--teal) 55%, transparent); }
.pcx-myplan { position: absolute; top: -12px; left: 50%; transform: translateX(-50%); z-index: 2;
  display: inline-flex; align-items: center; gap: 5px; padding: 4px 14px; border-radius: 999px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 10.5px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
  color: var(--ink-on-brand, #fff); white-space: nowrap;
  background: linear-gradient(135deg, var(--teal), var(--blue-2, var(--blue)));
  border: 1px solid color-mix(in srgb, #fff 26%, transparent);
  box-shadow: 0 6px 18px -6px color-mix(in srgb, var(--teal) 70%, transparent); }
.pcx-myplan svg { width: 11px; height: 11px; }
/* column head — icon · name/tagline · price */
.pcx-head { display: flex; align-items: center; gap: 11px; }
.pcx-ic { flex: none; width: 38px; height: 38px; display: grid; place-items: center;
  border-radius: 11px; background: var(--fill-2); color: var(--teal); }
.pcx-mine .pcx-ic { background: var(--grad-brand); color: var(--ink-on-brand); }
.pcx-ic svg { width: 19px; height: 19px; }
.pcx-name { display: flex; flex-direction: column; flex: 1; min-width: 0; }
.pcx-name b { font-size: 16px; color: var(--text); line-height: 1.25; }
.pcx-name small { font-size: 11.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcx-price { display: flex; flex-direction: column; align-items: flex-end; flex: none; line-height: 1; }
.pcx-price b { font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-weight: 700;
  font-size: 19px; color: var(--teal); }
.pcx-price small { font-size: 10px; font-weight: 600; color: var(--muted); margin-top: 2px; }
.pcx-price .pcx-comp { font-size: 14px; }
/* inner boxes */
.pcx-box { display: flex; flex-direction: column; gap: 9px;
  padding: 13px; border-radius: 13px; border: 1px solid var(--border);
  background: color-mix(in srgb, var(--surface) 55%, transparent); }
.pcx-box-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.pcx-box-h b { font-size: 13px; color: var(--text); }
.pcx-box-h small { font-size: 10.5px; color: var(--muted); white-space: nowrap; }
.pcx-incl { display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 600; color: var(--teal); }
.pcx-incl svg { width: 13px; height: 13px; flex: none; }
.pcx-lbl { font-size: 10px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; color: var(--muted); }
.pcx-prods { display: flex; flex-direction: column; gap: 8px; }
.pcx-prod { display: flex; align-items: center; gap: 10px; cursor: pointer;
  padding: 8px 9px; border-radius: 11px; border: 1px solid var(--border); background: var(--fill-1);
  transition: border-color .18s ease, transform .18s ease; }
.pcx-prod:hover { border-color: color-mix(in srgb, var(--teal) 45%, transparent); transform: translateY(-1px); }
.pcx-prod:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.pcx-thumb { position: relative; flex: none; width: 46px; height: 34px; border-radius: 8px; overflow: hidden;
  display: grid; place-items: center; background: var(--fill-2); }
.pcx-thumb img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.pcx-thumb.is-capsule { background:
  radial-gradient(90% 130% at 50% 118%, color-mix(in srgb, var(--teal) 13%, transparent), transparent 62%),
  var(--fill-2); }
.pcx-thumb.is-capsule img { object-fit: contain; padding: 2px 0; }
.pcx-thumb.no-img img { display: none; }
.pcx-thumb:not(.no-img) .pcx-fb { display: none; }
.pcx-fb { color: var(--teal); opacity: .55; }
.pcx-fb svg { width: 16px; height: 16px; }
.pcx-prod-tx { display: flex; flex-direction: column; flex: 1; min-width: 0; gap: 1px; }
.pcx-prod-tx b { font-size: 12.5px; color: var(--text); line-height: 1.25; }
.pcx-prod-tx small { font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcx-qty { font-style: normal; font-family: var(--font-display, 'Space Grotesk'), sans-serif;
  font-size: 11px; font-weight: 800; color: var(--violet); }
.pcx-areas { display: flex; flex-wrap: wrap; gap: 7px; }
.pcx-dim { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--muted); }
.pcx-desc { margin: auto 0 0; font-size: 12px; line-height: 1.55; color: var(--muted); }
/* CTAs — quiet select vs the gradient Current Plan */
.pcx-cta { display: flex; align-items: center; justify-content: center; gap: 7px; cursor: pointer;
  width: 100%; padding: 11px 14px; border-radius: 12px;
  font-family: var(--font-display, 'Space Grotesk'), sans-serif; font-size: 13px; font-weight: 700;
  color: var(--text); background: var(--fill-2); border: 1px solid var(--border);
  transition: border-color .18s ease, background .18s ease, transform .14s var(--ease-spring); }
.pcx-cta:hover { border-color: color-mix(in srgb, var(--teal) 45%, transparent); transform: translateY(-1px); }
.pcx-cta:focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; }
.pcx-cta svg { width: 15px; height: 15px; }
.pcx-cta.pcx-current { color: var(--ink-on-brand, #fff); border-color: transparent;
  background: linear-gradient(135deg, var(--teal), var(--blue-2, var(--blue)) 60%, var(--violet));
  box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--teal) 70%, transparent); }
.pcx-cta.pcx-current:hover { filter: brightness(1.05); }
/* responsive — tablet 2-up, phone stacked (MY PLAN column first) */
@media (max-width: 1024px) {
  .pcx-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 680px) {
  .pcx-cols { grid-template-columns: 1fr; }
  .pcx-col.pcx-mine { order: -1; }
  .pcx-title { letter-spacing: .12em; }
  .pcx-title-row { padding: 4px 46px 14px; }
}
@media (prefers-reduced-motion: reduce) {
  .pcx-prod:hover, .pcx-cta:hover { transform: none; }
}

/* ═══ METH REPORT VAULT — bespoke full-screen download overlay ═══════════════
   A violet genetic-vault scene (NOT the boot preloader): breathing aura, twin
   counter-rotating rings, an orbiting document mote, a descending scan veil,
   rising data motes, rotating stage copy + live progress. Tokenized dual-theme,
   GPU-only transforms, reduced-motion safe. */
.mdl-overlay { position: fixed; inset: 0; z-index: 4000; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 22px; padding: 24px;
  background: color-mix(in srgb, var(--bg) 92%, var(--violet) 8%);
  opacity: 0; transition: opacity .38s var(--ease-out); }
.mdl-overlay.show { opacity: 1; }
.mdl-overlay.done { opacity: 0; transition: opacity .6s var(--ease-out); }
body.mdl-open { overflow: hidden; }
.mdl-scene { position: relative; width: 190px; height: 190px; flex: none; }
.mdl-aura { position: absolute; inset: -26px; border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--violet) 26%, transparent) 0%, transparent 68%);
  animation: mdlBreath 3.2s var(--ease-out) infinite; }
.mdl-ring { position: absolute; inset: 0; border-radius: 50%; border: 1.5px solid transparent; }
.mdl-ring.r1 { border-top-color: color-mix(in srgb, var(--violet) 75%, transparent);
  border-right-color: color-mix(in srgb, var(--violet) 25%, transparent);
  animation: mdlSpin 2.6s linear infinite; }
.mdl-ring.r2 { inset: 16px; border-bottom-color: color-mix(in srgb, var(--blue-2) 70%, transparent);
  border-left-color: color-mix(in srgb, var(--blue-2) 22%, transparent);
  animation: mdlSpin 3.8s linear infinite reverse; }
.mdl-orbit { position: absolute; inset: -8px; animation: mdlSpin 5.4s linear infinite; }
.mdl-orbit i { position: absolute; top: -13px; left: 50%; transform: translateX(-50%);
  display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%;
  color: #fff; background: linear-gradient(135deg, var(--violet) 0%, var(--blue-2) 100%);
  box-shadow: 0 6px 18px -6px color-mix(in srgb, var(--violet) 80%, transparent); }
.mdl-orbit i svg { width: 15px; height: 15px; }
.mdl-core { position: absolute; inset: 0; display: grid; place-items: center; color: var(--violet);
  animation: mdlCore 3.2s var(--ease-out) infinite; }
.mdl-core svg { width: 64px; height: 64px; filter: drop-shadow(0 0 18px color-mix(in srgb, var(--violet) 55%, transparent)); }
.mdl-scan { position: absolute; inset: 8px; border-radius: 50%; overflow: hidden; pointer-events: none; }
.mdl-scan::after { content: ''; position: absolute; left: 0; right: 0; height: 34%;
  background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--violet) 22%, transparent), transparent);
  animation: mdlScan 2.8s ease-in-out infinite; }
.mdl-mote { position: absolute; bottom: 6%; left: calc(8% + (var(--i) * 9%)); width: 4px; height: 4px;
  border-radius: 50%; background: color-mix(in srgb, var(--violet) 80%, #fff);
  opacity: 0; animation: mdlMote 3.6s linear infinite; animation-delay: calc(var(--i) * .36s); }
.mdl-copy { display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center; }
.mdl-title { font-family: var(--font-display); font-weight: 800; font-size: clamp(19px, 2.6vw, 24px);
  letter-spacing: -.02em; color: var(--text); }
.mdl-line { font-size: 13.5px; font-weight: 600; color: var(--muted); min-height: 20px;
  animation: mdlLineIn .5s var(--ease-out) both; }
.mdl-bar { position: relative; width: min(340px, 76vw); height: 6px; border-radius: 99px;
  background: color-mix(in srgb, var(--violet) 14%, transparent); overflow: visible; }
.mdl-bar i { position: absolute; inset: 0; border-radius: 99px; transform-origin: left center;
  transform: scaleX(0); transition: transform .3s var(--ease-out);
  background: linear-gradient(90deg, var(--violet) 0%, var(--blue-2) 60%, var(--teal) 100%); }
.mdl-pct { position: absolute; right: 0; top: 12px; font-size: 11.5px; font-weight: 800;
  font-variant-numeric: tabular-nums; color: var(--violet); }
.mdl-note { display: inline-flex; align-items: center; gap: 7px; font-size: 11.5px; font-weight: 600;
  color: var(--muted); margin-top: 6px; }
.mdl-note svg { width: 13px; height: 13px; color: var(--violet); }
@keyframes mdlSpin { to { transform: rotate(360deg); } }
@keyframes mdlBreath { 0%, 100% { transform: scale(1); opacity: .8; } 50% { transform: scale(1.12); opacity: 1; } }
@keyframes mdlCore { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.07); } }
@keyframes mdlScan { 0% { top: -36%; } 55% { top: 102%; } 100% { top: 102%; } }
@keyframes mdlMote { 0% { transform: translateY(0); opacity: 0; } 12% { opacity: .9; }
  88% { opacity: .25; } 100% { transform: translateY(-150px); opacity: 0; } }
@keyframes mdlLineIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .mdl-aura, .mdl-ring, .mdl-orbit, .mdl-core, .mdl-scan::after, .mdl-mote, .mdl-line { animation: none; }
  .mdl-overlay, .mdl-bar i { transition: none; }
  .mdl-mote { display: none; } }
/* ── MRV · METH REPORT VIEWER — the consumer quick view (View My Report) ─────
   Full-screen in-app reader: violet-crowned header, horizontally-scrolling
   marker rail (chips light as pdf.js finds each gene's page; tap = smooth
   jump), lazily-rendered crisp pages on a soft stage. Tokenized dual-theme,
   3-breakpoint responsive, reduced-motion safe. */
body.mrv-open { overflow: hidden; }
.mrv-overlay { position: fixed; inset: 0; z-index: 3900; display: flex;
  background: color-mix(in srgb, var(--bg-1) 86%, #000);
  opacity: 0; transition: opacity .32s var(--ease-out); }
.mrv-overlay.show { opacity: 1; }
.mrv-overlay.closing { opacity: 0; }
.mrv-overlay.instant, .mrv-overlay.instant .mrv-shell { transition: none; }
.mrv-shell { display: flex; flex-direction: column; width: 100%; height: 100%;
  height: 100dvh; background: var(--bg-1);
  transform: translateY(14px) scale(.985); transition: transform .38s var(--ease-spring); }
.mrv-overlay.show .mrv-shell { transform: none; }

.mrv-top { display: flex; align-items: center; gap: 12px; padding: 12px 16px;
  padding-top: max(12px, env(safe-area-inset-top));
  background: color-mix(in srgb, var(--violet) 7%, var(--surface));
  border-bottom: 1px solid color-mix(in srgb, var(--violet) 22%, var(--border));
  position: relative; z-index: 3; }
.mrv-top::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--violet) 65%, transparent), transparent); }
.mrv-ico { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px; flex: 0 0 auto;
  color: var(--violet); background: color-mix(in srgb, var(--violet) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--violet) 30%, transparent); }
.mrv-ico svg { width: 22px; height: 22px; }
.mrv-tt { display: flex; flex-direction: column; gap: 1px; min-width: 0; margin-right: auto; }
.mrv-tt b { font-family: var(--font-display); font-size: 16.5px; letter-spacing: -0.01em;
  color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mrv-tt span { font-size: 11.5px; font-weight: 600; color: var(--muted); }
.mrv-actions { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.mrv-btn { appearance: none; -webkit-appearance: none; cursor: pointer; display: inline-flex; align-items: center;
  justify-content: center; gap: 7px; height: 38px; padding: 0 13px; border-radius: 11px;
  font: 700 12.5px var(--font-body); color: var(--text);
  background: color-mix(in srgb, var(--text) 5%, transparent);
  border: 1px solid var(--border); transition: background .2s, border-color .2s, transform .2s var(--ease-spring); }
.mrv-btn:hover { background: color-mix(in srgb, var(--text) 9%, transparent); transform: translateY(-1px); }
.mrv-btn svg { width: 15px; height: 15px; }
.mrv-zoom { width: 38px; padding: 0; font-size: 17px; font-weight: 800; }
.mrv-dl { color: #fff; border-color: transparent;
  background: linear-gradient(120deg, var(--violet), var(--blue-2));
  box-shadow: 0 8px 20px -10px color-mix(in srgb, var(--violet) 70%, transparent); }
.mrv-dl:hover { background: linear-gradient(120deg, var(--violet), var(--blue-2)); filter: brightness(1.08); }
.mrv-x { width: 38px; padding: 0; }

.mrv-rail { display: flex; gap: 7px; padding: 10px 16px; overflow-x: auto; scrollbar-width: none;
  background: color-mix(in srgb, var(--surface) 72%, var(--bg-1));
  border-bottom: 1px solid var(--border); position: relative; z-index: 2; }
.mrv-rail::-webkit-scrollbar { display: none; }
.mrv-chip { appearance: none; -webkit-appearance: none; cursor: pointer; flex: 0 0 auto;
  height: 32px; padding: 0 13px; border-radius: 99px;
  font: 700 12px var(--font-body); letter-spacing: .01em; color: var(--text-2);
  background: color-mix(in srgb, var(--text) 4%, transparent);
  border: 1px solid var(--border);
  transition: color .2s, background .2s, border-color .2s, opacity .3s, transform .2s var(--ease-spring); }
.mrv-chip:disabled { opacity: .32; cursor: default; }
.mrv-chip:not(:disabled):hover { color: var(--text); transform: translateY(-1px);
  border-color: color-mix(in srgb, var(--violet) 45%, transparent);
  background: color-mix(in srgb, var(--violet) 10%, transparent); }
.mrv-chip.is-here { color: #fff; border-color: transparent;
  background: linear-gradient(120deg, var(--violet), var(--blue-2));
  box-shadow: 0 6px 16px -8px color-mix(in srgb, var(--violet) 75%, transparent); }

.mrv-body { flex: 1; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  padding: 22px 16px calc(28px + env(safe-area-inset-bottom));
  background:
    radial-gradient(1200px 500px at 50% -200px, color-mix(in srgb, var(--violet) 6%, transparent), transparent 70%),
    var(--bg-1); }
.mrv-pages { --mrv-zoom: 1; display: flex; flex-direction: column; align-items: center; gap: 18px;
  width: min(100%, calc(880px * var(--mrv-zoom))); margin: 0 auto;
  transition: width .3s var(--ease-out); }
.mrv-page { position: relative; width: 100%; border-radius: 14px; overflow: hidden;
  background: color-mix(in srgb, var(--text) 4%, var(--surface));
  border: 1px solid var(--border);
  box-shadow: 0 18px 44px -26px rgba(0, 0, 0, .5); }
.mrv-page::before { content: ''; position: absolute; inset: 0; opacity: 1; transition: opacity .4s;
  background: linear-gradient(100deg, transparent 30%, color-mix(in srgb, var(--text) 6%, transparent) 50%, transparent 70%);
  background-size: 240% 100%; animation: mrvShimmer 1.6s linear infinite; }
.mrv-page.is-ready::before { animation: none; opacity: 0; }
.mrv-page canvas { display: block; width: 100%; height: auto; }

@keyframes mrvShimmer { from { background-position: 120% 0; } to { background-position: -120% 0; } }

/* Tablet */
@media (max-width: 1024px) {
  .mrv-pages { width: min(100%, calc(760px * var(--mrv-zoom))); }
}
/* Mobile */
@media (max-width: 640px) {
  .mrv-top { padding-left: 12px; padding-right: 12px; gap: 9px; }
  .mrv-ico { width: 34px; height: 34px; border-radius: 10px; }
  .mrv-ico svg { width: 19px; height: 19px; }
  .mrv-tt b { font-size: 14.5px; }
  .mrv-tt span { font-size: 10.5px; }
  .mrv-btn { height: 34px; padding: 0 10px; }
  .mrv-dl span { display: none; }           /* icon-only on small screens */
  .mrv-zoom { display: none; }              /* pinch-zoom country */
  .mrv-rail { padding: 8px 12px; }
  .mrv-body { padding: 14px 8px calc(20px + env(safe-area-inset-bottom)); }
  .mrv-pages { gap: 10px; }
  .mrv-page { border-radius: 10px; }
}
@media (prefers-reduced-motion: reduce) {
  .mrv-overlay, .mrv-shell, .mrv-pages, .mrv-btn, .mrv-chip { transition: none; }
  .mrv-page::before { animation: none; }
}

/* MRV rail scroll affordance — gradient edge fades + a pulsing chevron on the
   right edge until the member scrolls the rail once. Mobile-first cue. */
.mrv-railwrap { position: relative; z-index: 2; }
.mrv-railwrap::before, .mrv-railwrap::after { content: ''; position: absolute; top: 0; bottom: 1px; width: 44px;
  pointer-events: none; opacity: 0; transition: opacity .25s; z-index: 2; }
.mrv-railwrap::before { left: 0;
  background: linear-gradient(90deg, color-mix(in srgb, var(--surface) 72%, var(--bg-1)), transparent); }
.mrv-railwrap::after { right: 0;
  background: linear-gradient(270deg, color-mix(in srgb, var(--surface) 72%, var(--bg-1)), transparent); }
.mrv-railwrap.can-left::before { opacity: 1; }
.mrv-railwrap.can-right::after { opacity: 1; }
.mrv-rail-hint { position: absolute; right: 6px; top: 50%; translate: 0 -50%; z-index: 3;
  display: none; align-items: center; justify-content: center; width: 26px; height: 26px;
  border-radius: 50%; color: #fff; pointer-events: none;
  background: linear-gradient(120deg, var(--violet), var(--blue-2));
  box-shadow: 0 4px 14px -4px color-mix(in srgb, var(--violet) 80%, transparent);
  animation: mrvHintNudge 1.5s var(--ease-out) infinite; opacity: 0; transition: opacity .3s; }
.mrv-rail-hint svg { width: 13px; height: 13px; }
.mrv-railwrap.can-right:not(.scrolled) .mrv-rail-hint { display: inline-flex; opacity: 1; }
@keyframes mrvHintNudge { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(4px); } }
@media (prefers-reduced-motion: reduce) { .mrv-rail-hint { animation: none; } }

/* MOBILE ONLY · HOME↔IDNUTRITION GUTTER PARITY ─────────────────────────────
   On phones the Home hero card is a transparent padding wrapper (no bg, no
   border), yet its 18px horizontal gutter pushed every Home panel — including
   "My IDNutrition Plan" — 18px inside the IDNutrition page's card edges. Tabs
   therefore appeared to jump on switch. Dropping the horizontal padding gives
   both pages the identical container width. Tablet/desktop untouched. */
@media (max-width: 640px) {
  body.mpaged #screen-overview .ov-card.ov-score-card { padding-left: 0; padding-right: 0; }
}

/* MOBILE ONLY · card-head status pill must stay INSIDE the card ────────────
   The head is a nowrap flex row; the title column's default min-width:auto
   refused to shrink, so the Active/Inactive pill was pushed past the card's
   right edge and clipped on phones. Let the title shrink; the pill never does. */
@media (max-width: 640px) {
  #screen-overview .ov-card-head > *:first-child { min-width: 0; }
  #screen-overview .ov-card-head > .ov-active { flex: none; }
}
