/* ============================================================
   theBEAT — Marketing site styles
   Editorial dark · warm charcoal + champagne gold
   Mirrors the iOS app's AppTheme.swift palette so the
   storefront and the product read as the same brand.
   ============================================================ */

:root {
  /* Surfaces */
  --bg:         #0D0C09;
  --bg-lift:    #13110D;
  --card:       #181611;
  --card-hi:    #1E1B14;
  --divider:    #241F1A;
  --rule:       rgba(221, 208, 170, 0.14);

  /* Text */
  --text:       #F4EFE7;
  --text-soft:  #E0DAD0;  /* was #C8C2B5 — bumped for legibility */
  --text-mute:  #ADA69A;  /* was #857E72 — bumped for legibility */
  --text-dim:   #6E685E;  /* was #5C564D — bumped for legibility */

  /* Gold + rose */
  --gold:       #DDD0AA;
  --gold-deep:  #C0B490;
  --gold-glow:  rgba(221, 208, 170, 0.30);
  --rose:       #D1B8AB;

  /* App-parity accents (added 2026-06-11, Wave 1 build)
     — flame from iOS beatFlame (#DA4805) — Tonight's Pick / heat moments
     — royal from iOS beatRoyalBlue (#1B3F8A) — Tastemaker ring identity
     Darkened the soft variant per design review 2026-06-11 — was too
     pastel against the cream light-mode background. */
  --flame:       #DA4805;
  --flame-light: #FF980A;
  --flame-glow:  rgba(218, 72, 5, 0.22);
  --royal:       #102659;          /* was #1B3F8A — deepened for light-mode contrast */
  --royal-soft:  #1B3F8A;          /* the original beatRoyalBlue, now used as soft */
  --royal-glow:  rgba(16, 38, 89, 0.32);

  /* Tier palette — drawn from the slide deck "Four tiers, four people" (2026-06-14)
     Each tier gets a "soft" (background tint), "core" (accent line / icon), and
     "shine" (highlight for foil-stamp gradient) variant. Used in #membership
     cards with a metallic gradient treatment so the cards feel premium, not flat. */
  --tier-free-soft:    rgba(168, 196, 158, 0.10);   /* sage tint behind card */
  --tier-free-core:    #A8C49E;                     /* sage */
  --tier-free-shine:   #D4E5CB;                     /* pale sage highlight */
  --tier-free-glow:    rgba(168, 196, 158, 0.25);

  --tier-plus-soft:    rgba(217, 167, 176, 0.10);   /* dusty rose tint */
  --tier-plus-core:    #D9A7B0;                     /* dusty rose */
  --tier-plus-shine:   #ECCBD2;                     /* pale rose highlight */
  --tier-plus-glow:    rgba(217, 167, 176, 0.28);

  --tier-priority-soft:  rgba(221, 208, 170, 0.10); /* gold tint */
  --tier-priority-core:  #DDD0AA;                   /* brand gold (matches existing --gold) */
  --tier-priority-shine: #F0E8C9;                   /* pale gold highlight */
  --tier-priority-glow:  rgba(221, 208, 170, 0.30);

  --tier-lifetime-soft:  rgba(196, 168, 88, 0.12);  /* deeper gold tint */
  --tier-lifetime-core:  #C4A858;                   /* deeper champagne gold */
  --tier-lifetime-shine: #E8D89A;                   /* lifted gold highlight (for foil shimmer) */
  --tier-lifetime-glow:  rgba(196, 168, 88, 0.32);

  /* Stoplight statuses — editorial-muted, never Bootstrap-bright */
  --status-go:    #7FB069;  /* sage green   — in service     */
  --status-go-glow:   rgba(127, 176, 105, 0.30);
  --status-soft:  #E0B458;  /* warm amber   — soft open      */
  --status-soft-glow: rgba(224, 180, 88, 0.25);
  --status-wait:  #C56A4D;  /* warm rust    — in the kitchen */
  --status-wait-glow: rgba(197, 106, 77, 0.18);

  /* Type */
  --serif:  'Newsreader', ui-serif, 'New York', Georgia, serif;
  --sans:   'Geist', ui-sans-serif, -apple-system, system-ui, sans-serif;
  --mono:   'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;

  /* Rhythm */
  --pad-x:        clamp(20px, 5vw, 56px);
  --col-max:     1240px;
  --col-narrow:   780px;
  --col-prose:    680px;
}

/* ============================================================
   Light mode — editorial newspaper feel
   Warm cream paper, deep charcoal type, bronze-gold accent
   Applied via [data-theme="light"] on <html>
   ============================================================ */
[data-theme="light"] {
  /* Surfaces — aged-paper warmth, not sterile white */
  --bg:         #F4EDDB;
  --bg-lift:    #FAF4E3;
  --card:       #FBF6E8;
  --card-hi:    #FFFCF1;
  --divider:    #E2D9C0;
  --rule:       rgba(64, 52, 24, 0.16);

  /* Text — deep ink on cream, never harsh black */
  --text:       #1A1812;
  --text-soft:  #2E2920;
  --text-mute:  #5C5546;
  --text-dim:   #6E6757;

  /* Gold — deeper bronze for light-bg legibility */
  --gold:       #806A1F;
  --gold-deep:  #5F4E14;
  --gold-glow:  rgba(128, 106, 31, 0.22);
  --rose:       #7E5444;
  --flame:      #B23A04;

  /* Stoplights — deepened for AA contrast on light bg */
  --status-go:        #4F7D2C;
  --status-go-glow:   rgba(79, 125, 44, 0.22);
  --status-soft:      #876619;
  --status-soft-glow: rgba(181, 136, 47, 0.20);
  --status-wait:      #9C4B30;
  --status-wait-glow: rgba(156, 75, 48, 0.18);
}

/* Smooth theme transitions on shifting surfaces only — keep it snappy */
html, body, header, footer, section, aside, article,
.card, .tier, .reserve, .reserve-buy, .lifetime-card,
.lifetime-preview__book, .lifetime-preview__book-cover,
.engine-formula, .reserve-patron, .tease, .nav, .nav__primary,
.cta, .cta--soft, .cta--ghost, .nav__cta {
  transition: background-color 280ms ease, color 280ms ease,
              border-color 280ms ease, box-shadow 280ms ease;
}

/* Respect users who don't want motion */
@media (prefers-reduced-motion: reduce) {
  html, body, header, footer, section, aside, article,
  .card, .tier, .reserve, .reserve-buy, .lifetime-card {
    transition: none;
  }
}

/* ============================================================
   Theme toggle — slick corner button (bottom-right)
   ============================================================ */
.theme-toggle {
  position: fixed;
  bottom: 24px;
  right: 24px;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--bg-lift);
  border: 1px solid var(--gold);
  color: var(--gold);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 9999;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25), 0 0 0 0 var(--gold-glow);
  transition: transform 200ms ease,
              box-shadow 280ms ease,
              background-color 280ms ease,
              border-color 280ms ease,
              color 280ms ease;
  -webkit-tap-highlight-color: transparent;
}
.theme-toggle:hover {
  transform: translateY(-2px) scale(1.04);
  box-shadow: 0 6px 22px rgba(0, 0, 0, 0.30), 0 0 22px var(--gold-glow);
}
.theme-toggle:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
}
.theme-toggle:active { transform: translateY(0) scale(0.98); }

[data-theme="light"] .theme-toggle {
  box-shadow: 0 4px 16px rgba(80, 60, 20, 0.14), 0 0 0 0 var(--gold-glow);
}
[data-theme="light"] .theme-toggle:hover {
  box-shadow: 0 6px 22px rgba(80, 60, 20, 0.20), 0 0 22px var(--gold-glow);
}

.theme-toggle svg {
  width: 20px;
  height: 20px;
  stroke: currentColor;
  stroke-width: 1.6;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.theme-toggle .toggle-sun  { display: none; }
.theme-toggle .toggle-moon { display: block; }
[data-theme="light"] .theme-toggle .toggle-sun  { display: block; }
[data-theme="light"] .theme-toggle .toggle-moon { display: none; }

/* First-visit attention pulse — runs once, then settles */
@keyframes theme-toggle-pulse {
  0%, 100% { box-shadow: 0 4px 16px rgba(0,0,0,0.25), 0 0 0 0 var(--gold-glow); }
  50%      { box-shadow: 0 4px 16px rgba(0,0,0,0.25), 0 0 0 8px transparent; }
}
.theme-toggle.is-first-visit {
  animation: theme-toggle-pulse 2.2s ease-in-out 1.4s 2;
}

/* Shrink + tuck on the screens where the sticky founder bar appears (<=720px);
   the bar (below) leaves matching right-padding so the moon never lands on it. */
@media (max-width: 720px) {
  .theme-toggle { bottom: 16px; right: 16px; width: 42px; height: 42px; }
  .theme-toggle svg { width: 18px; height: 18px; }
}

/* Hide print artifacts */
@media print { .theme-toggle { display: none; } }

/* ----- Reset -------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; }
/* ─────────────────────────────────────────────────────────────────────────
   THE DEFAULT IS THE SERIF. 2026-07-17.

   It was var(--sans), and that was the bug — not a preference, a DEFAULT
   THAT POINTED AT THE WRONG FONT. Every serif element had to opt IN, so any
   element that simply forgot to state a family silently rendered in Geist.
   Nothing errored. Nothing looked broken to the author. It just quietly got
   less like us with every section anyone added.

   Founder direction, said more than once: "we need to look more formal and
   on brand yet legible and not excessively trying hard." He circled two
   paragraphs on the home page as AI slop. Measured, they were EXACTLY the two
   children of that block that never named a font:
       .htw__n  serif ✓   .htw__t  serif ✓   .htw__pull serif ✓
       .htw__d  — none —  ← circled
       .htw__foot — none — ← circled
   The author of that block chose serif three times and forgot twice, and the
   two he forgot are the two that got flagged. That is not carelessness; it is
   a default doing what a default does. Fixing those two selectors would have
   fixed the screenshot and left the mechanism loaded for the next section.

   So the inheritance now points at the brand, and the exception is the thing
   that must be stated. Everything that explicitly asks for var(--sans) is
   untouched (badges, 9.5–11px meta labels, form controls); everything that
   never made a choice now reads as theBEAT. If you want sans, say sans.
   ───────────────────────────────────────────────────────────────────────── */
body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: 'kern' 1, 'liga' 1;
  text-rendering: optimizeLegibility;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; }
::selection { background: var(--gold); color: var(--bg); }

/* ----- Utility: eyebrow tracked caps -------------------------- */
.eyebrow {
  display: inline-block;
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
  line-height: 1;
}
.eyebrow--mono { font-family: var(--mono); font-weight: 500; letter-spacing: 0.18em; }
.eyebrow--mute { color: var(--text-mute); }

/* ----- Brand wordmark protector ------------------------------- *
 * The wordmark is always "theBEAT" — lowercase italic "the" +    *
 * uppercase upright "BEAT" — including inside ALL-CAPS contexts   *
 * AND inside italic ones. No exceptions.                          *
 *                                                                *
 * UNIVERSAL: every <em> opts out of inherited text-transform.    *
 * This protects "<em>the</em>BEAT" anywhere it appears, with no  *
 * per-class enumeration needed. <em> for editorial italic is     *
 * already lowercase in source, so this rule is a no-op for it.   *
 * ----------------------------------------------------------------*/
em {
  text-transform: none;
}

/* ----- Brand wordmark lockup ---------------------------------- *
 * 2026-07-15: text-transform was protected above, but font-style *
 * was NOT — and could not be. The old markup was:                *
 *                                                                *
 *     <em>the</em>BEAT                                           *
 *                                                                *
 * "BEAT" was a bare text node with no element around it, so no   *
 * rule could select it. It silently inherited font-style from    *
 * any italic ancestor (.page-head__sub, .footer__tag, .prose     *
 * strong, <em>, <cite>…) and the whole wordmark went italic.     *
 * A protector that cannot select its target is not a protector.  *
 *                                                                *
 * The markup is now:                                             *
 *                                                                *
 *   <span class="wm"><em>the</em><span class="wm__beat">BEAT     *
 *   </span></span>                                               *
 *                                                                *
 * WHY THIS WINS: font-style is an INHERITED property, and an     *
 * inherited value carries no specificity — it only applies when  *
 * nothing matches the element itself. .wm__beat matches BEAT     *
 * directly, so it beats an italic ancestor no matter how         *
 * specific that ancestor's selector is. Two layers, so either    *
 * alone still holds if the other is edited away:                 *
 *   .wm       — neutralises inheritance at the lockup boundary   *
 *   .wm__beat — asserts upright on the BEAT run itself           *
 * .wm em re-asserts the italic "the" against .wm's normal.       *
 *                                                                *
 * The ™ needs nothing here: .tm / .hero__tm already declare      *
 * font-style: normal on themselves (see "Trademark notice").     *
 * ----------------------------------------------------------------*/
.wm {
  font-style: normal;
}
.wm em {
  font-style: italic;
  /* The lockup is "the" (lowercase italic) + "BEAT" (caps upright) —
     with NO exceptions, including inside all-caps contexts. Several
     containers (.page-head__meta, eyebrows, labels) set
     text-transform: uppercase, which was silently rendering the mark
     as "THEBEAT". font-style was defended here; text-transform was not.
     The founder, 2026-07-15: "no exceptions even when the surrounding text is
     all caps." */
  text-transform: none;
}
.wm__beat {
  font-style: normal;
  /* BEAT is authored in caps and stays that way regardless of an
     ancestor's transform — lowercase/capitalize must never reach it. */
  text-transform: none;
}

/* When em appears inside tracked-caps contexts (eyebrows, labels,  *
 * tier prices, calculator labels, etc.) give it the subtle         *
 * wordmark refinement: zero letter-spacing so "the" doesn't get    *
 * wide-tracked into "t h e", plus a soft opacity drop to echo the  *
 * topbar wordmark treatment.                                       */
.eyebrow em,
[class*="eyebrow"] em,
.hero__eyebrow em,
.tier__price em,
.tn-card__tag em,
.tn-card__num em,
.queue-eyebrow em,
.hunt-eyebrow em,
.atlas-row__region em,
.atlas-row__status em,
.atlas-teaser__more em,
.atlas-legend__name em,
.atlas-request__eyebrow em,
.math-compare__label em,
.calc__stat-label em,
.calc__slider-label em,
.calc__h4 em,
.calc__pick em,
.calc__foot em,
.host-pricing__tier em,
.lifetime-tile__head .eyebrow em,
.lifetime-tile__expand em,
.lifetime-tile__meta .k em,
.lifetime-tile__rescue-k em,
.lifetime__gift-eyebrow em,
.pillar__eyebrow em,
.nav a em,
.nav__filter em,
.nav__primary em,
.cta__copy .small em,
.cta--ghost em,
.tier__label em,
.tier__price-note em,
.tier__price-period em,
.tier-toggle__option em,
.visit-card__feature em,
.visit-card__moment em,
.visit-day__label em,
.visit-day__time em,
.visit-day__foot em,
.visit-gift__eyebrow em,
.visit-hero__eyebrow em,
.visit-hero__strip-k em,
.visit-health__chip em,
.visit-health__eyebrow em,
.visit-capture__label em,
.visiting-moment__tag em,
.filter-hero__eyebrow em,
.filter-hero__strip-k em,
.filter-card__cohort em,
.filter-card__link em,
.campus-strip__eyebrow em,
.heatmap-label--region em,
.heatmap__cell-region em,
.heatmap__details summary em,
.heatmap__legend em,
.hero-plate__label em,
.hero__ladder em,
.hero__meta-label em,
.page-head__crumb em,
.page-head__meta em,
.faq__n em,
.tm-eyebrow em,
.tm-foot__k em,
.prv-tm__foot em,
.prv-tonight__eyebrow em,
.prv-tonight__tag em,
.tn-btn em,
.tn-eyebrow em,
.tn-head .e em,
.tn-head .t em,
.tn-stats .k em,
.rk-head .meta em,
.circle-card__n em,
.constellation__chip em,
.contacts__label em,
.dd-by em,
.dd-scores .k em,
.day-zero__count em,
.day-zero__cta-label em,
.day-zero__eyebrow em,
.inside-chip em,
.inside-list li strong em,
.issue__date em,
.kit__label em,
.kit__meta em,
.legal h3 em,
.legal-toc__label em,
.lifetime-card__foot em,
.lifetime-card__num em,
.lifetime-preview__book-member em,
.lifetime-preview__book-year em,
.masthead-note strong em,
.pg-chip--reset em,
.pg-tag em,
.phone__caption em,
.pillar__link em,
.playground__status em,
.price-range__spectrum em,
.price-range__who em,
.reserve__label em,
.reserve__submit em,
.skip-link em,
.status em,
.annual-mock__year em,
.atlas-vote__submit em,
.footer__base em,
.footer__col h4 em {
  letter-spacing: 0;
  opacity: 0.78;
}

/* Hair rule used between sections */
.rule {
  border: 0;
  border-top: 1px solid var(--divider);
  margin: 0;
}

/* ----- Shell + grid ------------------------------------------- */
.shell {
  width: 100%;
  max-width: var(--col-max);
  margin: 0 auto;
  padding-left: var(--pad-x);
  padding-right: var(--pad-x);
}
.shell--narrow { max-width: var(--col-narrow); }
.shell--prose  { max-width: var(--col-prose);  }

/* ----- Top bar ------------------------------------------------ */
.topbar {
  position: sticky;
  top: 0;
  z-index: 30;
  background: rgba(13, 12, 9, 0.86);
  backdrop-filter: saturate(140%) blur(14px);
  -webkit-backdrop-filter: saturate(140%) blur(14px);
  border-bottom: 1px solid var(--divider);
}
.topbar__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 64px;
  gap: 24px;
}
.brand {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.brand__mark {
  width: 26px;
  height: 26px;
  border-radius: 6px;
  display: block;
}
.brand__word {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 18px;
  letter-spacing: -0.01em;
  color: var(--text);
  /* Optical centring against the .brand__mark tile.
     `.brand` is align-items:center, which centres the WORD'S LINE BOX
     on the tile — and it does that perfectly (box centre == tile centre,
     measured delta 0.00px). But "theBEAT" has no descenders, so the
     glyphs occupy only the cap-height→baseline band; the font's descent
     space below the baseline renders empty. Centring the box therefore
     leaves ~2x more dead space below the ink than above it, and the
     visible wordmark rides HIGH against the top rule.

     Measured (2026-07-15): ink centre sat 0.115em above the box centre —
     -1.85px @16px topbar, -2.53px @22px footer, identical at 390 and 430.
     The ratio is pure font metrics ((ascent-descent)/2 minus the ink's
     own half-height), so it is independent of font-size AND line-height:
     one em value is correct at every breakpoint and both lockups.

     NOT the <sup class="tm">: removing the ™ leaves the line box at
     24.8px and the box centre at 31.0px — identical. vertical-align:super
     never inflates the line box here because .tm is line-height:1 at
     0.48em, so its raised box still fits inside the 1.55em line box. */
  position: relative;
  top: 0.115em;
}
.brand__word em { font-style: italic; font-weight: 300; color: var(--text-soft); }

.nav {
  display: flex;
  align-items: center;
  gap: 28px;
}
/* NAV IS CHROME, AND CHROME IS SANS. 2026-07-17 — a regression I shipped and
   then looked at.

   Flipping `body` to the serif was right for PROSE: the founder circled two
   paragraphs and the fix was that the default pointed at the wrong font. But the
   flip moved 114 rules, and this was one of them — `.nav a` names no family, so
   it went serif with everything else.

   Newsreader is WIDER than Geist at the same size and tracking. The nav stopped
   fitting: "INSIDE THE APP" broke to "INSIDE THE / APP", "FOR TRAVELERS" to
   "FOR / TRAVELERS". Seen on the deployed site, not reasoned about — I had a
   screenshot of exactly this an hour earlier and did not look closely enough.

   The rule that keeps this straight: PROSE IS SERIF, CHROME IS SANS. Nav items,
   buttons and control labels are chrome — the reader is operating them, not
   reading them. That is why they carry tracked caps at 11-12px, a treatment
   serif does not wear at that size.

   Deliberately NOT a blanket revert of all 33 tracked-caps rules the flip
   touched. The hero's meta row and the CTA chip labels are tracked caps too and
   they read WELL in serif — I looked. Fixing what I can see is broken beats
   reverting on a hunch and undoing the thing the founder actually asked for. */
.nav a {
  font-family: var(--sans);
  font-size: 12.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-soft);
  transition: color 0.2s ease;
}
.nav a:hover,
.nav a[aria-current="page"] { color: var(--gold); }

/* Mobile nav visibility is now handled by the hamburger drawer
   system (see "Hamburger menu" rules further down). The old
   "hide everything except Download" rule was removed 2026-05-25
   when the drawer replaced inline nav on mobile. */

/* Primary nav CTA — Founding offer (filled gold, most visible)   */
/* Sits before the outlined Download CTA. Establishes convert →   */
/* install hierarchy: see the offer first, then install.           */
.nav__primary {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  border: 1px solid var(--gold);
  background: var(--gold);
  border-radius: 999px;
  color: var(--bg) !important;
  /* Chrome, not prose — see the note on `.nav a`. 11.5px tracked caps at
     0.18em is a control label; the serif does not wear that treatment. */
  font-family: var(--sans);
  font-size: 11.5px !important;
  font-weight: 600 !important;
  letter-spacing: 0.18em !important;
  text-transform: uppercase !important;
  white-space: nowrap;
  transition: background 200ms, color 200ms, box-shadow 200ms, transform 120ms;
  box-shadow: 0 0 14px var(--gold-glow);
}
.nav__primary:hover {
  background: var(--gold-deep);
  border-color: var(--gold-deep);
  box-shadow: 0 0 18px var(--gold-glow);
}
.nav__primary:active { transform: scale(0.97); }
.nav__primary::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--bg);
  display: inline-block;
}

.nav__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  border: 1px solid var(--gold);
  border-radius: 999px;
  color: var(--gold) !important;
  /* Chrome — see `.nav a`. */
  font-family: var(--sans);
  font-size: 11.5px !important;
  letter-spacing: 0.16em !important;
  font-weight: 500;
}
.nav__cta:hover { background: var(--gold); color: var(--bg) !important; }

/* ----- Hero --------------------------------------------------- */
.hero {
  padding-top: clamp(72px, 12vw, 140px);
  padding-bottom: clamp(56px, 9vw, 112px);
  position: relative;
}
/* 2026-07-09 (A4) — the 72-140px top padding above was tuned back when the
   hero was the page's first-fold element (see index.html's "Status ticker
   removed 2026-05-23" comment). The .launch-banner ticker was added above it
   later without re-tuning this, so on index.html today it's a 30px ticker
   PLUS up to 140px of empty hero padding before any real content — the empty
   band under the ticker flagged in review. Scoped to the ticker+hero pairing only
   (adjacent-sibling) so ad.html's standalone .hero, which has no ticker
   above it, keeps its original breathing room. */
.launch-banner + .hero {
  padding-top: clamp(28px, 5vw, 56px);
}
.hero__eyebrow {
  display: flex;
  align-items: center;
  gap: 14px;
  color: var(--text-mute);
}
.hero__eyebrow .dot {
  width: 4px; height: 4px;
  border-radius: 50%;
  background: var(--gold);
  display: inline-block;
}
.hero__wordmark {
  margin: 22px 0 0;
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(72px, 16vw, 220px);
  line-height: 0.88;
  letter-spacing: -0.045em;
  color: var(--text);
}
.hero__wordmark .the {
  font-style: italic;
  font-weight: 300;
  color: var(--text-soft);
  letter-spacing: -0.025em;
  margin-right: 0.04em;
}
.hero__wordmark .beat {
  font-weight: 500;
  /* 2026-07-15 — was -0.05em, which tracked the CAPS twice as tight as
     the lowercase italic ".the" (-0.025em). That's inverted: uppercase
     carries more sidebearing and needs MORE space than lowercase, not
     half. And letter-spacing ADDS to the font's own kerning, so -0.05em
     compounded New York's already-tight A/T pair. Measured at 72px the
     E-A and A-T gaps were the two tightest in the mark (-2.83px, -3.67px)
     — technically zero pixel overlap, visually collided, and the two
     spots the founder marked. Now looser than ".the", which is correct for caps. */
  letter-spacing: -0.02em;
  font-kerning: normal;
}
.hero__dek {
  margin: 28px 0 0;
  max-width: 760px;
  font-family: var(--serif);
  font-weight: 300;
  font-style: italic;
  color: var(--text-soft);
  font-size: clamp(22px, 2.4vw, 30px);
  line-height: 1.4;
}
.hero__dek strong { font-style: normal; font-weight: 400; color: var(--text); }
.hero__meta {
  margin-top: 36px;
  display: flex;
  align-items: center;
  gap: 22px;
  flex-wrap: wrap;
}
.hero__meta .pipe {
  width: 1px; height: 16px;
  background: var(--divider);
}
.hero__meta-label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-mute);
}

/* App Store CTA — editorial placeholder, not Apple's official badge */
.cta-row {
  margin-top: clamp(40px, 5vw, 56px);
  display: flex;
  align-items: center;
  gap: 18px;
  flex-wrap: wrap;
}
.cta {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 16px 22px 16px 18px;
  border-radius: 12px;
  border: 1px solid var(--gold);
  background: transparent;
  color: var(--gold);
  font-family: var(--sans);
  font-size: 14px;
  letter-spacing: 0.04em;
  transition: background 0.25s ease, color 0.25s ease, transform 0.25s ease;
}
.cta:hover { background: var(--gold); color: var(--bg); transform: translateY(-1px); }
.cta__mark {
  width: 22px; height: 22px;
  display: inline-block;
}
.cta__copy { display: inline-flex; flex-direction: column; line-height: 1; gap: 4px; }
.cta__copy .small {
  font-size: 9.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  opacity: 0.78;
}
.cta__copy .big {
  font-family: var(--serif);
  font-weight: 500;
  font-size: 18px;
  letter-spacing: -0.01em;
}
.cta--soft {
  border-color: var(--divider);
  color: var(--text-soft);
}
.cta--soft:hover { background: transparent; color: var(--gold); border-color: var(--gold); transform: none; }
.cta--ghost {
  padding: 14px 0;
  border: 0;
  background: transparent;
  color: var(--text-soft);
  font-size: 12px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
}
.cta--ghost::after {
  content: '↗';
  margin-left: 10px;
  color: var(--gold);
  font-style: normal;
}
.cta--ghost:hover { color: var(--gold); }

/* ----- Hero plate (photo placeholder) ------------------------- */
.hero-plate {
  margin-top: clamp(48px, 8vw, 96px);
  position: relative;
  aspect-ratio: 16 / 9;
  border-radius: 4px;
  overflow: hidden;
  background:
    repeating-linear-gradient(135deg,
      rgba(221, 208, 170, 0.045) 0 28px,
      rgba(221, 208, 170, 0.075) 28px 29px),
    radial-gradient(120% 80% at 30% 30%, #1c1812, #0b0a07 70%);
  border: 1px solid var(--divider);
}
.hero-plate__label {
  position: absolute;
  inset: auto 0 0 0;
  padding: 18px 22px;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.hero-plate__label .gold { color: var(--gold); }
.hero-plate__crop {
  position: absolute;
  top: 14px; left: 14px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--text-mute);
}
.hero-plate__center {
  position: absolute; inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 14px;
  color: var(--text-mute);
}
.hero-plate__center .glyph {
  width: 40px; height: 40px;
  border-radius: 50%;
  border: 1px solid var(--rule);
  display: grid; place-items: center;
  color: var(--gold);
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
}

/* ----- Section -------------------------------------------------- */
.section {
  padding-top: clamp(80px, 12vw, 140px);
  padding-bottom: clamp(80px, 12vw, 140px);
}
.section--tight { padding-top: clamp(56px, 9vw, 96px); padding-bottom: clamp(56px, 9vw, 96px); }
.section--lift  { background: var(--bg-lift); }
@media (max-width: 430px) {
  .section { padding-top: 48px; padding-bottom: 48px; }
  .section--tight { padding-top: 36px; padding-bottom: 36px; }
}

.section__head {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 56px;
  align-items: baseline;
  margin-bottom: clamp(40px, 6vw, 72px);
}
.section__head .eyebrow { padding-top: 10px; }
.section__title {
  margin: 0;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(36px, 5.5vw, 64px);
  line-height: 1.02;
  letter-spacing: -0.025em;
  color: var(--text);
  text-wrap: balance;
}
.section__title em {
  font-style: italic;
  color: var(--gold);
  font-weight: 300;
}
.section__lede {
  margin: 22px 0 0;
  font-family: var(--serif);
  font-weight: 300;
  font-size: 20px;
  line-height: 1.55;
  color: var(--text-soft);
  max-width: 640px;
  text-wrap: pretty;
}
@media (max-width: 720px) {
  .section__head { grid-template-columns: 1fr; gap: 18px; }
}

/* ----- Editorial prose ---------------------------------------- */
.prose {
  font-family: var(--serif);
  font-weight: 300;
  font-size: 20px;
  line-height: 1.65;
  color: var(--text-soft);
  max-width: var(--col-prose);
}
.prose p { margin: 0 0 1.4em; text-wrap: pretty; }
.prose p:first-of-type::first-letter {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 3.6em;
  line-height: 0.86;
  float: left;
  padding: 0.04em 0.12em 0 0;
  color: var(--gold);
}
.prose p:last-child { margin-bottom: 0; }
.prose strong { color: var(--text); font-weight: 400; font-style: italic; }
.prose a { color: var(--gold); border-bottom: 1px solid var(--rule); padding-bottom: 1px; }
.prose a:hover { border-bottom-color: var(--gold); }

/* ----- The Edit · three column ------------------------------- */
.edit-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(28px, 4vw, 56px);
}
@media (max-width: 880px) { .edit-grid { grid-template-columns: 1fr; gap: 40px; } }
.edit-item__rule {
  border-top: 1px solid var(--gold);
  width: 36px;
  margin-bottom: 22px;
}
.edit-item__title {
  margin: 0 0 14px;
  font-family: var(--serif);
  font-weight: 400;
  font-size: 26px;
  letter-spacing: -0.012em;
  color: var(--text);
  line-height: 1.15;
}
.edit-item__body {
  font-family: var(--serif);
  font-weight: 300;
  font-size: 17.5px;
  line-height: 1.6;
  color: var(--text-soft);
  text-wrap: pretty;
}

/* ----- From the Daily — tease -------------------------------- */
.daily-grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: clamp(28px, 5vw, 80px);
  align-items: stretch;
}
@media (max-width: 880px) { .daily-grid { grid-template-columns: 1fr; } }

.tease {
  border: 1px solid var(--divider);
  border-radius: 4px;
  padding: clamp(28px, 4vw, 44px);
  background: linear-gradient(180deg, rgba(221, 208, 170, 0.025) 0%, transparent 80%);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: 360px;
}
.tease__top { display: flex; justify-content: space-between; align-items: baseline; }
.tease__num {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  color: var(--text-mute);
}
.tease__hed {
  margin: 28px 0 0;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(28px, 3.5vw, 42px);
  line-height: 1.08;
  letter-spacing: -0.02em;
  color: var(--text);
  text-wrap: balance;
}
.tease__hed em { font-style: italic; color: var(--gold); font-weight: 300; }
.tease__dek {
  margin-top: 18px;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: 16px;
  color: var(--text-soft);
}

/* The "issue" stack on the right */
.issue-stack { display: flex; flex-direction: column; gap: 0; }
.issue {
  display: grid;
  grid-template-columns: 64px 1fr 90px;
  gap: 18px;
  align-items: baseline;
  padding: 22px 0;
  border-top: 1px solid var(--divider);
}
.issue:last-child { border-bottom: 1px solid var(--divider); }
.issue__num {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--text-mute);
}
.issue__title {
  margin: 0;
  font-family: var(--serif);
  font-weight: 400;
  font-size: 19px;
  line-height: 1.25;
  color: var(--text);
}
.issue__title em { font-style: italic; font-weight: 300; color: var(--text-soft); }
.issue__date {
  text-align: right;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.issue--soon .issue__title { color: var(--text-mute); }

/* ----- Coverage strip ---------------------------------------- */
.coverage {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 32px;
  align-items: baseline;
  padding: 28px 0;
}
.coverage__band {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 22px;
}

/* On narrow viewports, stack the coverage layout so cities have full width */
@media (max-width: 880px) {
  .coverage {
    grid-template-columns: 1fr;
    gap: 16px;
    text-align: center;
  }
  .coverage__band {
    justify-content: center;
  }
}
.coverage__band span {
  font-family: var(--serif);
  font-weight: 400;
  font-style: italic;
  font-size: 16px;
  color: var(--text-soft);
}
.coverage__band span::after {
  content: '·';
  margin-left: 26px;
  color: var(--text-dim);
}
.coverage__band span:last-child::after { content: ''; margin: 0; }
@media (max-width: 720px) {
  .coverage { grid-template-columns: 1fr; gap: 12px; }
}

/* ----- Footer ------------------------------------------------- */
.footer {
  border-top: 1px solid var(--divider);
  padding-top: 64px;
  padding-bottom: 28px;
  background: var(--bg);
}
.footer__top {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  gap: clamp(28px, 4vw, 72px);
  padding-bottom: 56px;
}
@media (max-width: 720px) { .footer__top { grid-template-columns: 1fr; gap: 40px; } }
.footer__brand .brand__word { font-size: 22px; }
.footer__tag {
  margin-top: 14px;
  max-width: 360px;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: 15px;
  color: var(--text-mute);
  line-height: 1.5;
}
.footer__col h4 {
  margin: 0 0 18px;
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
}
.footer__col ul { list-style: none; margin: 0; padding: 0; }
.footer__col li { margin-bottom: 10px; }
.footer__col a {
  font-family: var(--serif);
  font-weight: 300;
  font-size: 16px;
  color: var(--text-soft);
  transition: color 0.2s ease;
}
.footer__col a:hover { color: var(--gold); }
.footer__base {
  padding-top: 24px;
  border-top: 1px solid var(--divider);
  display: flex;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-dim);
}
.footer__base .right { color: var(--text-mute); }

/* ============================================================
   Per-page pieces
   ============================================================ */

/* ----- Page header (interior pages) -------------------------- */
.page-head {
  padding-top: clamp(72px, 10vw, 128px);
  padding-bottom: clamp(40px, 6vw, 72px);
}
.page-head__crumb {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.page-head__crumb .sep { margin: 0 10px; color: var(--text-dim); }
.page-head__title {
  margin: 28px 0 0;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(48px, 8vw, 96px);
  line-height: 0.96;
  letter-spacing: -0.035em;
  color: var(--text);
}
.page-head__title em { font-style: italic; color: var(--gold); font-weight: 300; }
.page-head__sub {
  margin-top: 24px;
  max-width: 640px;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: 21px;
  line-height: 1.4;
  color: var(--text-soft);
}
.page-head__meta {
  margin-top: 28px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}

/* ----- About page — masthead marginalia (added 2026-07-03) ---
   about.html's .shell--prose is intentionally left-pinned (same
   convention as terms/privacy/membership/etc.), which on a wide
   desktop leaves the right ~40% of .page-head empty except for
   the ambient .ghost-b watermark — read as awkward dead space
   rather than considered margin. A small running-folio detail,
   anchored to that same right region, gives it an editorial
   reason to be there. Desktop-only; mobile/tablet never had the
   complaint since the column already runs close to full width. */
.page-head--about { position: relative; }
.about-marginalia {
  display: none;
}
@media (min-width: 1180px) {
  .about-marginalia {
    display: flex;
    align-items: center;
    gap: 10px;
    position: absolute;
    top: clamp(96px, 13vw, 152px);
    right: var(--pad-x);
    font-family: var(--mono);
    font-size: 10.5px;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--text-mute);
    opacity: 0.7;
  }
  .about-marginalia__n {
    color: var(--gold);
  }
  .about-marginalia__rule {
    width: 28px;
    height: 1px;
    background: var(--divider);
  }
}

