@import"https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap";:root{--bg: #0b0b0e;--surface: #121216;--surface-2: #191920;--border: rgba(255, 255, 255, .08);--border-strong: rgba(255, 255, 255, .14);--text: #eceef1;--text-2: #a6abb3;--text-3: #6d7280;--accent: #3b82f6;--accent-2: #60a5fa;--accent-soft: rgba(59, 130, 246, .14);--success: #34d399;--code-bg: #0e0e12;--code-border: #1d1d25;--code-text: #d6d8e0;--radius: 12px;--radius-lg: 16px;--sans: "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif;--mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace;color:var(--text);background:var(--bg);font-family:var(--sans);font-synthesis:none;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--bg)}body{margin:0;background:var(--bg);color:var(--text)}button,a{color:inherit;font:inherit}button{border:0;background:none}a{text-decoration:none}::selection{color:var(--text);background:var(--accent-soft)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app-shell main{min-height:100vh;background:var(--bg)}.app-shell.is-course main{padding-top:60px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 18px;border-radius:8px;font-size:14px;font-weight:600;white-space:nowrap;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .15s ease}.btn svg{width:16px}.btn-primary{color:#fff;background:var(--accent);box-shadow:0 0 0 1px #3b82f680,0 4px 16px #3b82f640}.btn-primary:hover{background:var(--accent-2);transform:translateY(-1px)}.btn-ghost{color:var(--text-2);background:var(--surface);border:1px solid var(--border-strong)}.btn-ghost:hover{color:var(--text);border-color:var(--text-3)}.btn-lg{height:46px;padding:0 22px;border-radius:10px;font-size:15px}.wordmark{display:inline-flex;align-items:center;gap:10px;color:var(--text);font-size:15px;font-weight:700;letter-spacing:-.01em}.wordmark .mark{display:grid;place-items:center;width:27px;height:27px;border-radius:7px;background:var(--accent-soft);color:var(--accent-2)}.wordmark span{color:var(--text-3);font-weight:500}.site-nav{position:sticky;top:0;z-index:40;background:#0b0b0ead;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);transition:background .2s ease,border-color .2s ease}.site-nav.is-scrolled{background:#09090cd6;border-bottom-color:var(--border-strong)}.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:24px;height:64px;max-width:1180px;margin:0 auto;padding:0 clamp(20px,4vw,48px)}.nav-right{display:flex;align-items:center;gap:26px}.nav-links{display:flex;align-items:center;gap:30px}.nav-links a{padding:6px 0;color:var(--text-2);font-size:14px;font-weight:500;letter-spacing:-.01em;transition:color .15s ease}.nav-links a:hover,.nav-links a:focus-visible{color:var(--text)}.nav-actions{display:flex;align-items:center;gap:12px}.nav-actions .btn{height:36px;font-size:13.5px}.nav-cta{background:transparent}.nav-progress{display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 11px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--accent-2);font:600 12px var(--mono)}.nav-progress:before{width:6px;height:6px;border-radius:50%;background:var(--accent-2);box-shadow:0 0 10px #3b82f699;content:""}.btn-arrow{transition:transform .15s ease}.btn:hover .btn-arrow{transform:translate(3px)}.wordmark .mark{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent-2));box-shadow:0 2px 10px #3b82f666}.wordmark .mark svg{width:15px}.hero{position:relative;overflow:hidden}.hero:before{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(620px 340px at 50% 0%,rgba(59,130,246,.16),transparent 70%);content:""}.hero-inner{position:relative;max-width:780px;margin:0 auto;padding:clamp(72px,10vw,132px) clamp(20px,4vw,48px) 0;text-align:center}.hero h1{margin:0;color:var(--text);font-size:clamp(40px,6.4vw,72px);font-weight:700;line-height:1.06;letter-spacing:-.04em}.hero h1 em{color:var(--accent-2);font-style:normal}.hero-sub{max-width:600px;margin:22px auto 0;color:var(--text-2);font-size:17px;line-height:1.7}.hero-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;margin-top:34px}.hero-stats{display:flex;flex-wrap:wrap;justify-content:center;gap:14px 12px;margin:42px auto 0;padding:16px 26px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg)}.hero-stats span{display:inline-flex;flex-direction:column;align-items:center;gap:3px;color:var(--text-3);font-size:13px;line-height:1.25}.hero-stats span+span{padding-left:34px;border-left:1px solid var(--border)}.hero-stats strong{color:var(--text);font-size:20px;font-weight:700}.hero-visual{position:relative;max-width:720px;margin:46px auto 0;padding:0 clamp(20px,4vw,48px) clamp(72px,8vw,112px)}.code-window{overflow:hidden;background:var(--code-bg);border:1px solid var(--code-border);border-radius:var(--radius-lg);box-shadow:0 24px 80px #00000080,0 1px #ffffff0a inset}.code-window-bar{display:flex;align-items:center;gap:8px;height:44px;padding:0 16px;background:var(--surface-2);border-bottom:1px solid var(--code-border)}.w-dot{width:11px;height:11px;border-radius:50%}.w-red{background:#ff5f56}.w-yellow{background:#ffbd2e}.w-green{background:#27c93f}.code-window-bar code{margin-left:12px;color:var(--text-3);font:12.5px var(--mono)}.code-window-body{margin:0;padding:26px 28px;overflow-x:auto;color:var(--code-text);font:13.5px/1.85 var(--mono)}.code-window-body .c-kw,.code-window-body .c-fn{color:#7dd3fc}.code-window-body .c-num{color:#fbbf24}.code-window-body .c-str{color:#86efac}.code-window-body .c-dim{color:var(--text-3)}.method{padding:clamp(72px,9vw,120px) clamp(20px,4vw,48px);scroll-margin-top:100px;background:var(--surface);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.section-kicker{display:block;margin-bottom:14px;color:var(--accent-2);font-size:12.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.section-head h2{max-width:640px;margin:0 auto;color:var(--text);font-size:clamp(28px,3.6vw,40px);font-weight:700;line-height:1.15;letter-spacing:-.03em}.section-desc{max-width:560px;margin:16px auto 0;color:var(--text-2);font-size:15px;line-height:1.7}.method .section-head,.curriculum .section-head{text-align:center}.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1120px;margin:56px auto 0}.feature-card{padding:28px 26px;background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius-lg);transition:border-color .15s ease,transform .15s ease}.feature-card:hover{border-color:#3b82f680;transform:translateY(-2px)}.feature-icon{display:grid;place-items:center;width:40px;height:40px;border-radius:10px;background:var(--accent-soft);color:var(--accent-2)}.feature-icon svg{width:19px}.feature-card h3{margin:18px 0 10px;color:var(--text);font-size:16.5px;font-weight:600;letter-spacing:-.01em}.feature-card p{margin:0;color:var(--text-2);font-size:14px;line-height:1.7}.curriculum{padding:clamp(56px,7vw,96px) clamp(20px,4vw,48px);scroll-margin-top:100px}.catalog-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;max-width:920px;margin:48px auto 0}.catalog-card{display:flex;flex-direction:column;gap:18px;padding:22px 22px 20px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);transition:border-color .15s ease,background .15s ease,transform .15s ease}.catalog-card:hover{background:var(--surface-2);border-color:#3b82f680;transform:translateY(-2px)}.catalog-top{display:flex;align-items:center;justify-content:space-between}.catalog-num{color:var(--text-3);font:500 13px var(--mono);letter-spacing:.04em}.catalog-status{width:18px;color:var(--accent-2);opacity:0;transform:translate(-4px);transition:opacity .15s ease,transform .15s ease,color .15s ease}.catalog-card:hover .catalog-status{opacity:1;transform:none}.catalog-card.is-done .catalog-status{opacity:1;transform:none;color:var(--success)}.catalog-body{display:flex;flex-direction:column;gap:5px;min-width:0}.catalog-body strong{color:var(--text);font-size:17px;font-weight:600;letter-spacing:-.01em;line-height:1.35}.catalog-body small{color:var(--text-3);font-size:12.5px;line-height:1.5}.catalog-foot{display:flex;align-items:center;gap:12px}.catalog-bar{flex:1;height:3px;overflow:hidden;background:var(--surface-2);border-radius:999px}.catalog-bar span{display:block;height:100%;background:var(--accent);border-radius:999px;transition:width .25s ease}.catalog-card.is-done .catalog-bar span{background:var(--success)}.catalog-count{color:var(--text-3);font:11.5px var(--mono);white-space:nowrap}.catalog-card.is-done .catalog-count{color:var(--success)}.projects-section{padding:clamp(72px,9vw,120px) clamp(20px,4vw,48px);background:var(--surface);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.projects-section .section-head{text-align:center}.projects-list{max-width:920px;margin:48px auto 0;border-top:1px solid var(--border-strong)}.projects-list>a{display:grid;grid-template-columns:42px 1fr 20px;align-items:center;gap:18px;min-height:84px;padding:0 8px;border-bottom:1px solid var(--border);transition:padding .16s ease,background .16s ease}.projects-list>a:hover{padding:0 16px;background:#3b82f60b}.project-list-icon{display:grid;place-items:center;width:38px;height:38px;color:var(--accent-2);background:var(--accent-soft);border-radius:9px}.project-list-icon svg{width:17px}.projects-list>a>span:nth-child(2){display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 18px}.projects-list small{grid-column:1 / -1;color:var(--text-3);font:500 10px var(--mono);text-transform:uppercase}.projects-list strong{font-size:16px;font-weight:600}.projects-list em{color:var(--text-3);font-size:12px;font-style:normal}.projects-list>a>svg{width:17px;color:var(--text-3)}.quiz-invite{display:flex;align-items:center;justify-content:space-between;gap:32px;max-width:920px;margin:clamp(64px,8vw,104px) auto;padding:34px clamp(20px,4vw,38px);border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong)}.quiz-invite>div{display:flex;align-items:flex-start;gap:18px}.quiz-invite>div>span{display:grid;flex:none;place-items:center;width:42px;height:42px;color:var(--accent-2);background:var(--accent-soft);border-radius:10px}.quiz-invite svg{width:19px}.quiz-invite small{color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.quiz-invite h2{margin:7px 0 6px;color:var(--text);font-size:21px;letter-spacing:-.02em}.quiz-invite p{max-width:520px;margin:0;color:var(--text-2);font-size:13.5px;line-height:1.65}.quiz-invite>a{display:inline-flex;flex:none;align-items:center;gap:10px;height:42px;padding:0 16px;color:#fff;background:var(--accent);border-radius:8px;font-size:12.5px;font-weight:600;transition:background .15s ease,transform .15s ease}.quiz-invite>a:hover{background:#2563eb;transform:translateY(-1px)}.quiz-page{max-width:900px;margin:0 auto;padding:clamp(44px,6vw,76px) clamp(20px,5vw,54px) 100px}.quiz-chooser>header{max-width:680px;margin-bottom:48px}.quiz-eyebrow,.quiz-topics>div:first-child>span,.quiz-review>span{color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.09em;text-transform:uppercase}.quiz-chooser>header h1,.quiz-results>header h1{margin:14px 0;color:var(--text);font-size:clamp(34px,5vw,52px);line-height:1.08;letter-spacing:-.04em}.quiz-chooser>header p,.quiz-results>header p{max-width:590px;margin:0;color:var(--text-2);font-size:16px;line-height:1.7}.quiz-all{display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:18px;width:100%;padding:24px 4px;color:var(--text);text-align:left;border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border-strong);cursor:pointer;transition:padding .16s ease,background .16s ease}.quiz-all:hover{padding-right:14px;padding-left:14px;background:#3b82f60b}.quiz-all>span:first-child{display:grid;place-items:center;width:42px;height:42px;color:var(--accent-2);background:var(--accent-soft);border-radius:10px}.quiz-all svg{width:18px}.quiz-all>span:nth-child(2){display:flex;flex-direction:column;gap:4px}.quiz-all small{color:var(--accent-2);font:500 10px var(--mono);text-transform:uppercase}.quiz-all strong{font-size:19px}.quiz-all em{color:var(--text-2);font-size:13px;font-style:normal}.quiz-all>svg{color:var(--text-3)}.quiz-topics{margin-top:68px}.quiz-topics>div:first-child h2{margin:8px 0 24px;font-size:25px;letter-spacing:-.025em}.quiz-topic-list{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--border-strong)}.quiz-topic-list button{display:grid;grid-template-columns:34px 1fr 18px;align-items:center;gap:12px;min-height:68px;padding:0 16px 0 4px;color:var(--text-2);text-align:left;border-bottom:1px solid var(--border);cursor:pointer;transition:color .15s ease,background .15s ease,padding .15s ease}.quiz-topic-list button:nth-child(odd){border-right:1px solid var(--border)}.quiz-topic-list button:hover{padding-left:12px;color:var(--text);background:#3b82f60a}.quiz-topic-list button>span:first-child{color:var(--text-3);font:11px var(--mono)}.quiz-topic-list button>span:nth-child(2){display:flex;flex-direction:column;gap:3px}.quiz-topic-list strong{font-size:14px;font-weight:600}.quiz-topic-list small{color:var(--text-3);font-size:11.5px}.quiz-topic-list svg{width:15px;color:var(--text-3)}.quiz-session-header{max-width:720px;margin:0 auto 54px}.quiz-session-header>button{display:inline-flex;align-items:center;gap:7px;margin-bottom:32px;color:var(--text-3);font-size:12px;font-weight:600;cursor:pointer}.quiz-session-header>button:hover{color:var(--text)}.quiz-session-header svg{width:15px}.quiz-session-header>div:nth-child(2){display:flex;justify-content:space-between;margin-bottom:12px;color:var(--text-3);font-size:12.5px}.quiz-session-header>div:nth-child(2) strong{color:var(--text-2);font:600 11px var(--mono)}.quiz-progress{height:3px;overflow:hidden;background:var(--surface-2);border-radius:999px}.quiz-progress span{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width .22s ease}.quiz-question{max-width:720px;margin:0 auto}.quiz-question-meta{display:flex;justify-content:space-between;color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.quiz-question h1{max-width:620px;margin:14px 0 10px;font-size:clamp(27px,4vw,36px);line-height:1.15;letter-spacing:-.03em}.quiz-question>p{margin:0;color:var(--text-2);font-size:15px;line-height:1.7}.quiz-question .code-block{margin:28px 0}.quiz-options{display:grid;gap:9px}.quiz-options button{display:grid;grid-template-columns:28px 1fr 20px;align-items:center;gap:12px;min-height:54px;padding:10px 14px;color:var(--text-2);text-align:left;background:#ffffff03;border:1px solid var(--border-strong);border-radius:9px;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease,transform .15s ease}.quiz-options button:not(:disabled):hover{color:var(--text);border-color:var(--accent);transform:translate(2px)}.quiz-options button>span{display:grid;place-items:center;width:26px;height:26px;color:var(--text-3);background:var(--surface-2);border-radius:6px;font:600 10px var(--mono)}.quiz-options button>strong{font-size:13.5px;font-weight:500}.quiz-options button>svg{width:18px}.quiz-options button.correct{color:#b9f6d8;background:#34d39914;border-color:#34d3996b}.quiz-options button.incorrect{color:#fecaca;background:#f8717112;border-color:#f8717166}.quiz-options button.muted{opacity:.5}.quiz-feedback{margin-top:18px;padding:17px 18px;border-left:3px solid;border-radius:0 8px 8px 0}.quiz-feedback.is-correct{background:#34d39912;border-color:var(--success)}.quiz-feedback.is-incorrect{background:#f871710f;border-color:#f87171}.quiz-feedback>span{color:var(--text);font-size:13px;font-weight:700}.quiz-feedback p{margin:6px 0 0;color:var(--text-2);font-size:13.5px;line-height:1.7}.quiz-next,.quiz-secondary{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;margin-top:24px;padding:0 17px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer}.quiz-next{color:#fff;background:var(--accent)}.quiz-next:hover{background:#2563eb}.quiz-next svg,.quiz-secondary svg{width:15px}.quiz-secondary{margin-left:10px;color:var(--text-2);background:var(--surface);border:1px solid var(--border-strong)}.quiz-results>header{max-width:680px;padding-bottom:54px;border-bottom:1px solid var(--border-strong)}.quiz-score{display:flex;align-items:baseline;gap:8px;margin-top:28px}.quiz-score strong{color:var(--accent-2);font-size:clamp(64px,10vw,94px);line-height:.9;letter-spacing:-.06em}.quiz-score span{color:var(--text-3);font:500 18px var(--mono)}.quiz-results>header h1{margin-top:24px;font-size:clamp(30px,4vw,42px)}.quiz-review{max-width:720px;margin-top:58px}.quiz-review>h2{margin:9px 0 28px;font-size:25px}.quiz-review article{padding:24px 0;border-top:1px solid var(--border)}.quiz-review article>div{display:flex;justify-content:space-between;gap:20px}.quiz-review article strong{font-size:15px}.quiz-review article>div span{color:var(--text-3);font-size:12px}.quiz-review article p{margin:10px 0;color:var(--text-2);font-size:13.5px;line-height:1.7}.quiz-review article small{color:var(--text-3);font:11px/1.6 var(--mono)}.site-footer{margin-top:clamp(56px,8vw,110px);padding:0 clamp(20px,4vw,48px);border-top:1px solid var(--border);color:var(--text-3);font-size:13px}.footer-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;max-width:1180px;margin:0 auto;padding:40px 0 34px}.footer-brand{display:flex;flex-direction:column;gap:10px}.footer-brand p{margin:0;color:var(--text-3);font-size:13px}.footer-links{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.footer-links a{display:inline-flex;padding:7px 12px;border-radius:6px;color:var(--text-2);font-size:13.5px;font-weight:500;transition:color .15s ease,background .15s ease}.footer-links a:hover{color:var(--text);background:var(--surface)}.footer-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;max-width:1180px;margin:0 auto;padding:18px 0 22px;border-top:1px solid var(--border);font-size:12px}.course-topbar{position:fixed;inset:0 0 auto;z-index:50;display:flex;align-items:center;justify-content:space-between;height:60px;padding:0 20px;background:#0b0b0ec7;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.course-topbar-left{display:flex;align-items:center;gap:14px;min-width:0}.menu-button{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 12px;border:1px solid var(--border-strong);border-radius:8px;background:var(--surface);color:var(--text-2);font-size:13.5px;font-weight:500;cursor:pointer;transition:color .15s ease,border-color .15s ease}.menu-button:hover{color:var(--text);border-color:var(--text-3)}.menu-button svg{width:16px}.course-position{display:flex;align-items:center;gap:12px}.course-crumb{color:var(--text-3);font-size:13px;white-space:nowrap}.course-crumb strong{color:var(--text-2);font-weight:600}.progress-pill{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-3);font-size:12.5px;font-weight:600;white-space:nowrap}.progress-pill strong{color:var(--accent-2);font-weight:700}.reading-progress{position:fixed;inset:0 0 auto;z-index:60;height:3px;pointer-events:none}.reading-progress span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width 80ms linear}.sidebar{position:fixed;top:60px;bottom:0;left:0;z-index:45;display:flex;width:280px;flex-direction:column;background:var(--surface);border-right:1px solid var(--border);transform:translate(-101%);transition:transform .25s cubic-bezier(.22,.8,.2,1)}.sidebar.is-open{transform:none;box-shadow:24px 0 60px #00000080}@media(min-width:960px){.sidebar{transform:none;box-shadow:none}}.sidebar-head{padding:22px 20px 18px;border-bottom:1px solid var(--border)}.sidebar-head-top{display:flex;align-items:baseline;justify-content:space-between}.sidebar-title{margin:0;color:var(--text);font-size:15px;font-weight:700}.sidebar-head-top .pct{color:var(--accent-2);font:600 13px var(--mono)}.sidebar-head small{display:block;margin-top:4px;color:var(--text-3);font-size:12px}.progress-track{height:4px;margin-top:14px;overflow:hidden;background:var(--surface-2);border-radius:999px}.progress-track span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));border-radius:999px;transition:width .4s ease}.chapter-nav{flex:1;padding:12px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}.nav-item{display:grid;grid-template-columns:30px 1fr auto;align-items:center;gap:10px;min-height:42px;padding:0 12px;border-radius:8px;color:var(--text-2);font-size:13.5px;font-weight:500;transition:color .15s ease,background .15s ease}.nav-item:hover{color:var(--text);background:var(--surface-2)}.nav-item.active{color:var(--text);background:var(--accent-soft)}.nav-item.active .chapter-number{color:var(--accent-2)}.chapter-number{color:var(--text-3);font:12.5px var(--mono)}.nav-status{display:flex;color:var(--text-3)}.nav-status.complete{color:var(--success)}.nav-status svg{width:15px}.sidebar-foot{display:grid;gap:12px;padding:14px 20px 18px;border-top:1px solid var(--border)}.sidebar-foot a{display:inline-flex;align-items:center;gap:8px;color:var(--text-3);font-size:13px;font-weight:500;transition:color .15s ease}.sidebar-foot a:hover{color:var(--text)}.sidebar-foot svg{width:15px}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#0000008c;cursor:default;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.chapter-page{max-width:820px;margin:0 auto;padding:clamp(44px,6vw,80px) clamp(20px,4.5vw,48px) clamp(56px,7vw,96px)}.chapter-header{margin-bottom:clamp(40px,5vw,60px);padding-bottom:clamp(28px,4vw,40px);border-bottom:1px solid var(--border)}.chapter-meta{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.chapter-meta .tag{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:6px;background:var(--accent-soft);color:var(--accent-2);font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase}.chapter-meta .muted{display:inline-flex;align-items:center;gap:6px;color:var(--text-3);font:12.5px var(--mono)}.chapter-meta .muted svg{width:12px}.chapter-header h1{margin:22px 0 14px;color:var(--text);font-size:clamp(30px,4.4vw,46px);font-weight:700;line-height:1.12;letter-spacing:-.03em}.chapter-header>p{max-width:620px;margin:0;color:var(--text-2);font-size:15.5px;line-height:1.75}.chapter-orientation{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(280px,1.3fr);gap:20px 48px;max-width:720px;margin:0 auto clamp(56px,7vw,76px);padding:24px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.orientation-kicker{display:block;margin-bottom:8px;color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.chapter-orientation h2{margin:0;color:var(--text);font-size:16px;font-weight:600;letter-spacing:-.01em}.chapter-orientation ol{margin:0;padding:0;list-style:none;counter-reset:objective}.chapter-orientation li{position:relative;margin-bottom:9px;padding-left:28px;color:var(--text-2);font-size:13.5px;line-height:1.55;counter-increment:objective}.chapter-orientation li:before{position:absolute;left:0;color:var(--text-3);font:500 10px var(--mono);content:"0" counter(objective)}.orientation-meta{display:flex;grid-column:2;gap:18px;color:var(--text-3);font:500 10px var(--mono)}.lesson-body{max-width:720px;margin:0 auto;color:var(--text-2);font-size:16px;line-height:1.85}.lesson-body h2{margin:60px 0 18px;color:var(--text);font-size:24px;font-weight:700;letter-spacing:-.02em}.lesson-body h3{margin:38px 0 12px;color:var(--text);font-size:18px;font-weight:600}.lesson-body p{margin:0 0 22px}.lesson-body strong{color:var(--text);font-weight:600}.lesson-body blockquote{margin:30px 0;padding:16px 20px;color:var(--text-2);background:var(--surface);border-left:3px solid var(--accent);border-radius:0 8px 8px 0}.lesson-body blockquote p{margin:0}.table-scroll{margin:28px 0 34px;overflow-x:auto;border:1px solid var(--border);border-radius:9px}.table-scroll table{width:100%;min-width:480px;border-collapse:collapse;color:var(--text-2);font-size:13.5px}.table-scroll th,.table-scroll td{padding:11px 14px;text-align:left;border-bottom:1px solid var(--border)}.table-scroll th{color:var(--text);background:var(--surface-2);font-size:12px;font-weight:600}.table-scroll tr:last-child td{border-bottom:0}.lesson-body ul,.lesson-body ol{margin:0 0 22px;padding-left:22px}.lesson-body li{margin-bottom:8px;padding-left:4px}.lesson-body :not(pre)>code{padding:2px 6px;color:#93c5fd;background:#3b82f61f;border:1px solid rgba(59,130,246,.25);border-radius:5px;font:600 .85em var(--mono)}.learning-check{margin:52px 0;padding:24px;background:linear-gradient(145deg,#3b82f614,#3b82f606);border:1px solid rgba(96,165,250,.28);border-radius:var(--radius-lg)}.check-heading>span{display:block;margin-bottom:9px;color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.09em;text-transform:uppercase}.check-heading h3{margin:0 0 8px;font-size:19px}.check-heading p{margin:0;color:var(--text-2);font-size:14px}.learning-check .code-block{margin:20px 0}.check-options{display:grid;gap:8px}.check-options button{display:flex;align-items:center;gap:12px;width:100%;padding:11px 13px;color:var(--text-2);text-align:left;background:#0b0b0eb3;border:1px solid var(--border-strong);border-radius:8px;font-size:13.5px;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.check-options button:not(:disabled):hover{color:var(--text);border-color:var(--accent)}.check-options button>span{display:grid;flex:none;place-items:center;width:23px;height:23px;color:var(--text-3);background:var(--surface-2);border-radius:5px;font:600 10px var(--mono)}.check-options button.correct{color:#b9f6d8;background:#34d39917;border-color:#34d39973}.check-options button.incorrect{color:#fecaca;background:#f8717114;border-color:#f8717166}.check-feedback{display:grid;grid-template-columns:20px 1fr auto;gap:10px;align-items:start;margin-top:16px;padding:14px 15px;border-radius:8px}.check-feedback.is-correct{color:#b9f6d8;background:#34d39914}.check-feedback.is-incorrect{color:#fecaca;background:#f8717112}.check-feedback>svg{width:18px}.check-feedback strong{display:block;margin-bottom:3px;font-size:13px}.check-feedback p{margin:0;color:var(--text-2);font-size:13px;line-height:1.65}.check-feedback button{display:inline-flex;align-items:center;gap:6px;padding:5px 7px;color:inherit;font-size:11px;font-weight:600;cursor:pointer}.check-feedback button svg{width:12px}.code-block{margin:28px 0 34px;overflow:hidden;background:var(--code-bg);border:1px solid var(--code-border);border-radius:var(--radius);box-shadow:0 12px 40px #00000059}.code-toolbar{display:flex;align-items:center;justify-content:space-between;height:42px;padding:0 14px 0 16px;background:var(--surface-2);border-bottom:1px solid var(--code-border)}.code-lang{display:inline-flex;align-items:center;gap:8px;color:var(--text-3);font:500 12px var(--mono)}.code-lang:before{width:7px;height:7px;border-radius:2px;background:var(--accent);content:""}.code-toolbar button{display:inline-flex;align-items:center;gap:6px;padding:5px 9px;border-radius:6px;color:var(--text-3);font-size:12px;font-weight:500;cursor:pointer;transition:color .15s ease,background .15s ease}.code-toolbar button:hover{color:var(--text);background:var(--surface)}.code-toolbar svg{width:13px}.code-block pre{margin:0;padding:22px 24px;overflow:auto}.code-block code,.code-block .hljs{padding:0;background:transparent;color:var(--code-text);font:13.5px/1.8 var(--mono)}.code-block .hljs-keyword,.code-block .hljs-template-tag,.code-block .hljs-template-variable,.code-block .hljs-type,.code-block .hljs-variable.language_,.code-block .hljs-doctag,.code-block .hljs-meta{color:#7dd3fc}.code-block .hljs-title,.code-block .hljs-title.class_,.code-block .hljs-title.class_.inherited__,.code-block .hljs-title.function_{color:#60a5fa}.diagram{max-width:620px;margin:36px auto;padding:30px 22px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.diagram svg{width:100%;height:auto;overflow:visible}.diagram rect{fill:var(--surface-2);stroke:var(--accent);stroke-width:1.4}.diagram rect.value{fill:#3b82f62e}.diagram path{fill:none;stroke:var(--accent);stroke-width:1.4}.diagram text{fill:var(--text-2);font:500 12px var(--mono)}.diagram text.caption{fill:var(--text-3);font-size:10px}.practice-section{max-width:720px;margin:clamp(64px,9vw,100px) auto 0}.practice-heading{padding-bottom:30px;border-bottom:1px solid var(--border)}.practice-heading h2{margin:12px 0 10px;color:var(--text);font-size:clamp(24px,3vw,30px);font-weight:700;letter-spacing:-.02em}.practice-heading p{margin:0;color:var(--text-2);font-size:14.5px;line-height:1.75}.exercise{padding:36px 0 40px;border-bottom:1px solid var(--border)}.exercise-kicker{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;color:var(--accent-2);font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase}.exercise.challenge .exercise-kicker{color:#e5c976}.exercise.challenge .exercise-instructions{border-left:3px solid rgba(229,201,118,.65)}.done-label{display:inline-flex;align-items:center;gap:6px;color:var(--success)}.done-label svg{width:13px}.exercise h3{margin:0 0 10px;color:var(--text);font-size:19px;font-weight:600;letter-spacing:-.01em}.exercise-instructions{margin-top:18px;padding:18px 20px;background:#ffffff05;border:1px solid var(--border);border-radius:10px}.exercise-instructions>span{display:block;margin-bottom:12px;color:var(--text-3);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.exercise-instructions p{margin:0;color:var(--text-2);font-size:14px;line-height:1.75}.exercise-instructions ol{margin:0;padding-left:21px;color:var(--text-2)}.exercise-instructions li{margin-bottom:8px;padding-left:4px;font-size:14px;line-height:1.7}.exercise-instructions li:last-child{margin-bottom:0}.expected{margin:18px 0 20px;padding:16px 18px;background:var(--code-bg);border:1px solid var(--code-border);border-left:3px solid var(--accent);border-radius:8px}.expected span{display:block;margin-bottom:8px;color:var(--text-3);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.expected pre{margin:0;color:#c9cdd6;font:13px/1.7 var(--mono);white-space:pre-wrap}.text-button,.solution-toggle{display:inline-flex;align-items:center;gap:8px;color:var(--accent-2);font-size:13.5px;font-weight:600;cursor:pointer;transition:color .15s ease}.text-button:hover,.solution-toggle:hover{color:var(--text)}.text-button svg,.solution-toggle svg{width:14px}.hint{margin:14px 0 0;padding:14px 16px;color:#e5c976;background:#e8b93d14;border:1px solid rgba(232,185,61,.22);border-radius:8px;font-size:13.5px;line-height:1.7}.solution-toggle{justify-content:space-between;width:100%;margin-top:14px;padding-top:16px;color:var(--text-2);border-top:1px solid var(--border)}.solution-toggle svg{transition:transform .2s ease}.solution-toggle svg.rotated{transform:rotate(180deg)}.solution{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s ease,margin .25s ease}.solution>*{min-height:0;overflow:hidden}.solution.revealed{grid-template-rows:1fr;margin-top:12px}.solution .code-block{margin:0}.solution-content{overflow:hidden}.solution-reasoning{padding:18px 20px;background:#3b82f60e;border:1px solid var(--code-border);border-top:0;border-radius:0 0 8px 8px}.solution-reasoning>span{display:block;margin-bottom:8px;color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.solution-reasoning p{margin:0;color:var(--text-2);font-size:13.5px;line-height:1.7}.complete-button{display:inline-flex;align-items:center;gap:8px;height:36px;margin-top:18px;padding:0 14px;border-radius:8px;color:var(--text-2);background:var(--surface);border:1px solid var(--border-strong);font-size:13.5px;font-weight:600;cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.complete-button:hover{color:var(--text);border-color:var(--text-3)}.complete-button svg{width:14px}.done .complete-button{color:var(--success);background:#34d39914;border-color:#34d39966}.chapter-end{display:flex;align-items:center;gap:16px;margin:clamp(56px,8vw,80px) 0 24px;color:var(--text-3);font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase}.chapter-end:before,.chapter-end:after{flex:1;height:1px;background:var(--border);content:""}.chapter-pagination{display:flex;justify-content:space-between;gap:16px}.chapter-pagination a{display:inline-flex;align-items:center;gap:12px;color:var(--text-3);font-size:12.5px;font-weight:600;transition:color .15s ease}.chapter-pagination a:hover{color:var(--accent-2)}.chapter-pagination a:last-child{text-align:right}.chapter-pagination svg{width:17px}.chapter-pagination small{display:block;margin-top:4px;color:var(--text);font-size:15px;font-weight:600}.project-milestone{display:flex;align-items:center;justify-content:space-between;gap:28px;margin:72px 0 18px;padding:26px 28px;background:linear-gradient(135deg,var(--accent-soft),rgba(59,130,246,.025));border:1px solid rgba(96,165,250,.3);border-radius:var(--radius-lg)}.project-milestone span{color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.project-milestone h2{margin:8px 0 6px;font-size:21px}.project-milestone p{max-width:520px;margin:0;color:var(--text-2);font-size:13.5px;line-height:1.65}.project-milestone>a{display:inline-flex;flex:none;align-items:center;gap:10px;height:40px;padding:0 15px;color:#fff;background:var(--accent);border-radius:8px;font-size:12px;font-weight:600}.project-milestone>a svg{width:14px}.project-page{max-width:920px;margin:0 auto;padding:48px clamp(20px,5vw,54px) 110px}.project-back{display:inline-flex;align-items:center;gap:8px;margin-bottom:52px;color:var(--text-3);font-size:12px;font-weight:600}.project-back:hover{color:var(--accent-2)}.project-back svg{width:15px}.project-header{padding-bottom:52px;border-bottom:1px solid var(--border)}.project-header>div{display:flex;justify-content:space-between;color:var(--accent-2);font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}.project-header>div span{display:flex;align-items:center;gap:7px}.project-header>div svg{width:13px}.project-header h1{max-width:760px;margin:25px 0 16px;font-size:clamp(38px,6vw,64px);line-height:1.04;letter-spacing:-.045em}.project-header>p{max-width:650px;margin:0;color:var(--text-2);font-size:16px;line-height:1.75}.project-header ul{display:flex;flex-wrap:wrap;gap:7px;margin:25px 0 0;padding:0;list-style:none}.project-header li{padding:6px 9px;color:var(--text-2);background:var(--surface);border:1px solid var(--border);border-radius:6px;font:500 10px var(--mono)}.project-brief{margin:64px 0 80px;padding:26px 28px;background:var(--surface);border-left:3px solid var(--accent);border-radius:0 var(--radius) var(--radius) 0}.project-brief>span{color:var(--accent-2);font:600 10px var(--mono);text-transform:uppercase}.project-brief h2{margin:10px 0 9px;font-size:22px}.project-brief p{margin:0;color:var(--text-2);font-size:14px;line-height:1.75}.project-section{margin:0 0 82px}.project-section-title{display:flex;align-items:baseline;gap:16px;margin-bottom:26px}.project-section-title>span{color:var(--accent-2);font:500 10px var(--mono)}.project-section-title h2{margin:0;font-size:25px;letter-spacing:-.025em}.milestone-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--border-strong)}.milestone-list li{display:grid;grid-template-columns:45px 1fr;gap:14px;padding:20px 4px;border-bottom:1px solid var(--border)}.milestone-list span{color:var(--text-3);font:500 10px var(--mono)}.milestone-list p{margin:0;color:var(--text-2);font-size:14px;line-height:1.7}.project-section>.code-block{margin:0}.project-two-columns{display:grid;grid-template-columns:1fr 1fr;gap:48px}.criteria-list,.extension-list{display:grid;gap:12px;margin:0;padding:0;list-style:none}.criteria-list li,.extension-list li{display:grid;grid-template-columns:18px 1fr;gap:9px;color:var(--text-2);font-size:13px;line-height:1.6}.criteria-list svg,.extension-list svg{width:16px;color:var(--success)}.extension-list svg{color:#fbbf24}.project-reference{display:grid;grid-template-columns:1fr auto;gap:24px;padding-top:42px;border-top:1px solid var(--border-strong)}.project-reference>div>span{color:var(--accent-2);font:600 10px var(--mono);text-transform:uppercase}.project-reference h2{margin:10px 0 8px;font-size:24px}.project-reference p{max-width:600px;margin:0;color:var(--text-2);font-size:13.5px;line-height:1.7}.project-reference>button{align-self:center;height:40px;padding:0 14px;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:8px;font-size:12px;font-weight:600;cursor:pointer}.project-reference>.code-block{grid-column:1 / -1;margin:18px 0 0}@media(min-width:960px){.app-shell.is-course main{padding-left:280px}}@media(max-width:960px){.feature-grid{grid-template-columns:1fr}}@media(max-width:860px){.sidebar{width:min(320px,88vw)}}@media(max-width:680px){.nav-inner{height:56px;padding:0 16px}.nav-links{display:none}.nav-right{gap:12px}.nav-actions .btn{height:36px;padding:0 13px;font-size:13px}.hero-inner{padding-top:56px}.hero h1{font-size:38px}.hero-sub{margin-top:16px;font-size:15.5px}.hero-actions{flex-direction:column;align-items:stretch;margin-top:26px}.hero-actions .btn{width:100%}.hero-stats{margin-top:30px;padding:13px 18px}.hero-stats strong{font-size:17px}.hero-stats span+span{padding-left:24px}.code-window-body{padding:20px 18px;font-size:12.5px}.catalog-grid{grid-template-columns:1fr;gap:12px;margin-top:36px}.catalog-card{gap:16px;padding:20px 18px}.projects-list>a{grid-template-columns:38px 1fr 18px;gap:12px}.feature-icon{width:36px;height:36px}.feature-card{padding:24px 22px}.quiz-invite{align-items:flex-start;flex-direction:column;margin-right:20px;margin-left:20px}.quiz-page{padding:36px 18px 72px}.quiz-chooser>header{margin-bottom:36px}.quiz-topic-list{grid-template-columns:1fr}.quiz-topic-list button:nth-child(odd){border-right:0}.quiz-session-header{margin-bottom:42px}.quiz-review article>div{align-items:flex-start;flex-direction:column;gap:5px}.course-topbar{padding:0 12px;height:56px}.course-topbar-left{gap:10px}.menu-button{padding:0 10px}.app-shell.is-course main{padding-top:56px}.sidebar{top:56px}.course-crumb,.course-topbar .wordmark span{display:none}.chapter-page{padding:32px 18px 60px}.chapter-header h1{font-size:30px}.chapter-orientation{grid-template-columns:1fr;gap:22px;margin-bottom:50px}.orientation-meta{grid-column:1}.lesson-body{font-size:15.5px}.lesson-body h2{font-size:21px}.learning-check{margin:42px -4px;padding:18px}.check-feedback{grid-template-columns:18px 1fr}.check-feedback button{grid-column:2;justify-self:start}.code-block pre{padding:18px 16px;font-size:12.5px}.practice-heading h2{font-size:24px}.chapter-pagination{gap:10px}.project-milestone{align-items:flex-start;flex-direction:column;padding:22px}.project-two-columns,.project-reference{grid-template-columns:1fr}.project-reference>button{justify-self:start}.footer-inner{flex-direction:column;align-items:flex-start;gap:24px;padding:34px 0 28px}.footer-bottom{flex-direction:column}}@media(max-width:480px){.hero-inner{padding-top:44px}.hero h1{font-size:34px;letter-spacing:-.03em}.hero-actions .btn{height:44px;font-size:14.5px}.nav-progress{display:none}.method,.curriculum{padding-top:48px;padding-bottom:56px}.feature-grid{margin-top:34px;gap:12px}.section-head h2{font-size:26px}.catalog-body strong{font-size:16px}.course-topbar .wordmark{font-size:13.5px}.course-topbar .wordmark .mark{width:24px;height:24px}.chapter-pagination small{display:none}.chapter-pagination{font-size:11px}.lesson-body blockquote{padding:13px 16px;font-size:14.5px}.quiz-invite>div{gap:13px}.quiz-invite>div>span{width:36px;height:36px}.quiz-invite>a{width:100%}.quiz-all{grid-template-columns:38px 1fr 16px;gap:12px}.quiz-all>span:first-child{width:36px;height:36px}.quiz-options button{grid-template-columns:27px 1fr 18px;padding-right:11px;padding-left:11px}.quiz-results>header>div:last-child{display:grid}.quiz-results .quiz-secondary{margin-left:0}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: GitHub Dark
  Description: Dark theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-dark
  Current colors taken from GitHub's CSS
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}
