@font-face{font-family:DM Sans;font-style:normal;font-weight:100 1000;font-display:swap;src:url(/fonts/dm-sans.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-regular.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/jetbrains-mono-bold.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/jetbrains-mono-extrabold.woff2)format("woff2")}:root{--accent:#ff4f00;--on-color:#0b0b0b;--block:#0b0b0b;--on-block:#f3f0e8;--sans:"DM Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;--max:1320px;--text:720px;background:var(--paper);font-family:var(--sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-size:17px;line-height:1.6}:where(:root,.area-hero,.area-banner,.module-hero,.area-block,.resume,.storage-warning,.portfolio,.codeblock-bar,.feedback.ok,.choice[aria-checked=true],a:not(.btn):hover,.toc a[aria-current],.search-results [aria-selected=true] a){--paper:#f3f0e8;--paper-2:#e9e5da;--white:#fffdf8;--raised:#fff;--note:#fff3c4;--ink:#0b0b0b;--ink-2:#3b3a36;--muted:#5f5c55;--ok:#00a152;--ok-bg:#d8f5e3;--bad:#e5231b;--bad-bg:#ffe0dc;--warn:#ffb000;--border:3px solid var(--ink);--border-thin:2px solid var(--ink);--shadow:6px 6px 0 var(--ink);--shadow-sm:4px 4px 0 var(--ink);color:var(--ink);accent-color:var(--ink);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--paper:#161614;--paper-2:#201f1c;--white:#1f1e1b;--raised:#282724;--note:#3a3210;--ink:#f3f0e8;--ink-2:#d2cec4;--muted:#a6a298;--ok:#1fbf6a;--ok-bg:#11361f;--bad:#ff5b4f;--bad-bg:#401713;--block:#0b0b0a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html{scroll-padding-top:calc(var(--topbar-h,64px) + 26px)}body{flex-direction:column;min-height:100vh;margin:0;display:flex}#app{flex-direction:column;flex:1;display:flex}::selection{background:var(--accent);color:var(--on-color)}img,svg{max-width:100%;display:block}[hidden]{display:none!important}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer}a{color:inherit;text-underline-offset:3px;text-decoration-thickness:2px}a:hover{background:var(--accent);color:var(--ink)}:focus-visible{outline:3px solid var(--ink);outline-offset:3px;box-shadow:0 0 0 7px var(--accent)}main:focus,h1:focus{box-shadow:none;outline:none}.hash-target{animation:2.4s ease-out hash-target}.hash-target:focus{box-shadow:none;outline:none}@keyframes hash-target{0%,50%{box-shadow:0 0 0 5px var(--paper), 0 0 0 11px var(--accent)}to{box-shadow:0 0 0 5px #0000,0 0 0 11px #0000}}.icon{flex-shrink:0;width:1.1em;height:1.1em}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:50;background:var(--ink);color:var(--paper);font:700 14px var(--mono);padding:12px 16px;position:absolute;top:-80px;left:12px}.skip-link:focus{top:12px}h1,h2,h3,h4{letter-spacing:-.035em;overflow-wrap:anywhere;margin:0;font-weight:900;line-height:1.02}p{margin:0 0 1em}code,kbd,pre,samp{font-family:var(--mono);font-variant-ligatures:none}kbd{border:var(--border-thin);background:var(--white);color:var(--ink);box-shadow:2px 2px 0 var(--ink);padding:0 6px;font-size:.85em}.label{font:700 12px/1.3 var(--mono);text-transform:uppercase;letter-spacing:.08em}.muted{color:var(--muted)}.tag{border:var(--border-thin);font:700 11px/1.2 var(--mono);text-transform:uppercase;letter-spacing:.06em;background:var(--white);white-space:nowrap;align-items:center;gap:6px;padding:3px 8px;display:inline-flex}.tag.ink{background:var(--ink);color:var(--paper)}.tag.accent{background:var(--accent);color:var(--on-color)}.tag.ok{background:var(--ok-bg)}.btn{border:var(--border);background:var(--white);max-width:100%;min-height:48px;color:var(--ink);font:800 14px/1.2 var(--mono);text-transform:uppercase;letter-spacing:.05em;text-align:center;box-shadow:var(--shadow-sm);white-space:normal;overflow-wrap:anywhere;justify-content:center;align-items:center;gap:10px;padding:10px 18px;text-decoration:none;transition:transform 80ms,box-shadow 80ms,background 80ms;display:inline-flex}.btn:hover:not(:disabled){background:var(--accent);color:var(--on-color);box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}.btn:active:not(:disabled){box-shadow:1px 1px 0 var(--ink);transform:translate(2px,2px)}.btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.btn.primary{background:var(--ink);color:var(--paper)}.btn.primary:hover:not(:disabled){background:var(--accent);color:var(--on-color)}.btn.success{background:var(--ok);color:var(--on-color)}.btn.small{min-height:38px;box-shadow:3px 3px 0 var(--ink);padding:6px 12px;font-size:12px}.btn.ghost{box-shadow:none;background:0 0}.btn.ghost:hover:not(:disabled){box-shadow:none;transform:none}.link-button{font:inherit;text-underline-offset:3px;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline;text-decoration-thickness:2px}.link-button:hover{background:var(--accent);color:var(--on-color)}textarea,input[type=text],input[type=search],select{border:var(--border);background:var(--white);width:100%;font-family:var(--mono);font-variant-ligatures:none;border-radius:0;padding:12px 14px;font-size:15px;line-height:1.55}textarea:focus,input:focus,select:focus{box-shadow:var(--shadow-sm);background:var(--raised);outline:none}textarea{resize:vertical;tab-size:4}input[type=checkbox]{flex-shrink:0;width:22px;height:22px;margin:0}@media (max-width:700px){h1,h2,h3,h4{-webkit-hyphens:auto;hyphens:auto;hyphenate-limit-chars:10 4 4}}@media (hover:none) and (pointer:coarse){.kbd-hint,.btn kbd{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.topbar{z-index:20;background:var(--paper);border-bottom:var(--border);align-items:stretch;min-height:64px;display:flex;position:sticky;top:0}.logo{border-right:var(--border);font:800 17px var(--mono);letter-spacing:-.02em;white-space:nowrap;align-items:center;gap:12px;padding:0 20px;text-decoration:none;display:flex}.logo:hover{background:var(--accent)}.logo-mark{width:34px;height:34px;display:block}.logo-text span{color:var(--muted)}.topnav{scrollbar-width:none;flex:1;display:flex;overflow-x:auto}.topnav::-webkit-scrollbar{display:none}.topnav a{border-right:var(--border);font:700 13px var(--mono);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;align-items:center;gap:8px;padding:0 18px;text-decoration:none;display:flex}.topnav a:before{content:"";background:var(--area);border:2px solid var(--ink);width:12px;height:12px}.topnav a:hover{background:var(--area)}.topnav a[aria-current]{background:var(--area);color:var(--on-color);box-shadow:inset 0 -6px 0 var(--on-color)}.topbar-search{border:0;border-left:var(--border);font:700 13px var(--mono);text-transform:uppercase;letter-spacing:.06em;background:0 0;align-items:center;gap:10px;padding:0 20px;display:flex}.topbar-search:hover{background:var(--accent);color:var(--on-color)}.topbar-search .icon{width:20px;height:20px}.topbar-search kbd{text-transform:none;font-size:11px}.topbar-data,.theme-toggle{border-left:var(--border);font:700 13px var(--mono);text-transform:uppercase;letter-spacing:.06em;align-items:center;padding:0 20px;text-decoration:none;display:flex}.theme-toggle{border:0;border-left:var(--border);background:0 0;justify-content:center;min-width:58px;padding:0 18px}.theme-toggle:hover{background:var(--accent);color:var(--on-color)}.theme-toggle .icon{width:20px;height:20px}.storage-warning{background:var(--warn);color:var(--ink);border-bottom:var(--border);margin:0;padding:12px 20px;font-weight:600}.session-actions{flex-wrap:wrap;gap:12px;display:flex}.sync-notice{z-index:19;flex-wrap:wrap;align-items:center;gap:8px 16px;display:flex;position:sticky}main{flex:1}main[aria-busy=true]{min-height:100vh}.footer{border-top:var(--border);font:700 12px var(--mono);text-transform:uppercase;letter-spacing:.06em;background:var(--block);color:var(--on-block);flex-wrap:wrap;justify-content:space-between;gap:8px 24px;padding:22px 24px;display:flex}.page{max-width:var(--max);margin:0 auto;padding:48px 32px 96px}.page.narrow{max-width:900px}.page-title{text-transform:uppercase;letter-spacing:-.045em;font-size:clamp(44px,7vw,104px);line-height:.9}.section-title{text-transform:uppercase;letter-spacing:-.035em;font-size:clamp(28px,3.4vw,44px)}.crumbs{font:700 12px var(--mono);text-transform:uppercase;letter-spacing:.08em;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:18px;display:flex}.crumbs a{border-bottom:2px solid var(--ink);text-decoration:none}.crumbs span[aria-hidden]{color:var(--muted)}.rule{border:0;border-top:var(--border);margin:48px 0}@media (max-width:900px){.topbar{flex-wrap:wrap}.logo{border-right:0;flex:1;padding:12px 16px}.topbar-data,.theme-toggle,.topbar-search{border-left:var(--border)}.topnav{border-top:var(--border);flex-basis:100%;order:3}.topnav a{padding:12px 14px}.page{padding:32px 18px 72px}}@media (max-width:700px){.crumbs a,.footer a{position:relative}.crumbs a:after,.footer a:after{content:"";position:absolute;inset:-10px -4px}}@media (max-width:1299px){.topbar-search-text{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.topbar-search{justify-content:center;min-width:58px;padding:0 18px}.topbar-search kbd{display:none}}@media (max-width:430px){.logo-text{display:none}.topbar-data,.theme-toggle,.topbar-search{padding:0 14px}}.search-dialog{border:var(--border);width:min(760px,100vw - 24px);max-height:calc(100dvh - 16vh);box-shadow:10px 10px 0 var(--ink);background:var(--paper);color:var(--ink);margin:8vh auto auto;padding:0;overflow:hidden}.search-dialog[open]{display:flex}.search-dialog::backdrop{background:#0b0b0b8c}.search-panel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.search-field{border-bottom:var(--border);background:var(--white);align-items:center;gap:12px;padding:0 12px 0 18px;display:flex}.search-field:focus-within{box-shadow:inset 0 -5px 0 var(--accent)}.search-field>.icon{width:22px;height:22px}.search-field input{background:0 0;border:0;flex:1;width:auto;min-width:0;padding:18px 0;font-size:20px}.search-field input:focus{box-shadow:none;background:0 0}.search-field input::-webkit-search-cancel-button{display:none}.search-status{font:700 12px/1.4 var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0;padding:10px 18px}.search-results{overscroll-behavior:contain;border-top:var(--border-thin);flex:1;min-height:0;margin:0;padding:0;list-style:none;overflow-y:auto}.search-results:empty{display:none}.search-results a{border-bottom:var(--border-thin);box-shadow:inset 6px 0 0 var(--area);gap:4px;padding:12px 18px 12px 24px;text-decoration:none;display:grid}.search-results [aria-selected=true] a{background:var(--area);color:var(--on-color);box-shadow:inset 6px 0 0 var(--ink)}.search-hit-meta{color:var(--muted);flex-wrap:wrap;gap:2px 8px;display:flex}.search-hit-meta>span+span:before{content:"/";margin-right:8px}.search-hit-area{color:var(--ink)}.search-hit-title{overflow-wrap:anywhere;font-size:18px;font-weight:800;line-height:1.25}.search-hit-snippet{-webkit-line-clamp:2;color:var(--ink-2);overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:15px;line-height:1.5;display:-webkit-box;overflow:hidden}.search-results mark{background:var(--note);color:var(--ink);box-shadow:0 2px 0 var(--ink)}.search-keys{border-top:var(--border);color:var(--muted);flex-wrap:wrap;gap:6px 20px;margin:0;padding:10px 18px;display:flex}@media (max-width:700px){.search-dialog{width:calc(100vw - 16px);max-height:calc(100dvh - 16px);box-shadow:6px 6px 0 var(--ink);margin-top:8px}.search-field{padding-left:14px}.search-results a{padding:12px 14px 12px 20px}}@media (hover:none) and (pointer:coarse){.search-keys{display:none}}@media print{.topbar,.footer,.skip-link,.no-print{display:none!important}.page{padding:0}}.prose{max-width:var(--text);overflow-wrap:anywhere;font-size:18px;line-height:1.7}.prose :where(p,ul,ol){margin:0}.prose>*+*{margin-top:1.1em}.prose>:first-child{margin-top:0}.prose h2{text-transform:uppercase;border-top:var(--border);margin-top:2.2em;padding-top:18px;font-size:clamp(28px,3.2vw,40px)}.prose h3{letter-spacing:-.02em;margin-top:1.8em;font-size:23px}.prose h2+*,.prose h3+*{margin-top:.7em}.prose .anchor{float:left;width:1em;color:var(--muted);opacity:0;font-family:var(--mono);margin-left:-1.1em;text-decoration:none}.prose h2:hover .anchor,.prose h3:hover .anchor{opacity:1}.prose ul,.prose ol{padding-left:1.4em}.prose li+li{margin-top:.35em}.prose li::marker{font-weight:800}.prose strong{font-weight:800}.prose :not(pre)>code{background:var(--white);border:2px solid var(--ink);white-space:normal;overflow-wrap:anywhere;padding:0 5px;font-size:.86em}.prose a.external:after,.external-link:after{content:"↗";font-family:var(--mono);margin-left:2px;font-size:.8em}.prose blockquote{border-left:8px solid var(--ink);margin:0;padding:4px 0 4px 20px}.prose hr{border:0;border-top:var(--border)}.prose img{border:var(--border)}.compact.prose{font-size:16px}.compact.prose>*+*{margin-top:.75em}.codeblock{border:var(--border);background:var(--block);color:var(--on-block);box-shadow:var(--shadow-sm);max-width:100%}.prose .codeblock{margin-top:1.4em;margin-bottom:.4em}.codeblock-bar{border-bottom:3px solid var(--ink);background:var(--accent);min-height:38px;color:var(--ink);font:800 12px var(--mono);text-transform:uppercase;letter-spacing:.08em;align-items:center;padding:0 0 0 14px;display:flex}.codeblock-bar>span:first-child{flex:1;padding:8px 8px 8px 0;line-height:1.3}.codeblock-bar button,.codeblock-bar a{border:0;border-left:3px solid var(--ink);background:var(--paper);color:var(--ink);font:800 11px var(--mono);text-transform:uppercase;letter-spacing:.06em;cursor:pointer;align-self:stretch;align-items:center;gap:6px;padding:0 12px;text-decoration:none;display:inline-flex}.codeblock-bar button:hover,.codeblock-bar a:hover{background:var(--ink);color:var(--paper)}.codeblock pre,pre.code{tab-size:4;margin:0;padding:18px 20px;font-size:14.5px;line-height:1.65;overflow-x:auto}.codeblock pre,.bug-code,.code-editor{--code-bg:var(--block);background:linear-gradient(to right, var(--code-bg) 40%, transparent) left / 28px 100% no-repeat local, linear-gradient(to left, var(--code-bg) 40%, transparent) right / 28px 100% no-repeat local, linear-gradient(to right, #f3f0e838, transparent) left / 12px 100% no-repeat scroll, linear-gradient(to left, #f3f0e838, transparent) right / 12px 100% no-repeat scroll, var(--code-bg)}.codeblock pre code{font-size:inherit}.code-editor{width:100%;min-height:120px;color:var(--on-block);font:14.5px/1.65 var(--mono);resize:vertical;caret-color:var(--accent);white-space:pre;overflow-wrap:normal;border:0;padding:18px 20px;display:block;overflow-x:auto}.code-editor:focus{box-shadow:inset 0 0 0 3px var(--accent);--code-bg:#151515}.run-output{border-top:3px solid var(--ink);background:var(--white);color:var(--ink);font:14px/1.6 var(--mono);white-space:pre-wrap;max-height:360px;padding:14px 20px;overflow-x:auto}.run-output.error{background:var(--bad-bg)}.run-output.pytest{white-space:pre}.run-output .run-label{text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px;font-size:11px;font-weight:800;display:block}.syntax-keyword{color:#ffd400;font-weight:700}.syntax-string{color:#7ee0a1}.syntax-number{color:#ff9a6b}.syntax-comment{color:#9b978d;font-style:italic}.syntax-type{color:#c7b3ff}.syntax-fn{color:#8fc2ff}.syntax-builtin{color:#8fc2ff;font-style:italic}.syntax-annotation,.syntax-macro{color:#ff8fc8}.syntax-lifetime{color:#ffb86b;font-style:italic}.syntax-variable{color:#ffb86b}.syntax-option{color:#c7b3ff}.syntax-key{color:#8fc2ff}.syntax-prompt{color:var(--accent);-webkit-user-select:none;user-select:none;font-weight:800}.syntax-output{color:#c9c5bb}.callout{border:var(--border);background:var(--white);box-shadow:var(--shadow-sm);padding:14px 18px 16px 22px;position:relative}.callout:before{content:"";background:var(--callout,var(--ink));border:3px solid var(--ink);width:10px;position:absolute;top:-3px;bottom:-3px;left:-3px}.callout>*+*{margin-top:.6em}.callout-title{font:800 12px var(--mono);text-transform:uppercase;letter-spacing:.08em;margin:0}.callout-title span{background:var(--callout,var(--ink));color:var(--on-color);border:2px solid var(--ink);margin-right:6px;padding:2px 7px}.callout-note{--callout:#d9d4c7}.callout-tip{--callout:#7ee0a1}.callout-warning{--callout:#ff6b5b}.callout-merke{--callout:#ffd400}.callout-praxis{--callout:#8fc2ff}.callout-interview{--callout:#ff8fc8}.callout-deep{--callout:#c7b3ff}.table-wrap{border:var(--border);box-shadow:var(--shadow-sm);background:var(--white);overflow-x:auto}.table-wrap table{border-collapse:collapse;width:100%;font-size:15px;line-height:1.45}.table-wrap th{background:var(--ink);color:var(--paper);text-align:left;font:800 12px var(--mono);text-transform:uppercase;letter-spacing:.06em;padding:10px 12px}.table-wrap td{border-top:2px solid var(--ink);vertical-align:top;padding:9px 12px}.table-wrap td+td,.table-wrap th+th{border-left:2px solid var(--ink)}.table-wrap code{white-space:normal!important}.player{max-width:980px;margin:0 auto;padding:28px 32px 96px}.player-head{top:calc(var(--topbar-h,64px) - 1px);z-index:5;background:var(--paper);border-bottom:var(--border);margin-bottom:30px;padding:12px 0 14px;position:sticky}.player-head .crumbs{margin-bottom:10px}.steps{flex-wrap:wrap;gap:6px;display:flex}.step{border:var(--border-thin);background:var(--white);min-width:28px;max-width:64px;height:30px;font:800 11px var(--mono);flex:28px;place-items:center;text-decoration:none;display:grid}.step:hover{background:var(--area);color:var(--ink)}.step.done{background:var(--ink);color:var(--paper)}.step.active{background:var(--area);color:var(--on-color);outline:3px solid var(--ink);outline-offset:2px}.step.done.active{box-shadow:inset 0 -6px 0 var(--ink)}.exercise-kicker{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 14px;display:flex}.exercise .exercise-title{margin-bottom:18px;font-size:clamp(30px,4.4vw,52px)}.prompt{margin-bottom:18px;font-size:19px}.doc-links{flex-wrap:wrap;align-items:baseline;gap:6px 16px;margin:0 0 22px;font-size:15px;display:flex}.doc-links .label{background:var(--ink);color:var(--paper);padding:2px 6px}.source-ref{font:13px var(--mono);margin:-6px 0 18px}.exercise-body{grid-template-columns:minmax(0,1fr);gap:18px;display:grid}.exercise-body>.codeblock{box-shadow:var(--shadow)}.check-note{color:var(--muted);margin:0;font-size:13px}.small{font-size:13px}.field-label{margin-bottom:-8px;display:block}.exercise-actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.code-gap{text-align:center;background:var(--area);min-width:2.2em;color:var(--on-color);border:2px solid var(--on-block);margin:0 2px;padding:0 8px;font-weight:800;line-height:1.4;text-decoration:none;display:inline-block}.code-gap:hover{background:var(--on-block);color:var(--on-color)}.code-gap.solved{background:var(--ok)}.gap-fields{gap:16px;display:grid}.gap-label{justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;display:flex}.gap-label label{align-items:center;gap:10px;font-weight:700;display:inline-flex}.gap-number{background:var(--block);min-width:28px;height:28px;color:var(--area);font:800 13px var(--mono);place-items:center;display:inline-grid}.gap-state.ok{color:var(--ok)}.gap-state.bad{color:var(--bad)}.answer-input{white-space:pre;min-height:50px;overflow-x:auto}.answer-input.multiline{white-space:pre}.answer-input.correct{border-color:var(--ok);background:var(--ok-bg)}.answer-input.incorrect{border-color:var(--bad)}.prose-input{white-space:pre-wrap;font-family:var(--sans);font-size:17px}.codeblock[data-lang=prose] pre,.order-list[data-lang=prose] .order-code,.bug-code[data-lang=prose] .bug-line code{white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--sans);font-size:16px;line-height:1.6}.bug-code[data-lang=prose] .bug-line{font-family:var(--sans);padding-top:6px;padding-bottom:6px}.code-editor.prose-editor{white-space:pre-wrap;overflow-wrap:anywhere;font:17px/1.6 var(--sans);field-sizing:content;min-height:calc(8lh + 36px);overflow-x:hidden}.gap-hint summary{cursor:pointer;font:700 12px var(--mono);text-transform:uppercase;letter-spacing:.06em;padding:6px 0;text-decoration:underline}.gap-hint p{border:var(--border-thin);background:var(--white);margin:4px 0 0;padding:10px 14px}.choices{border:0;gap:12px;min-width:0;margin:0;padding:0;display:grid}.choices legend{margin-bottom:12px}.choice{text-align:left;border:var(--border);background:var(--white);width:100%;box-shadow:var(--shadow-sm);align-items:flex-start;gap:14px;padding:14px 16px;font-size:17px;line-height:1.45;display:flex}.choice:hover{background:var(--raised);box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}.choice[aria-checked=true]{background:var(--area);color:var(--ink)}.choice.correct{background:var(--ok-bg);border-color:var(--ok)}.choice.incorrect{background:var(--bad-bg);border-color:var(--bad)}.choice.missed{outline:3px dashed var(--ok);outline-offset:3px}.choice-letter{background:var(--ink);width:30px;height:30px;color:var(--paper);font:800 13px var(--mono);flex-shrink:0;place-items:center;display:grid}.choice-text{overflow-wrap:anywhere;min-width:0}.choice-text code{font-size:.88em}.choice-why{border:var(--border);background:var(--paper-2);border-top:0;margin:0;padding:10px 14px 10px 60px;font-size:15px}.order-list{box-shadow:var(--shadow);grid-template-columns:minmax(0,1fr);gap:6px;margin:0;padding:8px;list-style:none;display:grid}.order-item{cursor:grab;background:#1b1b1b;border:2px solid #444;align-items:center;gap:10px;padding:4px 6px 4px 10px;display:flex}.order-item.dragging{opacity:.5;border-color:var(--accent)}.order-item.right{border-color:var(--ok);box-shadow:inset 6px 0 0 var(--ok)}.order-item.wrong{border-color:var(--bad);box-shadow:inset 6px 0 0 var(--bad)}.order-handle{color:#888;-webkit-user-select:none;user-select:none}.order-code{white-space:pre;color:var(--on-block);flex:1;font-size:14px;overflow-x:auto}.order-buttons{gap:4px;display:flex}.order-buttons .btn{min-height:32px;box-shadow:none;border-width:2px;padding:4px 8px}.diff{border:var(--border);background:var(--white);padding:12px 16px}.diff ol{font:14px var(--mono);margin:6px 0 0;padding-left:2em}.diff li.ok{color:var(--ok)}.diff li.bad{color:var(--bad);font-weight:800}.diff li.unknown{color:var(--muted)}pre.code.plain{background:var(--block);color:var(--on-block);border:var(--border);margin:0;padding:14px 18px;font-size:14px;overflow-x:auto}.terminal{border:var(--border);background:var(--block);color:var(--on-block);box-shadow:var(--shadow)}.terminal-body{font:15px/1.6 var(--mono);padding:14px 18px}.term-line{white-space:pre-wrap}.term-bad{color:#ff8a80;margin-bottom:6px}.term-input{align-items:center;gap:10px;display:flex}.term-input input{color:var(--on-block);font:15px var(--mono);caret-color:var(--accent);background:0 0;border:0;flex:1;padding:4px 0}.term-input input:focus{box-shadow:none;background:0 0;outline:none}.term-input:focus-within{box-shadow:0 2px 0 var(--accent)}.term-output{color:#c9c5bb;white-space:pre-wrap;margin:10px 0 0;font-size:14px}.context{border:var(--border-thin);background:var(--white);padding:12px 16px}.vm-meta{align-self:stretch;align-items:center;gap:12px;display:flex}.vm-start{justify-items:start;gap:12px;padding:18px;display:grid}.vm-start p{max-width:62ch;margin:0}.vm-status{color:#c9c5bb;font-size:14px}.vm-status:empty{display:none}.vm-screen{height:440px;padding:8px 10px}.vm-screen .xterm{height:100%}@media (max-width:640px){.vm-screen{height:360px}}.vm-dock{--dock-h:min(46vh, 420px);z-index:30;border-width:3px 0 0;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -6px #0000002e}.vm-dock .vm-status{margin:0;padding:14px 18px}.vm-dock .vm-screen{height:calc(var(--dock-h) - 38px)}.vm-dock.collapsed .vm-screen,.vm-dock.collapsed .vm-status{display:none}.vm-dock .codeblock-bar svg{width:14px;height:14px}body.vm-dock-open{padding-bottom:min(46vh,420px)}.module-terminal-note{max-width:60ch;margin:14px 0 0}@media (max-width:640px){.vm-dock{--dock-h:50vh}body.vm-dock-open{padding-bottom:50vh}}.editor-block .code-editor{min-height:180px}.test-results{border:var(--border);background:var(--white);padding:12px 16px}.test-results ul{gap:6px;margin:8px 0 0;padding:0;list-style:none;display:grid}.test{grid-template-columns:26px 1fr;align-items:start;gap:4px 8px;font-size:15px;display:grid}.test-mark{border:2px solid var(--ink);width:22px;height:22px;font:800 13px var(--mono);place-items:center;display:grid}.test.pass .test-mark{background:var(--ok);color:var(--on-color)}.test.fail .test-mark{background:var(--bad);color:#fffdf8}.test-message{font:13px var(--mono);color:var(--bad);white-space:pre-wrap;grid-column:2}.run-output.standalone{border:var(--border)}.test-source summary{cursor:pointer;padding:4px 0}.test-source pre{margin-top:8px}.bug-lines{margin:0;padding:8px 0;list-style:none}.bug-line{text-align:left;width:100%;color:var(--on-block);font:14.5px/1.7 var(--mono);background:0 0;border:0;gap:14px;padding:2px 16px 2px 0;display:flex}.bug-line code{white-space:pre}.bug-line .line-number{text-align:right;color:#7d7a72;-webkit-user-select:none;user-select:none;flex-shrink:0;width:44px}.bug-line:hover{background:#262626}.bug-line[aria-pressed=true]{box-shadow:inset 6px 0 0 var(--warn);background:#3a2e00}.bug-line.found{box-shadow:inset 6px 0 0 var(--bad);background:#3b0f0c}.bug-line.wrong{-webkit-text-decoration:line-through #ff8a80;text-decoration:line-through #ff8a80;box-shadow:inset 6px 0 #777}.bug-code{overflow-x:auto}.bug-fixes{border:var(--border);background:var(--white);gap:12px;padding:14px 16px;display:grid}.model-answer{border:var(--border);background:var(--white);box-shadow:var(--shadow-sm);gap:12px;padding:16px 18px;display:grid}.checklist{border:0;gap:8px;min-width:0;margin:0;padding:0;display:grid}.checklist legend{margin-bottom:10px}.check-item{border:var(--border-thin);background:var(--white);cursor:pointer;align-items:flex-start;gap:12px;padding:10px 12px;display:flex}.check-item:has(input:checked){background:var(--ok-bg)}.check-item input{margin-top:2px}.check-item>span{overflow-wrap:anywhere;min-width:0}.feedback{border:var(--border);background:var(--white);align-items:flex-start;gap:10px;min-height:54px;margin:22px 0 0;padding:14px 16px;font-weight:600;display:flex}.feedback:empty{display:none}.feedback.ok{background:var(--ok);color:var(--ink)}.feedback.bad{background:var(--bad-bg);border-color:var(--bad)}.feedback.partial{background:var(--note)}.feedback.info{color:var(--ink-2);font-weight:500}.feedback .icon{margin-top:3px}.explanation{border:var(--border);background:var(--white);border-left-width:12px;margin-top:18px;padding:14px 18px}.solution{border:3px dashed var(--ink);background:var(--paper-2);margin-top:16px;padding:14px 18px}.solution-list{margin:0;padding-left:1.4em}.help-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;margin-top:18px;display:flex}.hints{flex:1;gap:8px;display:grid}.hints .btn{justify-self:start}.hint-list{gap:6px;margin:0;padding-left:1.4em;display:grid}.hint-list li{border:var(--border-thin);background:var(--note);padding:8px 12px}.player-nav{border-top:var(--border);justify-content:space-between;gap:12px;margin-top:30px;padding-top:22px;display:flex}.module-done{background:var(--ink);color:var(--paper);border:var(--border);margin-top:22px;padding:20px}.module-done .btn{margin-top:6px}.wiki{border:var(--border);background:var(--white);margin-top:30px}.wiki summary{cursor:pointer;align-items:center;gap:12px;padding:14px 16px;font-weight:700;list-style:none;display:flex}.wiki summary::-webkit-details-marker{display:none}.wiki summary:after{content:"+";font:800 22px var(--mono);margin-left:auto}.wiki[open] summary:after{content:"−"}.wiki summary .label{background:var(--ink);color:var(--paper);white-space:nowrap;flex-shrink:0;padding:3px 7px}.wiki>.prose{padding:0 18px 18px}.source-dialog{border:var(--border);width:min(1100px,100vw - 32px);max-height:88vh;box-shadow:10px 10px 0 var(--ink);background:var(--paper);color:var(--ink);padding:0}.source-dialog::backdrop{background:#0b0b0b8c}.source-dialog header{border-bottom:var(--border);justify-content:space-between;gap:16px;padding:16px 18px;display:flex}.source-dialog h2{font-size:22px}.source-code{background:var(--block);max-height:70vh;color:var(--on-block);margin:0;padding:10px 0;font-size:13.5px;overflow:auto}.source-line{white-space:pre;min-width:max-content;padding-right:16px;display:block}.source-line.selected{box-shadow:inset 5px 0 0 var(--area);background:#3a2e00}.source-line .line-number{text-align:right;color:#7d7a72;-webkit-user-select:none;user-select:none;width:52px;padding-right:14px;display:inline-block}@media (max-width:700px){.player{padding:18px 16px 72px}.player-head{position:static}.steps{grid-template-columns:repeat(auto-fill,minmax(28px,1fr));display:grid}.step{max-width:none;height:34px}.codeblock pre,.bug-line{font-size:13.5px}.bug-line .line-number{width:32px}.prompt{font-size:17px}.choice-why{padding-left:14px}.answer-input,.code-editor,.term-input input{font-size:16px}.player-nav .btn{flex:1}#runner-state{flex-basis:100%}}.sql-tables{grid-template-columns:minmax(0,1fr);gap:10px;margin-bottom:18px;display:grid}.sql-table summary{cursor:pointer;flex-wrap:wrap;align-items:baseline;gap:4px 12px;padding:4px 0;display:flex}.sql-table summary code{font-weight:800}.sql-table .sql-grid{margin-top:6px}.sql-grid{max-height:380px;box-shadow:none;overflow:auto}.sql-grid table{width:auto;min-width:100%;font:13.5px/1.4 var(--mono)}.sql-grid th{text-transform:none;letter-spacing:0;white-space:nowrap;padding:6px 12px;font-size:12.5px;position:sticky;top:0}.sql-grid td{white-space:nowrap;border-top-width:1px;padding:5px 12px}.sql-grid td+td,.sql-grid th+th{border-left-width:1px}.sql-grid td.sql-number{text-align:right;font-variant-numeric:tabular-nums}.sql-grid td.sql-null,.sql-grid td.sql-empty{color:var(--muted);font-style:italic}.sql-more{margin:6px 0 0}.sql-result{grid-template-columns:minmax(0,1fr);gap:8px;margin-top:14px;display:grid}.sql-result .run-output{margin:0}.run-output .sql-grid{white-space:normal;color:var(--ink);margin:4px 0 14px}.run-output .sql-tag{color:var(--muted);display:block}.run-output .sql-error{background:var(--bad-bg);margin:2px 0 8px;padding:6px 10px;display:block}.run-output .sql-notice{color:var(--muted);font-style:italic;display:block}.run-output .sql-plan{border:var(--border);background:var(--paper);font:13.5px/1.5 var(--mono);white-space:pre;margin:4px 0 14px;padding:10px 14px;overflow-x:auto}.hero{border-bottom:var(--border);grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);display:grid}.hero-text{border-right:var(--border);flex-direction:column;justify-content:space-between;gap:28px;padding:56px 32px 48px;display:flex}.hero-title{text-transform:uppercase;letter-spacing:-.06em;font-size:clamp(56px,9.6vw,164px);line-height:.94}.hero-side{background:var(--white);flex-direction:column;gap:24px;padding:48px 32px;display:flex}.hero-lead{margin:0;font-size:20px;line-height:1.55}.hero-areas{border-top:var(--border);margin:0;padding:0;list-style:none}.hero-areas li{border-bottom:var(--border)}.hero-areas a{text-transform:uppercase;letter-spacing:-.02em;align-items:baseline;gap:16px;padding:10px 4px;font-size:22px;font-weight:900;text-decoration:none;display:flex}.hero-areas a:hover{background:var(--area)}.hero-areas .label{color:var(--muted)}.hero-stats{margin:0}.resume{background:var(--area);max-width:560px;color:var(--ink);border:var(--border);box-shadow:var(--shadow);flex-direction:column;align-items:flex-start;gap:10px;padding:22px 24px 24px;display:flex}.resume>p{margin:0}.resume-title{letter-spacing:-.03em;overflow-wrap:anywhere;font-size:clamp(24px,2.6vw,34px);line-height:1.05}.resume .area-progress{align-self:stretch}.resume .btn{margin-top:6px}.resume-step{margin:12px 0 0}.resume-note{margin:8px 0 0;font-weight:700}.area-grid{grid-template-columns:repeat(6,1fr);gap:0;display:grid}.area-block{background:var(--area);border-bottom:var(--border);border-right:var(--border);min-height:330px;color:var(--ink);flex-direction:column;gap:10px;padding:28px 30px 26px;text-decoration:none;transition:background .1s;display:flex;position:relative;overflow:hidden}.area-block.wide{grid-column:span 4}.area-block.narrow{grid-column:span 2}.area-block.full{grid-column:span 6;min-height:260px}.area-block:hover{background:var(--ink);color:var(--area)}.area-block:hover .area-progress{border-color:var(--area)}.area-block:hover .area-progress span{background:var(--area)}.area-number{font:800 15px var(--mono)}.area-name{letter-spacing:-.055em;text-transform:uppercase;overflow-wrap:anywhere;-webkit-hyphens:auto;hyphens:auto;margin-top:auto;font-size:clamp(38px,5.4vw,88px);font-weight:1000;line-height:.88}.area-block.narrow .area-name{font-size:clamp(36px,3.8vw,62px)}.area-tagline{max-width:34em;font-size:18px;font-weight:600}.area-meta{opacity:.85}.area-progress{background:0 0;border:3px solid;height:14px;display:block}.area-progress>span{background:currentColor;height:100%;display:block}.area-foot{justify-content:space-between;align-items:center;gap:12px;display:flex}.area-go{align-items:center;gap:8px;display:inline-flex}.area-go .icon{width:22px;height:22px}.area-hero,.area-banner,.module-hero{background:var(--area);color:var(--ink);border-bottom:var(--border)}.area-hero-inner,.area-banner-inner,.module-hero-inner{max-width:var(--max);margin:0 auto;padding:40px 32px 44px}.area-banner-inner{padding:28px 32px 30px}.area-banner .page-title{font-size:clamp(40px,6vw,84px)}.area-hero-tagline{max-width:30em;margin:14px 0 26px;font-size:clamp(20px,2.2vw,28px);font-weight:800}.area-hero-grid{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:end;gap:32px;display:grid}.area-hero-description{max-width:42em;font-size:18px}.btn.big{min-height:58px;padding:12px 22px;font-size:15px}.stat-grid{border:var(--border);background:var(--paper);grid-template-columns:repeat(2,1fr);margin:0;display:grid}.stat-grid>div{border-bottom:var(--border);padding:14px 16px}.stat-grid>div:nth-child(odd){border-right:var(--border)}.stat-grid>div:nth-last-child(-n+2){border-bottom:0}.stat-grid dd{letter-spacing:-.04em;margin:4px 0 0;font-size:44px;font-weight:1000;line-height:1}.stat-grid small{font-size:22px}html:has(.area-tabs){scroll-padding-top:calc(var(--topbar-h,64px) + 48px + 26px)}.area-tabs{top:calc(var(--topbar-h,64px) - 1px);z-index:6;background:var(--paper);border-bottom:var(--border);scrollbar-width:none;display:flex;position:sticky;overflow-x:auto}.area-tabs a{border-right:var(--border);font:800 13px var(--mono);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;padding:14px 20px;text-decoration:none}.area-tabs a[aria-current]{background:var(--ink);color:var(--paper)}.area-tabs a b{background:var(--area);min-width:22px;color:var(--ink);text-align:center;margin-left:6px;padding:0 5px;display:inline-block}.outcomes{border:var(--border);background:var(--white);box-shadow:var(--shadow);margin-bottom:56px;padding:20px 24px}.outcomes ul{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:10px 28px;margin:12px 0 0;padding:0;list-style:none;display:grid}.outcomes li{padding-left:28px;position:relative}.outcomes li:before{content:"→";font:800 16px var(--mono);position:absolute;left:0}.track{margin-bottom:56px}.track-head{align-items:flex-start;gap:20px;margin-bottom:18px;display:flex}.track-head p{color:var(--ink-2);margin:6px 0 0}.track-letter{background:var(--block);width:64px;height:64px;color:var(--accent);font:800 34px var(--mono);flex-shrink:0;place-items:center;display:grid}.module-list{border:var(--border);box-shadow:var(--shadow);background:var(--white);margin:0;padding:0;list-style:none}.module-list li+li{border-top:var(--border)}.module-row{grid-template-columns:70px minmax(0,1fr) auto 170px;align-items:center;gap:18px;padding:16px 20px;text-decoration:none;display:grid}.module-row:hover{background:var(--accent)}.module-row.complete .module-number{background:var(--ink);color:var(--paper)}.module-number{border:var(--border);height:52px;font:800 20px var(--mono);place-items:center;display:grid}.module-main{gap:2px;display:grid}.module-title{letter-spacing:-.02em;font-size:22px;font-weight:900;line-height:1.15}.module-summary{color:var(--ink-2);font-size:15px}.note-mark{border:var(--border-thin);background:var(--note);font:700 11px/1.6 var(--mono);text-transform:uppercase;justify-self:start;padding:0 6px}.place-mark{border:var(--border-thin);background:var(--white);color:var(--ink);font:700 11px/1.6 var(--mono);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;justify-self:start;align-items:center;gap:5px;padding:0 6px;display:inline-flex}.place-mark.place-pc{background:var(--ink);color:var(--paper)}.module-place{flex-wrap:wrap;align-items:center;gap:8px 12px;margin:-8px 0 22px;font-weight:600;display:flex}.module-place .place-mark{padding:2px 8px;font-size:12px}.module-meta{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.module-progress{justify-items:end;gap:6px;display:grid}.mini-bars{justify-content:flex-end;gap:2px;width:100%;display:flex}.mini-bars i{border:2px solid var(--ink);background:var(--white);flex:1;max-width:12px;height:16px}.mini-bars i.on{background:var(--ink)}.capstone-block{background:var(--block);color:var(--on-block);border:var(--border);box-shadow:10px 10px 0 var(--accent);padding:28px 30px}.capstone-block .label{color:var(--accent)}.capstone-block h2{margin:10px 0 12px}.capstone-block .btn{margin-top:8px}.module-title-big{font-size:clamp(40px,6.2vw,92px)}.module-kicker{margin:0 0 12px}.module-lead{max-width:38em;margin:16px 0 24px;font-size:21px;font-weight:600}.module-actions{flex-wrap:wrap;gap:12px;display:flex}.lesson-layout{grid-template-columns:240px minmax(0,1fr);align-items:start;gap:56px;display:grid}.lesson-aside{position:sticky;top:90px}.toc{border:var(--border);background:var(--white);padding:14px 14px 10px}.toc ol{counter-reset:toc;gap:2px;margin:10px 0 0;padding:0;list-style:none;display:grid}.toc a{border-left:4px solid #0000;padding:5px 6px;font-size:14px;line-height:1.3;text-decoration:none;display:block}.toc a[aria-current]{border-left-color:var(--ink);background:var(--accent);color:var(--ink);font-weight:700}.lesson{min-width:0;max-width:820px}.toc-mobile{border:var(--border);background:var(--white);margin-bottom:32px;display:none}.toc-mobile summary{cursor:pointer;justify-content:space-between;align-items:center;padding:12px 14px;list-style:none;display:flex}.toc-mobile summary::-webkit-details-marker{display:none}.toc-mobile summary:after{content:"+";font:800 20px var(--mono)}.toc-mobile[open] summary:after{content:"−"}.toc-mobile ol{margin:0;padding:0 14px 12px;list-style:none;display:grid}.toc-mobile a{border-top:var(--border-thin);padding:8px 0;text-decoration:none;display:block}.goals{border:var(--border);background:var(--white);box-shadow:var(--shadow-sm);margin-bottom:40px;padding:16px 20px}.goals ul{gap:4px;margin:10px 0 0;padding-left:1.3em;display:grid}.resources-block{border-top:var(--border);margin-top:48px;padding-top:18px}.resources-block ul{gap:4px;margin:10px 0 0;padding-left:1.3em;display:grid}.lesson-notes{border:var(--border);background:var(--note);box-shadow:var(--shadow-sm);margin-top:48px;padding:16px 20px}.lesson-notes textarea{font-family:var(--sans);margin-top:10px;font-size:16px}.lesson-notes textarea:disabled{cursor:progress}.lesson-notes p{margin:8px 0 0}.lesson-notes .btn{margin-top:10px}.exercise-overview{border:var(--border);background:var(--white);box-shadow:var(--shadow);margin-top:56px;padding:26px}.exercise-overview-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.read-toggle{font:700 13px var(--mono);text-transform:uppercase;cursor:pointer;align-items:center;gap:10px;display:inline-flex}.exercise-list{border-top:var(--border-thin);margin:0 0 22px;padding:0;list-style:none}.exercise-list a{border-bottom:var(--border-thin);grid-template-columns:38px minmax(0,1fr) auto 26px;align-items:center;gap:12px;padding:10px 6px;text-decoration:none;display:grid}.exercise-list a.done>span:nth-child(2){text-decoration:line-through;text-decoration-thickness:2px}.exercise-state{border:2px solid var(--ink);place-items:center;width:24px;height:24px;display:grid}.exercise-list a.done .exercise-state{background:var(--ok);color:var(--on-color)}.module-pager{grid-template-columns:1fr 1fr;gap:16px;margin-top:40px;display:grid}.module-pager a{border:var(--border);background:var(--white);gap:4px;padding:16px 18px;font-size:19px;font-weight:800;text-decoration:none;display:grid}.module-pager a.next{text-align:right;justify-items:end}.module-pager .label{align-items:center;gap:6px;display:inline-flex}.page-intro{max-width:46em;font-size:18px}.cards-toolbar{align-items:center;gap:12px;max-width:520px;margin:26px 0;display:flex}.deck-stats{border:var(--border);background:var(--white);grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0;margin-bottom:24px;display:grid}.deck-counts{border-right:var(--border);grid-template-columns:repeat(3,1fr);display:grid}.deck-counts>div{border-right:var(--border-thin);padding:16px;display:grid}.deck-counts>div:last-child{border-right:0}.deck-stats.empty{grid-template-columns:1fr}.deck-stats.empty .deck-counts{border:0}.big-number{letter-spacing:-.05em;font-size:52px;font-weight:1000;line-height:1}.boxes{grid-template-columns:repeat(5,1fr);align-items:end;gap:10px;height:150px;padding:16px;display:grid}.box-col{text-align:center;grid-template-rows:1fr auto auto;height:100%;display:grid}.box-bar{background:var(--accent);border:var(--border-thin);align-self:end;min-height:4px}.deck-start{border:var(--border);background:var(--white);box-shadow:var(--shadow);justify-items:start;gap:12px;padding:24px;display:grid}.deck-done{margin:0;font-size:18px}.flashcard{border:var(--border);background:var(--white);box-shadow:10px 10px 0 var(--ink);grid-template-columns:minmax(0,1fr);gap:20px;padding:26px 28px;display:grid}.flashcard-meta{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:10px;display:flex}.flashcard-question{letter-spacing:-.02em;max-width:none;font-size:clamp(22px,2.8vw,32px);font-weight:800;line-height:1.25}.flashcard-answer{border-top:var(--border);max-width:none;padding-top:18px}.grade-row{flex-wrap:wrap;gap:12px;display:flex}.grade-row.grades{grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.grade-row.grades .btn{flex-wrap:wrap;gap:4px 10px;padding-inline:12px}.grade-next{text-transform:none;letter-spacing:0;opacity:.75;flex-basis:100%;font-size:12px;font-weight:600}.card-browser{margin-top:64px}.card-browser h2{margin-bottom:16px}.card-item{border:var(--border);background:var(--white);border-bottom:0}.card-item:last-child{border-bottom:var(--border)}.card-item summary{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;font-weight:700;display:flex}.card-item .card-q{min-width:0}.card-q .codeblock,.flashcard-question .codeblock{letter-spacing:0;margin:10px 0 0;font-size:15px;font-weight:400}.card-item>.prose{max-width:none;padding:0 16px 16px}.project-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:24px;margin-top:28px;display:grid}.project-card{border:var(--border);background:var(--white);box-shadow:var(--shadow);flex-direction:column;gap:10px;padding:22px;text-decoration:none;display:flex}.project-card:hover{background:var(--accent);box-shadow:8px 8px 0 var(--ink);transform:translate(-2px,-2px)}.project-card.capstone{background:var(--block);color:var(--on-block);box-shadow:10px 10px 0 var(--accent);grid-column:1/-1}.project-card.capstone .area-progress{border-color:var(--on-block)}.project-card.capstone .area-progress span{background:var(--accent)}.project-card.capstone .tag{color:var(--ink)}.project-title{letter-spacing:-.035em;text-transform:uppercase;overflow-wrap:anywhere;-webkit-hyphens:auto;hyphens:auto;font-size:30px;font-weight:1000;line-height:1}.project-skills{flex-wrap:wrap;gap:6px;margin-top:auto;display:flex}.project-kicker{flex-wrap:wrap;gap:6px;display:flex}.project-lead{max-width:40em;font-size:21px;font-weight:700}.project-layout{grid-template-columns:minmax(0,1fr) 220px;align-items:start;gap:48px;display:grid}.project-aside{gap:14px;display:grid;position:sticky;top:130px}.project-meter{border:var(--border);background:var(--white);padding:16px;display:grid}.project-section{margin-top:44px}.project-section h2{margin-bottom:14px}.project-steps{counter-reset:step;gap:10px;margin:0;padding:0;list-style:none;display:grid}.project-step{border:var(--border);background:var(--white)}.project-step .check-item{border:0;font-size:18px;font-weight:800}.step-detail{max-width:none;padding:0 16px 14px 50px}.plain-list{gap:6px;margin:0;padding-left:1.3em;display:grid}.portfolio{border:var(--border);background:var(--accent);color:var(--ink);padding:20px 22px}.cheatsheet{max-width:none}.cheatsheet h2{font-size:26px}.glossary-search{gap:8px;max-width:520px;margin-bottom:8px;display:grid}.glossary{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px;margin:20px 0 0;display:grid}.glossary-entry{border:var(--border);background:var(--white);padding:14px 16px}.glossary-entry dt{margin-bottom:6px;font-size:20px;font-weight:900}.glossary-entry dd{margin:0}.data-table-scroll{margin:24px 0;overflow-x:auto}.data-table{border-collapse:collapse;border:var(--border);background:var(--white);width:100%}.data-table th{background:var(--ink);color:var(--paper);text-align:left;font:800 12px var(--mono);text-transform:uppercase;padding:10px 12px}.data-table td{border-top:var(--border-thin);padding:10px 12px}.data-table .btn{overflow-wrap:normal;-webkit-hyphens:manual;hyphens:manual}.data-table td:nth-child(2){white-space:nowrap}.data-section{justify-items:start;gap:10px;margin-top:40px;display:grid}.data-section textarea{width:100%}@media (max-width:1100px){.hero{grid-template-columns:1fr}.hero-text{border-right:0;border-bottom:var(--border)}.area-block.wide,.area-block.narrow{grid-column:span 3}.module-row{grid-template-columns:56px minmax(0,1fr) 150px}.module-meta{display:none}.lesson-layout{grid-template-columns:1fr;gap:0}.lesson-aside{display:none}.toc-mobile{display:block}.project-layout{grid-template-columns:minmax(0,1fr)}.project-aside{position:static}}@media (max-width:700px){.hero-text,.hero-side{padding:32px 18px}.hero-areas{display:none}.area-block,.area-block.wide,.area-block.narrow,.area-block.full{border-right:0;grid-column:span 6;min-height:250px;padding:22px 18px}.area-hero .btn.big{text-align:left;justify-content:space-between}.capstone-block,.project-card.capstone{box-shadow:6px 6px 0 var(--accent)}.deck-start{padding:18px}.data-table th,.data-table td{padding:10px 8px}.area-hero-inner,.area-banner-inner,.module-hero-inner{padding:26px 18px 30px}.area-hero-grid{grid-template-columns:minmax(0,1fr)}.module-row{grid-template-columns:44px minmax(0,1fr);gap:12px;padding:14px}.module-number{height:44px;font-size:16px}.module-progress{grid-column:2;justify-items:start}.mini-bars{justify-content:flex-start}.track-letter{width:46px;height:46px;font-size:24px}.deck-stats{grid-template-columns:1fr}.deck-counts{border-right:0;border-bottom:var(--border)}.module-pager{grid-template-columns:1fr}.flashcard{box-shadow:6px 6px 0 var(--ink);padding:20px 18px}.grade-row.grades{grid-template-columns:repeat(2,minmax(0,1fr))}.grade-row.grades kbd{display:none}.exercise-overview{padding:18px 14px}.exercise-list a{grid-template-columns:30px minmax(0,1fr) 24px}.exercise-list .tag{display:none}}
