/* Safata — one stylesheet for every page. Same origin, no build, no JS.

   2026-08-15 redesign: the product is the imagery. A light typeset page
   whose only pictures are the app's own windows, in the app's own
   DEFAULT theme — Cobalt (rec 200; packages/desktop/src/themes.ts): white
   content under an indigo chrome rail, cobalt accent. The page wears the
   same palette, so site and product are one object. Since rec 505
   (2026-09-19) the windows are screencaptures of recorded runs
   (site/cases/), not drawings: the stylesheet frames them and sets the
   receipt under them, and draws no window of its own.

   Type constitution: serif claims (Newsreader), sans explains (the
   platform's own UI face — a native app's site set in the native face),
   mono proves (machine truth only). */

:root{
  /* the app's Cobalt theme, verbatim (themes.ts) */
  --bg:#ffffff;
  --panel:#f5f8fd;
  --panel-2:#e9f0fa;
  --ink:#1b2333;
  --muted:#586377;
  --faint:#687791;
  /* --faint on the two tinted panels measures 4.26:1 and 3.95:1 — under
     AA's 4.5 at the 10.5–11.5px the drawn windows set their footers and
     titles in. One shade darker for those contexts (4.76:1 on --panel-2,
     5.13:1 on --panel), no visible change in register. The app's own
     token stays --faint everywhere it sits on white. */
  --faint-panel:#5c6a83;
  --rule:#e1e8f1;
  --rule-strong:#cfdae8;
  --accent:#1d63eb;
  --accent-ink:#ffffff;
  --ok:#237650;
  --err:#c43b2f;
  --warn:#956216;
  --chrome-bg:#363c60;
  --chrome-ink:#e9ecf7;
  --chrome-muted:#b0b7d3;
  --chrome-faint:#a3a8c1;
  --chrome-rule:rgba(255,255,255,0.09);
  --chrome-hover:#434a72;
  /* faces */
  --serif:'Newsreader',Georgia,serif;
  --sans:system-ui,-apple-system,'Segoe UI',sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
  --app-mono:ui-monospace,'SF Mono',Menlo,Consolas,'IBM Plex Mono',monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg);
  color:var(--ink);
  font-family:var(--sans);
  font-size:1.0625rem;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
.mono{font-family:var(--mono)}
a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--rule-strong)}
a:hover{text-decoration-color:var(--ink)}
a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
img{max-width:100%;height:auto;display:block}

/* One shell, five pages: a wide page with a reading measure inside it.
   Prose never exceeds the measure; only windows use the full width. */
.page{max-width:72rem;margin:0 auto;padding:0 1.5rem}
/* Inner pages are reading matter: the READING COLUMN narrows to the
   measure and centres, the way a typeset page should — but the shell
   (header, footer) keeps the wide measure on every page, so the wordmark
   and the nav do not move when a visitor clicks Product → Questions.
   It used to be `.page.narrow` on the whole page, which was two shells
   on glass: the wordmark sat at x=168 on the homepage and x=376 on the
   FAQ at 1440. Only the pages with frames on them run their content
   wide — the case files and the product page. */
.reading{max-width:46rem;margin:0 auto}

/* Header ------------------------------------------------------------- */
header{
  display:flex;justify-content:space-between;align-items:center;
  gap:.75rem 1.5rem;flex-wrap:wrap;
  padding:1.125rem 0;
}
.wordmark{font-family:var(--mono);font-size:.8125rem;font-weight:500;letter-spacing:.12em;text-transform:lowercase;text-decoration:none}
header nav{display:flex;gap:1.25rem;flex-wrap:wrap;align-items:center}
/* `.35rem 0` of padding lifts an 18px link to the 24px WCAG 2.2 target
   minimum without moving the row — on a phone these are the only nav. */
header nav a{font-family:var(--mono);font-size:.71875rem;color:var(--faint);text-decoration:none;white-space:nowrap;padding:.35rem 0}
header nav a:hover{color:var(--ink)}
header nav a[aria-current="page"]{color:var(--ink)}
/* The one persistent call to action — outside the <nav>, which maps the
   page set and nothing else. */
.navcta{font-family:var(--mono);font-size:.71875rem;text-decoration:none;white-space:nowrap;
  border:1px solid var(--accent);color:var(--accent);padding:.42rem .85rem;border-radius:6px}
