/* ---- tokens.css ---- */
/* Whyve · Howse landing tokens — draft r1 (2026-09-26, agent/visual-designer)
 *
 * Usage: <html lang="en" data-product="whyve"> or data-product="howse".
 * Base palette is lifted from the existing brand SVGs (assets/brand, assets/web):
 *   cream #f3f1ea, ink #151714, muted-on-cream #626760 (Whyve og-image tagline),
 *   muted-on-ink #c5c9c0 (Howse og-image tagline).
 * Howse accent #315f95 / hover #254b79 is the Howse app's own accent
 *   (apps/local/client/src/WorkspaceTheme.css), so landing buttons match the screenshots.
 * Whyve accent #8f5c0c is the only new colour (ochre thread). Contrast values are WCAG 2.x.
 * No web fonts. No gradients. One shadow token, for media frames only.
 */

:root {
  /* ---- base palette (shared, from brand assets) ---- */
  --color-cream: #f3f1ea;          /* page background */
  --color-ink: #151714;            /* text on cream 15.96:1 */
  --color-muted: #626760;          /* secondary text on cream 5.12:1 */
  --color-paper: #fbfaf6;          /* input / raised surface on cream */
  --color-rule: #dcd8cc;           /* decorative hairline only (1.26:1, not a control border) */
  --color-border: #8c897e;         /* control border on cream 3.10:1 (WCAG 1.4.11) */
  --color-code-inline-bg: #e6e3d8;

  --color-ink-muted: #c5c9c0;      /* secondary text on ink 10.73:1 */
  --color-ink-subtle: #9a9e95;     /* comments / captions on ink 6.61:1 */
  --color-ink-rule: #3a3e38;       /* hairline on ink */
  --color-ink-raised: #1c1e1b;     /* code block / terminal title bar on ink */

  --color-danger: #b3261e;         /* form error text on cream 5.78:1 */
  --color-success: #2f6b3a;        /* form done text on cream 5.66:1 */

  /* ---- semantic (light page = the only default, see rules §3) ---- */
  --color-bg: var(--color-cream);
  --color-text: var(--color-ink);
  --color-text-muted: var(--color-muted);

  --color-code-bg: var(--color-ink);
  --color-code-fg: var(--color-cream);
  --color-code-comment: var(--color-ink-subtle);

  /* ---- type (system stacks, no downloads) ---- */
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial,
    "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", sans-serif;
  --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;

  --font-size-100: 0.8125rem;   /* 13  caption, frame label, eyebrow */
  --font-size-200: 0.9375rem;   /* 15  small, code block */
  --font-size-300: 1.0625rem;   /* 17  body */
  --font-size-400: 1.25rem;     /* 20  lead / hero sub */
  --font-size-500: 1.5rem;      /* 24  h3 */
  --font-size-600: clamp(1.75rem, 1.45rem + 1.2vw, 2.25rem);   /* 28–36 h2 */
  --font-size-700: clamp(2.25rem, 1.6rem + 2.6vw, 3.5rem);     /* 36–56 h1 (hero only) */

  --font-weight-regular: 400;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;

  --line-height-tight: 1.12;    /* h1 */
  --line-height-heading: 1.25;  /* h2, h3 */
  --line-height-body: 1.6;
  --line-height-code: 1.55;
  --tracking-display: -0.02em;  /* h1/h2 in Latin only; reset to 0 for :lang(ko) */
  --tracking-eyebrow: 0.02em;

  --measure: 40rem;             /* ~68ch body width */

  /* ---- space (4px base) ---- */
  --space-1: 0.25rem;  /* 4 */
  --space-2: 0.5rem;   /* 8 */
  --space-3: 0.75rem;  /* 12 */
  --space-4: 1rem;     /* 16 */
  --space-5: 1.5rem;   /* 24 */
  --space-6: 2rem;     /* 32 */
  --space-7: 3rem;     /* 48 */
  --space-8: 4rem;     /* 64 */
  --space-9: 6rem;     /* 96 */
  --space-10: 8rem;    /* 128 */
  --space-gutter: clamp(1.25rem, 5vw, 3rem);         /* 20–48 page side padding */
  --space-section: clamp(4rem, 3rem + 5vw, 8rem);    /* 64–128 between sections */
  --container: 70rem;                                /* 1120 */

  /* ---- radius ---- */
  --radius-sm: 4px;    /* inline code, tags */
  --radius-md: 8px;    /* buttons, inputs, code blocks (= rx 8 of the Howse symbol bars) */
  --radius-lg: 12px;   /* terminal frame */

  /* ---- elevation: media frames only ---- */
  --shadow-frame: 0 1px 2px rgb(21 23 20 / 0.08), 0 24px 48px -20px rgb(21 23 20 / 0.35);

  /* ---- media ---- */
  --terminal-aspect: 16 / 9;    /* recording canvas 1280×720 */
  --app-aspect: 16 / 10;        /* window 1440×900 logical, 2880×1800 capture */
  --frame-bar-height: 2.25rem;  /* 36px terminal label bar */

  /* ---- motion ---- */
  --duration-fast: 120ms;
  --ease: cubic-bezier(0.2, 0, 0, 1);
}