/* ----- About page — margin contents (added 2026-07-03) --------
   Same fill-the-right-region rationale as the page-head marginalia
   above, extended down through the article body since the empty
   column runs the whole scroll length. .about-body__inner is a
   full .shell (max-width: var(--col-max), centered, with its own
   padding-x) wrapping BOTH .about-toc and the narrower
   .shell--prose column as siblings — so the nav is positioned
   against the same capped/centered coordinate system as the
   article and the two scale together at every viewport width,
   instead of the nav drifting toward the raw viewport edge on
   ultrawide screens. right:0 sits flush with .shell's own
   padding-box edge (.shell already insets via padding-right:
   var(--pad-x), so this is NOT an additional offset). Quiet by
   design — small type, no border, no background — a margin note,
   not a sidebar competing with the article. */
.about-body__inner { position: relative; }
.about-toc { display: none; }
@media (min-width: 1180px) {
  .about-toc {
    display: flex;
    flex-direction: column;
    gap: 11px;
    position: absolute;
    top: 6px;
    right: 0;
    width: 190px;
  }
  .about-toc__label {
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--gold);
    opacity: 0.85;
    margin-bottom: 4px;
  }
  .about-toc a {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-family: var(--sans);
    font-size: 12.5px;
    line-height: 1.4;
    color: var(--text-mute);
    text-decoration: none;
    border-bottom: none;
    transition: color 0.2s ease;
  }
  .about-toc a:hover { color: var(--gold); }
  .about-toc__n {
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.08em;
    color: var(--text-dim);
    flex: none;
    padding-top: 1px;
  }
  .about-toc a:hover .about-toc__n { color: var(--gold); }
}

/* ----- Big mailto -------------------------------------------- */
.mailto {
  display: inline-block;
  margin-top: 12px;
  font-family: var(--serif);
  font-weight: 400;
  font-style: italic;
  font-size: clamp(28px, 4.5vw, 48px);
  letter-spacing: -0.015em;
  line-height: 1.1;
  color: var(--gold);
  border-bottom: 1px solid var(--rule);
  padding-bottom: 4px;
  transition: color 0.2s ease, border-color 0.2s ease;
}
.mailto:hover { color: var(--text); border-bottom-color: var(--gold); }

/* ----- FAQ --------------------------------------------------- */
.faq { display: flex; flex-direction: column; }
.faq__item {
  border-top: 1px solid var(--divider);
  padding: 28px 0;
  display: grid;
  grid-template-columns: 80px 1fr;
  gap: 32px;
}
.faq__item:last-child { border-bottom: 1px solid var(--divider); }
.faq__n {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  padding-top: 8px;
}
.faq__q {
  margin: 0 0 14px;
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(22px, 2.6vw, 28px);
  letter-spacing: -0.012em;
  line-height: 1.2;
  color: var(--text);
  text-wrap: balance;
}
.faq__a {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 19.5px;
  line-height: 1.65;
  color: var(--text-soft);
  max-width: 680px;
  text-wrap: pretty;
}
.faq__a em { font-style: italic; }
@media (max-width: 720px) {
  .faq__item { grid-template-columns: 1fr; gap: 14px; }
  .faq__n { padding-top: 0; }
}

/* ----- Legal long-form -------------------------------------- */
.legal {
  font-family: var(--serif);
  font-weight: 300;
  font-size: 17px;
  line-height: 1.7;
  color: var(--text-soft);
}
.legal h2 {
  margin: 56px 0 18px;
  font-family: var(--serif);
  font-weight: 400;
  font-size: 24px;
  letter-spacing: -0.012em;
  color: var(--text);
}
.legal h2 .num {
  display: inline-block;
  margin-right: 14px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  color: var(--gold);
  vertical-align: middle;
}
.legal h3 {
  margin: 32px 0 12px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: 12px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
}
.legal p { margin: 0 0 1.2em; text-wrap: pretty; }
.legal ul { margin: 0 0 1.2em; padding-left: 20px; }
.legal li { margin-bottom: 8px; }
.legal a { color: var(--gold); border-bottom: 1px solid var(--rule); }
.legal a:hover { border-bottom-color: var(--gold); }
.legal strong { color: var(--text); font-weight: 400; font-style: italic; }

.legal-toc {
  border: 1px solid var(--divider);
  border-radius: 4px;
  padding: 24px;
  margin-bottom: 56px;
  background: rgba(221, 208, 170, 0.02);
}
.legal-toc__label {
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 14px;
}
.legal-toc ol {
  list-style: none;
  counter-reset: toc;
  margin: 0;
  padding: 0;
  columns: 2;
  column-gap: 36px;
}
@media (max-width: 720px) { .legal-toc ol { columns: 1; } }
.legal-toc li {
  counter-increment: toc;
  font-family: var(--serif);
  font-weight: 300;
  font-size: 15px;
  margin-bottom: 8px;
  break-inside: avoid;
}
.legal-toc li::before {
  content: counter(toc, decimal-leading-zero) ' / ';
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  color: var(--gold);
  margin-right: 8px;
}
.legal-toc a:hover { color: var(--gold); }

/* ----- Press kit --------------------------------------------- */
.kit {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin-top: 32px;
}
@media (max-width: 720px) { .kit { grid-template-columns: 1fr; } }
.kit__card {
  border: 1px solid var(--divider);
  border-radius: 4px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  background: linear-gradient(180deg, rgba(221,208,170,0.02), transparent 80%);
  transition: border-color 0.2s ease, background 0.2s ease;
}
.kit__card:hover { border-color: var(--gold); }
.kit__label { font-family: var(--mono); font-size: 10.5px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--gold); }
.kit__title { font-family: var(--serif); font-weight: 400; font-size: 22px; letter-spacing: -0.01em; color: var(--text); }
.kit__meta  { font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; color: var(--text-mute); text-transform: uppercase; margin-top: auto; }
.kit__meta .available { color: var(--gold); }
.kit__meta .pending  { color: var(--text-dim); }

/* ----- Press contacts ---------------------------------------- */
.contacts {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
  border-top: 1px solid var(--divider);
  border-bottom: 1px solid var(--divider);
  padding: 40px 0;
  margin-top: 56px;
}
@media (max-width: 720px) { .contacts { grid-template-columns: 1fr; gap: 24px; } }
.contacts__label {
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 10px;
}
.contacts__mail {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 19px;
  color: var(--text);
  border-bottom: 1px solid var(--rule);
  padding-bottom: 2px;
}
.contacts__mail:hover { color: var(--gold); border-bottom-color: var(--gold); }
.contacts__hint {
  margin-top: 10px;
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: 14px;
  color: var(--text-mute);
}

/* ----- Press hero (added 2026-07-03) --------------------------
   Deliberately its own class, not .page-head/.page-head--about.
   about.html's hero is a full editorial masthead moment (huge
   serif headline, italic sub-dek, marginalia). Press needed to
   read as a lean utility page on first glance — smaller type
   scale, an eyebrow instead of a page-head__crumb-led title, and
   the contact channel + SLA surfaced as a fact-strip (same
   strip-item pattern as .filter-hero__strip / .visit-hero__strip)
   rather than buried in a sentence. Keeps .page-head__crumb for
   the breadcrumb only — everything else is bespoke. ---------- */
.press-hero {
  padding: clamp(64px, 9vw, 112px) 0 clamp(40px, 6vw, 64px);
  position: relative;
}
.press-hero__eyebrow {
  display: block;
  margin-top: 22px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.press-hero__hed {
  margin: 14px 0 0;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(32px, 4.6vw, 52px);
  line-height: 1.1;
  letter-spacing: -0.015em;
  color: var(--text);
  max-width: 780px;
}
.press-hero__mailto {
  font-size: inherit;
  margin-top: 0;
  display: inline;
  word-break: break-word;
}
.press-hero__dek {
  margin-top: 20px;
  max-width: 600px;
  font-family: var(--serif);
  font-weight: 300;
  font-size: 17px;
  line-height: 1.55;
  color: var(--text-soft);
}
.press-hero__strip {
  display: flex;
  flex-wrap: wrap;
  gap: 22px 40px;
  align-items: flex-start;
  margin-top: 32px;
  padding-top: 26px;
  border-top: 1px solid var(--rule);
}
.press-hero__strip-item { display: flex; flex-direction: column; gap: 4px; max-width: 280px; }
.press-hero__strip-k {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.press-hero__strip-v {
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.4;
  color: var(--text);
}
.press-hero__strip-v strong { color: var(--gold); font-style: normal; }
@media (max-width: 640px) {
  .press-hero__strip-k { font-size: 12px; letter-spacing: 0.12em; }
  .press-hero__strip { gap: 18px 28px; }
}

/* ----- Press kit — labeled asset rows (added 2026-07-03) ------
   Replaces the old .kit card-grid, whose .kit__label ("N° 001 ·
   Identity") echoed about.html's manifesto-section numbering
   (.legal h2 .num, same "N° 00X" shape) closely enough that the
   two pages read as the same template at a glance. Presented as
   a spec-sheet list instead: a file-type tag anchors each row on
   the left, no N°-numbering anywhere in the component. ---------- */
.presskit {
  display: flex;
  flex-direction: column;
  margin-top: 32px;
  border-top: 1px solid var(--divider);
}
.presskit__row {
  display: grid;
  grid-template-columns: 56px 1fr auto;
  align-items: center;
  gap: 20px;
  padding: 20px 4px;
  border-bottom: 1px solid var(--divider);
  transition: background-color 0.2s ease;
}
.presskit__row:hover { background: rgba(221, 208, 170, 0.03); }
.presskit__tag {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 40px;
  border: 1px solid var(--rule);
  border-radius: 3px;
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.1em;
  color: var(--gold);
}
.presskit__body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.presskit__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 19px;
  letter-spacing: -0.01em;
  color: var(--text);
}
.presskit__format {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.presskit__status {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-align: right;
  white-space: nowrap;
}
.presskit__status--available { color: var(--gold); }
.presskit__status--pending { color: var(--text-dim); }
@media (max-width: 640px) {
  .presskit__row {
    grid-template-columns: 40px 1fr;
    grid-template-areas:
      "tag title"
      "tag status";
    row-gap: 6px;
  }
  .presskit__tag { grid-area: tag; height: 34px; align-self: start; }
  .presskit__body { grid-area: title; }
  .presskit__status { grid-area: status; text-align: left; }
}

/* ----- Accessibility ---------------------------------------- */
:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
  border-radius: 2px;
}

/* Skip-to-content link — visible only on focus, sits above topbar */
.skip-link {
  position: absolute;
  top: 0;
  left: 0;
  transform: translateY(-200%);
  clip-path: inset(50%);
  z-index: 100;
  padding: 12px 18px;
  background: var(--bg);
  color: var(--gold);
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border: 1px solid var(--gold);
  border-radius: 2px;
  margin: 8px;
  transition: transform 0.18s ease;
}
.skip-link:focus,
.skip-link:focus-visible {
  transform: translateY(0);
  clip-path: none;
  outline: 2px solid var(--gold);
  outline-offset: 2px;
}

/* Screen-reader-only utility — visually hidden, still announced */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ============================================================
   Motion + ambient kitchen nods
   ============================================================ */

/* Status strip — "kitchens open" line above the topbar */
.status {
  background: #0A0907;
  border-bottom: 1px solid var(--divider);
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.status__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  height: 32px;
}
.status__left, .status__right {
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.status .dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--gold);
  display: inline-block;
  box-shadow: 0 0 0 0 var(--gold-glow);
  animation: emberPulse 2.4s ease-in-out infinite;
}
.status .sep { color: var(--text-dim); }
.status .city { color: var(--text-soft); }
@media (max-width: 720px) {
  .status .hide-sm { display: none; }
  .status__inner { height: 28px; }
}

@keyframes emberPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(221, 208, 170, 0.45); transform: scale(1); }
  50%      { box-shadow: 0 0 0 6px rgba(221, 208, 170, 0); transform: scale(1.1); }
}

/* Hero entrance — letter-stagger on the wordmark, dek fade up */
.hero__wordmark { overflow: visible; }
.hero__wordmark .letter {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.35em);
  animation: settleIn 0.85s cubic-bezier(0.18, 0.89, 0.32, 1.18) forwards;
}
@keyframes settleIn {
  to { opacity: 1; transform: translateY(0); }
}
.hero__eyebrow,
.hero__dek,
.cta-row {
  opacity: 0;
  transform: translateY(8px);
  animation: heroFade 0.7s ease-out 0.55s forwards;
}
.hero__dek { animation-delay: 0.75s; }
.cta-row   { animation-delay: 0.95s; }
@keyframes heroFade {
  to { opacity: 1; transform: translateY(0); }
}

/* Hero plate — slow ember bloom behind the glyph */
.hero-plate::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(40% 60% at 50% 55%, rgba(221, 208, 170, 0.10), transparent 70%);
  animation: emberBreath 6s ease-in-out infinite;
  pointer-events: none;
}
@keyframes emberBreath {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50%      { opacity: 0.95; transform: scale(1.08); }
}

/* Scroll-reveal — applied via IntersectionObserver */
.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity 0.9s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.9s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}
.reveal.is-in { opacity: 1; transform: translateY(0); }
.reveal[data-delay="1"].is-in { transition-delay: 0.04s; }
.reveal[data-delay="2"].is-in { transition-delay: 0.08s; }
.reveal[data-delay="3"].is-in { transition-delay: 0.12s; }
.reveal[data-delay="4"].is-in { transition-delay: 0.16s; }

/* Gold rules that "cut" in on reveal — like a knife stroke */
.edit-item__rule {
  transform-origin: left center;
  transform: scaleX(0);
  transition: transform 0.9s cubic-bezier(0.18, 0.89, 0.32, 1.05) 0.1s;
}
.reveal.is-in .edit-item__rule,
.is-in .edit-item__rule { transform: scaleX(1); }
.edit-item:hover .edit-item__rule { transform: scaleX(2.6); transition-duration: 0.35s; }
.edit-item__title { transition: color 0.3s ease; }
.edit-item:hover .edit-item__title { color: var(--gold); }

/* Brand mark — gentle warmth on hover (whisk catching the light) */
.brand__mark { transition: transform 0.5s cubic-bezier(0.18, 0.89, 0.32, 1.18), filter 0.5s ease; }
.brand:hover .brand__mark { transform: rotate(-6deg); filter: drop-shadow(0 0 8px var(--gold-glow)); }

/* Reduced motion — opt out of all of the above */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  .reveal { opacity: 1; transform: none; }
  .edit-item__rule { transform: scaleX(1); }
}

/* ============================================================
   Phone mockups · "A look inside"
   ============================================================ */
.lookinside {
  background: var(--bg);
  position: relative;
}
.phones {
  margin-top: clamp(32px, 5vw, 56px);
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(28px, 4vw, 56px);
  align-items: start;
}
@media (max-width: 960px) {
  .phones { grid-template-columns: 1fr; max-width: 360px; margin-left: auto; margin-right: auto; }
}

.phone {
  position: relative;
  width: 100%;
  /* Hard viewport ceiling on top of the 375px design cap: 100vw minus the
     shell's own horizontal padding (both sides), so the frame is guaranteed
     to fit inside the visible viewport no matter what any ancestor grid/flex
     does. Fixes the recurring "phone slides off / clips on mobile" bug —
     previously only a static max-width, which had no floor tied to the
     actual safe content width. (2026-07-08) */
  max-width: min(375px, calc(100vw - 2 * var(--pad-x)));
  margin: 0 auto;
  aspect-ratio: 9 / 19.5;
  border-radius: 42px;
  padding: 5px;
  /* Second clip layer alongside .phone__screen below — belt-and-suspenders
     so nothing (incl. a <video> layer that defeats an inner clip, see next
     rule) can visually escape the rounded frame onto the page. Does not
     clip this element's own box-shadow (box-shadow is never affected by an
     element's own overflow). */
  overflow: hidden;
  background: linear-gradient(160deg, #1c1813 0%, #0c0a07 100%);
  box-shadow:
    0 22px 44px -22px rgba(0, 0, 0, 0.62),
    0 0 0 1px rgba(255, 255, 255, 0.05),
    /* very gentle, diffuse ambient glow so the phone lifts off the dark page — soft, not a ring */
    0 6px 100px -18px rgba(238, 233, 222, 0.09);
}
.phone__screen {
  width: 100%;
  height: 100%;
  border-radius: 37px;
  background: var(--bg);
  overflow: hidden;
  /* Safari/WebKit has a long-documented bug where a <video> child (it gets
     its own compositing layer) can paint outside a border-radius +
     overflow:hidden ancestor once a parent picks up a transform — exactly
     what happens here from the .reveal scroll-in animation and the
     data-tilt hover effect on .phone. Forcing a mask (instead of relying on
     the overflow clip alone) is the standard robust fix for that class of
     bug — this is the "video mockup slides out of the rounded phone frame"
     recurrence. (2026-07-08) */
  -webkit-mask-image: -webkit-radial-gradient(white, black);
  position: relative;
  display: flex;
  flex-direction: column;
}
.phone__notch {
  position: absolute;
  top: 6px;
  left: 50%;
  transform: translateX(-50%);
  width: 86px;
  height: 22px;
  border-radius: 14px;
  background: #060503;
  z-index: 5;
}
.phone__caption {
  margin-top: 18px;
  text-align: center;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.phone__caption .gold { color: var(--gold); margin-right: 8px; }

/* Real app screenshots fill the device screen (each capture already includes its own status bar + Dynamic Island) */
.phone__shot { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Pause/Play for the in-phone demo loops (inside.html #rankings, #hunt, #queue).
   WCAG 2.1 SC 2.2.2: silent, autoplaying, looping, >5s → needs a control.
   INJECTED BY JS (see inside.html "In-phone demo loops") so it can never render
   as a dead control with JS off. Lives BELOW the frame — .phone is
   overflow:hidden and would clip a child — and borrows .phone__caption's
   mono/uppercase/muted register so it reads as a caption-weight affordance
   rather than a piece of UI chrome competing with the device.
   Fixed min-width so the Play↔Pause swap can't reflow the column, and no
   truncation at any width: the label is one short word with room to spare. */
.phone__playtoggle {
  display: block;
  margin: 16px auto 0;
  min-width: 108px;
  padding: 9px 18px;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 999px;
  cursor: pointer;
  transition: color .25s, border-color .25s;
}
.phone__playtoggle:hover { color: var(--gold); border-color: var(--gold); }
.phone__playtoggle:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
/* Carousel pagination dots — shown on mobile only (see the max-width:720px block) */
.phones__dots { display: none; }
.phones__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--rule); transition: background .25s, transform .25s; }
.phones__dot.is-on { background: var(--gold); transform: scale(1.3); }

/* Status bar inside the screen */
.psb {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 22px 6px;
  font-family: var(--sans);
  font-size: 10.5px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: 0.02em;
}
.psb__r { display: inline-flex; gap: 5px; align-items: center; }
.psb__r .bar { width: 14px; height: 8px; border-radius: 2px; border: 1px solid var(--text-soft); position: relative; }
.psb__r .bar::after { content: ''; position: absolute; inset: 1.5px 7px 1.5px 1.5px; background: var(--text-soft); border-radius: 1px; }

/* Inner screen scroll area */
.pscr { padding: 8px 18px 16px; flex: 1; overflow: hidden; }

/* Phone 1 — Rankings list */
.rk-head {
  display: flex; justify-content: space-between; align-items: baseline;
  padding-top: 14px; padding-bottom: 8px;
}
.rk-head .ttl {
  font-family: var(--serif); font-weight: 400; font-size: 22px;
  letter-spacing: -0.018em; color: var(--text);
}
.rk-head .ttl em { font-style: italic; color: var(--gold); }
.rk-head .meta {
  font-family: var(--mono); font-size: 9px; letter-spacing: 0.16em;
  color: var(--text-mute); text-transform: uppercase;
}
.rk-chips {
  display: flex; gap: 6px; padding: 6px 0 10px; overflow: hidden; flex-wrap: wrap;
}
.rk-chip {
  font-family: var(--sans); font-size: 9.5px; font-weight: 500;
  padding: 5px 9px; border-radius: 999px;
  border: 1px solid var(--divider); color: var(--text-soft);
  white-space: nowrap;
}
.rk-chip.is-on { color: var(--gold); border-color: var(--gold); }
.rk-row {
  display: grid;
  grid-template-columns: 22px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 10px 0;
  border-top: 1px solid var(--divider);
}
.rk-row:first-of-type { border-top: 0; }
.rk-row .n {
  font-family: var(--mono); font-size: 11px; font-weight: 500;
  color: var(--text-mute); letter-spacing: 0.04em;
}
.rk-row .n.is-1 { color: var(--gold); font-weight: 600; }
.rk-row .name {
  font-family: var(--serif); font-weight: 400; font-size: 13px;
  color: var(--text); line-height: 1.3;
  white-space: normal; overflow-wrap: anywhere;
}
.rk-row .name .where {
  display: block;
  font-family: var(--sans); font-size: 9.5px; color: var(--text-mute);
  margin-top: 2px; letter-spacing: 0.02em;
}
.rk-row .score {
  font-family: var(--mono); font-weight: 600; font-size: 12px;
  color: var(--gold); letter-spacing: 0.04em;
}
.rk-lead {
  display: grid; grid-template-columns: 56px 1fr auto;
  gap: 12px; align-items: center;
  padding: 12px 12px 12px 0;
  margin-bottom: 8px;
  position: relative;
}
.rk-lead::before {
  content: '';
  position: absolute; inset: 0 -18px 0 -18px;
  background: linear-gradient(180deg, rgba(221, 208, 170, 0.06), rgba(221, 208, 170, 0.0));
  border-bottom: 1px solid var(--gold);
  border-top: 1px solid var(--gold);
  opacity: 0.6;
  z-index: 0;
}
.rk-lead > * { position: relative; z-index: 1; }
.rk-lead .roman {
  font-family: var(--serif); font-weight: 300; font-style: italic;
  font-size: 38px; color: var(--gold); line-height: 1; text-align: right;
  padding-right: 4px;
}
.rk-lead .lead-name {
  font-family: var(--serif); font-weight: 400; font-size: 15px;
  color: var(--text); line-height: 1.15;
}
.rk-lead .lead-where {
  margin-top: 4px; font-family: var(--sans); font-size: 10px;
  color: var(--text-mute); letter-spacing: 0.04em;
}
.rk-lead .lead-score {
  font-family: var(--mono); font-weight: 700; font-size: 16px;
  color: var(--gold);
}

/* Phone 2 — Tonight verdict */
.tn-wrap {
  flex: 1;
  display: flex;
  flex-direction: column;
  padding: 6px 16px 18px;
}
.tn-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 8px 0 14px;
}
.tn-head .e {
  font-family: var(--sans); font-size: 9.5px; font-weight: 600;
  letter-spacing: 0.22em; text-transform: uppercase; color: var(--gold);
  display: inline-flex; align-items: center; gap: 6px;
}
.tn-head .e .live {
  width: 5px; height: 5px; border-radius: 50%; background: var(--gold);
  animation: emberPulse 2.4s ease-in-out infinite;
}
.tn-head .t {
  font-family: var(--mono); font-size: 9.5px;
  letter-spacing: 0.16em; color: var(--text-mute); text-transform: uppercase;
}
.tn-card {
  position: relative;
  border: 1px solid var(--gold);
  border-radius: 6px;
  padding: 14px 14px 12px;
  background:
    linear-gradient(180deg, rgba(221,208,170,0.05) 0%, transparent 60%),
    var(--bg);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.tn-card--out { /* default — Out is the headline */ }
.tn-card--in {
  border-color: var(--divider);
  background: var(--bg-lift);
  opacity: 0.96;
}

/* Tag + N° header row inside each card */
.tn-card__header {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 2px;
}
.tn-card__tag {
  font-family: var(--mono);
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--bg);
  background: var(--gold);
  padding: 3px 8px 2px;
  border-radius: 2px;
  line-height: 1.2;
}
.tn-card__tag--in {
  background: transparent;
  color: var(--gold-deep);
  border: 1px solid var(--gold-deep);
  padding: 2px 7px 1px;
}
.tn-card__num {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}

/* Connector between Out and In cards — a quiet "or" */
.tn-or {
  position: relative;
  text-align: center;
  margin: 4px 0;
}
.tn-or::before {
  content: "";
  position: absolute;
  left: 12%;
  right: 12%;
  top: 50%;
  height: 1px;
  background: var(--divider);
}
.tn-or span {
  position: relative;
  display: inline-block;
  padding: 0 10px;
  background: var(--card);
  font-family: var(--serif);
  font-style: italic;
  font-size: 11px;
  color: var(--text-mute);
}

/* Subordinate sizing on the In card so Out reads as primary */
.tn-card--in .tn-title { font-size: 18px; }
.tn-card--in .tn-stats .v { color: var(--text-soft); }

/* Spare a legacy fallback class for any old markup */
.tn-card--reset-flex {
  flex: 1;
  border: 1px solid var(--gold);
  border-radius: 6px;
  padding: 14px;
  background:
    linear-gradient(180deg, rgba(221,208,170,0.05) 0%, transparent 50%),
    var(--bg);
  display: flex;
  flex-direction: column;
}
.tn-plate {
  aspect-ratio: 4 / 3;
  border-radius: 3px;
  background:
    repeating-linear-gradient(135deg, rgba(221,208,170,0.05) 0 14px, rgba(221,208,170,0.09) 14px 15px),
    radial-gradient(120% 80% at 35% 30%, #1f1a13, #0c0a07);
  border: 1px solid var(--divider);
  margin-bottom: 14px;
  position: relative;
}
.tn-plate::after {
  content: 'PLATE';
  position: absolute; bottom: 6px; right: 8px;
  font-family: var(--mono); font-size: 8px; letter-spacing: 0.18em; color: var(--text-mute);
}
.tn-eyebrow {
  font-family: var(--mono); font-size: 9px; letter-spacing: 0.2em;
  color: var(--text-mute); text-transform: uppercase;
}
.tn-title {
  margin-top: 6px;
  font-family: var(--serif); font-weight: 400; font-size: 21px;
  letter-spacing: -0.015em; line-height: 1.08; color: var(--text);
}
.tn-title em { font-style: italic; font-weight: 300; color: var(--gold); }
.tn-where {
  margin-top: 6px;
  font-family: var(--serif); font-weight: 300; font-style: italic;
  font-size: 12px; color: var(--text-soft);
}
.tn-stats {
  margin-top: 12px;
  display: grid; grid-template-columns: 1fr 1fr 1fr;
  gap: 6px;
  border-top: 1px solid var(--divider);
  padding-top: 10px;
}
.tn-stats .k { font-family: var(--mono); font-size: 8px; letter-spacing: 0.18em; color: var(--text-mute); text-transform: uppercase; }
.tn-stats .v { font-family: var(--serif); font-size: 14px; color: var(--gold); margin-top: 2px; font-weight: 500; }
.tn-actions {
  display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
  margin-top: 12px;
}
.tn-btn {
  padding: 9px 0; text-align: center;
  font-family: var(--sans); font-size: 10.5px; font-weight: 600;
  letter-spacing: 0.14em; text-transform: uppercase;
  border-radius: 3px;
}
.tn-btn--primary { background: var(--gold); color: var(--bg); }
.tn-btn--ghost { border: 1px solid var(--gold); color: var(--gold); }

/* Phone 3 — Dish detail (magazine) */
.dd-cover {
  aspect-ratio: 4 / 4;
  background:
    repeating-linear-gradient(125deg, rgba(221,208,170,0.06) 0 16px, rgba(221,208,170,0.10) 16px 17px),
    radial-gradient(120% 80% at 30% 30%, #221c14, #0b0907);
  position: relative;
  overflow: hidden;
}
.dd-cover::before {
  content: 'COVER · PLATE';
  position: absolute; top: 14px; left: 14px;
  font-family: var(--mono); font-size: 8.5px; letter-spacing: 0.2em; color: var(--text-mute);
}
.dd-cover::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 50%, rgba(13,12,9,0.92));
  pointer-events: none;
}
.dd-coverhed {
  position: absolute;
  bottom: 14px; left: 14px; right: 14px;
  font-family: var(--serif); font-weight: 300; font-size: 22px;
  letter-spacing: -0.018em; line-height: 1.05;
  color: var(--text); z-index: 1;
}
.dd-coverhed em { font-style: italic; color: var(--gold); }
.dd-body { padding: 16px 18px 10px; flex: 1; }
.dd-by {
  font-family: var(--mono); font-size: 9px; letter-spacing: 0.18em;
  text-transform: uppercase; color: var(--text-mute); margin-bottom: 8px;
}
.dd-by .gold { color: var(--gold); }
.dd-lede {
  font-family: var(--serif); font-weight: 300; font-size: 12.5px;
  line-height: 1.5; color: var(--text-soft);
}
.dd-lede::first-letter {
  font-family: var(--serif); font-weight: 400;
  font-size: 3em; line-height: 0.85; float: left;
  padding: 0.05em 0.1em 0 0; color: var(--gold);
}
.dd-scores {
  margin-top: 12px;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 4px;
  border-top: 1px solid var(--divider);
  padding-top: 10px;
}
.dd-scores .k {
  font-family: var(--mono); font-size: 8px; letter-spacing: 0.16em;
  color: var(--text-mute); text-transform: uppercase;
}
.dd-scores .v {
  font-family: var(--mono); font-weight: 600; font-size: 13px;
  color: var(--gold); margin-top: 2px;
}

/* ============================================================
   Lifetime Priority — opening soon
   ============================================================ */
.lifetime {
  position: relative;
  overflow: hidden;
}
.lifetime__inner {
  border: 1px solid var(--divider);
  border-radius: 6px;
  padding: clamp(36px, 5vw, 64px);
  background:
    radial-gradient(80% 100% at 100% 0%, rgba(221, 208, 170, 0.06), transparent 60%),
    linear-gradient(180deg, var(--card), var(--bg));
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: clamp(28px, 4vw, 56px);
  align-items: center;
  position: relative;
}
.lifetime__inner::before {
  content: '';
  position: absolute;
  top: -1px; left: 0;
  width: 88px;
  border-top: 1px solid var(--gold);
}
@media (max-width: 880px) { .lifetime__inner { grid-template-columns: 1fr; } }

.lifetime__hed {
  font-family: var(--serif); font-weight: 300;
  font-size: clamp(36px, 5vw, 56px);
  line-height: 1.02; letter-spacing: -0.028em;
  color: var(--text); margin: 14px 0 0;
  text-wrap: balance;
}
.lifetime__hed em { font-style: italic; color: var(--gold); font-weight: 300; }
.lifetime__sub {
  margin-top: 22px; max-width: 540px;
  font-family: var(--serif); font-weight: 300; font-style: italic;
  font-size: 20px; line-height: 1.55; color: var(--text-soft);
}
.lifetime__sub + .lifetime__sub { margin-top: 14px; }
.lifetime__meta {
  margin-top: 28px; display: flex; gap: 28px; flex-wrap: wrap;
  border-top: 1px solid var(--divider); padding-top: 22px;
}
.lifetime__meta .item .k {
  display: block;
  font-family: var(--mono); font-size: 9.5px; letter-spacing: 0.2em;
  text-transform: uppercase; color: var(--text-mute); margin-bottom: 6px;
}
.lifetime__meta .item .v {
  font-family: var(--serif); font-weight: 400; font-size: 18px;
  color: var(--text); letter-spacing: -0.01em;
}
.lifetime__meta .item .v em { color: var(--gold); font-style: italic; font-weight: 300; }

/* Form */
.reserve {
  background: var(--bg-lift);
  border: 1px solid var(--divider);
  border-radius: 6px;
  padding: 28px;
  position: relative;
}
.reserve::before {
  content: '';
  position: absolute; top: -1px; left: 24px;
  width: 36px; border-top: 1px solid var(--gold);
}
.reserve__label {
  font-family: var(--sans); font-size: 10.5px; font-weight: 600;
  letter-spacing: 0.24em; text-transform: uppercase; color: var(--gold);
  margin-bottom: 4px;
}
.reserve__title {
  font-family: var(--serif); font-weight: 400; font-size: 22px;
  letter-spacing: -0.014em; color: var(--text); margin-bottom: 18px;
}
.reserve__field {
  display: flex;
  border-bottom: 1px solid var(--divider);
  padding-bottom: 10px;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
  transition: border-color 0.3s ease;
}
.reserve__field:focus-within { border-bottom-color: var(--gold); }
.reserve__field input[type="email"] {
  flex: 1;
  background: transparent;
  border: 0;
  outline: 0;
  font-family: var(--serif); font-size: 17px; font-weight: 300;
  color: var(--text);
  padding: 8px 0;
}
/* 2026-07-15 (B-027): the `outline: 0` above has specificity (0,2,1), which
   BEATS the global `:focus-visible` rule (0,1,0) — so this field had no
   keyboard focus indicator in any state. The site publishes a WCAG 2.1 AA
   claim and this is the Lifetime conversion form, so 2.4.7 Focus Visible is
   not optional here. Restated at (0,3,1) so it actually wins. */
.reserve__field input[type="email"]:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
  border-radius: 2px;
}
.reserve__field input::placeholder { color: var(--text-mute); font-style: italic; }
.reserve__submit {
  background: transparent; border: 0; padding: 0;
  font-family: var(--sans); font-size: 11px; font-weight: 600;
  letter-spacing: 0.22em; text-transform: uppercase;
  color: var(--gold);
  display: inline-flex; align-items: center; gap: 8px;
  transition: gap 0.25s ease;
}
.reserve__submit:hover { gap: 14px; }
.reserve__submit::after { content: '→'; color: var(--gold); font-style: normal; }
.reserve__small {
  font-family: var(--serif); font-style: italic; font-weight: 300;
  font-size: 13.5px; color: var(--text-mute); line-height: 1.5;
}
.reserve__small .gold { color: var(--gold); font-style: normal; font-weight: 400; }
.reserve.is-sent .reserve__field,
.reserve.is-sent .reserve__small { display: none; }
.reserve__thanks {
  display: none;
  font-family: var(--serif); font-weight: 300;
  font-size: 18px; line-height: 1.4; color: var(--text);
  padding: 20px 0;
}
.reserve__thanks em { font-style: italic; color: var(--gold); }
.reserve.is-sent .reserve__thanks { display: block; }

/* ----- Masthead aside (very small editorial team) ------------ */
.masthead-note {
  margin-top: 32px;
  padding: 22px 24px;
  border-left: 1px solid var(--gold);
  background: rgba(221,208,170,0.03);
  font-family: var(--serif); font-style: italic; font-weight: 300;
  font-size: 16px; line-height: 1.6; color: var(--text-soft);
  max-width: 600px;
}
.masthead-note strong {
  display: block;
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  font-size: 10.5px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 10px;
}

/* ----- Print -------------------------------------------------- */
@media print {
  .topbar, .footer, .cta-row { display: none !important; }
  body { background: #fff; color: #000; }
}

/* ============================================================ */
/* THE ENGINE — methodology section (added 2026-05-22)          */
/* ============================================================ */

.engine-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(32px, 5vw, 64px);
  align-items: start;
  margin-top: clamp(24px, 4vw, 48px);
}

@media (max-width: 880px) {
  .engine-grid { grid-template-columns: 1fr; gap: 32px; }
}

.engine-prose {
  font-family: var(--serif);
  font-size: clamp(18px, 1.8vw, 20px);
  line-height: 1.7;
  color: var(--text-soft);
}

.engine-prose p { margin: 0 0 18px 0; }
.engine-prose p:last-child { margin-bottom: 0; }
.engine-prose strong { color: var(--text); font-weight: 500; }

/* The formula card — restrained card with monospace math */
.engine-formula {
  border: 1px solid var(--divider);
  background: rgba(255, 255, 255, 0.02);
  padding: clamp(24px, 3vw, 36px);
  border-radius: 2px;
}

.engine-formula__label {
  margin-bottom: 20px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--divider);
}

.engine-formula__math {
  margin-bottom: 28px;
}

.engine-formula__expr {
  font-family: var(--mono);
  font-size: clamp(13px, 1.3vw, 15px);
  font-weight: 500;
  line-height: 1.5;
  color: var(--gold);
  padding: 18px 16px;
  background: rgba(0, 0, 0, 0.35);
  border-radius: 2px;
  word-break: break-word;
  text-align: center;
  letter-spacing: -0.01em;
  margin-bottom: 14px;
}