.navcta:hover{background:var(--accent);color:var(--accent-ink);text-decoration:none}

/* Page opening ------------------------------------------------------- */
/* Trimmed again on 2026-09-09: at 1280×800 the window's top edge landed
   at 615px, so the first screen held its title bar and nothing of the
   chart or the file. Header, opening, eyebrow, CTA row and window margin
   each give a little (−49px together); the type sizes are untouched. */
.intro{padding:2.5rem 0 0}
.eyebrow{font-family:var(--mono);font-size:.6875rem;letter-spacing:.15em;text-transform:uppercase;color:var(--faint);display:block;margin-bottom:1.1rem}
h1{
  font-family:var(--serif);
  font-size:clamp(2.05rem,5.4vw,3.5rem);
  font-weight:500;line-height:1.08;letter-spacing:-.015em;max-width:46rem;
}
h1 em{font-style:italic}
/* The sub is the gloss and the kicker is the claim, and the sizes say
   so: the kicker — the one sentence no competitor can print — sits a
   step above the sub, not below it. Both, with the intro's padding and
   the window's top margin, were trimmed on 2026-09-03 so that the hero
   window's top edge lands inside a laptop's first screen. */
.intro .sub{margin-top:1.1rem;font-size:1.125rem;color:var(--muted);max-width:36rem}
.intro .kicker{max-width:38rem;margin:.95rem 0 0}
/* Inner pages open smaller than the homepage — the front door gets the
   full hero, the rest get a heading and a lede. */
.intro.inner{padding:2.75rem 0 .5rem}
.intro.inner h1{font-size:clamp(1.65rem,3.8vw,2.25rem);line-height:1.15}
.intro.inner .sub{margin-top:1.125rem}

/* CTAs and the fact strip -------------------------------------------- */
.dl{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1rem;margin:1.35rem 0 .85rem}
.dl > a{
  font-family:var(--mono);font-size:.78125rem;text-decoration:none;
  border:1px solid var(--ink);color:var(--ink);padding:.7rem 1.15rem;border-radius:6px;
}
.dl > a.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.dl > a.primary:hover{background:#1554c9;border-color:#1554c9}
.dl > a:not(.primary):hover{background:var(--ink);color:var(--bg)}
/* The address beside the mailto button. A bare `mailto:` does nothing
   visible on a machine with no mail client — most Windows desktops,
   every locked-down corporate laptop — and the button never printed
   where it was going. Printed, selectable, and still no form. */
.dl .alt{font-family:var(--mono);font-size:.71875rem;color:var(--faint)}
.dl .alt a{color:var(--ink)}
.facts{font-family:var(--mono);font-size:.71875rem;color:var(--faint);letter-spacing:.02em}

/* Sections ------------------------------------------------------------ */
section{padding:3.5rem 0 0;border-top:1px solid var(--rule);margin-top:3.75rem}
section:first-of-type{border-top:none;margin-top:0}
.label{
  font-family:var(--mono);font-size:.6875rem;letter-spacing:.15em;
  text-transform:uppercase;color:var(--faint);
  display:block;margin-bottom:1.1rem;
  /* On the inner pages the label IS the section heading (`<h2
     class="label">`), so the outline a crawler or a screen reader walks
     is H1 → H2 → H3 and not H1 → twenty-six H3s. Weight and leading are
     stated so an h2 wearing the class paints exactly as the span did. */
  font-weight:400;line-height:1.6;
}
h2{font-family:var(--serif);font-weight:500;font-size:clamp(1.55rem,2.6vw,2.05rem);line-height:1.16;letter-spacing:-.01em;margin-bottom:1.05rem;max-width:38rem}
section p{margin-bottom:1rem;max-width:38rem;color:var(--muted)}
section p:last-child{margin-bottom:0}
section p b{color:var(--ink);font-weight:600}

.kicker{font-family:var(--serif);font-style:italic;font-size:1.375rem;line-height:1.4;color:var(--ink);margin:1.2rem 0 .95rem}

/* Rows — the product list, and the same primitive on the inner pages -- */
.rows{margin-top:.25rem}
.row{padding:1.5rem 0;border-top:1px solid var(--rule)}
.row:first-child{border-top:none;padding-top:0}
.row h3{font-family:var(--sans);font-size:1.125rem;font-weight:600;margin-bottom:.45rem;max-width:38rem}
.row p{font-size:1rem;color:var(--muted);max-width:38rem;margin-bottom:0}
.row p+p{margin-top:.7rem}
/* The roster is the whole of "model choice" rendered as a list, so it
   reads at the weight of a claim rather than a footnote. */
.models{margin-top:.8rem;font-family:var(--mono);font-size:.8125rem;color:var(--muted);line-height:2}
.models b{font-weight:500;color:var(--ink)}
/* Four groups on one line: wrap BETWEEN regions, never inside one. */
.models span{white-space:nowrap;margin-right:1.5rem}

/* ==================================================================== */
/* Case files — rec 505: the site speaks in recorded runs               */
/* ==================================================================== */
/* A frame on the site is a screencapture of the shipped app doing a real
   job — `site/cases/`, byte-identical to the run record's crops under
   `evals/7-real-world-build/runs/` (site-lockstep.test.ts pins the
   bytes). Nothing here draws the app any more: the stylesheet frames a
   photograph and sets the receipt under it. The drawn window of recs
   431/433 and the schematic mini-windows retired with rec 505. */
.case .case-head{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:2.5rem;align-items:start}
.case h2{max-width:none;font-size:clamp(1.7rem,3vw,2.35rem)}
.who{font-size:1.0625rem;color:var(--muted);max-width:34rem}
.ask{border-left:2px solid var(--accent);padding:.15rem 0 .15rem 1.1rem;margin:.35rem 0 0}
.ask p{font-size:1rem;color:var(--ink);max-width:none;margin-bottom:0}
.ask small{display:block;font-family:var(--mono);font-size:.6875rem;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:.6rem}
.beat{margin-top:2.4rem}
.beat-label{font-family:var(--mono);font-size:.71875rem;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);margin-bottom:.8rem;max-width:none}
.beat-label b{color:var(--ink);font-weight:500}
/* minmax(0,…), never a bare 1fr — B-807's class: a bare track takes its
   minimum from the item's min-content and pushes the page past the
   viewport. Pinned in site-lockstep.test.ts, on the wide rule and on the
   narrow one. */
.strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.1rem;margin-top:2rem}
.strip.two{grid-template-columns:repeat(2,minmax(0,1fr))}
/* rec 515 — the switch beat: a settings sheet beside a chip picker. The
   sheet is the wider crop and is shown whole (no bounded height: it is
   not a tall transcript, it is a table the reader reads to the last row). */
.strip.two.uneven{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)}
.frame.sheet .pic{max-height:none}
/* The honest-edges line under a receipt, full measure like the receipt. */
.receipt+.fineprint{margin-top:.9rem;max-width:none}
.strip.one{grid-template-columns:minmax(0,1fr)}
.beat .strip{margin-top:0}
.frame{margin:0;min-width:0}
.frame .pic{border:1px solid var(--rule-strong);border-radius:8px;overflow:hidden;background:var(--bg);
  box-shadow:0 1px 2px rgba(27,35,51,.06),0 14px 36px -22px rgba(27,35,51,.3)}
.frame img{width:100%;height:auto}
/* A tall crop is shown from its top edge at a bounded height, so three
   frames in a strip read as one row; the whole crop is in the record. */
.frame.tall .pic{max-height:520px}
.frame figcaption{font-size:.9375rem;color:var(--muted);margin-top:.6rem;line-height:1.5}
.frame figcaption b{color:var(--ink);font-weight:600}
/* The receipt: model, clock, cost, what it said, and the judge's line —
   the miss in red, because a record that only records wins is an ad.
   A table wider than a phone scrolls inside its own box; the page never
   scrolls sideways. */
.receipt{margin-top:2.2rem;border:1px solid var(--rule);border-radius:8px;overflow-x:auto}
.receipt table{width:100%;min-width:44rem;border-collapse:collapse;font-size:.9375rem}
.receipt th,.receipt td{text-align:left;padding:.7rem .9rem;border-top:1px solid var(--rule);vertical-align:top;color:var(--muted)}
.receipt td b{color:var(--ink);font-weight:600}
.receipt thead th{border-top:0;background:var(--panel);font-family:var(--mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--faint-panel);font-weight:500}
.receipt td.num{font-family:var(--mono);font-size:.8125rem;white-space:nowrap;color:var(--ink)}
.receipt .miss{color:var(--err)}
.receipt .hit{color:var(--ok)}
.egress{font-family:var(--mono);font-size:.75rem;color:var(--faint-panel);padding:.7rem .9rem;background:var(--panel);
  border-top:1px solid var(--rule);margin:0;max-width:none;line-height:1.6;min-width:44rem}
