:root{--ink-900: #070b16;--ink-850: #0b1020;--ink-800: #101736;--ink-750: #141a33;--line: #24305c;--text: #eef2ff;--text-dim: #aab6d6;--text-faint: #7f8db5;--cyan: #38bdf8;--cyan-soft: #7dd3fc;--violet: #6f6cf6;--violet-soft: #8ea2ff;--green: #34d399;--amber: #fb923c;--surface: var(--ink-800);--surface-2: var(--ink-750);--bg: var(--ink-850);--shadow: 0 18px 50px -22px rgb(0 0 0 / .85);--shadow-lg: 0 40px 80px -32px rgb(0 0 0 / .9);--radius: 16px;--radius-sm: 10px;--maxw: 1180px;--measure: 70ch;--header-h: 62px;--page-w: min(80%, var(--maxw));--sans: "Inter var", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;--ease: cubic-bezier(.22, 1, .36, 1)}:root[data-theme=light]{--bg: #f7f9fc;--surface: #ffffff;--surface-2: #eef2f9;--line: #dde5f2;--text: #0d1428;--text-dim: #46577d;--text-faint: #6b7a9c;--violet: #4f46e5;--cyan: #0284c7;--shadow: 0 18px 40px -26px rgb(15 23 42 / .35);--shadow-lg: 0 30px 70px -30px rgb(15 23 42 / .4)}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 20px);-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16.5px;line-height:1.72;-webkit-font-smoothing:antialiased;overflow-x:hidden}body:before{content:"";position:fixed;inset:0;z-index:-2;background:radial-gradient(58rem 30rem at 12% -8%,rgb(111 108 246 / .2),transparent 60%),radial-gradient(46rem 26rem at 92% 4%,rgb(56 189 248 / .14),transparent 62%),radial-gradient(40rem 28rem at 50% 108%,rgb(52 211 153 / .09),transparent 60%);pointer-events:none}:root[data-theme=light] body:before{opacity:.5}body:after{content:"";position:fixed;inset:0;z-index:-1;background-image:linear-gradient(to right,rgb(148 163 184 / .055) 1px,transparent 1px),linear-gradient(to bottom,rgb(148 163 184 / .055) 1px,transparent 1px);background-size:62px 62px;mask-image:radial-gradient(70% 60% at 50% 0%,#000 20%,transparent 100%);pointer-events:none}a{color:var(--cyan);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}img{max-width:100%;height:auto}.skip{position:absolute;left:-9999px;top:0;background:var(--surface);color:var(--text);padding:12px 18px;border-radius:var(--radius-sm);z-index:200}.skip:focus{left:12px;top:12px}:where(a,button,input,summary):focus-visible{outline:2px solid var(--cyan);outline-offset:3px;border-radius:6px}@media(max-width:900px){:root{--page-w: min(92%, var(--maxw))}}.wrap{width:var(--page-w);margin-inline:auto}main>article,main>.readable{width:var(--page-w);margin-inline:auto}pre{overflow-x:auto;max-width:100%}pre code{min-width:0}main>article img,main>.readable img,.prose img{display:block;margin-inline:auto}main>article figure,main>.readable figure{margin-inline:auto;text-align:center}.site-header{position:sticky;top:0;z-index:60;height:var(--header-h);display:flex;align-items:center;gap:18px;padding-block:0;padding-inline:max(16px,calc((100% - var(--page-w)) / 2));background:color-mix(in srgb,var(--bg) 78%,transparent);backdrop-filter:blur(14px) saturate(140%);border-bottom:1px solid var(--line)}.site-home{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .7rem .3rem .5rem;margin-right:.85rem;border:1px solid var(--line);border-radius:999px;color:var(--text-dim);font-size:.86rem;text-decoration:none;white-space:nowrap;transition:color .15s ease,border-color .15s ease}.site-home:hover{color:var(--text);border-color:var(--text)}.site-home svg{width:14px;height:14px;flex:none}@media(max-width:720px){.site-home span,.site-home{font-size:.8rem;padding-left:.4rem}}.brand{display:flex;align-items:center;gap:10px;font-weight:680;letter-spacing:-.015em;color:var(--text);font-size:15.5px;white-space:nowrap}.brand:hover{text-decoration:none}.brand svg{width:26px;height:26px;flex:none}.site-header nav{display:flex;gap:4px;align-items:center}.site-header nav a{color:var(--text-dim);font-size:14.5px;font-weight:560;padding:7px 11px;border-radius:8px;transition:color .18s,background .18s}.site-header nav a:hover{color:var(--text);background:color-mix(in srgb,var(--surface) 70%,transparent);text-decoration:none}.spacer{flex:1}.iconbtn{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 60%,transparent);color:var(--text-dim);cursor:pointer;transition:color .18s,border-color .18s}.iconbtn:hover{color:var(--text);border-color:var(--cyan)}.iconbtn svg{width:17px;height:17px}:root[data-theme=dark] .theme-light-only{display:none}:root[data-theme=light] .theme-dark-only{display:none}.ghlink{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:570;color:var(--text-dim);border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 60%,transparent);padding:7px 13px;border-radius:9px;transition:color .18s,border-color .18s}.ghlink:hover{color:var(--text);border-color:var(--cyan);text-decoration:none}.ghlink svg{width:15px;height:15px}.hero{padding:58px 0 26px;text-align:center}.chip{display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);font-size:12.5px;color:var(--text-dim);border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 55%,transparent);padding:7px 15px;border-radius:999px}.chip__dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px #34d3992e}.hero h1{margin:26px auto 0;max-width:15ch;font-size:clamp(2.6rem,7vw,4.9rem);line-height:1.03;letter-spacing:-.037em;font-weight:800}.grad{background:linear-gradient(100deg,var(--violet-soft),var(--cyan),var(--violet-soft));background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:pan 9s var(--ease) infinite alternate}@keyframes pan{0%{background-position:0% 50%}to{background-position:100% 50%}}.hero__sub{margin:24px auto 0;max-width:64ch;color:var(--text-dim);font-size:clamp(1rem,1.5vw,1.15rem)}.hero__cta{margin-top:34px;display:flex;gap:13px;justify-content:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:9px;font-size:15px;font-weight:620;padding:13px 22px;border-radius:11px;border:1px solid var(--line);background:var(--surface);color:var(--text);cursor:pointer;transition:transform .2s var(--ease),border-color .2s,box-shadow .2s}.btn:hover{text-decoration:none;transform:translateY(-2px);border-color:var(--cyan)}.btn--primary{border-color:transparent;background:linear-gradient(115deg,var(--violet),var(--cyan));color:#fff;box-shadow:0 14px 34px -14px #6f6cf6bf}.btn--primary:hover{box-shadow:0 20px 44px -14px #6f6cf6e6}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:16px;margin-top:38px}.stat{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:24px 18px;text-align:center}.stat b{display:block;font-size:clamp(1.8rem,3.4vw,2.6rem);font-weight:780;letter-spacing:-.03em;line-height:1.1;background:linear-gradient(115deg,var(--violet-soft),var(--cyan));-webkit-background-clip:text;background-clip:text;color:transparent}.stat span{display:block;margin-top:6px;font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.section{padding:54px 0}.section__head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:26px;flex-wrap:wrap}.section__head h2{margin:0;font-size:1.45rem;letter-spacing:-.02em;font-weight:720}.eyebrow{font-family:var(--mono);font-size:11.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--text-faint);margin:0}.courses{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:20px}.course{position:relative;display:flex;gap:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:22px;transition:transform .3s var(--ease),border-color .3s,box-shadow .3s var(--ease)}.course:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--cyan) 55%,var(--line));box-shadow:var(--shadow-lg)}.course--planned{opacity:.72}.course__body{flex:1;min-width:0}.course__id{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint)}.course__title{margin:6px 0 0;font-size:1.08rem;line-height:1.32;letter-spacing:-.018em;font-weight:690;color:var(--text)}.course:hover .course__title{color:var(--cyan-soft)}:root[data-theme=light] .course:hover .course__title{color:var(--violet)}.course__sum{margin:9px 0 0;color:var(--text-dim);font-size:14.2px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.course__link:before{content:"";position:absolute;inset:0;z-index:1}.ring{flex:none;width:56px;height:56px}.ring circle{fill:none;stroke-width:5}.ring .track{stroke:var(--line)}.ring .fill{stroke:url(#ringgrad);stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%}.ring text{fill:var(--text-dim);font-family:var(--mono);font-size:15px;text-anchor:middle}.acc{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);overflow:hidden}.acc+.acc{margin-top:12px}.acc summary{cursor:pointer;padding:17px 20px;display:flex;align-items:center;gap:12px;font-weight:650;list-style:none}.acc summary::-webkit-details-marker{display:none}.acc summary:after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--text-faint);border-bottom:2px solid var(--text-faint);transform:rotate(45deg);transition:transform .2s var(--ease)}.acc[open] summary:after{transform:rotate(-135deg)}.acc summary:hover{background:color-mix(in srgb,var(--surface-2) 70%,transparent)}.acc__count{font-family:var(--mono);font-size:11.5px;color:var(--text-faint);border:1px solid var(--line);border-radius:999px;padding:3px 10px}.acc__inner{padding:4px 20px 20px;border-top:1px solid var(--line)}.weekgroup+.weekgroup{margin-top:20px}.weekgroup h4{margin:16px 0 8px;font-size:13px;font-family:var(--mono);font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint)}.daylist{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:6px}.day{display:flex;align-items:baseline;gap:10px;padding:7px 10px;border-radius:8px;font-size:14.3px;color:var(--text-dim);transition:background .16s}a.day:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.day__n{font-family:var(--mono);font-size:11.5px;color:var(--text-faint);flex:none;width:30px}.day--planned{color:var(--text-faint);cursor:default}.day--planned .day__n{opacity:.6}.badge{font-family:var(--mono);font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 8px;border:1px solid var(--line);color:var(--text-faint)}.badge.complete{color:var(--green);border-color:#34d3996b}.badge.planned{color:var(--text-faint)}.lesson{padding:46px 0 20px}.lesson__head{max-width:var(--measure);margin:0 auto 30px}.lesson__title{margin:14px 0 0;font-size:clamp(1.9rem,4.2vw,2.8rem);line-height:1.12;letter-spacing:-.03em;font-weight:770}.lesson__meta{margin-top:20px;padding-top:16px;border-top:1px solid var(--line);display:flex;gap:10px;flex-wrap:wrap;font-family:var(--mono);font-size:12px;color:var(--text-faint)}.prose{max-width:var(--measure);margin:0 auto;font-size:17px;line-height:1.8}.prose>*+*{margin-top:1.2em}.prose h2{margin-top:2.3em;font-size:1.55rem;letter-spacing:-.022em;font-weight:720;scroll-margin-top:calc(var(--header-h) + 22px)}.prose h3{margin-top:1.8em;font-size:1.2rem;letter-spacing:-.016em;font-weight:680;scroll-margin-top:calc(var(--header-h) + 22px)}.prose ul,.prose ol{padding-left:1.35em}.prose li+li{margin-top:.4em}.prose img{border-radius:var(--radius-sm);border:1px solid var(--line)}.prose hr{border:0;border-top:1px solid var(--line);margin:2.4em 0}.prose blockquote{margin-left:0;margin-right:0;padding:4px 0 4px 22px;border-left:3px solid var(--violet);color:var(--text-dim);font-style:italic}.prose code{font-family:var(--mono);font-size:.87em;background:var(--surface-2);border:1px solid var(--line);border-radius:5px;padding:2px 6px}.prose pre{background:var(--ink-900);border:1px solid var(--line);border-radius:var(--radius-sm);padding:18px 20px;overflow-x:auto;font-size:13.6px;line-height:1.62}:root[data-theme=light] .prose pre{background:#0f172a}.prose pre code{background:none;border:0;padding:0;color:#e2e8f0}.prose table{width:100%;border-collapse:collapse;font-size:15px;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--line);padding:9px 13px;text-align:left}.prose th{background:var(--surface-2);font-weight:620}.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:20px 22px}.meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.day-list{list-style:none;margin:18px 0 0;padding:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.day-list li{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;padding:11px 16px;border-top:1px solid var(--line);background:color-mix(in srgb,var(--surface) 55%,transparent)}.day-list li:first-child{border-top:0}.day-list li:hover{background:var(--surface)}.day-list .num{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--text-faint);flex:none;min-width:4.6rem}.day-list li>a,.day-list li>span:not(.num):not(.badge){flex:1 1 12rem}.day-list li>span:not(.num):not(.badge){color:var(--text-faint)}.day-list .badge{flex:none}.site-footer{border-top:1px solid var(--line);margin-top:44px;padding:34px 0 46px;color:var(--text-faint);font-size:14px}.site-footer .inner{width:var(--page-w);margin-inline:auto;display:flex;gap:18px;justify-content:space-between;flex-wrap:wrap}.site-footer nav{display:flex;gap:16px;flex-wrap:wrap}.site-footer a{color:var(--text-dim)}@media(prefers-reduced-motion:no-preference){.reveal{opacity:0;transform:translateY(16px);transition:opacity .6s var(--ease),transform .6s var(--ease)}.reveal.is-in{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}@media(max-width:860px){.site-header nav{display:none}.hero{padding:42px 0 20px}}@media print{body:before,body:after,.site-header,.site-footer{display:none}body{background:#fff;color:#000}}
