*,*::before,*::after{box-sizing:border-box}
body{margin:0}
/* Reading pages: light paper (long text reads better dark-on-light), Valley Speak type and stickers, pastel figure panels. */
:root{
  --bg:#fbf8f1; --card:#fffdf8; --ink:#17142b; --text:#26223b; --muted:#5d5873; --line:#e4ddcf; --code:#f2ede2;
  --accent:#ff8a3d; --link:#b0470a; --gold:#ffd84d;
  --paper:#fffaf0; --ink-mut:#5d5873;
  --req:#3ab0f5; --req-d:#1c7fc0; --req-t:#cdeeff;
  --okc:#5fe0a8; --okc-d:#14905c; --okc-t:#c8f3df;
  --wait:#ffb547; --wait-d:#c47410; --wait-t:#ffe6bf;
  --fail:#ff6f91; --fail-d:#d6325e; --fail-t:#ffd2dd;
  --ctl:#b9a4ff; --ctl-d:#6a47d6; --ctl-t:#e4dbff;
  --hl:#ffd84d; --hl-t:#fff2a8;
  --st1:#bfe6ff; --st2:#ffeb99; --st3:#bdf3d9; --st4:#dcd2ff; --st5:#ffc8d6; --st6:#ffd2b0;
  --display:"Bricolage Grotesque","Arial Narrow",system-ui,sans-serif;
  --body:"Atkinson Hyperlegible",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
  --hand:"Caveat","Bradley Hand","Segoe Print",cursive;
}
html,body{background:var(--bg);color:var(--text)}
body{font-family:var(--body);font-size:18px;line-height:1.65}
a{color:var(--link)}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.site{display:flex;justify-content:space-between;align-items:center;gap:10px 16px;flex-wrap:wrap;max-width:1080px;margin:0 auto;padding:18px 24px}
.brand{font-family:var(--display);font-weight:800;font-size:24px;letter-spacing:-.02em;color:var(--ink);text-decoration:none}
.brand span{color:var(--accent)}
.site nav{display:flex;gap:8px;flex-wrap:wrap}
.site nav a{font-size:15px;text-decoration:none;color:var(--ink);padding:6px 14px;border-radius:999px;border:1.5px solid var(--ink)}
.site nav a.app{background:var(--ink);color:var(--gold)}
main{max-width:720px;margin:0 auto;padding:8px 24px 72px}
.kicker{font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:16px 0 8px}
h1{font-family:var(--display);font-weight:800;font-size:clamp(38px,6.4vw,54px);line-height:1.02;letter-spacing:-.03em;margin:0 0 14px;color:var(--ink);text-wrap:balance}
.dek{font-size:21px;line-height:1.5;color:var(--muted);margin:0 0 14px}
.byline{font-family:var(--mono);font-size:12.5px;color:var(--muted);margin:0 0 28px}
h2{font-family:var(--display);font-weight:800;font-size:29px;line-height:1.15;letter-spacing:-.02em;color:var(--ink);margin:48px 0 12px;text-wrap:balance}
h3{font-family:var(--display);font-weight:600;font-size:21px;color:var(--ink);margin:28px 0 8px}
p{margin:0 0 16px}
ul,ol{margin:0 0 16px}
pre{background:var(--code);border:1px solid var(--line);border-radius:12px;padding:14px 16px;font:500 14px/1.6 var(--mono);color:var(--ink);overflow-x:auto;margin:0 0 18px}
code{font-family:var(--mono);font-size:.88em;background:var(--code);padding:1px 6px;border-radius:5px}
blockquote{margin:22px 0;padding:16px 20px;background:var(--card);border:2px solid var(--ink);border-radius:18px 18px 18px 4px;font-size:19px;line-height:1.55;color:var(--ink)}
blockquote cite{display:block;margin-top:8px;font-style:normal;font-family:var(--mono);font-size:12.5px;color:var(--muted)}
.label{display:block;font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink);opacity:.75;margin-bottom:6px}
.oneline,.incident{border:2px solid var(--ink);border-radius:18px;padding:16px 20px;margin:24px 0;color:var(--ink)}
.oneline{background:var(--st2)} .oneline p{font-size:20px;font-weight:700;line-height:1.45;margin:0}
.incident{background:var(--st5)} .incident p{margin:0 0 10px} .incident blockquote{margin:10px 0 0;background:var(--paper)}
figure.fig{margin:26px 0;background:var(--stage,var(--st1));border-radius:20px;padding:18px 18px 12px}
figure.fig svg{display:block;width:100%;height:auto;max-height:440px}
figure.fig figcaption{font-size:14.5px;line-height:1.5;color:var(--ink-mut);margin-top:8px}
figure.fig .sig{display:block;font-family:var(--hand);font-weight:600;font-size:15px;color:var(--ink-mut);text-align:right}
table{width:100%;border-collapse:collapse;margin:0 0 18px;font-size:16px;font-variant-numeric:tabular-nums}
.tablewrap{overflow-x:auto}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}
th{font-family:var(--mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
ol.principles{padding-left:24px} ol.principles li{margin-bottom:10px}
.two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:26px 0}
.two > div{background:var(--card);border:2px solid var(--ink);border-radius:18px;padding:14px 18px;min-width:0}
.two h3{margin:0 0 8px} .do h3{color:var(--okc-d)} .dont h3{color:var(--fail-d)}
.two ul{padding-left:20px;margin:0} .two li{margin-bottom:6px;font-size:16.5px}
.two em{font-style:normal;font-size:14px;color:var(--muted)}
.note{font-size:15px;color:var(--muted);font-style:italic}
.cta{background:var(--st3);border:2px solid var(--ink);border-radius:20px;padding:20px 22px;margin:48px 0 28px;color:var(--ink)}
.cta h2{margin:0 0 6px;font-size:26px}
.cta p{margin:0 0 14px}
.btn{display:inline-flex;align-items:center;gap:6px;padding:11px 18px;border-radius:999px;background:var(--ink);color:var(--gold);font-weight:700;text-decoration:none}
.related{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 20px}
.related a{font-size:15px;padding:4px 12px;border-radius:999px;border:1.5px solid var(--ink);color:var(--ink);text-decoration:none;background:var(--card)}
.sources{font-size:15px;color:var(--muted);padding-left:22px}
.sources li{margin-bottom:6px}
footer{max-width:720px;margin:0 auto;padding:0 24px 48px;font-size:14px;color:var(--muted)}
.lib{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:24px 0}
.lib a{display:flex;flex-direction:column;gap:6px;background:var(--card);border:2px solid var(--ink);border-radius:20px;padding:12px;color:var(--ink);text-decoration:none;min-width:0}
.lib .thumb{background:var(--stage);border-radius:14px;padding:8px}
.lib .thumb svg{display:block;width:100%;height:auto}
.lib b{font-family:var(--display);font-size:22px;font-weight:800;letter-spacing:-.02em}
.lib span{font-size:15px;color:var(--muted);line-height:1.45}
.lib small{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
@media (max-width:640px){ body{font-size:17px} .two,.lib{grid-template-columns:minmax(0,1fr)} main,.site,footer{padding-left:16px;padding-right:16px} }
/* scene drawing (same classes as the app), shown as a still image */
.fig svg *,.thumb svg *{transform-box:fill-box;transform-origin:center}
.s{fill:none;stroke:var(--ink);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.s.sr{stroke:var(--fail-d)} .s.sg{stroke:var(--okc-d)} .s.sb{stroke:var(--req-d)} .s.sv{stroke:var(--ctl-d)} .s.sa{stroke:var(--wait-d)}
.thin{stroke-width:1.4} .faint{stroke-opacity:.35} .dash{stroke-dasharray:5 6}
.fw{fill:var(--paper)} .fR{fill:var(--fail-t)} .fG{fill:var(--okc-t)} .fB{fill:var(--req-t)} .fY{fill:var(--hl-t)} .fA{fill:var(--wait-t)}
.fI{fill:var(--ink)} .fRd{fill:var(--fail)} .fGn{fill:var(--okc)} .fBl{fill:var(--req)} .fV{fill:var(--ctl)} .fAm{fill:var(--wait)}
.h{font-family:var(--hand);font-weight:700;font-size:17px;fill:var(--ink)}
.h.r{fill:var(--fail-d)} .h.g{fill:var(--okc-d)} .h.b{fill:var(--req-d)} .h.v{fill:var(--ctl-d)} .h.a{fill:var(--wait-d)} .h.y{fill:#d9480f} .h.sm{font-size:14px} .h.lg{font-size:21px}
.m{font-family:var(--mono);font-weight:600;font-size:10.5px;fill:var(--ink)}
.m.r{fill:var(--fail-d)} .m.g{fill:var(--okc-d)} .m.mut{fill:var(--ink-mut)}
.fig [data-op],.thumb [data-op]{opacity:1!important}
.fig .q,.thumb .q{display:none}
