/* styles.css: design tokens first, layout second. Layout source: the CEO's
   fresco.html (launchpad design-kit, reference/fresco-kit.html): a 12-column
   hairline grid behind the page, Host Grotesk display at weight 800 with
   tight tracking, tabular figures, tracked uppercase labels, light and dark
   by prefers-color-scheme plus a toggle. The drop zone copies the Untitled UI
   file-upload anatomy named in INGESTION-WIREFRAME.md: dashed zone, icon,
   hint line, then a file row with name, size, progress and check. Red
   appears only on a block.

   The proof page (PROOF-BRIEF.md, 2026-09-04): the hero is the live board
   of the sample deal (Scenario, two steppers, the IRR grid, three tiles, the
   NOI bars) with two proof buttons beside it; then #proof, the actual
   workbook small and counted beside the page it became; then one pinned
   frame (#how) that scrolls through five steps of the product, each a chip,
   a headline, a sub line and a real capture with a rail of buttons under it;
   then a close of chips, one still, a filmstrip, the test run (the live drop
   zone behind an account), a tick matrix, three trust chips, the FAQ under
   one summary and the end card. Two native dialogs: the demo lightbox and
   the account form. Since 2026-09-06 the nav is two moves toward the deal
   (Sample deal, Send your deal as a filled button) plus Sign in and the
   toggle, the hero's left column carries two content-width buttons in a
   wrapping row, the quiet try line under them and a three-line proof strip
   pinned to its foot, and the Before tile of #proof is seven
   printed sheets of the workbook fanned like paper on a desk with the counts
   under it as quiet labels. At 900 and under the frame is a horizontal snap carousel
   and the rail is dots. Tokens for frame, shadow and motion are
   DESIGN-BRIEF.md section 2; the stage, the board, the confirm panel and the
   dialogs share them so they read as one family of objects on the paper.

   Colour jobs: teal is the action and what it drives (every CTA, the selected
   cell, links, the Levered IRR readout). Warm orange is the mark's short bar
   only, wherever the mark renders (nav, end card, footer), and --warm occurs
   below in exactly one rule. Locked lowercase lines use .label--lower so no
   text-transform ever title-cases them. Radius is 0 everywhere (Basel).

   Motion: six motions, all inside prefers-reduced-motion: no-preference at
   the foot of this file; the reduce block after it is the backstop. Reveal on
   scroll runs only when app.js has set html[data-reveal], so with no observer
   (or no script) every element starts visible.

   Fonts: build.py inlines site/assets/fonts.css (the two @font-face rules and
   their OFL/ISC notice) into a <style> in the head of every generated page, so
   this file stays readable and fonts.css stays the single source. No @import.

   WCAG 2.2 contrast, computed 2026-09-04 (relative luminance, rounded to 2
   places), text on ground. Every pair used for text clears AA 4.5:1; pairs
   marked non-text are borders, bars and the mark, held to 3:1 where they
   carry meaning. The dark hover is darker than the kit's #4A8F8C (3.75 with
   white, a fail); it darkens on hover in both schemes.

     light  ink         #141413 on paper     #F4F2EE   16.49
     light  ink         #141413 on surface   #f9f7f3   17.23  (board, tiers, sample card)
     light  ink-2       #3d3c3a on paper     #F4F2EE    9.85
     light  ink-2       #3d3c3a on surface   #f9f7f3   10.30
     light  ink-3       #6b6966 on paper     #F4F2EE    4.89
     light  ink-3       #6b6966 on surface   #f9f7f3    5.11
     light  ink-3       #6b6966 on surface-2 #efece6    4.64
     light  ink         #141413 on surface-2 #efece6   15.63  (tier hover)
     light  ink         #141413 on pressed   #e4e1db   14.13  (the pressed segment)
     light  ink-2       #3d3c3a on surface-2 #efece6    9.35
     light  white       #ffffff on accent    #2A6B6A    6.16  (buttons, the selected cell)
     light  white       #ffffff on hover     #1F5554    8.45
     light  accent-text #2A6B6A on paper     #F4F2EE    5.51
     light  accent-text #2A6B6A on surface   #f9f7f3    5.76  (Levered IRR readout, link card)
     light  accent-text #2A6B6A on surface-2 #efece6    5.22
     light  paper       #F4F2EE on ink       #141413   16.49  (toggle hover, outline buttons)
     light  cream       #F4F2EE on scrim     #484847    8.19  (the locked line on the still; the
                                                              scrim's darkest stop, .78 ink over white)
     light  frame       #141413 on paper     #F4F2EE   16.49  (non-text)
     light  ink-3 bars  #6b6966 on surface   #f9f7f3    5.11  (non-text)
     light  warm        #C47A4A on paper     #F4F2EE    3.01  (non-text, the mark's short bar)
     dark   ink         #F4F2EE on paper     #141413   16.49
     dark   ink         #F4F2EE on surface   #1c1b19   15.39
     dark   ink-2       #c8c5be on paper     #141413   10.70
     dark   ink-2       #c8c5be on surface   #1c1b19    9.99
     dark   ink-3       #9a968e on paper     #141413    6.26
     dark   ink-3       #9a968e on surface   #1c1b19    5.84
     dark   ink-3       #9a968e on surface-2 #252422    5.26
     dark   ink         #F4F2EE on surface-2 #252422   13.87
     dark   ink         #F4F2EE on pressed   #33322f   11.47  (the pressed segment)
     dark   ink-2       #c8c5be on surface-2 #252422    9.00
     dark   white       #ffffff on accent    #3D7A78    4.94
     dark   white       #ffffff on hover     #346E6C    5.84
     dark   accent-text #7ab5b3 on paper     #141413    7.98
     dark   accent-text #7ab5b3 on surface   #1c1b19    7.45
     dark   accent-text #7ab5b3 on surface-2 #252422    6.71
     dark   frame       #6f6c67 on paper     #141413    3.53  (non-text)
     dark   frame       #6f6c67 on surface   #1c1b19    3.29  (non-text)
     dark   ink-3 bars  #9a968e on surface   #1c1b19    5.84  (non-text)
     dark   warm        #C47A4A on paper     #141413    5.47  (non-text, the mark's short bar)
     light  paper       #F4F2EE on block     #A93F2E    5.44  (the x glyph in a block chip)
     light  block-text  #A93F2E on paper     #F4F2EE    5.44  (field errors, block card rule)
     light  block-text  #A93F2E on surface   #f9f7f3    5.60
     dark   paper       #141413 on block     #E07A66    6.30
     dark   block-text  #E07A66 on paper     #141413    6.30
     dark   block-text  #E07A66 on surface   #1c1b19    5.88
*/

/* Tokens. Light on bare :root, dark twice: media guarded, then the attribute. */
:root {
  color-scheme: light;
  --scheme: light;
  --paper: #F4F2EE;
  --ink: #141413;
  --ink-2: #3d3c3a;
  --ink-3: #6b6966;
  --rule: #e0ddd7;
  --rule-2: #a8a59e;
  --surface: #f9f7f3;
  --surface-2: #efece6;
  --pressed: #e4e1db;
  --frame: #141413;
  --accent: #2A6B6A;
  --accent-hover: #1F5554;
  --accent-ink: #ffffff;
  --accent-text: #2A6B6A;
  --warm: #C47A4A;
  --block: #A93F2E;
  --shadow-board: 0 1px 0 rgba(20, 20, 19, .06), 0 28px 56px -28px rgba(20, 20, 19, .30);
  --shadow-1: 0 1px 2px rgba(20, 20, 19, .05), 0 6px 16px -8px rgba(20, 20, 19, .12);
  --scrim: linear-gradient(180deg, rgba(20, 20, 19, 0) 35%, rgba(20, 20, 19, .78) 100%);
  --show-moon: inline-block;
  --show-sun: none;
  --font: "Host Grotesk Variable", Helvetica, Arial, sans-serif;
  --mono: "Commit Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --max: 1400px;
  --gutter: 40px;
  --pad: 20px;
  --ease: cubic-bezier(.2, 0, 0, 1);
  --dur-1: 160ms;
  --dur-2: 240ms;
  --dur-3: 480ms;
  /* one walkthrough band: the scroll each step owns; eight bands make the
     track. Bounded in px so a full-page capture that inflates vh cannot
     inflate the track. */
  --band: min(80vh, 720px);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --scheme: dark;
    --paper: #141413;
    --ink: #F4F2EE;
    --ink-2: #c8c5be;
    --ink-3: #9a968e;
    --rule: #2e2d2b;
    --rule-2: #5a5854;
    --surface: #1c1b19;
    --surface-2: #252422;
    --pressed: #33322f;
    --frame: #6f6c67;
    --accent: #3D7A78;
    --accent-hover: #346E6C;
    --accent-ink: #ffffff;
    --accent-text: #7ab5b3;
    --block: #E07A66;
    --shadow-board: 0 32px 64px -32px rgba(0, 0, 0, .75);
    --shadow-1: 0 8px 20px -10px rgba(0, 0, 0, .6);
    --show-moon: none;
    --show-sun: inline-block;
  }
}
:root[data-theme="dark"] {
  color-scheme: dark;
  --scheme: dark;
  --paper: #141413;
  --ink: #F4F2EE;
  --ink-2: #c8c5be;
  --ink-3: #9a968e;
  --rule: #2e2d2b;
  --rule-2: #5a5854;
  --surface: #1c1b19;
  --surface-2: #252422;
  --pressed: #33322f;
  --frame: #6f6c67;
  --accent: #3D7A78;
  --accent-hover: #346E6C;
  --accent-ink: #ffffff;
  --accent-text: #7ab5b3;
  --block: #E07A66;
  --shadow-board: 0 32px 64px -32px rgba(0, 0, 0, .75);
  --shadow-1: 0 8px 20px -10px rgba(0, 0, 0, .6);
  --show-moon: none;
  --show-sun: inline-block;
}

/* Base */
*, *::before, *::after { box-sizing: border-box; }
html {
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.5;
  font-variant-numeric: tabular-nums;
  -webkit-text-size-adjust: 100%;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  scroll-behavior: smooth;
  /* Anchor jumps clear the sticky nav (64 px here, 56 under 900). Without
     this a click on the nav's Send your deal button landed #drop's top edge
     under the nav in both engines: icon hidden, title clipped, the Your turn
     eyebrow gone (CEO, 2026-09-06: "the button click is buggy"). Every
     href="#..." on the page gets the same clearance; app.js's scrollTo calls
     already subtract the nav and are unaffected. check_nav.py. */
  scroll-padding-top: 64px;
}
body { margin: 0; background: var(--paper); color: var(--ink); overflow-x: hidden; }
h1, h2, h3, p, ul, ol, figure, blockquote { margin: 0; }
ul, ol { padding: 0; list-style: none; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; }
img { max-width: 100%; height: auto; display: block; }
:focus-visible { outline: 2px solid var(--accent-text); outline-offset: 3px; }
svg.ic { display: inline-block; vertical-align: -0.125em; flex: none; width: 20px; height: 20px; }
svg.ic-14 { width: 14px; height: 14px; }
svg.ic-16 { width: 16px; height: 16px; }
svg.ic-24 { width: 24px; height: 24px; }
.mark { display: inline-block; vertical-align: -0.2em; flex: none; }
/* The only orange on the page: the mark's short bar, wherever the mark renders. */
.mark rect:last-child { fill: var(--warm); opacity: 1; }
.label { font-size: 14px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-3); }
.label--lower { text-transform: none; letter-spacing: 0; font-size: 16px; color: var(--ink-2); }
.mono { font-family: var(--mono); font-size: 14px; }
.nw { white-space: nowrap; }
.num { font-variant-numeric: tabular-nums; }
h2 { font-size: clamp(2rem, 3.6vw, 3.25rem); font-weight: 700; letter-spacing: -.035em; line-height: 1; text-wrap: balance; }
h3 { font-size: 1.25rem; font-weight: 600; letter-spacing: -.015em; line-height: 1.2; }

