:root{--bg:#ffffff;--surface:#f6f4fb;--fg:#1b1730;--muted:#5d5873;--line:#d9d4e8;--brand:#5a0bff;--brand-2:#c62af5;--brand-ink:#ffffff;--cta:#1b1730;--cta-ink:#ffffff;--promo:#1b1730;--promo-ink:#ffffff;--star:#b4690e;--good:#1a7f4b;--warn:#9a5b00;--warn-bg:#fff3dc;--badge-bg:#e9dcff;--badge-ink:#3a0aa8;--code-bg:#14102a;--code-fg:#ece8ff;--code-bar:#241d47;--shadow:0 2px 4px rgba(27,23,48,.08),0 8px 24px rgba(27,23,48,.12);--font:"Figtree",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--mono:"JetBrains Mono",ui-monospace,Menlo,monospace;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#110d22;--surface:#1a1530;--fg:#f1eefc;--muted:#a9a3c4;--line:#352e55;--brand:#9b6bff;--brand-2:#e06bff;--brand-ink:#12082e;--cta:#f1eefc;--cta-ink:#110d22;--promo:#2a1a66;--star:#f3a73c;--good:#4ad08a;--warn:#f3c26b;--warn-bg:#352a12;--badge-bg:#33246b;--badge-ink:#dccbff;--code-bg:#0b0818;--code-bar:#1c1636;--shadow:0 2px 4px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.5);color-scheme:dark}}:root[data-theme=dark]{--bg:#110d22;--surface:#1a1530;--fg:#f1eefc;--muted:#a9a3c4;--line:#352e55;--brand:#9b6bff;--brand-2:#e06bff;--brand-ink:#12082e;--cta:#f1eefc;--cta-ink:#110d22;--promo:#2a1a66;--star:#f3a73c;--good:#4ad08a;--warn:#f3c26b;--warn-bg:#352a12;--badge-bg:#33246b;--badge-ink:#dccbff;--code-bg:#0b0818;--code-bar:#1c1636;--shadow:0 2px 4px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.5);color-scheme:dark}*{box-sizing:border-box}html{scroll-padding-top:120px}body{background:var(--bg);color:var(--fg);font-family:var(--font);font-size:16px;line-height:1.55;margin:0}button,input,select{font:inherit;color:inherit}a{color:inherit;text-decoration:none}img{max-width:100%}:focus-visible{outline:3px solid var(--brand);outline-offset:2px}code{font-family:var(--mono);font-size:.88em;background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:1px 5px}.wrap{max-width:1340px;margin-inline:auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}.logo-d{display:none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .logo-l{display:none}:root:not([data-theme=light]) .logo-d{display:block}}:root[data-theme=dark] .logo-l{display:none}:root[data-theme=dark] .logo-d{display:block}.logo-l,.logo-d{height:34px;width:auto}.promo{background:var(--promo);color:var(--promo-ink);font-size:14px;text-align:center;padding:9px 16px}.promo a{text-decoration:underline;margin-left:6px;font-weight:700}header.top{position:sticky;top:0;z-index:20;background:var(--bg);border-bottom:1px solid var(--line)}.bar{display:flex;align-items:center;gap:16px;height:72px}.brand{display:flex;align-items:center;flex:none}.nav{display:flex;gap:2px}.nav a{font-size:14px;font-weight:600;padding:8px 10px;border-radius:6px;white-space:nowrap;color:var(--fg)}.nav a:hover,.nav a[aria-current=page]{color:var(--brand)}.search{flex:1;min-width:0;display:flex;align-items:center;gap:10px;height:48px;border:1px solid var(--fg);border-radius:999px;padding:0 8px 0 18px;background:var(--surface);margin:0}.search:focus-within{outline:3px solid var(--brand);outline-offset:1px}.search input{flex:1;min-width:0;border:0;background:transparent;outline:0;height:100%}.search input::placeholder{color:var(--muted)}.search svg{flex:none;color:var(--muted)}.right{display:flex;align-items:center;gap:8px}.langsw{display:flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;font-size:13px;font-weight:700}.langsw a{padding:7px 11px;color:var(--muted)}.langsw a[aria-current=true]{background:var(--fg);color:var(--bg)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 18px;border-radius:6px;font-weight:700;font-size:15px;border:1px solid var(--fg);background:transparent;cursor:pointer;white-space:nowrap}.btn:hover{background:var(--surface)}.btn.solid{background:var(--cta);color:var(--cta-ink);border-color:var(--cta)}.btn.solid:hover{opacity:.9}.btn.brand{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.btn.brand:hover{opacity:.92}.btn.discord{background:#5865f2;border-color:#5865f2;color:#fff}.btn.discord:hover{background:#4752c4}.btn.sm{height:36px;padding:0 14px;font-size:14px}.icon-btn{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:var(--bg);display:grid;place-items:center;cursor:pointer;flex:none}.icon-btn:hover{background:var(--surface)}.avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;background:var(--surface);flex:none;display:block}.menu{position:relative}.menu summary{list-style:none;cursor:pointer;border-radius:50%;display:block}.menu summary::-webkit-details-marker{display:none}.menu .pop{position:absolute;right:0;top:50px;min-width:220px;background:var(--bg);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);padding:12px;display:grid;gap:10px;z-index:30}.menu .pop b{display:block}.menu .pop small{color:var(--muted)}.hero{background:var(--surface);overflow:hidden}.hero-in{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);align-items:center;min-height:440px}.hero-card{position:relative;z-index:2;background:var(--bg);padding:36px;margin:48px 0;max-width:560px;box-shadow:var(--shadow);border-radius:4px}.hero-card h1{font-size:clamp(28px,3.6vw,40px);line-height:1.12;margin:0 0 14px;font-weight:800;letter-spacing:-.02em;text-wrap:balance}.hero-card p{margin:0 0 22px;color:var(--muted);font-size:17px}.hero-cta{display:flex;gap:12px;flex-wrap:wrap}.hero-art{position:relative;height:100%;min-height:360px}.hero-art svg,.art svg{position:absolute;inset:0;width:100%;height:100%}section.sec{padding-block:48px}.page{padding-block:36px 64px}h1.title{font-size:clamp(26px,3vw,36px);line-height:1.15;margin:0 0 8px;font-weight:800;letter-spacing:-.02em;text-wrap:balance}h2.h{font-size:clamp(22px,2.4vw,30px);line-height:1.2;margin:0 0 6px;font-weight:800;letter-spacing:-.015em;text-wrap:balance}.lede{margin:0 0 20px;color:var(--muted);max-width:68ch}.crumbs{font-size:14px;color:var(--muted);margin-bottom:12px}.crumbs a:hover{color:var(--brand);text-decoration:underline}.rail-wrap{position:relative}.rail{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 48px)/4);gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding:4px 2px 12px}.rail::-webkit-scrollbar{display:none}.rail>*{scroll-snap-align:start;min-width:0}.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px 16px}.card{display:flex;flex-direction:column;text-align:left;min-width:0;color:inherit}.thumb{position:relative;aspect-ratio:16/9;border:1px solid var(--line);border-radius:4px;overflow:hidden;background:var(--surface)}.thumb svg{display:block;width:100%;height:100%}.card:hover .thumb{border-color:var(--fg)}.card:hover .ct{color:var(--brand)}.ct{font-weight:700;font-size:16px;line-height:1.3;margin:10px 0 4px;text-wrap:pretty;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.by{font-size:12.5px;color:var(--muted);margin-bottom:4px}.meta{font-size:12.5px;color:var(--muted);margin-top:4px}.badges{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}.badge{font-size:12px;font-weight:800;padding:3px 8px;border-radius:3px;background:var(--badge-bg);color:var(--badge-ink)}.badge.dark{background:var(--fg);color:var(--bg)}.thumb .pill{position:absolute;left:8px;top:8px;font-family:var(--mono);font-size:11px;font-weight:700;background:#110d22c7;color:#fff;padding:3px 7px;border-radius:3px;letter-spacing:.04em}.soon .thumb{filter:saturate(.5)}.prog{height:6px;background:var(--line);border-radius:3px;overflow:hidden;margin-top:10px}.prog i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--brand),var(--brand-2));transition:width .4s}.pl{font-size:12.5px;color:var(--muted);margin-top:6px}.filters{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 24px;align-items:center}.chip{height:36px;padding:0 14px;border:1px solid var(--line);border-radius:999px;background:var(--bg);font-weight:600;font-size:14px;cursor:pointer}.chip:hover{border-color:var(--fg)}.chip[aria-pressed=true]{background:var(--fg);color:var(--bg);border-color:var(--fg)}.empty{padding:40px 8px;text-align:center;color:var(--muted)}.feat{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.feat>div{border:1px solid var(--line);border-radius:4px;padding:24px;background:var(--bg)}.feat h3{margin:8px 0 6px;font-size:18px;font-weight:800}.feat p{margin:0;color:var(--muted);font-size:15px}.feat .ico{width:44px;height:44px;border-radius:8px;background:linear-gradient(135deg,var(--brand),var(--brand-2));display:grid;place-items:center;color:#fff}.band{background:var(--surface);border-block:1px solid var(--line)}.dash{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:32px;align-items:start}.welcome{display:flex;gap:16px;align-items:center;margin-bottom:24px}.welcome .avatar{width:64px;height:64px}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:32px}.stat{border:1px solid var(--line);border-radius:4px;padding:18px;background:var(--bg)}.stat b{display:block;font-size:30px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.stat span{color:var(--muted);font-size:14px}.resume{display:grid;grid-template-columns:240px minmax(0,1fr);gap:20px;border:1px solid var(--line);border-radius:4px;padding:16px;background:var(--bg);margin-bottom:32px;align-items:center}.resume h3{margin:0 0 4px;font-size:19px;font-weight:800}.side-card{border:1px solid var(--line);border-radius:4px;padding:20px;background:var(--bg);position:sticky;top:96px}.side-card h3{margin:0 0 4px;font-size:18px;font-weight:800}.side-card p{margin:0 0 14px;color:var(--muted);font-size:14px}.road{list-style:none;margin:0;padding:0;display:grid;gap:0;position:relative}.road li{position:relative;padding:0 0 22px 52px}.road li:before{content:"";position:absolute;left:17px;top:36px;bottom:-2px;width:2px;background:var(--line)}.road li:last-child:before{display:none}.road .dot{position:absolute;left:0;top:0;width:36px;height:36px;border-radius:50%;border:2px solid var(--line);background:var(--bg);display:grid;place-items:center;font-weight:800;font-size:14px;font-family:var(--mono)}.road li.done .dot{background:var(--good);border-color:var(--good);color:#fff}.road li.next .dot{border-color:var(--brand);color:var(--brand)}.road a.row{display:block;border:1px solid var(--line);border-radius:4px;padding:14px 16px;background:var(--bg)}.road a.row:hover{border-color:var(--fg)}.road .row b{display:block}.road .row span{font-size:13px;color:var(--muted)}.road.compact li{padding-bottom:12px}.road.compact a.row{padding:10px 12px}.cd{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:40px;align-items:start}.cd-hero{background:var(--promo);color:#fff;padding-block:36px}.cd-hero .lede{color:#cfc8ea}.cd-hero .crumbs,.cd-hero .by{color:#bdb6d8}.cd-hero .crumbs a:hover{color:#fff}.buy{border:1px solid var(--line);border-radius:4px;background:var(--bg);box-shadow:var(--shadow);overflow:hidden;position:sticky;top:96px}.buy .body{padding:18px;display:grid;gap:12px}.buy .btn{width:100%}.facts{display:grid;gap:8px;font-size:14px;margin:0;padding:0;list-style:none;color:var(--muted)}.facts b{color:var(--fg)}.learn{display:grid;grid-template-columns:1fr 1fr;gap:8px 20px;list-style:none;margin:0;padding:20px;border:1px solid var(--line);border-radius:4px}.learn li{display:flex;gap:8px;font-size:14.5px}.learn svg{flex:none;margin-top:4px;color:var(--good)}.lessons{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:4px}.lessons li+li{border-top:1px solid var(--line)}.lessons a,.lessons .li{display:flex;gap:12px;align-items:center;padding:14px 16px}.lessons a:hover{background:var(--surface)}.lessons .n{font-family:var(--mono);font-size:12px;color:var(--muted);width:24px;flex:none}.lessons .t{flex:1;min-width:0;font-weight:600}.lessons .m{font-size:13px;color:var(--muted);flex:none}.lessons .ck{width:20px;height:20px;border-radius:50%;border:2px solid var(--line);flex:none;display:grid;place-items:center;color:#fff}.lessons .done .ck{background:var(--good);border-color:var(--good)}.lessons .done .ck svg{display:block}.lessons .ck svg{display:none}.lessons .lock{opacity:.6}.lesson{display:grid;grid-template-columns:300px minmax(0,1fr);gap:40px;align-items:start}.lesson aside{position:sticky;top:96px;max-height:calc(100vh - 120px);overflow:auto}.lesson aside h3{margin:0 0 10px;font-size:15px}.prose{max-width:780px}.prose>*+*{margin-top:16px}.prose h2{font-size:22px;margin:32px 0 0;font-weight:800}.prose p{margin:0}.prose p,.prose li{font-size:17px}.prose ul,.prose ol{margin:0;padding-left:22px;display:grid;gap:8px}.callout{border-radius:4px;padding:14px 16px;border:1px solid var(--line);background:var(--surface);display:flex;gap:12px}.callout.warn{background:var(--warn-bg);border-color:var(--warn);color:var(--fg)}.callout strong.k{font-family:var(--mono);font-size:12px;text-transform:uppercase;letter-spacing:.06em;flex:none;padding-top:3px;color:var(--brand)}.callout.warn strong.k{color:var(--warn)}.codebox{border-radius:6px;overflow:hidden;background:var(--code-bg);color:var(--code-fg)}.codebox .cb{display:flex;justify-content:space-between;align-items:center;gap:8px;background:var(--code-bar);padding:6px 8px 6px 14px;font-family:var(--mono);font-size:12px;color:#b9b2d9}.codebox button{background:transparent;border:1px solid #4b4177;color:#e7e2ff;border-radius:4px;padding:3px 10px;font-size:12px;cursor:pointer}.codebox button:hover{background:#352c63}.codebox pre{margin:0;padding:16px;overflow-x:auto;font-family:var(--mono);font-size:13.5px;line-height:1.6;tab-size:4}.codebox pre code{background:none;border:0;padding:0;font-size:inherit;color:inherit}.task{border:1px solid var(--brand);border-radius:4px;padding:18px 20px;background:var(--bg)}.task h3{margin:0 0 10px;font-size:16px}.task label{display:flex;gap:10px;align-items:flex-start;padding:4px 0;cursor:pointer;font-size:16px}.task input{margin-top:6px;width:18px;height:18px;accent-color:var(--brand);flex:none}.lnav{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:40px;padding-top:20px;border-top:1px solid var(--line)}.demo{border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--bg)}.demo-h{display:flex;justify-content:space-between;gap:8px;padding:10px 14px;background:var(--surface);border-bottom:1px solid var(--line);font-size:13px;font-weight:700}.demo-h span:last-child{font-weight:500;color:var(--muted)}.demo-b{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.con{background:var(--code-bg);color:var(--code-fg);font-family:var(--mono);font-size:13px;display:flex;flex-direction:column;min-height:320px;max-height:360px}.con .log{flex:1;overflow:auto;padding:12px 14px;display:flex;flex-direction:column;gap:2px;white-space:pre-wrap;overflow-wrap:anywhere}.con .log .ok{color:#7be3ac}.con .log .err{color:#ff8f8f}.con .log .in{color:#c9b8ff}.con form{display:flex;gap:8px;border-top:1px solid #352e55;padding:8px 10px;align-items:center}.con input{flex:1;min-width:0;background:transparent;border:0;outline:0;color:#fff;font-family:inherit;font-size:13px}.con form span{color:#9b6bff}.stage{position:relative;background:linear-gradient(#2a1a66,#110d22);min-height:320px;display:grid;place-items:center;padding:16px}.stage svg{width:100%;max-width:440px;height:auto}.stage .lab{position:absolute;left:12px;bottom:10px;font-family:var(--mono);font-size:12px;color:#cfc8ea}.stage .hint{position:absolute;inset:0;display:grid;place-items:center;color:#cfc8ea;font-size:14px;text-align:center;padding:24px;pointer-events:none}.quick{display:flex;gap:6px;flex-wrap:wrap;padding:8px 10px;border-top:1px solid #352e55}.quick button{background:#241d47;border:1px solid #4b4177;color:#e7e2ff;border-radius:999px;padding:3px 10px;font-family:var(--mono);font-size:12px;cursor:pointer}.quick button:hover{background:#352c63}.noacc{max-width:560px;margin:72px auto;text-align:center;display:grid;gap:14px;justify-items:center}.noacc .big{width:72px;height:72px;border-radius:50%;background:var(--surface);border:1px solid var(--line);display:grid;place-items:center;color:var(--brand)}footer.foot{background:#110d22;color:#e9e5f7;padding-block:48px 28px;font-size:14px;margin-top:0}footer.foot .logo-l{display:none!important}footer.foot .logo-d{display:block!important}.fgrid{display:grid;grid-template-columns:1.4fr repeat(3,1fr);gap:32px}.fgrid h4{margin:0 0 12px;font-size:14px;font-weight:700}.fgrid a{display:block;color:#bdb6d8;padding:3px 0}.fgrid a:hover{color:#fff;text-decoration:underline}.fgrid p{color:#a9a3c4;max-width:34ch;margin:12px 0 0}.fbot{margin-top:32px;padding-top:20px;border-top:1px solid #352e55;color:#a9a3c4;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:13px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);background:var(--fg);color:var(--bg);padding:12px 18px;border-radius:6px;font-weight:600;z-index:60;box-shadow:var(--shadow)}[hidden]{display:none!important}@media(max-width:1100px){.rail{grid-auto-columns:calc((100% - 2*16px)/3)}.grid{grid-template-columns:repeat(3,minmax(0,1fr))}.nav{display:none}}@media(max-width:980px){.dash,.cd,.lesson{grid-template-columns:1fr}.side-card,.buy,.lesson aside{position:static;max-height:none}.hero-in{grid-template-columns:1fr}.hero-card{margin:24px 0 0;max-width:none}.hero-art{min-height:220px}.feat{grid-template-columns:1fr}.fgrid{grid-template-columns:1fr 1fr}.rail{grid-auto-columns:calc((100% - 16px)/2)}.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.demo-b{grid-template-columns:1fr}}@media(max-width:600px){.bar{height:auto;flex-wrap:wrap;padding-block:10px;gap:10px}.brand{order:1}.search{order:3;flex-basis:100%;height:44px}.right{order:2;margin-left:auto}.rail{grid-auto-columns:78%}.grid{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}.resume,.learn{grid-template-columns:1fr}.hero-card{padding:24px 20px}.fgrid{grid-template-columns:1fr}.lessons .m{display:none}}@media(prefers-reduced-motion:no-preference){.rail{scroll-behavior:smooth}}
