:root{color-scheme:light;--bg:#f2f5f7;--paper:#fff;--ink:#172b3c;--muted:#506678;--line:#d1dde4;--accent:#116a70;--soft:#e5f2ef;--nav:#152e40;--amber:#a34816;--warm:#fff1e5;--mono:Consolas,'Cascadia Code',monospace}
:root[data-theme=dark]{color-scheme:dark;--bg:#10212d;--paper:#192e3d;--ink:#e7f0f5;--muted:#b1c5d2;--line:#385365;--accent:#80d2c5;--soft:#1e4548;--nav:#091923;--amber:#ffc18d;--warm:#443324}
*{box-sizing:border-box}html{scroll-padding-top:110px}body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.75 'Segoe UI',Arial,sans-serif}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select,textarea,summary{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:var(--accent);text-underline-offset:4px}button,input,select,textarea{border:1px solid var(--line);border-radius:8px;background:var(--paper)}button{min-height:44px;padding:8px 15px;font-size:14px;font-weight:650;transition:border-color .18s}button:hover{background:var(--soft);border-color:var(--accent)}button:disabled{opacity:.4;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid var(--amber);outline-offset:3px}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(29px,3vw,43px);line-height:1.2;letter-spacing:-.035em;margin-bottom:18px}h2{font-size:25px;line-height:1.3;letter-spacing:-.025em;margin:35px 0 17px}h3{font-size:18px;line-height:1.45;margin:22px 0 10px}p{margin-bottom:16px}li{margin:8px 0}ul,ol{padding-left:25px}main{min-width:0;max-width:1180px;padding:36px clamp(18px,4vw,60px) 90px}article{max-width:820px}header{position:sticky;top:0;z-index:20;background:var(--paper);border-bottom:1px solid var(--line);display:flex;gap:15px;align-items:center;justify-content:space-between;padding:12px 24px;min-height:78px}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink);line-height:1.3;font-size:17px;font-weight:750;letter-spacing:-.03em}.brand-icon{display:grid;place-items:center;border-radius:9px;background:var(--nav);color:#c5e8dc;width:38px;height:38px;font:700 18px var(--mono)}.brand small{display:block;font-size:11px;letter-spacing:.06em;color:var(--muted);font-weight:500}header nav,.tools{display:flex;gap:5px;align-items:center}header nav a{padding:9px 11px;font-size:14px;text-decoration:none;color:var(--muted);font-weight:650;border-radius:7px;min-height:44px;display:flex;align-items:center}header nav a[aria-current=page]{color:var(--accent);background:var(--soft)}.tools button{white-space:nowrap;padding:8px 11px}.layout{display:grid;grid-template-columns:282px minmax(0,1fr);max-width:1560px;margin:auto}.sidebar{position:sticky;top:79px;align-self:start;height:calc(100dvh - 79px);padding:26px 22px;overflow:auto;border-right:1px solid var(--line)}.sidebar input{width:100%;padding:10px 12px;font-size:14px}.sidebar summary{font-size:14px;font-weight:700;cursor:pointer;padding:11px 0}.sidebar a{display:flex;gap:10px;padding:9px 10px;margin:3px 0;text-decoration:none;font-size:14px;line-height:1.5;color:var(--ink);border-radius:7px}.sidebar a.active{background:var(--nav);color:#fff}.sidebar a:hover:not(.active){background:var(--soft)}.sidebar .num{font-family:var(--mono);font-size:11px;color:var(--muted);min-width:20px}.sidebar .active .num{color:#baded8}.eyebrow{font:650 12px/1.5 'Segoe UI',sans-serif;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:12px}.lead{font-size:19px;line-height:1.6;color:var(--muted)}.muted,.caption{font-size:14px;color:var(--muted);line-height:1.6}.progress{height:5px;background:var(--line);border-radius:5px;overflow:hidden;margin:12px 0}.progress i{display:block;height:100%;background:var(--accent);transition:width .2s}.goal,.card,.lab,.quiz,.recall,.figure,.warning{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:22px 25px;margin:24px 0}.goal{background:var(--soft);border-left:4px solid var(--accent)}.warning{background:var(--warm);border-left:4px solid var(--amber);font-size:15px}.goal p:last-child,.warning p:last-child,.card p:last-child{margin-bottom:0}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.grid .card{margin:0}.card h2,.card h3,.lab h2,.quiz h2,.recall h2{margin-top:0}.pill{display:inline-block;font-size:12px;line-height:1.6;padding:3px 8px;background:var(--soft);color:var(--accent);border-radius:5px;margin:0 4px 6px 0}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:15px 0}.primary{background:var(--accent);color:var(--paper);border-color:var(--accent)}[data-theme=dark] .primary{color:#10212d}.primary:hover{filter:brightness(.93);background:var(--accent)}.lesson-nav{display:flex;gap:15px;justify-content:space-between;border-top:1px solid var(--line);padding-top:22px;margin-top:38px;flex-wrap:wrap}code{font: .88em var(--mono);background:var(--soft);padding:2px 5px;border-radius:4px;overflow-wrap:anywhere}pre{background:#142d40;color:#edf5f7;padding:18px 22px;overflow:auto;border-radius:10px;font:14px/1.8 var(--mono);margin:20px 0;max-width:100%}pre code{background:none;padding:0;font:inherit}.toc{display:flex;gap:8px;flex-wrap:wrap;margin:22px 0}.toc a{font-size:13px;padding:6px 10px;background:var(--paper);border:1px solid var(--line);border-radius:6px}.figure{margin-left:0;margin-right:0}.figure button{margin-top:14px}.figure figcaption{font-size:14px;color:var(--muted);margin-top:16px}.diagram{display:grid;gap:9px;text-align:center}.diagram .node{padding:13px 15px;border:1px solid var(--accent);border-radius:8px;background:var(--soft);position:relative}.diagram .arrow{font:20px/1 var(--mono);color:var(--accent)}.diagram.links{grid-template-columns:1fr 1fr}.diagram.links .node:nth-child(3){grid-column:1/-1}.diagram.permissions{grid-template-columns:repeat(3,1fr)}.diagram.permissions .node:last-child{grid-column:1/-1}.diagram.states .node:first-child{border-style:dashed}.diagram.tree{margin-left:10px;border-left:2px solid var(--line);padding-left:15px;text-align:left}.diagram.tree .node:nth-child(3){margin-left:20px}.diagram.tree .node:nth-child(5){margin-left:40px}.diagram.tree .node:nth-child(7){margin-left:60px}.lab{border-top:3px solid var(--accent)}.controls{display:flex;gap:12px;align-items:end;flex-wrap:wrap}.controls label{display:grid;gap:5px;font-size:13px;color:var(--muted);flex:1;min-width:130px}.controls input,.controls select{padding:9px 11px;width:100%;min-height:44px}.controls textarea{width:100%;min-height:120px;padding:12px;line-height:1.5;font-family:var(--mono)}.controls .wide{flex-basis:100%}.lab-output{margin-top:22px}.step-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.step-controls input{flex:1;min-width:100px;accent-color:var(--accent)}.cells{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.cell{font:16px var(--mono);background:var(--soft);padding:13px;border:1px solid var(--accent);border-radius:7px;min-width:48px;text-align:center}.hit{color:var(--accent);font-weight:700}.fault{color:var(--amber);font-weight:700}.timeline{display:flex;gap:3px;overflow:auto;margin:20px 0;padding-bottom:8px}.slice{flex:0 0 auto;border-radius:6px;border:1px solid var(--accent);background:var(--soft);padding:8px 10px;text-align:center;min-width:66px}.slice small{display:block;font:11px var(--mono)}.table-wrap{overflow:auto;max-width:100%;margin:18px 0;border:1px solid var(--line);border-radius:8px}table{width:100%;border-collapse:collapse;font-size:14px;background:var(--paper)}th,td{padding:11px 13px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}th{background:var(--soft);font-weight:650}tr:last-child td{border-bottom:0}.quiz fieldset{border:0;border-top:1px solid var(--line);padding:20px 0 4px;margin:20px 0}.quiz legend{padding:0 0 8px;font-weight:650;line-height:1.55}.quiz label{display:flex;gap:12px;align-items:start;padding:10px 12px;background:var(--bg);border:1px solid var(--line);border-radius:7px;margin:8px 0;cursor:pointer;font-size:15px}.quiz input{margin-top:7px;accent-color:var(--accent);width:17px;height:17px;flex:none}.feedback{border-left:3px solid var(--accent);padding:12px 15px;background:var(--soft);margin:15px 0;font-size:15px}.feedback.wrong{border-color:var(--amber);background:var(--warm)}textarea.note{width:100%;min-height:150px;padding:15px;background:var(--bg);line-height:1.65}.saved{font-size:12px;color:var(--muted)}.checkline{display:flex;align-items:start;gap:12px;padding:9px 0}.checkline input{margin-top:8px;width:18px;height:18px;accent-color:var(--accent);flex:none}.glossary-item{padding:20px 0;border-bottom:1px solid var(--line)}.glossary-item h2{margin:0 0 8px;font-size:20px}.glossary-item p{margin-bottom:8px}input.search{width:100%;padding:12px 15px;min-height:46px}.term-button{border:0;border-bottom:1px dotted var(--accent);padding:0;background:transparent;color:var(--accent);font:inherit;border-radius:0;min-height:0;text-align:left}.skip{position:fixed;top:-200px;left:10px;z-index:100;padding:14px;background:var(--paper)}.skip:focus{top:10px}#notice{position:fixed;bottom:22px;right:22px;z-index:80;max-width:min(420px,calc(100vw - 44px));background:var(--nav);color:#fff;border-radius:9px;font-size:14px;padding:0}#notice:not(:empty){padding:14px 20px}dialog{background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:14px;max-width:min(1100px,95vw);max-height:90dvh;width:100%;padding:28px}dialog::backdrop{background:#071722b8}.dialog-top{display:flex;justify-content:space-between;align-items:start;gap:20px;margin-bottom:25px}.dialog-top h2{margin:0}dialog .diagram{font-size:clamp(18px,3vw,28px)}.status{font-size:12px;color:var(--amber);font-weight:700}.footer{border-top:1px solid var(--line);padding-top:20px;margin-top:40px;color:var(--muted);font-size:12px}.menu{display:none}.empty{padding:20px;color:var(--muted)}.source-path{font-family:var(--mono);font-size:12px;overflow-wrap:anywhere}.section-body{margin-bottom:28px}.section-body p{margin-bottom:16px}.diagram-label{font:12px var(--mono);color:var(--muted)}.outline{padding:14px 0;border-bottom:1px solid var(--line)}.outline a{font-weight:650;text-decoration:none}.outline p{margin:5px 0;font-size:14px;color:var(--muted)}
@media(max-width:1150px){header{flex-wrap:wrap;gap:8px;padding:10px 18px}.brand{margin-right:auto}header nav{order:3;width:100%;overflow:auto}header nav a{white-space:nowrap;padding:8px 12px}.sidebar{top:128px;height:calc(100dvh - 128px)}.layout{grid-template-columns:255px minmax(0,1fr)}html{scroll-padding-top:145px}}
@media(max-width:760px){body{font-size:16px}.layout{display:block}.menu{display:block}.sidebar{display:none;position:static;height:auto;max-height:65dvh;border-bottom:1px solid var(--line);padding:18px}.sidebar.open{display:block}header{padding:9px 12px}.brand{font-size:15px}.brand-icon{width:31px;height:31px;font-size:15px}.brand small{font-size:10px}.tools button{font-size:12px;padding:6px 9px}header nav{gap:0}header nav a{font-size:12px;padding:7px 9px}.grid{grid-template-columns:1fr}main{padding-top:25px}.goal,.card,.lab,.quiz,.recall,.warning,.figure{padding:18px;margin:20px 0}.controls{display:grid;grid-template-columns:1fr 1fr}.controls label{min-width:0}.controls .wide{grid-column:1/-1}.controls button{grid-column:1/-1}.diagram.permissions{grid-template-columns:1fr}.diagram.links{grid-template-columns:1fr}.diagram.links .node:nth-child(3){grid-column:auto}h2{font-size:23px}.table-wrap{margin:15px -2px}th,td{padding:9px}.tools{gap:4px}.row{gap:8px}dialog{padding:18px}.quiz label{padding:10px;font-size:14px}.timeline{max-width:100%}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
.lab[data-lab=pipeline] td:nth-child(2){white-space:pre-wrap;font-family:var(--mono)}
.practice-guide{border-top:1px solid var(--line);padding:13px 0}.practice-guide summary{cursor:pointer;font-size:15px;font-weight:650;min-height:44px;padding:8px 0}.practice-guide p{font-size:15px}.practice-guide pre{font-size:13px;line-height:1.8}
@media print{header,.sidebar,.tools,.menu,button,.toc,.step-controls{display:none!important}.layout{display:block}main,article{max-width:none;padding:0}body{background:#fff;color:#000;font-size:12pt}.card,.goal,.figure,.lab,.quiz{break-inside:avoid;box-shadow:none}pre{white-space:pre-wrap}.quiz .feedback{display:block}}
