.nlab{--l-ground:#fbf8f6;--l-surface:#fff;--l-surface-2:#f6efea;--l-ink:#241c18;--l-ink-2:#5a4c45;--l-muted:#8a7a72;--l-rule:#ebe1db;--l-rule-strong:#d9ccc4;--l-accent:#f0502f;--l-accent-ink:#c23a1e;--l-accent-soft:#fde9e3;--l-success:#0a6e5c;--l-success-ink:#075247;--l-success-soft:#e4f1ec;--l-warn:#9c4a16;--l-warn-soft:#f8ebe1;--l-code-bg:#f7f1ed;--l-shadow:0 1px 2px #241c180d, 0 10px 30px -20px #241c1866;--f-display:"Archivo","Helvetica Neue",Arial,sans-serif;--f-body:"Source Serif 4",Georgia,"Times New Roman",serif;--f-mono:"IBM Plex Mono",ui-monospace,"Courier New",monospace}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .nlab{--l-ground:#17110e;--l-surface:#1f1813;--l-surface-2:#271e18;--l-ink:#f0e7e1;--l-ink-2:#c8b8ae;--l-muted:#9a8a80;--l-rule:#33271f;--l-rule-strong:#48372b;--l-accent:#ff7a5c;--l-accent-ink:#ff9c84;--l-accent-soft:#3a2018;--l-success:#57d2b3;--l-success-ink:#8ce4cb;--l-success-soft:#123029;--l-warn:#e09a63;--l-warn-soft:#31231a;--l-code-bg:#140f0b;--l-shadow:0 1px 2px #0006, 0 12px 30px -22px #000000e6}}:root[data-theme=dark] .nlab{--l-ground:#17110e;--l-surface:#1f1813;--l-surface-2:#271e18;--l-ink:#f0e7e1;--l-ink-2:#c8b8ae;--l-muted:#9a8a80;--l-rule:#33271f;--l-rule-strong:#48372b;--l-accent:#ff7a5c;--l-accent-ink:#ff9c84;--l-accent-soft:#3a2018;--l-success:#57d2b3;--l-success-ink:#8ce4cb;--l-success-soft:#123029;--l-warn:#e09a63;--l-warn-soft:#31231a;--l-code-bg:#140f0b;--l-shadow:0 1px 2px #0006, 0 12px 30px -22px #000000e6}.nlab{background:var(--l-ground);color:var(--l-ink);font-family:var(--f-body);font-size:16.5px;line-height:1.6}.nlab *{box-sizing:border-box}.nlab h1,.nlab h2,.nlab h3,.nlab h4{font-family:var(--f-display);text-wrap:balance;letter-spacing:-.015em;margin:0}.nlab p{margin:0}.nlab a{color:var(--l-accent-ink);text-decoration:none}.nlab a:hover{text-decoration:underline}.nlab code{font-family:var(--f-mono);background:var(--l-code-bg);border:1px solid var(--l-rule);color:var(--l-accent-ink);border-radius:4px;padding:1px 5px;font-size:.86em}.nlab :focus-visible{outline:2px solid var(--l-accent);outline-offset:2px}.nlab-shell{max-width:1180px;margin:0 auto;padding:22px 24px 90px}.nlab-crumbs{font-family:var(--f-display);color:var(--l-muted);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:18px;font-size:12.5px;display:flex}.nlab-crumbs .sep{opacity:.5}.nlab-crumbs .here{color:var(--l-ink);font-weight:600}.nlab-masthead{border-bottom:2px solid var(--l-ink);flex-direction:column;gap:15px;padding-bottom:22px;display:flex}.nlab-eyebrow{font-family:var(--f-display);letter-spacing:.16em;text-transform:uppercase;color:var(--l-accent-ink);flex-wrap:wrap;align-items:center;gap:10px;font-size:12px;font-weight:600;display:flex}.nlab-eyebrow .dot{background:var(--l-accent);border-radius:50%;width:5px;height:5px}.nlab-masthead h1{font-size:clamp(30px,5vw,46px);font-weight:800;line-height:1.04}.nlab-standfirst{color:var(--l-ink-2);max-width:64ch;font-size:18.5px}.nlab-mastfoot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;display:flex}.nlab-facts{border:1px solid var(--l-rule);background:var(--l-surface);border-radius:6px;flex-wrap:wrap;display:flex;overflow:hidden}.nlab-fact{border-right:1px solid var(--l-rule);padding:10px 18px}.nlab-fact:last-child{border-right:none}.nlab-fact dt{font-family:var(--f-display);letter-spacing:.14em;text-transform:uppercase;color:var(--l-muted);margin-bottom:2px;font-size:10px;font-weight:600}.nlab-fact dd{font-family:var(--f-display);color:var(--l-ink);margin:0;font-size:15px;font-weight:600}.nlab-cta{flex-wrap:wrap;gap:10px;display:flex}.nlab-btn{font-family:var(--f-display);cursor:pointer;border:1px solid #0000;border-radius:10px;align-items:center;gap:8px;padding:10px 18px;font-size:14px;font-weight:700;display:inline-flex}.nlab-btn.primary{background:var(--l-accent);color:#fff;box-shadow:var(--l-shadow)}.nlab-btn.primary:hover{filter:brightness(1.05);text-decoration:none}.nlab-btn.sec{background:var(--l-surface);border-color:var(--l-rule-strong);color:var(--l-ink)}.nlab-tabs{z-index:20;border-bottom:1px solid var(--l-rule);background:var(--l-ground);gap:2px;margin-top:20px;display:flex;position:sticky;top:56px;overflow-x:auto}.nlab-tab{font-family:var(--f-display);color:var(--l-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:12px 15px;font-size:14.5px;font-weight:600}.nlab-tab[aria-selected=true]{color:var(--l-ink);border-bottom-color:var(--l-accent)}.nlab-tab:hover{color:var(--l-ink)}.nlab-grid{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:44px;margin-top:28px;display:grid}@media (max-width:920px){.nlab-grid{grid-template-columns:1fr}.nlab-side{order:-1}}.nlab-panel{flex-direction:column;gap:38px;display:flex}.nlab-body>[data-tab]{display:none}.nlab-body[data-active=overview]>[data-tab=overview],.nlab-body[data-active=prereq]>[data-tab=prereq],.nlab-body[data-active=steps]>[data-tab=steps],.nlab-body[data-active=resources]>[data-tab=resources],.nlab-body[data-active=discussion]>[data-tab=discussion]{display:flex}.nlab section{flex-direction:column;gap:16px;scroll-margin-top:120px;display:flex}.nlab .sec-kicker{font-family:var(--f-display);letter-spacing:.16em;text-transform:uppercase;color:var(--l-muted);font-size:11px;font-weight:600}.nlab h2{font-size:25px;font-weight:700}.nlab h3{font-size:19px;font-weight:600}.nlab .lede{color:var(--l-ink-2);max-width:66ch}.nlab ul.learn{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.nlab ul.learn li{gap:11px;font-size:17px;display:flex}.nlab ul.learn li:before{content:"✓";color:var(--l-success);font-family:var(--f-display);flex-shrink:0;font-weight:800}.nlab .flow-scroll{padding-bottom:6px;overflow-x:auto}.nlab .flow{align-items:stretch;min-width:640px;display:flex}.nlab .node{background:var(--l-surface);border:1px solid var(--l-rule);border-radius:5px;flex-direction:column;flex:1;gap:5px;padding:12px 14px;display:flex}.nlab .node.hi{border-color:var(--l-accent);box-shadow:inset 3px 0 0 var(--l-accent)}.nlab .node .k{font-family:var(--f-display);letter-spacing:.13em;text-transform:uppercase;color:var(--l-muted);font-size:9.5px;font-weight:700}.nlab .node .nm{font-family:var(--f-mono);font-size:12.5px;font-weight:500}.nlab .node .nt{color:var(--l-ink-2);font-size:12px;line-height:1.35}.nlab .arrow{color:var(--l-rule-strong);font-family:var(--f-mono);align-items:center;padding:0 7px;display:flex}.nlab .task{background:var(--l-surface);border:1px solid var(--l-rule);box-shadow:var(--l-shadow);border-radius:8px;overflow:hidden}.nlab .task-head{border-bottom:1px solid var(--l-rule);background:var(--l-surface-2);align-items:flex-start;gap:15px;padding:16px 20px;display:flex}.nlab .tnum{font-family:var(--f-display);color:var(--l-accent);font-variant-numeric:tabular-nums;min-width:30px;padding-top:3px;font-size:24px;font-weight:800;line-height:1}.nlab .th-body{flex-direction:column;flex:1;gap:8px;display:flex}.nlab .th-body h3{font-size:19px}.nlab .chips{flex-wrap:wrap;gap:6px;display:flex}.nlab .chip{font-family:var(--f-display);border:1px solid var(--l-rule-strong);color:var(--l-ink-2);background:var(--l-surface);border-radius:99px;padding:3px 9px;font-size:11px;font-weight:600}.nlab .chip.tab-chip{border-color:var(--l-accent);color:var(--l-accent-ink);background:var(--l-accent-soft);font-family:var(--f-mono)}.nlab .chip.pts{color:var(--l-muted);font-variant-numeric:tabular-nums}.nlab .done-toggle{font-family:var(--f-display);color:var(--l-muted);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;font-size:12px;font-weight:600;display:flex}.nlab .done-toggle input{width:17px;height:17px;accent-color:var(--l-success);cursor:pointer}.nlab .task-body{flex-direction:column;gap:15px;padding:20px;display:flex}.nlab .goal{color:var(--l-ink-2);border-left:2px solid var(--l-accent);padding-left:14px;font-size:16.5px}.nlab .task-foot{margin-top:4px}.nlab .task-done-btn{border:1px solid var(--l-success);background:var(--l-surface);width:100%;color:var(--l-success-ink);font-family:var(--f-display);cursor:pointer;border-radius:9px;justify-content:center;align-items:center;gap:9px;padding:11px 14px;font-size:14.5px;font-weight:700;transition:background .12s;display:flex}.nlab .task-done-btn:hover{background:var(--l-success-soft)}.nlab .task-done-btn .tdb-ic{border:1.5px solid var(--l-success);color:#0000;border-radius:5px;justify-content:center;align-items:center;width:18px;height:18px;font-size:11px;line-height:1;display:inline-flex}.nlab .task-done-btn.is-done{background:var(--l-success);border-color:var(--l-success);color:#fff}.nlab .task-done-btn.is-done:hover{filter:brightness(1.06)}.nlab .task-done-btn.is-done .tdb-ic{color:var(--l-success);background:#fff;border-color:#fff}.nlab ol.steps{flex-direction:column;gap:9px;margin:0;padding-left:1.25em;display:flex}.nlab ol.steps li::marker{color:var(--l-muted);font-family:var(--f-display)}.nlab .table-wrap{border:1px solid var(--l-rule);background:var(--l-surface);border-radius:5px;overflow-x:auto}.nlab table{border-collapse:collapse;width:100%;min-width:500px;font-family:var(--f-display);font-size:14px}.nlab caption{caption-side:top;text-align:left;background:var(--l-surface-2);border-bottom:1px solid var(--l-rule);font-family:var(--f-display);letter-spacing:.13em;text-transform:uppercase;color:var(--l-muted);padding:9px 12px;font-size:10.5px;font-weight:600}.nlab th{text-align:left;letter-spacing:.08em;text-transform:uppercase;color:var(--l-muted);border-bottom:1px solid var(--l-rule-strong);white-space:nowrap;padding:9px 12px;font-size:10.5px;font-weight:600}.nlab td{border-bottom:1px solid var(--l-rule);vertical-align:top;padding:10px 12px}.nlab tr:last-child td{border-bottom:none}.nlab td.mono{font-family:var(--f-mono);font-size:12.5px}.nlab td .val{font-family:var(--f-mono);color:var(--l-accent-ink);word-break:break-word;font-size:12.5px}.nlab pre{background:var(--l-code-bg);border:1px solid var(--l-rule);font-family:var(--f-mono);color:var(--l-ink);border-radius:5px;margin:0;padding:14px 16px;font-size:13px;line-height:1.55;overflow-x:auto}.nlab pre code{color:inherit;font-size:inherit;background:0 0;border:none;padding:0}.nlab .code-label{font-family:var(--f-display);letter-spacing:.13em;text-transform:uppercase;color:var(--l-muted);margin-bottom:7px;font-size:10.5px;font-weight:600;display:block}.nlab .note{border-left:2px solid var(--l-rule-strong);color:var(--l-ink-2);padding:2px 0 2px 14px;font-size:15px}.nlab .note strong{font-family:var(--f-display);color:var(--l-ink);font-weight:600}.nlab .verify{background:var(--l-success-soft);border:1px solid var(--l-rule-strong);border-radius:5px;padding:13px 16px;font-size:15px}.nlab .verify .vl{font-family:var(--f-display);letter-spacing:.13em;text-transform:uppercase;color:var(--l-success-ink);margin-bottom:4px;font-size:10.5px;font-weight:600;display:block}.nlab .gotchas,.nlab .checklist{border:1px solid var(--l-rule);background:var(--l-surface);border-radius:8px;overflow:hidden}.nlab .gotcha{border-bottom:1px solid var(--l-rule);gap:13px;padding:14px 18px;display:flex}.nlab .gotcha:last-child{border-bottom:none}.nlab .g-mark{font-family:var(--f-mono);color:var(--l-warn);background:var(--l-warn-soft);white-space:nowrap;border-radius:4px;height:fit-content;padding:2px 7px;font-size:11px;font-weight:600}.nlab .g-text b{font-family:var(--f-display);font-size:15px;font-weight:600}.nlab .g-text span{color:var(--l-ink-2);font-size:15px}.nlab .quiz{flex-direction:column;gap:9px;display:flex}.nlab details{background:var(--l-surface);border:1px solid var(--l-rule);border-radius:6px}.nlab summary{cursor:pointer;font-family:var(--f-display);align-items:baseline;gap:11px;padding:13px 16px;font-size:15.5px;font-weight:500;list-style:none;display:flex}.nlab summary::-webkit-details-marker{display:none}.nlab summary:after{content:"Reveal";letter-spacing:.13em;text-transform:uppercase;color:var(--l-accent-ink);margin-left:auto;font-size:10.5px;font-weight:600}.nlab details[open] summary:after{content:"Hide"}.nlab .q-no{font-family:var(--f-mono);color:var(--l-muted);font-size:12px}.nlab .answer{color:var(--l-ink-2);padding:0 16px 15px;font-size:15.5px}.nlab .check{border-bottom:1px solid var(--l-rule);cursor:pointer;align-items:flex-start;gap:12px;padding:13px 18px;font-size:15.5px;display:flex}.nlab .check:last-child{border-bottom:none}.nlab .check input{accent-color:var(--l-accent);flex-shrink:0;width:16px;height:16px;margin-top:5px}.nlab .check input:checked+span{color:var(--l-muted);text-decoration:line-through}.nlab-side{flex-direction:column;gap:16px;display:flex;position:sticky;top:104px}.nlab-card{background:var(--l-surface);border:1px solid var(--l-rule);border-radius:10px;padding:16px 17px}.nlab-card-h{font-family:var(--f-display);letter-spacing:.13em;text-transform:uppercase;color:var(--l-muted);margin-bottom:12px;font-size:11px;font-weight:700}.nlab-prog{align-items:center;gap:13px;margin-bottom:6px;display:flex}.nlab-ring{--p:0;background:conic-gradient(var(--l-accent) calc(var(--p)*1%), var(--l-rule) 0);border-radius:50%;flex-shrink:0;place-items:center;width:52px;height:52px;display:grid}.nlab-ring:before{content:"";background:var(--l-surface);border-radius:50%;grid-area:1/1;width:40px;height:40px}.nlab-ring b{font-family:var(--f-display);z-index:1;grid-area:1/1;font-size:14px;font-weight:800}.nlab-progtxt{font-family:var(--f-display);color:var(--l-ink-2);font-size:13px;line-height:1.35}.nlab-progtxt b{color:var(--l-ink)}.nlab-stepnav{flex-direction:column;gap:1px;margin-top:4px;display:flex}.nlab-snav{font-family:var(--f-display);color:var(--l-ink-2);cursor:pointer;border-left:2px solid #0000;border-radius:7px;align-items:center;gap:10px;padding:8px 6px;font-size:13.5px;display:flex}.nlab-snav:hover{background:var(--l-surface-2);text-decoration:none}.nlab-snav.active{color:var(--l-ink);border-left-color:var(--l-accent);background:var(--l-surface-2);font-weight:600}.nlab-snav .sn-num{border:1px solid var(--l-rule-strong);width:22px;height:22px;color:var(--l-muted);border-radius:50%;flex-shrink:0;place-items:center;font-size:11px;font-weight:700;display:grid}.nlab-snav.done .sn-num{background:var(--l-success);border-color:var(--l-success);color:#fff}.nlab-rel{border:1px solid var(--l-rule);background:var(--l-surface-2);border-radius:8px;flex-direction:column;gap:4px;padding:11px 12px;display:flex}.nlab-rel .rk{font-family:var(--f-display);letter-spacing:.12em;text-transform:uppercase;color:var(--l-accent-ink);font-size:10px;font-weight:700}.nlab-rel .rt{font-family:var(--f-display);color:var(--l-ink);font-size:14.5px;font-weight:600}.nlab-rel .rm{color:var(--l-muted);font-size:12.5px}.nlab-discuss{border:1px dashed var(--l-rule-strong);text-align:center;color:var(--l-ink-2);border-radius:10px;padding:26px}.nlab .nlab-gate{border:1px solid var(--l-rule-strong);background:var(--l-surface-2);text-align:center;border-radius:10px;flex-direction:column;align-items:center;gap:12px;padding:28px 24px;display:flex}.nlab .nlab-gate h3{font-size:21px}.nlab .nlab-gate p{color:var(--l-ink-2);max-width:48ch;font-size:16px}.nlab-snav.locked{color:var(--l-muted)}.nlab-snav .sn-lock{opacity:.7;margin-left:auto;font-size:11px}.nlab-foot{border-top:1px solid var(--l-rule);font-family:var(--f-display);color:var(--l-muted);flex-wrap:wrap;gap:8px 20px;margin-top:52px;padding-top:20px;font-size:13px;display:flex}.nlab-cat-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;display:grid}.nlab-labcard{background:var(--l-surface);border:1px solid var(--l-rule);box-shadow:var(--l-shadow);color:var(--l-ink);border-radius:12px;flex-direction:column;gap:10px;padding:18px 18px 16px;text-decoration:none;display:flex}.nlab-labcard:hover{border-color:var(--l-accent);text-decoration:none;transition:transform .12s,border-color .12s;transform:translateY(-1px)}.nlab-labcard .lc-ey{font-family:var(--f-display);letter-spacing:.13em;text-transform:uppercase;color:var(--l-accent-ink);font-size:10.5px;font-weight:600}.nlab-labcard h3{font-size:20px}.nlab-labcard p{color:var(--l-ink-2);font-size:15px}.nlab-labcard .lc-meta{font-family:var(--f-display);color:var(--l-muted);flex-wrap:wrap;gap:8px;margin-top:auto;font-size:12px;display:flex}.nlab-track-h{font-family:var(--f-display);letter-spacing:.1em;text-transform:uppercase;color:var(--l-muted);margin:6px 0;font-size:13px;font-weight:700}[hidden]{display:none!important}
