/* ============================================================
   BBM Design System — bbm-design.css
   Namespace: every selector starts with .bbm or targets
   elements inside <body class="bbm">. Do not bleed legacy
   field-manual selectors into this file.

   Source of truth: docs/superpowers/specs/2026-05-10-masterclass-alignment-phase-1-foundation.md
   ============================================================ */

/* ───── Tokens — Classic theme is the default (BBM brand: navy + neon).
   Light and dark are explicit user choices via [data-theme]. ───── */
body.bbm,
body.bbm[data-theme="classic"] {
  --bg:           #0a0f1e;
  --surface:      #0d1426;
  --surface-2:    #111a30;
  --ink:          #e9ebf1;
  --ink-2:        #b8bccb;
  --ink-3:        #8089a0;
  --accent:       #c3e636;
  --accent-soft:  rgba(195, 230, 54, 0.1);
  --line:         #1e2740;
  --success:      #c3e636;
  --on-ink:       #0a0f1e;
  --on-accent:    #0a0f1e;
  --urgent:       #f4c430;
  --urgent-soft:  rgba(244, 196, 48, 0.12);
  --header-bg:    rgba(10, 15, 30, 0.92);

  --serif: 'Fraunces', ui-serif, Georgia, serif;
  --sans:  'Inter', ui-sans-serif, system-ui, sans-serif;
  --mono:  'JetBrains Mono', ui-monospace, monospace;
}

/* ───── Type + spacing tokens — shared across all themes ─────
   Mobile-first sizing — text-xs/sm bumped up from the previous 12/14 baseline
   so eyebrows, captions, and meta text are legible on phones (where most
   traffic lands). Form inputs are forced to 16px elsewhere to prevent iOS
   from auto-zooming on focus. */
body.bbm {
  --text-xs:   13px;
  --text-sm:   15px;
  --text-base: 17px;
  --text-lg:   19px;
  --text-xl:   24px;
  --text-2xl:  32px;
  --text-3xl:  44px;

  --s1: 8px;  --s2: 16px; --s3: 24px; --s4: 32px;
  --s5: 48px; --s6: 64px; --s7: 96px;
}

/* ───── Light theme (explicit) — calm masterclass cream ───── */
body.bbm[data-theme="light"] {
  --bg:           #FAFAF7;
  --surface:      #FFFFFF;
  --surface-2:    #F4F2EC;
  --ink:          #1A1815;
  --ink-2:        #4A463E;
  --ink-3:        #6F6A60;
  --accent:       #A37A4E;
  --accent-soft:  #F4ECDB;
  --line:         #E8E4DA;
  --success:      #3D6745;
  --on-ink:       #FFFFFF;
  --on-accent:    #FFFFFF;
  --urgent:       #A8412B;
  --urgent-soft:  #F8E7E1;
  --header-bg:    rgba(250, 250, 247, 0.92);
}

/* ───── Dark theme overrides ───── */
body.bbm[data-theme="dark"] {
  --bg:           #000000;
  --surface:      #111111;
  --surface-2:    #1A1715;
  --ink:          #F5F2EC;
  --ink-2:        #C8C0B5;
  --ink-3:        #918A80;
  --accent:       #D4A87A;
  --accent-soft:  #2C2218;
  --line:         #2A2622;
  --success:      #79B380;
  --on-ink:       #000000;
  --on-accent:    #1A1715;
  --urgent:       #D96B4F;
  --urgent-soft:  #3A1F18;
  --header-bg:    rgba(0, 0, 0, 0.85);
}

/* No system-pref auto-flip — classic is the brand default. Users opt into light/dark via toggle. */

/* ───── learn.css token bridge ─────
   Some pages (currently /course) load BOTH bbm-design.css and learn.css so they
   can reuse the masterclass content layout (learn-section, learn-callout, etc.).
   learn.css declares its own --learn-* color tokens that are theme-blind, which
   makes the nav (bbm tokens) shift with the theme while the body content stays
   cream. Re-point the learn color tokens at the active bbm tokens whenever both
   classes are on the body, so the whole page tracks the active theme. Fonts
   already match between the two systems. */
body.bbm.learn {
  --learn-bg:          var(--bg);
  --learn-surface:     var(--surface);
  --learn-surface-2:   var(--surface-2);
  --learn-ink:         var(--ink);
  --learn-ink-2:       var(--ink-2);
  --learn-ink-3:       var(--ink-3);
  --learn-accent:      var(--accent);
  --learn-accent-soft: var(--accent-soft);
  --learn-line:        var(--line);
  --learn-focus:       var(--accent);
}

/* ───── Form-input safety ─────
   iOS Safari auto-zooms when a focused input's font-size is <16px. Floors
   every text-style input + textarea + select at 16px regardless of any
   page-level rule that drops them smaller. Applies on body.bbm so legacy
   admin pages without the class aren't affected. */
body.bbm input[type="text"],
body.bbm input[type="email"],
body.bbm input[type="tel"],
body.bbm input[type="search"],
body.bbm input[type="url"],
body.bbm input[type="password"],
body.bbm input[type="number"],
body.bbm textarea,
body.bbm select {
  font-size: max(16px, var(--text-base));
}

/* ───── Mobile typography step-up ─────
   Bumps the smallest type families up another notch on phones — eyebrows,
   captions, meta strings, and footer micro-copy go from text-xs (13px) to
   text-sm (15px) so they're legible at arm's length. Body text and headings
   are already in a comfortable range. */
@media (max-width: 768px) {
  body.bbm {
    --text-xs: 14px;
    --text-sm: 15px;
  }
}

/* ───── Reset + base body ───── */
/* Mobile-first guard against horizontal scroll / left-right jitter. Off-canvas
   panels (the cart drawer sits at right:0 + translateX(100%) when closed) and
   decorative overflow would otherwise extend the page's scroll width on phones.
   `clip` — not `hidden` — because `overflow:hidden` on the root would turn it
   into a scroll container and break the `position: sticky` nav. `clip` does not
   create a scroll container, so sticky keeps working. Unscoped on purpose so it
   also covers the cart/shop pages that load this sheet without `body.bbm`. */
html { overflow-x: clip; }
body.bbm, body.bbm * { box-sizing: border-box; }
body.bbm {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--sans);
  font-size: var(--text-base);
  line-height: 1.65;
  letter-spacing: -0.005em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  transition: background 200ms ease, color 200ms ease;
}
body.bbm[data-theme="dark"] { font-weight: 420; }
@media (prefers-color-scheme: dark) {
  body.bbm:not([data-theme="light"]):not([data-theme="classic"]) { font-weight: 420; }
}

/* Classic = default brand theme (defined at top of file). Extra cosmetic rules: */
body.bbm[data-theme="classic"],
body.bbm:not([data-theme]) { font-weight: 420; }
body.bbm[data-theme="classic"] h1, body.bbm[data-theme="classic"] h2, body.bbm[data-theme="classic"] h3,
body.bbm:not([data-theme]) h1, body.bbm:not([data-theme]) h2, body.bbm:not([data-theme]) h3 { color: var(--ink); }

