:root{
  --ink:#16161a; --muted:#67676f; --faint:#9a9aa4; --hair:#e7e7ec;
  --paper:#fff; --wash:#fafafc; --amber:#b98a3c; --amber-wash:#fbf6ec;
  --serif:'Fraunces',Georgia,serif; --sans:'Instrument Sans',-apple-system,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
  --panel:392px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-font-smoothing:antialiased}
body{font-family:var(--sans);color:var(--ink);background:var(--paper);font-size:15px;line-height:1.5}
h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.06;letter-spacing:-.015em}
a{color:inherit}
.kicker{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.2em;color:var(--muted);text-transform:uppercase}
.spec{width:26px;height:3px;border-radius:2px;display:inline-block;
  background:linear-gradient(90deg,#d8e5f8,#a9c3f0,#7d9fe0,#5b7fc7)}

/* ---------- chrome ---------- */
header{position:sticky;top:0;z-index:40;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--hair)}
.hbar{display:flex;align-items:center;gap:22px;padding:9px 22px}
.brand{display:flex;align-items:center;gap:10px;font-family:var(--sans);font-weight:600;
  font-size:13px;letter-spacing:.26em;white-space:nowrap}
nav{display:flex;gap:4px}
nav button{font-family:var(--sans);font-size:13.5px;padding:6px 14px;border:1px solid transparent;
  background:none;border-radius:999px;cursor:pointer;color:var(--muted)}
nav button:hover{background:var(--wash);color:var(--ink)}
nav button[aria-selected="true"]{background:var(--ink);color:#fff;font-weight:500}
.hspace{flex:1}
.modes{display:flex;border:1px solid var(--hair);border-radius:999px;overflow:hidden}
.modes button{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;
  padding:7px 13px;border:none;background:none;cursor:pointer;color:var(--muted)}
.modes button[aria-selected="true"]{background:var(--amber-wash);color:var(--amber);font-weight:500}
.askbtn{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  padding:9px 17px;border:1px solid var(--ink);background:var(--ink);color:#fff;border-radius:999px;cursor:pointer}
.askbtn:hover{background:#000}

/* ---------- layout ---------- */
main{display:grid;grid-template-columns:minmax(0,1fr) var(--panel);align-items:start}
.left{padding:18px 22px 60px;min-width:0}
.beam{position:absolute;pointer-events:none;height:200px;left:-10%;right:-10%;z-index:-1;
  background:linear-gradient(90deg,rgba(216,229,248,0),rgba(169,195,240,.34) 40%,rgba(125,159,224,.28) 75%,rgba(125,159,224,0));
  filter:blur(26px);transform:rotate(-12deg)}
.ptitle{font-size:28px;font-weight:380;margin-top:4px}
.psub{display:none}

section{margin-top:20px}
.sechead{display:flex;align-items:baseline;gap:10px;margin-bottom:7px}
.sechead h2{font-size:16px}
.sechead .note{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;color:var(--faint);text-transform:uppercase}

/* ---------- map ---------- */
.mapwrap{border:1px solid var(--hair);border-radius:10px;background:#fff;padding:4px 6px;
  box-shadow:0 1px 2px rgba(22,22,26,.04),0 8px 24px rgba(22,22,26,.05);overflow-x:auto}
.mapwrap+.mapwrap{margin-top:0;border-top:0;border-radius:0 0 10px 10px}
.mapwrap.first{border-radius:10px 10px 0 0}
.mapwrap.mid{border-radius:0;border-top:0}
.maplabel{font-family:var(--mono);font-size:8.5px;letter-spacing:.14em;color:var(--faint);
  text-transform:uppercase;padding:6px 8px 0}
.mapwrap svg{width:100%!important;height:auto;min-width:900px}
.mtxt{font-family:'Instrument Sans',sans-serif;fill:#16161a}
.mmono{font-family:'IBM Plex Mono',monospace;letter-spacing:.14em;fill:#9a9aa4}
.mbadge{font-family:'IBM Plex Mono',monospace;font-size:8px;letter-spacing:.08em;fill:#b98a3c}
.mlabel{font-family:'IBM Plex Mono',monospace;font-size:8.5px;letter-spacing:.06em;fill:#67676f}
.mkey{font-family:'IBM Plex Mono',monospace;font-size:7px;fill:#9a9aa4}
.mchip{font-family:'IBM Plex Mono',monospace;font-size:6.8px;letter-spacing:.1em;fill:#9a9aa4}
g.nd{cursor:pointer}
g.nd .hit{pointer-events:all}
g.nd:hover rect:not(.hit),g.nd:hover polygon{stroke-width:1.9}
g.nd:hover text{font-weight:600}
g.nd.sel rect:not(.hit),g.nd.sel polygon{stroke:var(--amber);stroke-width:2}
g.nd.sel rect:not(.hit){fill:#fffdf7}
.legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin-top:7px;
  font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;color:var(--muted);text-transform:uppercase}
.legend i{display:inline-block;width:22px;height:12px;border:1px solid var(--ink);border-radius:4px;
  margin-right:7px;vertical-align:-2px;font-style:normal}
.legend i.ext{border-style:dashed;border-color:var(--faint)}
.legend i.dec{width:14px;height:14px;border:none;background:var(--amber-wash);
  box-shadow:inset 0 0 0 1px var(--amber);transform:rotate(45deg);border-radius:2px}

/* ---------- steps ---------- */
.grp{margin-top:9px}
.grphead{display:flex;align-items:baseline;gap:9px;padding:4px 0 5px;border-bottom:1px solid var(--hair)}
.grphead .gid{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.18em;color:var(--amber);text-transform:uppercase}
.grphead .gt{font-weight:600;font-size:13.5px}
.grphead .gs{font-family:var(--mono);font-size:9px;letter-spacing:.08em;color:var(--faint);margin-left:auto;text-transform:uppercase}
.step{display:flex;gap:11px;padding:5px 8px;border-bottom:1px solid #f2f2f5;cursor:pointer;
  border-radius:7px;align-items:baseline}
.step:hover{background:var(--wash)}
.step.sel{background:#fffdf7;box-shadow:inset 2px 0 0 var(--amber)}
.step .n{font-family:var(--mono);font-size:10.5px;color:var(--faint);flex:none;width:20px}
.step .b{font-size:13px;line-height:1.45}
.step .b b{font-weight:600}
.scr{font-family:var(--mono);font-size:9px;letter-spacing:.05em;color:var(--muted);background:var(--wash);
  border:1px solid var(--hair);border-radius:4px;padding:1px 6px;white-space:nowrap}
.kpi{font-family:var(--mono);font-size:9px;letter-spacing:.05em;color:var(--amber);white-space:nowrap}
.gapchip{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;
  border-radius:50%;border:1px dashed var(--amber);color:var(--amber);font-family:var(--mono);
  font-size:9px;vertical-align:-3px}

/* ---------- detail panel ---------- */
.panel{position:sticky;top:45px;height:calc(100vh - 45px);border-left:1px solid var(--hair);
  background:var(--wash);overflow-y:auto;padding:18px 20px 50px}
.panel .empty{color:var(--faint);font-size:13px;line-height:1.6;margin-top:34px;text-align:center}
.panel .empty svg{opacity:.5;margin-bottom:14px}
.pt{font-family:var(--serif);font-size:21px;line-height:1.15;margin-top:6px}
.pmeta{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.tag{font-family:var(--mono);font-size:9px;letter-spacing:.11em;text-transform:uppercase;
  padding:4px 9px;border-radius:999px;border:1px solid var(--hair);background:#fff;color:var(--muted)}
.tag.amber{border-color:var(--amber);color:var(--amber);background:var(--amber-wash)}
.tag.ink{background:var(--ink);border-color:var(--ink);color:#fff}
.pwhat{font-size:13px;line-height:1.55;color:var(--muted);margin-top:10px}
.blk{margin-top:15px}
.blk>h3{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;
  color:var(--amber);margin-bottom:9px}
.src{background:#fff;border:1px solid var(--hair);border-radius:9px;padding:9px 11px;margin-bottom:6px}
.src .sh{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:9px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.src .sh .ty{color:var(--amber);font-weight:500}
.src .sh .play{margin-left:auto;font-family:var(--mono);font-size:9px;letter-spacing:.06em;
  border:1px solid var(--ink);background:var(--ink);color:#fff;border-radius:999px;padding:3px 10px;cursor:pointer}
.src .sh .play:hover{background:#000}
.src .q{font-size:12.5px;line-height:1.55;color:var(--ink);margin-top:8px;
  padding-left:10px;border-left:2px solid var(--hair);font-style:italic}
.src .n{font-size:12px;line-height:1.5;color:var(--muted);margin-top:6px}
.vid{margin-top:9px;border-radius:9px;overflow:hidden;border:1px solid var(--hair);background:#000;
  aspect-ratio:16/9}
.vid iframe{width:100%;height:100%;display:block;border:0}
.gapbox{border:1px dashed var(--amber);border-radius:11px;padding:12px 14px;background:#fdfaf3}
.gapbox .gt{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.16em;
  color:var(--amber);text-transform:uppercase}
.gapbox .gd{font-size:12.5px;line-height:1.55;color:var(--muted);margin-top:7px}
.gapbox .gc{font-size:11.5px;color:var(--faint);margin-top:7px;font-style:italic}
.jump{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;
  border:1px solid var(--hair);background:#fff;border-radius:999px;padding:6px 13px;cursor:pointer;color:var(--muted)}
.jump:hover{border-color:var(--ink);color:var(--ink)}

/* mode emphasis */
body[data-mode="validate"] .learnfirst{order:2}
body[data-mode="validate"] .srcfirst{order:1}
body[data-mode="learn"] .learnfirst{order:1}
body[data-mode="learn"] .srcfirst{order:2}
.pbody{display:flex;flex-direction:column}

/* ---------- chat ---------- */
.chat{position:fixed;right:0;top:0;bottom:0;width:min(520px,92vw);background:#fff;z-index:60;
  border-left:1px solid var(--hair);box-shadow:-18px 0 50px rgba(22,22,26,.13);
  transform:translateX(100%);transition:transform .22s ease;display:flex;flex-direction:column}
.chat.open{transform:none}
.chead{display:flex;align-items:center;gap:12px;padding:15px 20px;border-bottom:1px solid var(--hair)}
.chead h2{font-size:17px}
.chead .x{margin-left:auto;background:none;border:none;cursor:pointer;color:var(--faint);font-size:20px;line-height:1}
.clog{flex:1;overflow-y:auto;padding:18px 20px;display:flex;flex-direction:column;gap:16px}
.msg{font-size:13.5px;line-height:1.62}
.msg.u{align-self:flex-end;max-width:85%;background:var(--ink);color:#fff;padding:9px 14px;border-radius:14px 14px 3px 14px}
.msg.a{max-width:100%}
.msg.a .who{font-family:var(--mono);font-size:8.5px;letter-spacing:.18em;color:var(--amber);
  text-transform:uppercase;margin-bottom:6px}
.msg.a p{margin-bottom:9px}
.msg.a ul,.msg.a ol{margin:0 0 9px 18px}
.msg.a li{margin-bottom:4px}
.msg.a code{font-family:var(--mono);font-size:12px;background:var(--wash);padding:1px 5px;border-radius:4px}
.msg.a strong{font-weight:600}
.cite{display:inline-block;font-family:var(--mono);font-size:9px;letter-spacing:.04em;color:var(--amber);
  background:var(--amber-wash);border:1px solid #eadfc6;border-radius:5px;padding:1px 6px;margin:0 2px;cursor:pointer}
.cite:hover{background:#f6ecd8}
.cform{border-top:1px solid var(--hair);padding:13px 16px;display:flex;gap:9px;align-items:flex-end}
.cform textarea{flex:1;font-family:var(--sans);font-size:13.5px;line-height:1.5;border:1px solid var(--hair);
  border-radius:11px;padding:10px 12px;resize:none;max-height:120px;outline:none}
.cform textarea:focus{border-color:var(--ink)}
.cform button{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  border:1px solid var(--ink);background:var(--ink);color:#fff;border-radius:999px;padding:10px 16px;cursor:pointer}
.cform button:disabled{opacity:.4;cursor:default}
.sugg{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.sugg button{font-size:12px;text-align:left;border:1px solid var(--hair);background:#fff;border-radius:9px;
  padding:8px 11px;cursor:pointer;color:var(--muted);line-height:1.4}
.sugg button:hover{border-color:var(--amber);color:var(--ink)}
.scrim{position:fixed;inset:0;background:rgba(22,22,26,.18);z-index:55;opacity:0;pointer-events:none;transition:opacity .2s}
.scrim.on{opacity:1;pointer-events:all}
.blink{display:inline-block;width:7px;height:14px;background:var(--amber);vertical-align:-2px;animation:bl 1s steps(2) infinite}
@keyframes bl{0%,50%{opacity:1}51%,100%{opacity:0}}

@media (max-width:1100px){
  main{grid-template-columns:1fr}
  .panel{position:fixed;right:0;top:45px;width:min(430px,94vw);z-index:45;
    box-shadow:-14px 0 40px rgba(22,22,26,.12);transform:translateX(100%);transition:transform .2s}
  .panel.open{transform:none}
}

/* ---------- real source excerpts ---------- */
.openbtn{font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
  border:1px solid var(--hair);background:#fff;border-radius:999px;padding:5px 11px;cursor:pointer;
  color:var(--muted);margin-top:9px}
.openbtn:hover{border-color:var(--ink);color:var(--ink)}
.docshot{margin-top:9px;border:1px solid var(--hair);border-radius:8px;overflow:hidden;background:#fff}
.docshot img{display:block;width:100%;cursor:zoom-in}
.sheetbar{display:flex;align-items:center;gap:8px;margin-top:10px;
  font-family:var(--mono);font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
.sheetbar .tab{background:#fff;border:1px solid var(--hair);border-bottom-color:#fff;
  border-radius:5px 5px 0 0;padding:4px 9px;color:var(--ink);font-weight:500}
.sheetbar .fn{margin-left:auto}
table.sheet{width:100%;border-collapse:collapse;font-size:11px;background:#fff;
  border:1px solid var(--hair);table-layout:fixed}
table.sheet th,table.sheet td{border:1px solid #ececed;padding:4px 6px;text-align:left;
  vertical-align:top;word-wrap:break-word;line-height:1.4}
table.sheet th.cl{background:#f4f4f6;color:var(--faint);font-family:var(--mono);font-size:8.5px;
  text-align:center;font-weight:500;padding:2px}
table.sheet td.rn,table.sheet th.rn{background:#f4f4f6;color:var(--faint);font-family:var(--mono);
  font-size:8.5px;text-align:center;width:26px;padding:2px}
table.sheet tr.hdr th{background:var(--wash);font-weight:600;font-size:10.5px;color:var(--ink)}
table.sheet tr.on td{background:#fdf7e8;font-weight:500}
table.sheet tr.on td.rn{background:var(--amber);color:#fff}
.lb{position:fixed;inset:0;background:rgba(16,16,20,.9);z-index:90;overflow-y:auto;padding:0 0 40px;cursor:zoom-out}
.lbbar{position:sticky;top:0;display:flex;align-items:center;gap:14px;padding:12px 20px;
  background:rgba(16,16,20,.94);color:#fff;font-family:var(--mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;z-index:2}
.lbbar button{margin-left:auto;background:none;border:none;color:#fff;font-size:24px;cursor:pointer;line-height:1}
.lbimgs{max-width:1180px;margin:0 auto;padding:20px;display:flex;flex-direction:column;gap:18px}
.lbimgs img{width:100%;border-radius:6px;background:#fff;cursor:default}