.dateline{font-family:var(--mono);font-size:.6875rem;color:var(--faint);margin-top:.8rem;max-width:none;line-height:1.6}

/* What you just saw — four facts, each keyed back to a frame and forward
   to the product page's section. */
.saw ol{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.5rem;padding:0;margin:.5rem 0 0;list-style:none;counter-reset:saw}
.saw li{counter-increment:saw;font-size:.9375rem;color:var(--muted);line-height:1.55}
.saw li::before{content:counter(saw);display:block;font-family:var(--serif);font-size:1.8rem;color:var(--ink);line-height:1;margin-bottom:.5rem}
.saw li b{color:var(--ink);font-weight:600}
.saw .also{margin-top:2rem;font-size:.9375rem;color:var(--faint);max-width:none}

/* The product page — a belief beside its explanation, the frames under. */
.belief-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:2.5rem;align-items:start}
.belief h2{max-width:none}
.belief-head .four{margin-top:1rem}
.seen{font-family:var(--mono);font-size:.71875rem;color:var(--faint);margin-top:.4rem;max-width:none}
.seen a{color:var(--muted)}
.ledger{margin-top:1.2rem;border:1px solid var(--rule);border-radius:8px;overflow-x:auto;font-family:var(--mono);font-size:.75rem}
.ledger table{width:100%;min-width:36rem;border-collapse:collapse}
.ledger th,.ledger td{text-align:left;padding:.55rem .9rem;border-top:1px solid var(--rule);color:var(--muted)}
.ledger thead th{border-top:0;background:var(--panel);text-transform:uppercase;letter-spacing:.06em;color:var(--faint-panel);font-weight:500;font-size:.6875rem}
.ledger td.num,.ledger th.num{text-align:right;font-variant-numeric:tabular-nums}
.ledger td.no{color:var(--faint)}

/* the four permission sentences — set as a text object; a list in the
   markup (four items, one rule), because an aria-label on a bare div is
   a label with nothing to attach to. */
.four{margin-top:1.35rem;border-top:1px solid var(--ink);max-width:30rem;list-style:none;padding:0}
.four li{display:flex;gap:1.1rem;align-items:baseline;padding:.8rem .1rem;border-bottom:1px solid var(--rule);font-family:var(--serif);font-size:1.21875rem;line-height:1.3;color:var(--ink)}
.four .n{font-family:var(--mono);font-size:.6875rem;color:var(--faint)}
.four em{font-style:italic}

/* ==================================================================== */
/* Inner-page surface (use cases, questions, organizations, about)      */
/* ==================================================================== */

/* A status tag. Used only where the honest answer is "not yet". */
.tag{
  display:inline-block;font-family:var(--mono);
  font-size:.625rem;letter-spacing:.11em;text-transform:uppercase;
  border:1px solid var(--faint);color:var(--faint);
  padding:.13rem .42rem;border-radius:4px;margin-right:.5rem;
  vertical-align:.09em;white-space:nowrap;
}

/* The FAQ's local navigation. */
.toc{margin:1.75rem 0 .5rem}
.toc ol{list-style:none;margin:.35rem 0 0;padding:0;
  display:flex;flex-wrap:wrap;gap:.35rem 1.25rem}
.toc a{font-size:.9375rem;color:var(--muted);text-decoration:none;
  border-bottom:1px solid var(--rule);padding-bottom:.08rem}
.toc a:hover{color:var(--ink);border-bottom-color:var(--ink)}

/* A filename or a command, inline in prose. */
.term{font-family:var(--mono);font-size:.875em}

/* Questions. Same rule rhythm as .row, tighter. */
.qa{padding:1.35rem 0;border-top:1px solid var(--rule)}
.qa:first-of-type{border-top:none;padding-top:.15rem}
.qa h3{font-family:var(--sans);font-size:1.0625rem;font-weight:600;margin-bottom:.4rem;max-width:38rem}
.qa p{font-size:1rem;color:var(--muted);max-width:38rem;margin-bottom:0}
.qa p+p{margin-top:.65rem}