/* ───── Smoke-test page chrome (dev-only) ───── */
body.bbm .bbm-smoketest-header {
  position: sticky; top: 0; z-index: 10;
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--s2) var(--s4);
  background: var(--header-bg);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--line);
}
body.bbm .bbm-smoketest-title {
  font-family: var(--serif); font-weight: 400;
  font-size: var(--text-xl); margin: 0; color: var(--ink);
  letter-spacing: -0.02em;
}
body.bbm .bbm-smoketest-toc {
  padding: var(--s2) var(--s4); border-bottom: 1px solid var(--line);
  font-family: var(--mono); font-size: var(--text-xs);
  color: var(--ink-3); text-transform: lowercase; letter-spacing: 0.04em;
}
body.bbm .bbm-smoketest-toc a {
  color: var(--ink-2); text-decoration: underline;
  text-underline-offset: 3px; text-decoration-thickness: 1px;
}
body.bbm .bbm-smoketest-toc a:hover { color: var(--accent); }
body.bbm .bbm-smoketest-main {
  max-width: 1240px; margin: 0 auto; padding: var(--s5) var(--s4);
}
body.bbm .bbm-smoketest-section {
  padding: var(--s5) 0; border-top: 1px solid var(--line);
}
body.bbm .bbm-smoketest-section:first-child { border-top: 0; }
body.bbm .bbm-smoketest-section > h2 {
  font-family: var(--serif); font-weight: 400; font-size: var(--text-2xl);
  margin: 0 0 var(--s4); letter-spacing: -0.02em; color: var(--ink);
}
body.bbm .bbm-smoketest-label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-3);
  margin: var(--s3) 0 var(--s2);
}

/* ───── Theme toggle pill ───── */
body.bbm .bbm-theme-toggle {
  display: inline-flex; gap: 4px; padding: 4px;
  background: var(--surface-2);
  border: 1px solid var(--line);
  border-radius: 999px;
}
body.bbm .bbm-theme-toggle button {
  background: transparent; border: 0;
  padding: 6px 14px; border-radius: 999px;
  font-family: var(--mono); font-size: var(--text-xs);
  color: var(--ink-3); text-transform: lowercase; letter-spacing: 0.04em;
  cursor: pointer; transition: background 120ms, color 120ms;
}
body.bbm .bbm-theme-toggle button:hover { color: var(--ink); }
body.bbm .bbm-theme-toggle button[aria-pressed="true"] {
  background: var(--ink); color: var(--on-ink);
}

/* ───── Typography ───── */
body.bbm h1, body.bbm h2, body.bbm h3, body.bbm h4 {
  font-family: var(--serif); font-weight: 400;
  letter-spacing: -0.02em; line-height: 1.15;
  margin: 0; color: var(--ink);
}
body.bbm h1 { font-size: var(--text-3xl); }
body.bbm h2 { font-size: var(--text-2xl); }
body.bbm h3 { font-size: var(--text-xl); }
body.bbm p  { margin: 0 0 var(--s3); color: var(--ink-2); max-width: 72ch; }
body.bbm a {
  color: var(--ink); text-decoration: underline;
  text-underline-offset: 3px; text-decoration-thickness: 1px;
}
body.bbm a:hover { color: var(--accent); }
/* High-contrast focus ring — accent color is the loudest token in every theme,
   so keyboard/tap focus is always unmissable (was --ink which blends into
   page bg in dark theme and was hard to spot in classic on cards). */
body.bbm :focus-visible {
  outline: 2px solid var(--accent); outline-offset: 3px;
  border-radius: 2px;
}

/* Eyebrow with 56px accent-gradient rule under it */
body.bbm .bbm-eyebrow {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--ink-3);
  margin: 0 0 var(--s3); padding-bottom: 14px;
  position: relative; display: inline-block;
}
body.bbm .bbm-eyebrow::after {
  content: ''; position: absolute; left: 0; bottom: 0;
  width: 56px; height: 2px;
  background: linear-gradient(90deg, var(--accent), transparent);
  border-radius: 2px;
}

/* Mono label (sections, callouts) — lowercase, no rule */
body.bbm .bbm-label-mono {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em; color: var(--ink-3);
}

/* ───── Buttons ───── */
body.bbm .bbm-btn {
  display: inline-block;
  background: var(--ink); color: var(--on-ink);
  border: 1px solid var(--ink);
  padding: 14px 24px;
  font-family: var(--sans); font-size: var(--text-base); font-weight: 500;
  border-radius: 4px;
  cursor: pointer; letter-spacing: -0.005em;
  text-decoration: none;
  transition: transform 100ms ease, background 100ms ease;
}
body.bbm .bbm-btn:hover { transform: translateY(-1px); }
body.bbm .bbm-btn:active { transform: scale(0.98); }
body.bbm .bbm-btn[disabled] { opacity: 0.4; cursor: not-allowed; transform: none; }

body.bbm .bbm-btn--accent {
  background: var(--accent); color: var(--on-accent); border-color: var(--accent);
}
body.bbm .bbm-btn--ghost {
  background: transparent; color: var(--ink);
  border: 1px solid var(--line); padding: 13px 23px;
}
body.bbm .bbm-btn--sm {
  padding: 10px 18px; font-size: var(--text-sm);
}
body.bbm .bbm-btn--ghost.bbm-btn--sm { padding: 9px 17px; }

/* ───── Section card ───── */
body.bbm .bbm-section-card {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: var(--s4);
}

/* ───── Callout (accent-soft fill, 3px accent left border) ───── */
body.bbm .bbm-callout {
  background: var(--accent-soft);
  border-left: 3px solid var(--accent);
  padding: var(--s4) var(--s5);
  border-radius: 0 4px 4px 0;
  margin: var(--s4) 0;
}
body.bbm .bbm-callout-label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em;
  color: var(--ink-3); margin-bottom: var(--s1);
}
body.bbm .bbm-callout h3 { font-size: var(--text-xl); margin: 0 0 var(--s2); }
body.bbm .bbm-callout p:last-child { margin-bottom: 0; }
body.bbm[data-theme="dark"] .bbm-callout-label { color: var(--ink-2); }
body.bbm[data-theme="dark"] .bbm-callout p { color: var(--ink); }
@media (prefers-color-scheme: dark) {
  body.bbm:not([data-theme="light"]) .bbm-callout-label { color: var(--ink-2); }
  body.bbm:not([data-theme="light"]) .bbm-callout p { color: var(--ink); }
}

/* ───── Framework primitive ───── */
body.bbm .bbm-framework {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: var(--s5);
  margin: var(--s4) 0;
}
body.bbm .bbm-framework-label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em; color: var(--ink-3);
}
body.bbm .bbm-framework-title {
  margin: var(--s1) 0 var(--s4);
  font-size: var(--text-xl);
}
body.bbm .bbm-framework-steps {
  list-style: none; padding: 0; margin: 0;
}
body.bbm .bbm-framework-steps > li {
  display: grid; grid-template-columns: 80px 1fr; gap: var(--s3);
  padding: var(--s4) 0;
  border-top: 1px solid var(--line);
}
body.bbm .bbm-framework-steps > li:first-child {
  border-top: 0; padding-top: 0;
}
body.bbm .bbm-framework-step-num {
  font-family: var(--mono); font-size: 44px;
  color: var(--accent); letter-spacing: -0.02em;
  line-height: 1; font-weight: 400;
}
body.bbm .bbm-framework-step-body h3 {
  font-size: var(--text-xl); margin: 0 0 var(--s1);
}
body.bbm .bbm-framework-step-body p {
  margin: 0; color: var(--ink-2);
}