/* ---- product scopes: accent only, everything else is shared ----
 * Put data-product on <html>. Semantic aliases that read the accent live here, not in :root,
 * because a var() is resolved on the element that declares it. */
[data-product] {
  --color-link: var(--color-accent);
  --color-focus: var(--color-accent);
  --color-code-prompt: var(--color-accent-on-ink);
}
[data-product="whyve"] {
  --color-accent: #8f5c0c;          /* on cream 5.02:1; white text on it 5.67:1 */
  --color-accent-hover: #6c4508;    /* on cream 7.46:1 */
  --color-accent-on-ink: #e0a54a;   /* on ink 8.29:1 — terminal prompt, cursor, links in dark blocks */
  --color-accent-contrast: #ffffff; /* text on accent fill */
  --color-hero-bg: var(--color-cream);
  --color-hero-text: var(--color-ink);
  --color-hero-muted: var(--color-muted);
}

[data-product="howse"] {
  --color-accent: #315f95;          /* Howse app accent; on cream 5.80:1; white on it 6.56:1 */
  --color-accent-hover: #254b79;    /* Howse app accent-hover; on cream 7.87:1 */
  --color-accent-on-ink: #8fb3dd;   /* on ink 8.30:1 — links / focus inside the ink hero band */
  --color-accent-contrast: #ffffff;
  --color-hero-bg: var(--color-ink);        /* inverted band, mirrors the Howse og-image */
  --color-hero-text: var(--color-cream);
  --color-hero-muted: var(--color-ink-muted);
}

/* Korean: no negative tracking, keep words whole, a little more leading */
:lang(ko) {
  --tracking-display: 0;
  --line-height-body: 1.75;
  word-break: keep-all;
  overflow-wrap: anywhere;
}

/* ---- minimal reference components (copy or replace) ---- */
html { background: var(--color-bg); color: var(--color-text); font: var(--font-weight-regular) var(--font-size-300)/var(--line-height-body) var(--font-sans); -webkit-text-size-adjust: 100%; }
body { margin: 0; }
a { color: var(--color-link); text-underline-offset: 0.18em; text-decoration-thickness: 1px; }
a:hover { color: var(--color-accent-hover); text-decoration-thickness: 2px; }
:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }

h1, h2, h3 { margin: 0; font-weight: var(--font-weight-semibold); line-height: var(--line-height-heading); letter-spacing: var(--tracking-display); text-wrap: balance; }
h1 { font-size: var(--font-size-700); font-weight: var(--font-weight-bold); line-height: var(--line-height-tight); }
h2 { font-size: var(--font-size-600); }
h3 { font-size: var(--font-size-500); letter-spacing: 0; }
p { max-width: var(--measure); text-wrap: pretty; }

/* eyebrow keeps the author's casing: no text-transform, or macOS becomes MACOS */
.eyebrow { font: var(--font-weight-semibold) var(--font-size-100)/1.4 var(--font-mono); letter-spacing: var(--tracking-eyebrow); color: var(--color-text-muted); }

.container { max-width: var(--container); margin-inline: auto; padding-inline: var(--space-gutter); }
.section { padding-block: var(--space-section); border-top: 1px solid var(--color-rule); }

.hero { background: var(--color-hero-bg); color: var(--color-hero-text); --color-text-muted: var(--color-hero-muted); }
.hero .muted { color: var(--color-hero-muted); }
[data-product="howse"] .hero { --color-link: var(--color-accent-on-ink); --color-focus: var(--color-accent-on-ink); }

