:root{
  --bg:#E9ECF1; --paper:#F8F9FB; --ink:#18202F; --muted:#556074; --line:#C9D0DB; --soft:#DDE2EA;
  --accent:#2D4FD7; --accent-ink:#fff; --focus:#2D4FD7;
  --s-live:#15803D; --s-tested:#2D4FD7; --s-built:#B45309; --s-planned:#7C3AED; --s-idea:#64748B; --s-unknown:#64748B;
  --display:"Bricolage Grotesque",ui-sans-serif,system-ui,sans-serif;
  --body:"Atkinson Hyperlegible",ui-sans-serif,system-ui,sans-serif;
  color-scheme:light;
}
[data-theme="dark"]{
  --bg:#161C29; --paper:#1E2636; --ink:#E6EAF2; --muted:#9AA5B8; --line:#344057; --soft:#283247;
  --accent:#8EA4FF; --accent-ink:#121826; --focus:#8EA4FF;
  --s-live:#4ADE80; --s-tested:#8EA4FF; --s-built:#F5B54A; --s-planned:#C4A5FF; --s-idea:#A3AEC2; --s-unknown:#A3AEC2;
  color-scheme:dark;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:400 1.0625rem/1.6 var(--body)}
a{color:inherit}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:6px}
.wrap{max-width:1240px;margin:0 auto;padding:0 clamp(16px,4vw,40px)}
.skip{position:absolute;left:-999px}.skip:focus{left:16px;top:12px;background:var(--paper);padding:8px 12px;z-index:9}

/* header */
.top{display:flex;align-items:center;justify-content:space-between;padding:20px 0}
.mark{display:flex;align-items:center;gap:10px;text-decoration:none;font:700 1.05rem/1 var(--display);letter-spacing:-.01em}
.mark svg{width:30px;height:30px}
.theme{appearance:none;border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:999px;padding:8px 14px;font:inherit;font-size:.9rem;cursor:pointer;display:flex;gap:8px;align-items:center}
.theme svg{width:16px;height:16px}

/* hero */
.hero{padding:clamp(28px,6vw,72px) 0 clamp(24px,4vw,40px);display:grid;grid-template-columns:auto minmax(0,1fr);gap:24px 56px;align-items:end}
.hero h1{font:800 clamp(3.2rem,11vw,8.5rem)/.86 var(--display);letter-spacing:-.035em;margin:0;font-variation-settings:"wdth" 88}
.hero h1 .row{display:block}
.hero h1 .row+.row{padding-left:clamp(0px,9vw,140px)}
.tally{max-width:44ch;margin:0 0 .6em;font-size:clamp(1.05rem,1.8vw,1.25rem);color:var(--muted)}
.tally b{color:var(--ink);font-weight:700}
.dot{display:inline-block;width:.62em;height:.62em;border-radius:50%;background:currentColor;margin-right:.3em;vertical-align:.05em}

/* filters */
.tools{position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(8px);padding:14px 0;border-bottom:1px solid var(--line)}
.tools form{display:grid;grid-template-columns:minmax(220px,2fr) repeat(4,minmax(130px,1fr)) auto;gap:10px;align-items:end}
.field{display:flex;flex-direction:column;gap:4px;font-size:.82rem;color:var(--muted)}
.field input,.field select{font:inherit;font-size:.98rem;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:9px 12px;min-height:42px;width:100%}
.clear{justify-self:start;font:inherit;font-size:.92rem;background:none;border:0;color:var(--accent);text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:10px 4px;min-height:42px}
.count{margin:18px 0 0;color:var(--muted);font-size:.95rem}