/* The grid is the composition: 12 ruled columns behind everything */
.page { position: relative; max-width: var(--max); margin: 0 auto; padding: 0 var(--gutter); }
.lines { position: absolute; top: 0; bottom: 0; left: var(--gutter); right: var(--gutter); display: grid; grid-template-columns: repeat(12, 1fr); pointer-events: none; z-index: 0; }
.lines i { border-left: 1px solid var(--rule); }
.lines i:last-child { border-right: 1px solid var(--rule); }
.g { position: relative; z-index: 1; display: grid; grid-template-columns: repeat(12, 1fr); }
section { padding: 0; }
.sec { border-top: 2px solid var(--ink); padding-bottom: 80px; }
.sec__head { grid-column: 1 / span 6; padding: 24px var(--pad) 32px; display: flex; flex-direction: column; gap: 16px; }
.sec--chips { padding: 24px 0; }

/* Nav: mark, wordmark, domain, two anchors and the filled Send your deal button, Sign in, the theme toggle */
.nav { position: sticky; top: 0; z-index: 5; display: flex; align-items: center; justify-content: space-between; gap: 8px; height: 64px; border-bottom: 1px solid var(--ink); background: var(--paper); }
.brand { display: flex; align-items: center; gap: 12px; font-weight: 700; font-size: 20px; letter-spacing: -.015em; padding-left: var(--pad); }
.nav__links { display: flex; align-items: center; gap: 32px; font-size: 16px; font-weight: 500; padding-right: var(--pad); }
.nav__links a { padding: 4px 0; }
.nav__links a:hover { color: var(--accent-text); text-decoration: underline; text-underline-offset: 4px; }
/* the one filled button in the ribbon: the .btn recipe at the toggle's 40 px */
.nav__links .nav__start { min-height: 40px; padding: 0 16px; font-size: 15px; gap: 8px; }
.nav__links .nav__start:hover { color: var(--accent-ink); background: var(--accent-hover); text-decoration: none; }
.nav__who { display: inline-flex; align-items: center; }
.nav__signin { background: none; border: 0; padding: 4px 0; font: inherit; font-weight: 500; cursor: pointer; }
.nav__signin:hover { color: var(--accent-text); text-decoration: underline; text-underline-offset: 4px; }
.nav__account { display: inline-flex; align-items: center; gap: 6px; max-width: 16ch; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nav__account .ic { color: var(--accent-text); }
.toggle { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border: 1px solid var(--ink); background: transparent; cursor: pointer; transition: background .15s var(--ease), color .15s var(--ease); }
.toggle:hover { background: var(--ink); color: var(--paper); }
.toggle .i-moon { display: var(--show-moon); }
.toggle .i-sun { display: var(--show-sun); }

/* Roboto Medium, Apache License 2.0, Copyright 2011 Google Inc. Same origin,
   and subset to the 18 glyphs in "Continue with Google" and "Sign in with
   Google" (5.5 KB). Google's branding guidance names this face; embedding the
   subset is the only way to be both compliant and free of a third party
   request. Nothing else on the page uses it. */
@font-face {
  font-family: "Roboto";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(assets/roboto-medium-latin.woff2) format("woff2");
  unicode-range: U+20, U+43, U+47, U+53, U+61, U+63-65, U+67-69, U+6C, U+6E-6F, U+73-75, U+77;
}

/* Buttons. The four CTA anchors carry class="cta" exactly (check_funnel reads it). */
.cta, .btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 14px;
  min-height: 60px; padding: 0 26px;
  background: var(--accent); color: var(--accent-ink);
  font-weight: 600; font-size: 18px; letter-spacing: -.01em; line-height: 1.2;
  border: 0; cursor: pointer; text-decoration: none;
  transition: background .15s var(--ease);
}
.cta:hover, .btn:hover { background: var(--accent-hover); }
.cta .ic { transition: transform .15s var(--ease); }
.cta:hover .ic { transform: translateX(3px); }
.cta:focus-visible, .btn:focus-visible { outline: 3px solid var(--ink); outline-offset: 2px; }
.cta__price { font-weight: 400; opacity: .9; }
.btn--line { background: none; color: var(--ink); border: 1px solid var(--ink); }
.btn--line:hover { background: var(--ink); color: var(--paper); }

/* Hero: the headline across the grid; the lede, the proof button, the
   guarantee and the drop-first link in the left four columns; the full live
   board in the right eight; the chevron under. */
.hero { padding-top: 40px; grid-template-rows: auto 1fr auto; }
.hero h1 { grid-column: 1 / -1; grid-row: 1; padding: 0 var(--pad); font-size: clamp(3rem, 6.4vw, 5.75rem); font-weight: 800; line-height: .9; letter-spacing: -.045em; text-wrap: balance; }
.hero__lead { grid-column: 1 / span 4; grid-row: 2; padding: 28px var(--pad) 24px; display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.hero .lede { font-size: 1.125rem; }
.lede { font-size: 1.25rem; line-height: 1.4; max-width: 30ch; color: var(--ink-2); }
/* CEO, 2026-09-06 ("should buttons be bigger?"): the site's full .btn (60 px,
   26 px padding). Later the same day ("this button is not going to convert
   and it's not formatted well", of the primary stretched across the column
   with its arrow at the far edge): the button at its content width, the out
   arrow 10 px after the label, left aligned. The row still wraps: it held two
   buttons until the demo button went with the Cursor hero that evening. */
.hero__proof { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 12px; width: 100%; }
.hero__proof .btn, .hero__proof .cta { width: fit-content; max-width: 100%; gap: 10px; text-align: left; }
/* the proof strip: three facts, 15 px ink-2, icons in ink-3. Nothing in it
   acts, so it is the element pinned to the foot of the column (level with
   the board's frame) and the one the consent bar may cover on a first visit.
   The guarantee and the drop-first link stay under the button: pinned to the
   foot the old try line landed at 759 to 790 at 1440x900, 1536x864 and
   1280x800, inside the fixed consent bar (top 717, 681, 617), and past the
   fold at 1366x768 (764 in 768). check_laptop.py measures the button and the
   link on every run. */
.hero__facts { display: flex; flex-direction: column; margin-top: auto; font-size: 15px; line-height: 1.4; color: var(--ink-2); border-top: 1px solid var(--rule); }
.hero__facts li { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--rule); }
.hero__facts .ic { color: var(--ink-3); width: 18px; height: 18px; }
.hero__board { grid-column: 5 / -1; grid-row: 2; padding: 28px var(--pad) 24px 0; min-width: 0; }
.hero__more { grid-column: 1 / -1; grid-row: 3; justify-self: center; width: 44px; height: 44px; display: grid; place-items: center; color: var(--accent-text); border: 1px solid var(--rule-2); margin: 0 0 32px; transition: background var(--dur-1) var(--ease); }
.hero__more:hover { background: var(--surface-2); }
.ic-24 { width: 24px; height: 24px; }