.btn { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 44px; padding: 0 var(--space-5); border-radius: var(--radius-md); border: 1px solid transparent; font: var(--font-weight-semibold) var(--font-size-300)/1 var(--font-sans); text-decoration: none; cursor: pointer; transition: background-color var(--duration-fast) var(--ease); }
.btn-primary { background: var(--color-accent); color: var(--color-accent-contrast); }
.btn-primary:hover { background: var(--color-accent-hover); color: var(--color-accent-contrast); }
.btn-secondary { background: transparent; color: var(--color-text); border-color: var(--color-ink); }
.btn-secondary:hover { background: var(--color-ink); color: var(--color-cream); }
/* inside the Howse ink band the primary is inverted cream; a blue fill would be 2.75:1 against ink */
[data-product="howse"] .hero .btn-primary { background: var(--color-cream); color: var(--color-ink); }
[data-product="howse"] .hero .btn-primary:hover { background: #ffffff; }
[data-product="howse"] .hero .btn-secondary { color: var(--color-cream); border-color: var(--color-ink-muted); }
[data-product="howse"] .hero .btn-secondary:hover { background: var(--color-cream); color: var(--color-ink); }

code, pre { font-variant-ligatures: none; }  /* keep -- and => literal */
code { font-family: var(--font-mono); font-size: 0.9em; background: var(--color-code-inline-bg); border-radius: var(--radius-sm); padding: 0.1em 0.35em; }
.code-block { position: relative; min-width: 0; align-self: start; background: var(--color-code-bg); color: var(--color-code-fg); border-radius: var(--radius-md); font: var(--font-size-200)/var(--line-height-code) var(--font-mono); }
.code-block pre { margin: 0; padding: var(--space-5); padding-right: 5.5rem; overflow-x: auto; }
.code-block code { background: none; padding: 0; font-size: inherit; }
.code-block .prompt { color: var(--color-code-prompt); user-select: none; }
.code-block .comment { color: var(--color-code-comment); }
.code-block .copy { position: absolute; top: var(--space-3); right: var(--space-3); min-height: 32px; padding: 0 var(--space-3); border-radius: var(--radius-sm); border: 1px solid var(--color-ink-rule); background: var(--color-ink-raised); color: var(--color-ink-muted); font: var(--font-size-100)/1 var(--font-sans); cursor: pointer; }
.code-block .copy:hover { color: var(--color-cream); border-color: var(--color-ink-subtle); }
.code-block:not(:has(.code-tabs)) pre { padding-top: 3.25rem; }  /* copy button gets its own row */
.code-block:has(.code-tabs) .copy { top: var(--space-2); }         /* tabbed: copy sits in the tab row */
.code-tabs { display: flex; gap: var(--space-1); border-bottom: 1px solid var(--color-ink-rule); padding: var(--space-2) var(--space-3) 0; }
.code-tabs button { background: none; border: 0; border-bottom: 2px solid transparent; color: var(--color-ink-subtle); font: var(--font-weight-semibold) var(--font-size-100)/1 var(--font-sans); padding: var(--space-3); cursor: pointer; }
.code-tabs button[aria-selected="true"] { color: var(--color-cream); border-bottom-color: var(--color-accent-on-ink); }

.field { display: flex; flex-wrap: wrap; gap: var(--space-2); max-width: 30rem; }
.field input { flex: 1 1 14rem; min-height: 44px; padding: 0 var(--space-4); border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-paper); color: var(--color-ink); font: inherit; }
.field input:focus-visible { border-color: var(--color-focus); outline-offset: 0; }
.field input[aria-invalid="true"] { border-color: var(--color-danger); }
.field-note { flex-basis: 100%; margin: 0; font-size: var(--font-size-100); color: var(--color-text-muted); }
.field-note.error { color: var(--color-danger); }
.field-note.done { color: var(--color-success); }

.frame-terminal { background: var(--color-ink); border: 1px solid var(--color-ink-rule); border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-frame); }
.frame-terminal .bar { height: var(--frame-bar-height); display: flex; align-items: center; justify-content: space-between; padding: 0 var(--space-4); background: var(--color-ink-raised); border-bottom: 1px solid var(--color-ink-rule); color: var(--color-ink-subtle); font: var(--font-size-100)/1 var(--font-mono); }
.frame-terminal video, .frame-terminal img { display: block; width: 100%; aspect-ratio: var(--terminal-aspect); height: auto; background: var(--color-ink); }