@media (max-width: 768px) {
  body.bbm .bbm-framework { padding: var(--s3); }
  body.bbm .bbm-framework-steps > li { grid-template-columns: 56px 1fr; }
  body.bbm .bbm-framework-step-num { font-size: 32px; }
}

/* ───── Quote primitive ───── */
body.bbm .bbm-quote {
  margin: var(--s6) auto;
  max-width: 720px;
  text-align: center;
  border: 0; padding: 0;
}
body.bbm .bbm-quote-text {
  font-family: var(--serif); font-size: 28px;
  font-weight: 300; font-style: italic;
  line-height: 1.35; color: var(--ink);
  margin: 0 0 var(--s3);
}
body.bbm .bbm-quote-cite {
  font-family: var(--mono); font-size: var(--text-xs);
  color: var(--ink-3); font-style: normal;
  text-transform: uppercase; letter-spacing: 0.08em;
}

/* ───── Product card v2 — replaces .card + spec-table from field-manual ───── */
body.bbm .bbm-product-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: var(--s3);
  margin: var(--s3) 0;
}
@media (max-width: 768px) {
  body.bbm .bbm-product-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 480px) {
  body.bbm .bbm-product-grid { grid-template-columns: 1fr; }
}

body.bbm .bbm-product-card {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: var(--s4);
  display: flex; flex-direction: column;
  gap: var(--s2);
}
body.bbm .bbm-product-card__label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em;
  color: var(--accent); margin: 0;
}
body.bbm .bbm-product-card__name {
  font-family: var(--serif); font-size: var(--text-xl);
  font-weight: 400; letter-spacing: -0.02em;
  margin: 0; color: var(--ink);
}
body.bbm .bbm-product-card__prop {
  margin: 0; color: var(--ink-2);
}
body.bbm .bbm-product-card__chip {
  display: inline-block;
  align-self: flex-start;
  padding: 4px 10px; border-radius: 999px;
  background: var(--accent-soft); color: var(--ink);
  font-family: var(--mono); font-size: var(--text-xs);
  letter-spacing: 0.04em;
}
body.bbm[data-theme="dark"] .bbm-product-card__chip { color: var(--ink); }
body.bbm .bbm-product-card__proof {
  font-family: var(--mono); font-size: var(--text-xs);
  color: var(--ink-3); margin: 0;
}
body.bbm .bbm-product-card__price {
  font-family: var(--mono); font-size: var(--text-sm);
  color: var(--ink-3); margin: 0;
}
body.bbm .bbm-product-card .bbm-btn {
  align-self: flex-start; margin-top: auto;
}

/* Halo card variant for Masterclass — full-width separator tier */
body.bbm .bbm-product-card--halo {
  grid-column: 1 / -1;
  padding: var(--s5) var(--s5);
  background: var(--surface-2);
  border: 1px solid var(--line);
  display: grid;
  grid-template-columns: 1fr auto;
  gap: var(--s4);
  align-items: center;
}
body.bbm .bbm-product-card--halo .bbm-product-card__name {
  font-size: var(--text-2xl);
}
@media (max-width: 768px) {
  body.bbm .bbm-product-card--halo {
    grid-template-columns: 1fr;
    padding: var(--s4);
  }
}

/* ───── Urgency family (commercial pages only — NEVER on legal/brand pages) ───── */

/* Urgency chip — small terracotta pill */
body.bbm .bbm-urgency-chip {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 999px;
  background: var(--urgent-soft);
  color: var(--urgent);
  font-family: var(--mono); font-size: var(--text-xs);
  letter-spacing: 0.04em;
  text-transform: lowercase;
}

/* Rescue banner — full-width sticky urgency band (Phase 5 deploy) */
body.bbm .bbm-rescue-banner {
  display: flex; align-items: center; justify-content: center;
  gap: var(--s2); flex-wrap: wrap;
  padding: 10px var(--s3);
  background: var(--urgent-soft);
  border-bottom: 1px solid var(--urgent);
  color: var(--urgent);
  font-family: var(--mono); font-size: var(--text-sm);
  letter-spacing: 0.04em; text-align: center;
}
body.bbm .bbm-rescue-banner strong {
  color: var(--urgent); font-family: var(--serif);
  font-weight: 400; font-size: var(--text-base);
  letter-spacing: -0.005em;
}

/* Decision-shortcut chip — tan-accent mono pill on product cards */
body.bbm .bbm-decision-chip {
  display: inline-block;
  align-self: flex-start;
  padding: 4px 10px; border-radius: 999px;
  background: var(--accent-soft); color: var(--ink);
  font-family: var(--mono); font-size: var(--text-xs);
  letter-spacing: 0.04em;
}
body.bbm[data-theme="dark"] .bbm-decision-chip { color: var(--ink); }

/* ───── Cross-sell mention — module at bottom of product pages ───── */
body.bbm .bbm-cross-sell {
  margin: var(--s6) 0;
  padding: var(--s4) 0;
  border-top: 1px solid var(--line);
  display: grid; grid-template-columns: auto 1fr; gap: var(--s3);
  align-items: baseline;
}
body.bbm .bbm-cross-sell__label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em; color: var(--ink-3);
}
body.bbm .bbm-cross-sell__body {
  font-family: var(--serif); font-size: var(--text-lg);
  color: var(--ink); margin: 0;
}
body.bbm .bbm-cross-sell__body a {
  color: var(--ink); text-decoration: underline;
  text-underline-offset: 4px;
}
body.bbm .bbm-cross-sell__body a:hover { color: var(--accent); }

@media (max-width: 768px) {
  body.bbm .bbm-cross-sell {
    grid-template-columns: 1fr;
    gap: var(--s1);
  }
}

/* ───── Tool reference — inline mention inside Masterclass course only ───── */
body.bbm .bbm-tool-ref {
  font-family: var(--mono); font-size: var(--text-sm);
  color: var(--ink-2); text-decoration: underline;
  text-underline-offset: 3px; text-decoration-thickness: 1px;
  letter-spacing: 0.02em;
}
body.bbm .bbm-tool-ref:hover { color: var(--accent); }
body.bbm .bbm-tool-ref::after {
  content: ' →'; font-family: var(--mono);
}

/* ───── Hero variants ───── */
body.bbm .bbm-hero {
  padding: var(--s7) var(--s4) var(--s6);
  max-width: 1240px; margin: 0 auto;
}
body.bbm .bbm-hero__title {
  font-size: 60px; line-height: 1.05;
  letter-spacing: -0.025em;
  margin: 0 0 var(--s3); max-width: 18ch;
}
body.bbm .bbm-hero__lede {
  font-size: var(--text-lg); color: var(--ink-2);
  max-width: 50ch; margin: 0 0 var(--s4);
}
body.bbm .bbm-hero__cta {
  display: flex; gap: var(--s2);
  align-items: center; flex-wrap: wrap;
}
body.bbm .bbm-hero__trust {
  margin-top: var(--s4);
  display: flex; gap: var(--s4); align-items: baseline;
  font-family: var(--mono); font-size: var(--text-sm);
  color: var(--ink-3); text-transform: lowercase;
  letter-spacing: 0.04em; flex-wrap: wrap;
}
body.bbm .bbm-hero__trust strong {
  color: var(--ink); font-family: var(--serif);
  font-weight: 400; font-size: var(--text-xl);
  display: block;
}