.engine-formula__where {
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.6;
  color: var(--text-mute);
  font-style: italic;
}

.engine-formula__where em {
  font-family: var(--mono);
  font-style: normal;
  color: var(--gold);
  font-weight: 500;
  letter-spacing: -0.01em;
}

.engine-states {
  display: flex;
  flex-direction: column;
  gap: 0;
  border-top: 1px solid var(--divider);
  border-bottom: 1px solid var(--divider);
  margin-bottom: 18px;
}

.engine-state {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  padding: 14px 0;
  gap: 16px;
  border-bottom: 1px solid var(--divider);
}

.engine-state:last-child { border-bottom: none; }

.engine-state__n {
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--gold);
  white-space: nowrap;
  flex-shrink: 0;
}

.engine-state__label {
  font-family: var(--serif);
  font-size: 14px;
  font-style: italic;
  color: var(--text-soft);
  text-align: right;
}

.engine-formula__foot {
  font-family: var(--serif);
  font-size: 13px;
  line-height: 1.6;
  color: var(--text-mute);
  margin: 0;
}

.engine-formula__foot em {
  font-style: italic;
  color: var(--text-mute);
}

/* ============================================================ */
/* INSIDE THE APP page — feature deep-dive (added 2026-05-22)   */
/* ============================================================ */

.inside-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(32px, 5vw, 80px);
  align-items: center;
  margin-top: clamp(24px, 4vw, 48px);
}
/* Grid blowout guard — without this, a grid item's default min-width:auto
   can force its track (and the whole row/page) wider than the viewport if
   any descendant resists shrinking. Same pattern already used elsewhere in
   this file (.presskit__body, .playground__mech, .save-flow__shell > *).
   Part of the "phone slides off screen on mobile" fix (2026-07-08). */
.inside-row__copy,
.inside-row__visual {
  min-width: 0;
}

@media (max-width: 880px) {
  .inside-row { grid-template-columns: 1fr; gap: 40px; }
  .inside-row--reverse .inside-row__visual { order: -1; }
}

.inside-row--reverse .inside-row__visual {
  order: 1;
}
.inside-row--reverse .inside-row__copy {
  order: 2;
}

@media (max-width: 880px) {
  .inside-row--reverse .inside-row__visual { order: 0; }
  .inside-row--reverse .inside-row__copy { order: 1; }
}

.inside-row__copy .eyebrow {
  margin-bottom: 14px;
  display: block;
}

.inside-row__copy .section__title {
  margin-bottom: 16px;
  font-size: clamp(28px, 3.4vw, 40px);
  line-height: 1.15;
}

.inside-row__lede {
  font-family: var(--serif);
  font-size: clamp(20px, 1.9vw, 23px);
  font-style: italic;
  font-weight: 300;
  line-height: 1.5;
  color: var(--text);
  margin: 0 0 22px 0;
  max-width: 600px;
}

.inside-row__body {
  font-family: var(--serif);
  font-size: clamp(19px, 1.7vw, 21px);
  font-weight: 400;
  line-height: 1.7;
  color: var(--text-soft);
  margin: 0 0 18px 0;
  max-width: 600px;
}
.inside-row__body + .inside-row__body { margin-top: 0; }

.inside-row__chiprow {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 22px;
}

.inside-chip {
  font-family: var(--sans);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 7px 14px;
  border: 1px solid var(--divider);
  border-radius: 999px;
  background: transparent;
  color: var(--text-mute);
  transition: background-color 220ms ease, color 220ms ease,
              border-color 220ms ease, transform 120ms ease;
}
/* Interactive states — .inside-chip is now a real <button data-filter>       */
/* (2026-07-03, part of the Inside-app chip interactivity task). Reuses the   */
/* same gold/health-green toggle language as the filters.html playground so   */
/* it reads as one filter system across the site, not a one-off.             */
.inside-chip:hover { color: var(--text); border-color: var(--gold-deep); }
.inside-chip:active { transform: scale(0.97); }
.inside-chip.is-on {
  background: var(--gold);
  color: var(--bg);
  border-color: var(--gold);
  box-shadow: 0 0 12px var(--gold-glow);
}
.inside-chip.is-on:hover { background: var(--gold-deep); }
.inside-chip--health.is-on {
  background: var(--status-go);
  border-color: var(--status-go);
  box-shadow: 0 0 12px var(--status-go-glow);
}
.inside-chip--health.is-on:hover { background: rgba(127, 176, 105, 0.85); }

.inside-row__chiphint {
  margin-top: 14px;
  font-family: var(--sans);
  font-size: 12.5px;
  color: var(--text-mute);
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px 12px;
  min-height: 1.4em;
}
.inside-row__chiphint-text {
  opacity: 0;
  transition: opacity 220ms ease;
}
.inside-row__chiphint.is-active .inside-row__chiphint-text { opacity: 1; }

.inside-list {
  list-style: none;
  padding: 0;
  margin: 18px 0;
  max-width: 540px;
}

.inside-list li {
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 20px;
  align-items: baseline;
  font-family: var(--serif);
  font-size: clamp(17px, 1.7vw, 19px);
  font-weight: 400;
  line-height: 1.55;
  color: var(--text-soft);
  padding: 18px 0;
  border-bottom: 1px solid var(--divider);
}
.inside-list li:last-child { border-bottom: none; }
.inside-list li strong {
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gold);
  /* grid column 1 — fixed width, no inline-block needed */
}

@media (max-width: 560px) {
  .inside-list li {
    grid-template-columns: 1fr;
    gap: 4px;
    padding: 14px 0;
  }
}

.inline-link {
  color: var(--gold) !important;
  border-bottom: 1px solid var(--rule);
}

.phone--standalone {
  margin: 0 auto;
  /* Match the viewport-relative ceiling on .phone itself (2026-07-08) — this
     class is applied alongside .phone on every inside.html visual, so it
     must not reintroduce a static 375px floor that ignores the viewport. */
  max-width: min(375px, calc(100vw - 2 * var(--pad-x)));
}

/* The Hunt — phone interior */
.hunt-wrap {
  padding: 22px 18px 28px;
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.hunt-head {
  margin-bottom: 4px;
}
.hunt-eyebrow {
  font-family: var(--sans);
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 10px;
}
.hunt-title {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 400;
  line-height: 1.2;
  color: var(--text);
  margin: 0;
}
.hunt-title em {
  font-style: italic;
  color: var(--gold);
}
.hunt-pick {
  padding: 14px 0;
  border-top: 1px solid var(--divider);
}
.hunt-pick:last-child { border-bottom: 1px solid var(--divider); }
.hunt-pick__num {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.08em;
  color: var(--text-mute);
  margin-bottom: 6px;
}
.hunt-pick__title {
  font-family: var(--serif);
  font-size: 16px;
  color: var(--text);
  margin-bottom: 3px;
}
.hunt-pick__where {
  font-family: var(--serif);
  font-size: 13px;
  font-style: italic;
  color: var(--text-mute);
  margin-bottom: 8px;
}
.hunt-pick__why {
  font-family: var(--serif);
  font-size: 13px;
  font-style: italic;
  color: var(--gold);
  line-height: 1.4;
}

/* The Queue / On Deck — phone interior */
.queue-wrap {
  padding: 22px 18px 28px;
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.queue-head { margin-bottom: 6px; }
.queue-eyebrow {
  font-family: var(--sans);
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 10px;
}
.queue-title {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 400;
  line-height: 1.2;
  color: var(--text);
  margin: 0;
}
.queue-folder {
  padding: 14px 14px;
  border: 1px solid var(--divider);
  border-radius: 2px;
}
.queue-folder__title {
  font-family: var(--serif);
  font-size: 16px;
  color: var(--text);
  margin-bottom: 4px;
}
.queue-folder__count {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--text-mute);
}

/* The Tastemakers — phone interior */
.tm-wrap {
  padding: 22px 18px 28px;
  /* Was height:100% — fragile inside .phone__screen's column flex context
     (percentage height ignores the .psb status-bar sibling already
     consuming space above it, so it doesn't have a guaranteed size to
     round-trip against on every engine). .tn-wrap (the equivalent wrapper
     on the Tonight card) already uses flex:1 for exactly this reason —
     aligning tm-wrap to the same, more predictable pattern so its content
     reliably has the space it needs instead of being invisibly clipped by
     .phone__screen's overflow:hidden at the bottom. (2026-07-08) */
  flex: 1;
  min-height: 0;
}
.tm-head { margin-bottom: 14px; }
.tm-eyebrow {
  font-family: var(--sans);
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
}
.tm-card {
  padding-bottom: 18px;
  border-bottom: 1px solid var(--divider);
  margin-bottom: 18px;
}
.tm-avatar {
  width: 60px;
  height: 60px;
  background: linear-gradient(135deg, rgba(201, 169, 97, 0.4), rgba(201, 169, 97, 0.1));
  border: 1px solid var(--divider);
  border-radius: 50%;
  margin-bottom: 14px;
}
.tm-name {
  font-family: var(--serif);
  font-size: 19px;
  color: var(--text);
  margin-bottom: 4px;
}
.tm-badge {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--gold);
  font-weight: 500;
}
.tm-bio {
  font-family: var(--serif);
  font-size: 13px;
  font-style: italic;
  color: var(--text-mute);
  line-height: 1.4;
}
.tm-picks {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.tm-pick {
  font-family: var(--serif);
  font-size: 13px;
  color: var(--text-soft);
  line-height: 1.4;
}
.tm-pick em {
  font-style: italic;
  color: var(--gold);
}
.tm-foot {
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid var(--divider);
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}
.tm-foot__k {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.tm-foot__v {
  font-family: var(--serif);
  font-size: 12px;
  color: var(--text-soft);
  font-style: italic;
}

/* The Annual Edit — book mockup */
.annual-mock {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: clamp(30px, 5vw, 60px) 0;
}
.annual-mock__book {
  width: clamp(220px, 28vw, 280px);
  aspect-ratio: 3 / 4;
  background: linear-gradient(135deg, #1A1A1A 0%, #2A2622 100%);
  border: 1px solid var(--divider);
  position: relative;
  box-shadow: 0 30px 60px rgba(0, 0, 0, 0.5), 0 8px 20px rgba(0, 0, 0, 0.4);
  transform: perspective(900px) rotateY(-8deg) rotateX(2deg);
  transition: transform 0.6s ease;
  display: flex;
  align-items: center;
  justify-content: center;
}
.annual-mock__book:hover {
  transform: perspective(900px) rotateY(-4deg) rotateX(1deg);
}
.annual-mock__cover {
  text-align: center;
  padding: 32px 24px;
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.annual-mock__brand {
  font-family: var(--serif);
  font-size: 28px;
  font-weight: 400;
  color: var(--text);
  letter-spacing: -0.02em;
}
.annual-mock__brand em {
  font-style: italic;
  font-weight: 300;
  color: var(--text-mute);
}
.annual-mock__line {
  font-family: var(--serif);
  font-style: italic;
  font-size: 15px;
  color: var(--gold);
}
.annual-mock__year {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--text-mute);
  text-transform: uppercase;
  padding: 8px 0;
  border-top: 1px solid rgba(201, 169, 97, 0.3);
  border-bottom: 1px solid rgba(201, 169, 97, 0.3);
}
.annual-mock__sub {
  font-family: var(--serif);
  font-style: italic;
  font-size: 12px;
  color: var(--text-mute);
}
.annual-mock__caption {
  margin-top: 28px;
}

/* ============================================================ */
/* Title asterisk + prose footnote (added 2026-05-23)           */
/* ============================================================ */

.title-asterisk {
  display: inline-block;
  font-family: var(--mono);
  font-style: normal;
  font-weight: 500;
  font-size: 0.55em;
  vertical-align: super;
  margin-left: 4px;
  color: var(--gold);
  text-decoration: none;
  letter-spacing: 0;
  transition: opacity 0.2s ease;
  opacity: 0.85;
}
.title-asterisk:hover {
  opacity: 1;
}

.prose-footnote {
  margin-top: 28px !important;
  padding-top: 18px;
  border-top: 1px solid var(--divider);
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px !important;
  line-height: 1.6 !important;
  color: var(--text-mute) !important;
}
.prose-footnote .prose-footnote__star {
  font-family: var(--mono);
  font-style: normal;
  color: var(--gold);
  font-weight: 500;
  margin-right: 4px;
}
.prose-footnote .inline-link {
  color: var(--gold) !important;
  border-bottom: 1px solid var(--rule);
}

/* ============================================================ */
/* DICTIONARY ANCHOR — the BEAT (n.) (added 2026-05-23)         */
/* ============================================================ */

.dict-anchor {
  max-width: 720px;
  margin: 0 auto clamp(40px, 6vw, 80px) 0;
  padding: clamp(22px, 3vw, 32px);
  border: 1px solid var(--divider);
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.015);
}

.dict-anchor__head {
  display: flex;
  align-items: baseline;
  gap: 16px;
  flex-wrap: wrap;
  padding-bottom: 14px;
  margin-bottom: 14px;
  border-bottom: 1px solid var(--divider);
}

.dict-anchor__term {
  font-family: var(--serif);
  font-size: clamp(26px, 3vw, 34px);
  font-weight: 400;
  color: var(--text);
  letter-spacing: -0.02em;
}
.dict-anchor__term em {
  font-style: italic;
  font-weight: 300;
  color: var(--text-mute);
}

.dict-anchor__pos {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 400;
  color: var(--text-mute);
  letter-spacing: 0.04em;
}

.dict-anchor__defs {
  list-style: none;
  padding: 0;
  margin: 0 0 16px 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.dict-anchor__defs li {
  font-family: var(--serif);
  font-size: clamp(17px, 1.6vw, 19px);
  font-weight: 400;
  line-height: 1.55;
  color: var(--text-soft);
  display: flex;
  gap: 10px;
  align-items: baseline;
}

.dict-anchor__defs em {
  font-style: italic;
  font-size: 0.92em;
  color: var(--text-mute);
  font-weight: 400;
}

.dict-num {
  font-family: var(--mono);
  font-style: normal;
  font-size: 11px;
  font-weight: 500;
  color: var(--gold);
  letter-spacing: 0;
  flex-shrink: 0;
  padding-top: 2px;
}

.dict-asterisk {
  font-family: var(--mono);
  color: var(--gold);
  font-weight: 500;
  font-size: 0.6em;
  vertical-align: super;
  margin-left: 1px;
}

.dict-anchor__foot {
  padding-top: 14px;
  border-top: 1px solid var(--divider);
  font-family: var(--serif);
  font-style: italic;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--text-mute);
  margin: 0;
}

.dict-anchor__star {
  font-family: var(--mono);
  font-style: normal;
  color: var(--gold);
  font-weight: 500;
  margin-right: 2px;
}

/* ============================================================ */
/* TIER BREAKDOWN — Free / Plus / Priority / Lifetime          */
/* ============================================================ */

.tiers {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(16px, 2vw, 24px);
  margin-top: clamp(24px, 4vw, 40px);
}

@media (max-width: 1080px) {
  .tiers { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 560px) {
  .tiers { grid-template-columns: 1fr; }
}

.tier {
  padding: clamp(22px, 2.5vw, 30px) clamp(20px, 2vw, 26px);
  border: 1px solid var(--divider);
  border-radius: 2px;
  display: flex;
  flex-direction: column;
  position: relative;
  background: rgba(255, 255, 255, 0.005);
}

.tier__rule {
  width: 32px;
  height: 1px;
  background: var(--text-mute);
  margin-bottom: 22px;
}
.tier__rule--accent {
  background: var(--gold);
  width: 48px;
  height: 2px;
}

.tier__label {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
  display: block;
  margin-bottom: 14px;
}

.tier__name {
  font-family: var(--serif);
  font-size: clamp(22px, 2.4vw, 28px);
  font-weight: 400;
  line-height: 1.15;
  color: var(--text);
  margin: 0 0 14px 0;
  letter-spacing: -0.01em;
}

.tier--accent .tier__name,
.tier--lifetime .tier__name {
  color: var(--gold);
}

/* Tier identity — italic gold persona anchor + a muted value-prop sub-line */
.tier__identity {
  font-family: var(--serif);
  font-size: 14.5px;
  line-height: 1.3;
  color: var(--text-mute);
  margin: -6px 0 18px;
  letter-spacing: 0;
}
.tier__identity em {
  font-style: italic;
  color: var(--gold);
  opacity: 0.85;
}
.tier__identity-sub {
  display: block;
  margin-top: 4px;
  font-size: 13px;
  font-style: normal;
  color: var(--text-mute);
  opacity: 0.9;
}
.tier--tastemaker .tier__identity em {
  color: var(--text);
}

.tier__body {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 15.5px;
  line-height: 1.6;
  color: var(--text-soft);
  margin: 0 0 auto 0;
  padding-bottom: 22px;
}

/* Bulleted variant of tier__body — same visual register, easier  */
/* to scan. Gold dot markers, hanging indent, generous line gap.   */
.tier__list {
  list-style: none;
  margin: 0 0 auto 0;
  padding: 0 0 22px 0;
  font-family: var(--serif);
  font-weight: 400;
  font-size: 16.5px;
  line-height: 1.5;
  color: var(--text-soft);
}
.tier__list li {
  position: relative;
  padding: 0 0 10px 18px;
}
.tier__list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.62em;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--gold);
  opacity: 0.85;
}
.tier__list li:last-child { padding-bottom: 0; }

/* Vote-weight tag — appears at the start of the weight bullet on  */
/* each tier card. Mono, mid-weight, gold for the strong tiers.    */
.tier__weight {
  font-family: var(--mono);
  font-size: 0.92em;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--gold-deep);
  margin-right: 0.32em;
}
.tier__weight--strong {
  color: var(--gold);
  text-shadow: 0 0 8px var(--gold-glow);
}
/* Accent tier (Priority) gets a brighter dot to echo its gold rule. */
.tier--accent .tier__list li::before,
.tier--lifetime .tier__list li::before {
  background: var(--gold);
  opacity: 1;
  box-shadow: 0 0 6px var(--gold-glow);
}

.tier__price {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-mute);
  padding-top: 16px;
  border-top: 1px solid var(--divider);
}

.tier--lifetime .tier__price,
.tier--accent .tier__price {
  color: var(--gold);
}

/* ============================================================ */
/* Tier billing toggle (Monthly / Annual) — added 2026-05-26    */
/* Segmented control above .tiers; flips data-billing which     */
/* swaps the visible price span on Plus + Priority cards.       */
/* ============================================================ */
.tier-toggle {
  display: inline-flex;
  margin: 0 auto clamp(24px, 4vw, 36px);
  padding: 4px;
  border: 1px solid var(--rule);
  border-radius: 999px;
  background: var(--surface, transparent);
  gap: 2px;
  align-self: center;
}

/* Center the toggle within its parent — section__head has its own flow */
.section__head + .tier-toggle,
.tier-toggle {
  display: flex;
  width: fit-content;
  margin-left: auto;
  margin-right: auto;
}

/* ============================================================ */
/* Three Pillars — what makes theBEAT different (2026-05-26)    */
/* Marketing trinity: Filters / Make It Together / Birthday Nudge */
/* High-conversion home-page section. Editorial card treatment  */
/* with subtle per-pillar accents (sage / gold / cream).        */
/* ============================================================ */
.pillars {
  position: relative;
}

/* ===================================================
 * Query-stack demo — the "five constraints in one query"
 * marketing moment on index.html (added 2026-05-30).
 * Sits between Three Pillars and the mid-scroll Lifetime CTA.
 * Chip chain (italic serif) + result + contrast paragraph.
 * =================================================== */
.query-stack {
  background: linear-gradient(180deg, transparent 0%, rgba(201, 183, 130, 0.025) 50%, transparent 100%);
}
.query-stack__chain {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: clamp(28px, 4vw, 44px) auto clamp(20px, 2.4vw, 28px);
  padding: clamp(22px, 3vw, 34px) clamp(16px, 3vw, 28px);
  border-top: 1px solid var(--divider);
  border-bottom: 1px solid var(--divider);
  max-width: 720px;
}
.query-stack__chip {
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(15.5px, 1.7vw, 18px);
  line-height: 1;
  color: var(--text);
  background: rgba(201, 183, 130, 0.06);
  border: 1px solid var(--gold);
  border-radius: 999px;
  padding: 9px 18px;
  white-space: nowrap;
  transition: background 0.18s ease, transform 0.18s ease;
}
.query-stack__chip:hover {
  background: rgba(201, 183, 130, 0.14);
  transform: translateY(-1px);
}
.query-stack__plus {
  font-family: var(--mono);
  font-size: 13px;
  color: var(--text-mute);
  letter-spacing: 0.10em;
  padding: 0 2px;
}
.query-stack__result {
  text-align: center;
  font-family: var(--serif);
  font-size: clamp(19px, 2.4vw, 24px);
  line-height: 1.35;
  margin: 0 auto clamp(20px, 2.5vw, 28px);
  max-width: 540px;
  color: var(--text);
}
.query-stack__arrow {
  display: block;
  font-family: var(--mono);
  font-size: 20px;
  color: var(--gold);
  margin: 0 0 12px;
  opacity: 0.7;
  letter-spacing: 0;
}
.query-stack__contrast {
  font-family: var(--serif);
  font-style: italic;
  font-size: 15.5px;
  line-height: 1.65;
  color: var(--text-mute);
  text-align: center;
  max-width: 600px;
  margin: 0 auto;
}
.query-stack__cta {
  text-align: center;
  margin: clamp(24px, 3vw, 36px) 0 0;
}
.query-stack__cta-link {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gold);
  text-decoration: none;
  border-bottom: 1px solid var(--gold);
  padding-bottom: 4px;
  transition: opacity 0.18s, transform 0.18s;
  display: inline-block;
}
.query-stack__cta-link:hover {
  opacity: 0.82;
  transform: translateY(-1px);
}
@media (max-width: 640px) {
  .query-stack__chain { gap: 7px; padding: 18px 14px; }
  .query-stack__chip { font-size: 14.5px; padding: 7px 14px; }
  .query-stack__plus { font-size: 12px; padding: 0; }
}

.pillars__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(24px, 3vw, 40px);
  margin-top: clamp(32px, 5vw, 56px);
}

@media (max-width: 880px) {
  .pillars__grid { grid-template-columns: 1fr; }
}

.pillar {
  position: relative;
  padding: clamp(28px, 3vw, 40px) clamp(24px, 2.5vw, 32px);
  border: 1px solid var(--rule);
  border-radius: 6px;
  background: var(--surface, transparent);
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: border-color 240ms ease, transform 240ms ease;
}

.pillar:hover {
  border-color: var(--gold);
  transform: translateY(-2px);
}

/* Per-pillar accent stripe at top */
.pillar::before {
  content: '';
  position: absolute;
  top: -1px;
  left: -1px;
  right: -1px;
  height: 3px;
  border-radius: 6px 6px 0 0;
  background: var(--gold);
  opacity: 0.6;
  transition: opacity 240ms ease;
}

.pillar:hover::before { opacity: 1; }

/* Filters pillar — sage green accent (matches health system) */
.pillar--filters::before {
  background: var(--health, #7a9a6e);
}

/* Make It Together pillar — gold accent (default, hosting/premium) */
.pillar--host::before {
  background: var(--gold);
}

/* Birthday pillar — warm cream / muted accent (emotional/editorial) */
.pillar--birthday::before {
  background: var(--text-mute);
}

.pillar__num {
  font-family: var(--serif);
  font-style: italic;
  font-size: 38px;
  font-weight: 300;
  line-height: 1;
  color: var(--gold);
  letter-spacing: -0.02em;
  display: block;
  margin-bottom: 4px;
}

.pillar--filters .pillar__num { color: var(--health, #7a9a6e); }
.pillar--birthday .pillar__num { color: var(--text-mute); }

.pillar__eyebrow {
  display: inline-block;
  margin-bottom: 6px;
}

.pillar__title {
  font-family: var(--serif);
  font-size: clamp(22px, 2.2vw, 26px);
  font-weight: 400;
  line-height: 1.25;
  letter-spacing: -0.015em;
  color: var(--text);
  margin: 0 0 4px;
}

.pillar__title em {
  font-style: italic;
  color: var(--gold);
}

.pillar--filters .pillar__title em { color: var(--health, #7a9a6e); }

.pillar__body {
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.6;
  color: var(--text);
  margin: 0;
  flex: 1;
}

.pillar__body .highlight {
  background-size: 100% 0.35em;
  background-position: 0 88%;
}

.pillar__link {
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--gold);
  text-decoration: none;
  margin-top: 12px;
  padding-top: 16px;
  border-top: 1px solid var(--divider);
  display: inline-block;
  transition: color 200ms ease, letter-spacing 240ms ease;
}

.pillar__link:hover {
  color: var(--gold-deep, var(--gold));
  letter-spacing: 0.14em;
}

.pillar--filters .pillar__link {
  color: var(--health, #7a9a6e);
}

.pillar--filters .pillar__link:hover {
  color: var(--health-deep, #5d7d54);
}

/* ============================================================ */
/* /host.html — Make It At Home page styles (2026-05-26)        */
/* ============================================================ */
.host-steps {
  list-style: none;
  padding: 0;
  margin: clamp(24px, 4vw, 40px) 0 0;
  display: flex;
  flex-direction: column;
  gap: clamp(28px, 4vw, 44px);
}

.host-step {
  display: grid;
  grid-template-columns: clamp(56px, 6vw, 72px) 1fr;
  gap: clamp(16px, 2vw, 24px);
  align-items: start;
}

.host-step__n {
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(40px, 4.5vw, 52px);
  font-weight: 300;
  line-height: 1;
  color: var(--gold);
  letter-spacing: -0.02em;
}

.host-step__title {
  font-family: var(--serif);
  font-size: clamp(22px, 2.2vw, 26px);
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: -0.015em;
  color: var(--text);
  margin: 0 0 10px;
}

.host-step__body p {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.65;
  color: var(--text);
  margin: 0;
}

.host-step__body code {
  font-family: var(--mono);
  font-size: 14px;
  background: var(--surface, transparent);
  border: 1px solid var(--divider);
  padding: 1px 6px;
  border-radius: 3px;
  color: var(--gold);
}

/* The wedge — the central anti-Partiful claim */
.host-wedge {
  text-align: center;
  padding: clamp(24px, 4vw, 40px) 0;
}

.host-wedge__claim {
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(22px, 2.6vw, 30px);
  font-weight: 400;
  line-height: 1.45;
  color: var(--text);
  margin: 0;
  max-width: 720px;
  margin-left: auto;
  margin-right: auto;
}

.host-wedge__claim em {
  font-style: italic;
  color: var(--gold);
}

/* Math compare — wrong vs right scaling */
.math-compare {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(16px, 2vw, 24px);
  margin-top: clamp(28px, 4vw, 40px);
}

@media (max-width: 720px) {
  .math-compare { grid-template-columns: 1fr; }
}

.math-compare__col {
  padding: clamp(20px, 2.5vw, 28px);
  border: 1px solid var(--rule);
  border-radius: 4px;
  position: relative;
}

.math-compare__col--wrong {
  opacity: 0.78;
}

.math-compare__col--right {
  border-color: var(--gold);
}

.math-compare__col--right::before {
  content: '';
  position: absolute;
  top: -1px;
  left: -1px;
  right: -1px;
  height: 2px;
  background: var(--gold);
  border-radius: 4px 4px 0 0;
}

.math-compare__label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-mute);
  display: block;
  margin-bottom: 14px;
}

.math-compare__col--right .math-compare__label {
  color: var(--gold);
}

.math-compare__expr {
  font-family: var(--serif);
  font-size: clamp(22px, 2.4vw, 28px);
  line-height: 1.3;
  color: var(--text);
  margin: 0 0 10px;
}

.math-compare__expr strong {
  font-weight: 500;
}

.math-compare__note {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--text-mute);
  margin: 0;
}

.math-source {
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.6;
  color: var(--text-mute);
  margin-top: 24px;
  max-width: 640px;
}

/* ===================================================
 * Make It Together — host.html live preview
 * Reads /data/at-home-recipes-free.json
 * Formula: passive + (active * scale^0.85)
 * =================================================== */
.calc {
  margin-top: clamp(24px, 3vw, 36px);
  border: 1px solid var(--divider);
  background: var(--panel);
  border-radius: 4px;
  overflow: hidden;
}
.calc__picker {
  display: flex;
  border-bottom: 1px solid var(--divider);
}
.calc__pick {
  flex: 1;
  background: transparent;
  border: 0;
  border-right: 1px solid var(--divider);
  padding: 18px 14px;
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-mute);
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  transition: background 0.18s, color 0.18s;
}
.calc__pick:last-child { border-right: 0; }
.calc__pick:hover { color: var(--text); background: rgba(201, 183, 130, 0.06); }
.calc__pick.is-on {
  color: var(--gold);
  background: rgba(201, 183, 130, 0.10);
}
.calc__pick.is-on .calc__pick-glyph {
  color: var(--gold);
  transform: translateY(-1px);
}
.calc__pick-glyph {
  width: 38px;
  height: 38px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--text-mute);
  transition: color 0.22s ease, transform 0.22s ease;
}
.calc__pick-glyph svg {
  width: 100%;
  height: 100%;
  display: block;
}
.calc__pick-name {
  font-weight: 500;
}

.calc__body {
  padding: clamp(20px, 3vw, 32px);
}
.calc__header {
  margin-bottom: clamp(20px, 2.5vw, 28px);
}
.calc__name {
  font-family: var(--serif);
  font-size: clamp(24px, 3.4vw, 32px);
  font-weight: 400;
  letter-spacing: -0.01em;
  color: var(--text);
  margin: 0 0 6px;
  line-height: 1.15;
}
.calc__inspired {
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.06em;
  color: var(--text-mute);
  text-transform: lowercase;
  margin: 0;
}

.calc__slider {
  padding: 18px 0;
  border-top: 1px solid var(--divider);
  border-bottom: 1px solid var(--divider);
  margin-bottom: clamp(20px, 2.5vw, 28px);
}
.calc__slider-label {
  display: block;
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-bottom: 12px;
}
.calc__slider-label strong {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 500;
  letter-spacing: 0;
  text-transform: none;
  color: var(--gold);
  font-style: italic;
  margin-left: 6px;
}
.calc__slider input[type=range] {
  width: 100%;
  -webkit-appearance: none;
  appearance: none;
  height: 2px;
  background: var(--divider);
  outline: none;
  margin: 6px 0 10px;
}
/* 2026-07-15 (B-027): same specificity trap as .reserve__field — the
   `outline: none` above is (0,2,1) and beats the global `:focus-visible`
   (0,1,0), leaving host.html's servings slider with no keyboard focus
   indicator. Restated at (0,3,1). */
.calc__slider input[type=range]:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 4px;
  border-radius: 2px;
}
.calc__slider input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--gold);
  cursor: pointer;
  border: 2px solid var(--panel);
  box-shadow: 0 0 0 1px var(--gold);
}
.calc__slider input[type=range]::-moz-range-thumb {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--gold);
  cursor: pointer;
  border: 2px solid var(--panel);
  box-shadow: 0 0 0 1px var(--gold);
}
.calc__slider-ticks {
  display: flex;
  justify-content: space-between;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  color: var(--text-mute);
}

.calc__stats {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 18px;
  margin-bottom: clamp(20px, 2.5vw, 28px);
  padding-bottom: clamp(20px, 2.5vw, 28px);
  border-bottom: 1px solid var(--divider);
}
@media (max-width: 640px) {
  .calc__stats { grid-template-columns: 1fr; gap: 14px; }
}
.calc__stat {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.calc__stat-label {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.calc__stat-value {
  font-family: var(--serif);
  font-size: clamp(22px, 2.8vw, 28px);
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--text);
  line-height: 1.1;
}
.calc__stat-value--strike {
  text-decoration: line-through;
  color: var(--text-mute);
}
.calc__stat-sub {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.04em;
  color: var(--text-mute);
}

.calc__cols {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: clamp(28px, 4vw, 48px);
  margin-bottom: clamp(20px, 2.5vw, 28px);
}
@media (max-width: 720px) {
  .calc__cols { grid-template-columns: 1fr; }
}
.calc__h4 {
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gold);
  margin: 0 0 12px;
  font-weight: 500;
}
.calc__list {
  list-style: none;
  padding: 0;
  margin: 0;
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.55;
  color: var(--text);
}
.calc__list li {
  padding: 8px 0;
  border-bottom: 1px dotted var(--divider);
}
.calc__list li:last-child { border-bottom: 0; }
.calc__list--steps {
  counter-reset: step;
}
.calc__list--steps li {
  counter-increment: step;
  position: relative;
  padding-left: 28px;
}
.calc__list--steps li::before {
  content: counter(step, decimal-leading-zero);
  position: absolute;
  left: 0;
  top: 9px;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  color: var(--gold);
}

.calc__foot {
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.04em;
  color: var(--text-mute);
  margin: 0;
  padding-top: 18px;
  border-top: 1px solid var(--divider);
  line-height: 1.6;
}
.calc__foot code {
  font-family: var(--mono);
  background: rgba(201, 183, 130, 0.08);
  padding: 2px 6px;
  border-radius: 2px;
  color: var(--gold);
  font-size: 11px;
}

/* Pricing teaser — what unlocks where */
.host-pricing {
  list-style: none;
  padding: 0;
  margin: clamp(20px, 3vw, 32px) 0 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.host-pricing li {
  display: grid;
  grid-template-columns: clamp(80px, 9vw, 110px) 1fr;
  gap: 20px;
  padding: 16px 0;
  border-bottom: 1px solid var(--divider);
  align-items: baseline;
}

.host-pricing li:last-child {
  border-bottom: 0;
}

.host-pricing__tier {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--gold);
  font-weight: 500;
}

.host-pricing__what {
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.55;
  color: var(--text);
}

/* ============================================================ */
/* Filter Constellation — mini interactive teaser (2026-05-26)  */
/* Two-column layout: mini constellation left, headline right.  */
/* Stacks on mobile.                                            */
/* ============================================================ */
.constellation-row {
  display: grid;
  grid-template-columns: 360px 1fr;
  gap: clamp(40px, 5vw, 72px);
  align-items: center;
  max-width: 1080px;
  margin: 0 auto;
}

@media (max-width: 880px) {
  .constellation-row {
    grid-template-columns: 1fr;
    gap: 32px;
  }
}

.constellation-copy {
  /* Override default section__head centering — this lives in a 2-col row */
}

.constellation-copy .section__title {
  margin-top: 12px;
}

.constellation {
  position: relative;
  width: 100%;
  max-width: 360px;
  aspect-ratio: 360 / 420;
  min-height: 380px;
}

@media (max-width: 880px) {
  .constellation {
    max-width: 380px;
    margin-left: auto;
    margin-right: auto;
  }
}

