@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/public-sans-vietnamese-wght-normal-CtlIRbEm.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/public-sans-latin-ext-wght-normal-MQgHevqp.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/public-sans-latin-wght-normal-DdeTHZLK.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#f7f3ec;--paper-raised:#fffdf9;--ink:#23211c;--ink-soft:#5c574c;--ink-faint:#8b8577;--rule:#d9d2c3;--rule-strong:#b8b09e;--accent:#14555a;--accent-strong:#0d3e42;--accent-wash:#e3ecec;--amber:#a3660a;--amber-wash:#f6ead2;--pass:#2e6b34;--pass-wash:#e2eede;--fail:#a03123;--fail-wash:#f5e2de;--code-wash:#14555a14;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--mono:"IBM Plex Mono", Consolas, monospace;--serif:"Fraunces Variable", Georgia, serif;--sans:"Public Sans Variable", "Segoe UI", sans-serif}*{box-sizing:border-box}html{height:100%}body{background:radial-gradient(1200px 500px at 85% -10%, #14555a0f, transparent 60%), var(--paper);min-height:100%;color:var(--ink);font-family:var(--sans);margin:0;font-size:15.5px;line-height:1.6}code,pre,.cm-editor,.mono{font-family:var(--mono)}.shell-header{border-bottom:1px solid var(--rule-strong);background:var(--paper-raised);align-items:center;gap:1.5rem;padding:.65rem 1.5rem;display:flex}.wordmark{font-family:var(--serif);letter-spacing:.01em;color:var(--accent-strong);font-size:1.12rem;font-weight:640;text-decoration:none}.wordmark small{font-family:var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint);font-size:.62rem;font-weight:600;display:block}.shell-nav{gap:1rem;margin-left:.5rem;display:flex}.shell-nav a{color:var(--ink-soft);border-bottom:2px solid #0000;padding:.2rem 0;font-size:.9rem;text-decoration:none}.shell-nav a:hover,.shell-nav a.active{color:var(--accent-strong);border-bottom-color:var(--accent)}.shell-auth{color:var(--ink-soft);align-items:center;gap:.8rem;margin-left:auto;font-size:.88rem;display:flex}.lang-switch{border:1px solid var(--rule);border-radius:999px;display:inline-flex;overflow:hidden}.lang-option{appearance:none;letter-spacing:.04em;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;padding:.18rem .6rem;font-size:.78rem;font-weight:600}.lang-option.active{background:var(--ink);color:var(--paper)}button,.btn{font-family:var(--sans);border:1px solid var(--rule-strong);background:var(--paper-raised);color:var(--ink);cursor:pointer;text-align:center;border-radius:3px;padding:.42rem .95rem;font-size:.88rem;font-weight:600;text-decoration:none;transition:transform 80ms,box-shadow 80ms,background .12s}a.btn:hover,button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 2px #23211c1f}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--accent);border-color:var(--accent-strong);color:#f4f1e9}button.primary:hover:not(:disabled){background:var(--accent-strong)}button.quiet,a.btn.quiet{color:var(--ink-soft);background:0 0;border-color:#0000}button.quiet:hover:not(:disabled),a.btn.quiet:hover{color:var(--accent-strong);box-shadow:none}input[type=text],input[type=password],select{font-family:var(--sans);border:1px solid var(--rule-strong);background:var(--paper-raised);color:var(--ink);border-radius:3px;padding:.42rem .6rem;font-size:.9rem}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.lesson-wrap{max-width:46rem;margin:0 auto;padding:2.5rem 1.5rem 5rem}.lesson-kicker{letter-spacing:.22em;text-transform:uppercase;color:var(--accent);font-size:.7rem;font-weight:700}.lesson-wrap h1{font-family:var(--serif);border-bottom:3px double var(--rule-strong);margin:.35rem 0 1.6rem;padding-bottom:1.1rem;font-size:2.1rem;font-weight:560;line-height:1.2}.markdown h2{font-family:var(--serif);margin:2.2rem 0 .6rem;font-size:1.35rem;font-weight:580}.markdown h2:before{content:"§ ";color:var(--rule-strong)}.markdown p,.markdown li{color:var(--ink)}.markdown pre{color:#e8e2d2;background:#211f1a;border-radius:4px;padding:.9rem 1.1rem;font-size:.86rem;line-height:1.5;overflow-x:auto}.markdown code{background:var(--code-wash);border-radius:3px;padding:.08em .3em;font-size:.86em}.markdown pre code{background:0 0;padding:0}.markdown table{border-collapse:collapse;margin:.8rem 0;font-size:.9rem}.markdown th,.markdown td{border:1px solid var(--rule);padding:.3rem .7rem}.markdown th{background:var(--accent-wash);font-weight:600}.markdown a{color:var(--accent-strong)}.markdown blockquote{border-left:3px solid var(--amber);background:var(--amber-wash);color:var(--ink-soft);margin:1rem 0;padding:.2rem 1rem}.practice-card{border:1px solid var(--rule-strong);border-left:4px solid var(--accent);background:var(--paper-raised);margin-top:3rem;padding:1.1rem 1.3rem}.practice-card h3{font-family:var(--serif);margin:0 0 .3rem;font-weight:600}.workspace{grid-template-columns:minmax(330px,420px) 1fr;gap:0;min-height:calc(100vh - 54px);display:grid}.problem-pane{border-right:1px solid var(--rule-strong);background:var(--paper-raised);max-height:calc(100vh - 54px);padding:1.4rem 1.5rem 3rem;overflow-y:auto}.problem-pane h1{font-family:var(--serif);margin:.2rem 0 1rem;font-size:1.35rem;font-weight:580}.pane-section{border-top:1px solid var(--rule);margin-top:1.6rem;padding-top:1rem}.pane-section>h2{letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 .7rem;font-size:.72rem;font-weight:700}.work-pane{flex-direction:column;gap:.9rem;max-height:calc(100vh - 54px);padding:1.1rem 1.4rem 2rem;display:flex;overflow-y:auto}.editor-frame{border:1px solid var(--rule-strong);background:#fff;border-radius:4px;overflow:hidden}.editor-toolbar{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.toolbar-status{color:var(--ink-faint);margin-left:auto;font-size:.78rem}.data-table-wrap{border:1px solid var(--rule);background:var(--paper-raised);border-radius:3px;overflow-x:auto}.data-table{border-collapse:collapse;width:100%;font-size:.84rem}.data-table caption{text-align:left;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);padding:.4rem .6rem .1rem;font-size:.72rem;font-weight:700}.data-table th{font-family:var(--mono);text-align:left;background:var(--accent-wash);border-bottom:1px solid var(--rule-strong);padding:.3rem .65rem;font-size:.78rem}.data-table td{font-family:var(--mono);border-bottom:1px solid var(--rule);padding:.26rem .65rem}.data-table tr:last-child td{border-bottom:none}.null-value{color:var(--ink-faint);font-style:italic}.chip{border:1px solid;border-radius:999px;align-items:center;gap:.35em;padding:.18rem .6rem;font-size:.78rem;font-weight:700;display:inline-flex}.chip.pass{color:var(--pass);background:var(--pass-wash);border-color:var(--pass)}.chip.fail{color:var(--fail);background:var(--fail-wash);border-color:var(--fail)}.chip.neutral{color:var(--ink-soft);background:var(--paper);border-color:var(--rule-strong)}.feedback-panel{border:1px solid var(--rule-strong);background:var(--paper-raised);border-radius:4px;padding:.9rem 1.1rem;animation:.22s rise}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.fixture-chips{flex-wrap:wrap;gap:.4rem;margin:.6rem 0;display:flex}.fixture-chips .chip{animation:.2s backwards rise}.fixture-chips .chip:nth-child(2){animation-delay:40ms}.fixture-chips .chip:nth-child(3){animation-delay:80ms}.fixture-chips .chip:nth-child(4){animation-delay:.12s}.fixture-chips .chip:nth-child(5){animation-delay:.16s}.fixture-chips .chip:nth-child(6){animation-delay:.2s}.fixture-chips .chip:nth-child(7){animation-delay:.24s}.feedback-message{border-left:3px solid var(--fail);background:var(--fail-wash);padding:.5rem .8rem;font-size:.9rem}.feedback-message.pass{border-left-color:var(--pass);background:var(--pass-wash)}.sql-error{border-left:3px solid var(--fail);color:#f0d9c8;font-family:var(--mono);white-space:pre-wrap;background:#262019;padding:.6rem .8rem;font-size:.82rem}.hint-item{border:1px solid var(--rule);background:var(--paper-raised);border-radius:3px;margin-bottom:.5rem}.hint-item summary,.hint-locked{cursor:pointer;color:var(--ink-soft);align-items:center;gap:.5rem;padding:.45rem .7rem;font-size:.86rem;list-style:none;display:flex}.hint-body{border-top:1px dashed var(--rule);background:var(--amber-wash);white-space:pre-wrap;padding:.6rem .8rem;font-size:.88rem}.hint-level{font-family:var(--mono);color:var(--amber);font-size:.72rem;font-weight:700}.notice{border:1px solid var(--rule-strong);border-left:4px solid var(--amber);background:var(--amber-wash);padding:.55rem .9rem;font-size:.88rem}.notice.error{border-left-color:var(--fail);background:var(--fail-wash)}.conflict-actions{gap:.5rem;margin-top:.5rem;display:flex}.attempt-list{margin:0;padding:0;font-size:.84rem;list-style:none}.attempt-list li{border-bottom:1px dashed var(--rule);align-items:center;gap:.6rem;padding:.32rem 0;display:flex}.attempt-time{color:var(--ink-faint);font-family:var(--mono);font-size:.76rem}.login-card{background:var(--paper-raised);border:1px solid var(--rule-strong);border-top:4px solid var(--accent);flex-direction:column;gap:.7rem;max-width:22rem;margin:14vh auto;padding:1.6rem 1.8rem 1.8rem;display:flex}.login-card h1{font-family:var(--serif);margin:0 0 .4rem;font-size:1.4rem;font-weight:580}.page-loading{text-align:center;color:var(--ink-faint);padding:4rem}.cc-question{border:1px solid var(--rule);background:var(--paper-raised);border-radius:4px;margin-bottom:1rem;padding:.9rem 1.1rem}.cc-prompt{align-items:flex-start;gap:.6rem;margin-bottom:.6rem;display:flex}.cc-prompt .markdown p{margin:.1rem 0}.cc-number{font-family:var(--mono);color:var(--accent);border:1px solid var(--rule-strong);text-align:center;border-radius:999px;min-width:1.5rem;padding:.05rem .2rem;font-size:.85rem;font-weight:700}.cc-option{text-align:left;border:1px solid var(--rule);background:var(--paper);cursor:pointer;border-radius:3px;align-items:center;gap:.6rem;width:100%;margin:.3rem 0;padding:.45rem .7rem;font-size:.92rem;font-weight:400;display:flex}.cc-option.selected{border-color:var(--accent);background:var(--accent-wash)}.cc-order-hint{color:var(--ink-faint);align-items:center;gap:.7rem;margin-bottom:.2rem;font-size:.82rem;display:flex}.cc-order-badge{font-family:var(--mono);color:var(--accent-strong);text-align:center;min-width:1.2rem;font-weight:700}.cc-explanations{border-top:1px dashed var(--rule);color:var(--ink-soft);margin-top:.6rem;padding-top:.5rem;font-size:.86rem}.cc-explanations p{margin:.25rem 0}.cc-note{border-left:3px solid var(--amber);background:var(--amber-wash);padding:.3rem .6rem}.trace-code{color:#e8e2d2;background:#211f1a;border-radius:4px;padding:.9rem 1.1rem;font-size:.9rem;line-height:1.55;overflow-x:auto}.trace-help{color:var(--ink-soft);font-size:.88rem}.trace-table input{width:7rem;font-family:var(--mono);border:1px solid var(--rule-strong);border-radius:3px;padding:.25rem .45rem;font-size:.85rem}.trace-table input.trace-wrong{border-color:var(--fail);background:var(--fail-wash)}.trace-table input.trace-right{border-color:var(--pass);background:var(--pass-wash)}.trace-label{color:var(--ink-soft);font-family:var(--sans)}.os-tabs{gap:.4rem;margin-bottom:.5rem;display:flex}.selfreport textarea{width:100%;font-family:var(--sans);border:1px solid var(--rule-strong);background:var(--paper-raised);resize:vertical;border-radius:3px;padding:.55rem .7rem;font-size:.92rem}.course-wrap{max-width:52rem}.course-category{margin-top:3.2rem}.course-category-title{font-family:var(--serif);border-bottom:3px double var(--rule-strong);margin-bottom:.2rem;padding-bottom:.5rem;font-size:1.55rem;font-weight:640}.course-module{margin-top:2.2rem}.course-module-title{font-family:var(--serif);border-bottom:1px solid var(--rule-strong);padding-bottom:.4rem;font-size:1.15rem;font-weight:580}.course-module-title .mono{color:var(--accent);margin-right:.5rem;font-size:.85rem}.course-card{color:inherit;border:1px solid var(--rule);border-left:4px solid var(--rule-strong);background:var(--paper-raised);border-radius:3px;margin:.6rem 0;padding:.75rem 1rem;text-decoration:none;transition:transform 80ms,border-color .12s;display:block}.course-card:hover{border-left-color:var(--accent);transform:translateY(-1px)}.course-card-head{align-items:baseline;gap:.7rem;display:flex}.course-key{color:var(--accent);font-size:.82rem;font-weight:700}.course-summary{color:var(--ink-soft);margin:.3rem 0 .4rem;font-size:.88rem}.course-activities{flex-wrap:wrap;gap:.35rem;display:flex}.course-chip{font-weight:600}.course-chip.todo{color:var(--ink-faint);background:var(--paper);border-color:var(--rule)}.course-chip.tried{color:var(--amber);background:var(--amber-wash);border-color:var(--amber)}.course-chip.done{color:var(--pass);background:var(--pass-wash);border-color:var(--pass)}.continue-card{border-left-color:var(--accent);background:var(--accent-wash)}.review-item{border:1px solid var(--rule);background:var(--paper-raised);border-radius:3px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin:.5rem 0;padding:.7rem 1rem;display:flex}.review-item .conflict-actions{margin-top:0}.glossary{margin:1.5rem 0}.glossary-entry{border-top:1px solid var(--rule);padding:.7rem 0}.glossary-entry dt{font-family:var(--serif);align-items:baseline;gap:.6rem;font-size:1.02rem;font-weight:600;display:flex}.glossary-lesson{color:var(--accent);border:1px solid var(--rule-strong);border-radius:3px;padding:.05rem .35rem;font-size:.72rem;text-decoration:none}.glossary-entry dd{color:var(--ink-soft);margin:.25rem 0 0;font-size:.92rem}.mono{font-family:var(--mono)}@media (width<=900px){.workspace{grid-template-columns:1fr}.problem-pane{border-right:none;border-bottom:1px solid var(--rule-strong);max-height:none}.work-pane{max-height:none}}html{scroll-behavior:smooth}.course-category,.course-module{scroll-margin-top:1rem}.toc{border:1px solid var(--rule-strong);background:var(--paper-raised);box-shadow:0 1px 0 var(--rule);margin:2.4rem 0 .6rem;padding:1.1rem 1.5rem 1.3rem}.toc-title{font-family:var(--serif);border-bottom:3px double var(--rule-strong);margin:0 0 .55rem;padding-bottom:.45rem;font-size:1.3rem;font-weight:640}.toc summary{cursor:pointer;align-items:baseline;gap:.55rem;padding:.4rem 0;list-style:none;display:flex}.toc summary::-webkit-details-marker{display:none}.toc summary:before{content:"+";font-family:var(--mono);color:var(--ink-faint);flex:none;width:1em}.toc details[open]>summary:before{content:"−"}.toc summary a{color:var(--ink);text-decoration:none}.toc summary a:hover{color:var(--accent-strong);text-decoration:underline}.toc-cat>summary a{font-family:var(--serif);font-size:1.08rem;font-weight:600}.toc-cat{border-bottom:1px solid var(--rule)}.toc-cat:last-of-type{border-bottom:none}.toc-mod{margin-left:1.55rem}.toc-mod>summary{padding:.26rem 0;font-size:.93rem}.toc-leader{border-bottom:2px dotted var(--rule-strong);flex:1;min-width:1.5rem;transform:translateY(-.3em)}.toc-count{font-family:var(--mono);color:var(--ink-faint);flex:none;font-size:.76rem}.toc-code{color:var(--ink-faint);letter-spacing:.03em;font-size:.74rem}.toc-lessons{margin:.1rem 0 .7rem;padding:0 0 0 2.45rem;list-style:none}.toc-lessons li{padding:.16rem 0;font-size:.9rem}.toc-lessons a{color:var(--ink-soft);text-decoration:none}.toc-lessons a:hover{color:var(--accent-strong);text-decoration:underline}.toc-read{color:var(--ink-faint);margin-left:.4rem;font-size:.8rem}.scroll-top{border:1px solid var(--rule-strong);background:var(--paper-raised);width:2.9rem;height:2.9rem;color:var(--ink);font-family:var(--serif);cursor:pointer;opacity:0;pointer-events:none;z-index:50;border-radius:50%;padding:0;font-size:1.25rem;line-height:1;transition:opacity .2s,transform .2s,background .15s,color .15s;position:fixed;bottom:1.6rem;right:1.4rem;transform:translateY(.6rem);box-shadow:0 2px 12px #23211c29}.scroll-top.visible{opacity:1;pointer-events:auto;transform:none}.scroll-top:hover{background:var(--ink);color:var(--paper)}.reading-progress{background:var(--ink);transform-origin:0;z-index:60;height:3px;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}.lesson-pager{border-top:3px double var(--rule-strong);font-family:var(--mono);justify-content:space-between;align-items:baseline;gap:1rem;margin-top:2.6rem;padding-top:.9rem;font-size:.85rem;display:flex}.lesson-pager a{color:var(--ink-soft);text-decoration:none}.lesson-pager a:hover{color:var(--accent-strong);text-decoration:underline}.course-card-head code,.course-summary code,.toc-lessons code,.lesson-wrap h1 code{background:var(--code-wash);border-radius:3px;padding:.04em .28em;font-size:.88em}.toc-head{border-bottom:3px double var(--rule-strong);justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.4rem;display:flex}.toc-head .toc-title{border-bottom:none;margin:0;padding-bottom:.45rem}.toc-progress{font-family:var(--mono);color:var(--ink-faint);white-space:nowrap;font-size:.75rem}.toc-search{align-items:center;gap:.6rem;margin:.15rem 0 .55rem;display:flex}.toc-search input{border:none;border-bottom:1px solid var(--rule-strong);background:0 0;border-radius:0;flex:1;padding:.3rem .1rem;font-size:.9rem}.toc-search input:focus-visible{border-bottom-color:var(--accent);outline:none}.toc-search-count{font-family:var(--mono);color:var(--ink-faint);white-space:nowrap;font-size:.75rem}.toc-search-clear{padding:0 .35rem;font-size:1.05rem;line-height:1}.toc-empty{color:var(--ink-soft);margin:0;padding:.4rem 0 .1rem;font-style:italic}.codeblock{position:relative}.codeblock-copy{font-family:var(--mono);letter-spacing:.04em;color:#e8e2d2;opacity:0;background:#e8e2d214;border:1px solid #e8e2d24d;border-radius:3px;padding:.08rem .5rem;font-size:.72rem;font-weight:500;transition:opacity .15s,background .15s;position:absolute;top:.5rem;right:.5rem}.codeblock:hover .codeblock-copy,.codeblock-copy:focus-visible,.codeblock-copy.copied{opacity:1}.codeblock-copy:hover:not(:disabled){box-shadow:none;background:#e8e2d233;transform:none}.codeblock-copy.copied{color:#b9dcb0;border-color:#b9dcb073}.markdown pre code.hljs{background:0 0;padding:0}.hljs-comment,.hljs-quote{color:#8f897b;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal{color:#e3b34c}.hljs-built_in,.hljs-type,.hljs-title.class_,.hljs-title.class_.inherited__{color:#9fc6c9}.hljs-string,.hljs-regexp,.hljs-addition{color:#a8c48a}.hljs-number,.hljs-symbol,.hljs-bullet{color:#d08f6a}.hljs-title,.hljs-title.function_,.hljs-section{color:#e8e2d2;font-weight:600}.hljs-meta,.hljs-doctag{color:#d7bd8a}.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.hljs-selector-class,.hljs-selector-id{color:#9fc6c9}.hljs-deletion{color:#d98a7f}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.markdown h2{scroll-margin-top:1.2rem}.page-toc{width:15.5rem;max-height:calc(100vh - 170px);font-size:.82rem;line-height:1.45;display:none;position:fixed;top:108px;right:2rem;overflow-y:auto}@media (width>=1280px){.page-toc{display:block}}.page-toc-title{letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:.5rem;font-size:.66rem;font-weight:700}.page-toc ol{border-left:1px solid var(--rule);margin:0;padding:0;list-style:none}.page-toc li{border-left:2px solid #0000;margin-left:-1.5px;padding:.22rem 0 .22rem .8rem}.page-toc li.active{border-left-color:var(--accent)}.page-toc a{color:var(--ink-soft);text-decoration:none;display:block}.page-toc li.active>a{color:var(--accent-strong);font-weight:600}.page-toc a:hover{color:var(--accent-strong)}:root[data-theme=dark]{--paper:#1e1c17;--paper-raised:#26231d;--ink:#e6e0d2;--ink-soft:#b3ac9c;--ink-faint:#837d6f;--rule:#3a362c;--rule-strong:#4e4839;--accent:#5fa8ad;--accent-strong:#8ac6ca;--accent-wash:#223130;--amber:#d9a14d;--amber-wash:#322a1b;--pass:#7fb573;--pass-wash:#243122;--fail:#d98a7f;--fail-wash:#38251f;--code-wash:#8ac6ca24;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root[data-theme=dark] .markdown pre{border:1px solid var(--rule)}:root[data-theme=dark] button.primary{color:#10211f}.theme-toggle{border:1px solid var(--rule);width:1.9rem;height:1.9rem;color:var(--ink-soft);cursor:pointer;background:0 0;border-radius:50%;padding:0;font-size:.95rem;line-height:1}.theme-toggle:hover:not(:disabled){color:var(--accent-strong);border-color:var(--rule-strong);box-shadow:none;transform:none}.toc-controls{white-space:nowrap;gap:.2rem;display:inline-flex}.toc-controls .quiet{color:var(--ink-faint);padding:.1rem .4rem;font-size:.74rem}.toc-controls .quiet:hover:not(:disabled){color:var(--accent-strong)}.glossary-search{margin:.4rem 0 1.2rem}@media print{:root,:root[data-theme=dark]{--paper:#fff;--paper-raised:#fff;--ink:#111;--ink-soft:#333;--ink-faint:#666;--rule:#bbb;--rule-strong:#888;--accent:#000;--accent-strong:#000;--code-wash:#f0f0f0}body{background:#fff}.shell-header,.scroll-top,.page-toc,.reading-progress,.lesson-pager,.toc-search,.toc-controls,.theme-toggle,.lang-switch,.codeblock-copy{display:none!important}.lesson-wrap{max-width:none;padding:0}.markdown pre{color:#111;white-space:pre-wrap;word-break:break-word;background:#f5f5f5;border:1px solid #ccc}.markdown pre code,.hljs-comment,.hljs-quote,.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-built_in,.hljs-type,.hljs-string,.hljs-regexp,.hljs-addition,.hljs-number,.hljs-symbol,.hljs-bullet,.hljs-title,.hljs-section,.hljs-meta,.hljs-doctag,.hljs-attr,.hljs-attribute,.hljs-variable{color:#111!important}a{color:#111;text-decoration:none}.markdown h2{break-after:avoid}.markdown pre,.markdown table{break-inside:avoid}}.mermaid-diagram{text-align:center;margin:1.2rem 0;overflow-x:auto}.mermaid-diagram svg{max-width:100%;height:auto}.mermaid-loading{color:var(--ink-faint);font-style:italic}.markdown h2{position:relative}.heading-anchor{color:var(--ink-faint);opacity:0;margin-left:.4rem;font-weight:400;text-decoration:none;transition:opacity .12s}.markdown h2:hover .heading-anchor,.heading-anchor:focus{opacity:1}.heading-anchor:hover{color:var(--accent)}mark.search-hit{background:var(--amber-wash);color:inherit;border-radius:2px;padding:0 1px}.hotkeys-backdrop{z-index:1000;background:#0006;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.hotkeys-dialog{background:var(--paper-raised);width:100%;max-width:420px;color:var(--ink);border:1px solid var(--rule-strong);border-radius:8px;padding:1.1rem 1.3rem 1.3rem;box-shadow:0 10px 40px #00000040}.hotkeys-head{justify-content:space-between;align-items:center;display:flex}.hotkeys-head h2{margin:0;font-size:1.1rem}.hotkeys-list{margin:.6rem 0 0}.hotkeys-row{border-top:1px solid var(--rule);justify-content:space-between;align-items:baseline;gap:1rem;padding:.4rem 0;display:flex}.hotkeys-row dt{gap:.3rem;display:flex}.hotkeys-row dd{color:var(--ink-soft);text-align:right;margin:0}.hotkeys-dialog kbd{font-family:var(--mono);background:var(--code-wash);border:1px solid var(--rule-strong);color:var(--ink);border-radius:4px;padding:.05rem .4rem;font-size:.8rem}.lesson-feedback{text-align:center;margin-top:1.5rem;font-size:.85rem}.lesson-feedback a{color:var(--ink-faint)}.lesson-feedback a:hover{color:var(--accent)}.lesson-title-row{justify-content:space-between;align-items:flex-start;gap:.6rem;display:flex}.lesson-title-row h1{margin:0}.bookmark-toggle{cursor:pointer;color:var(--ink-faint);background:0 0;border:none;flex:none;margin-top:.3rem;padding:.1rem .35rem;font-size:1.5rem;line-height:1}.bookmark-toggle.on{color:var(--amber)}.bookmarks-bar{margin:0 0 1.4rem}.bookmark-chips{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;display:flex}.bookmark-chip{background:var(--paper-raised);border:1px solid var(--rule);border-radius:999px;padding:.25rem .6rem;font-size:.85rem}.bookmark-chip .mono{color:var(--ink-faint)}.toc-body-hits{border-top:1px solid var(--rule);margin-top:.8rem;padding-top:.6rem}.toc-body-hits-title{text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);margin-bottom:.4rem;font-size:.8rem}.toc-body-hits ul{margin:0;padding:0;list-style:none}.toc-body-hits li{margin-bottom:.7rem}.toc-snippet{color:var(--ink-soft);margin:.15rem 0 0;font-size:.85rem}.dash-tiles{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.8rem;margin:1rem 0 1.6rem;display:grid}.dash-tile{background:var(--paper-raised);border:1px solid var(--rule);text-align:center;border-radius:8px;padding:1rem}.dash-num{font-family:var(--serif);color:var(--accent);font-size:2rem;font-weight:600}.dash-label{color:var(--ink-soft);font-size:.85rem}.dash-of{color:var(--ink-faint)}.dash-cats{flex-direction:column;gap:.9rem;display:flex}.dash-cat-head{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.3rem;display:flex}.dash-cat-nums{color:var(--ink-soft);font-size:.82rem}.dash-bar{background:var(--rule);border-radius:4px;height:8px;overflow:hidden}.dash-bar-read{background:var(--accent);height:100%;display:block}.server-eval{margin-top:.9rem}.server-eval-head{align-items:center;gap:.6rem;display:flex}.server-eval-fixture{color:var(--ink-faint);margin-top:.3rem;font-size:.8rem}.server-eval-msg{margin:.4rem 0 0}.server-eval-output{max-height:260px;margin-top:.5rem;font-size:.8rem;overflow:auto}.level-filter{flex-wrap:wrap;align-items:center;gap:.5rem;margin:0 0 1.2rem;display:flex}.level-filter-label{color:var(--ink-faint);font-size:.85rem}.level-chip{background:var(--paper-raised);border:1px solid var(--rule);cursor:pointer;color:var(--ink-soft);border-radius:999px;padding:.25rem .7rem;font-size:.85rem}.level-chip:hover{border-color:var(--rule-strong)}.level-chip.active{border-color:var(--accent);color:var(--accent);background:var(--accent-wash)}.level-path-link{color:var(--accent);margin-left:auto;font-size:.85rem}.path-blurb{color:var(--ink-soft);max-width:62ch}.path-top{flex-wrap:wrap;align-items:center;gap:1rem;margin:1rem 0 1.8rem;display:flex}.path-total{color:var(--ink-faint);font-size:.9rem}.path-phases{margin:0;padding:0;list-style:none}.path-phase{background:var(--paper-raised);border:1px solid var(--rule);border-radius:8px;margin:0 0 1.4rem;padding:1rem 1.2rem}.path-phase-head{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.path-phase-head h2{align-items:center;gap:.5rem;margin:0;font-size:1.15rem;display:flex}.path-phase-num{background:var(--accent);width:1.7rem;height:1.7rem;color:var(--paper-raised);font-size:.9rem;font-family:var(--serif);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.path-phase-count{color:var(--ink-faint);white-space:nowrap;font-size:.85rem}.path-bar{background:var(--rule);border-radius:3px;height:6px;margin:.55rem 0;overflow:hidden}.path-bar span{background:var(--accent);height:100%;display:block}.path-intro{color:var(--ink-soft);margin:.4rem 0 .9rem}.path-module{margin:.6rem 0}.path-module h3{margin:.5rem 0 .3rem;font-size:.98rem}.path-mod-code{color:var(--ink-faint);margin-right:.3rem}.path-lessons{margin:0 0 0 .2rem;padding:0;list-style:none}.path-lessons li{margin:.2rem 0}.path-lessons .toc-read{color:var(--pass);margin-left:.4rem}.path-siblings{color:var(--ink-faint);margin:.3rem 0 0;font-size:.85rem}.path-siblings a{color:var(--accent);margin-left:.4rem}.path-sib-sep{color:var(--ink-faint)}