/* grid + cards */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:18px;margin:16px 0 64px}
.card{position:relative;background:var(--paper);border:1px solid var(--line);border-radius:18px;padding:22px 22px 18px;display:flex;flex-direction:column;gap:14px}
.card[data-status="planned"]{border-style:dashed;background:transparent}
.card h3{font:700 1.28rem/1.18 var(--display);letter-spacing:-.015em;margin:0}
.card h3 a{text-decoration:none}
.card h3 a::after{content:"";position:absolute;inset:0;border-radius:18px}
.card h3 a:focus-visible{outline:none}.card:has(h3 a:focus-visible){outline:3px solid var(--focus);outline-offset:2px}
.card p.sum{margin:0;color:var(--muted);font-size:.98rem}
.cardhead{display:flex;justify-content:space-between;gap:12px;align-items:center;font-size:.86rem;color:var(--muted)}
.kitname{display:flex;align-items:center;gap:8px}
.kitname i{width:22px;height:6px;border-radius:3px;background:var(--kit)}
.status{display:inline-flex;align-items:center;gap:6px;font-weight:700;font-size:.86rem;color:var(--sc);white-space:nowrap}
.status::before{content:"";width:9px;height:9px;border-radius:50%;background:var(--sc)}
.status[data-s="planned"]::before,.status[data-s="idea"]::before{background:transparent;border:2px solid var(--sc);width:7px;height:7px}
[data-s="live"]{--sc:var(--s-live)}[data-s="tested"]{--sc:var(--s-tested)}[data-s="built"]{--sc:var(--s-built)}[data-s="planned"]{--sc:var(--s-planned)}[data-s="idea"]{--sc:var(--s-idea)}[data-s="unknown"]{--sc:var(--s-unknown)}

/* mini rail: the signature element */
.rail{display:flex;align-items:center;margin:4px 0 2px;height:14px}
.rail span{flex:1;height:3px;background:var(--kit)}
.rail span:first-child{display:none}
.rail b{width:12px;height:12px;border-radius:50%;background:var(--paper);border:3px solid var(--kit);flex:none}
.rail b.t{width:14px;height:14px;background:var(--kit)}
.rail b.o{border-radius:3px;background:var(--kit)}
.card[data-status="planned"] .rail span{background:repeating-linear-gradient(90deg,var(--kit) 0 6px,transparent 6px 11px)}
.railends{display:flex;justify-content:space-between;gap:12px;font-size:.8rem;color:var(--muted);margin-top:-6px}
.railends span:last-child{text-align:right}

dl.meta{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;margin:0;font-size:.9rem}
dl.meta dt{color:var(--muted)}
dl.meta dd{margin:0}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{font-size:.8rem;padding:2px 9px;border-radius:999px;background:var(--soft);white-space:nowrap}
.cardfoot{display:flex;justify-content:space-between;gap:10px;font-size:.84rem;color:var(--muted);border-top:1px solid var(--line);padding-top:12px;margin-top:auto}
.cardfoot a{position:relative;z-index:1;color:var(--accent)}
.empty{grid-column:1/-1;padding:40px;text-align:center;border:1px dashed var(--line);border-radius:18px;color:var(--muted)}