.constellation__lines {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

.constellation__lines line {
  stroke: var(--rule);
  stroke-width: 1;
  opacity: 0.5;
  transition: opacity 280ms ease;
}

.constellation:hover .constellation__lines line {
  opacity: 0.7;
}

.constellation__chip {
  position: absolute;
  transform: translate(-50%, -50%);
  padding: 6px 11px;
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  font-weight: 500;
  background: var(--bg);
  border: 1px solid var(--rule);
  border-radius: 999px;
  color: var(--text);
  cursor: pointer;
  transition: transform 220ms cubic-bezier(.4, 0, .2, 1),
              border-color 220ms ease,
              color 220ms ease,
              box-shadow 220ms ease;
  white-space: nowrap;
  z-index: 2;
}

.constellation__chip:hover,
.constellation__chip:focus-visible {
  transform: translate(-50%, -50%) scale(1.08);
  outline: none;
  z-index: 3;
}

/* Per-category accents — match the playground + brand system */
.constellation__chip--medical {
  color: var(--health, #7a9a6e);
  border-color: var(--health, #7a9a6e);
}
.constellation__chip--medical:hover,
.constellation__chip--medical:focus-visible {
  background: var(--health, #7a9a6e);
  color: var(--bg);
  box-shadow: 0 0 16px -2px rgba(122, 154, 110, 0.55);
}

.constellation__chip--religious {
  color: var(--gold);
  border-color: var(--gold);
}
.constellation__chip--religious:hover,
.constellation__chip--religious:focus-visible {
  background: var(--gold);
  color: var(--bg);
  box-shadow: 0 0 16px -2px rgba(218, 184, 102, 0.55);
}

.constellation__chip--dietary {
  color: var(--text);
  border-color: var(--text-mute);
}
.constellation__chip--dietary:hover,
.constellation__chip--dietary:focus-visible {
  background: var(--text);
  color: var(--bg);
  box-shadow: 0 0 16px -2px rgba(255, 255, 255, 0.18);
}

.constellation__chip--situational {
  color: var(--text-mute);
  border-color: var(--text-mute);
  font-style: italic;
}
.constellation__chip--situational:hover,
.constellation__chip--situational:focus-visible {
  background: var(--text-mute);
  color: var(--bg);
  box-shadow: 0 0 16px -2px rgba(255, 255, 255, 0.10);
}

/* Tooltip — floats above the constellation, follows hovered chip */
.constellation__tooltip {
  position: absolute;
  max-width: 280px;
  padding: 14px 18px;
  background: var(--surface, var(--bg));
  border: 1px solid var(--gold);
  border-radius: 4px;
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.5;
  color: var(--text);
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity 200ms ease, transform 200ms ease;
  pointer-events: none;
  z-index: 5;
  box-shadow: 0 8px 24px -4px rgba(0, 0, 0, 0.4);
}

.constellation__tooltip.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

/* Mobile — tighten chip sizing further */
@media (max-width: 720px) {
  .constellation__chip {
    font-size: 9px;
    padding: 5px 10px;
  }
  .constellation__tooltip {
    max-width: 220px;
    font-size: 13px;
  }
}

.tier-toggle__option {
  background: transparent;
  border: 0;
  padding: 9px 22px;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-mute);
  border-radius: 999px;
  cursor: pointer;
  transition: background 180ms ease, color 180ms ease;
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.tier-toggle__option:hover {
  color: var(--text);
}

.tier-toggle__option.is-active {
  background: var(--gold);
  color: var(--bg);
}

[data-theme="light"] .tier-toggle__option.is-active {
  background: var(--gold-deep, var(--gold));
  color: #fff;
}

.tier-toggle__save {
  display: inline-block;
  padding: 2px 7px;
  background: var(--gold);
  color: var(--bg);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.10em;
  border-radius: 4px;
  line-height: 1.4;
}

.tier-toggle__option.is-active .tier-toggle__save {
  background: var(--bg);
  color: var(--gold);
}

[data-theme="light"] .tier-toggle__option.is-active .tier-toggle__save {
  background: #fff;
  color: var(--gold-deep, var(--gold));
}

/* ============================================================ */
/* Tier price block — large numeric display, swaps on toggle    */
/* ============================================================ */
.tier__price-block {
  padding-top: 18px;
  border-top: 1px solid var(--divider);
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.tier__price-amount {
  font-family: var(--serif);
  font-size: 38px;
  font-weight: 400;
  letter-spacing: -0.02em;
  line-height: 1;
  color: var(--text);
  display: none;
  align-items: baseline;
  gap: 2px;
}

.tier__price-amount--free {
  font-style: italic;
  font-size: 32px;
}

.tier--accent .tier__price-amount,
.tier--lifetime .tier__price-amount {
  color: var(--gold);
}

.tier__price-currency {
  font-size: 22px;
  vertical-align: super;
  margin-right: 1px;
  color: inherit;
  opacity: 0.85;
}

.tier__price-period {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-left: 8px;
  font-style: normal;
}

.tier__price-note {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-mute);
  display: none;
}

.tier--accent .tier__price-note,
.tier--lifetime .tier__price-note {
  color: var(--gold);
}

/* Show/hide based on parent [data-billing] */
.tiers[data-billing="monthly"] .tier__price-amount[data-show-when="monthly"],
.tiers[data-billing="annual"] .tier__price-amount[data-show-when="annual"],
.tier__price-amount--free,
.tier__price-amount--lifetime {
  display: inline-flex;
}

.tiers[data-billing="monthly"] .tier__price-note[data-show-when="monthly"],
.tiers[data-billing="annual"] .tier__price-note[data-show-when="annual"] {
  display: block;
}

/* Free + Lifetime always show their note (no toggle dependency) */
.tier__price-block > .tier__price-note:not([data-show-when]) {
  display: block;
}

.tiers__note {
  margin-top: clamp(28px, 4vw, 40px);
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px;
  line-height: 1.6;
  color: var(--text-mute);
  max-width: 720px;
}

.tiers__star {
  font-family: var(--mono);
  font-style: normal;
  color: var(--gold);
  font-weight: 500;
  margin-right: 3px;
}

/* ============================================================ */
/* Engine callout — "Powered by you" (added 2026-05-23)         */
/* ============================================================ */

.engine-callout {
  max-width: 920px;
  margin: 0 auto clamp(40px, 6vw, 64px) 0;
  padding: clamp(30px, 4vw, 56px) 0;
  border-top: 1px solid var(--divider);
  border-bottom: 1px solid var(--divider);
  text-align: left;
}

.engine-callout__line {
  font-family: var(--serif);
  font-size: clamp(28px, 4.5vw, 52px);
  font-weight: 300;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text);
  margin: 0 0 18px 0;
}

.engine-callout__line--accent {
  font-style: italic;
  color: var(--gold);
  display: inline-block;
}

.engine-callout__sub {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(17px, 1.7vw, 19px);
  line-height: 1.6;
  color: var(--text-mute);
  margin: 0;
  max-width: 640px;
}

@media (max-width: 720px) {
  .engine-callout { padding: 32px 0; }
  .engine-callout__line { font-size: clamp(26px, 8vw, 34px); }
}

/* Lifetime gift framing */
.lifetime__gift {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(16px, 1.6vw, 18px);
  line-height: 1.6;
  color: var(--text-mute);
  margin: 22px 0 0 0;
  padding: 22px 0 0 0;
  border-top: 1px solid var(--divider);
  max-width: 600px;
}
.lifetime__gift em {
  font-style: italic;
  color: var(--gold);
  font-weight: 400;
  margin-right: 2px;
}

/* ============================================================ */
/* Final animation polish pass (added 2026-05-23)               */
/* ============================================================ */

/* Status ticker — fade in on page load */
.status {
  opacity: 0;
  animation: status-rise 0.7s cubic-bezier(0.4, 0, 0.2, 1) 0.3s forwards;
}
@keyframes status-rise {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: none; }
}

/* "Powered by you." — gold underline draws as it enters viewport */
.engine-callout__line--accent {
  position: relative;
  display: inline-block;
  padding-bottom: 4px;
}
.engine-callout__line--accent::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  width: 0;
  height: 2px;
  background: var(--gold);
  transition: width 0.9s cubic-bezier(0.4, 0, 0.2, 1) 0.5s;
}
.engine-callout.is-in .engine-callout__line--accent::after {
  width: 100%;
}

/* Coverage band — stagger each city left-to-right */
.coverage__band span {
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 0.5s ease, transform 0.5s ease;
}
.coverage.is-in .coverage__band span { opacity: 1; transform: none; }
.coverage.is-in .coverage__band span:nth-child(1) { transition-delay: 0.05s; }
.coverage.is-in .coverage__band span:nth-child(2) { transition-delay: 0.15s; }
.coverage.is-in .coverage__band span:nth-child(3) { transition-delay: 0.25s; }
.coverage.is-in .coverage__band span:nth-child(4) { transition-delay: 0.35s; }
.coverage.is-in .coverage__band span:nth-child(5) { transition-delay: 0.45s; }
.coverage.is-in .coverage__band span:nth-child(6) { transition-delay: 0.55s; }
.coverage.is-in .coverage__band span:nth-child(7) { transition-delay: 0.65s; }
.coverage.is-in .coverage__band span:nth-child(8) { transition-delay: 0.75s; }

/* Lifetime gift — "Also" promoted to tracked-caps eyebrow */
.lifetime__gift-eyebrow {
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  margin-right: 4px;
}

/* Annual book tilt — borrow phone tilt visuals */
.annual-mock__book[data-tilt] {
  transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
  cursor: default;
  will-change: transform;
}

/* Inside Hunt list — stagger via existing .reveal class works automatically */
/* Inside FAQ items — same */

/* prefers-reduced-motion: respect users who don't want animation */
@media (prefers-reduced-motion: reduce) {
  .status {
    opacity: 1;
    animation: none;
  }
  .engine-callout__line--accent::after {
    transition: none;
    width: 100%;
  }
  .coverage__band span {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* ============================================================ */
/* Filter constellation — floating pills with toggle-on cycle    */
/* (added 2026-05-23, beside "Built for the way you actually eat")*/
/* ============================================================ */

.edit-with-cloud {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(40px, 6vw, 96px);
  align-items: start;
}
/* Desktop: .fc-row wrappers (added for the mobile 2-3-3-3-2 reshape below)
   must not affect the absolute constellation layout — display:contents
   unwraps them from layout entirely, so top/left positioning on each pill
   still resolves against .filter-cloud as before. */
.filter-cloud .fc-row {
  display: contents;
}
@media (max-width: 960px) {
  .edit-with-cloud { grid-template-columns: 1fr; }
  /* Phones/tablets: the absolute constellation was hidden, which left this
     section as plain prose that echoes "No ads / no paid placement" above it.
     Rounded 2-3-3-3-2 row cluster (review-approved shape) instead of a greedy
     flex-wrap — no lonely top/bottom pill, tapered silhouette. Keep the
     gold/green toggle burst; drop the vertical bob. */
  .filter-cloud {
    display: block;
    height: auto !important;
    margin-top: 10px;
    padding: 4px 6px;
  }
  .filter-cloud .fc-row {
    display: flex;
    flex-wrap: wrap;              /* long pills (Lower-glycemic-leaning) wrap instead of sliding off the right edge */
    justify-content: center;      /* centered, never right-clustered */
    align-items: center;
    gap: 10px 12px;
    margin-bottom: 12px;
    max-width: 100%;
  }
  .filter-cloud .fc-row:last-child {
    margin-bottom: 0;
  }
  .filter-cloud__pill {
    position: static !important;
    top: auto !important;
    left: auto !important;
    font-size: 13px !important;
    padding: 7px 13px !important;
    animation-name: filter-pill-toggle;
    animation-duration: 16s;
    animation-delay: var(--tog-d, 0s);
  }
  .filter-cloud__pill--health {
    animation-name: filter-pill-toggle-health;
  }
}

.filter-cloud {
  position: relative;
  height: clamp(420px, 50vw, 560px);
  pointer-events: none;
}

.filter-cloud__pill {
  position: absolute;
  display: inline-flex;
  align-items: center;
  padding: 9px 16px;
  border-radius: 999px;
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.01em;
  white-space: nowrap;
  background: transparent;
  color: var(--text-soft);
  border: 1px solid var(--rule);
  box-shadow: 0 0 0 0 rgba(221, 208, 170, 0);
  /* Stagger via per-pill custom properties set in HTML. */
  animation-name: filter-pill-bob, filter-pill-toggle;
  animation-duration: 9s, 16s;
  animation-timing-function: ease-in-out, cubic-bezier(.4, 0, .2, 1);
  animation-iteration-count: infinite, infinite;
  animation-delay: var(--bob-d, 0s), var(--tog-d, 0s);
  will-change: transform, background-color, color, box-shadow;
}

/* Subtle vertical bob — feels alive without being distracting. */
@keyframes filter-pill-bob {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-9px); }
}

/* Toggle-on burst: outline → fill (gold) → outline, scale wink. */
@keyframes filter-pill-toggle {
  0%, 35% {
    background: transparent;
    color: var(--text-soft);
    border-color: var(--rule);
    box-shadow: 0 0 0 0 rgba(221, 208, 170, 0);
  }
  42% {
    background: var(--gold);
    color: var(--bg);
    border-color: var(--gold);
    box-shadow: 0 0 18px 2px var(--gold-glow);
  }
  58% {
    background: var(--gold);
    color: var(--bg);
    border-color: var(--gold);
    box-shadow: 0 0 14px 1px var(--gold-glow);
  }
  72%, 100% {
    background: transparent;
    color: var(--text-soft);
    border-color: var(--rule);
    box-shadow: 0 0 0 0 rgba(221, 208, 170, 0);
  }
}

/* Health-coded variant — same toggle, but the "on" burst goes    */
/* sage green instead of gold. Used on medical/dietary pills      */
/* (Celiac, Crohn's, GLP-1, Diabetic, Low-FODMAP, etc.) so the    */
/* user pattern-matches green = health.                           */
.filter-cloud__pill--health {
  animation-name: filter-pill-bob, filter-pill-toggle-health;
}
@keyframes filter-pill-toggle-health {
  0%, 38% {
    background: transparent;
    color: var(--text-soft);
    border-color: var(--rule);
    box-shadow: 0 0 0 0 rgba(127, 176, 105, 0);
  }
  /* Hard step into the on-state so text-color and background     */
  /* transition simultaneously (avoids washed-out mid-frame).     */
  39%, 70% {
    background: var(--status-go);
    color: var(--bg);
    border-color: var(--status-go);
    box-shadow: 0 0 18px 2px var(--status-go-glow);
    font-weight: 600;
  }
  71%, 100% {
    background: transparent;
    color: var(--text-soft);
    border-color: var(--rule);
    box-shadow: 0 0 0 0 rgba(127, 176, 105, 0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .filter-cloud__pill {
    animation: none;
    /* Show a stable mix of on + off states. */
  }
  .filter-cloud__pill:nth-child(odd) {
    background: var(--gold);
    color: var(--bg);
    border-color: var(--gold);
  }
}

/* ============================================================ */
/* Atlas page — city-by-city rollout status (added 2026-05-23)  */
/* Editorial table, not enterprise dashboard. Status legend +    */
/* progress rows in alphabetical/ranked order.                   */
/* ============================================================ */

/* Status legend — 3 cards at top of atlas + small inline use   */
.atlas-legend {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(14px, 2vw, 24px);
  margin: clamp(28px, 4vw, 48px) 0 clamp(36px, 5vw, 64px);
}
@media (max-width: 720px) {
  .atlas-legend { grid-template-columns: 1fr; gap: 12px; }
}
.atlas-legend__item {
  padding: 22px 22px 24px;
  border: 1px solid var(--divider);
  background: var(--card);
  border-radius: 4px;
}
.atlas-legend__head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
}
.atlas-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--status-wait);
  box-shadow: 0 0 6px var(--status-wait-glow);
  flex-shrink: 0;
}
.atlas-dot--soft { background: var(--status-soft); box-shadow: 0 0 8px var(--status-soft-glow); }
.atlas-dot--full { background: var(--status-go);   box-shadow: 0 0 10px var(--status-go-glow);  }
.atlas-legend__name {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text);
}
.atlas-legend__body {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.5;
  color: var(--text-soft);
  margin: 0;
}

/* City row list */
.atlas-list {
  display: flex;
  flex-direction: column;
  border-top: 1px solid var(--divider);
}
.atlas-row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: clamp(14px, 2vw, 28px);
  align-items: center;
  padding: 18px 0;
  border-bottom: 1px solid var(--divider);
}
.atlas-row__status { text-align: right; }
@media (max-width: 720px) {
  .atlas-row {
    gap: 8px 12px;
    padding: 16px 0;
  }
}
.atlas-row__name {
  font-family: var(--serif);
  font-size: 19px;
  font-weight: 400;
  color: var(--text);
  line-height: 1.2;
}
.atlas-row__region {
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-left: 8px;
}
.atlas-row__bar {
  position: relative;
  height: 4px;
  background: var(--divider);
  border-radius: 2px;
  overflow: hidden;
}
.atlas-row__fill {
  position: absolute;
  inset: 0 auto 0 0;
  background: var(--status-wait);
  border-radius: 2px;
  transition: width 600ms cubic-bezier(.4, 0, .2, 1);
}
.atlas-row--soft .atlas-row__fill {
  background: var(--status-soft);
  box-shadow: 0 0 8px var(--status-soft-glow);
}
.atlas-row--full .atlas-row__fill {
  background: var(--status-go);
  box-shadow: 0 0 10px var(--status-go-glow);
}
.atlas-row__pct {
  font-family: var(--mono);
  font-size: 13px;
  font-weight: 500;
  color: var(--status-wait);
  text-align: right;
  letter-spacing: 0.02em;
}
.atlas-row--soft .atlas-row__pct { color: var(--status-soft); }
.atlas-row--full .atlas-row__pct { color: var(--status-go); }
.atlas-row__status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--status-wait);
  white-space: nowrap;
}
.atlas-row--soft .atlas-row__status { color: var(--status-soft); }
.atlas-row--full .atlas-row__status { color: var(--status-go); }

/* Vote-for-your-city CTA at the bottom */
.atlas-vote {
  margin-top: clamp(48px, 7vw, 96px);
  padding: clamp(32px, 5vw, 56px);
  border: 1px solid var(--rule);
  background: var(--bg-lift);
  border-radius: 4px;
  text-align: center;
}
.atlas-vote__title {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(24px, 3vw, 34px);
  line-height: 1.15;
  margin: 0 0 10px;
  color: var(--text);
}
.atlas-vote__title em { font-style: italic; color: var(--gold); }
.atlas-vote__body {
  font-family: var(--serif);
  font-size: 15px;
  color: var(--text-soft);
  margin: 0 0 20px;
}
.atlas-vote__form {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  max-width: 460px;
  margin: 0 auto;
}
@media (min-width: 560px) {
  .atlas-vote__form { flex-direction: row; }
}
.atlas-vote__city,
.atlas-vote__email {
  flex: 1;
  background: var(--bg);
  border: 1px solid var(--divider);
  color: var(--text);
  font-family: var(--sans);
  font-size: 14px;
  padding: 11px 14px;
  border-radius: 3px;
  width: 100%;
}
.atlas-vote__city::placeholder,
.atlas-vote__email::placeholder { color: var(--text-mute); }
.atlas-vote__submit {
  background: var(--gold);
  color: var(--bg);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 12px 22px;
  border-radius: 3px;
  border: 0;
  cursor: pointer;
  white-space: nowrap;
}
.atlas-vote__submit:hover { background: var(--gold-deep); }

/* Compact teaser variant used on the home page */
.atlas-teaser {
  margin-top: clamp(28px, 4vw, 48px);
}
.atlas-teaser .atlas-list { border-top-color: var(--rule); }
.atlas-teaser__more {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  margin-top: clamp(20px, 3vw, 32px);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
}
.atlas-teaser__more:hover { color: var(--text); }

/* ============================================================ */
/* Filter playground — interactive demo (inside.html, 2026-05-23)*/
/* Visitors toggle chips; sample dish list re-filters in place    */
/* with smooth height/opacity transitions. Demonstrates the       */
/* product's filter mechanic without requiring app download.      */
/* ============================================================ */

.playground__head {
  text-align: center;
  margin-bottom: clamp(28px, 4vw, 48px);
}
.playground__head .eyebrow {
  display: inline-block;
  margin-bottom: 14px;
}
.playground__head .section__title { margin: 0 auto 14px; }
.playground__head .section__lede { max-width: 580px; margin: 0 auto; }

.playground__panel {
  background: var(--card);
  border: 1px solid var(--divider);
  border-radius: 6px;
  padding: clamp(20px, 3vw, 32px);
}

.playground__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 16px;
  justify-content: center;
}
.pg-chip {
  font-family: var(--sans);
  font-size: 12.5px;
  font-weight: 500;
  letter-spacing: 0.01em;
  padding: 8px 14px;
  border-radius: 999px;
  background: transparent;
  color: var(--text-soft);
  border: 1px solid var(--rule);
  cursor: pointer;
  transition: background-color 220ms ease, color 220ms ease,
              border-color 220ms ease, transform 120ms ease;
  white-space: nowrap;
}
.pg-chip:hover { color: var(--text); border-color: var(--gold-deep); }
.pg-chip.is-on {
  background: var(--gold);
  color: var(--bg);
  border-color: var(--gold);
  box-shadow: 0 0 12px var(--gold-glow);
}
.pg-chip.is-on:hover { background: var(--gold-deep); }
/* Health/dietary chips light up sage green when active — same    */
/* visual logic as the filter cloud + highlight--health.           */
.pg-chip--health.is-on {
  background: var(--status-go);
  border-color: var(--status-go);
  box-shadow: 0 0 12px var(--status-go-glow);
}
.pg-chip--health.is-on:hover { background: rgba(127, 176, 105, 0.85); }
/* Matched tags inside a row also tint green when a health filter  */
/* is active (instead of gold). Cleaner pattern match.             */
.pg-tag.is-matched-health {
  color: var(--status-go);
  border-color: rgba(127, 176, 105, 0.5);
  background: rgba(127, 176, 105, 0.10);
}
.pg-chip:active { transform: scale(0.97); }
.pg-chip--reset {
  margin-left: 6px;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.pg-chip--reset:hover { color: var(--text); border-color: var(--text-mute); }

.playground__status {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
  text-align: center;
  margin-bottom: 18px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--divider);
}
.playground__status #pg-count { color: var(--gold); font-weight: 500; }

.playground__list {
  display: flex;
  flex-direction: column;
}
.pg-row {
  display: grid;
  grid-template-columns: 26px minmax(0, 1fr) auto 40px;
  gap: clamp(10px, 1.6vw, 18px);
  align-items: center;
  padding: 12px 0;
  border-bottom: 1px solid var(--divider);
  transition: opacity 320ms ease, transform 320ms ease, max-height 320ms ease;
  max-height: 200px;
  overflow: hidden;
}
.pg-row.is-hidden {
  opacity: 0;
  transform: translateY(-6px);
  max-height: 0;
  padding: 0;
  border-bottom-width: 0;
  pointer-events: none;
}
.pg-row__n {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  color: var(--gold);
  text-align: center;
}
.pg-row__name {
  font-family: var(--serif);
  font-size: 15.5px;
  color: var(--text);
  line-height: 1.2;
}
.pg-row__where {
  font-family: var(--serif);
  font-style: italic;
  font-size: 12px;
  color: var(--text-mute);
  margin-top: 2px;
}
.pg-row__tags {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
}
.pg-tag {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-mute);
  border: 1px solid var(--divider);
  border-radius: 3px;
  padding: 2px 6px;
  transition: color 200ms, border-color 200ms, background-color 200ms;
  white-space: nowrap;
}
/* Highlight tags that match an active filter */
.pg-tag.is-matched {
  color: var(--gold);
  border-color: var(--gold-deep);
  background: rgba(221, 208, 170, 0.08);
}
.pg-row__score {
  font-family: var(--mono);
  font-size: 13.5px;
  color: var(--gold);
  text-align: right;
  font-weight: 500;
  letter-spacing: 0.02em;
}

.playground__foot {
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px;
  color: var(--text-mute);
  text-align: center;
  margin: 16px 0 0;
}
.playground__foot em { color: var(--text-soft); font-style: italic; }

/* Hide row tag column on narrow screens — keep n + name + score */
@media (max-width: 640px) {
  .pg-row { grid-template-columns: 22px 1fr 40px; }
  .pg-row__tags { display: none; }
}

/* ============================================================ */
/* Filter playground — mechanism display (filters.html, 2026-07-04) */
/* Replaces the old fabricated-dish-row demo. Real app screenshot  */
/* + a plain-language explainer of the AND/stacking logic — no     */
/* invented dishes, scores, or health-verification tags.           */
/* ============================================================ */
.playground__panel--split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 260px;
  gap: clamp(28px, 4vw, 48px);
  align-items: start;
}
.playground__mech { min-width: 0; }
.playground__logic {
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid var(--divider);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.playground__logic-row {
  display: grid;
  grid-template-columns: 64px minmax(0, 1fr);
  gap: 14px;
  align-items: baseline;
}
.playground__logic-k {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
}
.playground__logic-v {
  font-family: var(--serif);
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--text-soft);
}
.playground__logic-v em { color: var(--text); font-style: italic; }
.playground__shot { text-align: center; }
.playground__shot .phone { max-width: 255px; }

@media (max-width: 780px) {
  .playground__panel--split {
    grid-template-columns: 1fr;
  }
  .playground__shot { order: -1; margin-bottom: 8px; }
  .playground__shot .phone { max-width: 235px; }
  .playground__logic-row {
    grid-template-columns: 1fr;
    gap: 3px;
  }
}

/* ============================================================ */
/* Day Zero pre-launch band — sits at the TOP of the Lifetime    */
/* section. Marked with gold border + live counter to signal real */
/* scarcity. Visible only while Day Zero seats remain.            */
/* ============================================================ */

.day-zero {
  margin-bottom: clamp(40px, 5vw, 64px);
  border: 1.5px solid var(--gold);
  border-radius: 6px;
  background:
    linear-gradient(155deg, rgba(221, 208, 170, 0.04) 0%, transparent 60%),
    var(--bg-lift);
  box-shadow: 0 0 24px rgba(221, 208, 170, 0.10);
  position: relative;
  overflow: hidden;
}
.day-zero::before {
  content: "";
  position: absolute;
  inset: 4px;
  border: 1px solid rgba(221, 208, 170, 0.12);
  border-radius: 4px;
  pointer-events: none;
}

.day-zero__inner {
  padding: clamp(24px, 3vw, 40px);
  position: relative;
}

.day-zero__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: clamp(16px, 2vw, 24px);
  padding-bottom: clamp(14px, 2vw, 20px);
  border-bottom: 1px solid rgba(221, 208, 170, 0.18);
}
.day-zero__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gold);
}
.day-zero__count {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.day-zero__claimed,
.day-zero__cap {
  color: var(--gold);
  font-weight: 600;
}

.day-zero__hed {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(26px, 3.2vw, 38px);
  line-height: 1.1;
  letter-spacing: -0.015em;
  color: var(--text);
  margin: 0 0 14px;
}
.day-zero__hed em {
  font-style: italic;
  font-weight: 300;
  color: var(--gold);
}

.day-zero__sub {
  font-family: var(--serif);
  font-size: clamp(15px, 1.5vw, 18px);
  line-height: 1.5;
  color: var(--text-soft);
  margin: 0 0 20px;
  max-width: 720px;
}

.day-zero__perks {
  list-style: none;
  margin: 0 0 20px;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-width: 720px;
}
.day-zero__perks li {
  position: relative;
  padding-left: 22px;
  font-family: var(--serif);
  font-size: 14.5px;
  line-height: 1.45;
  color: var(--text);
}
.day-zero__perks li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.68em;
  width: 12px;
  height: 1px;
  background: var(--gold);
  box-shadow: 0 0 4px var(--gold-glow);
}
.day-zero__perks strong {
  font-weight: 500;
  color: var(--gold);
}

.day-zero__safety {
  font-family: var(--serif);
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--text-mute);
  padding: 14px 16px;
  border-left: 2px solid var(--gold-deep);
  background: rgba(13, 12, 9, 0.4);
  border-radius: 0 3px 3px 0;
  margin: 0 0 24px;
  max-width: 720px;
}
.day-zero__safety strong { color: var(--text); }

.day-zero__cta-row {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: flex-start;
}
@media (min-width: 720px) {
  .day-zero__cta-row { flex-direction: row; align-items: center; gap: 20px; }
}

.day-zero__cta {
  display: inline-flex;
  align-items: baseline;
  gap: 12px;
  padding: 14px 24px;
  background: var(--gold);
  color: var(--bg);
  border: 1px solid var(--gold);
  border-radius: 999px;
  font-family: var(--sans);
  text-decoration: none;
  box-shadow: 0 0 18px var(--gold-glow);
  transition: background 200ms, transform 120ms, box-shadow 200ms;
}
.day-zero__cta:hover {
  background: var(--gold-deep);
  border-color: var(--gold-deep);
  box-shadow: 0 0 26px var(--gold-glow);
}
.day-zero__cta:active { transform: scale(0.98); }
.day-zero__cta-price {
  font-family: var(--mono);
  font-size: 17px;
  font-weight: 600;
  letter-spacing: 0.02em;
}
.day-zero__cta-label {
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.day-zero__cta-note {
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px;
  color: var(--text-mute);
  max-width: 380px;
  line-height: 1.45;
}

/* When Day Zero is sold out, the band auto-hides via .is-sold-out */
.day-zero.is-sold-out { display: none; }

/* ============================================================ */
/* Lifetime reserve column — patron note + reserve form stacked  */
/* (2026-05-24). Fills the negative space around the reserve box  */
/* with the "founding = funding the work" framing.                */
/* ============================================================ */

.reserve-col {
  display: flex;
  flex-direction: column;
  gap: clamp(20px, 2.5vw, 32px);
}

.reserve-patron {
  padding: clamp(22px, 2.5vw, 30px);
  background: rgba(13, 12, 9, 0.5);
  border: 1px solid var(--rule);
  border-radius: 4px;
  position: relative;
}
.reserve-patron .eyebrow {
  display: block;
  margin-bottom: 14px;
}
.reserve-patron__lede {
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.45;
  color: var(--text);
  margin: 0 0 16px;
}
.reserve-patron__list {
  list-style: none;
  margin: 0 0 16px;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 9px;
}
.reserve-patron__list li {
  position: relative;
  padding-left: 22px;
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.45;
  color: var(--text-soft);
}
.reserve-patron__list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.66em;
  width: 12px;
  height: 1px;
  background: var(--gold);
  box-shadow: 0 0 4px var(--gold-glow);
}
.reserve-patron__foot {
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px;
  color: var(--text-mute);
  margin: 0;
  padding-top: 14px;
  border-top: 1px solid var(--divider);
}

/* ============================================================ */
/* Lifetime preview — visual artifacts of membership (2026-05-23)*/
/* Two side-by-side blocks: the book that arrives + the gold ring */
/* badge. Punctuates the Lifetime pitch with concrete objects.    */
/* ============================================================ */

.lifetime-preview {
  margin: clamp(28px, 4vw, 44px) 0 clamp(24px, 3vw, 36px);
  padding: clamp(22px, 3vw, 32px);
  border: 1px solid var(--rule);
  border-radius: 4px;
  background: rgba(13, 12, 9, 0.5);
}
.lifetime-preview__eyebrow {
  display: block;
  margin-bottom: clamp(16px, 2vw, 22px);
}
.lifetime-preview__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
  gap: clamp(18px, 2.5vw, 32px);
  align-items: start;
}
@media (max-width: 640px) {
  .lifetime-preview__grid { grid-template-columns: 1fr; gap: 22px; }
}

/* The book artifact */
.lifetime-preview__book {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: flex-start;
}
.lifetime-preview__book-cover {
  width: 100%;
  max-width: 180px;
  aspect-ratio: 7 / 10;
  background: linear-gradient(155deg, #2A211A 0%, #1A140F 100%);
  border: 1px solid var(--gold-deep);
  border-radius: 2px;
  padding: 14px 12px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.5);
  position: relative;
}
.lifetime-preview__book-cover::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    repeating-linear-gradient(135deg, rgba(221,208,170,0.025) 0 12px, rgba(221,208,170,0.045) 12px 13px);
  pointer-events: none;
}
.lifetime-preview__book-brand {
  font-family: var(--serif);
  font-size: 14px;
  color: var(--gold);
  letter-spacing: 0;
  line-height: 1;
  z-index: 1;
}
.lifetime-preview__book-brand em { font-style: italic; font-weight: 300; }
.lifetime-preview__book-mid {
  display: flex;
  flex-direction: column;
  gap: 3px;
  z-index: 1;
}
.lifetime-preview__book-line {
  font-family: var(--serif);
  font-style: italic;
  font-size: 11px;
  color: var(--text-soft);
  line-height: 1.2;
}
.lifetime-preview__book-year {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.18em;
  color: var(--gold-deep);
  text-transform: uppercase;
}
.lifetime-preview__book-member {
  font-family: var(--mono);
  font-size: 8.5px;
  letter-spacing: 0.16em;
  color: var(--gold);
  text-transform: uppercase;
  padding-top: 6px;
  border-top: 1px solid rgba(221, 208, 170, 0.2);
  z-index: 1;
}

.lifetime-preview__caption {
  font-family: var(--serif);
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--text-soft);
  margin: 0;
  font-style: italic;
}

/* ----- Founding member credential card (right column) ------- */
.lifetime-card {
  background:
    linear-gradient(155deg, rgba(221, 208, 170, 0.04) 0%, transparent 50%),
    var(--bg-lift);
  border: 1px solid var(--gold-deep);
  border-radius: 4px;
  padding: 22px 22px 18px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  position: relative;
}
.lifetime-card::before {
  content: "";
  position: absolute;
  inset: 4px;
  border: 1px solid rgba(221, 208, 170, 0.10);
  border-radius: 3px;
  pointer-events: none;
}

.lifetime-card__head {
  display: flex;
  gap: 14px;
  align-items: center;
  padding-bottom: 16px;
  border-bottom: 1px solid rgba(221, 208, 170, 0.18);
  position: relative;
}
.lifetime-card__ring {
  flex-shrink: 0;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background:
    radial-gradient(circle at 35% 30%, rgba(221, 208, 170, 0.18) 0%, transparent 70%),
    var(--bg);
  border: 2.5px solid var(--gold);
  box-shadow:
    0 0 12px var(--gold-glow),
    inset 0 0 6px rgba(221, 208, 170, 0.18);
  position: relative;
}
.lifetime-card__ring::after {
  content: "";
  position: absolute;
  inset: 5px;
  border-radius: 50%;
  background: var(--bg);
  border: 1px solid var(--gold-deep);
}
.lifetime-card__id {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.lifetime-card__num {
  font-family: var(--mono);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gold);
  line-height: 1;
}
.lifetime-card__tier {
  font-family: var(--serif);
  font-style: italic;
  font-size: 12.5px;
  color: var(--text-soft);
  line-height: 1.2;
}

/* Perks list — each line carries a gold tick mark via ::before  */
/* so text wraps naturally inside the line, no grid constraints.  */
.lifetime-card__perks {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.lifetime-card__perks li {
  position: relative;
  padding-left: 22px;
  font-family: var(--serif);
  font-size: 13.5px;
  line-height: 1.45;
  color: var(--text);
}
.lifetime-card__perks li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.66em;
  width: 12px;
  height: 1px;
  background: var(--gold);
  box-shadow: 0 0 4px var(--gold-glow);
}

.lifetime-card__foot {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding-top: 12px;
  border-top: 1px solid rgba(221, 208, 170, 0.10);
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.lifetime-card__foot-k { color: var(--text-mute); }
.lifetime-card__foot-v { color: var(--gold-deep); }

/* ============================================================ */
/* Price-range band — "from the slice to the chef's plate"        */
/* (added 2026-05-23). Anti-elitism statement: the app covers     */
/* every price point. Sits below the differentiator strip.        */
/* ============================================================ */

.price-range {
  padding: clamp(40px, 5vw, 72px) 0 clamp(48px, 6vw, 84px);
  border-bottom: 1px solid var(--rule);
}
.price-range__eyebrow {
  display: block;
  text-align: center;
  margin-bottom: clamp(28px, 4vw, 44px);
}

.price-range__scale {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: clamp(14px, 2.5vw, 36px);
  flex-wrap: wrap;
  max-width: 1080px;
  margin: 0 auto;
}
.price-range__tier {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  min-width: 0;
  padding: 0 4px;
}
.price-range__price {
  font-family: var(--serif);
  font-weight: 300;
  letter-spacing: -0.01em;
  color: var(--text);
  line-height: 1;
}
/* Sizes grow with the dollar amount — reinforces range visually. */
.price-range__tier:nth-child(1) .price-range__price { font-size: clamp(28px, 3.4vw, 44px); }
.price-range__tier:nth-child(3) .price-range__price { font-size: clamp(34px, 4vw, 54px); }
.price-range__tier:nth-child(5) .price-range__price { font-size: clamp(40px, 5vw, 66px); }
.price-range__tier:nth-child(7) .price-range__price { font-size: clamp(46px, 6vw, 78px); color: var(--gold); }
.price-range__dish {
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(11px, 1.1vw, 13.5px);
  color: var(--text-mute);
  text-align: center;
  white-space: nowrap;
}
.price-range__sep {
  flex: 0 0 auto;
  width: clamp(14px, 3vw, 36px);
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold-deep), transparent);
  align-self: center;
  margin-bottom: 18px;
  opacity: 0.6;
}
@media (max-width: 720px) {
  .price-range__scale { gap: 18px; }
  .price-range__sep { display: none; }
  .price-range__tier { flex-direction: row; gap: 14px; min-width: 40%; }
  .price-range__dish { text-align: left; }
}