/* fear-hero variant — same layout, copy difference signaled by data-variant for A/B */
body.bbm .bbm-hero[data-variant="fear"] .bbm-hero__title {
  /* Same styling; the variant attribute is for analytics/A-B routing */
}

@media (max-width: 768px) {
  body.bbm .bbm-hero { padding: var(--s5) var(--s3) var(--s4); }
  body.bbm .bbm-hero__title { font-size: 40px; }
}

/* ───── vs-chatgpt comparison ───── */
body.bbm .bbm-vs {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: var(--s3); margin: var(--s4) 0;
}
@media (max-width: 768px) {
  body.bbm .bbm-vs { grid-template-columns: 1fr; }
}
body.bbm .bbm-vs__panel {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: var(--s4);
}
body.bbm .bbm-vs__panel--ours {
  border-color: var(--accent);
  box-shadow: 0 0 0 1px var(--accent) inset;
}
body.bbm .bbm-vs__label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em;
  margin: 0 0 var(--s1);
}
body.bbm .bbm-vs__panel--ours .bbm-vs__label { color: var(--accent); }
body.bbm .bbm-vs__panel--theirs .bbm-vs__label { color: var(--ink-3); }
body.bbm .bbm-vs__quote {
  font-family: var(--serif); font-style: italic;
  font-size: var(--text-base); color: var(--ink-2);
  margin: var(--s2) 0 0;
}

/* ───── Founder note ───── */
body.bbm .bbm-founder {
  display: grid; grid-template-columns: 120px 1fr;
  gap: var(--s4); align-items: start;
  margin: var(--s5) 0;
  padding: var(--s4); background: var(--surface-2);
  border-radius: 6px;
}
@media (max-width: 480px) {
  body.bbm .bbm-founder { grid-template-columns: 80px 1fr; gap: var(--s3); padding: var(--s3); }
}
body.bbm .bbm-founder__photo {
  width: 120px; height: 120px; border-radius: 50%;
  background: var(--ink-3);
  border: 1px solid var(--line);
  overflow: hidden;
  display: grid; place-items: center;
  font-family: var(--mono); font-size: var(--text-xs);
  color: var(--surface); letter-spacing: 0.08em;
  text-transform: uppercase;
}
@media (max-width: 480px) {
  body.bbm .bbm-founder__photo { width: 80px; height: 80px; }
}
body.bbm .bbm-founder__body p { margin: 0 0 var(--s2); }
body.bbm .bbm-founder__body p:last-child { margin-bottom: 0; }
body.bbm .bbm-founder__sig {
  font-family: var(--serif); font-style: italic;
  font-size: var(--text-base); color: var(--ink);
}

/* ───── Activity pulse — live ticker (Phase 2 wires real data) ───── */
body.bbm .bbm-pulse {
  display: inline-flex; align-items: center; gap: var(--s1);
  font-family: var(--mono); font-size: var(--text-xs);
  color: var(--ink-3); text-transform: lowercase;
  letter-spacing: 0.04em;
}
body.bbm .bbm-pulse__dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--success);
  box-shadow: 0 0 0 0 var(--success);
  animation: bbm-pulse-blink 2s ease-in-out infinite;
}
@keyframes bbm-pulse-blink {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.5; transform: scale(1.2); }
}
@media (prefers-reduced-motion: reduce) {
  body.bbm .bbm-pulse__dot { animation: none; }
}

/* ───── Teaser preview — free intake → reveal → paywall (Phase 2 wires JS) ───── */
body.bbm .bbm-teaser {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: var(--s4);
  margin: var(--s4) 0;
}
body.bbm .bbm-teaser__label {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: lowercase; letter-spacing: 0.04em;
  color: var(--accent); margin: 0 0 var(--s2);
}
body.bbm .bbm-teaser__prompt {
  font-family: var(--serif); font-size: var(--text-lg);
  margin: 0 0 var(--s2); color: var(--ink);
}
body.bbm .bbm-teaser__input {
  width: 100%; padding: 12px 14px; box-sizing: border-box;
  font-family: var(--sans); font-size: var(--text-base);
  border: 1px solid var(--line); border-radius: 4px;
  background: var(--bg); color: var(--ink);
}
body.bbm .bbm-teaser__input:focus { outline: 2px solid var(--ink); outline-offset: 2px; }
body.bbm .bbm-teaser__reveal {
  margin-top: var(--s3); padding: var(--s3);
  background: var(--accent-soft);
  border-left: 3px solid var(--accent);
  border-radius: 0 4px 4px 0;
  display: none;
}
body.bbm .bbm-teaser[data-state="revealed"] .bbm-teaser__reveal { display: block; }
body.bbm .bbm-teaser__reveal-text {
  font-family: var(--serif); font-style: italic;
  font-size: var(--text-lg); margin: 0 0 var(--s2);
}
body.bbm .bbm-teaser__paywall {
  margin-top: var(--s3); padding-top: var(--s3);
  border-top: 1px dashed var(--line);
  display: flex; gap: var(--s2);
  align-items: center; flex-wrap: wrap;
}
body.bbm .bbm-teaser__paywall p { margin: 0; color: var(--ink-2); }

/* ───── Framework-public page layout (for /the-framework, Phase 2) ─────
   Full 1240px rail to match the home/marketing feel. Content fills the rail
   like home sections do — no inner narrow text columns. */
body.bbm .bbm-framework-page {
  max-width: 1240px; margin: 0 auto;
  padding: var(--s7) var(--s4);
}

/* Override learn.css's narrow 72ch reading column when a learn-* page is
   mixed with body.bbm (currently /course). Lets the marketing landing fill
   the 1240px rail like the rest of the site. */
body.bbm.learn .learn-chapter-reading {
  max-width: none;
}
body.bbm .bbm-framework-page__intro h1 {
  font-size: 60px; line-height: 1.05;
  letter-spacing: -0.025em; margin: 0 0 var(--s3);
  max-width: 16ch;
}
body.bbm .bbm-framework-page__intro .bbm-hero__lede {
  font-size: var(--text-lg); color: var(--ink-2);
  margin: 0 0 var(--s5);
}
body.bbm .bbm-framework-page__move {
  padding: var(--s5) 0;
  border-top: 1px solid var(--line);
}
body.bbm .bbm-framework-page__move:first-of-type { border-top: 0; padding-top: 0; }
body.bbm .bbm-framework-page__move-num {
  font-family: var(--mono); font-size: var(--text-xs);
  text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--accent); margin: 0 0 var(--s1);
}
body.bbm .bbm-framework-page__move h2 {
  font-size: var(--text-2xl); margin: 0 0 var(--s2);
}
body.bbm .bbm-framework-page__move-rule {
  font-family: var(--serif); font-style: italic;
  font-size: var(--text-lg); color: var(--accent);
  margin: var(--s2) 0;
}

