*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#fafafa;--surface:#fff;--text:#16171a;--muted:#666a72;--border:#e4e4e8;
  --accent:#4d7c0f;--accent-soft:#eef6dc;--pc:#4d7c0f;--pc-soft:#eef6dc;
  --header-h:60px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
}
html{scroll-behavior:smooth}
body{background:var(--bg);color:var(--text);font-family:var(--font);line-height:1.65;font-size:16px}
a{color:inherit}
code{font-family:var(--mono);font-size:.88em;background:#f1f1f3;border-radius:4px;padding:1px 6px}

/* header */
.top{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}
.top-in{max-width:1180px;margin:0 auto;height:var(--header-h);display:flex;align-items:center;gap:20px;padding:0 24px}
.back{font-size:13px;font-weight:600;text-decoration:none;color:var(--muted);display:inline-flex;gap:6px;align-items:center;white-space:nowrap}
.back:hover{color:var(--pc)}
.top-title{font-family:var(--mono);font-weight:800;font-size:16px;margin-left:auto;margin-right:auto}
.toc{display:flex;gap:18px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.toc a{text-decoration:none;color:var(--muted);padding:4px 0;border-bottom:2px solid transparent}
.toc a:hover,.toc a.on{color:var(--pc);border-color:var(--pc)}
.progress{position:absolute;left:0;bottom:-1px;height:2px;background:var(--pc);width:0}
@media(max-width:860px){.toc{display:none}.top-title{margin-right:0}}

/* hero */
.wrap{max-width:1180px;margin:0 auto;padding:0 24px}
.hero{padding:56px 0 24px;position:relative;overflow:hidden}
.hero::before{content:"";position:absolute;inset:-40% -10% auto auto;width:640px;height:640px;border-radius:50%;background:radial-gradient(circle,var(--pc-soft),transparent 66%);z-index:-1;animation:drift 14s ease-in-out infinite alternate}
@keyframes drift{from{transform:translate(0,0)}to{transform:translate(-60px,40px)}}
.badge{display:inline-block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;border-radius:4px;padding:4px 9px;background:var(--pc-soft);color:var(--pc)}
.hero h1{font-size:clamp(34px,6vw,60px);line-height:1.05;margin:14px 0 12px;letter-spacing:-.02em}
.hero .lede{font-size:clamp(16px,2vw,20px);color:var(--muted);max-width:62ch}
.hero .lede strong{color:var(--text)}
.links{display:flex;flex-wrap:wrap;gap:12px;margin:24px 0 0}
.btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;text-decoration:none;padding:10px 16px;border-radius:7px;border:1px solid var(--border);background:var(--surface);transition:transform .15s,border-color .15s}
.btn:hover{transform:translateY(-2px);border-color:var(--pc);color:var(--pc)}
.btn.primary{background:var(--pc);color:#fff;border-color:var(--pc)}
.btn.primary:hover{color:#fff;opacity:.9}

/* sections */
section.blk{padding:56px 0 8px;scroll-margin-top:calc(var(--header-h) + 8px)}
.eyebrow{font-size:12px;letter-spacing:.09em;text-transform:uppercase;color:var(--pc);font-weight:700;margin-bottom:8px}
h2.t{font-size:clamp(24px,3.4vw,34px);line-height:1.15;letter-spacing:-.01em;margin-bottom:12px}
p.sub{color:var(--muted);max-width:70ch;margin-bottom:24px}
p.sub strong{color:var(--text)}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px;transition:transform .2s,border-color .2s,box-shadow .2s}
.card:hover{transform:translateY(-3px);border-color:var(--pc);box-shadow:0 10px 28px rgba(0,0,0,.06)}
.card h3{font-size:15px;margin-bottom:6px}
.card p,.card li{font-size:13.5px;color:var(--muted)}
.card ul{padding-left:18px;margin-top:6px}
.card strong{color:var(--text)}
.ico{width:34px;height:34px;border-radius:8px;background:var(--pc-soft);color:var(--pc);display:flex;align-items:center;justify-content:center;font-size:17px;margin-bottom:12px;font-weight:700;font-family:var(--mono)}
.stat{text-align:left}
.stat .n{font-family:var(--mono);font-size:34px;font-weight:800;color:var(--pc);line-height:1.1}
.stat .l{font-size:12.5px;color:var(--muted);margin-top:4px}

/* diagram */
.diagram{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 14px 12px;overflow-x:auto}
.diagram svg{display:block;width:100%;height:auto;min-width:760px}
.diagram .cap{font-size:12px;color:var(--muted);padding:8px 8px 0}
.legend{display:flex;flex-wrap:wrap;gap:14px;font-size:11.5px;color:var(--muted);padding:6px 8px 4px}
.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-2px;border:1.5px solid}
.legend i.pl{border-style:dashed;background:#fff!important}
.edge{fill:none;stroke:#9aa0a8;stroke-width:1.6;transition:stroke .2s,stroke-width .2s,opacity .2s}
.edge.flow{stroke-dasharray:6 6;animation:dash 1.1s linear infinite}
.edge.back{stroke-dasharray:3 5;stroke:#b7bcc4}
@keyframes dash{to{stroke-dashoffset:-12}}
.node rect{transition:filter .2s,stroke-width .2s}
.node{cursor:default}
.node:hover rect{filter:drop-shadow(0 4px 8px rgba(0,0,0,.18));stroke-width:2.4}
svg.hl .edge{opacity:.15}
svg.hl .edge.on{opacity:1;stroke:var(--pc);stroke-width:2.6}
svg.hl .node{opacity:.35}
svg.hl .node.on{opacity:1}
.lane-t{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;fill:#8a8f98}
.elabel{font-size:10px;fill:#6b7078;font-family:ui-monospace,Menlo,monospace}

/* stepper */
.stepper{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}
.steps{display:flex;border-bottom:1px solid var(--border);overflow-x:auto;position:relative}
.step{flex:1;min-width:130px;background:none;border:0;border-right:1px solid var(--border);padding:14px 14px 12px;text-align:left;cursor:pointer;font:inherit;position:relative;color:var(--muted)}
.step:last-child{border-right:0}
.step b{display:block;font-family:var(--mono);font-size:11px;color:var(--pc);margin-bottom:2px}
.step span{font-size:13px;font-weight:600;color:var(--text)}
.step.on{background:var(--pc-soft)}
.step.on::after{content:"";position:absolute;left:0;bottom:0;height:3px;background:var(--pc);width:100%;transform-origin:left;animation:fill var(--dur,4.5s) linear forwards}
.stepper.paused .step.on::after{animation:none}
@keyframes fill{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.panels{position:relative;min-height:190px}
.panel{display:none;padding:22px 24px;animation:fadeUp .4s ease}
.panel.on{display:grid;grid-template-columns:1.1fr 1fr;gap:24px;align-items:start}
@media(max-width:760px){.panel.on{grid-template-columns:1fr}}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.panel h3{font-size:17px;margin-bottom:6px}
.panel p{color:var(--muted);font-size:14px;margin-bottom:8px}
.panel p strong{color:var(--text)}
.mock{font-family:var(--mono);font-size:12px;background:#16171a;color:#d7dae0;border-radius:8px;padding:14px 16px;overflow-x:auto;white-space:pre;line-height:1.55}
.mock .k{color:#a3e635}.mock .d{color:#8b9099}.mock .w{color:#fbbf24}.mock .r{color:#f87171}

/* morph (token transformation) */
.morph{background:#16171a;border-radius:12px;padding:18px 20px;font-family:var(--mono);font-size:13px;color:#d7dae0;overflow-x:auto}
.morph .row{display:flex;gap:12px;align-items:baseline;padding:6px 0;opacity:.28;transition:opacity .5s}
.morph .row.on{opacity:1}
.morph .tag{flex:0 0 118px;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:#8b9099}
.morph .txt{white-space:pre-wrap;word-break:break-word}
.morph mark{background:#3f6212;color:#ecfccb;border-radius:3px;padding:0 3px}
.morph mark.x{background:#7f1d1d;color:#fecaca}
.morph mark.b{background:#1e3a8a;color:#dbeafe}

/* bars */
.bars .br{display:grid;grid-template-columns:150px 1fr 96px;gap:12px;align-items:center;margin:9px 0;font-size:13px}
.bars .lab{color:var(--text);font-weight:600}
.bars .lab small{display:block;color:var(--muted);font-weight:400;font-size:11px}
.bars .tr{height:14px;background:#eceef1;border-radius:7px;overflow:hidden;position:relative}
.bars .tr i{display:block;height:100%;width:0;background:var(--pc);border-radius:7px;transition:width 1.2s cubic-bezier(.2,.8,.2,1)}
.bars .tr i.alt{background:#d97706}.bars .tr i.bad{background:#dc2626}.bars .tr i.mut{background:#9aa0a8}
.bars .val{font-family:var(--mono);font-size:12px;text-align:right;color:var(--muted)}
.bars .thr{position:absolute;top:-3px;bottom:-3px;width:2px;background:#dc2626}
@media(max-width:560px){.bars .br{grid-template-columns:96px 1fr 54px}}
.stack{display:flex;height:34px;border-radius:8px;overflow:hidden;background:#eceef1}
.stack i{display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#fff;width:0;transition:width 1.2s cubic-bezier(.2,.8,.2,1);white-space:nowrap;overflow:hidden;font-style:normal}
.stk-legend{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--muted);margin-top:8px}
.stk-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px}

/* table */
.tbl{width:100%;border-collapse:collapse;font-size:13px;background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;display:block;overflow-x:auto}
.tbl th,.tbl td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:top}
.tbl th{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);background:#f6f6f8}
.tbl tr:last-child td{border-bottom:0}
.tbl td:first-child{font-weight:600;white-space:nowrap}
.chip{display:inline-block;font-size:10.5px;font-weight:700;border-radius:4px;padding:2px 7px;font-family:var(--mono)}
.chip.ok{background:#e6f7ec;color:#15803d}.chip.mid{background:#fdf0dc;color:#b45309}.chip.no{background:#fdeceb;color:#b91c1c}.chip.in{background:#eaf1fb;color:#1d4ed8}

/* misc */
.callout{border-left:4px solid var(--pc);background:var(--pc-soft);padding:14px 18px;border-radius:0 8px 8px 0;font-size:14px;margin:16px 0}
.callout.warn{border-color:#d97706;background:#fdf0dc}
.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.tag-c{font-family:var(--mono);font-size:11px;border:1px solid var(--border);background:#fff;border-radius:5px;padding:3px 9px;color:var(--muted)}
.nextprev{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:56px 0 0;padding:28px 0;border-top:1px solid var(--border)}
.nextprev a{text-decoration:none;font-size:14px;font-weight:600;color:var(--muted);max-width:48%}
.nextprev a:hover{color:var(--pc)}
.nextprev small{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:600;color:#9aa0a8}
footer.f{border-top:1px solid var(--border);padding:22px 0 40px;font-size:13px;color:var(--muted);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}

/* reveal */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){
  .reveal{opacity:1;transform:none;transition:none}
  .edge.flow,.hero::before,.step.on::after{animation:none}
  html{scroll-behavior:auto}
}