.price-range__promise {
  margin: clamp(28px, 4vw, 44px) auto 0;
  text-align: center;
  font-family: var(--serif);
  font-size: clamp(18px, 1.8vw, 24px);
  line-height: 1.3;
  color: var(--text);
  max-width: 640px;
}

/* ============================================================ */
/* Circles, by choice — opt-out privacy pillar (2026-05-23)      */
/* Four cards, low-density layout. Last card ('Opt out') reads   */
/* as the differentiator vs feed-driven competitors.              */
/* ============================================================ */

.circles-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(20px, 2.5vw, 32px);
  margin-top: clamp(28px, 4vw, 48px);
}
@media (max-width: 1000px) { .circles-grid { grid-template-columns: repeat(2, 1fr); gap: 24px; } }
@media (max-width: 560px)  { .circles-grid { grid-template-columns: 1fr; } }

.circle-card {
  padding: clamp(22px, 2.5vw, 30px) clamp(22px, 2.5vw, 28px);
  background: var(--card);
  border: 1px solid var(--divider);
  border-radius: 4px;
  position: relative;
}
.circle-card:last-child {
  background: var(--bg-lift);
  border-color: var(--gold-deep);
}
.circle-card__n {
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 14px;
}
.circle-card__name {
  font-family: var(--serif);
  font-size: clamp(22px, 2vw, 28px);
  font-weight: 400;
  line-height: 1.1;
  color: var(--text);
  margin: 0 0 12px;
  letter-spacing: -0.005em;
}
.circle-card:last-child .circle-card__name { color: var(--gold); }
.circle-card__body {
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.5;
  color: var(--text-soft);
  margin: 0;
}

.circles-foot {
  margin-top: clamp(28px, 4vw, 48px);
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: var(--text-mute);
  text-align: center;
}

/* ============================================================ */
/* Differentiator strip — first-30-seconds frame setter          */
/* (added 2026-05-23). Four parallel claims that land in 1-2     */
/* seconds and tell the reader WHY before any feature WHAT.       */
/* Never names competitors; differentiates by stating what we    */
/* are and quietly what we aren't.                                */
/* ============================================================ */

.differentiators {
  padding: clamp(48px, 6vw, 88px) 0 clamp(56px, 7vw, 100px);
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  background: var(--bg-lift);
  position: relative;
}
.differentiators__eyebrow {
  display: block;
  text-align: center;
  margin-bottom: clamp(28px, 4vw, 48px);
}

.diff-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(28px, 4vw, 56px);
  max-width: 1160px;
  margin: 0 auto;
}
@media (max-width: 980px) {
  .diff-grid { grid-template-columns: repeat(2, 1fr); gap: 36px 32px; }
}
@media (max-width: 560px) {
  .diff-grid { grid-template-columns: 1fr; gap: 28px; }
}

.diff { position: relative; padding-left: 16px; }
.diff::before {
  content: "";
  position: absolute;
  left: 0;
  top: 9px;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 8px var(--gold-glow);
}
.diff__claim {
  font-family: var(--serif);
  font-size: clamp(17px, 1.6vw, 21px);
  line-height: 1.25;
  letter-spacing: -0.005em;
  color: var(--text);
  margin: 0 0 10px;
  font-weight: 500;
}
.diff__contrast {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14.5px;
  line-height: 1.45;
  color: var(--text-mute);
  margin: 0;
}

/* ============================================================ */
/* Editorial accents — highlight underline + heartbeat dot       */
/* (added 2026-05-23) — used sparingly on key value-prop phrases */
/* and as an easter-egg near inline "theBEAT" / "pulse" mentions */
/* ============================================================ */

/* Animated underline that draws when phrase enters viewport.    */
/* Uses background-gradient so it wraps cleanly across multiple   */
/* lines — pseudo-element underlines break on wrapped inlines.    */
/* Use on key differentiator phrases — be SPARING (≤2/section).  */
.highlight {
  display: inline;
  font-weight: 500;
  color: var(--text);
  /* Underline drawn as a 2px slice at the bottom of each text   */
  /* line via background-image; background-size animates 0 → 100% */
  background-image: linear-gradient(
    to right,
    var(--gold-deep) 0%,
    var(--gold) 50%,
    var(--gold-deep) 100%
  );
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 0% 2px;
  /* Tiny inner padding so the underline sits a hair below text.  */
  padding-bottom: 0.08em;
  transition: background-size 1100ms cubic-bezier(.4, 0, .2, 1) 150ms;
  /* Box-decoration-break makes the underline restart cleanly on  */
  /* each wrapped line rather than spanning across the line gap.  */
  -webkit-box-decoration-break: clone;
          box-decoration-break: clone;
}
.highlight.is-drawn { background-size: 100% 2px; }

/* Health-coded variant — sage-green underline, reserved for      */
/* filter/dietary/medical copy. Speed-readers pattern-match       */
/* "green = the health/filter part" without the brand turning     */
/* clinical. Reuses --status-go from the Atlas palette.            */
.highlight--health {
  background-image: linear-gradient(
    to right,
    rgba(127, 176, 105, 0.85) 0%,
    var(--status-go) 50%,
    rgba(127, 176, 105, 0.85) 100%
  );
}

/* Reduced-motion: appear instantly, no draw animation. */
@media (prefers-reduced-motion: reduce) {
  .highlight { transition: none; }
  .highlight.is-drawn { background-size: 100% 2px; }
}

/* Heartbeat dot — easter egg next to inline "theBEAT" / "pulse" */
/* References the brand name's double meaning. Two-beat cardiac   */
/* rhythm on viewport entry, then settles to a gentle glow.       */
.heart-pulse {
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 4px var(--gold-glow);
  vertical-align: middle;
  margin: 0 0.35em 0.18em 0;  /* nudge up to baseline of cap height */
  flex-shrink: 0;
  opacity: 0.7;
  transition: opacity 600ms ease;
}
.heart-pulse.is-beating {
  opacity: 1;
  animation: heart-pulse-once 3.4s cubic-bezier(.45, 0, .2, 1) forwards;
}

/* Real cardiac rhythm — two beats (lub-DUB), then settle.        */
@keyframes heart-pulse-once {
  0%   { transform: scale(1.0); box-shadow: 0 0 4px var(--gold-glow); }
  /* lub */
  4%   { transform: scale(1.45); box-shadow: 0 0 12px var(--gold); }
  10%  { transform: scale(1.0); box-shadow: 0 0 5px var(--gold-glow); }
  /* DUB */
  16%  { transform: scale(1.7); box-shadow: 0 0 18px var(--gold); }
  24%  { transform: scale(1.05); box-shadow: 0 0 8px var(--gold-glow); }
  /* second cardiac cycle (slightly softer) */
  44%  { transform: scale(1.35); box-shadow: 0 0 10px var(--gold); }
  50%  { transform: scale(1.0); box-shadow: 0 0 5px var(--gold-glow); }
  56%  { transform: scale(1.55); box-shadow: 0 0 14px var(--gold); }
  64%  { transform: scale(1.0); box-shadow: 0 0 7px var(--gold-glow); }
  /* settle to static gentle glow */
  100% { transform: scale(1.0); box-shadow: 0 0 6px var(--gold-glow); }
}

@media (prefers-reduced-motion: reduce) {
  .heart-pulse.is-beating { animation: none; }
}

/* ============================================================ */
/* Six Features — icon + hover-preview upgrade (2026-05-23)     */
/* Each card carries a custom icon at top + a hover-only preview */
/* that fades in to replace the prose. Mobile shows prose only.  */
/* ============================================================ */

.edit-item {
  position: relative;
  overflow: hidden;
}

.edit-item__icon {
  width: 30px;
  height: 30px;
  color: var(--gold);
  margin-bottom: 16px;
  transition: transform 600ms cubic-bezier(.4, 0, .2, 1), color 200ms;
  display: block;
}
.edit-item__icon svg { width: 100%; height: 100%; display: block; }
.edit-item:hover .edit-item__icon {
  transform: rotate(-6deg) scale(1.15);
  color: var(--text);
}

.edit-item__media {
  position: relative;
  min-height: 168px;
}
.edit-item__body {
  position: relative;
  z-index: 1;
  margin: 0;
  transition: opacity 340ms ease;
}
.edit-item__preview {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
  transition: opacity 340ms ease;
}

/* Scoped 2026-06-11 with :has() — fixes a reverse-hover bug where
   edit-items without a preview (the Hunt card after Wave 1 swapped
   in the modes-gloss list) faded their body to zero on hover with
   nothing to fade in. Now only edit-items that still contain a
   __preview element get the swap. */
@media (hover: hover) and (pointer: fine) {
  .edit-item:has(.edit-item__preview):hover .edit-item__body    { opacity: 0; }
  .edit-item:has(.edit-item__preview):hover .edit-item__preview { opacity: 1; }
}
@media (hover: none), (pointer: coarse) {
  .edit-item__preview { display: none; }
}

/* ----- Preview building blocks (compact mini-mockups) -------- */

/* Rankings preview — 3 ranked rows */
.prv-rank      { display: flex; flex-direction: column; gap: 8px; }
.prv-rank__row {
  display: grid;
  grid-template-columns: 18px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 6px 0;
  border-bottom: 1px solid var(--divider);
}
.prv-rank__n {
  font-family: var(--serif);
  font-style: italic;
  color: var(--gold);
  font-size: 14px;
}
.prv-rank__name {
  font-family: var(--serif);
  font-size: 13.5px;
  color: var(--text);
  line-height: 1.25;
}
.prv-rank__name small {
  display: block;
  color: var(--text-mute);
  font-size: 11px;
  margin-top: 2px;
}
.prv-rank__score {
  font-family: var(--mono);
  font-size: 13px;
  color: var(--gold);
  font-weight: 500;
}

/* Tonight preview — single verdict card */
.prv-tonight {
  padding: 14px;
  border: 1px solid var(--rule);
  border-radius: 4px;
  background: var(--card);
  height: 100%;
}
.prv-tonight__eyebrow {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 8px;
}
.prv-tonight__title {
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.2;
  color: var(--text);
  margin-bottom: 10px;
}
.prv-tonight__title em { color: var(--gold); font-style: italic; }
.prv-tonight__meta {
  font-family: var(--serif);
  font-size: 12.5px;
  color: var(--text-soft);
  font-style: italic;
}
.prv-tonight__dual { display: flex; flex-direction: column; gap: 10px; }
.prv-tonight__line {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  gap: 10px;
  align-items: baseline;
}
.prv-tonight__tag {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
}
.prv-tonight__name {
  font-family: var(--serif);
  font-size: 13.5px;
  color: var(--text);
  line-height: 1.2;
}
.prv-tonight__name em { font-style: italic; color: var(--gold); }
.prv-tonight__price {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--text-soft);
  letter-spacing: 0.02em;
}

/* Hunt preview — picks list */
.prv-hunt      { display: flex; flex-direction: column; gap: 12px; }
.prv-hunt__pick { border-left: 1px solid var(--gold); padding-left: 12px; }
.prv-hunt__n   {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.18em;
  color: var(--gold-deep);
  display: block;
}
.prv-hunt__title {
  font-family: var(--serif);
  font-size: 14px;
  color: var(--text);
  margin: 2px 0 3px;
}
.prv-hunt__why {
  font-family: var(--serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--text-mute);
  line-height: 1.35;
}

/* On Deck preview — folder stack */
.prv-folders      { display: flex; flex-direction: column; gap: 8px; }
.prv-folders__row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 9px 12px;
  background: var(--card);
  border: 1px solid var(--divider);
  border-radius: 3px;
}
.prv-folders__name {
  font-family: var(--serif);
  font-size: 13.5px;
  color: var(--text);
}
.prv-folders__count {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.08em;
  color: var(--text-mute);
}

/* Tastemakers preview — signature card */
.prv-tm {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--divider);
}
.prv-tm__avatar {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--gold-deep), var(--rose));
  flex-shrink: 0;
}
.prv-tm__name {
  font-family: var(--serif);
  font-size: 14px;
  color: var(--text);
}
.prv-tm__badge {
  font-family: var(--mono);
  font-size: 9.5px;
  color: var(--gold);
  margin-left: 6px;
  letter-spacing: 0.1em;
}
.prv-tm__bio {
  font-family: var(--serif);
  font-style: italic;
  font-size: 11.5px;
  color: var(--text-soft);
  line-height: 1.4;
  margin-top: 3px;
}
.prv-tm__foot {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-top: 10px;
}

/* Annual Edit preview — book cover mock (Six Features hover)    */
/* Sized so text fits without ugly mid-word wraps.                */
.prv-book {
  display: flex;
  gap: 14px;
  align-items: center;
}
.prv-book__cover {
  width: 108px;
  height: 150px;
  background: linear-gradient(155deg, #2A211A 0%, #1A140F 100%);
  border: 1px solid var(--gold-deep);
  border-radius: 2px;
  padding: 11px 9px 10px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  flex-shrink: 0;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
}
.prv-book__brand {
  font-family: var(--serif);
  font-size: 12.5px;
  color: var(--gold);
  letter-spacing: 0;
  line-height: 1;
  white-space: nowrap;
}
.prv-book__brand em { font-style: italic; font-weight: 300; }
.prv-book__line {
  font-family: var(--serif);
  font-size: 9.5px;
  font-style: italic;
  color: var(--text-soft);
  line-height: 1.15;
  /* Allow up to two lines but keep tight */
}
.prv-book__year {
  font-family: var(--mono);
  font-size: 8px;
  letter-spacing: 0.16em;
  color: var(--gold-deep);
  white-space: nowrap;
}
.prv-book__caption {
  font-family: var(--serif);
  font-style: italic;
  font-size: 12px;
  color: var(--text-soft);
  line-height: 1.4;
}

/* ============================================================ */
/* Trademark notice — ™ marks (added 2026-05-23, post-USPTO)    */
/* Small, gold, superscript — present but never dominant.        */
/* Use sparingly: hero wordmark, topbar brand, footer brand.     */
/* ============================================================ */

.tm {
  font-family: var(--sans);
  font-size: 0.48em;
  font-weight: 500;
  letter-spacing: 0;
  vertical-align: super;
  color: var(--gold);
  margin-left: 0.08em;
  font-style: normal;
  line-height: 1;
}

/* Hero wordmark gets a tighter, much smaller ™ — the wordmark    */
/* itself is so large (50-120px) that a normal superscript reads  */
/* as a banner. Float it up near the top-right of the BEAT.       */
.hero__tm {
  display: inline-block;
  font-family: var(--sans);
  font-size: 0.16em;
  font-weight: 500;
  font-style: normal;
  letter-spacing: 0;
  color: var(--gold);
  vertical-align: top;
  margin-top: 0.5em;
  margin-left: 0.1em;
  line-height: 1;
}

/* ============================================================ */
/* Hero tagline — primary value prop (added 2026-05-23)         */
/* Direct answer to "what is theBEAT" — lands between the       */
/* wordmark and the dek for immediate clarity.                  */
/* ============================================================ */

.hero__tagline {
  font-family: var(--serif);
  font-size: clamp(28px, 3.6vw, 44px);
  font-weight: 400;
  line-height: 1.15;
  letter-spacing: -0.02em;
  color: var(--text);
  margin: clamp(18px, 2.5vw, 28px) 0 clamp(14px, 2vw, 20px) 0;
  max-width: 880px;
}
.hero__tagline em {
  font-style: italic;
  font-weight: 300;
  color: var(--gold);
}

/* ============================================================ */
/* Ghost B — hero stage prop (rewritten 2026-05-23 v2)          */
/*                                                              */
/* The mark anchors absolutely to a page coord computed by      */
/* ghost.js — centered in the space above the first <hr.rule>.  */
/* It scrolls naturally with the page, so phone mockups below   */
/* roll up over it. When a phone overlaps the mark, a warm      */
/* under-glow is triggered on that phone — "the B is powering   */
/* the phone."                                                  */
/* ============================================================ */

/* Body becomes a stacking-context root so the z:-1 ghost sits   */
/* behind every body child without breaking sticky positions.     */
body { isolation: isolate; }

.ghost-b {
  /* Fixed to the viewport, anchored on the right-third line      */
  /* (66% from left), vertically centered. Stays put as page      */
  /* content scrolls past behind it.                               */
  position: fixed;
  top: 50%;
  left: 74%;
  width: clamp(440px, 52vw, 780px);
  aspect-ratio: 1 / 1;
  /* JS-driven drift + tilt for subtle parallax life.            */
  --ghost-drift: 0px;
  --ghost-tilt: 0deg;
  transform:
    translate(-50%, calc(-50% + var(--ghost-drift)))
    rotate(var(--ghost-tilt));
  pointer-events: none;
  /* Strictly BEHIND every body child — no chance of bleeding     */
  /* through phone edges or any other foreground element.          */
  z-index: -1;
  opacity: var(--ghost-peak, 0);
  background-image: url('assets/brandmark-ghost.png');
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  /* Use the PNG's LUMINANCE as the mask. The asset is RGBA but    */
  /* every alpha pixel is 255 (solid black bg, no transparency),   */
  /* so alpha-masking would let the whole square through. With     */
  /* luminance-masking the cream whisk is "bright" → shown; the    */
  /* black background is "dark" → masked out → no bounding box.    */
  -webkit-mask-image: url('assets/brandmark-ghost.png');
          mask-image: url('assets/brandmark-ghost.png');
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-size: contain;
          mask-size: contain;
  -webkit-mask-mode: luminance;
          mask-mode: luminance;
  transition: opacity 700ms cubic-bezier(.4, 0, .2, 1);
  will-change: opacity, transform;
}

/* Phone underglow — warm gold halo lights up as a phone scrolls  */
/* across the ghost zone. No z-index change on the phone itself:  */
/* the ghost is already z:-1, so the phone (default stacking) is  */
/* always solid on top. drop-shadow renders behind the phone but  */
/* above the ghost, so the glow blends warmly over the mark.      */
.phone[data-tilt] {
  /* Gold underglow removed — it read as a halo against the dark page. */
  filter: none;
}

/* Honor user motion preferences — pin transform, slow the fade. */
@media (prefers-reduced-motion: reduce) {
  .ghost-b {
    transform: translate(-50%, -50%);
    transition: opacity 1200ms ease;
  }
  .phone[data-tilt] { transition: none; }
}

/* On phones the ghost slides closer to center and shrinks a bit  */
/* — peeking from the right edge wastes presence on a narrow vp.  */
@media (max-width: 720px) {
  .ghost-b {
    width: clamp(320px, 84vw, 520px);
    filter: blur(0.6px);
  }
}

/* Print: never render the ghost layer. */
@media print {
  .ghost-b { display: none !important; }
}

/* ============================================================
   Visiting teaser (index.html) + Visiting page (visiting.html)
   ============================================================ */

/* --- Index teaser band ---------------------------------------- */
.visiting-teaser__grid {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: clamp(32px, 6vw, 88px);
  align-items: start;
}
@media (max-width: 880px) {
  .visiting-teaser__grid { grid-template-columns: 1fr; gap: 36px; }
}

.visiting-teaser__lede .section__title { margin-top: 8px; }
.visiting-teaser__lede .atlas-teaser__more { margin-top: 18px; display: inline-block; }

.visiting-teaser__moments {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.visiting-moment {
  background: var(--bg-lift);
  border: 1px solid var(--rule);
  border-left: 2px solid var(--gold);
  padding: 18px 22px;
  border-radius: 2px;
  position: relative;
  overflow: hidden;
  transition: transform 220ms ease, border-color 220ms ease, background-color 280ms ease;
}
.visiting-moment::before {
  content: "";
  position: absolute;
  top: 0; left: 0; bottom: 0;
  width: 2px;
  background: linear-gradient(180deg, var(--gold), transparent);
  opacity: 0;
  transition: opacity 220ms ease;
}
.visiting-moment:hover {
  transform: translateX(3px);
  border-color: rgba(221, 208, 170, 0.32);
}
.visiting-moment:hover::before { opacity: 1; }

.visiting-moment__tag {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 6px;
}
.visiting-moment__copy {
  margin: 0;
  font-size: 15.5px;
  line-height: 1.55;
  color: var(--text-soft);
}
.visiting-moment__copy strong {
  color: var(--text);
  font-weight: 500;
  display: block;
  margin-bottom: 2px;
  font-family: var(--serif);
  font-size: 17.5px;
  line-height: 1.35;
}

/* --- Visiting page hero --------------------------------------- */
.visit-hero {
  padding: clamp(80px, 13vh, 168px) 0 clamp(48px, 8vh, 96px);
  position: relative;
  overflow: hidden;
}
.visit-hero__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 22px;
}
.visit-hero__hed {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(40px, 6.6vw, 76px);
  line-height: 1.04;
  letter-spacing: -0.012em;
  margin: 0 0 26px;
  color: var(--text);
  max-width: 920px;
}
.visit-hero__hed em {
  font-style: italic;
  color: var(--gold);
  font-weight: 300;
}
.visit-hero__dek {
  font-family: var(--serif);
  font-size: clamp(18px, 2.2vw, 23px);
  line-height: 1.55;
  color: var(--text-soft);
  max-width: 720px;
  margin: 0 0 32px;
}
.visit-hero__dek strong { color: var(--text); font-weight: 400; font-style: normal; }

.visit-hero__strip {
  display: flex;
  flex-wrap: wrap;
  gap: 24px 40px;
  align-items: center;
  margin-top: 36px;
  padding-top: 28px;
  border-top: 1px solid var(--rule);
}
.visit-hero__strip-item {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.visit-hero__strip-k {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.visit-hero__strip-v {
  font-family: var(--serif);
  font-size: 17px;
  color: var(--text);
}

/* --- Six travel moments grid ---------------------------------- */
.visit-moments-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  margin-top: 36px;
  /* Don't let an opened card's height stretch its row siblings.
     Each card sits on its own auto row so opening one only grows
     that single card. (Fix 2026-06-11.) */
  align-items: start;
  grid-auto-rows: min-content;
}
@media (max-width: 880px) { .visit-moments-grid { grid-template-columns: repeat(2, 1fr); gap: 16px; } }
@media (max-width: 560px) { .visit-moments-grid { grid-template-columns: 1fr; } }

.visit-card {
  background: var(--bg-lift);
  border: 1px solid var(--rule);
  padding: 26px 24px 24px;
  border-radius: 3px;
  display: flex;
  flex-direction: column;
  position: relative;
  overflow: hidden;
  transition: transform 260ms ease, border-color 260ms ease, background-color 280ms ease;
}
.visit-card::after {
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 2px;
  background: linear-gradient(90deg, var(--gold), transparent);
  opacity: 0;
  transform: scaleX(0);
  transform-origin: left;
  transition: opacity 280ms ease, transform 360ms ease;
}
.visit-card:hover {
  transform: translateY(-3px);
  border-color: rgba(221, 208, 170, 0.30);
}
.visit-card:hover::after { opacity: 1; transform: scaleX(1); }

.visit-card__icon {
  width: 32px;
  height: 32px;
  color: var(--gold);
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.visit-card__icon svg { width: 100%; height: 100%; stroke: currentColor; stroke-width: 1.5; fill: none; stroke-linecap: round; stroke-linejoin: round; }

.visit-card__moment {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-bottom: 6px;
}
.visit-card__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 22px;
  line-height: 1.20;
  color: var(--text);
  margin: 0 0 12px;
}
.visit-card__title em { font-style: italic; color: var(--gold); font-weight: 300; }
.visit-card__body {
  font-size: 15px;
  line-height: 1.6;
  color: var(--text-soft);
  margin: 0 0 16px;
}
.visit-card__feature {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px dashed var(--rule);
}
.visit-card__feature::before {
  content: "";
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 0 0 var(--gold-glow);
  animation: visit-card-pulse 2.6s ease-in-out infinite;
}
@keyframes visit-card-pulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--gold-glow); }
  50%      { box-shadow: 0 0 0 6px transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .visit-card__feature::before { animation: none; }
}

/* --- Three perfect days (itinerary) --------------------------- */
.visit-days {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px;
  margin-top: 36px;
}
@media (max-width: 900px) { .visit-days { grid-template-columns: 1fr; } }

.visit-day {
  background: var(--bg-lift);
  border: 1px solid var(--rule);
  padding: 26px 24px;
  border-radius: 3px;
  position: relative;
  transition: transform 240ms ease, border-color 240ms ease, background-color 280ms ease;
}
.visit-day:hover {
  border-color: rgba(221, 208, 170, 0.28);
}
.visit-day__label {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--text-mute);
  display: block;
  margin-bottom: 6px;
}
.visit-day__title {
  font-family: var(--serif);
  font-weight: 300;
  font-size: 26px;
  line-height: 1.1;
  color: var(--text);
  margin: 0 0 20px;
}
.visit-day__title em { font-style: italic; color: var(--gold); }
.visit-day__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.visit-day__slot {
  display: grid;
  grid-template-columns: 62px 1fr;
  gap: 14px;
  align-items: baseline;
  padding-bottom: 14px;
  border-bottom: 1px dashed var(--rule);
}
.visit-day__slot:last-child { padding-bottom: 0; border-bottom: 0; }
.visit-day__time {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gold);
  white-space: nowrap;
}
.visit-day__what {
  font-size: 15px;
  line-height: 1.5;
  color: var(--text-soft);
}
.visit-day__what strong {
  display: block;
  color: var(--text);
  font-weight: 500;
  font-family: var(--serif);
  font-size: 16.5px;
  line-height: 1.3;
  margin-bottom: 2px;
}
.visit-day__foot {
  margin-top: 20px;
  padding-top: 14px;
  border-top: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.visit-day__foot em {
  color: var(--gold);
  font-style: normal;
  letter-spacing: 0.16em;
}

/* --- Health-cohort traveler block ----------------------------- */
.visit-health {
  background: linear-gradient(180deg, rgba(127, 176, 105, 0.07) 0%, transparent 70%);
  border: 1px solid rgba(127, 176, 105, 0.22);
  border-left: 3px solid var(--status-go);
  padding: 32px 30px;
  border-radius: 3px;
  margin-top: 8px;
  transition: background-color 280ms ease, border-color 280ms ease;
}
[data-theme="light"] .visit-health {
  background: linear-gradient(180deg, rgba(79, 125, 44, 0.10) 0%, transparent 70%);
  border-color: rgba(79, 125, 44, 0.30);
}
.visit-health__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--status-go);
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
}
.visit-health__eyebrow::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--status-go);
  box-shadow: 0 0 0 0 var(--status-go-glow);
  animation: visit-card-pulse 2.6s ease-in-out infinite;
}
.visit-health__hed {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(24px, 3vw, 32px);
  line-height: 1.18;
  color: var(--text);
  margin: 0 0 14px;
}
.visit-health__hed em { font-style: italic; color: var(--status-go); }
.visit-health__body {
  font-size: 16px;
  line-height: 1.65;
  color: var(--text-soft);
  margin: 0 0 18px;
  max-width: 720px;
}
/* 2026-07-14 — The chip cluster is marked up as a <ul>/<li> (correct: it IS a
   list of filters, and the semantics matter for screen readers). But it never
   reset the UA list styling, so every chip rendered with a native disc marker
   AND a pill border — double markup — sitting inside the UA's 40px
   padding-inline-start, which pushed the whole cluster off the copy's left
   margin. Reset the list here; the pill IS the marker. Compare .tier__list,
   which has always reset (list-style:none + its own gold dot). */
.visit-health__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 18px 0 0 0;
  padding: 0;
  list-style: none;
}
.visit-health__chips li::marker { content: ""; }
.visit-health__chip {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--status-go);
  border: 1px solid rgba(127, 176, 105, 0.40);
  background: rgba(127, 176, 105, 0.08);
  padding: 6px 12px;
  border-radius: 999px;
  /* Chips are designed to fit — never truncate (no-ellipsis doctrine).
     A chip may not break mid-label; the CLUSTER wraps, the chip doesn't. */
  white-space: nowrap;
  line-height: 1.45;
}
/* 390/430px: the longest chip ("Crohn's & Colitis") still clears a 390px
   viewport at 11px mono, so no font shrink is needed — just tighten the gap
   so rows pack evenly instead of leaving one orphan chip on its own line. */
@media (max-width: 460px) {
  .visit-health__chips { gap: 7px; }
  .visit-health__chip { padding: 6px 10px; letter-spacing: 0.1em; }
}
[data-theme="light"] .visit-health__chip {
  border-color: rgba(79, 125, 44, 0.45);
  background: rgba(79, 125, 44, 0.10);
}

/* --- Gift reframe + CTA --------------------------------------- */
.visit-gift {
  text-align: center;
  padding: 56px 24px;
  background: var(--bg-lift);
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  transition: background-color 280ms ease, border-color 280ms ease;
}
.visit-gift__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 18px;
}
.visit-gift__hed {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(28px, 4vw, 42px);
  line-height: 1.18;
  color: var(--text);
  margin: 0 auto 16px;
  max-width: 760px;
}
.visit-gift__hed em { font-style: italic; color: var(--gold); }
.visit-gift__body {
  font-size: 17px;
  line-height: 1.6;
  color: var(--text-soft);
  max-width: 620px;
  margin: 0 auto 28px;
}
.visit-gift__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: var(--gold);
  color: var(--bg);
  font-family: var(--sans);
  font-weight: 500;
  font-size: 15.5px;
  letter-spacing: 0.01em;
  padding: 14px 26px;
  border-radius: 2px;
  text-decoration: none;
  transition: transform 200ms ease, box-shadow 200ms ease, background-color 200ms ease;
}
.visit-gift__cta:hover {
  transform: translateY(-1px);
  background: var(--gold-deep);
  box-shadow: 0 6px 20px var(--gold-glow);
}

/* --- Visiting page email capture ------------------------------ */
.visit-capture {
  max-width: 540px;
  margin: 40px auto 0;
  padding: 24px;
  border: 1px solid var(--rule);
  border-radius: 3px;
  background: var(--bg-lift);
  transition: background-color 280ms ease, border-color 280ms ease;
}
.visit-capture__label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 8px;
}
.visit-capture__title {
  font-family: var(--serif);
  font-size: 20px;
  color: var(--text);
  margin: 0 0 14px;
  line-height: 1.3;
}
.visit-capture__row {
  display: flex;
  gap: 8px;
  /* No on-page email input here (see travelers.html script comment — this
     CTA links straight to notify.html), just a single <a> button. A bare
     flex row defaults its lone child to flex-start, so the button hugged
     the LEFT edge of an otherwise center-aligned card — the reported
     "off-center button." Center it explicitly. (2026-07-18) */
  justify-content: center;
}
.visit-capture__row input {
  flex: 1;
  background: var(--bg);
  border: 1px solid var(--rule);
  color: var(--text);
  font-family: var(--sans);
  font-size: 15px;
  padding: 11px 14px;
  border-radius: 2px;
  transition: border-color 200ms ease, background-color 280ms ease, color 280ms ease;
}
.visit-capture__row input:focus {
  outline: none;
  border-color: var(--gold);
}
.visit-capture__row button {
  background: var(--gold);
  color: var(--bg);
  border: 1px solid var(--gold);
  font-family: var(--sans);
  font-weight: 500;
  font-size: 14.5px;
  padding: 11px 18px;
  border-radius: 2px;
  cursor: pointer;
  transition: background-color 200ms ease, transform 200ms ease;
}
.visit-capture__row button:hover {
  background: var(--gold-deep);
  transform: translateY(-1px);
}
.visit-capture__small {
  margin: 12px 0 0;
  font-size: 13px;
  color: var(--text-mute);
  font-style: italic;
}
@media (max-width: 480px) {
  .visit-capture__row { flex-direction: column; }
}

/* Ghost-B is designed cream-on-charcoal. In light mode the JS-driven
   --ghost-peak keeps animating, so we dampen it via calc() rather than
   set a static opacity (which the JS would overwrite). Filter inverts
   the cream mark to a dark watermark so it reads on cream paper. */
[data-theme="light"] .ghost-b {
  opacity: calc(var(--ghost-peak, 0) * 0.16);
  filter: invert(0.78) sepia(0.5) saturate(0.55) hue-rotate(10deg);
}

/* ============================================================
   Light mode polish — overrides for hardcoded colors that
   weren't covered by the variable system.
   Shipped 2026-05-24 after visual QA.
   ============================================================ */

/* Topbar — needs a light wash, not the rgba dark stuck through */
[data-theme="light"] .topbar {
  background: rgba(247, 242, 230, 0.88);
  border-bottom: 1px solid var(--rule);
}

/* Brand mark swap by theme — uses the proper light-mode asset
   (charcoal whisk-B on transparent) instead of a CSS filter.
   `content: url()` replaces the rendered image without touching
   the HTML, so the dark <img src> stays as the default. */
[data-theme="light"] .brand__mark {
  content: url('assets/brandmark-light.png');
  transition: filter 280ms ease;
}
[data-theme="light"] .brand:hover .brand__mark {
  filter: drop-shadow(0 0 4px var(--gold-glow));
}

/* Bump bg-lift further from bg in light mode so patron/credential cards
   have real separation. Default light bg-lift was too close to bg. */
[data-theme="light"] {
  --bg-lift: #ECE3CA;   /* deeper warm tan — clearly distinct from --bg cream */
  --card:    #F1E9D3;
  --card-hi: #F8F1DD;
}

/* Patron card — give the inner block a distinct paper-cream surface */
[data-theme="light"] .reserve-patron {
  background: #FBF6E8;
  border-color: rgba(64, 52, 24, 0.18);
}

/* Engine formula code block — was a flat gray; warm it for light mode */
[data-theme="light"] .engine-formula__code,
[data-theme="light"] .engine-formula pre,
[data-theme="light"] .engine-formula code {
  background: #E8DFC4;
  color: var(--gold-deep);
  border-color: rgba(64, 52, 24, 0.18);
}

/* Engine formula expression — the rgba(0,0,0,0.35) box went muddy
   grey on cream in light mode. Warm it. (Added 2026-06-11 review pass.) */
[data-theme="light"] .engine-formula {
  background: #FBF6E8;
}
[data-theme="light"] .engine-formula__expr {
  background: #2A1F12;            /* deep editorial brown — formula stays the visual anchor */
  color: #E0C56E;                  /* warm gold against deep brown for sharp legibility */
  border: 1px solid rgba(64, 52, 24, 0.22);
}
[data-theme="light"] .engine-formula__where {
  color: var(--text);              /* was --text-mute italic, hard to read on cream */
}
[data-theme="light"] .engine-formula__where em {
  color: #5F4E14;                  /* burnished gold for k/n callouts in light mode */
}

/* Lifetime preview wrapper — the rgba(13,12,9,0.5) overlay rendered
   as muddy grey on cream. Swap to a warmer light-mode surface. */
[data-theme="light"] .lifetime-preview {
  background: #F1E9D3;
  border-color: rgba(64, 52, 24, 0.18);
}

/* Whisk-B background watermark — in dark mode the .ghost-b paints the
   cream brandmark on charcoal (high contrast). In light mode the same
   cream-on-cream pass renders nearly invisible.

   Problem: ghost.js writes `--ghost-peak` inline as the user scrolls
   (it pulses the watermark when phones drift past). The inline style
   trumps any CSS rule on the same property, so a non-!important
   override was getting stomped on every scroll tick — leaving the
   watermark at opacity 0 in light mode at the top of the page.

   Fix: force opacity with !important so the watermark always sits at
   a soft baseline in light mode, ignoring the JS pulse. Paint a dark
   warm-gold fill that the existing luminance mask carves into the
   whisk-B shape. (2026-06-11 v2 fix.) */
