/* teams.sgit.ai — shared stylesheet, copied from the network's other sites (light theme).
   Machinery is shared deliberately — one stylesheet, one nav component, one pipeline shape —
   copied rather than packaged, so each site can diverge without asking permission. This file
   still carries components other sibling sites added (the register's seven blocks, trace
   tables, tier badges) that this site does not use for its own content, and components this
   site repurposes under their original names — see "teams.sgit.ai additions" at the end. */
:root{
  --bg:#faf9f5; --panel:#ffffff; --panel2:#f2f0e9; --line:#e5e1d5; --line2:#d5d0c2;
  --fg:#1c1d21; --dim:#5c5f66; --dim2:#8a8d94;
  --accent:#0f766e; --accent-dk:#115e59; --yellow:#a16207; --warm:#b45309; --red:#b91c1c;
  --term-bg:#0d1117; --term-green:#3fb950; --term-red:#f85149; --term-cyan:#58a6ff;
  --term-yellow:#d29922; --term-dim:#8b949e;
  --sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --serif:ui-serif,Georgia,"Times New Roman",serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --measure:960px; --wide:1360px;
  --shadow:0 1px 2px rgba(28,29,33,.05),0 4px 14px rgba(28,29,33,.04);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--sans);font-size:16px;line-height:1.65}