.frame-app { margin: 0; min-width: 0; }
.frame-terminal { min-width: 0; }
.frame-app img { display: block; width: 100%; aspect-ratio: var(--app-aspect); height: auto; filter: drop-shadow(0 1px 2px rgb(21 23 20 / 0.10)) drop-shadow(0 20px 36px rgb(21 23 20 / 0.28)); }
.frame-app figcaption, .frame-terminal + figcaption { margin-top: var(--space-3); font-size: var(--font-size-100); color: var(--color-text-muted); }

.footer { padding-block: var(--space-8); border-top: 1px solid var(--color-rule); font-size: var(--font-size-200); color: var(--color-text-muted); }
.footer .tagline { color: var(--color-text); font-weight: var(--font-weight-semibold); }

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}

/* ---- base.css ---- */
/* Shared by the Whyve and Howse sites (same file in both repositories).
 * Built on tokens.css; product differences live in whyve.css / howse.css. */

*, *::before, *::after { box-sizing: border-box; }
img, video { max-width: 100%; }
body { min-width: 20rem; }
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.skip { position: absolute; left: var(--space-4); top: -4rem; z-index: 2; background: var(--color-ink); color: var(--color-cream); padding: var(--space-2) var(--space-4); border-radius: var(--radius-md); }
.skip:focus { top: var(--space-4); }

p { margin: 0 0 var(--space-4); }
p:last-child { margin-bottom: 0; }
h2 { margin-bottom: var(--space-5); }
h3 { margin-bottom: var(--space-3); }
.lead { font-size: var(--font-size-400); line-height: 1.5; max-width: 34rem; }
.muted { color: var(--color-text-muted); }
.small { font-size: var(--font-size-100); line-height: 1.5; }
ul, ol { padding-left: 1.25em; margin: 0 0 var(--space-4); max-width: var(--measure); }
li + li { margin-top: var(--space-2); }

/* ---- header ---- */
.site-header { border-bottom: 1px solid var(--color-rule); }
.site-header .container { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); min-height: 4rem; }
.logo { display: block; line-height: 0; }
.logo img { height: 28px; width: auto; }
.nav { display: flex; align-items: center; gap: var(--space-5); font-size: var(--font-size-200); }
.nav a:not(.btn) { color: inherit; text-decoration: none; }
.nav a:not(.btn):hover { text-decoration: underline; }
.nav .btn { min-height: 36px; padding: 0 var(--space-4); font-size: var(--font-size-200); }
.lang { display: inline-flex; gap: var(--space-2); font: var(--font-size-100)/1 var(--font-mono); }
.lang a { color: inherit; text-decoration: none; }
.lang a:hover { text-decoration: underline; }
.lang [aria-current="page"] { font-weight: var(--font-weight-semibold); }
.menu { display: none; position: relative; font-size: var(--font-size-200); }
.menu summary { cursor: pointer; list-style: none; padding: var(--space-2) 0; }
.menu summary::-webkit-details-marker { display: none; }
.menu[open] > div { position: absolute; right: 0; top: 100%; z-index: 3; display: grid; gap: var(--space-3); min-width: 11rem; padding: var(--space-4); background: var(--color-paper); color: var(--color-ink); border: 1px solid var(--color-border); border-radius: var(--radius-md); }
.menu a { color: inherit; }
@media (max-width: 719px) {
  .nav .wide { display: none; }
  .menu { display: block; }
}

/* ---- sections ---- */
.section { padding-block: var(--space-section); }
.section-head { max-width: var(--measure); margin-bottom: var(--space-6); }
.two-col { display: grid; gap: var(--space-7); }
.two-col > * { min-width: 0; }
@media (min-width: 960px) { .two-col { grid-template-columns: 1fr 1fr; } }

/* ---- tables (scroll inside, never widen the page) ---- */
.table-wrap { overflow-x: auto; margin-block: var(--space-5); max-width: 100%; }
table { border-collapse: collapse; width: 100%; font-size: var(--font-size-200); line-height: 1.5; }
th, td { text-align: left; vertical-align: top; padding: var(--space-3) var(--space-4) var(--space-3) 0; border-bottom: 1px solid var(--color-rule); }
th { font-weight: var(--font-weight-semibold); }
thead th { color: var(--color-text-muted); font-weight: var(--font-weight-semibold); font-size: var(--font-size-100); border-bottom-color: var(--color-border); }
td:first-child { white-space: nowrap; }