[data-theme="light"] .ghost-b {
  background-image: none !important;
  background-color: #5F4E14 !important;     /* warm dark gold matches light --gold-deep */
  opacity: 0.22 !important;                  /* hard floor — ignore JS pulse */
  /* mobile Safari ignores luminance mask-mode and shows the whole tile as a grey
     square. Use a real transparent alpha whisk so only the B carves out. */
  -webkit-mask-image: url('assets/brandmark-whisk-alpha.png') !important;
          mask-image: url('assets/brandmark-whisk-alpha.png') !important;
  -webkit-mask-mode: alpha !important;
          mask-mode: alpha !important;
}

/* Highlight underline — the gradient uses gold-glow which works,
   but needs a deeper underline weight in light mode for legibility. */
[data-theme="light"] .highlight {
  background-image: linear-gradient(transparent 70%, rgba(128, 106, 31, 0.32) 70%, rgba(128, 106, 31, 0.32) 95%, transparent 95%);
}
[data-theme="light"] .highlight--health {
  background-image: linear-gradient(transparent 70%, rgba(79, 125, 44, 0.32) 70%, rgba(79, 125, 44, 0.32) 95%, transparent 95%);
}

/* Reserve-patron mark (em-dash bullets) — slightly deeper in light */
[data-theme="light"] .reserve-patron__mark { background: var(--gold); opacity: 0.7; }

/* Lifetime card credential — slightly more depth on its border for light bg */
[data-theme="light"] .lifetime-card {
  border-color: rgba(128, 106, 31, 0.38);
  box-shadow: 0 1px 0 rgba(128, 106, 31, 0.10);
}

/* Reserve buy block — was using hardcoded dark gradient; switch to clean light variant */
[data-theme="light"] .reserve-buy {
  background: linear-gradient(180deg, #FBF6E8 0%, #F4EDDB 100%);
}

/* Lifetime preview book cover — keep the dark look in both modes (it's the book),
   but ensure it has a subtle shadow in light mode to separate from cream bg */
[data-theme="light"] .lifetime-preview__book-cover {
  box-shadow: 0 4px 18px rgba(64, 52, 24, 0.18), 0 1px 2px rgba(64, 52, 24, 0.10);
}

/* LIGHT MODE FIX: .lifetime-preview__book-line uses --text-soft, which flips to
   near-black (#2E2920) in light mode — but the book cover it sits on is pinned
   dark on purpose (see comment above, "it's the book"). That made the italic
   line illegible (dark ink on the still-dark cover). Pin it to the site's real
   light-mode cream ink instead of following the theme variable, same fix
   pattern as .fs-sec / .annual-mock__book below. */
[data-theme="light"] .lifetime-preview__book-line {
  color: #F4EFE7;
}

/* LIGHT MODE FIX: .annual-mock__book (inside.html "Annual Edit" mock cover) is
   the same bug class as the .fs-sec hero and the lifetime-preview book above —
   the book cover background is pinned dark on purpose ("it's the book"), but
   .annual-mock__brand / __line / __year / __sub all read from theme variables
   (--text, --text-mute, --gold), so in light mode their ink flips dark and
   disappears against the still-dark cover. Pin them to fixed light-on-dark
   values instead of following the theme. */
[data-theme="light"] .annual-mock__brand {
  color: #F4EFE7;
}
[data-theme="light"] .annual-mock__brand em {
  color: #ADA69A;
}
[data-theme="light"] .annual-mock__line {
  color: #806A1F;
}
[data-theme="light"] .annual-mock__year {
  color: #ADA69A;
  border-top-color: rgba(221, 208, 170, 0.3);
  border-bottom-color: rgba(221, 208, 170, 0.3);
}
[data-theme="light"] .annual-mock__sub {
  color: #ADA69A;
}

/* Footer base text — make sure the colophon is readable in light */
[data-theme="light"] .footer__base { color: var(--text-mute); }
[data-theme="light"] .footer__tag,
[data-theme="light"] .footer__tag-small { color: var(--text-mute); }

/* Visiting page — the gift CTA block was too pale; deepen its surface in light */
[data-theme="light"] .visit-gift {
  background: #ECE3CA;
}
[data-theme="light"] .visit-capture {
  background: #FBF6E8;
}
[data-theme="light"] .visit-capture__row input {
  background: #FFFFFF;
}

/* Visit-card body cards — ensure they sit clearly on the page in light mode */
[data-theme="light"] .visit-card {
  background: #FBF6E8;
  border-color: rgba(64, 52, 24, 0.16);
}
[data-theme="light"] .visit-day { background: #FBF6E8; border-color: rgba(64, 52, 24, 0.16); }
[data-theme="light"] .visiting-moment { background: #FBF6E8; border-color: rgba(64, 52, 24, 0.16); border-left-color: var(--gold); }

/* Section--lift was a darker stripe in dark mode; needs to be a darker cream in light */
[data-theme="light"] .section--lift {
  background: linear-gradient(180deg, #ECE3CA 0%, #F4EDDB 100%);
}

/* ============================================================
   Nav filter pill — sage-green accent for the dietary/health
   hub. Signals "this matters; this is structural."
   ============================================================ */
.nav__filter {
  border: 1px solid var(--status-go);
  background: transparent;
  color: var(--status-go) !important;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 6px 14px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease, box-shadow 200ms ease, transform 180ms ease;
  position: relative;
}
.nav__filter::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--status-go);
  box-shadow: 0 0 0 0 var(--status-go-glow);
  animation: nav-filter-pulse 2.6s ease-in-out infinite;
}
@keyframes nav-filter-pulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--status-go-glow); }
  50%      { box-shadow: 0 0 0 5px transparent; }
}
.nav__filter:hover {
  background: rgba(127, 176, 105, 0.10);
  border-color: var(--status-go);
  box-shadow: 0 0 16px var(--status-go-glow);
  transform: translateY(-1px);
}
[data-theme="light"] .nav__filter:hover {
  background: rgba(79, 125, 44, 0.10);
}
@media (prefers-reduced-motion: reduce) {
  .nav__filter::before { animation: none; }
}

/* ============================================================
   Filters page (filters.html) — sage-green editorial treatment
   for the health/dietary hub. Parallel structure to travelers.html
   but health-coded throughout.
   ============================================================ */

/* --- Hero ----------------------------------------------------- */
.filter-hero {
  padding: clamp(80px, 13vh, 168px) 0 clamp(48px, 8vh, 96px);
  position: relative;
  overflow: hidden;
}
.filter-hero__eyebrow {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--status-go);
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 22px;
}
.filter-hero__eyebrow::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--status-go);
  box-shadow: 0 0 0 0 var(--status-go-glow);
  animation: nav-filter-pulse 2.6s ease-in-out infinite;
}
.filter-hero__hed {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(40px, 6.6vw, 76px);
  line-height: 1.04;
  letter-spacing: -0.012em;
  margin: 0 0 26px;
  color: var(--text);
  max-width: 920px;
}
.filter-hero__hed em {
  font-style: italic;
  color: var(--status-go);
  font-weight: 300;
}
.filter-hero__dek {
  font-family: var(--serif);
  font-size: clamp(18px, 2.2vw, 23px);
  line-height: 1.55;
  color: var(--text-soft);
  max-width: 760px;
  margin: 0 0 32px;
}
.filter-hero__dek strong { color: var(--text); font-weight: 400; font-style: normal; }

.filter-hero__strip {
  display: flex;
  flex-wrap: wrap;
  gap: 24px 40px;
  align-items: center;
  margin-top: 36px;
  padding-top: 28px;
  border-top: 1px solid var(--rule);
}
.filter-hero__strip-item { display: flex; flex-direction: column; gap: 4px; }
.filter-hero__strip-k {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.filter-hero__strip-v {
  font-family: var(--serif);
  font-size: 17px;
  color: var(--text);
}
.filter-hero__strip-v strong { color: var(--status-go); font-style: normal; }

/* --- Filter cards grid ---------------------------------------- */
.filter-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
  margin-top: 36px;
}
@media (max-width: 880px) { .filter-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .filter-grid { grid-template-columns: 1fr; } }

.filter-card {
  background: var(--bg-lift);
  border: 1px solid var(--rule);
  padding: 22px 22px 20px;
  border-radius: 3px;
  display: flex;
  flex-direction: column;
  position: relative;
  overflow: hidden;
  transition: transform 240ms ease, border-color 240ms ease, background-color 280ms ease;
}
.filter-card::before {
  content: "";
  position: absolute;
  top: 0; left: 0; bottom: 0;
  width: 2px;
  background: var(--rule);
  transition: background 240ms ease;
}
.filter-card:hover {
  transform: translateY(-2px);
  border-color: rgba(127, 176, 105, 0.30);
}
.filter-card--medical::before { background: linear-gradient(180deg, var(--status-go), transparent); }
.filter-card--religious::before { background: linear-gradient(180deg, var(--gold), transparent); }
.filter-card--dietary::before { background: linear-gradient(180deg, var(--gold-deep), transparent); }

.filter-card__cohort {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-bottom: 8px;
}
.filter-card--medical .filter-card__cohort { color: var(--status-go); }
.filter-card--religious .filter-card__cohort { color: var(--gold); }
.filter-card--dietary .filter-card__cohort { color: var(--gold-deep); }
[data-theme="light"] .filter-card--religious .filter-card__cohort,
[data-theme="light"] .filter-card--dietary .filter-card__cohort { color: var(--gold); }

.filter-card__name {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 22px;
  line-height: 1.20;
  color: var(--text);
  margin: 0 0 10px;
}
.filter-card__body {
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--text-soft);
  margin: 0 0 14px;
}
.filter-card__link {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
  text-decoration: none;
  border-top: 1px dashed var(--rule);
  padding-top: 12px;
  margin-top: auto;
  transition: color 200ms ease;
}
.filter-card--medical .filter-card__link { color: var(--status-go); }
.filter-card__link:hover { color: var(--text); }
.filter-card--medical .filter-card__link:hover { color: var(--text); }

/* --- Verification flow (4-step) ------------------------------- */
.filter-flow {
  list-style: none;
  padding: 0;
  margin: 32px 0 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 18px;
  counter-reset: filter-flow;
}
.filter-flow__step {
  display: grid;
  grid-template-columns: 64px 1fr;
  gap: 18px;
  align-items: start;
  padding: 18px 0;
  border-bottom: 1px solid var(--rule);
  position: relative;
}
.filter-flow__step:last-child { border-bottom: none; }
.filter-flow__n {
  font-family: var(--mono);
  font-size: 22px;
  font-weight: 500;
  color: var(--status-go);
  letter-spacing: 0.06em;
  align-self: start;
  padding-top: 2px;
}
.filter-flow__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 20px;
  line-height: 1.25;
  color: var(--text);
  margin: 0 0 6px;
}
.filter-flow__copy {
  font-size: 15.5px;
  line-height: 1.6;
  color: var(--text-soft);
  margin: 0;
}

/* ============================================================
   Alive details — interactive touches that make the site
   feel typeset on the fly rather than rendered.
   ============================================================ */

/* --- Icon stroke-draw on scroll --------------------------------
   When a card with an SVG icon enters the viewport (.is-in via
   IntersectionObserver), the stroke "draws" itself into existence.
   Like a fountain-pen sketch. Cascade is staggered by data-delay.
   --------------------------------------------------------------- */
.visit-card__icon svg *,
.filter-card .filter-card__icon svg * {
  stroke-dasharray: 600;
  stroke-dashoffset: 600;
  fill-opacity: 0;
  transition: stroke-dashoffset 1.1s cubic-bezier(.22, .61, .36, 1),
              fill-opacity 0.6s ease 0.7s;
}
.visit-card.is-in .visit-card__icon svg *,
.filter-card.is-in .filter-card__icon svg * {
  stroke-dashoffset: 0;
  fill-opacity: 1;
}
/* Stagger draw across cards by their data-delay attribute */
.visit-card.is-in[data-delay="1"] .visit-card__icon svg * { transition-delay: 0.18s, 0.95s; }
.visit-card.is-in[data-delay="2"] .visit-card__icon svg * { transition-delay: 0.36s, 1.10s; }
.visit-card.is-in[data-delay="3"] .visit-card__icon svg * { transition-delay: 0.54s, 1.30s; }
.visit-card.is-in[data-delay="4"] .visit-card__icon svg * { transition-delay: 0.72s, 1.50s; }
.visit-card.is-in[data-delay="5"] .visit-card__icon svg * { transition-delay: 0.90s, 1.70s; }

@media (prefers-reduced-motion: reduce) {
  .visit-card__icon svg *,
  .filter-card .filter-card__icon svg * {
    stroke-dasharray: none;
    stroke-dashoffset: 0;
    fill-opacity: 1;
    transition: none;
  }
}

/* --- Cursor-following warm spotlight ---------------------------
   Restricted to the "Three perfect days" itinerary on travelers.
   Soft gold radial that follows mouseposition. Disabled on touch.
   --------------------------------------------------------------- */
.day-spotlight-host {
  position: relative;
  isolation: isolate;
}
.day-spotlight {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  opacity: 0;
  transition: opacity 600ms ease;
  background: radial-gradient(
    420px circle at var(--spot-x, 50%) var(--spot-y, 50%),
    rgba(221, 208, 170, 0.10) 0%,
    rgba(221, 208, 170, 0.04) 30%,
    transparent 70%
  );
  mix-blend-mode: screen;
}
[data-theme="light"] .day-spotlight {
  background: radial-gradient(
    420px circle at var(--spot-x, 50%) var(--spot-y, 50%),
    rgba(128, 106, 31, 0.08) 0%,
    rgba(128, 106, 31, 0.03) 30%,
    transparent 70%
  );
  mix-blend-mode: multiply;
}
.day-spotlight-host:hover .day-spotlight,
.day-spotlight-host.is-active .day-spotlight {
  opacity: 1;
}
.day-spotlight-host > * { position: relative; z-index: 1; }

/* Touch devices: no cursor, no spotlight */
@media (hover: none) {
  .day-spotlight { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .day-spotlight { display: none; }
}

/* --- Editorial reading-progress line ---------------------------
   1px gold line beneath topbar; fills L → R as user scrolls.
   Quiet, classic. Sits in the topbar's bottom-border slot.
   --------------------------------------------------------------- */
.read-progress {
  position: fixed;
  top: 64px;            /* sits just below the topbar */
  left: 0;
  height: 1px;
  width: var(--read-progress, 0%);
  background: linear-gradient(90deg, var(--gold), var(--gold-deep));
  box-shadow: 0 0 6px var(--gold-glow);
  z-index: 31;
  pointer-events: none;
  transition: width 0.12s linear;
  will-change: width;
  opacity: 0.85;
}
@media (max-width: 520px) {
  .read-progress { top: 56px; }
}
@media (prefers-reduced-motion: reduce) {
  .read-progress { transition: none; }
}

/* ============================================================
   Lifetime tile — compact offer card with expandable details.
   Replaces the previous sprawling 2-column Lifetime layout
   on 2026-05-24 per the "core offer collapsed, details
   expand inline" feedback. Designed for above-the-fold price
   + benefits visibility.
   ============================================================ */
.lifetime-tile {
  max-width: 880px;
  margin: 0 auto;
  background: var(--bg-lift);
  border: 1px solid var(--gold);
  border-radius: 4px;
  padding: clamp(28px, 4vw, 56px);
  position: relative;
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.20), 0 8px 32px rgba(0, 0, 0, 0.18);
  transition: border-color 280ms ease, background-color 280ms ease, box-shadow 280ms ease;
}
[data-theme="light"] .lifetime-tile {
  background: #FBF6E8;
  box-shadow: 0 1px 0 rgba(80, 60, 20, 0.06), 0 8px 32px rgba(80, 60, 20, 0.12);
}

/* --- Collapsed header --------------------------------------- */
.lifetime-tile__head {
  display: flex;
  flex-direction: column;
}
.lifetime-tile__head .eyebrow { margin-bottom: 18px; }

.lifetime-tile__hed {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(32px, 4.5vw, 50px);
  line-height: 1.06;
  letter-spacing: -0.01em;
  color: var(--text);
  margin: 0 0 24px;
}
.lifetime-tile__hed em { font-style: italic; color: var(--gold); font-weight: 300; }

/* Subline under the headline — added 2026-05-31 for clarity rewrite */
.lifetime-tile__sub {
  font-family: var(--serif);
  font-size: clamp(16px, 1.7vw, 18.5px);
  line-height: 1.55;
  color: var(--text-mute);
  max-width: 580px;
  margin: 14px auto 26px;
  text-align: center;
}
.lifetime-tile__sub em {
  font-style: italic;
  color: var(--text);
  font-weight: 400;
}

/* Price block — anchor of the offer */
.lifetime-tile__price {
  display: flex;
  align-items: baseline;
  gap: 16px;
  padding: 16px 0 20px;
  border-bottom: 1px solid var(--rule);
  margin-bottom: 24px;
  flex-wrap: wrap;
}
.lifetime-tile__amount {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(38px, 5vw, 54px);
  line-height: 1;
  color: var(--gold);
  letter-spacing: -0.02em;
}
.lifetime-tile__note {
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}

/* Perk bullets */
.lifetime-tile__perks {
  list-style: none;
  padding: 0;
  margin: 0 0 28px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.lifetime-tile__perks li {
  position: relative;
  padding-left: 24px;
  font-size: 15.5px;
  line-height: 1.55;
  color: var(--text-soft);
}
.lifetime-tile__perks li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.55em;
  width: 14px;
  height: 1px;
  background: var(--gold);
}
.lifetime-tile__perks li strong {
  color: var(--text);
  font-weight: 500;
  font-family: var(--serif);
  font-size: 16.5px;
}

/* CTA row */
.lifetime-tile__cta-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px 20px;
  margin-bottom: 28px;
}
.lifetime-tile__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: var(--gold);
  color: var(--bg);
  font-family: var(--sans);
  font-weight: 500;
  font-size: 15.5px;
  letter-spacing: 0.01em;
  padding: 14px 24px;
  border-radius: 2px;
  text-decoration: none;
  transition: transform 200ms ease, box-shadow 200ms ease, background-color 200ms ease;
}
.lifetime-tile__cta:hover {
  transform: translateY(-1px);
  background: var(--gold-deep);
  box-shadow: 0 6px 20px var(--gold-glow);
}
.lifetime-tile__expand {
  background: transparent;
  border: 1px solid var(--rule);
  color: var(--text-soft);
  font-family: var(--mono);
  font-size: 11.5px;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  padding: 12px 18px;
  border-radius: 2px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: border-color 200ms ease, color 200ms ease, background-color 200ms ease;
}
.lifetime-tile__expand:hover {
  border-color: var(--gold);
  color: var(--gold);
}
.lifetime-tile__expand-icon {
  transition: transform 280ms cubic-bezier(.22,.61,.36,1);
}
.lifetime-tile[data-expanded="true"] .lifetime-tile__expand-icon {
  transform: rotate(180deg);
}

/* Meta strip */
.lifetime-tile__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 16px 36px;
  padding-top: 20px;
  border-top: 1px solid var(--rule);
}
.lifetime-tile__meta .item {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.lifetime-tile__meta .k {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.lifetime-tile__meta .v {
  font-family: var(--serif);
  font-size: 17px;
  color: var(--text);
}
.lifetime-tile__meta .v em {
  font-style: italic;
  color: var(--gold);
}

/* --- Expand animation -------------------------------------- */
.lifetime-tile__detail {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 0.55s cubic-bezier(.22,.61,.36,1);
}
.lifetime-tile__detail-inner {
  overflow: hidden;
  opacity: 0;
  transition: opacity 0.35s ease;
}
.lifetime-tile[data-expanded="true"] .lifetime-tile__detail {
  grid-template-rows: 1fr;
}
.lifetime-tile[data-expanded="true"] .lifetime-tile__detail-inner {
  opacity: 1;
  transition-delay: 0.12s;
}
@media (prefers-reduced-motion: reduce) {
  .lifetime-tile__detail { transition: none; }
  .lifetime-tile__detail-inner { transition: none; }
}

/* --- Expanded sections ------------------------------------- */
.lifetime-tile__divider {
  border: none;
  height: 1px;
  background: var(--rule);
  margin: 28px 0 0;
}
.lifetime-tile__section {
  padding: 28px 0;
  border-bottom: 1px dashed var(--rule);
}
.lifetime-tile__section:last-child { border-bottom: none; }
.lifetime-tile__section .eyebrow {
  display: block;
  margin-bottom: 12px;
  color: var(--gold);
}
.lifetime-tile__section p {
  font-size: 16px;
  line-height: 1.65;
  color: var(--text-soft);
  margin: 0;
}
.lifetime-tile__section p + p { margin-top: 14px; }
.lifetime-tile__section p strong {
  color: var(--text);
  font-weight: 500;
}
.lifetime-tile__section p em {
  color: var(--gold);
  font-style: italic;
}

/* Refund section — visually softer */
.lifetime-tile__section--refund p {
  font-style: italic;
  color: var(--text-mute);
  font-size: 14.5px;
}
.lifetime-tile__section--refund p strong,
.lifetime-tile__section--refund p em {
  font-style: normal;
}

/* Gift section — slight emphasis */
.lifetime-tile__section--gift p {
  font-size: 16.5px;
}

/* Patron list inside expanded tile */
.lifetime-tile__patron-lede {
  font-size: 16.5px;
  margin-bottom: 16px;
}
.lifetime-tile__patron-list {
  list-style: none;
  padding: 0;
  margin: 16px 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.lifetime-tile__patron-list li {
  display: flex;
  align-items: baseline;
  gap: 12px;
  font-size: 15px;
  line-height: 1.5;
  color: var(--text-soft);
}
.lifetime-tile__patron-foot {
  margin-top: 14px;
  font-size: 14px;
  color: var(--text-mute);
}

/* Reserve form inside expanded tile */
.lifetime-tile__section--reserve .reserve {
  background: transparent;
  border: none;
  padding: 0;
  margin: 0;
}

/* Responsive — tighten on mobile */
@media (max-width: 640px) {
  .lifetime-tile { padding: 24px 22px; }
  .lifetime-tile__cta-row {
    flex-direction: column;
    align-items: stretch;
  }
  .lifetime-tile__cta { justify-content: center; }
  .lifetime-tile__expand { justify-content: center; }
  .lifetime-tile__meta {
    grid-template-columns: 1fr 1fr;
    display: grid;
    gap: 16px;
  }
}

/* ============================================================
   Hero pricing-ladder strip — sets the free/paid expectation
   immediately below the CTAs. Free, forever · Plus · Priority
   · Lifetime $159 once. Editorial separators, no card chrome.
   ============================================================ */
.hero__ladder {
  margin: 24px 0 0;
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.10em;
  text-transform: uppercase;
  color: var(--text-mute);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 14px;
}
.hero__ladder-tier {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--text-soft);
}
.hero__ladder-tier strong {
  color: var(--text);
  font-weight: 600;
  letter-spacing: 0.14em;
}
.hero__ladder-tier--life strong { color: var(--gold); }
.hero__ladder-sep {
  color: var(--text-dim);
  font-size: 14px;
  letter-spacing: 0;
}
.hero__ladder-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--status-go);
  box-shadow: 0 0 0 0 var(--status-go-glow);
  animation: nav-filter-pulse 2.6s ease-in-out infinite;
}
.hero__ladder-dot--free { background: var(--status-go); }

@media (max-width: 640px) {
  .hero__ladder {
    font-size: 11px;
    gap: 6px 10px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .hero__ladder-dot { animation: none; }
}

/* Gift CTA — secondary outline-gold variant of the primary CTA.
   Identical typography to the primary "Become" CTA (Geist, 500,
   15.5px). Only background/border/color differ. The slight
   contrast difference is accepted as the cost of the visual
   hierarchy. (Tried weight 600 — read as "childish.") */
.lifetime-tile__cta--gift {
  background: transparent !important;
  border: 1px solid var(--gold);
  color: var(--gold) !important;
  font-family: var(--sans);
  font-weight: 500;
  font-size: 15.5px;
  letter-spacing: 0.01em;
  line-height: 1.2;
}
.lifetime-tile__cta--gift:hover {
  background: var(--gold) !important;
  color: var(--bg) !important;
  box-shadow: 0 6px 20px var(--gold-glow);
}

/* Small editorial foot-note under the CTA row that pitches the dual path */
.lifetime-tile__cta-foot {
  margin: -6px 0 28px;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--text-mute);
  font-style: italic;
}
.lifetime-tile__cta-foot em {
  font-style: italic;
  color: var(--text-soft);
}

@media (max-width: 640px) {
  .lifetime-tile__cta--gift { justify-content: center; }
}

/* Plus rescue link — sits below the Lifetime tile meta strip,
   catches users who balk at $159 with the Plus tier as fallback */
.lifetime-tile__rescue {
  margin: 18px 0 0;
  padding-top: 18px;
  border-top: 1px dashed var(--rule);
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--text-mute);
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
}
.lifetime-tile__rescue-k {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.lifetime-tile__rescue-link {
  color: var(--gold);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: border-color 200ms ease, color 200ms ease;
}
.lifetime-tile__rescue-link:hover {
  border-bottom-color: var(--gold);
  color: var(--text);
}

/* ============================================================
   Campus strip — small editorial nod for DMV student traction
   Sits between the differentiator grid and the price-range band
   ============================================================ */
.campus-strip {
  padding: 28px 0 36px;
}
.campus-strip__inner {
  max-width: 920px;
  margin: 0 auto;
  text-align: center;
  padding: 24px 24px;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.campus-strip__eyebrow {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 14px;
}
.campus-strip__schools {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 300;
  font-size: 17px;
  line-height: 1.6;
  color: var(--text);
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: baseline;
  gap: 4px 10px;
  margin-bottom: 14px;
}
.campus-strip__schools span[aria-hidden="true"] {
  color: var(--text-dim);
  font-style: normal;
}
.campus-strip__copy {
  margin: 0 auto;
  max-width: 720px;
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--text-soft);
}
.campus-strip__copy em {
  font-style: italic;
  color: var(--text-mute);
}

@media (max-width: 560px) {
  .campus-strip__schools { font-size: 15px; gap: 4px 8px; }
  .campus-strip__copy { font-size: 13.5px; }
}

/* ============================================================
   Price-range section additions — heading + audience captions
   per the "from students to expense accounts" reframe 2026-05-25
   ============================================================ */
.price-range__hed {
  text-align: center;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(28px, 3.8vw, 44px);
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--text);
  margin: 0 auto clamp(28px, 4vw, 44px);
  max-width: 760px;
}
.price-range__hed em {
  font-style: italic;
  color: var(--gold);
  font-weight: 300;
}

/* Tiny audience caption under each price tier — student → expense account */
.price-range__who {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-dim);
  text-align: center;
  white-space: nowrap;
  margin-top: 2px;
}
@media (max-width: 720px) {
  .price-range__who { text-align: left; }
}

/* ============================================================
   Atlas request capture — "Don't see your city or campus?"
   Demand-signal capture below the Atlas teaser.
   ============================================================ */
.atlas-request {
  max-width: 680px;
  margin: 32px auto 0;
  padding: 24px 24px 22px;
  background: var(--bg-lift);
  border: 1px solid var(--rule);
  border-radius: 3px;
  transition: background-color 280ms ease, border-color 280ms ease;
}
.atlas-request__eyebrow {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 8px;
}
.atlas-request__title {
  font-family: var(--serif);
  font-weight: 300;
  font-size: 20px;
  line-height: 1.3;
  color: var(--text);
  margin: 0 0 16px;
}
.atlas-request__title em {
  font-style: italic;
  color: var(--gold);
}
.atlas-request__row {
  display: grid;
  grid-template-columns: 1.4fr 1fr auto;
  gap: 8px;
}
.atlas-request__row input {
  background: var(--bg);
  border: 1px solid var(--rule);
  color: var(--text);
  font-family: var(--sans);
  font-size: 14px;
  padding: 11px 14px;
  border-radius: 2px;
  transition: border-color 200ms ease, background-color 280ms ease, color 280ms ease;
  min-width: 0;
}
.atlas-request__row input:focus {
  outline: none;
  border-color: var(--gold);
}
.atlas-request__row button {
  background: var(--gold);
  color: var(--bg);
  border: 1px solid var(--gold);
  font-family: var(--sans);
  font-weight: 500;
  font-size: 14px;
  padding: 11px 18px;
  border-radius: 2px;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color 200ms ease, transform 200ms ease;
}
.atlas-request__row button:hover {
  background: var(--gold-deep);
  transform: translateY(-1px);
}
.atlas-request__small {
  margin: 12px 0 0;
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--text-mute);
  font-style: italic;
}
.atlas-request__small .gold {
  color: var(--gold);
  font-style: normal;
}
.atlas-request__thanks {
  display: none;
  margin-top: 12px;
  font-size: 14px;
  color: var(--status-go);
  font-style: italic;
}
.atlas-request.is-submitted .atlas-request__row,
.atlas-request.is-submitted .atlas-request__small { display: none; }
.atlas-request.is-submitted .atlas-request__thanks { display: block; }

@media (max-width: 640px) {
  .atlas-request__row { grid-template-columns: 1fr; }
}

/* ============================================================
   Price-range audience spectrum — promoted from small eyebrow
   to anchored editorial banner (2026-05-25). Pulses subtly.
   ============================================================ */
.price-range__spectrum {
  margin: 0 auto clamp(16px, 2.5vw, 28px);
  text-align: center;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 10px 18px;
  font-family: var(--mono);
  font-size: clamp(15px, 1.8vw, 19px);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--text-soft);
  max-width: 920px;
}
.price-range__spectrum-line {
  white-space: nowrap;
  position: relative;
}
.price-range__spectrum-line--accent {
  color: var(--gold);
}
.price-range__spectrum-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 0 0 var(--gold-glow);
  animation: nav-filter-pulse 2.8s ease-in-out infinite;
  flex-shrink: 0;
}
.price-range__spectrum-dot:nth-of-type(2) { animation-delay: 0.6s; }
@media (prefers-reduced-motion: reduce) {
  .price-range__spectrum-dot { animation: none; }
}
@media (max-width: 560px) {
  .price-range__spectrum {
    font-size: 13px;
    letter-spacing: 0.12em;
    gap: 6px 12px;
  }
  .price-range__spectrum-line { font-size: inherit; }
}

/* ============================================================
   Site-wide caption legibility bump (2026-05-25)
   Mono caps are good aesthetic but were too tiny — bump base
   size + tighten letter-spacing slightly for readability without
   losing the editorial feel.
   ============================================================ */

/* Base eyebrow (mono caps) was 11-12px → bump to 12-13px,
   reduce letter-spacing from 0.18em → 0.14em for less stretch */
.eyebrow.eyebrow--mono {
  font-size: 12.5px;
  letter-spacing: 0.14em;
}

/* Specific small captions throughout the site */
.price-range__who          { font-size: 11px; letter-spacing: 0.14em; }
.price-range__dish         { font-size: clamp(12.5px, 1.2vw, 15px); }
.lifetime-tile__meta .k    { font-size: 11.5px; letter-spacing: 0.14em; }
.lifetime-tile__rescue-k   { font-size: 11.5px; letter-spacing: 0.14em; }
.visit-card__moment        { font-size: 11.5px; letter-spacing: 0.16em; }
.visit-card__feature       { font-size: 11.5px; letter-spacing: 0.14em; }
.visit-day__label          { font-size: 11.5px; letter-spacing: 0.16em; }
.visit-day__time           { font-size: 12px;   letter-spacing: 0.12em; }
.visit-day__foot           { font-size: 11.5px; letter-spacing: 0.14em; }
.visit-hero__strip-k       { font-size: 11.5px; letter-spacing: 0.14em; }
.visit-hero__eyebrow       { font-size: 12px;   letter-spacing: 0.18em; }
.filter-card__cohort       { font-size: 11px;   letter-spacing: 0.16em; }
.filter-card__link         { font-size: 11.5px; letter-spacing: 0.14em; }
.filter-flow__n            { font-size: 24px; }
.filter-hero__strip-k      { font-size: 11.5px; letter-spacing: 0.14em; }
.filter-hero__eyebrow      { font-size: 12px;   letter-spacing: 0.18em; }
.visit-health__eyebrow     { font-size: 12px;   letter-spacing: 0.16em; }
.visiting-moment__tag      { font-size: 11.5px; letter-spacing: 0.14em; }
.lifetime-preview__caption { font-size: 14px; line-height: 1.5; }
.atlas-request__eyebrow    { font-size: 11.5px; letter-spacing: 0.14em; }
.campus-strip__eyebrow     { font-size: 11.5px; letter-spacing: 0.18em; }

/* Mobile: anything 11px or under should bump to 12px so it doesn't
   become unreadable on a phone. Note: iOS Safari auto-bumps fonts
   under 16px in form fields — that's handled separately. */
@media (max-width: 640px) {
  .price-range__who,
  .filter-card__cohort,
  .visit-card__moment,
  .visit-day__label,
  .visit-day__foot,
  .visit-hero__strip-k,
  .filter-hero__strip-k,
  .lifetime-tile__meta .k,
  .lifetime-tile__rescue-k,
  .atlas-request__eyebrow,
  .visit-card__feature {
    font-size: 12px;
    letter-spacing: 0.12em;
  }
  /* Increase the gap so wrapped meta strips on mobile don't crush each other */
  .lifetime-tile__meta { gap: 18px 28px; }
  .visit-hero__strip { gap: 18px 28px; }
  .filter-hero__strip { gap: 18px 28px; }
}

/* ============================================================
   Legibility bump (2026-07-12) — homepage pass. Plain (non-mono)
   section eyebrows ("№ 01 · However you eat", "Not another food
   app", etc.) were still sitting at the original 10.5px/0.24em —
   the 2026-05-25 bump above only ever touched the MONO variant
   (.eyebrow.eyebrow--mono, line ~8024). Also brightened two small
   italic "contrast" captions on the homepage that were sized and
   colored like fine print despite reading as real body copy. All
   three targets are naturally-wrapping inline/paragraph text with
   no fixed-width ancestor, so a size bump cannot cause overflow —
   clamp() is used anyway so the smallest phones stay closest to
   the original size while desktop gets the full increase. Colors
   route through the existing --text-soft token (not a hardcoded
   hex) so light mode — already tuned separately — is unaffected.
   ============================================================ */
.eyebrow {
  font-size: clamp(11px, 1.6vw, 11.5px);
  letter-spacing: 0.2em;
}
.eyebrow--mute {
  color: var(--text-soft); /* was var(--text-mute) — brighter, still secondary vs. full-gold .eyebrow */
}
.diff__contrast {
  font-size: clamp(14.5px, 1.6vw, 15.5px);
  color: var(--text-soft); /* was var(--text-mute) */
}
.query-stack__contrast {
  font-size: clamp(15.5px, 1.7vw, 16px);
  color: var(--text-soft); /* was var(--text-mute) */
}

/* ============================================================
   Mobile fix: price-range tier should stack price+dish on one
   line, audience caption on its own line below — was clipping
   "ON THE EXPENSE ACCOUNT" on phones (2026-05-25).
   ============================================================ */
@media (max-width: 720px) {
  .price-range__tier {
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    min-width: 100%;
    padding-bottom: 14px;
    border-bottom: 1px dashed var(--rule);
  }
  .price-range__tier:last-child { border-bottom: none; padding-bottom: 0; }
  .price-range__scale {
    flex-direction: column;
    align-items: stretch;
    gap: 16px;
  }
  .price-range__price {
    display: inline-block;
    margin-right: 14px;
    vertical-align: baseline;
  }
  .price-range__dish {
    display: inline;
    white-space: normal;
  }
  .price-range__who {
    display: block;
    margin-top: 4px;
    white-space: normal;
    text-align: left;
  }
}

/* ============================================================
   Hero CTA — sage-green "Explore filters" variant
   Sits between the gold App Store CTA and the gold-outline Lifetime
   CTA. Three paths visible above the fold: download / filter / buy.
   ============================================================ */
.cta--filter {
  border: 1px solid var(--status-go);
  background: transparent;
  color: var(--status-go) !important;
}
.cta--filter:hover {
  background: var(--status-go);
  color: var(--bg) !important;
  transform: translateY(-1px);
  box-shadow: 0 0 16px var(--status-go-glow);
}
.cta--filter .cta__copy .small { color: var(--status-go); opacity: 0.85; }
.cta--filter:hover .cta__copy .small { color: var(--bg); opacity: 0.85; }
[data-theme="light"] .cta--filter:hover {
  box-shadow: 0 0 18px rgba(79, 125, 44, 0.30);
}