@media (max-width: 768px) {
  body.bbm .bbm-framework-page { padding: var(--s5) var(--s3); }
  body.bbm .bbm-framework-page__intro h1 { font-size: 40px; }
}

/* ───── Footer primitive — used on every migrated page ───── */
body.bbm .bbm-footer {
  max-width: 1240px;
  margin: var(--s7) auto 0;
  padding: var(--s5) var(--s4) var(--s4);
  border-top: 1px solid var(--line);
  font-family: var(--sans);
  color: var(--ink-2);
}
/* Pondmetric-style: brand left, links right, single row. The 4-column
   grid produced too much visual density and a "data sheet" feel; collapsing
   to 2 columns and letting the links wrap inline gives a calmer footer. */
/* Brand fills the left; the three link columns (products · community · legal)
   sit in a single row hugging the right. The markup never adopted the planned
   `.bbm-footer__nav-groups` wrapper, so the old 2-column grid wrapped 4 children
   into a gappy 2×2. Matching the grid to the actual 4 children fixes that. */
body.bbm .bbm-footer__top {
  display: grid;
  grid-template-columns: minmax(200px, 1fr) repeat(3, auto);
  column-gap: var(--s4);
  row-gap: var(--s4);
  margin-bottom: var(--s4);
  align-items: start;
}
@media (max-width: 768px) {
  body.bbm .bbm-footer__top { grid-template-columns: 1fr; gap: var(--s3); }
}
/* The three columns (products · community · legal) become a single inline
   wrap of grouped links on the right side. */
body.bbm .bbm-footer__top > div:not(:first-child) {
  display: flex;
  flex-direction: column;
  gap: var(--s1);
}
body.bbm .bbm-footer__nav-groups {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--s4);
}
@media (max-width: 480px) {
  body.bbm .bbm-footer__nav-groups { grid-template-columns: 1fr 1fr; }
}
body.bbm .bbm-footer__brand {
  font-family: var(--serif);
  font-size: var(--text-lg);
  color: var(--ink);
  text-decoration: none;
  letter-spacing: -0.01em;
}
body.bbm .bbm-footer__tag {
  margin: var(--s1) 0 0;
  color: var(--ink-2);
  font-size: var(--text-sm);
  max-width: 32ch;
  line-height: 1.5;
}
body.bbm .bbm-footer__col-label {
  font-family: var(--mono);
  font-size: var(--text-xs);
  text-transform: lowercase;
  letter-spacing: 0.04em;
  color: var(--ink-3);
  margin: 0 0 var(--s2);
}
body.bbm .bbm-footer__links {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 6px;
}
/* Stray empty placeholder <li> exist in the footer markup across pages — hide
   them so they don't add a phantom row of gap. */
body.bbm .bbm-footer__links li:empty { display: none; }
body.bbm .bbm-footer__links a {
  color: var(--ink-2);
  font-size: var(--text-sm);
  text-decoration: none;
  text-underline-offset: 3px;
}
body.bbm .bbm-footer__links a:hover {
  color: var(--accent);
  text-decoration: underline;
}
body.bbm .bbm-footer__bottom {
  padding-top: var(--s3);
  border-top: 1px solid var(--line);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: var(--mono);
  font-size: var(--text-xs);
  color: var(--ink-3);
  text-transform: lowercase;
  letter-spacing: 0.04em;
  gap: var(--s2);
  flex-wrap: wrap;
}

/* ───── Anti-impersonation footer (Phase 1.5) — aligns with bbm-footer ─────
   The aside markup uses inline styles on its children (per-page legacy);
   here we style only the wrapper to match the bbm-footer dimensions.
   Children inline styles still apply but the container now centers + pads
   so the block visually belongs to the same footer system. */
body.bbm .bbm-trust-footer {
  max-width: 1240px;
  margin: 0 auto;
  padding: var(--s2) var(--s4) var(--s6);
  font-family: var(--sans);
  color: var(--ink-3);
}
body.bbm .bbm-trust-footer p {
  /* Override the inline grey #888 with theme-aware tokens */
  color: var(--ink-3) !important;
  font-family: var(--mono) !important;
}
body.bbm .bbm-trust-footer p:last-child {
  /* The "Report imposters to..." line — slightly softer */
  font-family: var(--sans) !important;
  text-transform: none !important;
  letter-spacing: normal !important;
  font-size: var(--text-sm) !important;
  color: var(--ink-3) !important;
  line-height: 1.5;
  max-width: 60ch;
}
body.bbm .bbm-trust-footer ul {
  /* Reinforce the flex layout in case some pages have weaker inline styles */
  font-family: var(--mono);
  gap: var(--s3) !important;
}
body.bbm .bbm-trust-footer li {
  margin: 0;
}
body.bbm .bbm-trust-footer a {
  color: var(--ink-2);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}
body.bbm .bbm-trust-footer a:hover { color: var(--accent); }
@media (max-width: 480px) {
  body.bbm .bbm-trust-footer ul { gap: var(--s2) !important; }
}

/* The lighter "compact" anti-impersonation variant (legal pages from Phase 1.5)
   sits inside an aside without the bbm-trust-footer class — give it similar
   alignment so it doesn't dangle full-width either. */
body.bbm > main + aside[aria-label="Official accounts"],
body.bbm > aside[aria-label="Official accounts"] {
  max-width: 1240px;
  margin: var(--s4) auto var(--s5) !important;
  padding-left: var(--s4);
  padding-right: var(--s4);
}

/* ============================================================
   BEM aliases — migration cleanup
   Subagent-driven page migrations (index.html, shop.html) invented
   BEM-style child class names that didn't match the canonical primitives.
   Rather than rewrite 22 pages, add the missing rules here so every
   invented class renders correctly.
   ============================================================ */

/* ───── Hero BEM children ───── */
body.bbm .bbm-hero__h1,
body.bbm .bbm-hero__title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 60px;
  line-height: 1.05;
  letter-spacing: -0.025em;
  margin: 0 0 var(--s3);
  max-width: 18ch;
  color: var(--ink);
}
@media (max-width: 768px) {
  body.bbm .bbm-hero__h1,
  body.bbm .bbm-hero__title { font-size: 40px; }
}
body.bbm .bbm-hero__eyebrow {
  font-family: var(--mono);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--ink-3);
  margin: 0 0 var(--s3);
  padding-bottom: 14px;
  position: relative;
  display: inline-block;
}
body.bbm .bbm-hero__eyebrow::after {
  content: '';
  position: absolute;
  left: 0; bottom: 0;
  width: 56px; height: 2px;
  background: linear-gradient(90deg, var(--accent), transparent);
  border-radius: 2px;
}
body.bbm .bbm-hero__subhead {
  font-family: var(--serif);
  font-weight: 400;
  font-size: var(--text-2xl);
  line-height: 1.2;
  letter-spacing: -0.02em;
  color: var(--ink);
  margin: 0 0 var(--s3);
}
body.bbm .bbm-hero__intro,
body.bbm .bbm-hero__lede {
  font-size: var(--text-lg);
  color: var(--ink-2);
  max-width: 50ch;
  margin: 0 0 var(--s4);
  line-height: 1.55;
}
body.bbm .bbm-hero__actions,
body.bbm .bbm-hero__cta {
  display: flex;
  gap: var(--s2);
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: var(--s4);
}
body.bbm .bbm-hero__trust {
  margin-top: var(--s4);
  display: flex;
  gap: var(--s4);
  align-items: baseline;
  font-family: var(--mono);
  font-size: var(--text-sm);
  color: var(--ink-3);
  text-transform: lowercase;
  letter-spacing: 0.04em;
  flex-wrap: wrap;
}
body.bbm .bbm-hero__trust strong {
  color: var(--ink);
  font-family: var(--serif);
  font-weight: 400;
  font-size: var(--text-xl);
  display: block;
}