/* ideas */
.sect{margin:0 0 72px}
.sect h2{font:800 clamp(2rem,5vw,3.2rem)/1 var(--display);letter-spacing:-.03em;margin:0 0 10px}
.sect>p{color:var(--muted);max-width:64ch;margin:0 0 24px}
.ideas{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.ideas li{border:1px dashed var(--line);border-radius:14px;padding:16px 18px;display:flex;flex-direction:column;gap:8px}
.ideas h3{font:700 1.06rem/1.25 var(--display);margin:0}
.ideas p{margin:0;font-size:.93rem;color:var(--muted)}
.ideas .row{display:flex;justify-content:space-between;align-items:center;font-size:.82rem;color:var(--muted);gap:8px}

footer{border-top:1px solid var(--line);padding:28px 0 48px;color:var(--muted);font-size:.9rem}

/* detail */
.crumb{margin:8px 0 0;font-size:.95rem}
.crumb a{color:var(--accent);text-underline-offset:3px}
.dhead{padding:clamp(20px,4vw,48px) 0 24px;max-width:900px}
.dhead .cardhead{justify-content:flex-start;gap:20px;flex-wrap:wrap}
.dhead h1{font:800 clamp(2.2rem,6vw,4.4rem)/.98 var(--display);letter-spacing:-.035em;margin:14px 0 16px}
.dhead .lede{font-size:clamp(1.1rem,2vw,1.3rem);max-width:60ch;margin:0}
.snote{margin:14px 0 0;color:var(--muted);font-size:.95rem;max-width:70ch}
.panel{background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:clamp(18px,3vw,30px);margin:0 0 22px}
.panel h2{font:700 1.5rem/1.1 var(--display);letter-spacing:-.02em;margin:0 0 16px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.panel ol{margin:0;padding-left:1.3em}.panel ol li{margin:0 0 8px;padding-left:4px}
.panel dl.meta{font-size:1rem;gap:10px 20px}
.links a{display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:var(--accent-ink);text-decoration:none;font-weight:700;padding:10px 16px;border-radius:12px;margin:0 8px 8px 0}

/* flow diagram */
.flowwrap{overflow-x:auto;padding:6px 2px 10px;-webkit-overflow-scrolling:touch}
.flow{display:flex;min-width:max-content;--kit:var(--accent)}
.stage{position:relative;display:flex;flex-direction:column;width:var(--w,134px)}
.stage+.stage{margin-left:0}
.node{position:relative;height:96px;padding:0 8px;text-align:center}
.node::before{content:"";position:absolute;top:12px;left:0;right:0;height:4px;background:var(--kit)}
.stage:first-child .node::before{left:50%}
.stage:last-child .node::before{right:50%}
.stage.multi::after,.stage.multi .bus{content:"";position:absolute;width:4px;background:var(--kit);top:12px;height:var(--bus)}
.stage.multi:not(:first-child)::after{left:0}
.stage.multi .bus{right:0}
.stage.multi:last-child .bus{display:none}
.stage.multi:first-child::after{display:none}
.st{position:relative;z-index:1;display:block;margin:0 auto;width:28px;height:28px;border-radius:50%;background:var(--paper);border:4px solid var(--kit)}
.st.trigger{background:var(--kit);box-shadow:0 0 0 4px var(--paper),0 0 0 7px var(--kit)}
.st.output{border-radius:7px;background:var(--kit)}
.st.app::after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--kit)}
.nl{display:block;margin-top:10px;font-weight:700;font-size:.9rem;line-height:1.2}
.na{display:block;font-size:.78rem;color:var(--muted)}
.legend{display:flex;flex-wrap:wrap;gap:18px;margin-top:10px;font-size:.84rem;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:8px}
.legend .st{width:16px;height:16px;border-width:3px;margin:0}
.legend .st.trigger{box-shadow:0 0 0 2px var(--paper),0 0 0 4px var(--kit)}
.legend .st.app::after{inset:3px}
.flow.planned .node::before{background:repeating-linear-gradient(90deg,var(--kit) 0 8px,transparent 8px 14px)}
.siblings{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.siblings a{display:flex;justify-content:space-between;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;text-decoration:none}
.siblings a:hover{background:var(--soft)}

@media (max-width:980px){.hero{grid-template-columns:1fr}.tally{max-width:62ch}.tools form{grid-template-columns:1fr 1fr}.tools .field.q{grid-column:1/-1}.two{grid-template-columns:1fr}}
@media (max-width:560px){.tools{position:static}.grid{grid-template-columns:1fr}.hero h1 .row+.row{padding-left:0}.card{padding:18px}}
@media (prefers-reduced-motion:no-preference){
  .hero h1 .row{animation:rise .7s cubic-bezier(.2,.7,.2,1) both}.hero h1 .row+.row{animation-delay:.08s}
  @keyframes rise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
}

[hidden]{display:none!important}