a{color:var(--accent-dk);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3{line-height:1.2;letter-spacing:-.015em}
code,pre,kbd{font-family:var(--mono)}
p code,li code,td code,.note code{overflow-wrap:anywhere;background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:.08em .35em;font-size:.84em;color:#24343f}
.inner{max-width:var(--measure);margin:0 auto;padding:0 1.1rem}
.dim{color:var(--dim)} .small{font-size:.85rem}

/* ---------- top nav ---------- */
nav.site{position:sticky;top:0;z-index:50;background:rgba(250,249,245,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
nav.site .row{max-width:var(--wide);margin:0 auto;display:flex;align-items:center;gap:1.1rem;padding:.7rem 1.1rem;flex-wrap:wrap}
nav.site .brand{font-weight:800;font-size:1.05rem;color:var(--fg);letter-spacing:-.02em;white-space:nowrap}
nav.site .brand span{color:var(--accent)}
nav.site a.nl{color:var(--dim);font-size:.85rem}
nav.site a.nl.here{color:var(--fg);font-weight:600}
nav.site a.nl:hover{color:var(--fg);text-decoration:none}
nav.site .parent{border:1px solid var(--accent);border-radius:6px;padding:.28rem .7rem;
  color:var(--accent-dk);font-size:.78rem;white-space:nowrap;background:var(--panel);font-weight:500}
nav.site .parent b{font-weight:800}
nav.site .parent:hover{background:var(--accent);color:#fff;border-color:var(--accent);text-decoration:none}
nav.site .gh{border:1px solid var(--line2);border-radius:6px;padding:.28rem .7rem;color:var(--fg);font-size:.78rem;white-space:nowrap;background:var(--panel)}
nav.site .gh:hover{border-color:var(--accent);text-decoration:none}
/* Two-level nav, the same component sgit.ai runs. The flat one here reached twelve
   items and wrapped to two rows on a laptop and four on a phone. Opening is :hover for
   a mouse and :focus-within for a keyboard — no JS needed for either — plus a click
   toggle (nav.js) for touch, where hover does not exist. Every group label is itself a
   link to that section's own page, so nothing is reachable only by opening a menu: the
   submenu is a shortcut, never the only door. */
nav.site .ni{position:relative}
nav.site .ni-has > .nl{display:inline-flex;align-items:center;gap:.25rem}
nav.site .caret{font-size:.55em;opacity:.55;transition:transform .15s ease}
nav.site .sub{position:absolute;left:-.7rem;top:100%;min-width:12rem;z-index:60;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;
  box-shadow:0 6px 24px rgba(28,29,33,.13);padding:.4rem;
  display:none;flex-direction:column;gap:.05rem}
nav.site .ni-has:hover > .sub,
nav.site .ni-has:focus-within > .sub,
nav.site .ni-has.open > .sub{display:flex}
nav.site .ni-has:hover .caret,
nav.site .ni-has.open .caret{transform:rotate(180deg)}
nav.site .sub a.sl{display:block;padding:.36rem .6rem;border-radius:6px;
  font-size:.83rem;color:var(--dim);white-space:nowrap}
nav.site .sub a.sl:hover{background:var(--panel2);color:var(--fg);text-decoration:none}
nav.site .sub a.sl.here{color:var(--accent-dk);font-weight:600}
/* Phone: the whole thing collapses behind one button, so the bar stays a single row and
   opening it gives a vertical list with each group's children indented under it. */
.nav-items{display:contents}
.nav-toggle{display:none}
@media (max-width:820px){
  nav.site .row{position:relative;gap:.6rem}
  .nav-toggle{display:block;margin-left:auto;order:3;background:var(--panel);
    border:1px solid var(--line2);border-radius:6px;padding:.3rem .7rem;
    font:600 .78rem/1 var(--sans);color:var(--fg);cursor:pointer}
  .nav-toggle:hover{border-color:var(--accent)}
  nav.site .parent{order:2}
  nav.site .gh{order:4;margin-left:0}
  .nav-items{display:none;order:5;width:100%;flex-direction:column;gap:.1rem;
    padding:.5rem 0 .3rem;border-top:1px solid var(--line);margin-top:.4rem}
  nav.site.open .nav-items{display:flex}
  nav.site .ni{width:100%}
  nav.site .ni > .nl{display:block;padding:.42rem .2rem;font-size:.95rem}
  nav.site .caret{display:none}
  nav.site .sub{position:static;display:flex;flex-direction:column;border:0;
    box-shadow:none;background:none;padding:0 0 .3rem .9rem;min-width:0;gap:0}
  nav.site .sub a.sl{padding:.3rem .2rem;font-size:.86rem}
}
.stage-pill{font-size:.62rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--warm);
  border:1px solid rgba(180,83,9,.35);background:rgba(180,83,9,.07);border-radius:99px;padding:.15rem .55rem;white-space:nowrap}
a.ver{font-family:var(--mono);font-size:.68rem;color:var(--dim2);border:1px solid var(--line);border-radius:99px;padding:.14rem .55rem;white-space:nowrap}
a.ver:hover{color:var(--accent-dk);border-color:var(--accent);text-decoration:none}

/* ---------- hero ---------- */
header.hero{text-align:center;padding:4.2rem 1.2rem 2.6rem;max-width:1000px;margin:0 auto}
.eyebrow{font-size:.7rem;font-weight:800;letter-spacing:.22em;text-transform:uppercase;color:var(--accent)}
header.hero h1{font-family:var(--serif);font-size:clamp(2rem,5vw,3.1rem);margin:.9rem 0;color:#101114}
header.hero .sub{color:var(--dim);font-size:1.05rem;max-width:680px;margin:0 auto 1.7rem;line-height:1.6}
.ctas{display:flex;gap:.8rem;justify-content:center;flex-wrap:wrap;align-items:center}
.cta1{background:var(--accent-dk);color:#fff;border-radius:8px;padding:.6rem 1.2rem;font-size:.9rem;font-weight:600}
.cta1:hover{background:var(--accent);text-decoration:none}
.cta2{color:var(--accent-dk);font-size:.9rem;font-weight:600}

/* ---------- sections ---------- */
section.band{padding:3rem 0;scroll-margin-top:64px}
section.band.alt{background:var(--panel2);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
section.band h2{font-family:var(--serif);font-size:1.9rem;color:#101114;text-align:center;margin:0 0 .6rem}
section.band .blurb{color:var(--dim);text-align:center;max-width:660px;margin:0 auto 1.8rem;font-size:.95rem}

/* ---------- cards ---------- */
.cards{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));max-width:1160px;margin:0 auto;padding:0 1.1rem}
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:1.05rem 1.15rem;display:block;color:var(--fg);box-shadow:var(--shadow)}
a.card:hover{border-color:var(--accent);text-decoration:none}
.card .tag{font-size:.64rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--warm)}
.card h3,.card h4{margin:.25rem 0 .45rem;font-size:.95rem;color:#101114;font-family:var(--sans)}
.card p{margin:0;font-size:.8rem;color:var(--dim);line-height:1.55}
.card .go{display:inline-block;margin-top:.55rem;font-size:.75rem;color:var(--accent-dk);font-weight:600}

/* ---------- two-populations split table ---------- */
.split{max-width:1000px;margin:0 auto;padding:0 1.1rem}
.split table{width:100%;border-collapse:collapse;font-size:.9rem;background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow)}
.split th{background:var(--panel2);text-align:left;padding:.6rem .9rem;font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--dim)}
.split th.run{color:var(--accent-dk)} .split th.rent{color:var(--warm)}
.split td{padding:.6rem .9rem;border-top:1px solid var(--line);vertical-align:top;line-height:1.5;color:#34363c}
.split td b.no{color:var(--red)} .split td b.yes{color:var(--accent-dk)}
.split .cap{font-size:.78rem;color:var(--dim);text-align:center;margin-top:.9rem;line-height:1.6}

/* ---------- terminal-style figure ---------- */
pre.shell{background:var(--term-bg);border-radius:10px;padding:.9rem 1.1rem;
  font-size:.79rem;line-height:1.65;overflow-x:auto;margin:1.1rem 0;color:#c9d1d9;box-shadow:var(--shadow)}
pre.shell .g{color:var(--term-green)} pre.shell .r{color:var(--term-red)} pre.shell .cy{color:var(--term-cyan)}
pre.shell .y{color:var(--term-yellow)} pre.shell .d{color:var(--term-dim)}

/* ---------- docs & content pages ---------- */
main.doc{max-width:var(--measure);margin:0 auto;padding:2.4rem 1.4rem 3.5rem}
main.doc .crumb{font-size:.75rem;color:var(--dim2);margin-bottom:1rem}
main.doc .crumb a{color:var(--dim)}
main.doc h1{font-family:var(--serif);font-size:2.1rem;color:#101114;margin:.2rem 0 .9rem}
main.doc h2{font-family:var(--serif);font-size:1.4rem;color:#101114;margin:2.2rem 0 .7rem;scroll-margin-top:70px}
main.doc h3{font-size:1.02rem;color:#101114;margin:1.7rem 0 .5rem}
main.doc .lead{color:#34363c;font-size:1.12rem}
main.doc p, main.doc li{color:#34363c;font-size:.98rem}
main.doc ul,main.doc ol{padding-left:1.3rem}
main.doc li{margin:.3rem 0}
main.doc table{width:100%;border-collapse:collapse;font-size:.88rem;margin:1.1rem 0;background:var(--panel);
  border:1px solid var(--line);border-radius:10px;overflow:hidden;box-shadow:var(--shadow)}
main.doc th{background:var(--panel2);text-align:left;padding:.55rem .8rem;font-size:.7rem;letter-spacing:.09em;text-transform:uppercase;color:var(--dim)}
main.doc td{padding:.55rem .8rem;border-top:1px solid var(--line);vertical-align:top;line-height:1.5;color:#34363c}
.tablewrap{overflow-x:auto}
.note{border:1px solid var(--line);border-left:3px solid var(--accent);background:var(--panel);border-radius:0 10px 10px 0;
  padding:.8rem 1rem;font-size:.85rem;color:#34363c;margin:1.2rem 0;box-shadow:var(--shadow)}
.warnbox{border:1px solid var(--line);border-left:3px solid var(--yellow);background:var(--panel);border-radius:0 10px 10px 0;
  padding:.8rem 1rem;font-size:.85rem;color:#34363c;margin:1.2rem 0;box-shadow:var(--shadow)}
.note b,.warnbox b{color:#101114}
blockquote.challenge{margin:1.6rem 0;padding:1.1rem 1.3rem;border-left:4px solid var(--warm);
  background:var(--panel);border-radius:0 10px 10px 0;font-size:1rem;font-style:italic;color:#34363c;
  box-shadow:var(--shadow);line-height:1.7}
.pagenav{display:flex;justify-content:space-between;gap:1rem;margin-top:2.8rem;padding-top:1.2rem;border-top:1px solid var(--line);font-size:.85rem}

/* evidence status boxes */
.evbox{border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;
  background:var(--panel);padding:1rem 1.15rem;box-shadow:var(--shadow);margin:.9rem 0 1.4rem}
.evbox.ev-warn{border-left-color:var(--warm)}
.evbox p:first-of-type{margin-top:.5rem}
.evbox p:last-child{margin-bottom:0}
.evtag{display:inline-block;font-size:.62rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:#fff;background:var(--accent);border-radius:99px;padding:.16rem .6rem}
.evbox.ev-warn .evtag{background:var(--warm)}

/* option assessment pages */
.opt-verdict{font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;
  border-radius:99px;padding:.14rem .6rem;white-space:nowrap;vertical-align:middle}
.opt-yes{color:#0f766e;border:1px solid rgba(15,118,110,.35);background:rgba(15,118,110,.08)}
.opt-no{color:#b91c1c;border:1px solid rgba(185,28,28,.35);background:rgba(185,28,28,.08)}
.opt-part{color:#b45309;border:1px solid rgba(180,83,9,.35);background:rgba(180,83,9,.08)}

/* task board */
.tstat{font-family:var(--mono);font-size:.68rem;text-transform:uppercase;letter-spacing:.05em;border-radius:99px;padding:.1rem .5rem;white-space:nowrap}
.t-done{color:#0f766e;border:1px solid rgba(15,118,110,.35);background:rgba(15,118,110,.08)}
.t-doing{color:#1d4ed8;border:1px solid rgba(29,78,216,.3);background:rgba(29,78,216,.07)}
.t-open{color:#b45309;border:1px solid rgba(180,83,9,.35);background:rgba(180,83,9,.08)}
.t-need{color:#b91c1c;border:1px solid rgba(185,28,28,.35);background:rgba(185,28,28,.08)}

/* versions table */
table.vers td.vnum{font-family:var(--mono);font-weight:700;color:var(--accent-dk);white-space:nowrap}

/* the hope ladder */
.hopeladder{display:flex;flex-direction:column;gap:.9rem;margin:1.4rem 0 2rem}
.hopeladder .cap{position:relative;background:var(--panel);border:1px solid var(--line);
  border-left:3px solid var(--accent);border-radius:10px;padding:1.1rem 1.3rem 1.1rem 3.4rem;box-shadow:var(--shadow)}
.hopeladder .capnum{position:absolute;left:1.15rem;top:1.15rem;font-family:var(--mono);font-size:.78rem;
  font-weight:700;color:var(--accent);letter-spacing:-.03em}
.hopeladder .cap h3{margin:0 0 .5rem;font-size:1.05rem;color:#101114;letter-spacing:-.015em}
.hopeladder .cap p{margin:.5rem 0;font-size:.92rem;line-height:1.65;color:#34363c}
@media (max-width:560px){.hopeladder .cap{padding:2.4rem 1rem 1rem}.hopeladder .capnum{top:.85rem;left:1rem}}

/* ---------- footer ---------- */
footer.site{border-top:1px solid var(--line);margin-top:3.5rem;padding:2.2rem 0 3rem;background:var(--panel2)}
footer.site .cols{max-width:var(--wide);margin:0 auto;padding:0 1.1rem;display:grid;gap:1.6rem;grid-template-columns:1.8fr 1fr 1fr 1fr 1fr}
@media (max-width:1080px){footer.site .cols{grid-template-columns:2fr 1fr 1fr 1fr}}
@media (max-width:940px){footer.site .cols{grid-template-columns:1fr 1fr}}
footer.site h4{font-size:.7rem;letter-spacing:.13em;text-transform:uppercase;color:var(--dim);margin:0 0 .6rem}
footer.site a{display:block;color:var(--dim);font-size:.82rem;padding:.15rem 0}
footer.site .brandline{font-weight:800;color:var(--fg)}
footer.site .brandline span{color:var(--accent)}
footer.site p{color:var(--dim);font-size:.76rem;line-height:1.65;max-width:420px}
footer.site .netline{color:var(--dim);font-size:.78rem;line-height:1.8;max-width:420px;
  border-top:1px dashed var(--line);border-bottom:1px dashed var(--line);padding:.55rem 0;margin:.9rem 0}
footer.site .netline a{display:inline;padding:0;color:var(--accent-dk)}
footer.site .netline a b{font-weight:800}
footer.site .partnote{color:var(--warm);opacity:.95}
footer.site .verline{font-family:var(--mono);font-size:.72rem;color:var(--dim2);margin-top:.6rem}
footer.site .verline a{display:inline;color:var(--accent-dk);padding:0}
@media (max-width:700px){footer.site .cols{grid-template-columns:1fr}}

/* print */
@page{margin:14mm}
@media print{
  html{print-color-adjust:exact;-webkit-print-color-adjust:exact;background:#fff}
  body{background:#fff;font-size:10pt;line-height:1.5}
  nav.site{position:static;background:none;backdrop-filter:none}
  nav.site a.nl,nav.site .gh,nav.site .parent,.nav-items,.nav-toggle{display:none}
  .note,pre,table,blockquote{break-inside:avoid}
  h1,h2,h3,h4{break-after:avoid}
  p,li{orphans:3;widows:3}
}

/* ---------- in-page markdown reader (documents/*) ---------- */
.mdread-label{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;background:var(--panel2);
  border:1px solid var(--line2);border-bottom:1px dashed var(--line2);border-radius:10px 10px 0 0;
  padding:.5rem 1rem;margin:1.4rem 0 0;font-family:var(--mono);font-size:.7rem;color:var(--dim);letter-spacing:.03em}
.mdread-label a{color:var(--accent-dk)}
.mdread{border:1px solid var(--line2);border-top:none;border-radius:0 0 10px 10px;background:#fff;
  padding:2rem 2.4rem;margin:0 0 1.6rem;
  box-shadow:0 2px 6px rgba(28,29,33,.08),0 14px 32px rgba(28,29,33,.08)}
@media (max-width:560px){.mdread{padding:1.3rem 1rem}}
.mdread h1{font-family:var(--serif);font-size:1.7rem;color:#101114;margin:.2rem 0 .8rem}
.mdread h2{font-family:var(--serif);font-size:1.25rem;color:#101114;margin:1.8rem 0 .6rem}
.mdread h3{font-size:1rem;color:#101114;margin:1.4rem 0 .4rem}
.mdread p,.mdread li{color:#34363c;font-size:.94rem;line-height:1.65}
.mdread table{display:block;overflow-x:auto;border-collapse:collapse;font-size:.85rem;margin:1rem 0}
.mdread th{background:var(--panel2);text-align:left;padding:.5rem .7rem;font-size:.7rem;
  letter-spacing:.08em;text-transform:uppercase;color:var(--dim);border:1px solid var(--line)}
.mdread td{padding:.5rem .7rem;border:1px solid var(--line);color:#34363c;vertical-align:top}
.mdread blockquote{margin:1.2rem 0;padding:.8rem 1.1rem;border-left:4px solid var(--warm);
  background:var(--panel2);border-radius:0 8px 8px 0;color:#34363c}
.mdread pre{background:var(--term-bg);color:#c9d1d9;border-radius:8px;padding:.8rem 1rem;
  font-size:.78rem;overflow-x:auto;line-height:1.6}
.mdread hr{border:none;border-top:1px solid var(--line);margin:1.6rem 0}
.mdread a{overflow-wrap:anywhere}
.docmeta{display:grid;grid-template-columns:auto 1fr;gap:.25rem 1rem;background:var(--panel);
  border:1px solid var(--line);border-radius:10px;padding:.9rem 1.1rem;box-shadow:var(--shadow);
  font-size:.86rem;margin:1rem 0 1.4rem}
.docmeta .k{color:var(--dim);font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;padding-top:.15rem}
.docmeta .v{color:#34363c}

/* mermaid diagrams (concept pages + rendered inside .mdread) */
pre.mermaid{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:1rem;
  margin:1.2rem 0;box-shadow:var(--shadow);text-align:center;overflow-x:auto;font-size:.8rem}

/* ---------- pki additions ---------- */
/* the rules ladder — same component as nhi.sgit.ai's .hopeladder, named for what
   it holds here. Both selectors are kept so the stylesheet stays portable. */
.ladder{display:flex;flex-direction:column;gap:.9rem;margin:1.4rem 0 2rem}
.ladder .cap{position:relative;background:var(--panel);border:1px solid var(--line);
  border-left:3px solid var(--accent);border-radius:10px;padding:1.1rem 1.3rem 1.1rem 3.4rem;box-shadow:var(--shadow)}
.ladder .capnum{position:absolute;left:1.15rem;top:1.15rem;font-family:var(--mono);font-size:.78rem;
  font-weight:700;color:var(--accent);letter-spacing:-.03em}
.ladder .cap h3{margin:0 0 .5rem;font-size:1.05rem;color:#101114;letter-spacing:-.015em}
.ladder .cap p{margin:.5rem 0;font-size:.92rem;line-height:1.65;color:#34363c}
.ladder .cap .from{display:block;margin-top:.6rem;font-size:.76rem;color:var(--dim);
  border-top:1px dashed var(--line);padding-top:.5rem}
.ladder .cap .from b{color:var(--warm)}
@media (max-width:560px){.ladder .cap{padding:2.4rem 1rem 1rem}.ladder .capnum{top:.85rem;left:1rem}}

/* the split table's two verdict columns, in this site's terms */
.split th.safe{color:var(--accent-dk)} .split th.fatal{color:var(--red)}

/* dated timeline — the 2019 failure, in order */
.timeline{list-style:none;margin:1.4rem 0 2rem;padding:0 0 0 1.1rem;border-left:2px solid var(--line2)}
.timeline li{position:relative;padding:0 0 1.1rem 1.2rem}
.timeline li:last-child{padding-bottom:0}
.timeline li::before{content:"";position:absolute;left:-1.62rem;top:.42rem;width:.62rem;height:.62rem;
  border-radius:99px;background:var(--panel);border:2px solid var(--accent)}
.timeline li.bad::before{border-color:var(--red)}
.timeline .when{display:block;font-family:var(--mono);font-size:.7rem;letter-spacing:.06em;
  text-transform:uppercase;color:var(--dim2)}
.timeline .what{color:#34363c;font-size:.95rem;line-height:1.6}

/* a stated rule, quoted as a claim the reader may check */
.claim{font-family:var(--serif);font-size:1.12rem;line-height:1.6;color:#101114;
  background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--accent);
  border-radius:0 10px 10px 0;padding:1rem 1.2rem;margin:1.3rem 0;box-shadow:var(--shadow)}

/* mermaid on hand-written concept pages (the reader styles pre.mermaid already) */
.mermaid{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:1rem;
  margin:1.2rem 0;box-shadow:var(--shadow);text-align:center;overflow-x:auto}

/* the pack download — a real affordance rather than a link in a paragraph */
.dl{display:flex;gap:1.4rem;align-items:center;justify-content:space-between;flex-wrap:wrap;
  background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:12px;padding:1.1rem 1.3rem;margin:1.6rem 0;box-shadow:var(--shadow)}
.dl > div{flex:1 1 22rem}
.dl p{margin:.45rem 0 0;font-size:.88rem;color:#34363c;line-height:1.6}
.dlbtn{display:flex;flex-direction:column;align-items:center;gap:.15rem;white-space:nowrap;
  background:var(--accent);color:#fff;border:1px solid var(--accent);border-radius:10px;
  padding:.75rem 1.3rem;font-weight:700;font-size:.9rem}
.dlbtn span{font-family:var(--mono);font-size:.68rem;font-weight:400;opacity:.85;letter-spacing:.04em}
.dlbtn:hover{background:var(--accent-dk);border-color:var(--accent-dk);text-decoration:none}

/* ---------- sg-compute additions ---------- */
/* the domain decision, restated in every footer — this site's label collides with a
   live Route 53 zone and the stated decision is to claim the distinction, so it is
   chrome rather than a paragraph on one page */
footer.site .domainnote{color:var(--dim);font-size:.76rem;line-height:1.65;max-width:420px;
  border-left:2px solid var(--line2);padding-left:.7rem;margin:.8rem 0}
footer.site .domainnote b{color:var(--fg);font-weight:700}

/* the two ephemeral layers — the one thing the site must not conflate, so it gets a
   component rather than two paragraphs */
.layers{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));margin:1.6rem 0 1.2rem}
.layer{background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--accent);
  border-radius:12px;padding:1.2rem 1.3rem;box-shadow:var(--shadow)}
.layer.l2{border-top-color:var(--warm)}
.layer .lnum{font-family:var(--mono);font-size:.66rem;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--accent)}
.layer.l2 .lnum{color:var(--warm)}
.layer h3{margin:.3rem 0 .5rem;font-size:1.05rem;color:#101114}
.layer p{margin:.5rem 0;font-size:.9rem;line-height:1.6;color:#34363c}
.layer .unit{font-family:var(--mono);font-size:.72rem;color:var(--dim);border-top:1px dashed var(--line);
  padding-top:.5rem;margin-top:.8rem;display:block}

/* a measured figure, stated with its provenance — the house rule is that every number
   is either generated from data or carries the date it was measured */
.figs{display:grid;gap:.7rem;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));margin:1.3rem 0}
.fig{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.9rem 1rem;box-shadow:var(--shadow)}
.fig .n{font-family:var(--serif);font-size:1.75rem;color:#101114;line-height:1.1;letter-spacing:-.02em}
.fig .n.warnfig{color:var(--warm)}
.fig .l{font-size:.78rem;color:var(--dim);margin-top:.3rem;line-height:1.5}
.fig .src{font-family:var(--mono);font-size:.63rem;color:var(--dim2);margin-top:.45rem;
  border-top:1px dashed var(--line);padding-top:.35rem;display:block}

/* the scorecard — nine acceptance criteria, and the shipped/not-shipped ledger */
td.verdict{white-space:nowrap;text-align:center;width:1%}

/* Long identifiers are the whole subject matter here — module paths, class names, env-var
   prefixes — and several of them are unbreakable tokens well over 40 characters. Inside
   <code> the shared rule above already handles it; in running prose it did not, and
   `sg_compute_specs.docker.api.routes.Routes__Docker__Stack` pushed the specs page 100px
   wide on a phone. Break them rather than editing the identifiers, which are API surface. */
main.doc p, main.doc li, main.doc td, main.doc th,
.ladder .cap p, .hopeladder .cap p, .layer p, .fig .l, .card p{overflow-wrap:break-word}

/* ---------- quoted source: a code example with its real path and its own licence ----------
   Every example on this site is a real file from the estate, written in by
   admin/build/gen_inline.py from the survey document it was quoted in. The caption is part
   of the contract: a snippet with no path is a snippet nobody can check, and the code is
   Apache-2.0 while this site is CC BY 4.0 — a site about attribution discipline does not
   get to blur that. */
figure.src{margin:1.4rem 0;background:var(--panel);border:1px solid var(--line);
  border-radius:10px;overflow:hidden;box-shadow:var(--shadow)}
figure.src figcaption{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:space-between;
  align-items:baseline;background:var(--panel2);border-bottom:1px solid var(--line);
  padding:.5rem .85rem;font-size:.72rem;color:var(--dim)}
figure.src figcaption .p code{background:none;border:none;padding:0;font-size:.95em;color:#24343f;
  overflow-wrap:anywhere}
figure.src figcaption .l{color:var(--dim2);white-space:nowrap}
figure.src pre.code{margin:0;background:var(--term-bg);color:#c9d1d9;padding:.9rem 1.1rem;
  font-size:.76rem;line-height:1.6;overflow-x:auto}
figure.src pre.code code{background:none;border:none;padding:0;font-size:inherit;color:inherit}
figure.src .srcnote{margin:0;padding:.42rem .85rem;font-size:.66rem;color:var(--dim2);
  background:var(--panel);border-top:1px solid var(--line)}
@media (max-width:560px){figure.src pre.code{font-size:.68rem}}

/* A number written in from the survey rather than typed by a person. Named .cnt, not
   .fig: this stylesheet already had a .fig card, and an inline <span class="fig"> inherited
   its panel background, border and 0.9rem padding — which looked like a deliberate callout
   in the middle of a sentence. Caught by rendering the page, not by any check here. */
.cnt{font-variant-numeric:tabular-nums;font-weight:600}

/* ---------- the rules table ---------- */
main.doc table.rules td{font-size:.85rem}
table.rules .rn{font-family:var(--mono);font-size:.8rem;color:var(--dim);white-space:nowrap;width:3.2rem}
table.rules .rlang{font-size:.78rem;font-weight:600;color:var(--accent-dk);white-space:nowrap;width:6rem}
table.rules .rtext{margin:0;font-size:.88rem;color:#101114;line-height:1.55}
table.rules .rnote{margin:.4rem 0 0;font-size:.78rem;color:var(--dim);line-height:1.5}
table.rules .rmeas{color:var(--dim);width:30%}
table.rules .rbadge{width:10.5rem}
table.rules .rmeta{margin-top:.4rem}
.rrange{font-family:var(--mono);font-size:.6em;color:var(--dim2);letter-spacing:.04em;
  text-transform:uppercase;vertical-align:middle}
.vq,.vp{font-family:var(--mono);font-size:.62rem;letter-spacing:.05em;text-transform:uppercase;
  border-radius:99px;padding:.08rem .45rem;white-space:nowrap}
.vq{color:#0f766e;border:1px solid rgba(15,118,110,.3);background:rgba(15,118,110,.07)}
.vp{color:var(--dim);border:1px solid var(--line2);background:var(--panel2)}
.rb{display:inline-block;font-size:.68rem;line-height:1.35;border-radius:6px;padding:.2rem .45rem;
  border:1px solid var(--line2);background:var(--panel2);color:var(--dim)}
.rb-tested{color:#0f766e;border-color:rgba(15,118,110,.35);background:rgba(15,118,110,.08)}
.rb-claimed{color:#1d4ed8;border-color:rgba(29,78,216,.3);background:rgba(29,78,216,.07)}
.rb-documented{color:var(--yellow);border-color:rgba(161,98,7,.3);background:rgba(161,98,7,.07)}
.rb-violated{color:var(--warm);border-color:rgba(180,83,9,.35);background:rgba(180,83,9,.08)}
.rb-unwritten{color:var(--red);border-color:rgba(185,28,28,.3);background:rgba(185,28,28,.06)}
.legend{display:grid;gap:.5rem;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
  margin:1.4rem 0 1.8rem}
.legend .lg{display:flex;gap:.55rem;align-items:flex-start;background:var(--panel);
  border:1px solid var(--line);border-radius:9px;padding:.6rem .7rem}
.legend .lgb{font-size:1rem;line-height:1.2}
.legend b{font-size:.8rem;color:#101114}
.legend p{margin:.15rem 0 0;font-size:.74rem;color:var(--dim);line-height:1.45}
.toc{font-size:.82rem;color:var(--dim);border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);padding:.65rem 0;margin:1.6rem 0 0}

/* ---------- language hub cards ---------- */
.langs{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));margin:1.5rem 0}
.lang{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:0 11px 11px 0;padding:.9rem 1rem;display:block;color:var(--fg);box-shadow:var(--shadow)}
a.lang:hover{border-color:var(--accent);border-left-color:var(--accent);text-decoration:none}
.lang h3{margin:0 0 .3rem;font-size:1rem;color:#101114}
.lang .n{font-family:var(--mono);font-size:.68rem;color:var(--warm);letter-spacing:.06em;
  text-transform:uppercase}
.lang p{margin:.35rem 0 0;font-size:.82rem;color:var(--dim);line-height:1.55}

/* ---------- the trade: what it buys / what it costs ---------- */
.trade{display:grid;gap:.8rem;grid-template-columns:1fr 1fr;margin:1.4rem 0}
@media (max-width:660px){.trade{grid-template-columns:1fr}}
.trade > div{background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:.9rem 1.05rem;
  box-shadow:var(--shadow)}
.trade .buys{border-top:3px solid var(--accent)}
.trade .costs{border-top:3px solid var(--warm)}
.trade h4{margin:0 0 .5rem;font-size:.82rem;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.trade .buys h4{color:var(--accent-dk)} .trade .costs h4{color:var(--warm)}
.trade ul{margin:0;padding-left:1.1rem}
.trade li{font-size:.85rem;color:#34363c;line-height:1.55;margin:.35rem 0}

/* ---------- open question / tension blocks ---------- */
.qbox{border:1px solid var(--line);border-radius:11px;background:var(--panel);padding:1rem 1.1rem;
  margin:1rem 0;box-shadow:var(--shadow)}
.qbox .qid{font-family:var(--mono);font-size:.68rem;font-weight:700;letter-spacing:.1em;
  color:var(--warm);text-transform:uppercase}
.qbox h3{margin:.25rem 0 .45rem;font-size:1rem;color:#101114}
.qbox p{margin:.45rem 0;font-size:.88rem;color:#34363c;line-height:1.6}
.qbox p:last-child{margin-bottom:0}
.qbox .where{font-size:.8rem;color:var(--dim);border-top:1px dashed var(--line);padding-top:.5rem;
  margin-top:.7rem}

/* ---------- a downloadable config file ---------- */
.cfg{display:flex;gap:.9rem;align-items:center;justify-content:space-between;flex-wrap:wrap;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:.7rem .9rem;margin:.7rem 0}
.cfg .cfgname{font-family:var(--mono);font-size:.82rem;color:#101114}
.cfg p{margin:.2rem 0 0;font-size:.78rem;color:var(--dim);line-height:1.5}
.cfg .cfgget{white-space:nowrap;font-size:.78rem;font-weight:600;color:var(--accent-dk);
  border:1px solid var(--accent);border-radius:7px;padding:.3rem .7rem;background:var(--panel)}
.cfg .cfgget:hover{background:var(--accent);color:#fff;text-decoration:none}

/* the yes/no emphasis used in the split tables, also needed in ordinary doc tables */
main.doc td b.yes{color:var(--accent-dk)} main.doc td b.no{color:var(--red)}
main.doc .verdict{white-space:nowrap}

/* ============================================================================
   influences.sgit.ai — the register's own components.
   Everything above this line is the shared network stylesheet. Everything below
   exists because this site has a shape the siblings do not: tiered entries, a
   seven-block format, trace tables with a per-row verdict, and quotations that
   have to declare whose words they are.
   ========================================================================= */

/* ---------- tier, kind and status badges ---------- */
.badges{display:flex;gap:.4rem;flex-wrap:wrap;align-items:center;margin:.2rem 0 1.1rem}
.tierb,.kindb,.statusb{font-size:.66rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  border-radius:99px;padding:.2rem .6rem;white-space:nowrap;border:1px solid var(--line2)}
a.tierb:hover,a.statusb:hover{text-decoration:none;filter:brightness(.94)}
.tb-traced{color:var(--accent-dk);border-color:rgba(15,118,110,.4);background:rgba(15,118,110,.09)}
.tb-stated{color:var(--warm);border-color:rgba(180,83,9,.4);background:rgba(180,83,9,.09)}
.tb-discovered{color:#3b4c9e;border-color:rgba(59,76,158,.35);background:rgba(59,76,158,.08)}
.kindb{color:var(--dim);background:var(--panel2);font-weight:600;letter-spacing:.06em;text-transform:none;
  font-size:.7rem}
.kb-disc{color:#3b4c9e;background:rgba(59,76,158,.07);border-color:rgba(59,76,158,.25)}
.statusb{color:var(--dim2);background:var(--panel);font-weight:600;letter-spacing:.06em;text-transform:none;
  font-size:.7rem}
h3 .tierb{margin-left:.5rem;vertical-align:middle}

/* ---------- the seven blocks ---------- */
/* The block number is set as a label rather than folded into the heading text so the
   heading still reads as prose in the markdown twin, where there is no room for it. */
main.doc h2 .bn{display:inline-block;font-family:var(--mono);font-size:.6rem;font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;color:var(--warm);border:1px solid rgba(180,83,9,.3);
  background:rgba(180,83,9,.06);border-radius:99px;padding:.12rem .5rem;margin-right:.55rem;
  vertical-align:middle;position:relative;top:-.12em}

/* ---------- block 1: the anchor ---------- */
.anchorline{font-family:var(--serif);font-size:1.14rem;color:#101114;line-height:1.5;margin:.4rem 0 .8rem}
.anchorlinks{display:flex;gap:.5rem;flex-wrap:wrap;margin:.7rem 0}

/* ---------- block 2: quotations, which must say whose they are ---------- */
/* The data-quote attribute is not decoration: validate.js reads it, and a blockquote
   without one fails the release. The left rule is teal for the founder's own words and
   amber for a third party's, so the distinction the licence depends on is visible on
   the page and not only in the source. */
main.doc blockquote{margin:1.1rem 0;padding:.85rem 1.1rem;background:var(--panel);
  border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:0 11px 11px 0;
  font-family:var(--serif);font-size:1.02rem;line-height:1.6;color:#26282d;box-shadow:var(--shadow)}
main.doc blockquote[data-quote]:not([data-quote="founder"]){border-left-color:var(--warm)}
main.doc blockquote footer{display:block;margin-top:.55rem;font-family:var(--sans);font-size:.74rem;
  color:var(--dim2);font-style:normal}
main.doc blockquote footer code{font-size:.92em;overflow-wrap:anywhere}
main.doc .qnote{font-size:.88rem;color:var(--dim);margin:-.4rem 0 1.1rem;padding-left:1.1rem;
  border-left:1px dashed var(--line2)}

/* ---------- block 3: the principle ---------- */
.principle{background:linear-gradient(180deg,rgba(15,118,110,.07),rgba(15,118,110,.03));
  border:1px solid rgba(15,118,110,.25);border-radius:12px;padding:1.05rem 1.25rem;margin:.6rem 0 1rem}
.principle p{margin:0;font-family:var(--serif);font-size:1.16rem;line-height:1.55;color:#10302c}
.principle-inline{font-family:var(--serif);font-size:1.02rem;color:#10302c;margin:.2rem 0 .7rem}

/* ---------- block 4: the trace table ---------- */
table.trace td:first-child{font-weight:600;color:#101114}
.rowstate{font-size:.64rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  border-radius:99px;padding:.16rem .55rem;white-space:nowrap;border:1px solid var(--line2)}
.rs-yes{color:var(--accent-dk);border-color:rgba(15,118,110,.4);background:rgba(15,118,110,.09)}
.rs-part{color:var(--yellow);border-color:rgba(161,98,7,.35);background:rgba(161,98,7,.08)}
.rs-no{color:var(--red);border-color:rgba(185,28,28,.32);background:rgba(185,28,28,.06)}

/* the link-out pointer that stands where a trace table would be */
.pointer{border:1px dashed var(--line2);border-radius:12px;background:var(--panel2);
  padding:1rem 1.15rem;margin:.6rem 0 1rem}
.pointer .pk{font-size:.64rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--dim2);margin-bottom:.4rem}
.pointer p{margin:0 0 .8rem;font-size:.93rem;color:#34363c;line-height:1.6}

/* ---------- block 6: the checklist ---------- */
ul.checklist{list-style:none;padding-left:0;margin:1rem 0}
ul.checklist li{position:relative;padding:.5rem .8rem .5rem 2.1rem;margin:.4rem 0;
  background:var(--panel);border:1px solid var(--line);border-radius:9px;font-size:.92rem;line-height:1.55}
ul.checklist li::before{content:"?";position:absolute;left:.75rem;top:.5rem;width:1.05rem;height:1.05rem;
  border-radius:50%;background:var(--accent);color:#fff;font:700 .7rem/1.05rem var(--sans);text-align:center}

/* ---------- block 7 and /library/ ---------- */
ul.library{padding-left:1.15rem}
ul.library li{margin:.45rem 0;font-size:.92rem;line-height:1.55;color:#34363c}
ul.relations{padding-left:1.15rem}
ul.relations li{margin:.35rem 0;font-size:.93rem}

/* ---------- the map ---------- */
pre.mermaid{background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:1.1rem;margin:1.2rem 0;overflow-x:auto;text-align:center;
  font-family:var(--mono);font-size:.72rem;line-height:1.5;color:var(--dim);box-shadow:var(--shadow)}
pre.mermaid svg{max-width:100%;height:auto}

/* ---------- tier legend, on /tiers/ and the front page ---------- */
.tiercards{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin:1.4rem 0}
.tiercard{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:1rem 1.15rem;
  box-shadow:var(--shadow);border-top:3px solid var(--line2)}
.tiercard.t-traced{border-top-color:var(--accent)}
.tiercard.t-stated{border-top-color:var(--warm)}
.tiercard.t-discovered{border-top-color:#3b4c9e}
.tiercard .n{font-family:var(--serif);font-size:2rem;line-height:1;color:#101114}
.tiercard h3{margin:.35rem 0 .4rem;font-size:.95rem}
.tiercard p{margin:0;font-size:.83rem;color:var(--dim);line-height:1.55}

/* ---------- articles ---------- */
/* Same component as sgit.ai's article list, so the network reads as one thing. */
.chip{display:inline-block;font-family:var(--mono);font-size:.64rem;letter-spacing:.03em;
  color:var(--accent-dk);border:1px solid rgba(15,118,110,.28);background:rgba(15,118,110,.06);
  border-radius:99px;padding:.08rem .45rem;margin-right:.3rem}
.chips{margin:.2rem 0 .5rem}
.artlist{display:grid;gap:.8rem;margin:1.4rem 0}
a.art{display:block;background:var(--panel);border:1px solid var(--line);border-radius:10px;
  padding:1rem 1.15rem;box-shadow:var(--shadow);color:var(--fg)}
a.art:hover{border-color:var(--accent);text-decoration:none}
a.art b{display:block;font-size:1.06rem;letter-spacing:-.01em;margin-bottom:.15rem}
a.art .art-date{display:block;font-family:var(--mono);font-size:.68rem;color:var(--dim2);margin-bottom:.45rem}
a.art .art-sum{display:block;color:var(--dim);font-size:.9rem;line-height:1.6}
a.art .chips{display:block;margin-top:.55rem}
main.doc p.artmeta{font-size:.8rem;color:var(--dim2);margin:.1rem 0 .5rem}
main.doc p.artmeta .art-date{font-family:var(--mono)}
/* an article is prose, so it gets a narrower measure than a reference page */
main.doc.article{max-width:760px}

/* ---------- the front page: ideas, quotes, surprises ---------- */
/* The home page's job is to make somebody want to read an entry. These three components
   carry that: the principle a reader can take away, the sentence that made it land, and
   the thing about the register that is genuinely unexpected. */
.ideas{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  max-width:1160px;margin:0 auto;padding:0 1.1rem}
a.idea{display:block;background:var(--panel);border:1px solid var(--line);border-radius:12px;
  border-left:3px solid var(--accent);padding:1.05rem 1.2rem;color:var(--fg);box-shadow:var(--shadow)}
a.idea:hover{border-color:var(--accent);text-decoration:none}
a.idea .who{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;margin-bottom:.5rem}
a.idea .who b{font-size:.9rem;color:#101114}
a.idea .pr{font-family:var(--serif);font-size:1.06rem;line-height:1.5;color:#10302c;margin:0}
a.idea .go{display:inline-block;margin-top:.6rem;font-size:.75rem;color:var(--accent-dk);font-weight:600}

.quotewall{display:grid;gap:.8rem;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));
  max-width:1160px;margin:0 auto;padding:0 1.1rem}
.qcard{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:1.1rem 1.25rem;
  box-shadow:var(--shadow);display:flex;flex-direction:column}
.qcard blockquote{margin:0 0 .7rem;padding:0;border:0;background:none;box-shadow:none;
  font-family:var(--serif);font-size:1.08rem;line-height:1.55;color:#26282d}
.qcard blockquote footer{display:block;margin-top:.5rem;font-family:var(--sans);font-size:.72rem;
  color:var(--dim2)}
.qcard .why{margin:0;font-size:.85rem;color:var(--dim);line-height:1.6}
.qcard .why a{font-weight:600}

.surprises{max-width:1000px;margin:0 auto;padding:0 1.1rem}
.surprise{display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:start;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:1rem 1.2rem;margin:.7rem 0;box-shadow:var(--shadow)}
.surprise .n{font-family:var(--serif);font-size:1.9rem;line-height:1;color:var(--line2)}
.surprise h3{margin:0 0 .35rem;font-size:1rem;color:#101114}
.surprise p{margin:0;font-size:.9rem;color:#34363c;line-height:1.6}
.surprise .go{display:inline-block;margin-top:.5rem;font-size:.75rem;color:var(--accent-dk);font-weight:600}
@media (max-width:560px){.surprise{grid-template-columns:1fr}.surprise .n{display:none}}
main.doc p.byline{font-size:.85rem;color:var(--dim);margin:-.6rem 0 1rem}
main.doc p.byline a{font-weight:600}
/* the hero's byline: whose register this is, and where to read more about him */
header.hero .wholine{max-width:760px;margin:-.7rem auto 1.7rem;font-size:.82rem;color:var(--dim2);
  line-height:1.8}
header.hero .wholine a{color:var(--accent-dk);font-weight:600}