/* ───── Callout BEM children ───── */
body.bbm .bbm-callout__h2 {
  font-family: var(--serif);
  font-weight: 400;
  font-size: var(--text-2xl);
  margin: 0 0 var(--s2);
  color: var(--ink);
  letter-spacing: -0.02em;
  line-height: 1.2;
}
body.bbm .bbm-callout__body {
  color: var(--ink-2);
  margin: 0 0 var(--s3);
  font-size: var(--text-base);
  line-height: 1.65;
}
body.bbm .bbm-callout__body:last-child { margin-bottom: 0; }
body.bbm .bbm-callout__actions {
  display: flex;
  gap: var(--s2);
  flex-wrap: wrap;
  margin-top: var(--s3);
}

/* ───── Framework BEM children (alternate naming used by index.html migration)
   HTML pattern is 3 siblings inside .bbm-framework__step:
     <div class="bbm-framework__num">01</div>
     <h3 class="bbm-framework__title">…</h3>
     <p class="bbm-framework__body">…</p>
   Place explicitly so num spans both rows on the left, title sits top-right,
   body sits bottom-right with proper row-gap between heading and prose. ───── */
body.bbm .bbm-framework__step {
  display: grid;
  grid-template-columns: 80px 1fr;
  grid-template-rows: auto auto;
  column-gap: var(--s3);
  row-gap: var(--s2);
  padding: var(--s4) 0;
  border-top: 1px solid var(--line);
  align-items: start;
}
body.bbm .bbm-framework__step:first-child {
  border-top: 0;
  padding-top: 0;
}
body.bbm .bbm-framework__num {
  grid-row: 1 / span 2;
  grid-column: 1;
  font-family: var(--mono);
  font-size: 44px;
  color: var(--accent);
  letter-spacing: -0.02em;
  line-height: 1;
  font-weight: 400;
  align-self: start;
}
body.bbm .bbm-framework__title {
  grid-row: 1;
  grid-column: 2;
  font-family: var(--serif);
  font-size: var(--text-xl);
  font-weight: 400;
  letter-spacing: -0.02em;
  line-height: 1.3;
  color: var(--ink);
  margin: 0;
}
body.bbm .bbm-framework__body {
  grid-row: 2;
  grid-column: 2;
  margin: 0;
  color: var(--ink-2);
  font-size: var(--text-base);
  line-height: 1.65;
  max-width: 60ch;
}
@media (max-width: 768px) {
  body.bbm .bbm-framework__step {
    grid-template-columns: 56px 1fr;
    column-gap: var(--s2);
    padding: var(--s3) 0;
  }
  body.bbm .bbm-framework__num { font-size: 32px; }
  body.bbm .bbm-framework__title { font-size: var(--text-lg); }
}

/* ───── Founder avatar alias ───── */
body.bbm .bbm-founder__avatar {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: var(--accent-soft);
  border: 1px solid var(--line);
  display: grid;
  place-items: center;
  font-family: var(--serif);
  font-size: var(--text-2xl);
  color: var(--accent);
  letter-spacing: -0.02em;
  flex-shrink: 0;
}
@media (max-width: 480px) {
  body.bbm .bbm-founder__avatar {
    width: 80px;
    height: 80px;
    font-size: var(--text-xl);
  }
}

/* ───── Generic button aliases (btn-primary / btn-secondary used by migrated pages) ───── */
body.bbm .btn-primary,
body.bbm .bbm-product-card__cta {
  display: inline-block;
  background: var(--ink);
  color: var(--on-ink);
  border: 1px solid var(--ink);
  padding: 14px 24px;
  font-family: var(--sans);
  font-size: var(--text-base);
  font-weight: 500;
  border-radius: 4px;
  cursor: pointer;
  letter-spacing: -0.005em;
  text-decoration: none;
  transition: transform 100ms ease, background 100ms ease;
}
body.bbm .btn-primary:hover,
body.bbm .bbm-product-card__cta:hover { transform: translateY(-1px); }
body.bbm .btn-secondary,
body.bbm .bbm-product-card__cta.btn-secondary {
  background: transparent;
  color: var(--ink);
  border: 1px solid var(--line);
  padding: 13px 23px;
  font-family: var(--sans);
  font-size: var(--text-base);
  font-weight: 500;
  border-radius: 4px;
  text-decoration: none;
  letter-spacing: -0.005em;
  display: inline-block;
  cursor: pointer;
}
body.bbm .btn-secondary:hover { color: var(--accent); border-color: var(--accent); }