/* Vendor consoles. Wraps rather than overflows; the domain may break. */
.vendors{list-style:none;margin:1.1rem 0 .35rem;font-family:var(--mono);font-size:.75rem}
.vendors li{display:flex;flex-wrap:wrap;gap:.15rem .9rem;padding:.32rem 0;border-top:1px solid var(--rule)}
.vendors li:first-child{border-top:none}
.vendors .v{min-width:6.5rem;font-weight:500;color:var(--ink)}
.vendors a{color:var(--muted);text-decoration-color:var(--rule);overflow-wrap:anywhere}
.vendors a:hover{color:var(--ink)}

/* A boxed aside for the one paragraph on a page that must not be
   skimmed past — used once per page at most. */
.callout{
  border:1px solid var(--rule-strong);border-left:2px solid var(--accent);
  border-radius:6px;background:var(--panel);
  padding:1.15rem 1.25rem;margin:1.6rem 0 0;max-width:38rem;
}
.callout p{font-size:1rem;margin-bottom:0}
.callout p+p{margin-top:.65rem}
.callout .label{margin-bottom:.6rem}

/* Emphases on the front page ----------------------------------------- */
.ratchet{font-family:var(--serif);font-style:italic;font-size:1.28125rem;color:var(--ink);line-height:1.45}
.fineprint{font-size:.9375rem;color:var(--faint)}
/* The paragraph after a `.rows` list on the organizations page. */
.coda{margin-top:1.6rem}

/* Builder signature --------------------------------------------------- */
.sig{margin-top:1.5rem;font-family:var(--mono);font-size:.75rem;color:var(--faint);line-height:2}

/* The link at the foot of a page that carries the reader onward. */
.more{
  margin-top:1.75rem;font-family:var(--mono);font-size:.75rem;
  display:flex;flex-wrap:wrap;gap:.5rem 1.75rem;
}
.more a{color:var(--faint);text-decoration:none;display:inline-block;padding:.25rem 0}
.more a:hover{color:var(--ink)}

/* Footer -------------------------------------------------------------- */
footer{
  margin-top:5rem;padding:1.4rem 0 2.75rem;border-top:1px solid var(--rule);
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:.6rem 1.5rem;
  font-family:var(--mono);font-size:.6875rem;color:var(--faint);
}
footer nav{display:flex;gap:1.25rem;flex-wrap:wrap}
footer a{text-decoration:none;white-space:nowrap;display:inline-block;padding:.35rem 0}
footer a:hover{color:var(--ink)}
.honest{flex-basis:100%;margin-top:.35rem}

/* Responsive ---------------------------------------------------------- */
@media (max-width:980px){
  /* Two columns become one: the person above the ask, the belief above
     its explanation, and a strip of three frames becomes a column of
     three — minmax(0,…), not 1fr, for B-807's reason. */
  .case .case-head,.belief-head{grid-template-columns:minmax(0,1fr);gap:1.5rem}
  .strip,.strip.two{grid-template-columns:minmax(0,1fr)}
  .strip.two.uneven{grid-template-columns:minmax(0,1fr)}
  .frame.tall .pic{max-height:none}
  .saw ol{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  body{font-size:1.03125rem}
  .intro{padding-top:2.25rem}
  .intro.inner{padding-top:2rem}
  .models span{display:block;margin-right:0;white-space:normal}
  .saw ol{grid-template-columns:minmax(0,1fr)}
  /* The wordmark and the CTA share row one; the five links take a row
     of their own. Wrapping freely they broke after "Organizations",
     left "About" alone on a line and pushed the button to a third —
     150px of header before the eyebrow. */
  header{gap:.5rem 1rem}
  header nav{flex-basis:100%;order:2;gap:.25rem .6rem}
  .navcta{order:1}
  .vendors .v{min-width:0;flex-basis:100%}
  .callout{padding:1rem 1.05rem}
}
@media (max-width:384px){
  /* The row above holds five links down to 390 (335px of mono in 342).
     At 375 it is 8px short, and a flex row wraps greedily: four links on
     the first line and "About" alone on the second — the orphan the
     comment above says it fixed, back at the width of every small
     iPhone (B-880). Widening the third link past what the fourth can fit
     beside makes the break fall after "Questions" instead, so the nav
     wraps 3 + 2 at 384 and still at 320. All five links stay: the nav is
     still how a reader discovers the page set, and the test that says
     so still reads it. */
  header nav a:nth-child(3){flex:0 0 42%}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
}