/* ============================================================
   Hamburger menu — mobile nav drawer (2026-05-25)
   Desktop unchanged. Mobile collapses to logo + 3-line button;
   tapping opens a full-width slide-down panel with all nav links.
   ============================================================ */

.nav__toggle {
  display: none; /* hidden on desktop */
  background: transparent;
  border: 1px solid var(--rule);
  color: var(--text);
  width: 42px;
  height: 42px;
  border-radius: 4px;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: border-color 200ms ease, background-color 200ms ease;
  -webkit-tap-highlight-color: transparent;
}
.nav__toggle:hover { border-color: var(--gold); }
.nav__toggle:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.nav__toggle-bar {
  position: relative;
  width: 18px;
  height: 2px;
  background: var(--text);
  transition: background-color 200ms ease, transform 280ms ease, opacity 200ms ease;
}
.nav__toggle-bar::before,
.nav__toggle-bar::after {
  content: "";
  position: absolute;
  left: 0;
  width: 18px;
  height: 2px;
  background: var(--text);
  transition: transform 280ms ease, opacity 200ms ease, background-color 200ms ease;
}
.nav__toggle-bar::before { top: -6px; }
.nav__toggle-bar::after  { top:  6px; }

/* Open state — turn into an X */
[data-nav-open="true"] .nav__toggle-bar { background: transparent; }
[data-nav-open="true"] .nav__toggle-bar::before { transform: translateY(6px) rotate(45deg); }
[data-nav-open="true"] .nav__toggle-bar::after  { transform: translateY(-6px) rotate(-45deg); }

/* Drawer breakpoint — show toggle, hide inline nav, build the drawer.
   2026-07-15 (B-nav-band): raised 880 -> 1023. The inline desktop nav
   needs 1017px of topbar (brand 109 + pills 288 + 12 + nav 634 + shell
   padding); below ~1024 it overflowed the viewport and every page
   scrolled horizontally in the 881–1023 band (136px of overflow at
   881px, measured). Only the DRAWER rules moved. The `.topbar__quick`
   pill restyle below deliberately stays at <=880 — see the note there.
   The ~20 unrelated `max-width: 880px` content-grid rules elsewhere in
   this file are independent and were NOT touched. */
@media (max-width: 1023px) {
  .nav__toggle { display: inline-flex; }

  .nav {
    position: absolute;
    top: 64px;
    left: 0;
    right: 0;
    flex-direction: column;
    align-items: stretch;
    background: var(--bg);
    border-bottom: 1px solid var(--rule);
    padding: 20px clamp(20px, 5vw, 32px);
    gap: 12px;
    z-index: 29;
    /* Closed state */
    transform: translateY(-12px);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: transform 280ms cubic-bezier(.22, .61, .36, 1),
                opacity 220ms ease,
                visibility 0s linear 280ms,
                background-color 280ms ease;
    box-shadow: 0 16px 32px rgba(0, 0, 0, 0.35);
  }

  [data-nav-open="true"] .nav {
    transform: translateY(0);
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transition: transform 320ms cubic-bezier(.22, .61, .36, 1),
                opacity 240ms ease,
                visibility 0s linear 0s,
                background-color 280ms ease;
  }

  .nav a {
    padding: 14px 4px;
    font-size: 16px;
    border-bottom: 1px solid var(--rule);
    text-align: left;
  }
  .nav a:last-child { border-bottom: none; }
}

/* Touch-size the topbar quick pills. NOTE (2026-07-15): the comment here
   used to read "Pills in the drawer" — but `.nav` contains no pills (they
   live in `.topbar__quick`), so these global selectors have only ever hit
   the topbar cluster. Verified: `.nav .nav__primary, .nav .nav__cta,
   .nav .nav__filter` matches 0 elements at every width. Left at <=880 on
   purpose: it is what gives the pills a ~45px touch target on phones and
   tablets, and it must NOT follow the drawer up to 1023 or the pills
   balloon on laptops. The `!important` here still beats the <=560/<=380
   `.topbar__quick` rules below — that is a live defect, see those rules. */
@media (max-width: 880px) {
  .nav__primary, .nav__cta, .nav__filter {
    text-align: center;
    padding: 14px 18px !important;
    font-size: 14px !important;
    border-radius: 4px !important;
  }
  .nav__filter::before { display: none; }
}

/* Prevent body scroll when drawer is open */
@media (max-width: 1023px) {
  body[data-nav-open="true"] { overflow: hidden; }
}

/* ============================================================
   Topbar quick pills (2026-05-25) — always-visible action
   cluster: Filters · Lifetime · Free. Sits between brand and
   the hamburger toggle. Stays visible on mobile so the 3
   primary conversion paths are never more than a tap away.
   ============================================================ */
.topbar__quick {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
  margin-right: 12px;
}
.topbar__quick .nav__filter,
.topbar__quick .nav__primary,
.topbar__quick .nav__cta {
  font-size: 11.5px;
  letter-spacing: 0.10em;
  padding: 8px 14px;
}
.topbar__quick .nav__filter::before {
  width: 5px;
  height: 5px;
}

/* Tighter pills on phone screens — must fit alongside brand + hamburger */
@media (max-width: 560px) {
  .topbar__quick { gap: 5px; margin-right: 6px; }
  .topbar__quick .nav__filter,
  .topbar__quick .nav__primary,
  .topbar__quick .nav__cta {
    font-size: 10.5px;
    letter-spacing: 0.08em;
    padding: 7px 9px;
  }
  .topbar__quick .nav__filter { padding-left: 8px; }
  .topbar__quick .nav__filter::before { width: 4px; height: 4px; gap: 5px; }
  /* Brand wordmark shrinks slightly so the pills have breathing room */
  .brand__word { font-size: 16px; }
}
@media (max-width: 380px) {
  .topbar__quick .nav__filter,
  .topbar__quick .nav__primary,
  .topbar__quick .nav__cta {
    font-size: 10px;
    padding: 6px 7px;
  }
}

/* Backdrop for tap-outside-to-close — sits below the drawer */
.nav-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.40);
  opacity: 0;
  visibility: hidden;
  z-index: 28;
  transition: opacity 220ms ease, visibility 0s linear 220ms;
}
[data-nav-open="true"] .nav-backdrop {
  opacity: 1;
  visibility: visible;
  transition: opacity 220ms ease, visibility 0s linear 0s;
}
[data-theme="light"] .nav-backdrop { background: rgba(80, 60, 20, 0.18); }
/* Backdrop is drawer-only — must track the drawer breakpoint (1023/1024). */
@media (min-width: 1024px) {
  .nav-backdrop { display: none; }
}

/* ============================================================
   Mobile: wrap pills to a second row below brand + hamburger.
   At <560px three pills + brand + hamburger can't fit in one
   row without clipping. Two-row pattern keeps everything full-
   width and tappable. (2026-05-25)
   ============================================================ */
@media (max-width: 560px) {
  .topbar { height: auto; }
  .topbar__inner {
    flex-wrap: wrap;
    height: auto;
    padding-top: 10px;
    padding-bottom: 10px;
    row-gap: 10px;
  }

  /* Row 1: brand left, hamburger right */
  .brand { order: 1; }
  .nav__toggle { order: 2; margin-left: auto; }

  /* Row 2: 3 pills full-width, evenly split */
  .topbar__quick {
    order: 3;
    flex-basis: 100%;
    width: 100%;
    margin: 0;
    padding-top: 10px;
    border-top: 1px solid var(--rule);
    justify-content: space-between;
    gap: 6px;
  }
  .topbar__quick .nav__filter,
  .topbar__quick .nav__primary,
  .topbar__quick .nav__cta {
    flex: 1;
    text-align: center;
    justify-content: center;
    font-size: 11px;
    letter-spacing: 0.10em;
    padding: 9px 4px;
  }

  /* Drawer sits below the now-taller two-row topbar.
     Using top: 100% lets it adapt regardless of exact height. */
  .nav { top: 100%; }

  /* Reading-progress line follows the topbar bottom too */
  .read-progress { top: auto; bottom: auto; }
}

/* Same drawer + progress positioning for the in-between range */
@media (max-width: 880px) and (min-width: 561px) {
  /* keep existing 64px top */
}

/* Move the read-progress line to a more robust position on mobile */
@media (max-width: 560px) {
  .read-progress {
    position: fixed;
    top: 0;
    /* Sits at the very top edge of viewport instead of fighting
       the variable-height topbar */
  }
}

/* ============================================================
   Auto-hide ONLY the pills row on scroll (mobile only).
   Brand + hamburger row stays sticky always so users always
   have a way back to nav and a visible brand anchor.
   2026-05-25 — revised after user feedback: brand row must
   stay put; pills row is the only thing that fades.
   ============================================================ */
@media (max-width: 880px) {
  .topbar__quick {
    transition: max-height 280ms cubic-bezier(.4, 0, .2, 1),
                opacity 220ms ease,
                padding 280ms cubic-bezier(.4, 0, .2, 1),
                margin 280ms cubic-bezier(.4, 0, .2, 1),
                border-color 280ms ease;
    will-change: max-height, opacity;
    overflow: hidden;
  }
  body[data-topbar-hidden="true"] .topbar__quick {
    max-height: 0 !important;
    opacity: 0;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    border-top-color: transparent !important;
    pointer-events: none;
  }
  /* Never hide while the drawer is open (everything must stay reachable) */
  body[data-nav-open="true"] .topbar__quick {
    max-height: 200px !important;
    opacity: 1 !important;
    pointer-events: auto !important;
  }
}
/* Give the pills row a sane max-height baseline for the transition to animate against */
@media (max-width: 560px) {
  .topbar__quick { max-height: 80px; }
}

/* ============================================================
   Reserve form INSIDE Lifetime tile — strip the decorative
   ::before line and the heavy card chrome (already nested in
   a styled section, doesn't need its own border/padding).
   2026-05-25 fix for "weird underline under NOT READY?" report.
   ============================================================ */
.lifetime-tile__section--reserve .reserve {
  background: transparent;
  border: none;
  padding: 0;
}
.lifetime-tile__section--reserve .reserve::before {
  display: none;
}

/* ============================================================
   Footer — defensive explicit display for mobile.
   List items + brand stack must stay vertical regardless of
   any flex inheritance bleeding from the topbar/drawer system.
   ============================================================ */
.footer__brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
}
.footer__col ul {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.footer__col li {
  display: list-item;
  margin-bottom: 0;       /* gap from .footer__col ul handles spacing */
  list-style: none;
}
.footer__col a {
  display: inline-block;  /* makes each link its own tappable line */
}

/* ============================================================
   Footer social icons (IG + TikTok)
   ============================================================ */
.footer__col--social .footer__social {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 4px;
}
.footer__social {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.social-link {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--text-soft);
  text-decoration: none;
  font-family: var(--serif);
  font-weight: 300;
  font-size: 15px;
  transition: color 200ms ease, transform 200ms ease;
}
.social-link svg {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}
.social-link:hover {
  color: var(--gold);
  transform: translateX(2px);
}
.social-link:hover svg { color: var(--gold); }

/* For pages with the inline horizontal footer__nav (atlas.html style),
   stack the social row below the nav so it sits cleanly. */
.footer__nav + .footer__social {
  margin-top: 18px;
  flex-direction: row;
  gap: 20px;
}

/* ============================================================
   Dish density heatmap — neighborhood-level coverage view.
   Lives on atlas.html as a more granular view than the city
   progress bars. Editorial editorial-grid layout, color-coded
   by density tier.
   ============================================================ */
.heatmap {
  margin-top: 36px;
}
.heatmap__legend {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px 22px;
  margin: 16px 0 28px;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-mute);
}
.heatmap__legend-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.heatmap__legend-swatch {
  width: 14px;
  height: 14px;
  border-radius: 2px;
  display: inline-block;
}
.heatmap__legend-swatch--high { background: var(--gold); }
.heatmap__legend-swatch--mid  { background: var(--gold-deep); opacity: 0.75; }
.heatmap__legend-swatch--low  { background: var(--gold-deep); opacity: 0.35; }
.heatmap__legend-swatch--coming { background: transparent; border: 1px dashed var(--text-dim); }

.heatmap__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 8px;
}
.heatmap__cell {
  position: relative;
  padding: 18px 14px 14px;
  border-radius: 3px;
  background: var(--bg-lift);
  border: 1px solid var(--rule);
  overflow: hidden;
  transition: transform 200ms ease, border-color 200ms ease, background-color 280ms ease;
  cursor: default;
}
.heatmap__cell:hover {
  transform: translateY(-2px);
  border-color: rgba(221, 208, 170, 0.30);
}
.heatmap__cell::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--gold);
  opacity: var(--cell-fill, 0);
  pointer-events: none;
  transition: opacity 280ms ease;
}
.heatmap__cell > * { position: relative; z-index: 1; }
.heatmap__cell-name {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 15.5px;
  color: var(--text);
  line-height: 1.2;
  display: block;
}
.heatmap__cell-region {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-dim);
  display: block;
  margin-top: 2px;
}
.heatmap__cell-pct {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.10em;
  color: var(--gold);
  margin-top: 10px;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
}
.heatmap__cell-pct strong {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 400;
  color: var(--text);
  letter-spacing: -0.01em;
}

/* High-density cells get a warm filled gold tint; low-density a faint gold; coming an outline */
.heatmap__cell--high  { --cell-fill: 0.22; }
.heatmap__cell--mid   { --cell-fill: 0.12; }
.heatmap__cell--low   { --cell-fill: 0.05; }
.heatmap__cell--coming {
  border-style: dashed;
  border-color: var(--text-dim);
}
.heatmap__cell--coming .heatmap__cell-pct strong { color: var(--text-mute); }
.heatmap__cell--coming .heatmap__cell-pct { color: var(--text-mute); }

.heatmap__foot {
  margin-top: 20px;
  font-size: 13px;
  line-height: 1.55;
  color: var(--text-mute);
  font-style: italic;
}

@media (max-width: 560px) {
  .heatmap__grid { grid-template-columns: 1fr 1fr; gap: 6px; }
  .heatmap__cell { padding: 14px 12px 12px; }
  .heatmap__cell-name { font-size: 14px; }
  .heatmap__cell-pct strong { font-size: 17px; }
}

/* ============================================================
   Heatmap SVG map — neighborhood pins on abstract DMV geography
   Replaces the previous grid view as the primary visualization.
   The grid is now collapsed into a <details> accessibility/scan layer.
   2026-05-25 v2.
   ============================================================ */
.heatmap__map {
  position: relative;
  margin: 24px 0 28px;
  background: linear-gradient(180deg, #0a0908 0%, #100E0A 100%);
  border: 1px solid var(--rule);
  border-radius: 4px;
  overflow: hidden;
  padding: 24px 18px;
  aspect-ratio: 10 / 7;
  max-height: 620px;
  transition: background 280ms ease, border-color 280ms ease;
}
[data-theme="light"] .heatmap__map {
  background: linear-gradient(180deg, #ECE3CA 0%, #F4EDDB 100%);
}

.heatmap__svg {
  display: block;
  width: 100%;
  height: 100%;
  user-select: none;
}

/* River + boundary strokes — subtle, brand-tinted */
.heatmap-river {
  stroke: rgba(64, 96, 128, 0.42);
  stroke-width: 6;
  stroke-linecap: round;
  fill: none;
}
[data-theme="light"] .heatmap-river {
  stroke: rgba(64, 96, 128, 0.28);
}
.heatmap-boundary {
  stroke: rgba(221, 208, 170, 0.18);
  stroke-width: 1;
  stroke-dasharray: 4 4;
}
[data-theme="light"] .heatmap-boundary {
  stroke: rgba(64, 52, 24, 0.22);
}

/* Region labels (static, sparse) */
.heatmap-label--region {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  fill: var(--text-mute);
  text-anchor: middle;
  pointer-events: none;
  opacity: 0.65;
}

/* Pins */
.heatmap-pin {
  cursor: pointer;
  transition: transform 220ms cubic-bezier(.22,.61,.36,1);
  transform-origin: center;
  transform-box: fill-box;
}
.heatmap-pin circle {
  transition: filter 240ms ease, fill 240ms ease, stroke 240ms ease;
}
.heatmap-pin text {
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.06em;
  fill: var(--text);
  text-anchor: middle;
  pointer-events: none;
  opacity: 0;
  transition: opacity 200ms ease;
}

/* Tier fills */
.heatmap-pin--high circle {
  fill: rgba(221, 208, 170, 0.85);
  stroke: var(--gold);
  stroke-width: 1.5;
  filter: drop-shadow(0 0 6px rgba(221, 208, 170, 0.35));
}
.heatmap-pin--mid circle {
  fill: rgba(192, 180, 144, 0.55);
  stroke: var(--gold-deep);
  stroke-width: 1.2;
  filter: drop-shadow(0 0 4px rgba(192, 180, 144, 0.20));
}
.heatmap-pin--low circle {
  fill: rgba(192, 180, 144, 0.25);
  stroke: rgba(192, 180, 144, 0.55);
  stroke-width: 1;
}
.heatmap-pin--coming circle {
  fill: transparent;
  stroke: var(--text-dim);
  stroke-width: 1;
  stroke-dasharray: 3 2;
}

/* Pin hover/tap: scale up + reveal inline number label */
.heatmap-pin:hover { transform: scale(1.22); }
.heatmap-pin:hover circle,
.heatmap-pin:focus circle {
  filter: drop-shadow(0 0 10px rgba(221, 208, 170, 0.60));
}
.heatmap-pin:hover text { opacity: 1; }

/* Always-visible labels for highest-density pins (top 5) */
.heatmap-pin--high text { opacity: 0.85; }

/* Floating tooltip — JS-positioned on hover */
.heatmap__tooltip {
  position: absolute;
  top: 0; left: 0;
  background: var(--bg);
  border: 1px solid var(--gold);
  border-radius: 3px;
  padding: 10px 14px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.10em;
  color: var(--text);
  opacity: 0;
  visibility: hidden;
  transition: opacity 180ms ease, transform 200ms ease, visibility 0s linear 180ms;
  pointer-events: none;
  z-index: 5;
  white-space: nowrap;
  transform: translate(-50%, calc(-100% - 12px));
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45);
}
.heatmap__tooltip.is-visible {
  opacity: 1;
  visibility: visible;
  transition: opacity 180ms ease, transform 200ms ease, visibility 0s linear 0s;
}
.heatmap__tooltip-name {
  font-family: var(--serif);
  font-size: 15px;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--text);
  display: block;
}
.heatmap__tooltip-region {
  font-size: 10px;
  color: var(--text-mute);
  display: block;
  margin-top: 2px;
}
.heatmap__tooltip-pct {
  display: block;
  margin-top: 6px;
  font-family: var(--serif);
  font-size: 18px;
  color: var(--gold);
  letter-spacing: -0.01em;
}
.heatmap__tooltip-pct::after { content: "%"; font-size: 12px; color: var(--text-mute); margin-left: 2px; }
.heatmap__tooltip[data-coming="true"] .heatmap__tooltip-pct::after { content: ""; }

/* Mobile: shrink map proportionally + hide region labels (clutter) */
@media (max-width: 640px) {
  .heatmap__map {
    aspect-ratio: 1 / 1.05;
    max-height: 560px;
    padding: 14px 8px;
  }
  .heatmap-label--region { display: none; }
  .heatmap-pin--high text { opacity: 1; }
}

/* Details/grid scan layer below the map */
.heatmap__details {
  margin-top: 20px;
}
.heatmap__details summary {
  cursor: pointer;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
  padding: 10px 0;
  list-style: none;
}
.heatmap__details summary::after {
  content: " →";
  color: var(--gold);
  transition: transform 200ms ease;
  display: inline-block;
}
.heatmap__details[open] summary::after { content: " ↓"; }
.heatmap__details summary:hover { color: var(--gold); }
.heatmap__details > .heatmap__grid { margin-top: 16px; }

/* ─────────────────────────────────────────────────────────────
   Trending indicator — non-emoji, SF-Symbols-over-emoji language
   Two variants, single-use only (no stacking per row-badge rule):

   1) .trend-mark  — small SVG up-chevron, glanceable chrome
                     use trailing in dish/restaurant rows
   2) .trend-label — tracked-caps "RISING" text mark
                     use in editorial sentences / mid-prose

   Inline SVG usage:
     <span class="trend-mark" aria-label="Trending">
       <svg viewBox="0 0 24 24" fill="none" stroke="currentColor"
            stroke-width="2.2" stroke-linecap="round"
            stroke-linejoin="round" aria-hidden="true">
         <polyline points="4 17 10 11 14 15 20 7"/>
         <polyline points="14 7 20 7 20 13"/>
       </svg>
     </span>

   Inline text label usage:
     <span class="trend-label">Rising</span>
   ───────────────────────────────────────────────────────────── */
.trend-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  color: var(--gold);
  vertical-align: -2px;
  margin-left: 6px;
}
.trend-mark svg { width: 100%; height: 100%; }

.trend-label {
  font-family: var(--mono, "JetBrains Mono", monospace);
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
  border: 1px solid var(--gold);
  padding: 2px 7px 2px 8px;
  border-radius: 2px;
  vertical-align: 2px;
  margin-left: 8px;
  line-height: 1;
  white-space: nowrap;
}

/* =================================================================
   MOBILE COMPRESSION PASS — 2026-06-10
   Reduces vertical scroll on mobile without affecting desktop.
   - .pillars__grid: 3-stacked → horizontal swipe carousel
   - .phones (Look inside): 3-stacked → horizontal scroll
   - .edit-grid (Tools): 1-col → 2-col
   - Section padding tightened; pillar/edit-item internal padding tightened
   - Hero dek slightly compressed
   No HTML changes; purely media-query overrides.
   ================================================================= */

@media (max-width: 720px) {

  /* ----- Pillar grid → horizontal swipe carousel ----- */
  .pillars__grid {
    display: flex !important;
    flex-direction: row;
    overflow-x: auto;
    overflow-y: visible;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: 14px;
    padding: 0 24px 18px;
    margin: clamp(20px, 4vw, 32px) -24px 0;
    scrollbar-width: none;
  }
  .pillars__grid::-webkit-scrollbar { display: none; }
  .pillars__grid > .pillar {
    flex: 0 0 calc(100vw - 80px);
    max-width: 340px;
    scroll-snap-align: center;
    margin: 0;
  }

  /* Pillar internal compression on mobile */
  .pillar {
    padding: 24px 22px !important;
  }
  .pillar__num { font-size: 11px !important; }
  .pillar__title {
    font-size: clamp(20px, 5.5vw, 24px) !important;
    margin-bottom: 12px !important;
  }
  .pillar__body {
    font-size: 14px !important;
    line-height: 1.55 !important;
  }
  .pillar__link { font-size: 11px !important; }

  /* ----- Look inside (Phones) → horizontal scroll-snap ----- */
  .phones {
    display: flex !important;
    flex-direction: row;
    overflow-x: auto;
    overflow-y: visible;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: 16px;
    /* Centre the first card and let the next one peek, so it reads as a swipeable carousel */
    padding: 0 0 20px;
    padding-inline: calc((100vw - min(74vw, 280px)) / 2);
    scroll-padding-inline: calc((100vw - min(74vw, 280px)) / 2);
    margin: 28px -24px 0;
    scrollbar-width: none;
  }
  .phones::-webkit-scrollbar { display: none; }
  .phones > .reveal {
    flex: 0 0 min(74vw, 280px);
    max-width: 280px;
    scroll-snap-align: center;
  }
  .phones__dots { display: flex; justify-content: center; gap: 9px; margin-top: 16px; }

  /* ----- Edit grid (Tools / six surfaces) → 2-column on mobile ----- */
  /* Overrides the existing 1-col @ 880px rule */
  .edit-grid {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 18px !important;
  }
  .edit-item {
    padding: 18px 16px !important;
  }
  .edit-item__icon {
    width: 22px !important;
    height: 22px !important;
    margin-bottom: 10px !important;
  }
  .edit-item__title {
    font-size: 15px !important;
    line-height: 1.25 !important;
    margin-bottom: 8px !important;
  }
  .edit-item__body {
    font-size: 12.5px !important;
    line-height: 1.5 !important;
  }
  /* Drop the in-card previews on mobile — they crowd the 2-col layout */
  .edit-item__preview {
    display: none !important;
  }

  /* ----- Section padding tightening on mobile ----- */
  .section--tight {
    padding-top: clamp(36px, 7vw, 56px) !important;
    padding-bottom: clamp(36px, 7vw, 56px) !important;
  }

  /* ----- Hero compression ----- */
  .hero__dek {
    font-size: 16px !important;
    line-height: 1.5 !important;
  }
  /* The new catalog teaser line in hero gets tighter spacing */
  .hero__dek > span[style*="display:block"] {
    margin-top: 10px !important;
    font-size: 14.5px !important;
  }

  /* Section titles slightly tighter so the eyebrow + title + lede
     stack doesn't dominate the viewport on phone */
  .section__head .section__title {
    font-size: clamp(28px, 7vw, 38px) !important;
    line-height: 1.1 !important;
  }
  .section__head .section__lede {
    font-size: 15px !important;
    line-height: 1.55 !important;
  }
}

/* Very small phones — push edit-grid back to 1-col so cards don't get cramped */
@media (max-width: 420px) {
  .edit-grid {
    grid-template-columns: 1fr !important;
  }
  .pillars__grid > .pillar {
    flex: 0 0 calc(100vw - 60px);
  }
  .phones > .reveal {
    flex: 0 0 calc(100vw - 80px);
  }
}

/* ============================================================
   WAVE 1 — Fable's MBA Drop-In #2 audit build (2026-06-11)
   Sections added: Tonight's Pick + widget, Save Anything,
   Make It At Home, Liquid Assets, Group Hunt card.
   New CSS namespaced with .tonight- / .save-flow- / .mkat- /
   .liquid- / .group-hunt- so it can't collide with existing.
   ============================================================ */

/* ---- Tonight's Pick + Widget --------------------------------- */
.tonight {
  position: relative;
  overflow: hidden;
  padding-top: 56px;        /* tightened 2026-06-11 review pass */
  padding-bottom: 56px;
}
.tonight__shell {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 56px;
  align-items: center;
}
.tonight__copy .eyebrow {
  color: var(--flame);
  display: inline-block;
  margin-bottom: 22px;
}
.tonight__title {
  font-family: var(--serif);
  font-size: clamp(34px, 5vw, 56px);
  line-height: 1.05;
  font-weight: 300;
  letter-spacing: -0.01em;
  color: var(--text);
  margin: 0 0 24px;
}
.tonight__title em {
  font-style: italic;
  color: var(--gold);
}
.tonight__body {
  font-size: 17px;
  line-height: 1.65;
  color: var(--text-soft);
  max-width: 520px;
  margin: 0 0 22px;
}
.tonight__body strong { color: var(--text); font-weight: 500; }
.tonight__detail {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-mute);
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  margin: 28px 0 0;
}
.tonight__detail span { display: inline-flex; gap: 8px; align-items: center; }
.tonight__detail span::before {
  content: '·';
  color: var(--flame);
}
.tonight__detail span:first-child::before { content: ''; }
.tonight__footnote {
  margin-top: 22px;
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px;
  color: var(--text-dim);
  max-width: 460px;
}