/* ───── Product card extras (used by index/shop) ───── */
body.bbm .bbm-product-card__desc {
  margin: 0 0 var(--s2);
  color: var(--ink-2);
  font-size: var(--text-base);
  line-height: 1.55;
}
body.bbm .bbm-product-card__secondary {
  font-family: var(--mono);
  font-size: var(--text-xs);
  color: var(--ink-3);
  margin: var(--s1) 0 0;
  letter-spacing: 0.02em;
}
body.bbm .bbm-product-card__secondary a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.bbm .bbm-product-card__crosssell {
  font-family: var(--mono);
  font-size: var(--text-xs);
  color: var(--ink-3);
  margin: var(--s2) 0 0;
  padding-top: var(--s2);
  border-top: 1px dashed var(--line);
  text-transform: lowercase;
  letter-spacing: 0.04em;
}
body.bbm .bbm-product-card__crosssell a {
  color: var(--ink-2);
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.bbm .bbm-product-card__crosssell a:hover { color: var(--accent); }

/* ───── Testimonials wrapper ───── */
body.bbm .bbm-testimonials {
  max-width: 1240px;
  margin: var(--s6) auto;
  padding: 0 var(--s4);
}

/* ───── Hero container default (in case bbm-hero is used without inline padding) ───── */
body.bbm .bbm-hero {
  max-width: 1240px;
  margin: 0 auto;
  padding: var(--s6) var(--s4) var(--s5);
}
@media (max-width: 768px) {
  body.bbm .bbm-hero { padding: var(--s5) var(--s3) var(--s4); }
}

/* ───── Generic section / page-shell sanity (page-shell was a legacy wrapper;
   give it sensible defaults so it doesn't constrain or break layouts) ───── */
body.bbm .page-shell {
  display: block;
  width: 100%;
}

/* ============================================================
   Default <main> constraint
   Without this, top-level <section> elements inside <main> that
   don't have a specific bbm-* primitive class (e.g. bare
   <section aria-label="Products">) span the full window width.
   Constrain <main> globally so every page has a predictable
   1240px content rail, regardless of which sections it uses.
   ============================================================ */
body.bbm > main {
  max-width: 1240px;
  margin: 0 auto;
  width: 100%;
}

/* Bare sections (no bbm-* class) get default padding so they don't
   collapse against the edges on wide viewports */
body.bbm main > section:not([class*="bbm-"]),
body.bbm main > div:not([class*="bbm-"]):not(.shop-wrap):not(.guide-hero):not(.about-hero) {
  padding: var(--s6) var(--s4);
}
@media (max-width: 768px) {
  body.bbm main > section:not([class*="bbm-"]),
  body.bbm main > div:not([class*="bbm-"]):not(.shop-wrap):not(.guide-hero):not(.about-hero) {
    padding: var(--s5) var(--s3);
  }
}

/* ============================================================
   .bbm-nav — single top nav, replaces the legacy field-manual nav.
   One row: brand left, links right, theme toggle far right.
   No status indicators, no hamburger gymnastics — sized to feel calm
   like a service-business site (pondmetric model).
   ============================================================ */
body.bbm .bbm-nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--header-bg);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--line);
}
body.bbm .bbm-nav__inner {
  max-width: 1240px;
  margin: 0 auto;
  padding: 14px var(--s4);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s4);
}
body.bbm .bbm-nav__brand {
  display: inline-flex;
  align-items: center;
  gap: var(--s1);
  font-family: var(--serif);
  font-size: var(--text-lg);
  letter-spacing: -0.01em;
  color: var(--ink);
  text-decoration: none;
  font-weight: 400;
}
body.bbm .bbm-nav__brand:hover { color: var(--accent); }
/* Concept C wordmark lockup: "BBM." compact mark + full name */
body.bbm .bbm-nav__mark {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--text-xl);
  letter-spacing: -0.04em;
  color: var(--ink);
}
body.bbm .bbm-nav__dot { color: var(--accent); }
body.bbm .bbm-nav__wm {
  font-family: var(--serif);
  font-weight: 400;
  font-size: var(--text-sm);
  color: var(--ink-2);
  letter-spacing: -0.01em;
}
body.bbm .bbm-nav__brand:hover .bbm-nav__mark { color: var(--accent); }
@media (max-width: 480px) {
  body.bbm .bbm-nav__wm { display: none; } /* tiny screens: just "BBM." */
}
body.bbm .bbm-nav__links {
  display: flex;
  align-items: center;
  gap: var(--s4);
  font-family: var(--sans);
  font-size: var(--text-sm);
}
body.bbm .bbm-nav__links a {
  color: var(--ink-2);
  text-decoration: none;
  letter-spacing: -0.005em;
}
body.bbm .bbm-nav__links a:hover { color: var(--ink); }
body.bbm .bbm-nav__links a[aria-current="page"] { color: var(--ink); }
body.bbm .bbm-nav__cta {
  background: var(--ink);
  color: var(--on-ink);
  padding: 8px 16px;
  border-radius: 4px;
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: -0.005em;
}
body.bbm .bbm-nav__cta:hover { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }

/* Theme toggle inside the nav: smaller than the smoke-test header version */
body.bbm .bbm-nav .bbm-theme-toggle button { padding: 4px 10px; font-size: 12px; }

/* Nav cart button — persistent link to /cart with a live item-count badge.
   Static on shop.html; injected on every other page by /js/nav-cart-badge.js. */
body.bbm .bbm-nav__links a.shop-cart-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: 8px 14px;
  color: var(--ink-2);
  font-family: var(--mono);
  font-size: var(--text-xs);
  letter-spacing: 0.06em;
  text-transform: lowercase;
  transition: color 150ms ease, border-color 150ms ease;
}
body.bbm .bbm-nav__links a.shop-cart-btn:hover { color: var(--accent); border-color: var(--accent); }
body.bbm .shop-cart-btn svg { width: 16px; height: 16px; }
body.bbm .cart-badge {
  display: none;
  min-width: 18px; height: 18px;
  padding: 0 5px;
  background: var(--accent); color: var(--on-accent);
  border-radius: 2px;
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0;
  align-items: center; justify-content: center;
}

/* ───── Mobile hamburger menu ─────
   Injected into .bbm-nav by /js/bbm-nav.js (no per-page markup). The page links
   only collapse behind the hamburger once JS has built the menu and set
   body.has-mobile-nav — otherwise the links stay visible so nav never breaks. */
body.bbm .bbm-nav__toggle {
  display: none; /* desktop: hidden; shown ≤480px once the menu exists */
  flex-direction: column;
  align-items: flex-start; /* left-align so the taper reads as stepped */
  justify-content: center;
  gap: 5px;
  width: 40px;
  height: 40px;
  padding: 0 0 0 8px; /* left pad centers the 24px-wide bar group in the button */
  background: transparent;
  border: 1px solid var(--line);
  border-radius: 4px;
  cursor: pointer;
}
/* Tapered/stepped bars — flat ends, echoing the bold geometry of the logo mark. */
body.bbm .bbm-nav__toggle span {
  display: block;
  width: 24px;
  height: 3px;
  border-radius: 0;
  background: var(--ink);
  transition: transform 200ms ease, opacity 200ms ease, width 200ms ease;
}
body.bbm .bbm-nav__toggle span:nth-child(2) { width: 19px; }
body.bbm .bbm-nav__toggle span:nth-child(3) { width: 14px; }
/* Open state: equalize widths so the X is symmetric; offset matches gap(5)+height(3). */
body.bbm .bbm-nav__toggle[aria-expanded="true"] span:nth-child(1) { width: 24px; transform: translateY(8px) rotate(45deg); }
body.bbm .bbm-nav__toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
body.bbm .bbm-nav__toggle[aria-expanded="true"] span:nth-child(3) { width: 24px; transform: translateY(-8px) rotate(-45deg); }

body.bbm .bbm-nav__mobile {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  flex-direction: column;
  padding: var(--s3);
  background: var(--surface);
  border-bottom: 1px solid var(--line);
  box-shadow: 0 12px 28px rgba(0, 0, 0, 0.18);
  z-index: 60; /* above the nav bar (z-index:50) */
}
body.bbm .bbm-nav__mobile.open { display: flex; }
body.bbm .bbm-nav__mobile a {
  display: block;
  padding: 14px 6px;
  color: var(--ink);
  text-decoration: none;
  font-family: var(--sans);
  font-size: var(--text-lg);
  border-bottom: 1px solid var(--line);
}
body.bbm .bbm-nav__mobile a:hover { color: var(--accent); }
body.bbm .bbm-nav__mobile .bbm-theme-toggle {
  display: flex;
  gap: 6px;
  margin-top: var(--s3);
}

