/* Hum's public site. A chart recorder running through one day: morning paper to a dark bedroom.
   Rules are in replica/direction.md. Design rules adapted from unslop by Damir Sokolovsky (@heydamir), CC BY 4.0.
   Colours mean one state each. contrast is checked by script against the values below. */

@font-face {
  font-family: "Bricolage Grotesque";
  src: url("/site/fonts/BricolageGrotesque-Regular.ttf") format("truetype");
  font-weight: 400;
  font-display: swap;
}
@font-face {
  font-family: "Bricolage Grotesque";
  src: url("/site/fonts/BricolageGrotesque-Bold.ttf") format("truetype");
  font-weight: 700;
  font-display: swap;
}

/* Registered so the whole page can fade between parts of the day in one step. */
@property --surface { syntax: "<color>"; inherits: true; initial-value: #e8ece6; }
@property --raised { syntax: "<color>"; inherits: true; initial-value: #f3f5f1; }
@property --ink { syntax: "<color>"; inherits: true; initial-value: #141a1c; }
@property --muted { syntax: "<color>"; inherits: true; initial-value: #4a5458; }
@property --pen { syntax: "<color>"; inherits: true; initial-value: #1f4fd8; }
@property --on-pen { syntax: "<color>"; inherits: true; initial-value: #ffffff; }
@property --hair { syntax: "<color>"; inherits: true; initial-value: rgba(20, 26, 28, 0.12); }
@property --hair-strong { syntax: "<color>"; inherits: true; initial-value: rgba(20, 26, 28, 0.32); }

:root {
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --display: "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;
  --body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --gutter: 20px;
}

/* The day. Static bands without JavaScript or with reduced motion; the whole page changes otherwise. */
html:not(.live) [data-day="morning"], html.live body[data-day="morning"], .p-morning {
  --surface: #e8ece6; --raised: #f3f5f1; --ink: #141a1c; --muted: #4a5458; --pen: #1f4fd8; --on-pen: #ffffff;
  --hair: rgba(20, 26, 28, 0.12); --hair-strong: rgba(20, 26, 28, 0.32);
}
html:not(.live) [data-day="afternoon"], html.live body[data-day="afternoon"], .p-afternoon {
  --surface: #dde7e1; --raised: #ecf2ee; --ink: #141a1c; --muted: #465350; --pen: #0a6e5c; --on-pen: #ffffff;
  --hair: rgba(20, 26, 28, 0.12); --hair-strong: rgba(20, 26, 28, 0.32);
}
html:not(.live) [data-day="dusk"], html.live body[data-day="dusk"], .p-dusk {
  --surface: #262b33; --raised: #313741; --ink: #eef0f3; --muted: #bcc2cc; --pen: #f0a24b; --on-pen: #141a1c;
  --hair: rgba(238, 240, 243, 0.12); --hair-strong: rgba(238, 240, 243, 0.32);
}
html:not(.live) [data-day="night"], html.live body[data-day="night"], .p-night {
  --surface: #0b0d14; --raised: #161924; --ink: #eef0f5; --muted: #a3a9b8; --pen: #a9b4ff; --on-pen: #0b0d14;
  --hair: rgba(238, 240, 245, 0.12); --hair-strong: rgba(238, 240, 245, 0.32);
}
html:not(.live) [data-day], .p-morning, .p-afternoon, .p-dusk, .p-night { background-color: var(--surface); color: var(--ink); }
html.live body {
  transition: --surface 450ms var(--ease), --raised 450ms var(--ease), --ink 450ms var(--ease), --muted 450ms var(--ease),
    --pen 450ms var(--ease), --on-pen 450ms var(--ease), --hair 450ms var(--ease), --hair-strong 450ms var(--ease);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; overflow-x: clip; background: #e8ece6; }
body {
  position: relative; margin: 0; overflow-x: clip;
  background-color: var(--surface); color: var(--ink);
  font: 400 17px/1.55 var(--body);
  -webkit-font-smoothing: antialiased;
}
@media (min-width: 768px) { body { font-size: 18px; } }
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }

h1, h2, h3 { margin: 0; font-family: var(--display); font-weight: 700; text-wrap: balance; }
h1 { font-size: clamp(38px, 1.6vw + 34px, 42px); line-height: 1.06; letter-spacing: -0.025em; }
h2 { font-size: 32px; line-height: 1.12; letter-spacing: -0.02em; }
h3 { font-size: 22px; line-height: 1.25; letter-spacing: -0.01em; }
@media (min-width: 768px) { h2 { font-size: 44px; } }
@media (min-width: 1024px) { h1 { font-size: 72px; line-height: 1.02; letter-spacing: -0.03em; } }
@media (min-width: 768px) and (max-width: 1023px) { h1 { font-size: 56px; letter-spacing: -0.03em; } }
h1 .line { display: block; }
p { margin: 0; }
ul, ol, dl, dd { margin: 0; padding: 0; list-style: none; }
a { color: inherit; text-underline-offset: 3px; text-decoration-thickness: 1px; transition: color 150ms var(--ease); }
svg { display: block; }
strong { font-weight: 600; }
.lead { max-width: 60ch; color: var(--ink); }
.meta { font-size: 14px; line-height: 1.5; color: var(--muted); }
.mono { font-family: var(--mono); font-variant-numeric: tabular-nums; }
.vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

:focus-visible { outline: 2px solid var(--pen); outline-offset: 2px; border-radius: 4px; }

.skip {
  position: absolute; left: 16px; top: -64px; z-index: 10;
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; border-radius: 10px;
  background: var(--ink); color: var(--surface); text-decoration: none;
}
.skip:focus { top: 12px; }

.wrap { position: relative; z-index: 1; width: 100%; max-width: calc(1120px + 2 * var(--gutter)); margin-inline: auto; padding-inline: var(--gutter); }
@media (min-width: 768px) { :root { --gutter: 48px; } }
@media (min-width: 1200px) { :root { --gutter: 64px; } }

.band { position: relative; padding-block: 80px; }
@media (min-width: 1024px) { .band { padding-block: 112px; } }
.band-head { display: grid; gap: 16px; margin-bottom: 40px; max-width: 760px; }
@media (min-width: 1024px) { .band-head { margin-bottom: 64px; } }

/* The pen trace. Drawn by site.js; the static rule below stands in without JavaScript. */
.trace { position: absolute; inset: 0; width: 100%; height: 100%; overflow: hidden; pointer-events: none; }
.trace path { fill: none; stroke: var(--pen); stroke-width: 1.75; stroke-linejoin: round; stroke-linecap: round; }
.pen-head { position: absolute; left: 0; top: 0; z-index: 2; width: 8px; height: 8px; margin: -4px 0 0 -4px; border-radius: 50%; background: var(--pen); pointer-events: none; }
.rule { position: absolute; left: 0; top: 0; width: 100%; height: 24px; }
.rule path { fill: none; stroke: var(--pen); stroke-width: 1.75; vector-effect: non-scaling-stroke; }
.js .rule { display: none; }

/* Controls */
.btn {
  display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 0 20px;
  border: 1px solid transparent; border-radius: 10px; background: none; color: inherit;
  font: 600 16px/1.2 var(--body); text-align: center; text-decoration: none; cursor: pointer;
  transition: background-color 150ms var(--ease), border-color 150ms var(--ease), transform 150ms var(--ease);
  touch-action: manipulation;
}
.btn:active { transform: scale(0.98); }
.btn-primary { background-color: var(--pen); color: var(--on-pen); }
.btn-ghost { border-color: var(--hair-strong); }
@media (hover: hover) {
  .btn-primary:hover { background-color: color-mix(in srgb, var(--pen) 86%, var(--ink)); }
  .btn-ghost:hover { background-color: var(--hair); }
  a:hover { color: var(--pen); }
  .btn-primary:hover { color: var(--on-pen); }
  .btn-ghost:hover { color: inherit; }
}
.actions { display: flex; flex-wrap: wrap; gap: 12px; }
.offer { font-size: 16px; font-weight: 600; }

/* Navigation */
.nav { position: relative; z-index: 3; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-block: 12px; }
.logo { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; font: 700 22px/1 var(--display); letter-spacing: -0.02em; text-decoration: none; }
.logo svg { width: 28px; height: 16px; }
.logo svg path { fill: none; stroke: var(--pen); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.nav-links { display: flex; align-items: center; gap: 4px; }
.nav-link { display: inline-flex; align-items: center; min-height: 44px; padding: 0 12px; font-size: 16px; text-decoration: none; border-radius: 8px; white-space: nowrap; }
.nav-wide { display: none; }
.nav .btn { min-height: 44px; padding: 0 16px; font-size: 15px; white-space: nowrap; }
@media (min-width: 640px) { .nav-wide { display: inline-flex; } }
@media (max-width: 359px) { .logo svg { display: none; } .nav .btn { padding: 0 12px; font-size: 14px; } .nav-link { padding: 0 8px; font-size: 15px; } }
[hidden] { display: none !important; }

/* Hero */
.hero { padding-block: 24px 80px; }
.hero-grid { display: grid; gap: 40px; align-items: center; }
.hero-copy { display: grid; gap: 24px; justify-items: start; }
.hero-sub { max-width: 34em; font-size: 18px; line-height: 1.5; }
@media (min-width: 768px) { .hero-sub { font-size: 20px; } }
@media (min-width: 1024px) {
  .hero { padding-block: 56px 112px; }
  .hero-grid { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 48px; }
}

/* Hero product preview: the plan screen in the app's own night colours */
.win { display: grid; gap: 16px; padding: 16px; border-radius: 20px; box-shadow: 0 24px 48px rgba(20, 26, 28, 0.2); min-width: 0; }
@media (min-width: 768px) { .win { padding: 24px; } }
.win-tabs { display: flex; justify-content: space-between; gap: 8px; font-size: 14px; color: var(--muted); }
.win-tabs span { padding-bottom: 4px; }
.win-tabs .on { color: var(--ink); font-weight: 600; box-shadow: 0 1px 0 var(--ink); }
.win-title { font: 700 24px/1.15 var(--display); letter-spacing: -0.01em; }
.win-trace { width: 100%; height: 56px; }
.win-trace path { fill: none; stroke: var(--ink); stroke-width: 1.5; stroke-linejoin: round; }
.win-pulse { display: grid; gap: 8px; }
.win-seg { display: grid; grid-template-columns: repeat(4, 1fr); padding: 4px; border-radius: 10px; background: var(--raised); font-size: 14px; text-align: center; }
.win-seg span { padding: 4px 0; border-radius: 6px; color: var(--muted); }
.win-seg .on { background: var(--ink); color: var(--surface); font-weight: 600; }
.win-row { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: var(--muted); }
.win-why { display: grid; gap: 12px; }
.win-why > li { display: grid; gap: 4px; padding-top: 12px; border-top: 1px solid var(--hair); font-size: 14px; line-height: 1.45; }
.win-why .row { display: flex; justify-content: space-between; gap: 12px; font-weight: 600; font-size: 15px; }
.win-why .why { color: var(--ink); }
.win-why .ev { color: var(--muted); font-family: var(--mono); font-size: 13px; line-height: 1.4; }
@media (max-width: 767px) { .win-why > li:nth-child(n + 3) { display: none; } }

/* Problem */
.ledger { display: grid; border-top: 1px solid var(--hair-strong); }
.ledger-head { display: none; }
.ledger-row { display: grid; gap: 8px; padding-block: 20px; border-bottom: 1px solid var(--hair); }
.ledger-row dt { color: var(--muted); }
.ledger-row dd { font-weight: 500; }
.ledger-caption { margin-bottom: 8px; }
@media (min-width: 768px) {
  .ledger-row, .ledger-head { display: grid; grid-template-columns: 1fr 1.25fr; gap: 32px; }
  .ledger-head { padding-block: 12px; border-bottom: 1px solid var(--hair); }
}

/* Live sample */
.sample { display: grid; gap: 32px; align-items: start; }
@media (min-width: 1024px) { .sample { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 64px; } }
.panel { display: grid; gap: 20px; padding: 20px; border: 1px solid var(--hair); border-radius: 20px; background-color: var(--raised); min-width: 0; }
@media (min-width: 768px) { .panel { padding: 32px; } }
.chips { display: flex; flex-wrap: wrap; gap: 8px; border: 0; margin: 0; padding: 0; min-width: 0; }
.chips legend { padding: 0; margin-bottom: 8px; font-weight: 600; font-size: 16px; }
.chip {
  min-height: 44px; padding: 0 16px; border: 1px solid var(--hair-strong); border-radius: 10px; background: none; color: inherit;
  font: 500 15px/1 var(--body); cursor: pointer; touch-action: manipulation;
  transition: background-color 150ms var(--ease), color 150ms var(--ease), transform 150ms var(--ease);
}
.chip:active { transform: scale(0.98); }
.chip[aria-pressed="true"] { background-color: var(--ink); border-color: var(--ink); color: var(--surface); }
.switch-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.switch {
  display: inline-flex; align-items: center; gap: 12px; min-height: 44px; padding: 0; border: 0; background: none; color: inherit;
  font: 600 16px/1 var(--body); cursor: pointer; touch-action: manipulation;
}
.switch .track { position: relative; width: 48px; height: 28px; border-radius: 14px; background-color: var(--hair-strong); transition: background-color 150ms var(--ease); }
.switch .track::after {
  content: ""; position: absolute; left: 4px; top: 4px; width: 20px; height: 20px; border-radius: 50%; background-color: var(--surface);
  transition: transform 150ms var(--ease);
}
.switch[aria-checked="true"] .track { background-color: var(--pen); }
.switch[aria-checked="true"] .track::after { transform: translateX(20px); }
.bar { height: 4px; border-radius: 2px; background-color: var(--hair); overflow: hidden; }
.bar i { display: block; height: 100%; background-color: var(--pen); transform: scaleX(0); transform-origin: left center; }
.bar.running i { transform: scaleX(1); transition: transform 30s linear; }
.wave-fig { display: grid; gap: 12px; margin: 0; }
.wave-box { position: relative; aspect-ratio: 5 / 2; }
.wave-box svg { position: absolute; inset: 0; width: 100%; height: 100%; transition: opacity 160ms var(--ease); }
.wave-box path { fill: none; stroke: var(--ink); stroke-width: 1.5; stroke-linejoin: round; }
.wave-box .env { stroke: var(--pen); stroke-width: 2; }
.wave-box .floor { stroke: var(--hair-strong); stroke-width: 1; }
.wave-off { opacity: 0; }
.pulse-off .wave-on { opacity: 0; }
.pulse-off .wave-off { opacity: 1; }
html:not(.js) .needs-js { display: none; }
.ended { display: grid; gap: 12px; justify-items: start; padding-top: 16px; border-top: 1px solid var(--hair); }

/* Offer stack */
.spec { display: grid; column-gap: 64px; }
@media (min-width: 1024px) { .spec { grid-template-columns: 1fr 1fr; } }
.spec li { display: grid; grid-template-columns: 88px 1fr; gap: 16px; padding-block: 20px; border-top: 1px solid var(--hair-strong); }
.spec .n { font: 700 36px/1 var(--display); letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
.spec .n small { display: block; margin-top: 4px; font: 400 14px/1.3 var(--mono); letter-spacing: 0; color: var(--muted); }
.spec h3 { font-size: 20px; margin-bottom: 4px; }
.spec p { font-size: 16px; line-height: 1.5; }
.stack-foot { display: grid; gap: 24px; justify-items: start; margin-top: 40px; }
.made { display: grid; gap: 24px; margin-top: 64px; padding-top: 32px; border-top: 1px solid var(--hair-strong); }
.made-list { display: grid; gap: 24px; }
.made-list li { display: grid; gap: 4px; align-content: start; }
.made-list .k { font-family: var(--mono); font-size: 14px; color: var(--muted); }
@media (min-width: 900px) { .made-list { grid-template-columns: repeat(3, 1fr); gap: 32px; } }

/* Steps and states */
.steps { display: grid; gap: 24px; counter-reset: step; margin-bottom: 64px; }
.steps li { display: grid; gap: 8px; align-content: start; }
.steps .num { font: 400 14px/1 var(--mono); color: var(--muted); }
@media (min-width: 900px) { .steps { grid-template-columns: repeat(3, 1fr); gap: 32px; } }
.states-title { margin-bottom: 24px; }
.states { display: grid; gap: 16px; }
@media (min-width: 768px) { .states { grid-template-columns: 1fr 1fr; } }
.state { display: grid; gap: 16px; align-content: start; padding: 20px; border: 1px solid var(--hair); border-radius: 16px; }
@media (min-width: 768px) { .state { padding: 24px; } }
.state p { font-size: 16px; line-height: 1.5; }
.state h3 { font-size: 24px; }
.ill { width: 100%; height: auto; aspect-ratio: 12 / 5; }
.ill .i { fill: none; stroke: var(--ink); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.ill .p { fill: none; stroke: var(--pen); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.ill .g { fill: none; stroke: var(--hair-strong); stroke-width: 1; }
.axis { display: flex; justify-content: space-between; margin-top: -8px; font: 400 13px/1.3 var(--mono); color: var(--muted); }
.axis-fade span:nth-child(4) { color: var(--ink); }

/* Forest plot */
.forest { width: 100%; border-collapse: collapse; }
.forest th, .forest td { padding: 12px 0; text-align: left; vertical-align: middle; font-weight: 400; }
.forest thead th { font-size: 14px; color: var(--muted); }
.forest tbody tr { border-top: 1px solid var(--hair); }
.forest .what { display: block; font-weight: 600; }
.forest .note { display: block; margin-top: 2px; font-size: 14px; line-height: 1.45; color: var(--muted); }
.forest .fig { font: 400 14px/1.45 var(--mono); font-variant-numeric: tabular-nums; }
.forest .count { display: block; color: var(--muted); }
.fp { display: block; width: 100%; height: 36px; overflow: visible; }
.fp .grid { stroke: var(--hair); stroke-width: 1; }
.fp .zero { stroke: var(--ink); stroke-width: 1; }
.fp .ci { stroke: var(--pen); stroke-width: 2; }
.fp .mark { fill: var(--pen); }
.fp-axis { height: 24px; }
.fp-axis text { fill: var(--muted); font: 400 13px var(--mono); }
.fp-ends { display: flex; justify-content: space-between; font-size: 13px; line-height: 1.3; color: var(--muted); }
.forest td.plot, .forest th.plot { padding-inline: 8px; }
.forest .noplot { font-size: 14px; color: var(--muted); }
@media (min-width: 860px) {
  .forest { table-layout: fixed; }
  .forest .c-what { width: 36%; }
  .forest .c-plot { width: 36%; }
  .forest .c-fig { width: 28%; }
  .forest td.plot, .forest th.plot { padding-inline: 16px; }
}
@media (max-width: 859px) {
  .forest, .forest tbody, .forest tr, .forest td, .forest th { display: block; }
  .forest thead tr { display: block; }
  .forest thead th:not(.plot) { display: none; }
  .forest th, .forest td { padding: 4px 0; }
  .forest td.plot, .forest th.plot { padding-inline: 0; }
  .forest tbody tr { padding-block: 12px; }
}
.plot-note { margin-top: 16px; }
.panel-plot { padding: 16px; }
@media (min-width: 768px) { .panel-plot { padding: 24px; } }

/* Evidence on the home page */
.evidence { display: grid; gap: 40px; }
.facts { display: grid; gap: 24px; }
@media (min-width: 768px) { .facts { grid-template-columns: 1fr 1fr; column-gap: 48px; } }
.facts li { display: grid; gap: 4px; align-content: start; justify-items: start; padding-top: 16px; border-top: 1px solid var(--hair-strong); }
.facts h3 { font-size: 20px; }
.facts p { font-size: 16px; line-height: 1.5; }
.text-link { font-weight: 600; display: inline-flex; align-items: center; min-height: 44px; }

/* Comparison */
.compare { width: 100%; border-collapse: collapse; font-size: 16px; line-height: 1.45; }
.compare th, .compare td { padding: 16px 16px 16px 0; text-align: left; vertical-align: top; font-weight: 400; }
.compare thead th { font-weight: 600; border-bottom: 1px solid var(--hair-strong); }
.compare tbody tr { border-bottom: 1px solid var(--hair); }
.compare tbody th { font-weight: 600; }
.compare .us { font-weight: 500; }
.compare .win-mark { color: var(--pen); font-weight: 600; }
@media (min-width: 900px) { .compare .c1 { width: 22%; } }
@media (max-width: 899px) {
  .compare, .compare tbody, .compare tr, .compare td, .compare th { display: block; }
  .compare thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .compare tbody tr { padding-block: 16px; }
  .compare tbody th { padding: 0 0 8px; }
  .compare td { display: grid; grid-template-columns: 88px 1fr; gap: 12px; padding: 4px 0; }
  .compare td::before { content: attr(data-label); color: var(--muted); font-size: 14px; line-height: 1.6; }
}

/* Risk reversal, FAQ, close */
.reversal { display: grid; gap: 32px; }
.reversal-list { display: grid; gap: 20px; max-width: 60ch; }
.reversal-list li { padding-top: 16px; border-top: 1px solid var(--hair-strong); }
.faq { display: grid; border-top: 1px solid var(--hair-strong); }
.faq details { border-bottom: 1px solid var(--hair); }
.faq summary {
  display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 56px; padding-block: 12px;
  font-weight: 600; cursor: pointer; list-style: none; touch-action: manipulation;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary svg { flex: none; width: 16px; height: 16px; stroke: var(--muted); fill: none; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; transition: transform 160ms var(--ease); }
.faq details[open] summary svg { transform: rotate(180deg); }
.faq .a { display: grid; gap: 12px; max-width: 64ch; padding-bottom: 20px; }
.close { padding-block: 96px 128px; }
.close-inner { display: grid; gap: 24px; justify-items: start; }
.close-inner h2 { max-width: 760px; }
.foot { position: relative; padding-block: 40px 48px; border-top: 1px solid var(--hair); }
.foot[data-band] { padding-top: 80px; border-top: 0; }
.foot-grid { display: grid; gap: 24px; }
.foot-links { display: flex; flex-wrap: wrap; gap: 0 20px; }
.foot-links a { display: inline-flex; align-items: center; min-height: 44px; font-size: 16px; }
@media (min-width: 768px) { .foot-grid { grid-template-columns: 1fr auto; align-items: start; } }

/* Long pages: science, privacy, terms */
.page { padding-block: 32px 96px; }
.page-head { display: grid; gap: 16px; max-width: 760px; margin-bottom: 48px; }
.page-head h1 { font-size: clamp(38px, 2.6vw + 30px, 56px); line-height: 1.06; letter-spacing: -0.025em; }
.prose { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; max-width: 68ch; }
.sect { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; margin-top: 64px; }
.sect h2 { font-size: 32px; }
.sect h3 { margin-top: 8px; }
.prose ul, .dash { display: grid; gap: 8px; padding-left: 20px; list-style: disc; }
.prose ul li::marker, .dash li::marker { color: var(--muted); }
.never { display: grid; gap: 0; max-width: 72ch; border-top: 1px solid var(--hair-strong); }
.never li { display: grid; gap: 4px; padding-block: 16px; border-bottom: 1px solid var(--hair); }
.never strong { font-weight: 600; }
.never p { font-size: 16px; line-height: 1.5; color: var(--muted); }
.grades { width: 100%; max-width: 860px; border-collapse: collapse; font-size: 16px; line-height: 1.45; }
.grades th, .grades td { padding: 12px 16px 12px 0; text-align: left; vertical-align: top; font-weight: 400; }
.grades thead th { font-weight: 600; border-bottom: 1px solid var(--hair-strong); }
.grades tbody tr { border-bottom: 1px solid var(--hair); }
.grades .grade { font-family: var(--mono); font-size: 14px; }
@media (max-width: 639px) {
  .grades, .grades tbody, .grades tr, .grades td, .grades th { display: block; }
  .grades thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .grades tbody tr { padding-block: 12px; }
  .grades td, .grades th { padding: 2px 0; }
}
.refs { display: grid; gap: 12px; max-width: 76ch; font-size: 15px; line-height: 1.5; counter-reset: ref; }
.refs a { overflow-wrap: anywhere; }
.refs .read { color: var(--muted); font-family: var(--mono); font-size: 13px; }
.ph { padding: 0 4px; border: 1px dashed var(--pen); border-radius: 4px; background-color: var(--raised); color: var(--ink); font-weight: 600; }
.notice { max-width: 68ch; padding: 16px; border: 1px solid var(--hair-strong); border-radius: 10px; font-size: 16px; }
.store { display: grid; gap: 0; max-width: 860px; border-top: 1px solid var(--hair-strong); }
.store > div { display: grid; gap: 4px; padding-block: 16px; border-bottom: 1px solid var(--hair); }
.store dt { font-weight: 600; }
.store dd { font-size: 16px; line-height: 1.5; }
.store .keep { display: block; margin-top: 4px; color: var(--muted); font-size: 14px; }
@media (min-width: 768px) { .store > div { grid-template-columns: 200px 1fr; gap: 24px; } }

/* 404 */
.lost { display: grid; min-height: 100dvh; grid-template-rows: auto 1fr auto; }
.lost-body { display: grid; gap: 24px; align-content: center; justify-items: start; padding-block: 48px; }
.lost-trace { width: 100%; height: 72px; }
.lost-trace path { fill: none; stroke: var(--pen); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; vector-effect: non-scaling-stroke; }

/* Entrances: once, only with JavaScript and motion allowed */
.live .reveal { opacity: 0; transform: translateY(12px); transition: opacity 400ms var(--ease), transform 400ms var(--ease); }
.live .reveal.in { opacity: 1; transform: none; }
.live .draw .i, .live .draw .p, .live .draw .env { stroke-dasharray: 1; stroke-dashoffset: 1; transition: stroke-dashoffset 500ms var(--ease); }
.live .draw.in .i, .live .draw.in .p, .live .draw.in .env { stroke-dashoffset: 0; }
.live .plot-rows .ci { transform-box: fill-box; transform-origin: center; transform: scaleX(0); transition: transform 500ms var(--ease); }
.live .plot-rows .mark { opacity: 0; transition: opacity 300ms var(--ease) 200ms; }
.live .plot-rows.in .ci { transform: none; }
.live .plot-rows.in .mark { opacity: 1; }
.live .hero-copy > *, .live .win { animation: rise 500ms var(--ease) both; }
.live .hero-copy > :nth-child(2) { animation-delay: 50ms; }
.live .hero-copy > :nth-child(3) { animation-delay: 100ms; }
.live .hero-copy > :nth-child(4) { animation-delay: 150ms; }
.live .win { animation-delay: 200ms; }
@keyframes rise { from { opacity: 0; transform: translateY(12px); } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: 0ms !important; animation: none !important; }
  .bar { display: none; }
}
@media print {
  .trace, .pen-head, .rule, .nav .btn, .actions { display: none !important; }
}