/* The phone mockup (CSS-rendered iPhone home screen with the widget) */
.tonight__device {
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
}
.tonight-phone {
  width: 280px;
  aspect-ratio: 9/19.5;
  background: linear-gradient(160deg, #1a1714 0%, #0d0c09 100%);
  border-radius: 44px;
  border: 8px solid #16130f;
  box-shadow:
    0 0 0 1px rgba(221, 208, 170, 0.08),
    0 30px 80px rgba(0, 0, 0, 0.55),
    inset 0 1px 0 rgba(255, 255, 255, 0.04);
  padding: 18px 14px;
  position: relative;
  overflow: hidden;
}
.tonight-phone::before {
  content: '';
  position: absolute;
  top: 12px; left: 50%;
  transform: translateX(-50%);
  width: 88px; height: 24px;
  background: #0a0908;
  border-radius: 14px;
  z-index: 3;
}
/* All phone-internal copy locked to absolute hex — this is a phone
   mockup, must look like an iPhone in light AND dark site themes.
   (2026-06-11 fix.) */
.tonight-phone__status {
  display: flex;
  justify-content: space-between;
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', sans-serif;
  font-size: 13px;
  font-weight: 600;
  color: #F4EFE7;
  padding: 0 12px 14px;
  letter-spacing: 0.02em;
}
.tonight-phone__status-icons {
  display: inline-flex; gap: 5px; align-items: center;
  opacity: 0.85;
}
.tonight-phone__status-icons svg {
  width: 14px; height: 14px;
  fill: #F4EFE7;
}
.tonight-phone__screen {
  padding: 26px 6px 8px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.tonight-phone__day {
  text-align: center;
  font-family: -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 13px;
  color: #E0DAD0;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-weight: 500;
}
.tonight-phone__date {
  text-align: center;
  font-family: -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 56px;
  font-weight: 200;
  line-height: 1;
  color: #F4EFE7;
  letter-spacing: -0.02em;
  margin: 2px 0 14px;
}

/* The widget itself — the star */
.tonight-widget {
  background:
    radial-gradient(circle at 100% 0%, rgba(218, 72, 5, 0.22) 0%, transparent 60%),
    linear-gradient(155deg, #1c1814 0%, #0f0d0a 100%);
  border: 1px solid rgba(221, 208, 170, 0.12);
  border-radius: 22px;
  padding: 18px 16px 16px;
  position: relative;
  overflow: hidden;
  box-shadow:
    0 8px 24px rgba(0, 0, 0, 0.4),
    inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
.tonight-widget::before {
  content: '';
  position: absolute;
  top: -2px; right: -2px;
  width: 56px; height: 56px;
  background: radial-gradient(circle at 80% 20%, rgba(218, 72, 5, 0.22) 0%, transparent 65%);
  pointer-events: none;
}
.tonight-widget__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 14px;
}
.tonight-widget__eyebrow {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: #FF980A;                  /* locked flame-light — readable in both site themes */
  font-weight: 600;
}
.tonight-widget__brand {
  font-family: var(--serif);
  font-size: 11px;
  color: #DDD0AA;                  /* locked gold */
  letter-spacing: 0.04em;
}
.tonight-widget__brand em {
  font-style: italic;
  text-transform: lowercase;
}
.tonight-widget__dish {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.15;
  color: #F4EFE7;                  /* locked cream — dish title must read on dark widget */
  font-weight: 400;
  margin: 0 0 4px;
  letter-spacing: -0.01em;
}
.tonight-widget__where {
  font-family: -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 12px;
  color: #ADA69A;                  /* locked mute */
  margin-bottom: 12px;
}
.tonight-widget__why {
  font-family: var(--serif);
  font-style: italic;
  font-size: 12px;
  line-height: 1.45;
  color: #E0DAD0;                  /* locked soft */
  border-top: 1px solid rgba(221, 208, 170, 0.10);
  padding-top: 10px;
}

/* iOS app dock below the widget — visual context */
.tonight-phone__apps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
  padding: 0 6px;
  margin-top: 8px;
}
.tonight-phone__app {
  aspect-ratio: 1;
  border-radius: 14px;
  opacity: 0.55;
}
.tonight-phone__app--beat {
  background: linear-gradient(160deg, #2a1f15 0%, #0f0d0a 100%);
  border: 1px solid rgba(221, 208, 170, 0.18);
  opacity: 1;
  position: relative;
}
.tonight-phone__app--beat::after {
  content: 'B';
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--serif);
  font-style: italic;
  font-size: 28px;
  color: var(--gold);
  font-weight: 300;
}
.tonight-phone__app--a { background: linear-gradient(135deg, #2a1a2a 0%, #14101a 100%); }
.tonight-phone__app--b { background: linear-gradient(135deg, #1a2a2a 0%, #0e1818 100%); }
.tonight-phone__app--c { background: linear-gradient(135deg, #2a261a 0%, #1a1810 100%); }

/* Push-notification chip — was floating ABOVE the phone with
   transform:translate(-50%, -100%) which pushed it outside the
   section and let it cross the section divider rule. Now it sits
   inside the phone status area, like an actual iOS notification
   banner sliding down from the top of the screen. */
.tonight-push {
  position: absolute;
  top: 44px;                       /* sits below the notch, inside the phone */
  left: 50%;
  transform: translateX(-50%);
  width: 88%;
  max-width: 256px;
  background: rgba(40, 36, 30, 0.95);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(221, 208, 170, 0.18);
  border-radius: 16px;
  padding: 10px 14px 11px;
  display: flex;
  align-items: center;
  gap: 10px;
  box-shadow:
    0 10px 30px rgba(0, 0, 0, 0.4),
    0 0 30px rgba(218, 72, 5, 0.22);
  z-index: 4;                      /* above the notch + phone status row */
}
.tonight-push__icon {
  width: 26px; height: 26px;
  border-radius: 6px;
  background: linear-gradient(135deg, #DA4805 0%, #FF980A 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: #fff;
  font-weight: 500;
  flex-shrink: 0;
}
.tonight-push__icon em { font-style: italic; }
.tonight-push__body {
  flex: 1;
  font-family: -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 12px;
  line-height: 1.3;
  color: #F4EFE7;                  /* locked — must read on dark push card */
}
.tonight-push__title {
  font-weight: 600;
  font-size: 11px;
  letter-spacing: 0.02em;
  margin-bottom: 1px;
}
.tonight-push__msg { color: #E0DAD0; }
.tonight-push__time {
  font-family: var(--mono);
  font-size: 10px;
  color: #ADA69A;
  margin-left: 8px;
  flex-shrink: 0;
}

@media (max-width: 880px) {
  .tonight__shell {
    grid-template-columns: 1fr;
    gap: 40px;
  }
  .tonight__device { order: 2; }
  .tonight-phone { width: 240px; }
  .tonight-push { max-width: 240px; }
}

/* ---- Save Anything (TikTok → Next Eats) --------------------- */
.save-flow {
  position: relative;
}
.save-flow__shell {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 56px;
  align-items: center;
}
.save-flow__copy .eyebrow {
  color: var(--flame-light);
  display: inline-block;
  margin-bottom: 22px;
}
.save-flow__title {
  font-family: var(--serif);
  font-size: clamp(30px, 4.5vw, 48px);
  line-height: 1.08;
  font-weight: 300;
  letter-spacing: -0.01em;
  color: var(--text);
  margin: 0 0 22px;
}
.save-flow__title em { font-style: italic; color: var(--gold); }
.save-flow__body {
  font-size: 16px;
  line-height: 1.65;
  color: var(--text-soft);
  max-width: 520px;
  margin: 0 0 18px;
}
.save-flow__foot {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-top: 18px;
}
.save-flow__foot strong { color: var(--gold); font-weight: 500; }

/* The three-step flow visualization */
.save-flow__viz {
  display: flex;
  flex-direction: column;
  gap: 18px;
  position: relative;
}
.save-step {
  background: var(--card);
  border: 1px solid var(--rule);
  border-radius: 18px;
  padding: 18px 22px;
  display: flex;
  align-items: center;
  gap: 18px;
  position: relative;
  transition: transform 0.6s ease, opacity 0.6s ease;
}
.save-step__num {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--flame-light);
  width: 38px;
  flex-shrink: 0;
}
.save-step__icon {
  width: 42px; height: 42px;
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(218, 72, 5, 0.18) 0%, rgba(218, 72, 5, 0.04) 100%);
  border: 1px solid rgba(218, 72, 5, 0.22);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.save-step__icon svg {
  width: 22px; height: 22px;
  stroke: var(--flame-light);
  fill: none;
  stroke-width: 2;
}
.save-step__copy {
  flex: 1;
}
.save-step__title {
  font-family: var(--serif);
  font-size: 17px;
  color: var(--text);
  margin: 0 0 3px;
  font-weight: 400;
}
.save-step__desc {
  font-size: 13px;
  color: var(--text-mute);
  margin: 0;
  line-height: 1.45;
}
.save-step--ping {
  background: linear-gradient(135deg, rgba(221, 208, 170, 0.06) 0%, var(--card) 100%);
  border-color: rgba(221, 208, 170, 0.24);
}
.save-step--ping .save-step__num { color: var(--gold); }
.save-step--ping .save-step__icon {
  background: linear-gradient(135deg, var(--gold-glow) 0%, transparent 100%);
  border-color: rgba(221, 208, 170, 0.32);
}
.save-step--ping .save-step__icon svg { stroke: var(--gold); }

@media (max-width: 880px) {
  .save-flow__shell { grid-template-columns: 1fr; gap: 40px; }
  /* A wide grid child (mock card / long mono line) was forcing the column —
     and the whole reel slide — past the viewport, cutting text off the right
     and letting neighbor slides peek in. min-width:0 lets the column shrink. */
  .save-flow__shell > * { min-width: 0; }
  .save-flow__body { max-width: 100%; }
  .reel-mock, .save-step { max-width: 100%; }
}

/* ---- Make It At Home --------------------------------------- */
.mkat {
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
  padding: 64px 0;          /* tightened 2026-06-11 review pass */
  background:
    radial-gradient(ellipse at 20% 30%, rgba(221, 208, 170, 0.04) 0%, transparent 60%);
}
.mkat__shell {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 56px;
  align-items: center;
}
.mkat__copy .eyebrow { display: inline-block; margin-bottom: 22px; }
.mkat__title {
  font-family: var(--serif);
  font-size: clamp(30px, 4.5vw, 48px);
  line-height: 1.08;
  font-weight: 300;
  letter-spacing: -0.01em;
  color: var(--text);
  margin: 0 0 22px;
}
.mkat__title em { font-style: italic; color: var(--gold); }
.mkat__body {
  font-size: 16px;
  line-height: 1.65;
  color: var(--text-soft);
  max-width: 520px;
  margin: 0 0 18px;
}
.mkat__detail {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-top: 18px;
}
.mkat__detail strong { color: var(--gold); font-weight: 500; }
.mkat__crosslink {
  display: inline-block;
  margin-top: 22px;
  font-size: 13px;
  color: var(--gold);
  border-bottom: 1px solid var(--rule);
  text-decoration: none;
  padding-bottom: 2px;
}
.mkat__crosslink:hover { color: var(--text); border-color: var(--gold); }

/* The recipe card visualization */
.mkat__card {
  background: var(--card);
  border: 1px solid var(--rule);
  border-radius: 20px;
  padding: 28px 26px;
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35);
}
.mkat-card__overline {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 12px;
}
.mkat-card__title {
  font-family: var(--serif);
  font-size: 22px;
  line-height: 1.2;
  color: var(--text);
  margin: 0 0 6px;
  font-weight: 400;
}
.mkat-card__sub {
  font-family: var(--serif);
  font-style: italic;
  font-size: 13px;
  color: var(--text-mute);
  margin: 0 0 18px;
}
.mkat-card__rule {
  height: 1px;
  background: var(--rule);
  margin: 16px 0;
}
.mkat-card__meta {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 14px;
  margin-bottom: 16px;
}
.mkat-card__meta-item {
  text-align: center;
}
.mkat-card__meta-label {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin-bottom: 4px;
}
.mkat-card__meta-value {
  font-family: var(--serif);
  font-size: 18px;
  color: var(--text);
  font-weight: 400;
}
.mkat-card__list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.mkat-card__list li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 0;
  font-family: -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 13px;
  color: var(--text-soft);
  border-bottom: 1px solid rgba(221, 208, 170, 0.06);
}
.mkat-card__list li:last-child { border-bottom: none; }
.mkat-card__check {
  width: 14px; height: 14px;
  border: 1px solid var(--gold-deep);
  border-radius: 4px;
  flex-shrink: 0;
}
.mkat-card__cart {
  margin-top: 16px;
  text-align: center;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  padding: 10px;
  border: 1px solid var(--gold-deep);
  border-radius: 999px;
}

@media (max-width: 880px) {
  .mkat__shell { grid-template-columns: 1fr; gap: 40px; }
  .mkat__card { order: 2; }
}

/* ---- Liquid Assets ----------------------------------------- */
.liquid {
  background:
    radial-gradient(ellipse at 80% 20%, rgba(16, 38, 89, 0.14) 0%, transparent 60%),
    radial-gradient(ellipse at 10% 80%, rgba(218, 72, 5, 0.05) 0%, transparent 50%);
  padding: 64px 0;          /* tightened 2026-06-11 review pass */
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.liquid__shell {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 64px;
  align-items: center;
}
.liquid__copy .eyebrow {
  color: var(--royal-soft);
  display: inline-block;
  margin-bottom: 18px;
}
.liquid__overline {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--royal-soft);
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 24px;
}
.liquid__overline::before,
.liquid__overline::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(58, 95, 168, 0.4), transparent);
  max-width: 80px;
}
.liquid__title {
  font-family: var(--serif);
  font-size: clamp(38px, 6vw, 64px);
  line-height: 1.02;
  font-weight: 300;
  letter-spacing: -0.015em;
  color: var(--text);
  margin: 0 0 22px;
}
.liquid__title em { font-style: italic; color: var(--gold); }
.liquid__body {
  font-size: 17px;
  line-height: 1.65;
  color: var(--text-soft);
  max-width: 540px;
  margin: 0 0 14px;
}
.liquid__body em { color: var(--gold); font-style: italic; }
.liquid__rules {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: var(--text-mute);
  border-left: 2px solid var(--royal-soft);
  padding-left: 14px;
  margin-top: 24px;
  max-width: 460px;
}

/* The pour board — list of vertical-II categories */
.liquid__board {
  background:
    linear-gradient(160deg, rgba(27, 63, 138, 0.08) 0%, transparent 60%),
    var(--card);
  border: 1px solid var(--rule);
  border-radius: 20px;
  padding: 28px 24px;
  position: relative;
}
.liquid__board::before {
  content: 'POUR INDEX · DC · MD · VA';
  position: absolute;
  top: -10px; left: 24px;
  background: var(--bg);
  padding: 0 10px;
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--royal-soft);
}
.liquid-row {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 14px 0;
  border-bottom: 1px solid rgba(221, 208, 170, 0.07);
}
.liquid-row:last-child { border-bottom: none; }
.liquid-row__n {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--text-mute);
  width: 32px;
  flex-shrink: 0;
}
.liquid-row__name {
  flex: 1;
  font-family: var(--serif);
  font-size: 16px;
  color: var(--text);
}
.liquid-row__name em {
  font-style: italic;
  color: var(--text-mute);
  font-size: 13px;
  display: block;
  margin-top: 1px;
}
.liquid-row__tag {
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--royal-soft);
  border: 1px solid rgba(58, 95, 168, 0.32);
  padding: 4px 10px;
  border-radius: 999px;
}

@media (max-width: 880px) {
  .liquid__shell { grid-template-columns: 1fr; gap: 40px; }
}

/* ---- Group Hunt card (full-width horizontal below circles-grid) ---- */
.circle-card--group {
  grid-column: 1 / -1;             /* span all columns of the circles-grid */
  background:
    linear-gradient(135deg, rgba(218, 72, 5, 0.10) 0%, transparent 55%),
    var(--card);
  border-color: rgba(218, 72, 5, 0.20);
  position: relative;
  margin-top: 8px;
  display: grid;
  grid-template-columns: 1fr 2fr auto;
  gap: 36px;
  align-items: center;
  padding: 28px 32px;
}
.circle-card--group::after {
  content: 'THE INVITE LOOP';
  position: absolute;
  top: 14px; right: 18px;
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--flame-light);
}
.circle-card--group .circle-card__n {
  color: var(--flame-light);
  grid-column: 1; grid-row: 1;
  align-self: start;
}
.circle-card--group .circle-card__name {
  grid-column: 1; grid-row: 2;
  margin: 6px 0 0;
}
.circle-card--group .circle-card__name em { color: var(--gold); font-style: italic; }
.circle-card--group .circle-card__body {
  grid-column: 2; grid-row: 1 / span 2;
  margin: 0;
  padding-right: 12px;
  border-left: 1px solid var(--rule);
  padding-left: 28px;
}
.circle-card--group > .pillar__link {
  grid-column: 3; grid-row: 1 / span 2;
  align-self: center;
  white-space: nowrap;
  font-size: 13px;
  font-family: var(--mono);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 12px 22px;
  border: 1px solid var(--gold-deep);
  border-radius: 999px;
  color: var(--gold);
  text-decoration: none;
  transition: background 0.2s, color 0.2s;
}
.circle-card--group > .pillar__link:hover {
  background: var(--gold);
  color: var(--bg);
}

@media (max-width: 720px) {
  .circle-card--group {
    grid-template-columns: 1fr;
    gap: 14px;
    padding: 24px 22px;
  }
  .circle-card--group .circle-card__n,
  .circle-card--group .circle-card__name,
  .circle-card--group .circle-card__body,
  .circle-card--group > .pillar__link {
    grid-column: 1; grid-row: auto;
  }
  .circle-card--group .circle-card__body {
    border-left: none;
    padding-left: 0;
    padding-top: 14px;
    border-top: 1px solid var(--rule);
  }
}

/* ---- Time-aware beat inset (lives inside #how-it-works) ----- */
.time-beat {
  background: linear-gradient(135deg, rgba(218, 72, 5, 0.06) 0%, transparent 60%);
  border-left: 2px solid var(--flame);
  padding: 18px 22px;
  margin: 32px auto;
  max-width: 720px;
  border-radius: 0 12px 12px 0;
}
.time-beat__eyebrow {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--flame-light);
  margin-bottom: 6px;
}
.time-beat__body {
  font-family: var(--serif);
  font-size: 17px;
  line-height: 1.5;
  color: var(--text);
  font-style: italic;
  margin: 0;
}
.time-beat__body strong {
  color: var(--gold);
  font-weight: 400;
  font-style: normal;
}

/* ---- Query stack horizontal layout (review pass 2026-06-11)
       Was: chips → ↓ → verdict (stacked vertically, ate scroll).
       Now: chips on left, → arrow + verdict on right. ----------- */
.query-stack__horizontal {
  display: grid;
  grid-template-columns: 1.4fr auto 1fr;
  gap: 32px;
  align-items: center;
  margin: 36px 0 28px;
}
.query-stack__horizontal .query-stack__chain {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  justify-content: flex-start;
}
.query-stack__bridge {
  display: flex;
  align-items: center;
  justify-content: center;
}
.query-stack__arrow--right {
  font-size: 28px;
  color: var(--gold);
  display: inline-block;
  opacity: 0.7;
}
.query-stack__horizontal .query-stack__result {
  margin: 0;
  text-align: left;
  display: flex;
  align-items: center;
}
.query-stack__horizontal .query-stack__result .highlight {
  font-family: var(--serif);
  font-size: clamp(20px, 2.4vw, 28px);
  line-height: 1.25;
  display: inline;
}
@media (max-width: 820px) {
  .query-stack__horizontal {
    grid-template-columns: 1fr;
    gap: 18px;
    text-align: center;
  }
  .query-stack__horizontal .query-stack__chain { justify-content: center; }
  .query-stack__arrow--right { transform: rotate(90deg); }
  .query-stack__horizontal .query-stack__result { justify-content: center; text-align: center; }
}

/* ---- Travelers cards — three-act collapsed structure (2026-06-11)
       Cards land in THE THAW (moment) + THE REASON (title) + tag.
       THE HOOK (body) lives inside a <details> and expands on click.
       Native <details>/<summary> for free keyboard + screen reader
       support. ---------------------------------------------------- */
.visit-acts {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin: 0 0 32px;
  flex-wrap: wrap;
}
.visit-acts__act {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
.visit-acts__act strong {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  font-weight: 500;
}
.visit-acts__act em {
  font-family: var(--serif);
  font-style: italic;
  font-size: 12px;
  color: var(--text-mute);
}
.visit-acts__sep {
  font-family: var(--mono);
  color: var(--text-dim);
  font-size: 16px;
  opacity: 0.6;
}
@media (max-width: 640px) {
  .visit-acts { gap: 10px; }
  .visit-acts__sep { transform: rotate(90deg); display: block; width: 100%; text-align: center; }
}

/* The hook (collapsible body) — sized to its own content, no auto-fill */
.visit-card--collapsible {
  display: flex;
  flex-direction: column;
}
/* (Was: .visit-card--collapsible .visit-card__feature { margin-top: auto }
    Removed 2026-06-11 — combined with the grid stretching siblings, it
    created a visual gap under the title in unopened cards. Grid now uses
    align-items: start, so each card is its own height; feature row sits
    naturally below the title.) */
.visit-card__details {
  margin-top: 16px;
  border-top: 1px solid var(--rule);
  padding-top: 14px;
}
.visit-card__hook {
  cursor: pointer;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--gold);
  display: flex;
  justify-content: space-between;
  align-items: center;
  list-style: none;
  padding: 4px 0;
  transition: color 0.18s ease;
  outline: none;
}
.visit-card__hook::-webkit-details-marker { display: none; }
.visit-card__hook::marker { content: ''; }
.visit-card__hook:hover,
.visit-card__hook:focus-visible {
  color: var(--text);
}
.visit-card__hook-chev {
  font-family: var(--mono);
  font-size: 14px;
  width: 18px; height: 18px;
  border: 1px solid var(--gold-deep);
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--gold);
  transition: transform 0.25s ease, background 0.2s, color 0.2s;
}
.visit-card__details[open] .visit-card__hook-chev {
  transform: rotate(45deg);
  background: var(--gold);
  color: var(--bg);
}
.visit-card__details[open] .visit-card__hook { color: var(--text); }
.visit-card__details .visit-card__body {
  margin-top: 12px;
  animation: visitCardBodyIn 0.32s ease;
}
@keyframes visitCardBodyIn {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ---- Occasion cards: hover-swap to the hook, no layout push (2026-06-17) ----
   Bodies are always rendered (details[open]). On a hover-capable pointer the
   body becomes an absolute overlay that fades in on card-hover, so an open card
   never grows and shoves the grid row below it. Touch/narrow keeps it inline
   (single-column there — expanding pushes nothing). */
.visit-card__hook-chev { display: none; }
@media (hover: hover) and (pointer: fine) {
  .visit-moments-grid { align-items: stretch; }
  .visit-card__hook { pointer-events: none; }   /* hover drives it; clicks must not toggle the details closed */
  .visit-card--collapsible .visit-card__body {
    position: absolute;
    inset: 0;
    margin: 0;
    padding: 26px 24px;
    background: var(--bg-lift);
    display: flex;
    flex-direction: column;
    justify-content: center;
    opacity: 0;
    visibility: hidden;
    transform: none;
    animation: none;
    transition: opacity 0.26s ease, visibility 0.26s ease;
    z-index: 3;
  }
  .visit-card--collapsible:hover .visit-card__body {
    opacity: 1;
    visibility: visible;
  }
}

/* ---- Six travel moments — touch/no-hover collapse (2026-07-03) ----
   The hover-overlay pattern above (2026-06-17) only reveals a card's
   body on :hover, which doesn't exist on touch — so every <details
   open> just renders its paragraph inline, all 6 stacked at once on
   the single-column mobile layout (.visit-moments-grid ≤560px). That
   read as repetitive/exhausting (6 back-to-back paragraphs on first
   scroll). Fix: on hover:none/pointer:coarse, collapse the body by
   default via max-height (NOT display:none — keeps the <details
   open> attribute harmless either way) and toggle a JS-driven
   .is-open class on tap. travelers.html's own inline <script> handles
   the tap (native <details> toggle isn't relied on here — pointer-
   events stays auto on touch, so the handler preventDefault()s the
   click and drives .is-open instead. Every selector below keys off
   .is-open, never [open], so the visible result is the same even in
   the unlikely case some browser still fires the native toggle too). */
@media (hover: none), (pointer: coarse) {
  .visit-card--collapsible .visit-card__body {
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    margin-top: 0;
    transition: max-height 0.32s ease, opacity 0.24s ease, margin-top 0.32s ease;
    animation: none;
  }
  .visit-card__details.is-open .visit-card__body {
    max-height: 400px;
    opacity: 1;
    margin-top: 12px;
  }
  .visit-card__details.is-open .visit-card__hook-chev {
    transform: rotate(45deg);
    background: var(--gold);
    color: var(--bg);
  }
  .visit-card__details.is-open .visit-card__hook { color: var(--text); }
  .visit-card__hook-chev { display: inline-flex; }
}

/* ---- Hunt card: simple display swap (2026-06-14 v4)
   Override the standard edit-item absolute-overlay pattern with a
   plain display: none/block swap. Default: body shows, preview
   hidden. Hover: body hidden, preview shows. Card height adjusts
   naturally — sibling cards don't stretch because .edit-grid
   already has align-items: start. ---- */
.modes-gloss--preview { margin: 0; }

/* Override the base .edit-item__media min-height: 168px reservation —
   Hunt card content hugs whatever's currently displayed. */
.edit-item:has(.modes-gloss--preview) .edit-item__media {
  min-height: 0;
}
.edit-item:has(.modes-gloss--preview) .edit-item__preview {
  position: static;       /* override the .edit-item__preview absolute positioning */
  inset: auto;
  opacity: 1;             /* always full opacity when displayed */
  display: none;          /* hidden by default */
  pointer-events: auto;
}

@media (hover: hover) and (pointer: fine) {
  .edit-item:has(.modes-gloss--preview):hover .edit-item__body {
    display: none;        /* override the global opacity-0 with full display:none */
    opacity: 1;
  }
  .edit-item:has(.modes-gloss--preview):hover .edit-item__preview {
    display: block;
  }
}

/* ---- Hunt-modes gloss list (used multiple places) ----------- */
.modes-gloss {
  list-style: none;
  margin: 18px 0 0;
  padding: 0;
  display: grid;
  gap: 10px;
}
.modes-gloss li {
  display: grid;
  grid-template-columns: 92px 1fr;
  gap: 14px;
  font-size: 14px;
  line-height: 1.5;
  color: var(--text-soft);
}
.modes-gloss strong {
  color: var(--gold);
  font-weight: 500;
  font-family: var(--serif);
  font-size: 15px;
}
@media (max-width: 540px) {
  .modes-gloss li { grid-template-columns: 1fr; gap: 2px; }
  .modes-gloss strong { font-size: 16px; }
}

/* ============================================================
   TIER PALETTE — slide-deck colors with premium "shiny"
   treatment (2026-06-14). Each tier gets:
     1. A tinted top accent rule (foil-stamp style multi-stop)
     2. A subtle background wash matching tier color
     3. A border with corner highlight that catches "light"
     4. Tier-name gradient text (foil-stamp letterform effect)
     5. Inner glow shadow for depth
   Goal: cards feel premium and individuated, not flat colored.
   Aesthetic stays editorial — no candy-bright, no Bootstrap.
   ============================================================ */

/* ---- Shared shine mechanics: applied via per-tier vars ---- */
.tier {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1),
              box-shadow 0.4s ease;
}

/* The base .tier__rule is a thin 2-stop gradient by default. Each tier
   overrides it with a richer multi-stop "foil-stamp" gradient. */
.tier__rule {
  height: 2px;
  margin-bottom: 22px;
  background: linear-gradient(90deg,
              var(--gold) 0%,
              var(--gold-deep) 100%);
  transition: background 0.4s ease;
}

/* ---- Per-tier color treatments ---- */

/* FREE — sage */
.tier--free {
  background:
    radial-gradient(ellipse at top left, var(--tier-free-soft) 0%, transparent 60%),
    var(--card);
  border-color: rgba(168, 196, 158, 0.16);
}
.tier__rule--free {
  background: linear-gradient(90deg,
              transparent 0%,
              var(--tier-free-core) 18%,
              var(--tier-free-shine) 38%,
              var(--tier-free-core) 58%,
              var(--tier-free-shine) 78%,
              transparent 100%);
}
.tier--free .tier__name {
  background: linear-gradient(135deg,
              var(--tier-free-core) 0%,
              var(--tier-free-shine) 50%,
              var(--tier-free-core) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--tier-free-core);  /* fallback */
}
.tier--free .tier__weight { color: var(--tier-free-core); }
.tier--free:hover {
  box-shadow: 0 0 40px var(--tier-free-glow);
}

/* PLUS — dusty rose */
.tier--plus {
  background:
    radial-gradient(ellipse at top left, var(--tier-plus-soft) 0%, transparent 60%),
    var(--card);
  border-color: rgba(217, 167, 176, 0.18);
}
.tier__rule--plus {
  background: linear-gradient(90deg,
              transparent 0%,
              var(--tier-plus-core) 18%,
              var(--tier-plus-shine) 38%,
              var(--tier-plus-core) 58%,
              var(--tier-plus-shine) 78%,
              transparent 100%);
}
.tier--plus .tier__name {
  background: linear-gradient(135deg,
              var(--tier-plus-core) 0%,
              var(--tier-plus-shine) 50%,
              var(--tier-plus-core) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--tier-plus-core);
}
.tier--plus .tier__weight { color: var(--tier-plus-core); }
.tier--plus:hover {
  box-shadow: 0 0 40px var(--tier-plus-glow);
}

/* PRIORITY — brand gold (matches existing accent treatment but enriched) */
.tier--priority {
  background:
    radial-gradient(ellipse at top left, var(--tier-priority-soft) 0%, transparent 60%),
    var(--card);
  border-color: rgba(221, 208, 170, 0.22);
}
.tier__rule--priority {
  background: linear-gradient(90deg,
              transparent 0%,
              var(--tier-priority-core) 18%,
              var(--tier-priority-shine) 38%,
              var(--tier-priority-core) 58%,
              var(--tier-priority-shine) 78%,
              transparent 100%);
}
.tier--priority .tier__name {
  background: linear-gradient(135deg,
              var(--tier-priority-core) 0%,
              var(--tier-priority-shine) 50%,
              var(--tier-priority-core) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--tier-priority-core);
}
.tier--priority .tier__weight,
.tier--priority .tier__weight--strong {
  color: var(--tier-priority-core);
}
.tier--priority:hover {
  box-shadow: 0 0 50px var(--tier-priority-glow);
}

/* LIFETIME — deeper gold with foil-stamp shimmer for max premium */
.tier--lifetime {
  background:
    radial-gradient(ellipse at top left, var(--tier-lifetime-soft) 0%, transparent 65%),
    linear-gradient(160deg, rgba(196, 168, 88, 0.06) 0%, transparent 50%),
    var(--card);
  border: 1px solid rgba(196, 168, 88, 0.30);
  position: relative;
}
/* Foil-stamp shimmer pseudo-element — subtle gradient sweep at top */
.tier--lifetime::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg,
              transparent 0%,
              transparent 40%,
              rgba(232, 216, 154, 0.05) 50%,
              transparent 60%,
              transparent 100%);
  pointer-events: none;
  z-index: 0;
}
.tier--lifetime > * { position: relative; z-index: 1; }
.tier__rule--lifetime {
  background: linear-gradient(90deg,
              transparent 0%,
              var(--tier-lifetime-core) 12%,
              var(--tier-lifetime-shine) 30%,
              var(--tier-lifetime-core) 50%,
              var(--tier-lifetime-shine) 70%,
              var(--tier-lifetime-core) 88%,
              transparent 100%);
  height: 2.5px;  /* slightly thicker than other tiers — marker of the top of the ladder */
}
.tier--lifetime .tier__name {
  background: linear-gradient(135deg,
              var(--tier-lifetime-core) 0%,
              var(--tier-lifetime-shine) 35%,
              var(--tier-lifetime-core) 70%,
              var(--tier-lifetime-shine) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
  color: var(--tier-lifetime-core);
}
.tier--lifetime .tier__weight,
.tier--lifetime .tier__weight--strong {
  color: var(--tier-lifetime-core);
}
.tier--lifetime:hover {
  box-shadow:
    0 0 60px var(--tier-lifetime-glow),
    inset 0 1px 0 rgba(232, 216, 154, 0.12);
}

/* Light mode — adjust shimmer + gradient depth so cards work on cream */
[data-theme="light"] .tier--free   { background: radial-gradient(ellipse at top left, rgba(127, 176, 105, 0.08) 0%, transparent 60%), var(--card); }
[data-theme="light"] .tier--plus   { background: radial-gradient(ellipse at top left, rgba(196, 149, 145, 0.08) 0%, transparent 60%), var(--card); }
[data-theme="light"] .tier--priority { background: radial-gradient(ellipse at top left, rgba(128, 106, 31, 0.06) 0%, transparent 60%), var(--card); }
[data-theme="light"] .tier--lifetime { background: radial-gradient(ellipse at top left, rgba(128, 106, 31, 0.10) 0%, transparent 65%), linear-gradient(160deg, rgba(128, 106, 31, 0.04) 0%, transparent 50%), var(--card); }
[data-theme="light"] .tier--free .tier__name,
[data-theme="light"] .tier--plus .tier__name,
[data-theme="light"] .tier--priority .tier__name,
[data-theme="light"] .tier--lifetime .tier__name {
  /* In light mode the gradient text gets a deeper anchor color so it reads on cream */
  -webkit-text-fill-color: initial;
  background: none;
}
[data-theme="light"] .tier--free  .tier__name { color: #4F7D2C; }   /* deeper sage for cream bg */
[data-theme="light"] .tier--plus  .tier__name { color: #9E5F65; }   /* deeper rose for cream bg */
[data-theme="light"] .tier--priority .tier__name { color: #806A1F; } /* burnished gold light-mode */
[data-theme="light"] .tier--lifetime .tier__name { color: #5F4E14; } /* deeper champagne light-mode */

/* ============================================================
   STICKY CTA BAR — mobile-only, scroll-aware (2026-06-14)
   Hidden on desktop. On mobile: pinned to the bottom of the
   viewport, swaps copy after the user passes the Lifetime
   section, auto-hides when the inline membership ladder /
   footer enters the viewport, dismissible per session.
   ============================================================ */
.sticky-cta {
  display: none;     /* desktop: don't show */
}

@media (max-width: 720px) {
  .sticky-cta {
    display: flex;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 80;
    align-items: stretch;
    gap: 0;
    background:
      linear-gradient(180deg, rgba(13, 12, 9, 0.92) 0%, rgba(13, 12, 9, 0.98) 100%);
    backdrop-filter: blur(20px) saturate(1.2);
    -webkit-backdrop-filter: blur(20px) saturate(1.2);
    border-top: 1px solid rgba(221, 208, 170, 0.18);
    box-shadow: 0 -8px 32px rgba(0, 0, 0, 0.4);
    padding: 12px 64px calc(12px + env(safe-area-inset-bottom)) 16px;
    transform: translateY(0);
    transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1),
                opacity   0.25s ease;
    will-change: transform, opacity;
  }

  /* The main tap target — full-width link */
  .sticky-cta__link {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 14px;
    padding: 14px 18px;
    background: var(--gold);
    color: var(--bg);
    border-radius: 999px;
    text-decoration: none;
    font-family: var(--mono);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.10em;
    text-transform: uppercase;
    box-shadow: 0 4px 16px rgba(221, 208, 170, 0.18);
    transition: transform 0.18s ease, box-shadow 0.18s ease;
  }
  .sticky-cta__link:active {
    transform: scale(0.985);
    box-shadow: 0 2px 8px rgba(221, 208, 170, 0.14);
  }

  .sticky-cta__copy {
    display: flex;
    flex-direction: column;
    gap: 2px;
    line-height: 1.15;
  }
  .sticky-cta__primary {
    font-family: var(--mono);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.10em;
    text-transform: uppercase;
  }
  .sticky-cta__price {
    font-family: var(--serif);
    font-style: italic;
    font-size: 11px;
    font-weight: 400;
    letter-spacing: 0.02em;
    text-transform: none;
    color: rgba(13, 12, 9, 0.72);
  }
  .sticky-cta__price em { font-style: italic; }

  .sticky-cta__arrow {
    font-size: 20px;
    line-height: 1;
    flex-shrink: 0;
  }

  /* Small dismiss button on the right edge */
  .sticky-cta__dismiss {
    order: -1;
    background: transparent;
    border: none;
    color: var(--text-mute);
    padding: 0 12px 0 2px;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    opacity: 0.65;
    transition: opacity 0.18s ease;
  }
  .sticky-cta__dismiss:hover,
  .sticky-cta__dismiss:active {
    opacity: 1;
  }
  .sticky-cta__dismiss svg {
    width: 14px; height: 14px;
  }

  /* COPY SWAP: after the user scrolls past the Lifetime section.
     Initial state (data-state="before") hides; "after" state shows. */
  .sticky-cta.has-passed-offer .sticky-cta__primary[data-state="before"] {
    display: none;
  }
  .sticky-cta.has-passed-offer .sticky-cta__primary[data-state="after"] {
    display: inline;
  }
  /* Before state — default */
  .sticky-cta .sticky-cta__primary[data-state="after"] { display: none; }
  .sticky-cta .sticky-cta__primary[data-state="before"] { display: inline; }
  .sticky-cta.has-passed-offer .sticky-cta__primary[data-state="after"][hidden] {
    display: inline;  /* override the HTML hidden attribute once unlocked */
  }

  /* AUTO-HIDE: slide down when membership ladder / footer is in view */
  .sticky-cta.is-near-footer {
    transform: translateY(110%);
    pointer-events: none;
  }

  /* DISMISS: explicit user action — kills the bar for the session */
  .sticky-cta.is-dismissed {
    transform: translateY(110%);
    pointer-events: none;
    opacity: 0;
  }
}

/* Light-mode adjustments — bar background uses cream, gold button stays */
@media (max-width: 720px) {
  [data-theme="light"] .sticky-cta {
    background: linear-gradient(180deg, rgba(244, 237, 219, 0.95) 0%, rgba(244, 237, 219, 0.99) 100%);
    border-top-color: rgba(64, 52, 24, 0.16);
  }
  [data-theme="light"] .sticky-cta__link {
    background: #806A1F;       /* deeper gold for light-mode contrast */
    color: #F4EDDB;             /* cream text */
    box-shadow: 0 4px 16px rgba(128, 106, 31, 0.22);
  }
  [data-theme="light"] .sticky-cta__price {
    color: rgba(244, 237, 219, 0.78);
  }
}

/* Add a little bottom padding to the body on mobile so the sticky bar
   doesn't cover content at the natural end of the page.
   2026-07-14 — measured the bar at 390px: it renders 81.4px tall, so a flat
   76px left the last ~5px of the footer under it, and .sticky-cta's own
   padding carries `calc(12px + env(safe-area-inset-bottom))` — on a notched
   iPhone that grows the bar by another ~34px while this number stayed put,
   hiding roughly the footer's last line. Mirror the same inset here and give
   the measured height a little headroom. This padding sits below the footer,
   so the extra space is never visible — it only buys back the overlap. */
@media (max-width: 720px) {
  body {
    padding-bottom: calc(88px + env(safe-area-inset-bottom));
  }
}

/* ==============================================================
   EDITORIAL FOLDS — 2026-07-14
   Two collapsibles, one device: a rule with a label set into it,
   like a magazine's section break. NOT an FAQ accordion, NOT a
   bare chevron.

   Both are native <details>/<summary>, authored OPEN in the HTML
   and closed by a tiny inline script at parse time. That ordering
   is deliberate and load-bearing:
     • JS off  → stays open → every word readable. The site's
       content IS the argument; it is never JS-gated.
     • Scrapers/SEO/iMessage preview → see open markup, full text.
     • <summary> gives real button semantics, implicit
       aria-expanded, Enter/Space, and focus for free — the
       accessibility statement's WCAG 2.1 AA claim stays true.
   ============================================================== */

/* --- The rule-and-label control (shared) ---------------------- */
.fold__summary {
  display: flex;
  align-items: center;
  gap: clamp(12px, 2.5vw, 20px);
  cursor: pointer;
  list-style: none;                 /* kill the UA triangle */
  padding: 6px 0;
  -webkit-tap-highlight-color: transparent;
}
.fold__summary::-webkit-details-marker { display: none; }
.fold__summary::marker { content: ""; }

/* The rule itself — hairlines running out to both margins. */
.fold__summary::before,
.fold__summary::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: var(--rule);
  transition: background-color 280ms ease;
}
.fold__summary:hover::before,
.fold__summary:hover::after { background: var(--gold); }

.fold__label {
  flex: 0 0 auto;
  font-family: var(--sans);
  font-size: clamp(10px, 1.5vw, 11px);
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gold);
  line-height: 1;
  white-space: nowrap;              /* designed to fit — never truncate */
  transition: color 280ms ease;
}
.fold__summary:hover .fold__label { color: var(--text); }

/* Swap the verb on open — pure CSS, no JS, no aria juggling.
   display:none also removes the inactive label from the a11y tree,
   so a screen reader only ever hears the one that applies. */
.fold__label--open { display: none; }
details[open] > .fold__summary .fold__label--open { display: inline; }
details[open] > .fold__summary .fold__label--shut { display: none; }

/* Visible focus — keyboard users must always see where they are. */
.fold__summary:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 6px;
  border-radius: 2px;
}
.fold__summary:focus:not(:focus-visible) { outline: none; }

/* --- N° 07 · the math fold ------------------------------------ */
.math-fold { margin-top: clamp(20px, 3vw, 30px); }
.math-fold > .fold__summary { padding: 10px 0; }

/* The opening gesture: the panel eases down. Reduced-motion opts out
   below. Height can't be transitioned off `auto` reliably across
   browsers, so this is opacity/translate only — the layout snaps,
   the ink fades in. Restrained on purpose. */
@media (prefers-reduced-motion: no-preference) {
  .math-fold[open] > .engine-grid {
    animation: foldIn 460ms cubic-bezier(0.16, 1, 0.3, 1);
  }
  .tier__more[open] > .tier__list--rest {
    animation: foldIn 300ms cubic-bezier(0.16, 1, 0.3, 1);
  }
}
@keyframes foldIn {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* The math section is the moat argument. On desktop there is room to
   let it simply stand in the open — which is what the section is
   literally titled. The fold is a MOBILE remedy for a mobile problem
   (a wall of Bayesian prose on a 390px screen), so the closing script
   only runs at <=880px, the same breakpoint where .engine-grid drops
   to one column. Desktop keeps the control (you may still close it)
   but defaults open. */

/* --- Tier cards · "the rest of the list" fold ----------------- */

/* The inheritance line. "Everything in Free" is not a feature — it's a
   rubric. It sits ABOVE the three, in the margin voice, so it can't
   eat one of the three depth slots and can't be hidden by the fold
   (hiding it would make Plus look like it LOST Free's features). */
.tier__inherits {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-mute);
  margin: 0 0 14px 0;
  padding: 0 0 12px 0;
  border-bottom: 1px solid var(--divider);
}

.tier__more { margin: 0 0 22px 0; scroll-margin-top: 96px; }
/* Bigger tap target + unmistakable clickability (2026-07-18): the bare
   hairline-and-label read as static metadata, not a control. Padding out
   the whole row (not just the label) gives a real ~40px tap target and a
   hover background makes the clickable AREA obvious, not just the text. */
.tier__more > .fold__summary {
  gap: 12px;
  padding: 10px 8px;
  margin: 0 -8px;
  border-radius: 8px;
  cursor: pointer;
  transition: background-color 200ms ease;
}
.tier__more > .fold__summary:hover,
.tier__more > .fold__summary:focus-visible {
  background: rgba(221, 208, 170, 0.08);
}
.tier__more .fold__label {
  font-size: 10px;
  letter-spacing: 0.16em;
  color: var(--text-mute);
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.tier__more > .fold__summary:hover .fold__label { color: var(--gold); }
/* Inside a tier card the rule reads better as a short lead-in stroke
   than a full centred break — the card edge already frames it. */
.tier__more > .fold__summary::before { display: none; }

/* Chevron flips per state via the same open/shut label swap already used
   for the "Close"/"Show less" text — no JS needed for the icon itself. */
.fold__chevron {
  display: inline-block;
  font-size: 9px;
  line-height: 1;
  transform: translateY(-1px);
}

/* The remaining bullets keep .tier__list's gold dot exactly. */
.tier__list--rest { padding-top: 12px; padding-bottom: 0; }