/* Mobile — links collapse to a thinner row, hide some less-critical items via container-query-like media */
@media (max-width: 768px) {
  body.bbm .bbm-nav__inner { gap: var(--s2); padding: 12px var(--s3); }
  body.bbm .bbm-nav__links { gap: var(--s2); font-size: var(--text-xs); flex-wrap: wrap; justify-content: flex-end; }
  body.bbm .bbm-nav__cta { padding: 6px 12px; font-size: var(--text-xs); }
}
@media (max-width: 480px) {
  body.bbm .bbm-nav__links { gap: var(--s2); }
  body.bbm .bbm-nav__inner { justify-content: space-between; }
  /* Show the hamburger and collapse the inline page-links + theme toggle into it
     — but ONLY when JS has built the menu (fail-safe: no JS ⇒ links stay visible). */
  body.bbm.has-mobile-nav .bbm-nav__toggle { display: inline-flex; }
  body.bbm.has-mobile-nav .bbm-nav__links > a:not(.shop-cart-btn),
  body.bbm.has-mobile-nav .bbm-nav__links > .bbm-theme-toggle { display: none; }
}

/* ============================================================
   Hide legacy field-manual DOM on body.bbm pages.
   This is a defensive layer — even if some pages still have the
   legacy .nav/.mobile-menu/.toast/.popup-* markup left over from
   the field-manual era, hide it so the new .bbm-nav is the only
   visible navigation surface. Phase 2c Step 2 actually removes
   the markup from every page; these rules are the safety net.
   ============================================================ */
body.bbm > .page-shell > nav.nav,
body.bbm > .page-shell > .mobile-menu,
body.bbm > .page-shell > .admin-access,
body.bbm > .page-shell > .toast,
body.bbm > .page-shell > .popup-overlay,
body.bbm > .page-shell > .popup-modal,
body.bbm > nav.nav,
body.bbm > .mobile-menu,
body.bbm > .toast,
body.bbm > .popup-overlay,
body.bbm > .popup-modal { display: none !important; }

/* ============================================================
   Scroll polish — progress bar + fade-up reveals + sticky CTA
   Powered by /js/bbm-scroll-fx.js. Everything respects
   prefers-reduced-motion via the JS (it just marks elements
   revealed immediately) and via the @media block below.
   ============================================================ */

/* Top-of-viewport scroll progress indicator */
body.bbm .bbm-scroll-progress {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: 0 50%;
  z-index: 1000;
  pointer-events: none;
  will-change: transform;
  transition: transform 80ms linear;
}

/* Fade-up reveal pattern — elements get .bbm-reveal then JS toggles
   .bbm-revealed when they enter the viewport. */
body.bbm .bbm-reveal {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 520ms cubic-bezier(.4, 0, .2, 1),
              transform 520ms cubic-bezier(.4, 0, .2, 1);
  will-change: opacity, transform;
}
body.bbm .bbm-reveal.bbm-revealed {
  opacity: 1;
  transform: translateY(0);
}

/* Sticky mobile add-to-cart bar (product pages only).
   Hidden on desktop — appears at <=768px when the hero scrolls past. */
body.bbm .sticky-buy {
  position: fixed;
  bottom: 0; left: 0; right: 0;
  display: none;
  align-items: center;
  gap: var(--s3);
  padding: 12px var(--s3) max(14px, env(safe-area-inset-bottom));
  background: color-mix(in srgb, var(--bg) 88%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  border-top: 1px solid var(--line);
  z-index: 90;
  transform: translateY(110%);
  transition: transform 320ms cubic-bezier(.4, 0, .2, 1);
}
body.bbm .sticky-buy.is-visible { transform: translateY(0); }
body.bbm .sticky-buy__product {
  flex: 1; min-width: 0;
  font-family: var(--mono);
  font-size: var(--text-xs);
  color: var(--ink-2);
  letter-spacing: 0.02em;
  line-height: 1.3;
}
body.bbm .sticky-buy__product strong {
  display: block;
  color: var(--ink);
  font-family: var(--serif);
  font-weight: 400;
  font-size: var(--text-base);
  letter-spacing: -0.01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
body.bbm .sticky-buy__product .price { color: var(--accent); font-weight: 500; }
body.bbm .sticky-buy__cta {
  flex-shrink: 0;
  background: var(--accent);
  color: var(--on-accent);
  border: 1px solid var(--accent);
  border-radius: 8px;
  padding: 12px 18px;
  font-family: var(--sans);
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: -0.005em;
  cursor: pointer;
  white-space: nowrap;
  transition: transform 120ms ease;
}
body.bbm .sticky-buy__cta:active { transform: scale(0.97); }

@media (max-width: 768px) {
  body.bbm .sticky-buy { display: flex; }
}

/* Honor accessibility preference — skip all motion */
@media (prefers-reduced-motion: reduce) {
  body.bbm .bbm-scroll-progress { transition: none; }
  body.bbm .bbm-reveal,
  body.bbm .bbm-reveal.bbm-revealed {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  body.bbm .sticky-buy { transition: none; }
}

/* ============================================================
   Classic-logo watermark — OG mark (BBM-logo-large.png) ghosted
   behind the home hero. The PNG's alpha channel is used as a CSS
   mask, then filled with `background-color: var(--ink)`, so the
   silhouette auto-themes (cream in classic/dark, dark in light)
   and never fights the page. ~5% opacity so it never competes
   with content.
   ============================================================ */
body.bbm .bbm-hero {
  position: relative;
  overflow: hidden;
}
body.bbm .bbm-hero::before {
  content: '';
  position: absolute;
  top: -8%; right: -6%;
  width: 540px; height: 540px;
  background-color: var(--ink);
  -webkit-mask: url('/images/BBM-logo-large.png') no-repeat center / contain;
          mask: url('/images/BBM-logo-large.png') no-repeat center / contain;
  opacity: 0.06;
  pointer-events: none;
  z-index: 0;
}
/* Lift hero content above the watermark so headline/lede/buttons stay crisp. */
body.bbm .bbm-hero > * { position: relative; z-index: 1; }

@media (max-width: 768px) {
  body.bbm .bbm-hero::before {
    width: 360px; height: 360px;
    top: auto; bottom: -10%; right: -25%;
    opacity: 0.05;
  }
}

@media (prefers-contrast: more) {
  body.bbm .bbm-hero::before { display: none; }
}

/* ── Social-proof + guarantee block (js/bbm-trust.js) ── */
body.bbm .bbm-trust { margin: 16px 0; padding: 14px 16px; border: 1px solid var(--line); border-radius: 10px; background: color-mix(in srgb, var(--accent) 5%, transparent); }
body.bbm .bbm-trust__proof { font-size: 14px; color: var(--ink); font-weight: 500; }
body.bbm .bbm-trust__proof strong { color: var(--accent); }
body.bbm .bbm-trust__sep { color: var(--ink-3, #888); }
body.bbm .bbm-trust__guarantee { margin: 10px 0 0; font-size: 12px; color: var(--ink-3, #888); }

/* ── Sales-focus mode: strip nav/footer escape hatches on tripwire/landing pages ── */
body.bbm-sales .bbm-nav__links,
body.bbm-sales .bbm-footer__nav,
body.bbm-sales .bbm-footer__links { display: none !important; }
body.bbm-sales .bbm-nav { pointer-events: none; }
body.bbm-sales .bbm-nav__brand { pointer-events: auto; }