/* ---- code blocks ---- */
.code-block { margin-block: var(--space-4); }
.code-block .label { display: block; padding: var(--space-3) var(--space-5) 0; color: var(--color-ink-subtle); font: var(--font-size-100)/1.4 var(--font-sans); }
.code-block .label + pre { padding-top: var(--space-3); }
.code-block:not(:has(.code-tabs)):has(.label) pre { padding-top: var(--space-3); }
.code-block .copy[hidden] { display: none; }
/* CSS-only host tabs: radio inputs; without CSS every panel is visible */
.code-tabs input { position: absolute; opacity: 0; pointer-events: none; }
.code-tabs label { display: inline-block; border-bottom: 2px solid transparent; color: var(--color-ink-subtle); font: var(--font-weight-semibold) var(--font-size-100)/1 var(--font-sans); padding: var(--space-3); cursor: pointer; }
.code-tabs input:focus-visible + label { outline: 2px solid var(--color-accent-on-ink); outline-offset: -2px; }
.tabbed .panel { display: none; }
.tabbed:has(#tab-a:checked) .panel-a, .tabbed:has(#tab-b:checked) .panel-b { display: block; }
.tabbed:has(#tab-a:checked) label[for="tab-a"], .tabbed:has(#tab-b:checked) label[for="tab-b"] { color: var(--color-cream); border-bottom-color: var(--color-accent-on-ink); }

/* ---- validated / not yet ---- */
.verify { display: grid; gap: var(--space-6); margin-top: var(--space-6); }
.verify > * { min-width: 0; }
.verify h3 { font-size: var(--font-size-300); }
@media (min-width: 960px) {
  .verify { grid-template-columns: 1fr 1fr; gap: 0; }
  .verify > :first-child { padding-right: var(--space-7); border-right: 1px solid var(--color-rule); }
  .verify > :last-child { padding-left: var(--space-7); }
}
.source { display: block; margin-top: var(--space-1); color: var(--color-text-muted); font: var(--font-size-100)/1.4 var(--font-mono); }

/* ---- link lists (docs) ---- */
.link-list { list-style: none; padding: 0; margin: 0; max-width: none; border-top: 1px solid var(--color-rule); }
.link-list li { margin: 0; border-bottom: 1px solid var(--color-rule); }
.link-list a { display: grid; gap: var(--space-1) var(--space-5); padding: var(--space-4) 0; text-decoration: none; color: var(--color-text); }
.link-list a:hover .t { text-decoration: underline; color: var(--color-accent-hover); }
.link-list .t { font-weight: var(--font-weight-semibold); color: var(--color-link); }
.link-list .p { font: var(--font-size-100)/1.4 var(--font-mono); color: var(--color-text-muted); }
.link-list .d { color: var(--color-text-muted); font-size: var(--font-size-200); }
@media (min-width: 720px) { .link-list a { grid-template-columns: minmax(14rem, 1fr) 2fr; align-items: baseline; } }

/* ---- waitlist form ---- */
.waitlist { margin-top: var(--space-5); }
.waitlist label.email { display: block; margin-bottom: var(--space-2); font-weight: var(--font-weight-semibold); font-size: var(--font-size-200); }
.waitlist fieldset { border: 0; padding: 0; margin: 0 0 var(--space-4); }
.waitlist legend { padding: 0; margin-bottom: var(--space-2); font-weight: var(--font-weight-semibold); font-size: var(--font-size-200); }
.check { display: flex; gap: var(--space-2); align-items: center; font-size: var(--font-size-200); }
.check + .check { margin-top: var(--space-2); }
.check input { width: 1.1rem; height: 1.1rem; accent-color: var(--color-accent); }

/* ---- about ---- */
.etymology { margin: var(--space-6) 0 var(--space-3); font: var(--font-weight-semibold) var(--font-size-600)/1.2 var(--font-mono); letter-spacing: 0; }
.etymology .eq { color: var(--color-text-muted); font-weight: var(--font-weight-regular); }

/* ---- media frames ---- */
figure { margin: 0; }
.frame-shot img { display: block; width: 100%; height: auto; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: #fff; box-shadow: var(--shadow-frame); }
.frame-shot figcaption { margin-top: var(--space-3); font-size: var(--font-size-100); color: var(--color-text-muted); }
.frame-shot a { display: block; }

/* ---- footer ---- */
.footer .container { display: flex; flex-wrap: wrap; gap: var(--space-3) var(--space-5); align-items: baseline; justify-content: space-between; }
.footer .links { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); }
.footer .tagline { font-size: var(--font-size-400); }
.btn:disabled { opacity: 0.6; cursor: progress; }

/* ---- plain text pages (privacy) ---- */
.prose { padding-block: var(--space-7) var(--space-9); }
.prose h1 { font-size: var(--font-size-600); margin-bottom: var(--space-6); }
.prose h2 { font-size: var(--font-size-500); margin: var(--space-7) 0 var(--space-3); }

/* ---- howse.css ---- */
/* Howse only: a page for looking. Wide, an ink band behind the hero (the Howse
 * og-image and app tile are cream on ink), and the real app window sitting across
 * the edge where the ink band meets the cream page. */

.band { display: flow-root; background: var(--color-hero-bg); color: var(--color-hero-text); --color-text-muted: var(--color-hero-muted); --color-link: var(--color-accent-on-ink); --color-focus: var(--color-accent-on-ink); }
.band .site-header { border-bottom-color: var(--color-ink-rule); }
.band .nav a:not(.btn) { color: var(--color-cream); }
.band .menu[open] > div a { color: var(--color-ink); }
.band .btn-primary { background: var(--color-cream); color: var(--color-ink); }
.band .btn-primary:hover { background: #ffffff; color: var(--color-ink); }
.band .btn-secondary { color: var(--color-cream); border-color: var(--color-ink-muted); }
.band .btn-secondary:hover { background: var(--color-cream); color: var(--color-ink); }

.hero-stack { text-align: center; padding-top: var(--space-8); }
.hero-stack p { margin-inline: auto; }
.hero-stack h1 { margin: var(--space-4) auto var(--space-5); max-width: 18ch; }
.hero-stack .problem { margin-inline: auto; max-width: 40rem; font-size: var(--font-size-400); line-height: 1.5; }
.hero-stack .solution { margin-inline: auto; max-width: 40rem; color: var(--color-text-muted); }
.hero-stack .actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-3); margin-top: var(--space-6); }
.hero-stack .meta { margin-top: var(--space-4); font-size: var(--font-size-100); color: var(--color-text-muted); }
/* the window hangs out of the band: negative bottom margin, the page below pads for it */
.hero-shot { max-width: 72rem; margin: var(--space-8) auto calc(-1 * var(--space-10)); padding-inline: var(--space-gutter); position: relative; }
.hero-shot img { display: block; width: 100%; height: auto; border: 1px solid var(--color-ink-rule); border-radius: var(--radius-md); background: #fff; box-shadow: var(--shadow-frame); }
.hero-shot figcaption { margin-top: var(--space-3); font-size: var(--font-size-100); color: var(--color-muted); text-align: center; }
.after-band { padding-top: calc(var(--space-10) + var(--space-7)); }
@media (max-width: 719px) { .hero-shot { margin-bottom: calc(-1 * var(--space-8)); } .after-band { padding-top: calc(var(--space-8) + var(--space-6)); } }

.section + .section { border-top: 1px solid var(--color-rule); }
.col { max-width: 46rem; }

/* problem: two columns compared in a table; stacked rows on small screens */
.compare th[scope="row"] { width: 26%; }
@media (max-width: 719px) {
  .compare thead { display: none; }
  .compare tr { display: block; padding: var(--space-3) 0; border-bottom: 1px solid var(--color-rule); }
  .compare th, .compare td { display: block; border: 0; padding: var(--space-1) 0; white-space: normal; width: auto; }
  .compare td::before { content: attr(data-label) ": "; font-weight: var(--font-weight-semibold); }
}

/* three steps, alternating sides; never three cards in a row */
.steps { list-style: none; padding: 0; margin: var(--space-7) 0 0; max-width: none; }
.steps > li { margin: 0; display: grid; gap: var(--space-5); align-items: center; }
.steps > li + li { margin-top: var(--space-9); }
.steps > li > * { min-width: 0; }
@media (min-width: 960px) {
  .steps > li { grid-template-columns: 5fr 7fr; gap: var(--space-8); }
  .steps > li:nth-child(even) { grid-template-columns: 7fr 5fr; }
  .steps > li:nth-child(even) .step-text { order: 2; }
}
.step-no { display: block; margin-bottom: var(--space-3); font: var(--font-weight-semibold) var(--font-size-600)/1 var(--font-mono); color: var(--color-accent); }
.aside { margin-top: var(--space-8); padding-top: var(--space-5); border-top: 1px solid var(--color-rule); max-width: 40rem; }

.whyve-inside { display: grid; gap: var(--space-6); align-items: center; }
.whyve-inside > * { min-width: 0; }
@media (min-width: 960px) { .whyve-inside { grid-template-columns: 1fr 1fr; gap: var(--space-8); } }
.whyve-mark { height: 20px; width: auto; display: block; margin-bottom: var(--space-3); }

/* #get: requirements directly above the action */
.get { max-width: 36rem; margin-inline: auto; }
.req { margin: var(--space-5) 0; padding: var(--space-4) var(--space-5); border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-paper); }
.req h3 { font-size: var(--font-size-200); margin-bottom: var(--space-2); }
.req ul { margin: 0; font-size: var(--font-size-200); }
.req .small { margin-top: var(--space-3); }
/* one hidden block per platform; site.js shows only the visitor's own (or the fallback when unknown) */
.chip-choice { display: flex; flex-wrap: wrap; gap: var(--space-3); }
.download-fallback details, .sha-choice { margin-block: var(--space-4); }
.download-fallback ul { margin-top: var(--space-3); }

.docs-list { columns: 1; }
@media (min-width: 960px) { .docs-list.link-list a { grid-template-columns: 1fr auto; } }

/* ---- docs pages ---- */
.docs { display: grid; gap: var(--space-6); padding-block: var(--space-7) var(--space-9); }
.docs > * { min-width: 0; }
@media (min-width: 960px) { .docs { grid-template-columns: 15rem minmax(0, 45rem); gap: var(--space-8); } }
.docs-nav { font-size: var(--font-size-200); }
.docs-nav .title { font-weight: var(--font-weight-semibold); margin-bottom: var(--space-1); }
.badge { display: inline-block; margin-bottom: var(--space-4); padding: 0.1em 0.5em; border: 1px solid var(--color-border); border-radius: var(--radius-sm); font: var(--font-size-100)/1.5 var(--font-mono); color: var(--color-text-muted); }
.docs-nav ol { list-style: none; padding: 0; margin: 0 0 var(--space-5); }
.docs-nav li { margin: 0; }
.docs-nav li + li { margin-top: var(--space-1); }
.docs-nav a { color: var(--color-text); text-decoration: none; display: block; padding: var(--space-1) 0; }
.docs-nav a:hover { text-decoration: underline; }
.docs-nav a[aria-current="page"] { color: var(--color-accent); font-weight: var(--font-weight-semibold); }
.docs-nav ul { list-style: none; padding: 0 0 0 var(--space-4); margin: 0 0 var(--space-2); border-left: 1px solid var(--color-rule); font-size: var(--font-size-100); }
.docs-nav ul a { color: var(--color-text-muted); }
.docs-nav .out { border-top: 1px solid var(--color-rule); padding-top: var(--space-4); display: grid; gap: var(--space-2); }
.docs-nav .wide-nav { display: none; }
@media (min-width: 960px) { .docs-nav .wide-nav { display: block; } .docs-nav details { display: none; } }
.docs-nav details > summary { cursor: pointer; font-weight: var(--font-weight-semibold); padding: var(--space-3) 0; border-bottom: 1px solid var(--color-rule); margin-bottom: var(--space-4); }
.article h1 { font-size: var(--font-size-600); margin-bottom: var(--space-3); }
.article .page-meta { margin-bottom: var(--space-7); font-size: var(--font-size-100); color: var(--color-text-muted); }
.article .step-of { display: block; margin-bottom: var(--space-2); font: var(--font-size-100)/1 var(--font-mono); color: var(--color-text-muted); }
.article h2 { font-size: var(--font-size-500); margin: var(--space-7) 0 var(--space-4); scroll-margin-top: var(--space-5); }
.article h3 { font-size: var(--font-size-300); margin: var(--space-6) 0 var(--space-3); }
.article ol > li > ul { margin-top: var(--space-2); }
.article .notice { padding: var(--space-4) var(--space-5); border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-paper); margin-bottom: var(--space-5); }
.pager { display: flex; justify-content: space-between; gap: var(--space-4); margin-top: var(--space-8); padding-top: var(--space-5); border-top: 1px solid var(--color-rule); font-size: var(--font-size-200); }
.pager .next { margin-left: auto; text-align: right; }