/* Buy card, under the drop zone: the quiet pay-first line */
.buy-card { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
/* balanced (2026-09-06, Tech Lead S3): the short form wraps to two lines in
   the hero column at every laptop width, and with the break left to the
   browser it fell before the .nw tail, so line two opened "· live in 24
   hours" with the dot hanging in the margin. Balance splits the two lines
   near equal and the dot sits inside the second line. */
.guarantee-line { font-size: 14px; color: var(--ink-3); line-height: 1.45; max-width: 44ch; text-wrap: balance; }
.buy-card--quiet { padding-top: 12px; border-top: 1px solid var(--rule); }
.buy-card__ask { font-size: 15px; color: var(--ink-2); line-height: 1.5; }
/* the hero's secondary line (2026-09-06): a .lnk to #drop under the guarantee.
   inline-block, so the whole of its box is the link and the pointer hits it
   at its centre (check_laptop.py). That holds while the link text is one
   line, which it is at every viewport measured (175 px against a 264 px
   column at 320). If it ever wrapped, the box centre could fall in the
   ragged whitespace of the shorter line and elementFromPoint would return
   the paragraph, the failure check_laptop.py exists to catch: keep the link
   text short, or the gate goes red for the right reason. */
.buy-card__secondary { font-size: 15px; line-height: 1.5; color: var(--ink-2); text-wrap: balance; }
.buy-card__secondary .lnk { display: inline-block; }
.buy-card--quiet .cta { display: inline; min-height: 0; padding: 0; gap: 0; background: none; border: 0; color: var(--accent-text); font-size: 15px; font-weight: 500; letter-spacing: 0; text-decoration: underline; text-underline-offset: 3px; }
#price { grid-column: 1 / -1; margin-top: 8px; }
.buy-card--quiet .cta:hover { background: none; color: var(--ink); }
.buy-card--quiet .cta .ic { display: none; }
.buy-card--quiet .cta__price { opacity: 1; font-weight: 500; }
.buy-card--quiet .cta__price::before { content: ", "; }
.buy-card--quiet .cta__price::after { content: "."; }

/* The drop zone: idle, inspect, confirm, basics, fail. One stage visible at a time. */
.vh { position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* A jump to #drop shows the section's head as well: the 79 px of rule, pad,
   the Your turn label and pad above the zone (59 under 900), plus 24 px of
   air under the nav. Added to html's scroll-padding-top. check_nav.py
   asserts the label and the title inside the viewport after the click. */
#drop { scroll-margin-top: 103px; }
.drop { display: flex; flex-direction: column; gap: 12px; }
.drop__stage[hidden] { display: none; }
.drop__zone { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; padding: 22px 20px 20px; border: 1.5px dashed var(--rule-2); background: var(--surface); cursor: pointer; }
.drop__zone .ic { width: 28px; height: 28px; color: var(--accent-text); }
.drop__zone:hover, .drop__zone:focus-visible { border-color: var(--accent-text); }
.drop__zone.is-over { border-color: var(--accent-text); border-style: solid; background: var(--surface-2); }
.drop__title { font-size: 1.25rem; font-weight: 700; letter-spacing: -.02em; line-height: 1.2; }
.drop__hint { font-size: 14px; color: var(--ink-3); line-height: 1.45; }
.drop__choose { min-height: 52px; font-size: 16px; font-weight: 600; padding: 0 22px; margin-top: 6px; }
.drop__meta { font-size: 14px; color: var(--ink-3); line-height: 1.45; }
.drop__meta b { color: var(--ink); font-weight: 600; }
.drop__meta a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.drop__file { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; font-size: 15px; }
.drop__name { font-family: var(--mono); font-size: 14px; word-break: break-all; }
.drop__size { font-family: var(--mono); font-size: 13px; color: var(--ink-3); white-space: nowrap; }
.drop__bar { height: 6px; background: var(--surface-2); border: 1px solid var(--rule); margin: 8px 0 6px; }
.drop__bar i { display: block; height: 100%; width: 0; background: var(--accent); transition: width .15s linear; }
.drop__bar.is-done i { width: 100%; }
.drop__status { font-size: 14px; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.drop__rows { display: flex; flex-direction: column; border-top: 1px solid var(--rule-2); margin-top: 8px; }
.drop__rows li { display: grid; grid-template-columns: 22px 1fr; gap: 4px 10px; padding: 10px 0; border-bottom: 1px solid var(--rule); font-size: 14px; line-height: 1.4; }
.drop__rows li > .chip { grid-column: 1; grid-row: 1; }
.drop__rows li > b { grid-column: 2; grid-row: 1; }
.drop__rows li b { font-weight: 600; color: var(--ink); }
.drop__rows li span { color: var(--ink-2); grid-column: 2; }
.drop__rows li .row__fix { grid-column: 2; display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; align-items: center; }
.chip { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; font-size: 13px; font-weight: 700; line-height: 1; flex: none; margin-top: 1px; }
.chip--ok { background: var(--accent); color: var(--accent-ink); }
.chip--warn { background: var(--surface-2); color: var(--ink); border: 1px solid var(--rule-2); }
.chip--block { background: var(--block); color: var(--paper); }
.chip--lbl { background: var(--surface-2); color: var(--ink-2); border: 1px solid var(--rule-2); }
.drop__actions { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; margin-top: 12px; }
.drop__actions .btn, .basics__cta .btn { min-height: 48px; font-size: 16px; padding: 0 20px; }
.lnk { background: none; border: 0; padding: 4px 0; font-size: 15px; font-weight: 500; color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.lnk:hover { color: var(--ink); }
.drop__actions select, .field select, .field input, .field textarea { font: inherit; font-size: 15px; color: var(--ink); background: var(--paper); border: 1px solid var(--rule-2); padding: 9px 10px; min-height: 42px; width: 100%; }
.drop__actions select, .row__fix select { width: auto; min-height: 48px; font-size: 15px; padding: 0 10px; border: 1px solid var(--ink); background: var(--paper); color: var(--ink); font: inherit; }
.row__fix .btn { min-height: 48px; font-size: 15px; padding: 0 16px; }
.field input:focus, .field select:focus, .field textarea:focus, .drop__actions select:focus { outline: 2px solid var(--accent-text); outline-offset: 1px; border-color: var(--accent-text); }
.field input[aria-invalid="true"], .field select[aria-invalid="true"] { border-color: var(--block); }
.basics { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 12px; border: 1px solid var(--frame); box-shadow: var(--shadow-1); padding: 16px; background: var(--surface); }
.basics__head { grid-column: 1 / -1; display: flex; flex-direction: column; gap: 4px; }
.basics__note { font-size: 14px; color: var(--ink-3); }
.build { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 6px; }
.build li { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; padding: 4px 8px 4px 4px; border: 1px solid var(--rule); background: var(--paper); }
.build li .chip { width: 18px; height: 18px; font-size: 13px; margin: 0; }
.field { grid-column: 1 / -1; display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.field--half { grid-column: span 1; }
.field label { font-size: 14px; font-weight: 600; }
.field label small { font-weight: 400; font-size: 13px; color: var(--ink-3); }
.field__pair { display: grid; grid-template-columns: 1fr auto; gap: 6px; }
.field__pair select { width: auto; }
.field__src { font-size: 13px; color: var(--accent-text); letter-spacing: .02em; }
.field__hint { font-size: 13px; color: var(--ink-3); line-height: 1.45; }
.field__hint a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.field__error { grid-column: 1 / -1; font-size: 14px; color: var(--block); font-weight: 500; }
.field__error[hidden] { display: none; }
.plans { grid-column: 1 / -1; border: 0; padding: 0; margin: 4px 0 0; display: flex; flex-direction: column; }
.plans legend { padding: 0 0 8px; }
.plan { display: grid; grid-template-columns: auto 1fr auto; gap: 2px 10px; align-items: center; padding: 9px 10px; border: 1px solid var(--rule); border-top: 0; background: var(--paper); cursor: pointer; font-size: 14px; }
.plan:first-of-type { border-top: 1px solid var(--rule); }
.plan:has(input:checked) { border-color: var(--accent-text); box-shadow: inset 0 0 0 1px var(--accent-text); position: relative; z-index: 1; }
.plan input { margin: 0; accent-color: var(--accent); width: 16px; height: 16px; }
.plan__name { font-weight: 600; }
.plan__unit { grid-column: 2; font-size: 13px; color: var(--ink-3); }
.plan__price { grid-column: 3; grid-row: 1 / span 2; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; text-align: right; }
.plan__price small { font-weight: 400; font-size: 13px; color: var(--ink-3); }
.plan__price a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; font-weight: 500; font-size: 13px; }
.basics__cta { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; margin-top: 4px; }
.basics__cta .btn { flex: 1 1 auto; }
.basics .drop__meta { grid-column: 1 / -1; }
/* the launch scope (N5): the line beside the drop, and the one that shows in
   the basics when the asset type is not office, before any card is offered */
.drop__scope { font-size: 14px; color: var(--ink-3); line-height: 1.45; }
.drop__scope a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.scope-launch { grid-column: 1 / -1; padding: 10px 12px; border: 1px solid var(--warm); background: var(--paper); color: var(--ink); font-size: 14px; }
.scope-launch[hidden] { display: none; }
/* Advanced (the L1/L2 contract): the deal scope block, closed by default */
.basics__adv { grid-column: 1 / -1; border-top: 1px solid var(--rule); padding-top: 12px; display: block; }
.basics__adv > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 8px; min-height: 44px; }
.basics__adv > summary::-webkit-details-marker { display: none; }
.basics__adv > summary::after { content: "+"; font-weight: 400; color: var(--ink-3); }
.basics__adv[open] > summary::after { content: "\2212"; }
.basics__adv[open] > summary { margin-bottom: 6px; }
.basics__adv > .field, .basics__adv > .field__hint { margin-top: 12px; }
.basics__adv .deal-scope { margin-top: 12px; }
.drop__fail { border: 1px solid var(--block); padding: 16px; background: var(--surface); display: flex; flex-direction: column; gap: 8px; }
.drop__fail-head { display: flex; align-items: center; gap: 10px; font-size: 1.125rem; }
.drop__fail-line { font-size: 15px; color: var(--ink-2); line-height: 1.5; }

/* The confirm panel: what we read out of the model (build/MAPPING-ENGINE.md
   section 6). Commit Mono for cells and figures, Host Grotesk for the rest,
   the accent on the one CTA, red only on a tie-out failure. */
.confirm { border: 1px solid var(--frame); box-shadow: var(--shadow-1); background: var(--surface); padding: 16px; display: flex; flex-direction: column; gap: 12px; }
.confirm__head { display: flex; flex-direction: column; gap: 4px; }
.confirm__note { font-size: 14px; color: var(--ink-3); line-height: 1.45; }
.confirm__rows { display: flex; flex-direction: column; border-top: 1px solid var(--rule-2); }
.cf { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(0, 1fr) auto; gap: 2px 12px; align-items: baseline; padding: 10px 0; border-bottom: 1px solid var(--rule); font-size: 14px; line-height: 1.4; }
.cf__title { font-weight: 600; min-width: 0; overflow-wrap: anywhere; }
.cf__cell { font-family: var(--mono); font-size: 13px; color: var(--ink-3); overflow-wrap: anywhere; }
.cf__value { font-family: var(--mono); font-size: 14px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; text-align: right; }
.cf__change { justify-self: end; white-space: nowrap; padding: 4px 0; }
.cf__flag { grid-column: 1 / -1; font-size: 13px; color: var(--accent-text); }
.cf--missing .cf__cell { color: var(--ink-3); }
.cf--needed .cf__cell { color: var(--block); }
.cf--missing .cf__title { color: var(--ink); }
.cf--human { box-shadow: inset 2px 0 0 var(--accent-text); padding-left: 8px; }
.cf__edit { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 8px 0 2px; }
.cf__edit select, .cf__edit input { font: inherit; font-size: 15px; min-height: 44px; border: 1px solid var(--ink); background: var(--paper); color: var(--ink); padding: 0 10px; }
.cf__edit input { font-family: var(--mono); width: 7em; text-transform: uppercase; }
.cf__edit .btn { min-height: 44px; font-size: 15px; padding: 0 16px; }
.cf__edit select:focus, .cf__edit input:focus { outline: 2px solid var(--accent-text); outline-offset: 1px; }
.cf__err { flex: 1 1 100%; font-size: 13px; color: var(--block); font-weight: 500; }
.cf__err[hidden] { display: none; }
.confirm__more { display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: baseline; }
.cf__toggle { font-size: 14px; }
.cf__fallback { flex: 1 1 100%; font-size: 13px; color: var(--ink-3); line-height: 1.45; }
.confirm__tie { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; color: var(--ink-2); line-height: 1.45; }
.cf__still { display: flex; gap: 8px; align-items: flex-start; font-size: 13px; color: var(--ink-2); line-height: 1.4; max-width: 40ch; }
.confirm .btn[disabled] { opacity: .45; cursor: not-allowed; }
.confirm .btn[disabled]:hover { background: var(--accent); }

/* The walkthrough. The track is six bands of --band each (80vh, capped at
   720px); the frame sticks under the 64px nav for five of them and releases
   on the sixth. The stages sit on top of each other and only the current one
   is visible (visibility, so the others are not focusable). */
.walk { border-top: 2px solid var(--ink); position: relative; z-index: 1; }
.walk__track { position: relative; height: calc(6 * var(--band)); }
.walk__frame { position: sticky; top: 64px; height: min(calc(100vh - 64px), 1080px); display: flex; flex-direction: column; padding: 20px var(--pad) 12px; z-index: 1; }
.walk__head { display: flex; flex-direction: column; gap: 6px; }
.walk__chip { font-family: var(--mono); font-size: 13px; font-weight: 500; letter-spacing: .02em; color: var(--accent-text); }
.walk__h { font-size: clamp(2rem, 3.6vw, 3.25rem); font-weight: 800; letter-spacing: -.03em; line-height: 1; margin-top: 2px; }
.walk__sub { font-size: 18px; line-height: 1.4; color: var(--ink-2); max-width: 40ch; min-height: 1.4em; }
.walk__stages { position: relative; flex: 1 1 auto; min-height: 0; margin: 18px 0 14px; }
.walk__stage { position: absolute; inset: 0; display: flex; justify-content: center; align-items: flex-start; opacity: 0; visibility: hidden; }
.walk__stage.is-on { opacity: 1; visibility: visible; }
.stage { position: relative; height: 100%; width: auto; max-width: 100%; aspect-ratio: 16 / 10; border: 1px solid var(--frame); box-shadow: var(--shadow-board); background: var(--paper); overflow: hidden; }
.stage--shot img { width: 100%; height: 100%; object-fit: cover; object-position: top; display: block; }
.stage--live { display: flex; align-items: center; justify-content: center; padding: 24px; }
.stage--live > * { width: 100%; }
.stage--live .board { box-shadow: none; }
/* step 5: the sample link, the seven thumbs, the version strip */
.share { display: flex; flex-direction: column; gap: 20px; }
.share__link { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 14px 16px; border: 1px solid var(--frame); background: var(--surface); box-shadow: var(--shadow-1); transition: background var(--dur-1) var(--ease); }
a.share__link:hover { background: var(--surface-2); }
.share__deal { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; font-size: 16px; }
.share__open { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; color: var(--accent-text); white-space: nowrap; }
.share__tabs { display: grid; grid-template-columns: repeat(7, 1fr); gap: 12px; }
.thumb { min-width: 0; }
.thumb img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; object-position: top; border: 1px solid var(--rule-2); box-shadow: var(--shadow-1); background: var(--surface-2); }
.thumb figcaption { margin-top: 6px; font-size: 13px; color: var(--ink-2); line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ver { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px; font-family: var(--mono); font-size: 13px; color: var(--ink-2); border-top: 1px solid var(--rule); padding-top: 14px; }
.ver__v { display: inline-flex; align-items: center; gap: 8px; }
.ver__chip { padding: 3px 8px; border: 1px solid var(--rule-2); }
.ver__chip--sample { margin-left: auto; color: var(--ink-3); }
/* the rail: seven buttons, Back and Skip */
.walk__rail { display: flex; align-items: center; gap: 8px; border-top: 1px solid var(--rule); padding-top: 8px; }
.rail__steps { flex: 1 1 auto; display: flex; justify-content: center; flex-wrap: wrap; gap: 2px; min-width: 0; }
.rail__step { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 12px; background: none; border: 0; box-shadow: inset 0 -2px 0 transparent; color: var(--ink-3); font-size: 13px; font-weight: 500; cursor: pointer; transition: color var(--dur-1) var(--ease), box-shadow var(--dur-1) var(--ease); }
.rail__step:hover { color: var(--ink); }
.rail__ic, .rail__tick { display: inline-flex; }
.rail__tick { display: none; color: var(--accent-text); }
.rail__step.is-done { color: var(--ink-2); }
.rail__step.is-done .rail__ic { display: none; }
.rail__step.is-done .rail__tick { display: inline-flex; }
.rail__step.is-on { color: var(--ink); font-weight: 600; box-shadow: inset 0 -2px 0 var(--accent); }
.rail__nav { width: 44px; height: 44px; flex: none; display: grid; place-items: center; border: 1px solid var(--rule-2); background: none; cursor: pointer; transition: background var(--dur-1) var(--ease); }
.rail__nav:hover { background: var(--surface-2); }
.rail__nav[disabled] { opacity: .35; cursor: default; background: none; }
.walk__bands { position: absolute; inset: 0; z-index: 0; pointer-events: none; display: flex; flex-direction: column; }
.walk__bands i { display: block; height: var(--band); flex: none; }

/* The board: a real deal, the Scenario segment, two steppers, the grid,
   three tiles and the NOI bars; the selected cell is the only saturated fill. */
.board { border: 1px solid var(--frame); background: var(--surface); box-shadow: var(--shadow-board); }
.board__ctl { display: grid; grid-template-columns: 1.5fr 1fr; border-bottom: 1px solid var(--rule); }
.ctl { padding: 10px var(--pad) 12px; min-width: 0; }
.ctl + .ctl { border-left: 1px solid var(--rule); }
.ctl__row { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; font-size: 13px; margin-bottom: 6px; color: var(--ink-3); }
.ctl__val { font-weight: 600; font-size: 14px; color: var(--ink); white-space: nowrap; }
.ctl .seg button { padding: 0 12px; }
.noi { grid-column: 1 / -1; padding: 12px var(--pad) 14px; border-top: 1px solid var(--rule); }
.noi .label { display: block; margin-bottom: 10px; }
.bars { position: relative; display: grid; grid-template-columns: repeat(10, 1fr); gap: 6px; height: 120px; border-bottom: 1px solid var(--rule-2); }
.bar { position: relative; display: block; height: 100%; min-width: 0; }
.bar span { position: absolute; top: 0; left: 0; right: 0; text-align: center; font-size: 13px; font-weight: 500; color: var(--ink-2); font-variant-numeric: tabular-nums; }
.bar i { position: absolute; left: 0; right: 0; bottom: 0; display: block; background: var(--ink-3); }
.bars__base { position: absolute; left: 0; right: 0; border-top: 1px dashed var(--rule-2); pointer-events: none; }
.bars__x { display: grid; grid-template-columns: repeat(10, 1fr); gap: 6px; font-size: 13px; color: var(--ink-3); text-align: center; margin-top: 6px; font-variant-numeric: tabular-nums; }
.board__head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 8px 16px; padding: 10px var(--pad); border-bottom: 1px solid var(--rule); }
.board__head > div:first-child { display: flex; align-items: center; gap: 12px; }
.board__title { font-weight: 600; font-size: 16px; }
.board__chip { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink-3); border: 1px solid var(--rule-2); padding: 2px 8px; }
/* The segment control. Each button is as wide as its own label plus 14 px of
   air a side and never narrower (flex 1 0 auto: spare width is shared, none
   is taken). The old flex 1 1 0 gave every button an equal share of the sum
   of their natural widths, so at 1440 "Equity multiple" ran 18 px past its
   box and "Downside" 3 px past the frame while "NPV" sat in 28 px of air
   (CEO, 2026-09-06: "these boxes still appear broken"). The ::after repeats
   the label from data-l in the pressed weight at zero height, so the button
   is already the width of its bold label and nothing shifts on a press. The
   seg itself never shrinks; the row it sits in wraps. check_seg.py measures
   every button at 1440, 1778 and 390. The pressed fill is its own token,
   one step darker than surface-2, so the pressed state reads as filled. */
.seg { display: flex; align-items: center; flex: none; max-width: 100%; border: 1px solid var(--rule-2); }
.seg__l { font-size: 13px; color: var(--ink-3); padding: 0 10px; border-right: 1px solid var(--rule); align-self: stretch; display: inline-flex; align-items: center; }
.seg button { flex: 1 0 auto; min-height: 38px; padding: 0 14px; font-size: 14px; font-weight: 500; background: none; border: 0; border-left: 1px solid var(--rule); cursor: pointer; white-space: nowrap; color: var(--ink-2); transition: background .12s var(--ease), color .12s var(--ease); }
.seg button::after { content: attr(data-l); display: block; height: 0; overflow: hidden; visibility: hidden; font-weight: 600; }
.seg__l + button, .seg > button:first-child { border-left: 0; }
.seg button:hover { background: var(--surface-2); color: var(--ink); }
.seg button[aria-pressed="true"] { background: var(--pressed); color: var(--ink); box-shadow: inset 0 -2px 0 var(--ink); font-weight: 600; }
.seg button:focus-visible { outline-offset: -3px; outline-color: var(--accent-text); }
.board__body { display: grid; grid-template-columns: 3fr 2fr; }
/* .sens keeps its 246 px at 1520 with the metric row added: 4 px off the top
   pad, 5 off the bottom, and the metric segment 28 px tall (44 on a phone,
   from the 900 block) so the row is 9 px taller than the bare axis label was. */
.sens { padding: 8px var(--pad) 9px; border-right: 1px solid var(--rule); min-width: 0; }
.sens__top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 6px 16px; margin-bottom: 8px; }
.seg--metric { flex: none; }
.seg--metric button { min-height: 28px; padding: 0 12px; font-size: 13px; }
.sens__scroll { position: relative; overflow-x: auto; -webkit-overflow-scrolling: touch; padding: 2px; }
.sens__hint { display: none; }
/* the capital line under the grid: three label and figure pairs, mono figures */
.capl { display: flex; flex-wrap: wrap; gap: 4px 20px; margin: 10px 0 0; padding-top: 8px; border-top: 1px solid var(--rule-2); }
.capl > div { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.capl dt { font-size: 13px; color: var(--ink-3); font-weight: 500; }
.capl dd { margin: 0; font-size: 14px; font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
.capl__raw { font-size: 13px; color: var(--ink-2); }
.sens__axis { flex: 1 1 auto; text-align: right; }
.sens table { width: 100%; border-collapse: collapse; font-size: 14px; }
.sens th { font-weight: 500; color: var(--ink-3); text-align: right; padding: 6px 8px; border-bottom: 1px solid var(--rule-2); white-space: nowrap; }
.sens th:first-child { text-align: left; }
.sens th.on { color: var(--ink); font-weight: 600; }
.sens td { text-align: right; padding: 8px 8px; border-bottom: 1px solid var(--rule); cursor: pointer; white-space: nowrap; font-variant-numeric: tabular-nums; }
.sens tbody th { text-align: left; font-weight: 500; color: var(--ink-3); border-bottom: 1px solid var(--rule); }
.sens tbody tr:last-child td, .sens tbody tr:last-child th { border-bottom: 0; }
.sens td.on { background: var(--surface-2); }
.sens td:hover { background: var(--surface-2); }
.sens td.hi, .sens td.hi:hover { background: var(--accent); color: #fff; font-weight: 700; outline: 2px solid var(--accent); outline-offset: 1px; }
.sens td.nm:not(.hi) { color: var(--ink-3); }
.out { padding: 6px var(--pad) 10px; display: flex; flex-direction: column; justify-content: center; min-width: 0; }
.kt { display: flex; flex-direction: column; }
.kt > div { display: grid; grid-template-columns: 1fr auto; gap: 2px 16px; align-items: baseline; padding: 10px 0; border-bottom: 1px solid var(--rule); min-width: 0; }
.kt > div:last-child { border-bottom: 0; }
.kt__l { font-size: 14px; color: var(--ink-2); font-weight: 500; }
.kt__v { font-size: clamp(1.75rem, 2.4vw, 2.25rem); font-weight: 800; letter-spacing: -.035em; line-height: 1.1; white-space: nowrap; text-align: right; font-variant-numeric: tabular-nums; }
.kt > div.on .kt__v { color: var(--accent-text); }

/* Chip rows: the manifest and the trust line */
.chips, .trust { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 10px; padding: 0 var(--pad); }
.chips li { font-family: var(--mono); font-size: 13px; padding: 8px 12px; border: 1px solid var(--rule-2); color: var(--ink); white-space: nowrap; }
.trust li { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; padding: 9px 14px; border: 1px solid var(--rule-2); color: var(--ink); white-space: nowrap; }
.trust .ic { color: var(--accent-text); }

/* Problem: one cinematic still across twelve columns, the locked lowercase line live on a scrim */
.problem { padding-bottom: 48px; }
.problem__fig { display: contents; }
.problem__still { grid-column: 1 / -1; position: relative; margin: 24px var(--pad) 0; }
.problem__still img { width: 100%; aspect-ratio: 21 / 9; object-fit: cover; object-position: 50% 40%; border: 1px solid var(--frame); }
.problem__fig .problem__line { position: absolute; inset: 0; display: flex; align-items: flex-end; padding: 32px; background: var(--scrim); color: #F4F2EE; font-size: clamp(1.75rem, 3.6vw, 3.25rem); font-weight: 500; letter-spacing: -.03em; line-height: 1.05; }
/* The payoff still after the tab strip: the same treatment carrying a product
   capture instead of a pain still, framed from the top so the mark, the deal
   name and the tab row stay above the scrim (CEO, 2026-09-05). */
.problem__kicker { position: absolute; left: 32px; top: 24px; z-index: 1; margin: 0; color: #F4F2EE; opacity: .85; font-size: 1.1rem; }
.payoff .problem__still img { object-position: 50% 45%; }

/* Filmstrip: the seven tab captures 4-up, names only */
.panels { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; }
.panel { display: flex; flex-direction: column; padding: 20px 14px 24px; border-left: 1px solid var(--rule); border-top: 1px solid var(--rule); min-width: 0; }
.panel:nth-child(4n+1) { border-left: 0; }
.panel img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; object-position: top; border: 1px solid var(--rule-2); box-shadow: var(--shadow-1); background: var(--surface-2); }
.panel figcaption { margin-top: 12px; font-size: 15px; font-weight: 600; color: var(--ink); display: flex; gap: 10px; align-items: baseline; }
.panel figcaption .mono { color: var(--ink-3); font-size: 13px; }
.panel--empty { padding: 0; }

/* The ladder: four cards, label, price, one line, one button; Single leads */
.price-sec { padding-bottom: 80px; }
.price-sec .sec__head { padding-bottom: 20px; }
.tiers { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--frame); box-shadow: var(--shadow-board); background: var(--surface); margin: 0 var(--pad); }
.tier { padding: 20px var(--pad) 24px; border-left: 1px solid var(--rule); display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.tier:first-child { border-left: 0; }
.tier--lead { background: var(--accent); color: var(--accent-ink); }
.tier--lead .label, .tier--lead .tier__line, .tier--lead .tier__per { color: var(--accent-ink); opacity: .9; }
.tier--lead .cta { background: var(--paper); color: var(--ink); }
.tier--lead .cta:hover { background: var(--surface-2); }
.tier__price { font-size: clamp(2.5rem, 3.6vw, 3.5rem); font-weight: 800; letter-spacing: -.04em; line-height: 1; padding: 6px 0 2px; white-space: nowrap; font-variant-numeric: tabular-nums; min-height: 1.2em; display: flex; align-items: center; }
.tier__per { font-size: 1rem; font-weight: 500; letter-spacing: 0; margin-left: 4px; opacity: .7; align-self: flex-end; padding-bottom: 4px; }
.tier__ask { color: var(--ink-3); display: inline-flex; }
.tier__line { font-size: 15px; color: var(--ink-2); line-height: 1.4; flex: 1; }
.tier__cta { padding-top: 6px; }
.tier__cta .cta, .tier__cta .btn { width: 100%; min-height: 52px; font-size: 16px; padding: 0 16px; }
.tiers__hint { display: none; }
.price { display: flex; align-items: baseline; gap: 10px; }
.price .amount { font-size: 3rem; font-weight: 800; letter-spacing: -.045em; line-height: 1; font-variant-numeric: tabular-nums; }
.price .period { font-size: 16px; color: var(--ink-3); }

/* Beyond the workbook (site/COMPARE-BRIEF.md): six product tiles cut on the
   page's own 12 column lines, one 1px frame rule per row, no card fills and
   no accent, the crops carrying the product's colour. The head holds cols 1
   to 6, the subline cols 8 to 12 on the same row; each tile spans 4; the
   close spans all 12 with its two lines on 1 to 6 and 7 to 12. */
.bw__head { grid-column: 1 / span 6; grid-row: 1; padding: 24px var(--pad) 32px; display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.bw__sub { grid-column: 8 / -1; grid-row: 1; align-self: end; padding: 0 var(--pad) 32px; font-size: 18px; line-height: 1.4; color: var(--ink-2); max-width: 30ch; }
.bw__tile { grid-column: span 4; display: flex; flex-direction: column; gap: 10px; padding: 24px var(--pad) 32px; border-top: 1px solid var(--frame); min-width: 0; }
.bw__tile h3 { margin-top: 6px; }
/* The crop: a 16/10 window over a capture already on the page, with no
   layout overflow (scrollWidth equals clientWidth, so nothing here can ever
   scroll). object-fit: none paints the capture at its natural CSS size and
   the template's sizes attribute sets that size to the window's width times
   the tile's zoom (a srcset candidate's natural size is its pixels over its
   density, so sizes is the zoom control); --x and --y are object-position,
   so every value from 0 to 100 stays inside the capture. */
.bw__fig { position: relative; aspect-ratio: 16 / 10; overflow: hidden; border: 1px solid var(--rule-2); box-shadow: var(--shadow-1); background: var(--surface-2); }
.bw__fig img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: none; object-position: calc(var(--x) * 1%) calc(var(--y) * 1%); }
.bw__line { font-size: 15px; color: var(--ink-2); line-height: 1.4; }
.bw__close { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(12, 1fr); border-top: 1px solid var(--frame); padding: 40px 0 0; row-gap: 32px; }
.bw__big { grid-column: span 6; padding: 0 var(--pad); font-size: clamp(1.5rem, 2.4vw, 2rem); font-weight: 500; letter-spacing: -.02em; line-height: 1.15; text-wrap: balance; min-width: 0; }
.bw__foot { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; padding: 0 var(--pad); }
.bw__flow { display: inline-flex; align-items: center; gap: 8px; color: var(--ink-2); flex: none; }
.bw__chip { display: inline-flex; align-items: center; gap: 6px; font-family: var(--mono); font-size: 13px; line-height: 1.3; padding: 4px 8px; border: 1px solid var(--rule-2); color: var(--ink); white-space: nowrap; }
.bw__supp { font-size: 16px; color: var(--ink-2); line-height: 1.4; }

/* FAQ: one summary, eight questions inside */
.faq { grid-column: 1 / -1; margin: 0 var(--pad); border-top: 1px solid var(--rule); }
.faq summary { cursor: pointer; font-size: 17px; font-weight: 600; letter-spacing: -.01em; line-height: 1.3; list-style: none; display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; padding: 18px 0; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; font-weight: 400; color: var(--ink-3); flex: none; }
.faq details[open] > summary { color: var(--accent-text); }
.faq details[open] > summary::after { content: "\2212"; }
.faq summary:focus-visible { outline: 2px solid var(--accent-text); outline-offset: 4px; }
.faq__list { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; padding-bottom: 8px; }
.faq__list details { border-top: 1px solid var(--rule); }
.faq__list summary { padding: 14px 0; }
.faq__list p { margin: 0 0 14px; font-size: 15px; color: var(--ink-2); line-height: 1.55; max-width: 60ch; }

/* Final CTA: the end card. The locked lowercase line is the whole point of it. */
.final { border-top: 2px solid var(--ink); padding: 24px 0 120px; }
.final__in { grid-column: 1 / span 8; padding: 32px var(--pad) 0; display: flex; flex-direction: column; gap: 20px; align-items: flex-start; }
.final__in .label--lower { font-size: clamp(2rem, 4.5vw, 3.5rem); font-weight: 500; letter-spacing: -.03em; line-height: 1.1; color: var(--ink); }
.final__in .final__brand { display: flex; align-items: center; gap: 14px; font-size: clamp(2.5rem, 6vw, 5.5rem); font-weight: 800; letter-spacing: -.045em; line-height: 1; }
.restate { font-size: 14px; color: var(--ink-3); max-width: 70ch; }

/* Footer */
.site-footer { position: relative; z-index: 1; border-top: 1px solid var(--ink); padding: 24px var(--pad) 48px; font-size: 14px; color: var(--ink-3); display: flex; flex-wrap: wrap; gap: 8px 24px; align-items: center; }
.site-footer a:hover { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.site-footer .brand { padding: 0; font-size: 16px; color: var(--ink); gap: 8px; }
.site-footer__note { flex: 1 1 100%; }

/* Sticky buy bar, phones only, shown once the hero CTA is off screen */
.buy-bar { display: none; }

/* Consent card (memo A6, 2026-09-10): two lines of copy at most and the two
   buttons, 360 wide. Bottom right at 1024 and up, under the board, where the
   column is empty: bottom left it sat over the hero fact strip (360 x 167 at
   1440, covering facts 2 and 3). Under 720 it is one row: the sentence and
   the two buttons side by side, under 96 px tall. The geometry is measured
   at 1440x900, 1366x768 and 390x844 against the fact strip and the primary
   button (ship report, L1 2026-09-10). */
.consent { position: fixed; left: 16px; bottom: 16px; z-index: 30; width: 360px; max-width: calc(100vw - 32px); display: flex; flex-wrap: wrap; align-items: center; gap: 10px 12px; padding: 12px 16px; background: var(--surface); color: var(--ink-2); border: 1px solid var(--frame); box-shadow: var(--shadow-board); font-size: 14px; line-height: 1.45; }
.consent > span { flex: 1 1 100%; }
.consent[hidden] { display: none; }
.consent .btn--line { min-height: 40px; padding: 0 16px; font-size: 14px; flex: 1 1 0; }
@media (min-width: 1024px) {
  .consent { left: auto; right: 16px; }
}

/* Before and after (#proof): the actual workbook as seven printed sheets
   fanned on a desk, the three counts under it as quiet labels, in the left
   four columns; the page it became in the right eight; the connector a plain
   mono label on the Before label row pointing at the After tile; the locked
   line as the section's h2. Nothing in the beat is bordered unless it acts:
   the one control is the All 72 pages link (CEO, 2026-09-06: "these buttons
   are broken", of chips that were never buttons). */
.proof { border-top: 2px solid var(--ink); padding: 28px 0 64px; }
.proof__before { grid-column: 1 / span 4; padding: 0 var(--pad); display: flex; flex-direction: column; gap: 12px; min-width: 0; position: relative; }
.proof__after { grid-column: 5 / -1; padding: 0 var(--pad); display: flex; flex-direction: column; gap: 12px; min-width: 0; }
/* the tile: 16/21 so its foot lands on the After capture's foot (4 columns
   against 8 at 16/10: tile 400 x 525 against capture 840 x 525 at 1440,
   360 x 473 against 760 x 475 at 1280; 8/11 ran 25 px lower). A desk of
   surface-2 inside the hairline; each sheet at 72 percent of the tile,
   placed and angled by the vars the template sets on it; the overflow is
   the bleed. */
.proof__wb { position: relative; aspect-ratio: 16 / 21; overflow: hidden; border: 1px solid var(--rule); background: var(--surface-2); }
.proof__wb img { position: absolute; width: 72%; height: auto; left: var(--x); top: var(--y); transform: rotate(var(--r)); border: 1px solid var(--frame); box-shadow: var(--shadow-board); background: #fff; }
/* the counts, both tiles: mono 13 px, no border, a dot between */
.proof__counts { display: flex; flex-wrap: wrap; gap: 6px 0; padding: 0; font-family: var(--mono); font-size: 13px; color: var(--ink); }
.proof__counts li { white-space: nowrap; }
.proof__counts li:not(:last-child)::after { content: "\00b7"; margin: 0 10px; color: var(--ink-3); }
.proof__cap { font-size: 13px; color: var(--ink-3); line-height: 1.5; display: flex; flex-wrap: wrap; gap: 4px 14px; align-items: baseline; }
.proof__cap .lnk { font-size: 13px; padding: 0; }
.proof__shot img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; object-position: top; border: 1px solid var(--frame); box-shadow: var(--shadow-board); background: var(--surface-2); }
.proof__same { position: absolute; right: var(--pad); top: 0; display: inline-flex; align-items: center; gap: 6px; height: 21px; font-family: var(--mono); font-size: 13px; color: var(--ink-3); white-space: nowrap; }
.proof__same .ic { color: var(--ink-3); }
/* the After counts keep the chip class for the reveal motion; the border and padding go */
.proof__after .chips li { padding: 0; border: 0; }
.proof__h { grid-column: 1 / -1; padding: 40px var(--pad) 0; font-size: clamp(1.75rem, 3.6vw, 3.25rem); font-weight: 800; letter-spacing: -.035em; line-height: 1; }

/* The test run: the live drop zone in the left seven columns under Your turn */
.try__drop { grid-column: 1 / span 7; padding: 0 var(--pad); display: flex; flex-direction: column; gap: 14px; min-width: 0; }

/* Dialogs. Both are native dialog elements, hidden at rest (the attribute is
   what the word counter and the no-JS state see); app.js drops it before
   showModal(). Paper surface, the frame token, the board's shadow, radius 0. */
dialog { color: var(--ink); }
.lightbox, .modal { padding: 0; border: 1px solid var(--frame); background: var(--paper); color: var(--ink); box-shadow: var(--shadow-board); }
.lightbox::backdrop, .modal::backdrop { background: rgba(20, 20, 19, .72); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .lightbox::backdrop, :root:not([data-theme="light"]) .modal::backdrop { background: rgba(0, 0, 0, .8); }
}
:root[data-theme="dark"] .lightbox::backdrop, :root[data-theme="dark"] .modal::backdrop { background: rgba(0, 0, 0, .8); }
.lightbox { width: min(1100px, 100vw - 32px); max-width: none; max-height: calc(100vh - 32px); overflow: auto; }
.lightbox__head { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 10px 12px 10px 20px; border-bottom: 1px solid var(--rule); }
.lightbox__title { font-size: 16px; font-weight: 600; }
.lightbox__close, .modal__close { width: 44px; height: 44px; flex: none; display: grid; place-items: center; border: 1px solid var(--rule-2); background: none; cursor: pointer; transition: background var(--dur-1) var(--ease); }
.lightbox__close:hover, .modal__close:hover { background: var(--surface-2); }
.lightbox__media { background: #141413; }
.lightbox__media video { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; background: #141413; }
.lightbox__media video[hidden], .lightbox__media img[hidden] { display: none; }
.lightbox__media img { display: block; width: auto; max-width: 100%; height: auto; max-height: calc(100vh - 200px); margin: 0 auto; background: var(--paper); }
.lightbox__missing { padding: 48px 20px; text-align: center; font-size: 15px; color: #F4F2EE; }
.lightbox__missing[hidden] { display: none; }
.lightbox__chapters { display: flex; flex-wrap: wrap; gap: 6px; padding: 12px 20px 0; }
.lightbox__chapters[hidden] { display: none; }
.chapter { font-family: var(--mono); font-size: 13px; padding: 5px 8px; border: 1px solid var(--rule-2); background: none; color: var(--ink-2); cursor: pointer; white-space: nowrap; transition: background var(--dur-1) var(--ease), color var(--dur-1) var(--ease); }
.chapter:hover, .chapter[aria-current="true"] { background: var(--surface-2); color: var(--ink); }
.lightbox__foot { display: flex; flex-wrap: wrap; gap: 8px 20px; align-items: center; padding: 12px 20px 16px; }
.lightbox__foot .lnk { display: inline-flex; align-items: center; gap: 6px; }
.lightbox__foot .lnk[hidden] { display: none; }
.lightbox__note { font-size: 13px; color: var(--ink-3); flex: 1 1 100%; }

.modal { width: 440px; max-width: calc(100vw - 32px); max-height: calc(100vh - 32px); overflow: auto; }
.modal__form { display: flex; flex-direction: column; gap: 14px; padding: 20px 24px 24px; }
.modal__top { display: flex; justify-content: flex-end; align-items: center; gap: 8px; min-height: 44px; }
.modal__step { margin-right: auto; font-family: var(--mono); font-size: 12px; letter-spacing: .14em; color: var(--ink-3); }
.modal__step[hidden] { display: none; }
.modal .modal__close { margin-left: 0; }
.modal__back[hidden] { display: none; }
.modal__grab { display: none; }
.modal__file { display: inline-flex; align-items: center; gap: 8px; font-family: var(--mono); font-size: 13px; color: var(--ink-2); padding: 6px 10px; border: 1px solid var(--rule-2); align-self: flex-start; margin-top: 4px; }
.modal__file[hidden] { display: none; }
.modal__file .ic { color: var(--accent-text); }
.modal__h { font-size: 24px; font-weight: 800; letter-spacing: -.03em; line-height: 1.1; }
.modal__why { font-size: 15px; color: var(--ink-2); line-height: 1.4; margin-top: -8px; }
.modal__card { font-size: 14px; color: var(--block); font-weight: 500; line-height: 1.45; padding: 10px 12px; border: 1px solid var(--block); }
.modal__card[hidden] { display: none; }
.modal__row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 12px; }
/* the could-not-evaluate line: shown only when the page could not read
   whether Google sign in is configured. It never claims Google is off. */
.modal__note { font-size: 13px; color: var(--ink-2); line-height: 1.45; padding: 8px 10px; border-left: 2px solid var(--rule-2); }
.modal__note[hidden] { display: none; }
/* step one: the two paths, stacked, one tap each */
.modal__paths { display: flex; flex-direction: column; gap: 10px; }
.modal__paths[hidden] { display: none; }
.modal__path { min-height: 52px; font-size: 16px; width: 100%; gap: 12px; }
.modal__path .ic { width: 18px; height: 18px; }
.modal__fields { display: flex; flex-direction: column; gap: 14px; }
.modal__fields[hidden] { display: none; }
.modal__go[hidden] { display: none; }
.field__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.field__head .lnk { font-size: 13px; padding: 0; }
.field__src[hidden] { display: none; }
.modal__consent { font-size: 13px; color: var(--ink-3); line-height: 1.45; }
.modal__consent a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.modal__legal { display: inline-flex; gap: 14px; margin-left: auto; }
/* The Google button, reproduced from Google's Sign in with Google branding
   guidance rather than adapted: their four colour G at 18 px, a 12 px gap,
   Roboto Medium 14, a #747775 hairline on white, 4 px radius. It is the only
   rounded thing on the page, on purpose. */
.gbtn {
  display: inline-flex; align-items: center; justify-content: center; gap: 12px;
  min-height: 52px; padding: 0 20px; width: 100%;
  background: #FFFFFF; color: #1F1F1F; border: 1px solid #747775; border-radius: 4px;
  font-family: "Roboto", var(--font); font-weight: 500; font-size: 14px; letter-spacing: .0107em;
  text-decoration: none; cursor: pointer;
}
.gbtn:hover { background: #F7F8F8; }
.gbtn:focus-visible { outline: 3px solid var(--ink); outline-offset: 2px; }
.gbtn__g { flex: none; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .gbtn { background: #131314; color: #E3E3E3; border-color: #8E918F; }
  :root:not([data-theme="light"]) .gbtn:hover { background: #1E1F20; }
}
:root[data-theme="dark"] .gbtn { background: #131314; color: #E3E3E3; border-color: #8E918F; }
:root[data-theme="dark"] .gbtn:hover { background: #1E1F20; }
/* One status line for a state change that moves nothing else on the page. */
.toast {
  position: fixed; left: 16px; bottom: 16px; z-index: 60; max-width: min(360px, calc(100vw - 32px));
  padding: 12px 14px; background: var(--ink); color: var(--paper); font-size: 14px; line-height: 1.4;
  box-shadow: var(--shadow-board);
}
.toast[hidden] { display: none; }
.modal [data-only][hidden] { display: none; }
.modal .field__error { font-size: 13px; color: var(--block); font-weight: 500; }
.modal .field__error[hidden] { display: none; }
.modal .field__switch { align-self: flex-start; font-size: 13px; padding: 0; }
.modal .field__switch[hidden] { display: none; }
.field__pair--pw { grid-template-columns: 1fr auto; align-items: center; }
.field__pair--pw .lnk { font-size: 13px; padding: 0 4px; }
.modal__go { min-height: 52px; font-size: 16px; width: 100%; }
.modal__alt { font-size: 15px; color: var(--ink-2); }
.modal__alt .lnk { font-size: 15px; padding: 0; }
.modal__foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 16px; font-size: 13px; color: var(--ink-3); }
.modal__foot a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.modal input[aria-invalid="true"] { border-color: var(--block); }
.modal input[readonly] { background: var(--surface-2); color: var(--ink-2); }
/* when the consent sentence is up it carries Terms and Privacy; the foot pair
   would be the same two links twice on one screen */
#account-form[data-consent="on"] .modal__legal { display: none; }

/* Laptops: the ladder goes two by two, the board body stacks */
@media (max-width: 1180px) and (min-width: 901px) {
  .tiers { grid-template-columns: 1fr 1fr; }
  .tier:nth-child(3) { border-left: 0; }
  .tier:nth-child(n+3) { border-top: 1px solid var(--rule); }
  .stage--live { padding: 16px; }
  .share__tabs { gap: 8px; }
  .hero__lead { grid-column: 1 / span 4; }
  .hero__board { grid-column: 5 / -1; }
  .board__body { grid-template-columns: 1fr; }
  .sens { border-right: 0; border-bottom: 1px solid var(--rule); }
  .kt { display: grid; grid-template-columns: 1fr 1fr 1.45fr; }
  .kt > div { display: flex; flex-direction: column; gap: 2px; padding: 8px 0 6px 10px; border-bottom: 0; border-left: 1px solid var(--rule); }
  .kt > div:first-child { border-left: 0; padding-left: 0; }
  .kt__l { font-size: 13px; color: var(--ink-3); }
  .kt__v { font-size: 1.5rem; text-align: left; }
  .bars { height: 100px; }
  .ctl .seg button { padding: 0 12px; font-size: 13px; }
  .proof__before { grid-column: 1 / span 5; }
  .proof__after { grid-column: 6 / -1; }
  /* 5 columns against 7: 10/9 puts the tile's foot on the capture's foot (measured 318 against 319 px at 1024) */
  .proof__wb { aspect-ratio: 10 / 9; }
}
/* Short viewports on a desktop: the frame still has to hold the head, the stage and the rail */
@media (min-width: 901px) and (max-height: 760px) {
  .walk__h { font-size: clamp(1.5rem, 2.6vw, 2rem); }
  .walk__sub { font-size: 16px; }
  .walk__stages { margin: 12px 0 10px; }
  .stage--live { padding: 12px; }
}

/* Phones and narrow tablets: four ruled columns, the walkthrough is a snap carousel with dots */
@media (max-width: 900px) {
  :root { --gutter: 16px; --pad: 12px; }
  .lines { grid-template-columns: repeat(4, 1fr); }
  .g { grid-template-columns: repeat(4, 1fr); }
  .nav { height: 56px; }
  html { scroll-padding-top: 56px; }
  #drop { scroll-margin-top: 83px; }
  /* the header on a phone: the brand and the nav are both rigid flex items
     with the 8 px floor between them; each link is one line, 44 px tall.
     Under 720 the ribbon is Send your deal and Sign in (the two that
     matter on a phone; the live deal and the walkthrough are a scroll away,
     Pricing is in the footer and on /pricing). */
  .brand { font-size: 18px; flex: none; min-height: 44px; }
  .nav__links { gap: 8px; flex: none; }
  .nav__links a, .nav__signin { display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px; white-space: nowrap; line-height: 1.2; }
  .nav__links .nav__start { min-height: 44px; padding: 0 12px; }
  .nav__account { max-width: 12ch; }
  .toggle { width: 44px; height: 44px; }
  .hero { padding-top: 28px; grid-template-rows: auto auto auto auto; }
  .hero h1 { grid-column: 1 / -1; font-size: clamp(3rem, 13vw, 4.5rem); letter-spacing: -.04em; }
  /* Explain the product and show its actions before the financial board on phones. */
  .hero__board { grid-column: 1 / -1; grid-row: 3; padding: 16px var(--pad) 0; }
  .hero__lead { grid-column: 1 / -1; grid-row: 2; padding: 20px var(--pad) 8px; gap: 16px; }
  .lede { font-size: 1.125rem; }
  .hero__proof { width: 100%; }
  .hero__proof .btn, .hero__proof .cta { width: 100%; }
  .hero__more { grid-row: 4; margin: 8px 0 24px; }
  .board__ctl { grid-template-columns: 1fr; }
  .seg button { min-height: 44px; }
  /* the quiet links and the text buttons: inline padding widens the tap
     area to 44 px without moving the line they sit on */
  .buy-card--quiet .cta, .lnk, .proof__cap .lnk, .plans__pricing a, .drop__meta a, .field__hint a, .drop__actions .lnk { padding-top: 12px; padding-bottom: 12px; }
  .buy-card__secondary .lnk, .drop__scope a { display: inline-block; padding-top: 12px; padding-bottom: 12px; margin-top: -12px; margin-bottom: -12px; }
  .site-footer a { padding: 12px 4px; margin: 0 -4px; }
  .consent .btn--line { min-height: 44px; }
  .chapter { display: inline-flex; align-items: center; min-height: 44px; padding: 0 10px; }
  .lightbox__foot .lnk { min-height: 44px; }
  .modal .lnk, .modal .field__switch, .field__pair--pw .lnk, .modal__alt .lnk { padding-top: 12px; padding-bottom: 12px; }
  .modal__foot { align-items: center; }
  .modal__foot a { padding-top: 14px; padding-bottom: 14px; }
  .field__pair--pw .lnk { padding-left: 6px; padding-right: 6px; }
  .pricing__try a { padding-top: 12px; padding-bottom: 12px; }
  .field input, .field select, .field textarea { min-height: 44px; }
  .ctl + .ctl { border-left: 0; border-top: 1px solid var(--rule); }
  .bars { height: 100px; }
  .bar:not(.bar--first):not(.bar--last) span { display: none; }
  .bars__x { display: flex; justify-content: space-between; }
  .bars__x span:not(:first-child):not(:last-child) { display: none; }
  .proof { padding: 20px 0 48px; }
  .proof__before, .proof__after { grid-column: 1 / -1; }
  .proof__wb { aspect-ratio: 4 / 3; }
  .proof__same { position: static; align-self: center; margin-top: 8px; }
  .proof__same .ic { transform: rotate(90deg); }
  .proof__h { padding-top: 28px; }
  .try__drop { grid-column: 1 / -1; }
  .lightbox { width: calc(100vw - 32px); max-height: calc(100vh - 32px); }
  .lightbox__head { padding: 8px 8px 8px 12px; }
  .lightbox__title { font-size: 15px; }
  .lightbox__chapters { padding: 10px 12px 0; }
  .lightbox__foot { padding: 10px 12px 14px; gap: 6px 16px; }
  /* the account form as a full-height sheet, Continue in reach */
  .modal { width: 100vw; max-width: none; height: 100dvh; max-height: none; margin: 0; border-width: 0; box-shadow: none; }
  .modal__form { min-height: 100%; padding: 8px 16px 16px; }
  .modal__row { grid-template-columns: 1fr; }
  /* the go button stays above the home indicator and above the keyboard */
  .modal__go { position: sticky; bottom: 0; margin-top: auto; padding-bottom: env(safe-area-inset-bottom); min-height: calc(52px + env(safe-area-inset-bottom)); }
  .modal__grab { display: block; width: 36px; height: 4px; margin: 4px auto 4px; background: var(--rule-2); flex: none; }
  .modal__file { max-width: 100%; }
  .modal__file span { overflow-wrap: anywhere; }
  .modal__paths { gap: 12px; }
  /* step one has no submit to push the foot down, so the chooser keeps the
     top of the sheet and the alternative sits at the bottom edge */
  #account-form[data-step="one"] .modal__alt { margin-top: auto; }
  /* thumbs: the inline links in the consent and foot lines reach 44 px tall
     without moving the line they sit on, and Show reaches 44 px wide */
  .modal__consent a, .modal__foot a { display: inline-block; padding-top: 13px; padding-bottom: 13px; margin-top: -13px; margin-bottom: -13px; }
  .field__head .lnk { min-width: 44px; text-align: right; }
  .toast { left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom)); max-width: none; }
  .walk__track { height: auto; }
  .walk__frame { position: static; height: auto; padding: 20px var(--pad) 12px; }
  .walk__h { font-size: 1.75rem; }
  .walk__sub { font-size: 16px; }
  .walk__stages { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-inline: var(--pad); scrollbar-width: none; gap: 12px; margin: 14px calc(-1 * var(--pad)) 12px; padding: 4px var(--pad) 12px; flex: none; }
  .walk__stages::-webkit-scrollbar { display: none; }
  .walk__stage { position: static; flex: 0 0 100%; scroll-snap-align: start; opacity: 1; visibility: visible; display: flex; align-items: stretch; }
  .stage { height: auto; width: 100%; aspect-ratio: auto; flex: 1 1 auto; }
  .stage--shot { aspect-ratio: 4 / 3; }
  .stage--live { padding: 12px; }
  .share { gap: 14px; }
  .share__link { flex-wrap: wrap; padding: 12px; }
  .share__tabs { grid-template-columns: repeat(4, 1fr); gap: 8px; }
  .thumb figcaption { font-size: 13px; }
  .ver__chip--sample { margin-left: 0; }
  .walk__bands { display: none; }
  .rail__steps { gap: 0; }
  .rail__step { min-width: 44px; padding: 0 6px; }
  .rail__step .rail__l, .rail__step .rail__ic, .rail__step .rail__tick, .rail__step.is-done .rail__ic, .rail__step.is-done .rail__tick { display: none; }
  .rail__step::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--rule-2); }
  .rail__step.is-done::before { background: var(--ink-3); }
  .rail__step.is-on { box-shadow: none; }
  .rail__step.is-on::before { background: var(--accent); }
  .board__head { padding: 10px var(--pad); }
  .board__head > div:first-child { flex: 1 1 100%; }
  .seg { flex: 1 1 100%; }
  .seg--metric { flex: 0 1 auto; }
  .board__head .seg button { padding: 0 12px; }
  .board__head .seg__l { padding: 0 8px; }
  /* minmax(0, 1fr): a bare 1fr takes the table's min-content and pushes the board past the viewport */
  .board__body { grid-template-columns: minmax(0, 1fr); }
  .sens { border-right: 0; border-bottom: 1px solid var(--rule); padding: 12px var(--pad); }
  .sens table { min-width: 0; width: 100%; font-size: 13px; }
  .sens th, .sens td { padding: 9px 4px; }
  .sens thead th:first-child { white-space: normal; line-height: 1.15; }
  .sens td.hi, .sens td.hi:hover { outline-offset: -1px; }
  .sens__scroll[data-overflow]::after { content: ""; position: absolute; top: 0; right: 0; bottom: 0; width: 36px; pointer-events: none; background: linear-gradient(to right, transparent, var(--surface)); }
  .sens__scroll[data-overflow] + .sens__hint { display: block; margin-top: 8px; font-size: 13px; color: var(--ink-3); }
  .out { padding: 10px var(--pad) 12px; }
  .kt { display: grid; grid-template-columns: 1fr 1fr 1.45fr; }
  .kt > div { display: flex; flex-direction: column; gap: 2px; padding: 6px 0 4px 10px; border-bottom: 0; border-left: 1px solid var(--rule); }
  .kt > div:first-child { border-left: 0; padding-left: 0; }
  .kt__l { font-size: 13px; color: var(--ink-3); }
  .kt__v { font-size: clamp(1.125rem, 5.2vw, 1.5rem); text-align: left; }
  .sec { padding-bottom: 48px; }
  .sec--chips { padding: 20px 0; }
  .sec__head { grid-column: 1 / -1; padding: 20px var(--pad) 16px; }
  .problem__still { margin: 12px var(--pad) 0; }
  .problem__still img { aspect-ratio: 4 / 3; }
  .payoff .problem__still img { aspect-ratio: 16 / 10; }
  .problem__kicker { left: 16px; top: 12px; font-size: .95rem; }
  .problem__fig .problem__line { font-size: 1.5rem; padding: 16px; }
  .panels { grid-template-columns: 1fr 1fr; gap: 0 12px; }
  .panel { padding: 12px 0 16px; border-left: 0; }
  .panel:nth-child(4n+1) { border-left: 0; }
  .panel figcaption { margin-top: 8px; font-size: 14px; }
  .panel--empty { display: none; }
  .price-sec { padding-bottom: 56px; }
  .tiers { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 12px; margin: 0 var(--pad); border: 0; box-shadow: none; background: none; padding-bottom: 8px; -webkit-overflow-scrolling: touch; }
  .tier { flex: 0 0 84vw; max-width: 340px; scroll-snap-align: start; border: 1px solid var(--frame); background: var(--surface); padding: 16px 14px 18px; box-shadow: var(--shadow-1); }
  .tier:first-child { border-left: 1px solid var(--frame); }
  .tier--lead { background: var(--accent); }
  .tiers__hint { display: block; grid-column: 1 / -1; padding: 4px var(--pad) 0; font-size: 13px; color: var(--ink-3); }
  /* Beyond the workbook on a phone: head over subline, tiles two up on the
     four column lines (0 and 2), the close stacked, 56 px of air under it */
  .bw { padding-bottom: 56px; }
  .bw__head { grid-column: 1 / -1; padding: 20px var(--pad) 12px; gap: 12px; }
  .bw__sub { grid-column: 1 / -1; grid-row: 2; padding: 0 var(--pad) 16px; font-size: 16px; }
  .bw__tile { grid-column: span 2; padding: 16px var(--pad) 20px; gap: 8px; }
  .bw__tile h3 { font-size: 17px; margin-top: 4px; }
  .bw__line { font-size: 13px; }
  .bw__close { grid-template-columns: 1fr; padding-top: 24px; row-gap: 16px; }
  .bw__big { grid-column: 1 / -1; font-size: 22px; }
  .bw__foot { flex-direction: column; align-items: flex-start; gap: 12px; padding-top: 8px; }
  .bw__supp { font-size: 15px; }
  .trust li { white-space: normal; }
  .basics { grid-template-columns: 1fr; padding: 12px; }
  .field--half { grid-column: 1 / -1; }
  .drop__zone { padding: 18px 14px 16px; }
  .drop__choose { align-self: stretch; }
  .faq__list { grid-template-columns: 1fr; }
  .final { padding-bottom: 96px; }
  .final__in { grid-column: 1 / -1; padding-top: 24px; }
  .final__in .cta { width: 100%; }
  .site-footer { padding-bottom: 96px; }
  /* one row on a phone: the sentence, then the two buttons beside it,
     under 96 px tall (memo A6) */
  .consent { left: 0; right: 0; bottom: 0; width: auto; max-width: none; box-shadow: none; border-width: 1px 0 0; flex-wrap: nowrap; gap: 12px; padding: 10px 14px; font-size: 13px; line-height: 1.35; }
  .consent > span { flex: 1 1 auto; }
  .consent .btn--line { flex: 0 0 auto; padding: 0 12px; }

  body { padding-bottom: 76px; }
  .buy-bar {
    display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 20;
    align-items: center; gap: 12px; padding: 10px 14px;
    background: var(--paper); border-top: 1px solid var(--ink);
    transform: translateY(110%); transition: transform 180ms var(--ease);
  }
  .buy-bar.visible { transform: translateY(0); }
  .buy-bar .bar-price { font-weight: 800; font-size: 1.5rem; letter-spacing: -.03em; white-space: nowrap; display: flex; flex-direction: column; line-height: 1; }
  .buy-bar .bar-price small { font-weight: 400; font-size: 13px; color: var(--ink-3); margin-top: 3px; }
  .buy-bar .cta-slot { flex: 1; display: flex; }
  .buy-bar .cta { flex: 1; min-height: 48px; font-size: 16px; }
  body[data-consent="pending"] .buy-bar, body[data-drop="inspect"] .buy-bar, body[data-drop="confirm"] .buy-bar, body[data-drop="basics"] .buy-bar, body[data-drop="fail"] .buy-bar { display: none; }
}
/* the metric switch takes its own row above the axis label on a phone */
@media (max-width: 720px) {
  .seg--metric { flex: 1 1 100%; }
  .sens__axis { flex: 1 1 100%; }
}
@media (max-width: 720px) {
  .nav__links > a:not(.nav__start) { display: none; }
}
@media (max-width: 480px) {
  .cf { grid-template-columns: 1fr auto; gap: 2px 10px; }
  .cf__title { grid-column: 1 / -1; }
  .cf__cell { grid-column: 1; }
  .cf__change { grid-column: 2; grid-row: 2 / span 2; align-self: center; }
  .cf__value { grid-column: 1; font-size: 15px; text-align: left; }
  .confirm { padding: 14px 12px; }
}

/* Motion. Durations from the tokens, only when the visitor has not asked for
   less; the reduce block after this is the backstop. */
@media (prefers-reduced-motion: no-preference) {
  @keyframes rise { from { opacity: .35; transform: translateY(3px); } }
  @keyframes fade { from { opacity: 0; } }
  @keyframes land { from { opacity: 0; transform: translateY(-24px); } }
  @keyframes fillx { from { transform: scaleX(0); } }
  @keyframes zoom { from { opacity: 0; transform: scale(1.02); } }
  @keyframes wipe { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0); } }
  @keyframes lift { from { opacity: 0; transform: translateY(16px); } }
  @keyframes pin { from { outline-width: 0; } }
  /* board: cell colour eases; the three readouts rise once on change */
  .sens td { transition: background-color var(--dur-1) var(--ease), color var(--dur-1) var(--ease); }
  .kt__v.is-fresh, .capl dd.is-fresh { animation: rise var(--dur-2) var(--ease) both; }
  /* drop zone: frame eases, the zone lifts a hair under a drag, stages rise in */
  .drop__zone { transition: border-color var(--dur-1) var(--ease), background var(--dur-1) var(--ease), transform var(--dur-1) var(--ease); }
  .drop__zone.is-over { transform: scale(1.01); }
  .drop__zone .ic { transition: transform var(--dur-1) var(--ease); }
  .drop__zone.is-over .ic { transform: translateY(-2px); }
  .drop__stage.is-fresh { animation: rise var(--dur-2) var(--ease) both; }
  /* the walkthrough: stages cross-fade; each step has one entry motion, run once on .is-on */
  .walk__stage { transition: opacity var(--dur-2) var(--ease), visibility 0s linear var(--dur-2); }
  .walk__stage.is-on { transition-delay: 0s, 0s; }
  .walk__stage[data-step="1"].is-on .stage--shot img { animation: zoom var(--dur-3) var(--ease) both; }
  .walk__stage[data-step="2"].is-on .stage--shot img { animation: wipe var(--dur-3) var(--ease) both; }
  .walk__stage[data-step="3"].is-on .stage--shot img { animation: lift 400ms var(--ease) both; }
  .walk__stage[data-step="4"].is-on .stage--shot img { animation: fade var(--dur-3) var(--ease) both; }
  .walk__stage[data-step="5"].is-on .ver__v--2 { animation: fade var(--dur-2) var(--ease) 400ms both; }
  /* hero board: the bars grow on first paint, 30ms apart; the pinned cell draws its outline */
  @keyframes grow { from { transform: scaleY(0); } }
  .bar i { transform-origin: bottom; animation: grow var(--dur-3) var(--ease) both; animation-delay: calc(var(--i, 0) * 30ms); }
  .sens td.hi { animation: pin var(--dur-2) var(--ease) both; }
  /* the lightbox and the account dialog fade in once; on a phone the sheet
     comes up from the bottom edge it is docked to */
  .lightbox[open], .modal[open] { animation: fade var(--dur-2) var(--ease) both; }
  @media (max-width: 900px) {
    @keyframes sheet { from { opacity: 0; transform: translateY(24px); } }
    .modal[open] { animation: sheet var(--dur-2) var(--ease) both; }
  }
  /* tier hover, pointer devices only; no lift on touch */
  @media (hover: hover) {
    .tier { transition: background var(--dur-1) var(--ease), box-shadow var(--dur-1) var(--ease); }
    .tier:hover { background: var(--surface-2); }
    .tier--lead:hover { background: var(--accent); box-shadow: var(--shadow-board); }
  }
  /* reveal on scroll, once, only when app.js has an observer to drive it */
  html[data-reveal] .panel { opacity: 0; transform: translateY(12px); transition: opacity 400ms var(--ease), transform 400ms var(--ease); }
  html[data-reveal] .panel { transition-delay: calc(var(--i, 0) * 60ms); }
  html[data-reveal] .panel.is-in { opacity: 1; transform: none; }
  /* #proof entry, once: the after capture wipes in, its three chips rise 60ms apart; the before block is static */
  html[data-reveal] .proof__shot img { clip-path: inset(0 100% 0 0); transition: clip-path var(--dur-3) var(--ease); }
  html[data-reveal] .proof__shot.is-in img { clip-path: inset(0); }
  html[data-reveal] .proof__after .chips li { opacity: 0; transform: translateY(8px); transition: opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease); }
  html[data-reveal] .proof__after .chips li:nth-child(2) { transition-delay: 60ms; }
  html[data-reveal] .proof__after .chips li:nth-child(3) { transition-delay: 120ms; }
  html[data-reveal] .proof__after .chips.is-in li { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; animation-delay: 0ms !important; }
}

/* the ok tick inside inspection rows keeps its accent ink (recheck5 N2) */
.drop__rows li span.chip--ok { color: var(--accent-ink); }

/* Pricing page (pricing.html): the ladder with the billing toggle. The home
   page carries no dollar figures (CEO, 2026-09-04); the numbers live here.
   The two price nodes per card swap in place under a fixed grid column, so
   the toggle moves no horizontal layout. */
.pricing__head { grid-column: 1 / -1; padding: 24px var(--pad) 28px; display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px 32px; }
.pricing__head h1 { margin: 0; font-size: clamp(2.5rem, 5vw, 4rem); font-weight: 800; letter-spacing: -.04em; line-height: .95; }
.pricing__head .lede { flex: 1 1 240px; }
.seg--bill { flex: none; background: var(--paper); }
.seg__note { font-weight: 400; font-size: 12.5px; color: var(--ink-3); margin-left: 8px; }
.seg--bill button[aria-pressed="true"] .seg__note { color: var(--ink-2); }
.tiers[data-interval="monthly"] .only-a { display: none; }
.tiers[data-interval="annual"] .only-m { display: none; }
.tier__equiv { margin: 0; font-size: 13px; color: var(--ink-3); min-height: 1.5em; line-height: 1.4; }
.tier--lead .tier__equiv { color: var(--accent-ink); opacity: .85; }
.tier__benefits { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; font-size: 13.5px; line-height: 1.45; color: var(--ink-2); flex: 1; }
.tier__benefits li { display: flex; gap: 8px; align-items: flex-start; }
.tier__benefits .ic { flex: none; margin-top: 2px; color: var(--accent-text); }
.tier--lead .tier__benefits { color: var(--accent-ink); opacity: .92; }
.tier--lead .tier__benefits .ic { color: var(--accent-ink); }
.pricing .tier__line { flex: none; }
.pricing__try { grid-column: 1 / -1; display: flex; align-items: center; gap: 8px; padding: 20px var(--pad) 4px; font-size: 15px; color: var(--ink-2); }
.pricing__try .ic { color: var(--accent-text); }
.pricing__try a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }
.pricing .trust { padding-top: 16px; }
.pricing__note { grid-column: 1 / -1; padding: 12px var(--pad) 0; font-size: 13px; color: var(--ink-3); max-width: 80ch; }

/* the home plans overview: credits, not dollars */
.tier__credits { font-variant-numeric: tabular-nums; }
.plans__pricing { margin: 8px 0 0; font-size: 13px; }
.plans__pricing a { color: var(--accent-text); text-decoration: underline; text-underline-offset: 3px; }

/* Pricing page on phones */
@media (max-width: 600px) {
  .seg--bill { flex: 1 1 100%; }
  .seg--bill button { white-space: normal; padding: 6px 12px; line-height: 1.2; }
  .seg__note { display: block; margin: 2px 0 0; font-size: 12px; }
  .pricing__try { display: block; line-height: 1.5; padding-top: 16px; }
  .pricing__try .ic { vertical-align: -2px; margin-right: 6px; }
  .pricing__try a { padding: 12px 0; }
}

/* Structured deal scope: explicit choices, using the existing form palette. */
.deal-scope{grid-column:1/-1;border:0;border-top:1px solid var(--rule);padding:18px 0 0;margin:6px 0;min-width:0;display:flex;flex-direction:column;gap:18px}.deal-scope>legend{padding:0 10px 0 0}.scope-selects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.scope-options{border:0;padding:0;margin:0;min-width:0}.scope-options legend,.scope-options summary{font-size:14px;font-weight:600;margin:0 0 8px}.scope-options small{font-size:13px;font-weight:400;color:var(--ink-3)}.scope-options .field__hint{margin-bottom:10px}.scope-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.scope-choice{display:flex;align-items:center;gap:9px;min-height:46px;padding:9px 11px;border:1px solid var(--rule);background:var(--paper);font-size:13px;line-height:1.4;cursor:pointer}.scope-choice:has(input:checked){border-color:var(--accent-text);background:var(--surface)}.scope-choice input{flex:0 0 auto;width:17px;height:17px;margin:0;accent-color:var(--accent)}.scope-choice:focus-within{outline:2px solid var(--accent-text);outline-offset:2px}.scope-options[hidden]{display:none}.scope-coverage{padding:16px;border:1px solid var(--rule);background:var(--paper);font-size:14px;line-height:1.5}.scope-coverage h4{margin:0 0 6px;font-size:17px}.scope-coverage p{margin:0 0 8px}.scope-coverage ul{padding-left:20px;margin:8px 0}.scope-coverage li+li{margin-top:5px}.scope-coverage[hidden]{display:none}@media(max-width:600px){.scope-selects,.scope-choices{grid-template-columns:1fr}.scope-selects .field{grid-column:1}.scope-choice{min-height:48px}}

.scope-selects>.field{grid-column:auto}
