@charset "UTF-8";@font-face{font-family:'Figtree';font-style:normal;font-weight:300 900;font-display:swap;src:url(/assets/fonts/figtree.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Figtree';font-style:italic;font-weight:400;font-display:swap;src:url(/assets/fonts/figtree-italic.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Bricolage Grotesque';font-style:normal;font-weight:200 800;font-display:swap;src:url(/assets/fonts/bricolage-grotesque.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:100 800;font-display:swap;src:url(/assets/fonts/jetbrains-mono.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#fbf7f0;--bg-2:#f3ede2;--surface:#ffffff;--surface-2:#faf6ee;--ink:#15161b;--ink-2:#3b3d48;--muted:#6b6d79;--line:#e6ddcc;--edge:#15161b;--hard:#15161b;--brand:#17a865;--brand-2:#0e7c4a;--brand-soft:#d6f4e4;--sun:#ffd23f;--sun-soft:#fff4c7;--html:#f0592b;--html-soft:#ffe3d7;--css:#4467ff;--css-soft:#e1e6ff;--js:#f2b705;--js-soft:#fff1c2;--danger:#e5484d;--danger-soft:#ffe4e4;--ok:#129a5b;--ok-soft:#dcf6e8;--warn:#d98b06;--violet:#7c5cff;--violet-soft:#ece7ff;--accent:var(--brand);--accent-soft:var(--brand-soft);--code-bg:#15171d;--code-bg-2:#1c1f27;--code-line:#2a2e38;--code-text:#e7e5df;--code-muted:#6f7584;--font-display:'Bricolage Grotesque','Figtree',system-ui,sans-serif;--font-body:'Figtree',system-ui,-apple-system,'Segoe UI',sans-serif;--font-mono:'JetBrains Mono',ui-monospace,'Cascadia Code',Consolas,monospace;--r-sm:8px;--r:14px;--r-lg:22px;--shadow:3px 3px 0 var(--hard);--shadow-lg:5px 5px 0 var(--hard);--shadow-soft:0 1px 2px rgba(21,22,27,0.05),0 8px 24px -12px rgba(21,22,27,0.18);--header-h:64px;--strip-h:38px;--ease:cubic-bezier(0.2,0.8,0.2,1);color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme='light']){--bg:#0e1014;--bg-2:#13161c;--surface:#171a21;--surface-2:#1b1f27;--ink:#f2efe8;--ink-2:#cdc9c0;--muted:#9093a0;--line:#272b35;--edge:#3b404c;--hard:#000;--brand:#2bd17f;--brand-2:#5ce3a0;--brand-soft:rgba(43,209,127,0.14);--sun:#ffd23f;--sun-soft:rgba(255,210,63,0.14);--html-soft:rgba(240,89,43,0.16);--css:#7590ff;--css-soft:rgba(117,144,255,0.16);--js-soft:rgba(242,183,5,0.15);--danger:#ff6b6f;--danger-soft:rgba(255,107,111,0.14);--ok:#2bd17f;--ok-soft:rgba(43,209,127,0.14);--violet-soft:rgba(124,92,255,0.18);--shadow-soft:0 1px 2px rgba(0,0,0,0.4),0 10px 30px -12px rgba(0,0,0,0.6);color-scheme:dark}}:root[data-theme='dark']{--bg:#0e1014;--bg-2:#13161c;--surface:#171a21;--surface-2:#1b1f27;--ink:#f2efe8;--ink-2:#cdc9c0;--muted:#9093a0;--line:#272b35;--edge:#3b404c;--hard:#000;--brand:#2bd17f;--brand-2:#5ce3a0;--brand-soft:rgba(43,209,127,0.14);--sun:#ffd23f;--sun-soft:rgba(255,210,63,0.14);--html-soft:rgba(240,89,43,0.16);--css:#7590ff;--css-soft:rgba(117,144,255,0.16);--js-soft:rgba(242,183,5,0.15);--danger:#ff6b6f;--danger-soft:rgba(255,107,111,0.14);--ok:#2bd17f;--ok-soft:rgba(43,209,127,0.14);--violet-soft:rgba(124,92,255,0.18);--shadow-soft:0 1px 2px rgba(0,0,0,0.4),0 10px 30px -12px rgba(0,0,0,0.6);color-scheme:dark}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + var(--strip-h) + 70px)}body{margin:0;background:var(--bg);color:var(--ink);font:400 17px/1.65 var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}img,svg,iframe{display:block;max-width:100%}svg{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}a{color:inherit}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3,h4{font-family:var(--font-display);line-height:1.12;letter-spacing:-0.02em;margin:0 0 0.5em;font-weight:800}p{margin:0 0 1em}code,kbd,pre{font-family:var(--font-mono)}kbd{display:inline-block;font-size:0.72em;line-height:1;padding:0.3em 0.45em;border:1px solid var(--line);border-bottom-width:2px;border-radius:6px;background:var(--surface);color:var(--ink-2);font-weight:600}::selection{background:var(--sun);color:#15161b}:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:6px}[hidden]{display:none !important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip-link{position:absolute;left:12px;top:-60px;z-index:100;background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;font-weight:700;text-decoration:none}.skip-link:focus{top:12px}.wrap{width:min(1220px,100% - 32px);margin-inline:auto}.narrow{max-width:860px}.wrap.narrow{width:min(860px,100% - 32px)}.center{text-align:center}.muted{color:var(--muted)}.small{font-size:0.9em}.btn,.btn-ghost{--bshadow:var(--shadow);display:inline-flex;align-items:center;justify-content:center;gap:0.5em;padding:0.72em 1.2em;border-radius:12px;font-weight:700;font-size:0.95rem;line-height:1.2;text-decoration:none;border:2px solid var(--edge);transition:transform 0.15s var(--ease),box-shadow 0.15s var(--ease),background 0.15s;white-space:nowrap}.btn{background:var(--brand);color:#fff;box-shadow:var(--bshadow)}:root[data-theme='dark'] .btn{color:#07140d}@media (prefers-color-scheme:dark){:root:not([data-theme='light']) .btn{color:#07140d}}.btn:hover{transform:translate(-2px,-2px);box-shadow:5px 5px 0 var(--hard)}.btn:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--hard)}.btn-ghost{background:var(--surface);color:var(--ink)}.btn-ghost:hover{background:var(--bg-2);transform:translate(-1px,-1px);box-shadow:3px 3px 0 var(--hard)}.btn-lg{padding:0.95em 1.5em;font-size:1.02rem;border-radius:14px}.btn-sm,.btn.sm,.btn-ghost.sm{padding:0.5em 0.85em;font-size:0.86rem;border-radius:10px}.btn-ghost.xs{padding:0.25em 0.6em;font-size:0.75rem;border-width:1px;border-radius:7px}.btn-invert{background:var(--sun);color:#15161b}.btn svg,.btn-ghost svg{width:1.05em;height:1.05em}.btn-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:20px}.icon-btn{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:11px;border:1.5px solid var(--line);background:var(--surface);color:var(--ink);transition:background 0.15s,border-color 0.15s}.icon-btn:hover{border-color:var(--edge)}.icon-btn svg{width:19px;height:19px}.icon-btn.sm{width:34px;height:34px;border-radius:9px}.icon-btn.sm svg{width:16px;height:16px}.icon-btn.is-on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;font-size:0.78rem;font-weight:700;background:var(--surface);border:1.5px solid var(--line);color:var(--ink-2);text-decoration:none;letter-spacing:0.01em}.pill svg{width:14px;height:14px}.pill-accent{background:var(--sun-soft);border-color:color-mix(in srgb,var(--sun) 60%,var(--line));color:var(--ink)}.pill-ink{background:var(--ink);color:var(--bg);border-color:var(--ink)}.pill-course{background:var(--cs,var(--accent-soft));border-color:color-mix(in srgb,var(--c,var(--accent)) 45%,transparent);color:var(--ink)}.eyebrow{display:inline-flex;align-items:center;gap:6px;font:700 0.78rem/1 var(--font-body);text-transform:uppercase;letter-spacing:0.12em;color:var(--brand-2);margin-bottom:12px}.eyebrow svg{width:15px;height:15px}.lvl{display:inline-flex;padding:3px 9px;border-radius:999px;font-size:0.72rem;font-weight:800;text-transform:capitalize;border:1.5px solid transparent}.lvl-easy,.lvl-beginner{background:var(--ok-soft);color:var(--ok)}.lvl-medium,.lvl-intermediate{background:var(--sun-soft);color:var(--warn)}.lvl-hard,.lvl-advanced{background:var(--danger-soft);color:var(--danger)}.lang-tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:6px;font:700 0.7rem/1.5 var(--font-mono)}.lang-tag.lang-html{background:var(--html-soft);color:var(--html)}.lang-tag.lang-css{background:var(--css-soft);color:var(--css)}.lang-tag.lang-js{background:var(--js-soft);color:#9a7200}:root[data-theme='dark'] .lang-tag.lang-js{color:var(--js)}.lang-dot{width:9px;height:9px;border-radius:50%;display:inline-block;background:var(--muted);flex:none}.lang-dot.lang-html{background:var(--html)}.lang-dot.lang-css{background:var(--css)}.lang-dot.lang-js,.lang-dot.lang-javascript{background:var(--js)}.link-arrow{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--brand-2);text-decoration:none;font-size:0.92rem}.link-arrow svg{transition:transform 0.2s var(--ease)}a:hover>.link-arrow svg,.link-arrow:hover svg{transform:translateX(3px)}.site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(1.6) blur(14px);-webkit-backdrop-filter:saturate(1.6) blur(14px);border-bottom:1px solid var(--line)}.header-inner{position:relative;z-index:2;display:flex;align-items:center;gap:18px;height:var(--header-h);width:min(1440px,100% - 32px);margin-inline:auto}.logo{display:inline-flex;align-items:center;gap:10px;text-decoration:none;flex:none}.logo-mark{width:36px;height:36px}.lm-bg{fill:var(--ink)}.lm-c{stroke:var(--bg);stroke-width:3.6;fill:none}.lm-cur{stroke:var(--brand);stroke-width:3.6;animation:lm-blink 1.1s steps(1) 3}@keyframes lm-blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.lm-cur{animation:none}}.logo-text{font:800 1.28rem/1 var(--font-display);letter-spacing:-0.03em}.logo-text span{color:var(--brand)}.main-nav{display:flex;align-items:center;gap:2px;margin-left:8px}.nav-link{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;border-radius:10px;font-weight:600;font-size:0.94rem;text-decoration:none;color:var(--ink-2);background:none;border:0}.nav-link:hover,.nav-link.is-active{color:var(--ink);background:var(--bg-2)}.nav-link svg{width:15px;height:15px;transition:transform 0.2s}.nav-drop{position:relative}.nav-drop.is-open .nav-link svg{transform:rotate(180deg)}.nav-drop.is-open>.nav-link{color:var(--ink);background:var(--bg-2)}.mega{position:absolute;z-index:60;top:calc(100% + 8px);left:-12px;display:flex;gap:0;min-width:380px;background:var(--surface);border:2px solid var(--edge);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);padding:10px;opacity:0;visibility:hidden;transform:translateY(6px);transition:0.18s var(--ease)}.mega::before{content:'';position:absolute;inset:-12px 0 auto;height:12px}.mega-sm{min-width:340px;flex-direction:column}.nav-drop.is-open .mega{opacity:1;visibility:visible;transform:none}html:not(.js) .nav-drop:hover .mega,html:not(.js) .nav-drop:focus-within .mega{opacity:1;visibility:visible;transform:none}.mega-col{flex:1.4;display:flex;flex-direction:column;gap:2px}.mega-item{display:flex;align-items:center;gap:12px;padding:10px;border-radius:12px;text-decoration:none}.mega-item:hover{background:var(--bg-2)}.mega-item strong{display:block;font-size:0.95rem}.mega-item small{display:block;color:var(--muted);font-size:0.8rem;line-height:1.35}.mega-ico{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:11px;background:var(--cs,var(--bg-2));color:var(--c,var(--ink));font:800 0.8rem/1 var(--font-mono);border:1.5px solid color-mix(in srgb,var(--c,var(--edge)) 35%,transparent);flex:none}.mega-ico svg{width:19px;height:19px}.mega-ico.sm{width:28px;height:28px;border-radius:8px;font-size:0.66rem}.mega-all{display:inline-flex;align-items:center;gap:6px;margin:6px 10px 4px;font-weight:700;font-size:0.88rem;color:var(--brand-2);text-decoration:none}.header-tools{display:flex;align-items:center;gap:8px;margin-left:auto}.search-trigger{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 10px 0 12px;min-width:220px;border-radius:11px;border:1.5px solid var(--line);background:var(--surface);color:var(--muted);font-size:0.9rem}.search-trigger:hover{border-color:var(--edge)}.search-trigger kbd{margin-left:auto}.theme-toggle svg:last-child{display:none}:root[data-theme='dark'] .theme-toggle svg:first-child{display:none}:root[data-theme='dark'] .theme-toggle svg:last-child{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme='light']) .theme-toggle svg:first-child{display:none}:root:not([data-theme='light']) .theme-toggle svg:last-child{display:block}}.menu-toggle{display:none}.lang-strip{border-top:1px solid var(--line);background:var(--surface);height:var(--strip-h);overflow:hidden}.lang-strip-inner{display:flex;align-items:center;gap:4px;height:100%;width:min(1440px,100% - 32px);margin-inline:auto;overflow-x:auto;scrollbar-width:none}.lang-strip-inner::-webkit-scrollbar{display:none}.lang-strip a,.lang-strip span{position:relative;display:inline-flex;align-items:center;height:100%;padding:0 12px;font-size:0.84rem;font-weight:700;text-decoration:none;color:var(--ink-2);white-space:nowrap}.lang-strip a::after{content:'';position:absolute;left:10px;right:10px;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--c);transform:scaleX(0);transition:transform 0.2s var(--ease)}.lang-strip a:hover::after,.lang-strip a.is-active::after{transform:scaleX(1)}.lang-strip a.is-active{color:var(--ink)}.mobile-menu{position:fixed;inset:calc(var(--header-h)) 0 0;z-index:49;background:var(--bg);overflow-y:auto;padding:16px;animation:fadeIn 0.2s}.mm-inner{max-width:520px;margin-inline:auto;display:flex;flex-direction:column;gap:4px}.mm-label{font-size:0.74rem;font-weight:800;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);margin:16px 0 6px}.mm-link{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;background:var(--surface);border:1.5px solid var(--line);font-weight:700;text-decoration:none}.search-dialog{width:min(680px,100% - 24px);max-height:min(640px,85vh);padding:0;border:2px solid var(--edge);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-lg),0 30px 80px -20px rgba(0,0,0,0.4);margin-top:10vh;overflow:hidden}.search-dialog::backdrop{background:rgba(14,16,20,0.45);backdrop-filter:blur(4px)}.search-box{display:flex;flex-direction:column;max-height:inherit}.search-field{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1.5px solid var(--line)}.search-field svg{width:22px;height:22px;color:var(--muted)}.search-field input{flex:1;border:0;outline:0;background:transparent;font-size:1.1rem;min-width:0}.search-results{overflow-y:auto;padding:8px;flex:1;min-height:80px}.sr-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;text-decoration:none}.sr-item[aria-selected='true'],.sr-item:hover{background:var(--bg-2)}.sr-type{flex:none;min-width:62px;text-align:center;font-size:0.68rem;font-weight:800;text-transform:uppercase;letter-spacing:0.06em;padding:4px 6px;border-radius:7px;background:var(--bg-2);color:var(--ink-2)}.sr-item[aria-selected='true'] .sr-type{background:var(--surface)}.sr-main{min-width:0}.sr-main strong{display:block;font-size:0.97rem}.sr-main small{display:block;color:var(--muted);font-size:0.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sr-main mark{background:var(--sun-soft);color:inherit;border-radius:3px;padding:0 1px}.sr-empty{padding:28px;text-align:center;color:var(--muted)}.sr-group{font-size:0.72rem;font-weight:800;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);padding:10px 12px 4px}.search-foot{display:flex;gap:18px;padding:10px 18px;border-top:1.5px solid var(--line);font-size:0.78rem;color:var(--muted)}.search-foot kbd{margin-right:3px}.hero{position:relative;padding:56px 0 30px;overflow:hidden}.hero::before{content:'';position:absolute;inset:0;background-image:radial-gradient(color-mix(in srgb,var(--ink) 13%,transparent) 1px,transparent 1px);background-size:22px 22px;mask-image:radial-gradient(ellipse 80% 70% at 70% 30%,#000 30%,transparent 75%);-webkit-mask-image:radial-gradient(ellipse 80% 70% at 70% 30%,#000 30%,transparent 75%);pointer-events:none}.hero-grid{position:relative;display:grid;grid-template-columns:1.08fr 1fr;gap:56px;align-items:center}.hero-pill{margin-bottom:20px}.hero h1{font-size:clamp(2.6rem,5.4vw,4.6rem);margin-bottom:18px}.hl-marker{position:relative;white-space:nowrap;z-index:0}.hl-marker::after{content:'';position:absolute;left:-4px;right:-6px;bottom:0.08em;height:0.36em;background:var(--sun);z-index:-1;border-radius:4px;transform:rotate(-1.2deg)}:root[data-theme='dark'] .hl-marker::after{opacity:0.5}.hero-lead{font-size:1.18rem;color:var(--ink-2);max-width:560px}.hero-search{position:relative;display:flex;align-items:center;gap:10px;max-width:580px;margin:26px 0 12px;padding:7px 7px 7px 16px;background:var(--surface);border:2px solid var(--edge);border-radius:16px;box-shadow:var(--shadow)}.hero-search>svg{width:21px;height:21px;color:var(--muted)}.hero-search input{flex:1;min-width:0;border:0;outline:0;background:transparent;font-size:1.02rem;padding:8px 0}.hero-search input::-webkit-search-cancel-button{display:none}.hero-results{position:absolute;top:calc(100% + 8px);left:0;right:0;z-index:20;background:var(--surface);border:2px solid var(--edge);border-radius:16px;box-shadow:var(--shadow-lg);padding:6px;max-height:360px;overflow:auto}.hero-tags{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;font-size:0.88rem;color:var(--muted)}.hero-tags a{color:var(--ink-2);font-weight:600;text-decoration:none;padding:2px 10px;border-radius:999px;background:var(--surface);border:1px solid var(--line)}.hero-tags a:hover{border-color:var(--edge)}.hero-visual{position:relative;min-height:440px}.window{background:var(--code-bg);border:2px solid var(--edge);border-radius:18px;box-shadow:var(--shadow-lg);overflow:hidden;color:var(--code-text)}:root[data-theme='dark'] .window{border-color:#353a46}.window-bar{display:flex;align-items:center;gap:7px;padding:11px 14px;background:var(--code-bg-2);border-bottom:1px solid var(--code-line)}.window-bar i{width:11px;height:11px;border-radius:50%;background:#ff5f57}.window-bar i:nth-child(2){background:#febc2e}.window-bar i:nth-child(3){background:#28c840}.window-bar span{margin-left:8px;font:500 0.78rem var(--font-mono);color:var(--code-muted)}.window pre{margin:0;padding:18px 20px;font-size:0.92rem;line-height:1.7;overflow:auto}.hv-editor{position:absolute;top:0;left:0;width:82%;transform:rotate(-2deg)}.hv-preview{position:absolute;right:0;bottom:20px;width:56%;background:var(--surface);color:var(--ink);transform:rotate(2.5deg)}.hv-preview .window-bar{background:var(--bg-2);border-color:var(--line)}.hv-stage{display:grid;place-items:center;height:170px;background:radial-gradient(circle at 50% 50%,var(--brand-soft),transparent 70%)}.hv-btn{display:inline-block;padding:14px 28px;border-radius:999px;background:#17a865;color:#fff;font-weight:800;font-size:1.1rem;box-shadow:0 10px 24px -8px rgba(23,168,101,0.7);animation:bob 3s ease-in-out infinite}.float-badge{position:absolute;display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border-radius:12px;background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow);font-weight:700;font-size:0.86rem;color:var(--ink);animation:bob 4s ease-in-out infinite}.float-badge svg{width:17px;height:17px;color:var(--brand)}.fb-1{left:4%;bottom:0;animation-delay:-1s}.fb-2{right:4%;top:6%}.fb-2 svg{color:var(--html)}@keyframes bob{50%{transform:translateY(-7px)}}@keyframes fadeIn{from{opacity:0}}.stat-strip{display:grid;grid-template-columns:repeat(5,1fr);margin:48px 0 0;background:var(--surface);border:2px solid var(--edge);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden}.stat-strip div{padding:18px 20px;border-right:1.5px dashed var(--line)}.stat-strip div:last-child{border-right:0}.stat-strip dt{font-size:0.8rem;color:var(--muted);font-weight:600}.stat-strip dd{margin:0;font:800 1.9rem/1.1 var(--font-display)}.sec{padding:56px 0}.sec-head{max-width:680px;margin-bottom:28px}.sec-head.center{margin-inline:auto;text-align:center}.sec-head p{color:var(--ink-2);font-size:1.05rem}.h2{font-size:clamp(1.75rem,3.2vw,2.5rem)}.h3{font-size:1.35rem}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:20px}.course-card{position:relative;display:flex;flex-direction:column;padding:26px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow);text-decoration:none;transition:transform 0.2s var(--ease),box-shadow 0.2s var(--ease);overflow:hidden}.course-card::before{content:'';position:absolute;right:-40px;top:-40px;width:160px;height:160px;border-radius:50%;background:var(--cs);transition:transform 0.4s var(--ease)}.course-card:hover{transform:translate(-3px,-3px);box-shadow:6px 6px 0 var(--hard)}.course-card:hover::before{transform:scale(1.3)}.course-card>*{position:relative}.cc-badge{display:inline-grid;place-items:center;width:56px;height:56px;border-radius:16px;background:var(--c);color:var(--ci,#fff);font:800 1rem/1 var(--font-mono);margin-bottom:18px;border:2px solid var(--edge);box-shadow:2px 2px 0 var(--hard)}.course-card h3{font-size:1.6rem;margin-bottom:6px}.course-card p{color:var(--ink-2);flex:1}.cc-meta{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}.cc-meta span{font-size:0.76rem;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--bg-2);color:var(--ink-2)}.cc-go{display:inline-flex;align-items:center;gap:6px;font-weight:800;color:var(--ink)}.cc-go svg{transition:transform 0.2s}.course-card:hover .cc-go svg{transform:translateX(4px)}.loop-section{padding:70px 0;background:var(--ink);color:var(--bg);position:relative;overflow:hidden}.loop-section .sec-head p{color:color-mix(in srgb,var(--bg) 75%,transparent)}.loop-section .eyebrow{color:var(--sun)}.loop-grid{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(4,1fr);gap:16px;counter-reset:loop}.loop-card{position:relative;padding:22px;border-radius:var(--r);background:color-mix(in srgb,var(--bg) 6%,transparent);border:1.5px solid color-mix(in srgb,var(--bg) 14%,transparent);transition:background 0.2s,transform 0.2s}.loop-card:hover{background:color-mix(in srgb,var(--bg) 10%,transparent);transform:translateY(-3px)}.loop-card h3{font-size:1.15rem;margin:14px 0 6px}.loop-card p{margin:0;font-size:0.92rem;color:color-mix(in srgb,var(--bg) 70%,transparent)}.loop-ico{display:inline-grid;place-items:center;width:42px;height:42px;border-radius:12px;background:var(--brand);color:#fff}.loop-card:nth-child(4n + 2) .loop-ico{background:var(--css)}.loop-card:nth-child(4n + 3) .loop-ico{background:var(--html)}.loop-card:nth-child(4n + 4) .loop-ico{background:var(--js);color:#15161b}.loop-ico svg{width:20px;height:20px}.loop-n{position:absolute;right:18px;top:18px;font:800 0.86rem var(--font-mono);color:color-mix(in srgb,var(--bg) 40%,transparent)}.related-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.topic-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:var(--r);background:var(--surface);border:1.5px solid var(--line);text-decoration:none;transition:border-color 0.15s,transform 0.15s,box-shadow 0.15s}.topic-card:hover{border-color:var(--edge);transform:translate(-2px,-2px);box-shadow:var(--shadow)}.tc-num{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:var(--cs);color:var(--ink);font:800 0.85rem var(--font-mono);flex:none}.tc-body{flex:1;min-width:0}.tc-body strong{display:block}.tc-body small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--muted);font-size:0.84rem;line-height:1.4}.topic-card>svg{color:var(--muted);transition:transform 0.2s}.topic-card:hover>svg{transform:translateX(3px);color:var(--ink)}.bento{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:minmax(190px,auto);gap:16px}.bento-card,.mode-card{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:24px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow);text-decoration:none;transition:transform 0.2s var(--ease),box-shadow 0.2s var(--ease);overflow:hidden}a.bento-card:hover,a.mode-card:hover{transform:translate(-3px,-3px);box-shadow:6px 6px 0 var(--hard)}.bento-card h3,.mode-card h3{font-size:1.3rem;margin:12px 0 2px}.bento-card p,.mode-card p{color:var(--ink-2);font-size:0.95rem;flex:1}.mode-ico{display:inline-grid;place-items:center;width:46px;height:46px;border-radius:13px;background:var(--accent-soft);color:var(--brand-2);border:1.5px solid color-mix(in srgb,var(--brand) 40%,transparent)}.mode-ico svg{width:22px;height:22px}.b-play{grid-column:span 2;grid-row:span 2;background:var(--ink);color:var(--bg)}.b-play p{color:color-mix(in srgb,var(--bg) 75%,transparent);max-width:420px}.b-play .link-arrow{color:var(--sun)}.b-play .mode-ico{background:var(--sun);color:#15161b;border-color:var(--sun)}.b-ex .mode-ico{background:var(--html-soft);color:var(--html);border-color:color-mix(in srgb,var(--html) 40%,transparent)}.b-quiz .mode-ico{background:var(--css-soft);color:var(--css);border-color:color-mix(in srgb,var(--css) 40%,transparent)}.b-proj .mode-ico{background:var(--js-soft);color:#a07800;border-color:color-mix(in srgb,var(--js) 50%,transparent)}.b-cert .mode-ico{background:var(--violet-soft);color:var(--violet);border-color:color-mix(in srgb,var(--violet) 40%,transparent)}.mini-ide{margin-top:18px;width:100%;border-radius:14px;background:var(--code-bg);border:1.5px solid #343947;padding:10px;display:flex;flex-wrap:wrap;gap:6px}.mi-tab{padding:4px 10px;border-radius:7px;font:600 0.75rem var(--font-mono);color:var(--code-muted);background:var(--code-bg-2)}.mi-tab.is-on{color:#15161b;background:var(--js)}.mini-ide code{flex-basis:100%;padding:14px 6px 6px;color:#7ee2a8;font-size:0.9rem}.mode-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.mode-card.static{box-shadow:none;border-width:1.5px;border-color:var(--line)}.daily-card{display:grid;grid-template-columns:0.8fr 1.2fr;gap:36px;align-items:start;padding:36px;border-radius:28px;background:linear-gradient(135deg,var(--sun-soft),var(--html-soft));border:2px solid var(--edge);box-shadow:var(--shadow-lg)}.daily-card .eyebrow{color:var(--html)}.daily-slot .ex{margin:0}.paths-teaser{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center;padding:40px;border-radius:28px;background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.path-line{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px;position:relative}.path-line::before{content:'';position:absolute;left:26px;top:20px;bottom:20px;border-left:2.5px dashed var(--line)}.path-line li a,.path-line li span{position:relative;display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:14px;background:var(--surface);border:1.5px solid var(--line);font-weight:700;text-decoration:none}.path-line li a:hover{border-color:var(--edge)}.faq{display:flex;flex-direction:column;gap:10px}.faq details{background:var(--surface);border:1.5px solid var(--line);border-radius:var(--r);padding:0 20px;transition:border-color 0.2s}.faq details[open]{border-color:var(--edge);box-shadow:var(--shadow)}.faq summary{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:17px 0;font-weight:700;font-size:1.04rem;cursor:pointer;list-style:none}.faq summary::-webkit-details-marker{display:none}.faq summary svg{transition:transform 0.2s;color:var(--muted)}.faq details[open] summary svg{transform:rotate(180deg)}.faq .prose{padding-bottom:6px}.final-cta{text-align:center;padding:64px 28px;border-radius:32px;background:var(--brand);color:#fff;border:2px solid var(--edge);box-shadow:var(--shadow-lg);position:relative;overflow:hidden}.final-cta::before{content:'</>';position:absolute;left:-20px;bottom:-60px;font:800 13rem/1 var(--font-mono);color:rgba(255,255,255,0.08)}.final-cta h2{font-size:clamp(1.9rem,4vw,3rem);position:relative}.final-cta p{font-size:1.12rem;opacity:0.9;position:relative}:root[data-theme='dark'] .final-cta{color:#07140d}.course-hero{padding:36px 0 50px;background:linear-gradient(180deg,var(--cs) 0%,transparent 100%);border-bottom:1px solid var(--line)}.ch-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:48px;align-items:center}.course-hero h1{font-size:clamp(2.3rem,4.6vw,3.7rem);margin:16px 0 14px}.ch-lead{font-size:1.15rem;color:var(--ink-2);max-width:580px}.ch-stats{display:grid;grid-template-columns:repeat(4,auto);justify-content:start;gap:8px 28px;margin:28px 0 0}.ch-stats dt{font-size:0.78rem;color:var(--muted);font-weight:600}.ch-stats dd{margin:0;font:800 1.6rem var(--font-display)}.ch-visual{position:relative;padding:20px 10px 40px}.ch-visual .window{transform:rotate(1.5deg)}.ch-visual .window pre{max-height:330px;font-size:0.86rem}.ch-visual .fb-1{left:-10px;bottom:6px}.ch-visual .fb-2{right:-6px;top:-4px}.two-col{display:grid;grid-template-columns:1.2fr 1fr;gap:40px;align-items:start}.learn-card{padding:28px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.check-list ul{list-style:none;padding:0;margin:0;display:grid;gap:10px}.check-list li{position:relative;padding-left:34px;line-height:1.5}.check-list li::before{content:'';position:absolute;left:0;top:1px;width:22px;height:22px;border-radius:7px;background:var(--brand) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 5 5L20 7'/%3E%3C/svg%3E") center/14px no-repeat}.roadmap{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;align-items:start}.rm-stage{padding:22px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.rm-head{display:flex;gap:14px;margin-bottom:14px}.rm-head h3{font-size:1.25rem;margin:0 0 2px}.rm-head p{font-size:0.9rem;color:var(--muted);margin:0}.rm-num{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:var(--c);color:var(--ci,#fff);font:800 1.05rem var(--font-display);flex:none;border:2px solid var(--edge)}.rm-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}.rm-list a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;text-decoration:none}.rm-list a:hover{background:var(--cs)}.rm-list a>span:nth-child(2){flex:1;min-width:0}.rm-list strong{display:block;font-size:0.95rem}.rm-list small{display:block;color:var(--muted);font-size:0.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rm-list a>svg{color:var(--muted);opacity:0;transition:opacity 0.15s}.rm-list a:hover>svg{opacity:1}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:18px;margin-bottom:30px}.project-card{display:flex;flex-direction:column;padding:22px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow);text-decoration:none;transition:transform 0.2s var(--ease),box-shadow 0.2s var(--ease)}.project-card:hover{transform:translate(-3px,-3px);box-shadow:6px 6px 0 var(--hard)}.pc-top{display:flex;justify-content:space-between;align-items:center}.pc-time{font-size:0.8rem;color:var(--muted);font-weight:600}.project-card h3{font-size:1.25rem;margin-bottom:4px}.project-card p{color:var(--ink-2);font-size:0.93rem;flex:1}.pc-tech{display:flex;gap:6px}.course-shell{display:grid;grid-template-columns:280px minmax(0,1fr) 220px;gap:40px;width:min(1440px,100% - 32px);margin-inline:auto;align-items:start}.sidebar{position:sticky;top:calc(var(--header-h) + var(--strip-h));height:calc(100vh - var(--header-h) - var(--strip-h));overflow-y:auto;padding:22px 6px 40px 0;scrollbar-width:thin;scrollbar-color:var(--line) transparent}.sb-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.sb-course{display:inline-flex;align-items:center;gap:10px;font:800 1.08rem var(--font-display);text-decoration:none}.sb-close{display:none}.sb-group{margin-bottom:18px}.sb-label{font-size:0.72rem;font-weight:800;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);margin:0 0 6px 8px}.sb-group ul{list-style:none;margin:0;padding:0}.sb-group a{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:9px;text-decoration:none;font-size:0.92rem;font-weight:500;color:var(--ink-2);line-height:1.35}.sb-group a:hover{background:var(--bg-2);color:var(--ink)}.sb-group a.is-current{background:var(--cs,var(--accent-soft));color:var(--ink);font-weight:700;box-shadow:inset 3px 0 0 var(--c,var(--accent))}.sb-num{display:inline-grid;place-items:center;min-width:24px;height:22px;border-radius:6px;font:600 0.7rem var(--font-mono);color:var(--muted);background:var(--bg-2);flex:none}.sb-num svg{width:13px;height:13px}.is-current .sb-num{background:var(--c,var(--accent));color:var(--ci,#fff)}.lesson{min-width:0;padding:22px 0 60px}.lesson-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}.chapters-btn{display:none;align-items:center;gap:6px;padding:7px 12px;border-radius:10px;border:1.5px solid var(--line);background:var(--surface);font-weight:700;font-size:0.85rem}.crumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:4px;padding:0;margin:0;font-size:0.85rem;color:var(--muted)}.crumbs li + li::before{content:'/';margin-right:4px;opacity:0.5}.crumbs a{text-decoration:none;font-weight:600;color:var(--ink-2)}.crumbs a:hover{color:var(--brand-2);text-decoration:underline}.lesson-hero{padding:6px 0 22px;margin-bottom:22px;border-bottom:1px solid var(--line)}.lesson-hero h1{font-size:clamp(2rem,3.4vw,2.6rem);margin-bottom:10px}.lesson-lead{font-size:1.12rem;color:var(--ink-2);max-width:720px;margin-bottom:14px}.lh-meta{display:flex;flex-wrap:wrap;gap:4px 0;margin:0;font-size:0.86rem;color:var(--muted);font-weight:500}.lh-meta span + span::before{content:'·';margin:0 10px;opacity:0.7}.lesson-sec{margin-top:44px}.lesson-sec>h2{font-size:clamp(1.45rem,2.4vw,1.8rem);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--line)}.syntax-label{font-weight:700;font-size:0.92rem;color:var(--ink-2);margin-bottom:10px}.key-points ul{padding-left:1.2em}.key-points li{margin-bottom:6px}.sec-sub{color:var(--ink-2);margin:-4px 0 18px}.learn-block .prose>:last-child{margin-bottom:0}.toc{position:sticky;top:calc(var(--header-h) + var(--strip-h) + 20px);padding-top:26px;font-size:0.88rem}.toc-h{font-size:0.72rem;font-weight:800;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);margin-bottom:8px}.toc ul{list-style:none;padding:0;margin:0 0 20px;border-left:2px solid var(--line)}.toc a{display:block;padding:5px 12px;margin-left:-2px;border-left:2px solid transparent;text-decoration:none;color:var(--muted);font-weight:600}.toc a:hover{color:var(--ink)}.toc a.is-active{color:var(--ink);border-left-color:var(--c,var(--accent))}.prose{max-width:75ch}.prose>:last-child{margin-bottom:0}.prose p,.prose li{color:var(--ink-2)}.prose strong{color:var(--ink)}.prose a{color:var(--brand-2);font-weight:600;text-decoration-thickness:1.5px;text-underline-offset:3px}.prose h3{font-size:1.25rem;margin-top:1.4em}.prose h4{font-size:1.05rem;margin-top:1.2em}.prose ul,.prose ol{padding-left:1.3em;margin:0 0 1em}.prose li{margin-bottom:0.35em}.prose li::marker{color:var(--c,var(--brand));font-weight:800}.prose :not(pre)>code,.cheat-card td code,.opt-text code,.explain-list code,.ex-feedback code,.ex-explain code,.ex-hint code,.test code,.qz-explain code,.qz-q code,.qs-q code,.term code{font-size:0.86em;padding:0.12em 0.4em;border-radius:6px;background:var(--bg-2);border:1px solid var(--line);color:var(--ink);word-break:break-word}.prose blockquote{margin:1em 0;padding:14px 18px;border-left:4px solid var(--c,var(--brand));background:var(--surface);border-radius:0 12px 12px 0}.lead-prose p:first-child{font-size:1.12rem;color:var(--ink)}.prose.small{font-size:0.95rem}.table-wrap{overflow-x:auto;margin:0 0 1.2em;border:1.5px solid var(--line);border-radius:12px;background:var(--surface)}.table-wrap table{width:100%;border-collapse:collapse;font-size:0.92rem}.table-wrap th{text-align:left;background:var(--bg-2);font-weight:700;padding:10px 14px;white-space:nowrap}.table-wrap td{padding:9px 14px;border-top:1px solid var(--line);vertical-align:top;color:var(--ink-2)}.callout{--co:var(--warn);--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 18h6M10 21h4'/%3E%3Cpath d='M12 3a6 6 0 0 0-3.6 10.8c.6.5 1 1.2 1.1 2V16h5v-.2c.1-.8.5-1.5 1.1-2A6 6 0 0 0 12 3z'/%3E%3C/svg%3E");margin:26px 0;padding:18px 20px 18px 60px;border-radius:var(--r);background:var(--sun-soft);border:1.5px solid color-mix(in srgb,var(--sun) 55%,var(--line));position:relative}.callout::before{content:'';position:absolute;left:16px;top:16px;width:30px;height:30px;border-radius:9px;background:color-mix(in srgb,var(--co) 16%,transparent)}.callout::after{content:'';position:absolute;left:22px;top:22px;width:18px;height:18px;background:var(--co);-webkit-mask:var(--ico) center / contain no-repeat;mask:var(--ico) center / contain no-repeat}.callout-title{font-weight:800;margin-bottom:4px;color:var(--ink)}.callout-analogy{--co:var(--violet);--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z'/%3E%3Cpath d='M8.5 12h.01M12 12h.01M15.5 12h.01'/%3E%3C/svg%3E");background:var(--violet-soft);border-color:color-mix(in srgb,var(--violet) 35%,var(--line))}.callout-warning,.callout-careful{--co:var(--danger);--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z'/%3E%3Cpath d='M12 9v4M12 17h.01'/%3E%3C/svg%3E");background:var(--danger-soft);border-color:color-mix(in srgb,var(--danger) 35%,var(--line))}.callout-good,.callout-best,.callout-pro{--co:var(--ok);--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m8 12.5 2.8 2.8L16.5 9.5'/%3E%3C/svg%3E");background:var(--ok-soft);border-color:color-mix(in srgb,var(--ok) 35%,var(--line))}.callout-fun,.callout-did{--co:var(--css);--ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3l1.9 5.6L19.5 10l-5.6 1.9L12 17.5l-1.9-5.6L4.5 10l5.6-1.4z'/%3E%3C/svg%3E");background:var(--css-soft);border-color:color-mix(in srgb,var(--css) 35%,var(--line))}.code{margin:0;background:var(--code-bg);color:var(--code-text);font:400 0.9rem/1.65 var(--font-mono);tab-size:2;overflow:auto}.code code{font:inherit;display:block;white-space:pre}.code-static{padding:16px 18px;border-radius:12px;border:1.5px solid #2b2f3a}.code-block{margin:0 0 1.2em;border-radius:14px;overflow:hidden;border:1.5px solid #2b2f3a;background:var(--code-bg);max-width:100%}.code-block figcaption{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 14px;font:600 0.75rem var(--font-mono);color:var(--code-muted);background:var(--code-bg-2);border-bottom:1px solid var(--code-line)}.code-block pre{margin:0;padding:14px 18px;overflow:auto;font:400 0.9rem/1.65 var(--font-mono);color:var(--code-text)}.code-block pre code{white-space:pre}.copy-btn{margin-left:auto;padding:4px 10px;border-radius:7px;border:1px solid #353a47;background:transparent;color:var(--code-muted);font:600 0.72rem var(--font-body)}.copy-btn:hover{color:#fff;border-color:#555c6c}.t-tag{color:#ff8f6b}.t-attr{color:#ffd37a}.t-string{color:#8be3a9}.t-comment{color:#6c7385;font-style:italic}.t-keyword{color:#c79bff}.t-literal,.t-number{color:#ffab70}.t-punct{color:#9aa3b5}.t-op{color:#7fd6ff}.t-fn,.t-method{color:#7aa8ff}.t-prop{color:#7fd6ff}.t-builtin{color:#ff8fc7}.t-class{color:#ffd37a}.t-id{color:#ffab70}.t-pseudo{color:#c79bff}.t-value{color:#e7e5df}.t-entity{color:#ff8fc7}.example{margin:0 0 34px}.example-head{display:flex;align-items:baseline;gap:12px;margin-bottom:8px;flex-wrap:wrap}.example-head h3{font-size:1.25rem;margin:0}.example-num{font:700 0.74rem var(--font-mono);text-transform:uppercase;letter-spacing:0.08em;color:var(--c,var(--brand-2));background:var(--cs,var(--accent-soft));padding:3px 8px;border-radius:6px}.example>.prose{margin-bottom:12px}.runner{border:2px solid var(--edge);border-radius:18px;overflow:hidden;background:var(--code-bg);box-shadow:var(--shadow);margin:0 0 14px}:root[data-theme='dark'] .runner{border-color:#353a46}.runner-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 6px 6px 8px;background:var(--code-bg-2);border-bottom:1px solid var(--code-line)}.runner-tabs{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}.runner-tab{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border-radius:9px;border:0;background:transparent;color:var(--code-muted);font:600 0.8rem var(--font-mono);white-space:nowrap}.runner-tab:hover{color:var(--code-text)}.runner-tab.is-active{background:var(--code-bg);color:#fff;box-shadow:inset 0 0 0 1px var(--code-line)}.runner-actions{display:flex;align-items:center;gap:4px;flex:none}.ra{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:9px;border:0;background:transparent;color:var(--code-muted)}.ra:hover{background:var(--code-bg);color:#fff}.ra svg{width:16px;height:16px}.btn-run{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 14px;border-radius:9px;border:0;background:var(--brand);color:#fff;font:800 0.84rem var(--font-body);transition:transform 0.1s,filter 0.15s}.btn-run:hover{filter:brightness(1.08)}.btn-run:active{transform:scale(0.96)}.btn-run svg{width:13px;height:13px;fill:currentColor;stroke:none}.btn-run.is-running{animation:pulse 0.5s}@keyframes pulse{50%{transform:scale(0.94)}}.runner-code{position:relative}.runner-pane>.code{max-height:460px;padding:14px 0}.ed{position:relative;display:flex;max-height:460px;overflow:auto;background:var(--code-bg);scrollbar-width:thin;scrollbar-color:#3a3f4c transparent}.ed-gutter{position:sticky;left:0;z-index:2;flex:none;padding:14px 0;min-width:44px;text-align:right;background:var(--code-bg);color:#4b5160;font:400 0.9rem/1.65 var(--font-mono);user-select:none;border-right:1px solid var(--code-line)}.ed-gutter span{display:block;padding:0 10px 0 8px}.ed-gutter span.is-hl{color:var(--sun)}.ed-area{position:relative;flex:1 0 auto}.ed-area .ed-hl,.ed-area textarea{margin:0;padding:14px 18px 14px 14px;border:0;font:400 0.9rem/1.65 var(--font-mono);tab-size:2;white-space:pre;letter-spacing:0;word-spacing:0}.ed-area .ed-hl{pointer-events:none;color:var(--code-text);min-height:100%;display:block;width:max-content;min-width:100%}.ed-area .ed-hl code{font:inherit;white-space:pre}.ed-area textarea{position:absolute;inset:0;width:100%;height:100%;resize:none;overflow:hidden;background:transparent;color:transparent;caret-color:#fff;outline:none;-webkit-text-fill-color:transparent}.ed-area textarea::selection{background:rgba(122,168,255,0.35);-webkit-text-fill-color:transparent}.ed-linehl{position:absolute;left:0;right:0;background:rgba(255,210,63,0.1);box-shadow:inset 3px 0 0 var(--sun);pointer-events:none;transition:top 0.15s,height 0.15s}.runner-out{background:var(--surface);border-top:2px solid var(--edge)}:root[data-theme='dark'] .runner-out{border-top-color:#353a46}.out-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 14px;font:700 0.74rem var(--font-body);text-transform:uppercase;letter-spacing:0.08em;color:var(--muted);background:var(--bg-2);border-bottom:1px solid var(--line)}.out-hint{text-transform:none;letter-spacing:0;font-weight:500;font-size:0.75rem}.out-hint kbd{font-size:0.68rem}.out-preview{background:#fff}.out-preview iframe{width:100%;height:220px;border:0;background:#fff;transition:height 0.2s}.out-console{font:400 0.86rem/1.55 var(--font-mono);padding:8px 0;min-height:44px;max-height:260px;overflow:auto;background:var(--surface)}.out-console.is-quiet:empty{display:none}.out-preview + .out-console{border-top:1px solid var(--line)}.out-preview + .out-console:empty{display:none}.log{display:flex;gap:10px;padding:3px 14px;white-space:pre-wrap;word-break:break-word;color:var(--ink);border-bottom:1px solid color-mix(in srgb,var(--line) 50%,transparent)}.log::before{content:'›';color:var(--muted);flex:none}.log.is-warn{background:var(--sun-soft);color:var(--warn)}.log.is-warn::before{content:'!';font-weight:800}.log.is-error{background:var(--danger-soft);color:var(--danger)}.log.is-error::before{content:'✕'}.log.is-info::before{content:'ℹ';color:var(--css)}.log.is-empty{color:var(--muted);font-style:italic}.log.is-empty::before{content:''}.log .v-str{color:#0f8a4d}.log .v-num{color:#c2410c}.log .v-key{color:#7c3aed}:root[data-theme='dark'] .log .v-str{color:#8be3a9}:root[data-theme='dark'] .log .v-num{color:#ffab70}:root[data-theme='dark'] .log .v-key{color:#c79bff}.log-count{margin-left:auto;font-size:0.72rem;background:var(--bg-2);color:var(--muted);border-radius:999px;padding:0 7px;height:18px;flex:none}.test-panel{background:var(--surface);border-top:1px solid var(--line);padding:12px 14px}.test-head{display:flex;align-items:center;justify-content:space-between;font-size:0.86rem;margin-bottom:8px}.test-score{font:700 0.8rem var(--font-mono);padding:2px 10px;border-radius:999px;background:var(--bg-2)}.test-score.is-pass{background:var(--ok-soft);color:var(--ok)}.test-list{list-style:none;padding:0;margin:0;display:grid;gap:6px}.test{display:flex;align-items:flex-start;gap:10px;font-size:0.9rem;color:var(--ink-2);line-height:1.45}.test-ico{width:20px;height:20px;border-radius:6px;flex:none;border:1.5px dashed var(--line);margin-top:1px;display:grid;place-items:center;font-size:0.74rem;font-weight:800}.test.is-pass .test-ico{background:var(--ok);border:0;color:#fff}.test.is-pass .test-ico::before{content:'✓'}.test.is-fail .test-ico{background:var(--danger);border:0;color:#fff}.test.is-fail .test-ico::before{content:'✕'}.test.is-fail{color:var(--ink)}.explain{margin:0;border:1.5px solid var(--line);border-radius:14px;background:var(--surface)}.explain summary{display:flex;align-items:center;gap:8px;padding:11px 16px;cursor:pointer;font-weight:700;font-size:0.92rem;list-style:none}.explain summary::-webkit-details-marker{display:none}.explain summary svg{color:var(--c,var(--brand))}.explain-list{list-style:none;margin:0;padding:0 8px 8px}.explain-list li{display:flex;gap:12px;padding:8px 10px;border-radius:10px;font-size:0.94rem;color:var(--ink-2);cursor:default;transition:background 0.15s}.explain-list li:hover,.explain-list li.is-hover{background:var(--sun-soft)}.explain-list .ln{flex:none;min-width:70px;font:700 0.75rem/1.9 var(--font-mono);color:var(--c,var(--brand-2))}.syntax-card{margin-top:30px;padding:18px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.syntax-card .prose{margin-top:12px}.mistake{margin-bottom:22px;padding:20px;border-radius:var(--r-lg);background:var(--surface);border:1.5px solid var(--line)}.mistake h3{display:flex;align-items:center;gap:10px;font-size:1.12rem}.mistake-ico{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;background:var(--danger-soft);color:var(--danger);font-weight:900;font-size:0.9rem;flex:none}.mistake-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.mistake-col{min-width:0}.mistake-label{font-size:0.78rem;font-weight:800;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.06em}.is-wrong .mistake-label{color:var(--danger)}.is-right .mistake-label{color:var(--ok)}.is-wrong .code-static{box-shadow:inset 4px 0 0 var(--danger)}.is-right .code-static{box-shadow:inset 4px 0 0 var(--ok)}.mistake-col .code-static{font-size:0.84rem;height:100%}.realworld{padding:22px;border-radius:var(--r-lg);background:linear-gradient(135deg,var(--violet-soft),var(--surface) 60%);border:1.5px solid var(--line);margin-bottom:16px}.realworld h3{font-size:1.15rem}.ex-list{display:flex;flex-direction:column;gap:18px}.ex{padding:20px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow);transition:box-shadow 0.25s,border-color 0.25s}.ex.is-correct{border-color:var(--ok);box-shadow:4px 4px 0 var(--ok)}.ex.is-wrong{animation:shake 0.35s}@keyframes shake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}.ex-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}.ex-type{display:inline-flex;align-items:center;gap:6px;font-size:0.78rem;font-weight:800;text-transform:uppercase;letter-spacing:0.06em;color:var(--ink);padding:4px 10px;border-radius:8px;background:var(--bg-2)}.ex-topic{margin-left:auto;font-size:0.8rem;font-weight:700;color:var(--muted);text-decoration:none}.ex-topic:hover{color:var(--brand-2)}.ex-q{margin-bottom:12px}.ex-q p{color:var(--ink);font-weight:500}.ex>.code-static,.predict-code{margin-bottom:14px}.predict-out{margin-top:8px;border-radius:12px;overflow:hidden;border:1.5px solid var(--line)}.ex-options{display:grid;gap:8px}.opt{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:11px 14px;border-radius:12px;border:1.5px solid var(--line);background:var(--surface-2);font-weight:500;transition:border-color 0.15s,background 0.15s,transform 0.1s}.opt:hover:not(:disabled){border-color:var(--edge);transform:translateX(2px)}.opt:disabled{cursor:default}.opt-key{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--bg-2);font:800 0.8rem var(--font-mono);flex:none;border:1.5px solid var(--line)}.opt.is-correct{border-color:var(--ok);background:var(--ok-soft)}.opt.is-correct .opt-key{background:var(--ok);color:#fff;border-color:var(--ok)}.opt.is-wrong{border-color:var(--danger);background:var(--danger-soft)}.opt.is-wrong .opt-key{background:var(--danger);color:#fff;border-color:var(--danger)}.opt.is-dim{opacity:0.55}.ex-feedback:empty{display:none}.ex-feedback{margin-top:12px;padding:10px 14px;border-radius:12px;font-weight:700;font-size:0.94rem}.ex-feedback.is-good{background:var(--ok-soft);color:var(--ok)}.ex-feedback.is-bad{background:var(--danger-soft);color:var(--danger)}.ex-explain{margin-top:10px;padding:12px 14px;border-radius:12px;background:var(--bg-2);color:var(--ink-2);font-size:0.94rem}.ex-explain::before{content:'Why: ';font-weight:800;color:var(--ink)}.ex-hint{margin-top:10px;padding:12px 14px;border-radius:12px;background:var(--sun-soft);color:var(--ink-2);font-size:0.94rem}.ex-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.ex-actions .btn-ghost.sm{border-width:1.5px}.ex-task .runner{box-shadow:none}.code-fill{padding:16px 18px;line-height:2.05}.blank{display:inline-block;margin:0 2px;padding:1px 6px;font:600 0.88rem var(--font-mono);color:#fff;background:#2a2f3b;border:1.5px dashed #7a8296;border-radius:6px;outline:none;vertical-align:baseline;min-width:4ch}.blank:focus{border-style:solid;border-color:var(--sun);background:#333948}.blank.is-right{border:1.5px solid #2bd17f;background:rgba(43,209,127,0.18)}.blank.is-wrong{border:1.5px solid #ff6b6f;background:rgba(255,107,111,0.18)}.challenge{padding:24px;border-radius:24px;background:linear-gradient(160deg,var(--cs,var(--accent-soft)),var(--surface) 45%);border:2px solid var(--edge);box-shadow:var(--shadow-lg)}.challenge .ex{padding:0;border:0;box-shadow:none;background:transparent;margin-top:16px}.expected{margin:14px 0 0;padding:12px 16px;border-radius:12px;background:var(--surface);border:1.5px dashed var(--line)}.expected span{font-size:0.74rem;font-weight:800;text-transform:uppercase;letter-spacing:0.08em;color:var(--muted)}.expected p{margin:2px 0 0}.js .quiz-static{display:none}.quiz-static{padding-left:1.2em}.quiz-card{padding:24px;border-radius:24px;background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow-lg);position:relative;overflow:hidden}.qz-top{display:flex;align-items:center;gap:12px;margin-bottom:18px}.qz-progress{flex:1;height:10px;border-radius:999px;background:var(--bg-2);overflow:hidden;border:1.5px solid var(--line)}.qz-progress span{display:block;height:100%;background:var(--c,var(--brand));border-radius:999px;transition:width 0.4s var(--ease)}.qz-count{font:700 0.85rem var(--font-mono);color:var(--muted);white-space:nowrap}.qz-timer{display:inline-flex;align-items:center;gap:6px;font:700 0.85rem var(--font-mono);padding:4px 10px;border-radius:999px;background:var(--bg-2)}.qz-timer.is-low{background:var(--danger-soft);color:var(--danger);animation:pulse 1s infinite}.qz-meta{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}.qz-q{font:700 1.2rem/1.4 var(--font-display);margin-bottom:14px;letter-spacing:-0.01em}.qz-q p{margin:0 0 0.4em}.quiz-card .code-static{margin-bottom:14px}.qz-explain{margin-top:14px;padding:14px 16px;border-radius:14px;background:var(--bg-2);font-size:0.95rem;color:var(--ink-2)}.qz-explain strong{color:var(--ink)}.qz-foot{display:flex;justify-content:space-between;align-items:center;margin-top:18px;gap:10px;flex-wrap:wrap}.qz-streak{font-size:0.86rem;font-weight:700;color:var(--muted)}.qz-result{text-align:center;padding:10px 0}.qz-ring{--p:0;width:150px;height:150px;margin:0 auto 16px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--c,var(--brand)) calc(var(--p) * 1%),var(--bg-2) 0);position:relative}.qz-ring::before{content:'';position:absolute;inset:14px;border-radius:50%;background:var(--surface)}.qz-ring strong{position:relative;font:800 2.2rem var(--font-display)}.qz-result h3{font-size:1.6rem}.qz-review{text-align:left;margin-top:22px;display:grid;gap:10px}.qz-review-item{padding:12px 14px;border-radius:12px;border:1.5px solid var(--line);background:var(--surface-2);font-size:0.92rem}.qz-review-item.is-ok{border-left:4px solid var(--ok)}.qz-review-item.is-no{border-left:4px solid var(--danger)}.qz-review-item p{margin:0 0 4px}.qz-review-item .rv-q{font-weight:700;color:var(--ink)}.qz-review-item a{font-weight:700;color:var(--brand-2);font-size:0.85rem}.confetti{position:fixed;top:-10px;width:10px;height:14px;z-index:200;pointer-events:none;animation:confetti 1.6s ease-in forwards}@keyframes confetti{to{transform:translateY(105vh) rotate(720deg);opacity:0.8}}.quiz-app{margin-bottom:26px}.quiz-setup{padding:24px;border-radius:24px;background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow-lg);display:grid;gap:16px}.qs-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.qs-label{min-width:90px;font-weight:800;font-size:0.9rem}.quiz-setup [data-start]{justify-self:start}.quiz-tips{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:40px}.quiz-tips div{padding:14px 16px;border-radius:14px;background:var(--surface);border:1.5px solid var(--line);font-size:0.9rem}.quiz-tips strong{display:block}.quiz-tips span{color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{padding:6px 13px;border-radius:999px;border:1.5px solid var(--line);background:var(--surface);font-size:0.86rem;font-weight:700;color:var(--ink-2);transition:0.15s}.chip:hover{border-color:var(--edge)}.chip.is-on{background:var(--ink);color:var(--bg);border-color:var(--ink)}.select{display:inline-flex;align-items:center;gap:8px;font-size:0.86rem;font-weight:700}.select select{appearance:none;padding:8px 34px 8px 12px;border-radius:10px;border:1.5px solid var(--line);background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b6d79' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") right 10px center/14px no-repeat;font-weight:600;max-width:260px}.select.sm select{padding:6px 30px 6px 10px;font-size:0.84rem}.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:14px 16px;margin-bottom:30px;border-radius:16px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow)}.scoreboard{margin-left:auto;display:inline-flex;align-items:baseline;gap:6px;padding:6px 14px;border-radius:12px;background:var(--ink);color:var(--bg);font-weight:600;font-size:0.88rem}.scoreboard strong{font:800 1.3rem var(--font-display);color:var(--sun)}.sc-label{font-size:0.72rem;text-transform:uppercase;letter-spacing:0.08em;opacity:0.7}.ex-group{margin-bottom:40px}.keep-going{margin:56px 0 10px;padding-top:32px;border-top:1px solid var(--line)}.keep-going>h2{font-size:clamp(1.35rem,2.4vw,1.7rem);margin-bottom:6px}.keep-going>h2 + .kg-grid,.keep-going>h2 + .related-grid{margin-top:18px}.kg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.kg-card{position:relative;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:14px;row-gap:2px;align-items:center;padding:18px;border-radius:16px;background:var(--surface);border:1px solid var(--line);text-decoration:none;color:var(--ink);box-shadow:var(--shadow);transition:transform 0.2s var(--ease),border-color 0.2s,box-shadow 0.2s var(--ease)}.kg-card>svg{grid-row:1 / span 2;width:44px;height:44px;padding:11px;border-radius:12px;color:var(--c,var(--brand));background:color-mix(in srgb,var(--c,var(--brand)) 12%,var(--surface));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c,var(--brand)) 22%,transparent)}.kg-card strong{font-size:0.98rem;line-height:1.3}.kg-card small{color:var(--muted);font-size:0.84rem;line-height:1.35}.kg-card::after{content:'';position:absolute;right:16px;top:18px;width:16px;height:16px;background:var(--muted);opacity:0;transform:translateX(-4px);transition:opacity 0.2s,transform 0.2s var(--ease);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat}.kg-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--c,var(--brand)) 45%,var(--line));box-shadow:0 14px 28px -20px rgba(15,23,42,0.45)}.kg-card:hover::after{opacity:1;transform:none;background:var(--c,var(--brand))}.lh-pills{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:14px}.ex-group-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}.ex-group-head h2{display:flex;align-items:center;gap:10px;font-size:1.35rem;margin:0}.empty-state{text-align:center;padding:40px;color:var(--muted)}.cheat-filter{margin-bottom:18px}.search-inline{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:14px;border:2px solid var(--edge);background:var(--surface);box-shadow:var(--shadow);max-width:520px}.search-inline svg{color:var(--muted)}.search-inline input{flex:1;border:0;outline:0;background:transparent;min-width:0}.search-inline.big{margin-top:24px;padding:13px 16px;font-size:1.05rem}.cheat-grid{columns:2 380px;column-gap:18px}.cheat-card{break-inside:avoid;margin-bottom:18px;padding:18px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.cheat-card h2{font-size:1.15rem;display:flex;align-items:center;gap:8px}.cheat-card h2::before{content:'';width:10px;height:10px;border-radius:3px;background:var(--c,var(--brand))}.cheat-card .table-wrap{border:0;margin:0;background:transparent}.cheat-card th{display:none}.cheat-card td{padding:7px 8px;font-size:0.88rem}.cheat-card td:first-child{white-space:nowrap;width:1%}.cheat-card td a{font-size:0.78rem;font-weight:700;color:var(--brand-2)}.cheat-card tr.is-hidden{display:none}.cheat-card p,.cheat-card li{font-size:0.9rem}.cheat-card .code-block{margin:6px 0 0}.pager{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:44px 0}.pager-top{margin:0 0 32px}.pager-top .pager-link{padding:10px 14px}.pager-top .pager-link strong{font-size:0.98rem}.pager-link{display:flex;flex-direction:column;gap:4px;padding:18px 20px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow);text-decoration:none;transition:transform 0.2s var(--ease),box-shadow 0.2s}.pager-link:hover{transform:translate(-2px,-2px);box-shadow:5px 5px 0 var(--hard)}.pager-link.next{text-align:right;align-items:flex-end;background:var(--c,var(--brand));color:var(--ci,#fff)}.pager-dir{display:inline-flex;align-items:center;gap:6px;font-size:0.8rem;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;opacity:0.8}.pager-link strong{font:800 1.2rem var(--font-display)}.related{margin-bottom:40px}.related h2{font-size:1.35rem}.hub-hero{padding:40px 0 44px;border-bottom:1px solid var(--line);background:radial-gradient(ellipse 70% 100% at 80% 0%,var(--brand-soft),transparent 60%),radial-gradient(ellipse 50% 80% at 0% 100%,var(--sun-soft),transparent 60%)}.hub-hero.slim{padding:32px 0 30px}.hub-hero .crumbs{margin-bottom:18px}.hub-hero h1{font-size:clamp(2.2rem,4.4vw,3.4rem);margin:14px 0 12px;max-width:900px}.hub-lead{font-size:1.14rem;color:var(--ink-2);max-width:720px}.tut-cols{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;align-items:start}.tut-col{padding:20px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.tut-col-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;padding-bottom:14px;border-bottom:1.5px dashed var(--line);text-decoration:none}.tut-col-head strong{display:block;font:800 1.2rem var(--font-display)}.tut-col-head small{color:var(--muted)}.tut-col ul{list-style:none;padding:0;margin:0 0 12px}.tut-col li a{display:flex;align-items:center;gap:10px;padding:5px 8px;border-radius:8px;text-decoration:none;font-size:0.93rem;color:var(--ink-2)}.tut-col li a:hover{background:var(--cs);color:var(--ink)}.loop-explainer{padding:28px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.steps-inline{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:10px;counter-reset:s}.steps-inline li{counter-increment:s;padding:8px 14px 8px 8px;border-radius:999px;background:var(--bg-2);font-size:0.92rem;display:inline-flex;align-items:center;gap:8px}.steps-inline li::before{content:counter(s);display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--ink);color:var(--bg);font:800 0.75rem var(--font-mono)}.cta-split{display:flex;flex-wrap:wrap;align-items:center;gap:16px;padding:26px 28px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.cta-split>div{flex:1;min-width:240px}.cta-split h2{margin-bottom:4px}.cta-split p{margin:0;color:var(--ink-2)}.az{display:flex;flex-wrap:wrap;gap:4px;margin-top:18px}.az a{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--surface);border:1.5px solid var(--line);font-weight:800;text-decoration:none;font-size:0.9rem}.az a:hover{border-color:var(--edge);background:var(--sun-soft)}.az-letter{font-size:2.2rem;color:var(--brand);margin:34px 0 10px;padding-bottom:6px;border-bottom:2px solid var(--line)}.term{padding:16px 0;border-bottom:1px dashed var(--line);scroll-margin-top:140px}.term:target{background:var(--sun-soft);margin-inline:-14px;padding-inline:14px;border-radius:12px}.term h3{font-size:1.15rem;margin-bottom:4px}.path-picker{display:grid;gap:14px;margin-top:32px}.pp-group{display:grid;grid-template-columns:168px 1fr;gap:18px;align-items:start;padding-top:14px;border-top:1px solid var(--line)}.pp-label{margin:0;padding-top:9px;font-size:0.72rem;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:var(--muted)}.pp-row{display:flex;flex-wrap:wrap;gap:8px}.path-pick{display:inline-flex;align-items:center;gap:9px;padding:6px 15px 6px 7px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink-2);font-weight:600;font-size:0.88rem;line-height:1.2;transition:border-color 0.2s var(--ease),color 0.2s var(--ease),background 0.2s var(--ease)}.path-pick:hover{border-color:color-mix(in srgb,var(--ink) 30%,transparent);color:var(--ink)}.path-pick:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.path-pick.is-on{background:var(--ink);border-color:var(--ink);color:var(--bg)}.path-pick-ico{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:color-mix(in srgb,var(--brand) 14%,transparent);color:var(--brand-2)}.path-pick-ico svg{width:15px;height:15px;stroke-width:2.4}.path-pick.is-on .path-pick-ico{background:rgba(255,255,255,0.14);color:inherit}.path-head{display:flex;gap:18px;align-items:flex-start;margin-bottom:26px}.path-mark{display:grid;place-items:center;flex:none;width:64px;height:64px;border-radius:18px;color:#fff;background:linear-gradient(145deg,#2bd17f,#0f8a5a);box-shadow:0 12px 24px -12px rgba(15,138,90,0.8),inset 0 1px 0 rgba(255,255,255,0.3)}.path-mark svg{width:38px;height:38px;stroke-width:2.6}[data-path='frontend-developer'] .path-mark{background:linear-gradient(145deg,#7590ff,#2f5bea);box-shadow:0 12px 24px -12px rgba(47,91,234,0.8),inset 0 1px 0 rgba(255,255,255,0.3)}.mode-ico.path-ico svg{width:28px;height:28px;stroke-width:2.6}[data-path-link='frontend-developer']{--c:#2f5bea}.path-head p{color:var(--ink-2)}.roadmap-v{list-style:none;padding:0;margin:0;position:relative}.roadmap-v::before{content:'';position:absolute;left:21px;top:10px;bottom:10px;border-left:3px dashed var(--line)}.rv-step{position:relative;display:flex;gap:18px;margin-bottom:18px}.rv-dot{position:relative;z-index:1;display:grid;place-items:center;width:45px;height:45px;border-radius:14px;background:var(--c,var(--brand));color:var(--ci,#fff);font:800 1.1rem var(--font-display);border:2px solid var(--edge);box-shadow:2px 2px 0 var(--hard);flex:none}.rv-end .rv-dot{background:var(--violet)}.rv-card{flex:1;padding:18px 20px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.rv-card h3{font-size:1.2rem;margin-bottom:6px}.rv-course{display:inline-flex;gap:6px;font-size:0.82rem;font-weight:700;color:var(--muted);text-decoration:none;margin-bottom:10px}.rv-items{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:8px}.rv-items a{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:10px;background:var(--cs,var(--bg-2));font-size:0.9rem;font-weight:600;text-decoration:none;border:1.5px solid transparent}.rv-items a:hover{border-color:var(--edge)}.project-grid-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:36px;padding:36px 0 60px;align-items:start}.sec-block{margin-bottom:40px}.psteps{list-style:none;padding:0;margin:0}.pstep{display:flex;gap:16px;margin-bottom:18px}.pstep-num{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;background:var(--ink);color:var(--bg);font:800 1rem var(--font-display);flex:none}.pstep-body{flex:1;min-width:0;padding:18px 20px;border-radius:var(--r-lg);background:var(--surface);border:1.5px solid var(--line)}.pstep-body h3{font-size:1.15rem}.pstep-check{display:inline-flex;align-items:center;gap:8px;margin-top:12px;font-size:0.88rem;font-weight:700;color:var(--muted);cursor:pointer}.pstep-check input{width:18px;height:18px;accent-color:var(--brand)}.pstep.is-done .pstep-num{background:var(--ok)}.pstep.is-done .pstep-body{border-color:var(--ok)}.reveal summary{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px;border:2px solid var(--edge);background:var(--surface);font-weight:700;cursor:pointer;list-style:none;box-shadow:var(--shadow);margin-bottom:14px}.reveal summary::-webkit-details-marker{display:none}.project-side{position:sticky;top:calc(var(--header-h) + var(--strip-h) + 20px);display:grid;gap:16px}.side-card{padding:18px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.side-h{font-weight:800;margin-bottom:10px}.side-links{list-style:none;padding:0;margin:0;display:grid;gap:4px}.side-links a{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;text-decoration:none;font-size:0.92rem;font-weight:600;color:var(--ink-2)}.side-links a:hover{background:var(--bg-2);color:var(--ink)}.page-playground .site-footer{margin-top:0}.pg{display:flex;flex-direction:column}.pg-top{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;width:min(1600px,100% - 32px);margin:16px auto 10px}.pg-title h1{font-size:clamp(1.3rem,2.4vw,1.7rem);margin:6px 0 0}.pg-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;width:min(1600px,100% - 32px);margin:0 auto 10px;padding:8px 10px;border-radius:14px;background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.pg-group{display:flex;align-items:center;gap:6px}.pg-right{margin-left:auto}.toggle{display:inline-flex;align-items:center;gap:6px;font-size:0.84rem;font-weight:700;cursor:pointer}.toggle input{accent-color:var(--brand);width:16px;height:16px}.pg-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;width:min(1600px,100% - 32px);margin:0 auto;height:calc(100vh - var(--header-h) - var(--strip-h) - 150px);min-height:520px}.pg-editors{display:flex;flex-direction:column;border:2px solid var(--edge);border-radius:18px;overflow:hidden;background:var(--code-bg);box-shadow:var(--shadow);min-height:0}.pg-tabs{display:none;gap:2px;padding:6px;background:var(--code-bg-2);border-bottom:1px solid var(--code-line)}.pg-panes{flex:1;display:grid;grid-template-rows:1fr 1fr 1fr;min-height:0}.pg-pane{position:relative;display:flex;flex-direction:column;min-height:0;border-bottom:1px solid var(--code-line)}.pg-pane:last-child{border-bottom:0}.pg-pane-label{position:absolute;right:12px;top:8px;z-index:3;font:700 0.68rem var(--font-mono);color:var(--code-muted);text-transform:uppercase;letter-spacing:0.08em;padding:2px 8px;border-radius:6px;background:var(--code-bg-2);pointer-events:none}.pg-pane .ed{flex:1;max-height:none;height:100%}.pg-pane>.code{flex:1}.pg-output{display:grid;grid-template-rows:1fr auto;gap:12px;min-height:0}.pg-preview-wrap{border:2px solid var(--edge);border-radius:18px;overflow:hidden;background:repeating-conic-gradient(var(--bg-2) 0 25%,var(--surface) 0 50%) 0 0/20px 20px;box-shadow:var(--shadow);display:flex;justify-content:center;min-height:0}.pg-preview-frame{width:100%;height:100%;transition:width 0.3s var(--ease);background:#fff}.pg-preview-frame.is-device{border-left:2px solid var(--edge);border-right:2px solid var(--edge)}.pg-preview-frame iframe{width:100%;height:100%;border:0;background:#fff}.pg-console{border:2px solid var(--edge);border-radius:18px;overflow:hidden;background:var(--surface);box-shadow:var(--shadow)}.pg-console .out-console{height:150px;max-height:none}.pg-err-count{margin-left:auto;margin-right:8px;color:var(--danger);text-transform:none;letter-spacing:0}.pg[data-editor-theme='light'] .pg-editors,.pg[data-editor-theme='light'] .ed,.pg[data-editor-theme='light'] .ed-gutter{background:#fdfcf9}.pg[data-editor-theme='light'] .ed-area .ed-hl{color:#24262e}.pg[data-editor-theme='light'] .ed-area textarea{caret-color:#15161b}.pg[data-editor-theme='light'] .ed-gutter{color:#b0ada4;border-color:#ece7dc}.pg[data-editor-theme='light'] .pg-pane{border-color:#ece7dc}.pg[data-editor-theme='light'] .pg-pane-label,.pg[data-editor-theme='light'] .pg-tabs{background:#f3efe6}.pg[data-editor-theme='light'] .t-tag{color:#d8401a}.pg[data-editor-theme='light'] .t-attr{color:#a15c00}.pg[data-editor-theme='light'] .t-string{color:#0d8048}.pg[data-editor-theme='light'] .t-keyword,.pg[data-editor-theme='light'] .t-pseudo{color:#7a3ff2}.pg[data-editor-theme='light'] .t-prop,.pg[data-editor-theme='light'] .t-op{color:#0b6bcb}.pg[data-editor-theme='light'] .t-fn,.pg[data-editor-theme='light'] .t-method{color:#2f54eb}.pg[data-editor-theme='light'] .t-number,.pg[data-editor-theme='light'] .t-literal{color:#c2410c}.pg[data-editor-theme='light'] .t-punct{color:#7a7f8c}.pg[data-editor-theme='light'] .t-value{color:#24262e}.pg.is-fullscreen{position:fixed;inset:0;z-index:90;background:var(--bg);padding-top:12px;overflow:auto}.pg.is-fullscreen .pg-top,.pg.is-fullscreen .pg-about{display:none}.pg.is-fullscreen .pg-body{height:calc(100vh - 90px)}.pg-about{padding-top:40px}.kbd-list{list-style:none;padding:0;margin:0 0 12px;display:grid;gap:8px}.kbd-list li{display:flex;align-items:center;gap:4px}.kbd-list span{margin-left:auto;color:var(--muted);font-size:0.9rem}.toast{position:fixed;left:50%;bottom:24px;z-index:300;transform:translateX(-50%) translateY(20px);opacity:0;padding:12px 18px;border-radius:14px;background:var(--ink);color:var(--bg);font-weight:700;font-size:0.92rem;box-shadow:var(--shadow-lg);transition:0.25s var(--ease);pointer-events:none}.toast.is-on{opacity:1;transform:translateX(-50%)}.daily-date{font-weight:700;color:var(--html)}.daily-step{display:flex;gap:18px;margin-bottom:30px}.ds-n{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:var(--html);color:#fff;font:800 1.1rem var(--font-display);border:2px solid var(--edge);box-shadow:2px 2px 0 var(--hard);flex:none}.ds-body{flex:1;min-width:0}.page-prose{max-width:72ch}.page-prose h3{font-size:1.4rem;margin-top:1.6em}.contact-form{display:grid;gap:14px;margin-top:30px;padding:26px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--edge);box-shadow:var(--shadow)}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}.contact-form label{display:grid;gap:6px;font-weight:700;font-size:0.9rem}.contact-form input,.contact-form select,.contact-form textarea{padding:11px 13px;border-radius:11px;border:1.5px solid var(--line);background:var(--surface-2);font-weight:500;outline:none}.contact-form input:focus,.contact-form select:focus,.contact-form textarea:focus{border-color:var(--edge);box-shadow:0 0 0 3px var(--brand-soft)}.contact-form .btn{justify-self:start}.form-sent{padding:12px 14px;border-radius:12px;background:var(--ok-soft);color:var(--ok);font-weight:700}.nf{padding:50px 0 20px}.nf-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:40px;align-items:center}.nf h1{font-size:clamp(2.4rem,5vw,4rem);margin:16px 0 10px}.nf-console{font:0.92rem/1.7 var(--font-mono);padding:16px 18px;border-radius:14px;background:var(--code-bg);color:var(--code-text);border:2px solid var(--edge);box-shadow:var(--shadow);margin:10px 0 6px;word-break:break-all}.nf-err{color:#ff6b6f;font-weight:700}.nf-console .muted{color:var(--code-muted)}.nf-art{display:grid;place-items:center}.nf-404{display:inline-flex;align-items:center;font:800 clamp(7rem,16vw,12rem)/1 var(--font-display);letter-spacing:-0.06em;color:var(--ink);text-shadow:6px 6px 0 var(--brand-soft)}.site-footer{--f-bg:#111318;--f-line:rgba(255,255,255,0.1);--f-head:#ffffff;--f-text:rgba(236,234,228,0.72);--f-dim:rgba(236,234,228,0.55);--f-hover:#ffffff;margin-top:70px;background:var(--f-bg);color:var(--f-text);border-top:1px solid var(--f-line)}:root[data-theme='dark'] .site-footer{--f-bg:#090a0d}@media (prefers-color-scheme:dark){:root:not([data-theme='light']) .site-footer{--f-bg:#090a0d}}.footer-inner{display:grid;grid-template-columns:1.5fr repeat(4,1fr);gap:34px;width:min(1220px,100% - 32px);margin-inline:auto;padding:56px 0 36px}.footer-brand .logo-text{color:var(--f-head)}.footer-brand .logo-text span{color:#2bd17f}.footer-brand p{color:var(--f-text);font-size:0.94rem;margin:14px 0 18px;max-width:320px}.site-footer .lm-bg{fill:#f2efe8}.site-footer .lm-c{stroke:#111318}.site-footer .lm-cur{stroke:#17a865}.footer-h{font-weight:700;font-size:0.78rem;text-transform:uppercase;letter-spacing:0.1em;color:var(--f-head);margin-bottom:14px}.footer-col a{display:block;padding:4px 0;font-size:0.92rem;text-decoration:none;color:var(--f-text);transition:color 0.15s}.footer-col a:hover{color:var(--f-hover)}.footer-bottom{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;width:min(1220px,100% - 32px);margin-inline:auto;padding:18px 0 26px;border-top:1px solid var(--f-line);font-size:0.86rem;color:var(--f-dim)}.footer-bottom p{margin:0}.footer-bottom nav{display:flex;flex-wrap:wrap;gap:8px 18px}.footer-bottom a{text-decoration:none;color:var(--f-dim)}.footer-bottom a:hover{color:var(--f-hover)}.site-footer .btn{background:#17a865;color:#fff;border-color:#17a865;box-shadow:none}.site-footer .btn:hover{background:#1bbd72;transform:none;box-shadow:none}.site-footer :focus-visible{outline-color:#2bd17f}@media (max-width:1280px){.course-shell{grid-template-columns:260px minmax(0,1fr);gap:32px}.toc{display:none}.search-trigger{min-width:0}.search-trigger kbd{display:none}}@media (max-width:1080px){.main-nav,.header-cta{display:none}.menu-toggle{display:inline-grid}.hero-grid,.ch-grid,.two-col,.paths-teaser,.daily-card,.nf-grid{grid-template-columns:1fr}.hero-visual{min-height:380px;max-width:560px}.loop-grid{grid-template-columns:repeat(2,1fr)}.bento{grid-template-columns:repeat(2,1fr)}.footer-inner{grid-template-columns:1fr 1fr}.footer-brand{grid-column:1 / -1}.project-grid-layout{grid-template-columns:1fr}.project-side{position:static}.pg-body{grid-template-columns:1fr;height:auto}.pg-editors{height:560px}.pg-output{grid-template-rows:460px auto}}@media (max-width:900px){.course-shell{grid-template-columns:minmax(0,1fr)}.sidebar{position:fixed;inset:0 auto 0 0;z-index:70;width:min(320px,86vw);height:100%;padding:18px 14px 40px;background:var(--surface);border-right:2px solid var(--edge);transform:translateX(-105%);transition:transform 0.25s var(--ease)}.sidebar.is-open{transform:none;box-shadow:20px 0 60px rgba(0,0,0,0.25)}.sb-close{display:inline-grid}.chapters-btn{display:inline-flex;flex:none}.scrim{position:fixed;inset:0;z-index:65;background:rgba(14,16,20,0.4);animation:fadeIn 0.2s}.stat-strip{grid-template-columns:repeat(3,1fr)}.stat-strip div:nth-child(3){border-right:0}.stat-strip div:nth-child(n + 4){border-top:1.5px dashed var(--line)}.quiz-tips{grid-template-columns:1fr}}@media (max-width:680px){:root{--header-h:58px}body{font-size:16px}.search-trigger{width:40px;padding:0;justify-content:center}.search-trigger span{display:none}.logo-text{font-size:1.12rem}.logo-mark{width:32px;height:32px}.hero{padding-top:32px}.hero-visual{min-height:320px}.hv-editor{width:92%}.hv-preview{width:70%}.window pre{font-size:0.8rem;padding:14px}.hero-search{padding-left:12px}.hero-search .btn{padding:0.6em 0.9em}.stat-strip{grid-template-columns:1fr 1fr}.stat-strip div{border-right:0 !important;border-top:1.5px dashed var(--line)}.stat-strip div:first-child,.stat-strip div:nth-child(2){border-top:0}.stat-strip div:nth-child(odd){border-right:1.5px dashed var(--line) !important}.stat-strip div:last-child{grid-column:1 / -1;border-right:0 !important}.loop-grid,.bento{grid-template-columns:1fr}.b-play{grid-column:auto;grid-row:auto}.sec{padding:40px 0}.lesson-hero{padding:22px 18px}.lesson-top .crumbs{min-width:0;overflow:hidden}.crumbs ol{flex-wrap:nowrap;white-space:nowrap;overflow-x:auto;scrollbar-width:none}.mistake-grid{grid-template-columns:1fr}.pager{grid-template-columns:1fr}.runner-tab{padding:7px 9px}.runner-actions .ra[data-act='copy']{display:none}.out-hint{display:none}.ex{padding:16px}.daily-card,.paths-teaser{padding:22px}.challenge{padding:16px}.filter-bar{position:static}.scoreboard{margin-left:0}.cheat-grid{columns:1}.form-row{grid-template-columns:1fr}.footer-inner{grid-template-columns:1fr 1fr;gap:24px}.ch-stats{grid-template-columns:repeat(2,auto)}.pg-tabs{display:flex}.pg-panes{grid-template-rows:1fr}.pg-pane:not(.is-active){display:none}.pg-pane-label{display:none}.pg-editors{height:420px}.pg-output{grid-template-rows:380px auto}.pg-right{margin-left:0}.pg-devices{display:none}.rv-step{gap:12px}.roadmap-v::before{left:21px}.daily-step{flex-direction:column;gap:10px}}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none !important;transition:none !important;scroll-behavior:auto !important}}@media print{.site-header,.site-footer,.sidebar,.toc,.no-print,.chapters-btn,.search-dialog,.related,.pager{display:none !important}body{background:#fff;color:#000;font-size:11pt}.course-shell{display:block;width:100%}.lesson-hero,.cheat-card{box-shadow:none;border:1px solid #999;background:#fff}.cheat-grid{columns:2}.code,.code-block,.code-block pre{background:#f6f6f6 !important;color:#000 !important;border-color:#ccc}.t-tag,.t-attr,.t-string,.t-keyword,.t-prop,.t-fn,.t-number{color:#000 !important}}.runner,.predict-out{position:relative}.pg-panes{grid-template-columns:minmax(0,1fr)}.pg-pane{min-width:0;overflow:hidden}code,kbd,pre,textarea,.code,.blank{font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0}@media (min-width:1281px){.course-shell>main:last-child{grid-column:2 / -1;max-width:1040px}}:root:not([data-theme='dark']) body:not(.page-home){--bg:#f8fafc;--bg-2:#f1f4f8;--surface:#ffffff;--surface-2:#f8fafc;--ink:#0f172a;--ink-2:#334155;--muted:#64748b;--line:#e2e8f0;--edge:#cbd5e1;--hard:rgba(15,23,42,0.08);--brand:#0f8a5a;--brand-2:#0b6b46;--brand-soft:#e3f4ec;--sun:#f5c542;--sun-soft:#fdf6e3;--html:#e2512b;--html-soft:#fdeee8;--css:#2f5bea;--css-soft:#eaf0fe;--js:#d9a300;--js-soft:#fcf5dc;--violet:#6750e8;--violet-soft:#f0edfd;--ok:#0f8a5a;--ok-soft:#e3f4ec;--danger:#d33f49;--danger-soft:#fdecee;--shadow:0 1px 2px rgba(15,23,42,0.06),0 1px 3px rgba(15,23,42,0.05);--shadow-lg:0 4px 12px -2px rgba(15,23,42,0.08),0 2px 4px rgba(15,23,42,0.04);--font-display:'Figtree',system-ui,-apple-system,'Segoe UI',sans-serif}body:not(.page-home) h1,body:not(.page-home) h2,body:not(.page-home) h3,body:not(.page-home) h4{font-weight:700;letter-spacing:-0.015em}body:not(.page-home) .btn,body:not(.page-home) .btn-ghost{border-width:1px}body:not(.page-home) .btn:hover,body:not(.page-home) .btn-ghost:hover,body:not(.page-home) .pager-link:hover{transform:none;box-shadow:var(--shadow-lg)}body:not(.page-home) .btn:active{transform:none}:root:not([data-theme='dark']) body:not(.page-home) ::selection{background:#cfe8dc}.page-lesson .lesson-body{font-size:1.04rem}.page-lesson .prose{max-width:72ch}.page-lesson .pager-link{border-width:1px}.page-lesson .pager-link.next{background:var(--surface);color:var(--ink)}.page-lesson .pager-link.next strong{color:var(--c,var(--brand))}.page-lesson .challenge{background:var(--surface);border-width:1px;padding:22px}.page-lesson .challenge h3{font-size:1.2rem}.page-lesson .realworld{background:var(--surface)}.page-lesson .callout{border-left:4px solid var(--co)}.page-lesson .toc{font-size:0.85rem}.page-lesson .toc a{font-weight:500;padding:4px 12px}.mistake{padding:22px;border-radius:16px}.mistake h3{margin-bottom:14px}.mistake-grid{align-items:stretch;margin-bottom:14px}.mistake-col{display:flex;flex-direction:column}.mistake-col .code-static{flex:1;height:auto;margin:0}.mistake-col .code-static code{white-space:pre-wrap;overflow-wrap:anywhere}.mistake-label{display:inline-flex;align-self:flex-start;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:0.7rem;letter-spacing:0.08em;margin-bottom:8px}.is-wrong .mistake-label{background:var(--danger-soft)}.is-right .mistake-label{background:var(--ok-soft)}.mistake>.prose{margin-top:2px}.mistake>.prose>:last-child{margin-bottom:0}.page-lesson .pager{gap:16px}.page-lesson .pager-link{flex-direction:row;align-items:center;gap:14px;padding:16px 18px;border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(15,23,42,0.04);transition:border-color 0.18s,box-shadow 0.18s,transform 0.18s}.page-lesson .pager-link.next{justify-content:flex-end;text-align:right;background:var(--surface);color:var(--ink)}.page-lesson .pager-link:hover{border-color:color-mix(in srgb,var(--c,var(--brand)) 55%,var(--line));box-shadow:0 10px 24px -14px color-mix(in srgb,var(--c,var(--brand)) 70%,transparent);transform:translateY(-1px)}.pager-txt{display:flex;flex-direction:column;gap:2px;min-width:0}.page-lesson .pager-dir{font-size:0.72rem;letter-spacing:0.08em;color:var(--muted);opacity:1}.page-lesson .pager-link strong,.page-lesson .pager-link.next strong{font:650 1.05rem/1.3 var(--font-body);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pager-ico{display:grid;place-items:center;flex:none;width:38px;height:38px;border-radius:50%;background:var(--bg-2);color:var(--ink-2);transition:background 0.18s,color 0.18s,transform 0.18s}.pager-ico svg{width:18px;height:18px}.pager-link.next .pager-ico{background:var(--c,var(--brand));color:var(--ci,#fff)}.pager-link.prev:hover .pager-ico{transform:translateX(-3px)}.pager-link.next:hover .pager-ico{transform:translateX(3px)}.page-lesson .pager-top{margin:0 0 32px}.page-lesson .pager-top .pager-link{padding:10px 12px;border-radius:12px}.page-lesson .pager-top .pager-ico{width:32px;height:32px}.page-lesson .pager-top .pager-link strong{font-size:0.95rem}.outcome-card{position:relative;overflow:hidden;padding:30px;border-radius:20px;border:1px solid var(--line);background:radial-gradient(120% 70% at 100% 0%,color-mix(in srgb,var(--c,var(--brand)) 13%,transparent),transparent 60%),var(--surface);box-shadow:0 1px 2px rgba(15,23,42,0.04),0 20px 40px -28px rgba(15,23,42,0.35)}.outcome-card::after{content:'';position:absolute;right:-24px;top:-24px;width:170px;height:170px;opacity:0.5;pointer-events:none;background-image:radial-gradient(color-mix(in srgb,var(--c,var(--brand)) 45%,transparent) 1.4px,transparent 1.5px);background-size:14px 14px;-webkit-mask-image:radial-gradient(circle at 70% 30%,#000,transparent 70%);mask-image:radial-gradient(circle at 70% 30%,#000,transparent 70%)}.outcome-card>*{position:relative;z-index:1}.oc-head{display:flex;align-items:center;gap:14px;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--line)}.oc-head h2{margin:0 0 2px;font-size:1.3rem}.oc-head p{margin:0;font-size:0.88rem;color:var(--muted)}.oc-ico{display:grid;place-items:center;flex:none;width:46px;height:46px;border-radius:14px;color:var(--ci,#fff);background:linear-gradient(145deg,color-mix(in srgb,var(--c,var(--brand)) 80%,#fff),var(--c,var(--brand)));box-shadow:0 8px 18px -8px var(--c,var(--brand)),inset 0 1px 0 rgba(255,255,255,0.35)}.oc-ico svg{width:22px;height:22px}.outcome-card .check-list ul{gap:4px}.outcome-card .check-list li{padding:9px 10px 9px 44px;border-radius:10px;line-height:1.45;color:var(--ink);transition:background 0.15s}.outcome-card .check-list li:hover{background:color-mix(in srgb,var(--c,var(--brand)) 7%,transparent)}.outcome-card .check-list li::before{left:10px;top:9px;width:24px;height:24px;border-radius:50%;background:color-mix(in srgb,var(--c,var(--brand)) 16%,transparent)}.outcome-card .check-list li::after{content:'';position:absolute;left:16px;top:15px;width:12px;height:12px;background:var(--c,var(--brand));-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 12.5 5 5L20 6.5'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 12.5 5 5L20 6.5'/%3E%3C/svg%3E") center / contain no-repeat}.oc-foot{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.oc-foot span{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;background:var(--bg-2);font-size:0.82rem;color:var(--ink-2)}.oc-foot b{color:var(--ink)}.oc-foot svg{width:15px;height:15px;color:var(--c,var(--brand))}.project-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:22px}.project-card{padding:0;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--surface);box-shadow:0 1px 2px rgba(15,23,42,0.05);transition:transform 0.22s var(--ease),box-shadow 0.22s var(--ease),border-color 0.22s}.project-card:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--brand) 35%,var(--line));box-shadow:0 22px 40px -22px rgba(15,23,42,0.45)}.pc-art{aspect-ratio:320 / 150;overflow:hidden;border-bottom:1px solid var(--line)}.pc-art svg{width:100%;height:100%;display:block;stroke:none;stroke-width:1;fill:none;transition:transform 0.5s var(--ease)}.project-card:hover .pc-art svg{transform:scale(1.04)}.pc-body{display:flex;flex-direction:column;flex:1;padding:18px 20px 20px}.pc-top{margin-bottom:10px}.pc-time{display:inline-flex;align-items:center;gap:5px}.pc-time svg{width:14px;height:14px}.project-card h3{font-size:1.15rem;margin:0 0 6px}.project-card p{flex:1 0 auto;margin:0 0 16px;font-size:0.92rem;line-height:1.55;color:var(--ink-2)}.pc-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:14px;border-top:1px solid var(--line)}.pc-tech{flex-wrap:wrap}.pc-go{display:grid;place-items:center;flex:none;width:32px;height:32px;border-radius:50%;font-size:0;color:var(--ink-2);background:var(--bg-2);transition:background 0.2s,color 0.2s,transform 0.2s}.project-card:hover .pc-go{background:var(--brand);color:#fff}.pc-tech{flex-wrap:nowrap}.pc-go svg{width:16px;height:16px;display:block;transition:transform 0.2s}.project-card:hover .pc-go{transform:scale(1.06)}.lang-tag{border-radius:999px;padding:2px 9px;font-family:var(--font-body);font-weight:700;letter-spacing:0.01em}.lvl{font-size:0.7rem;padding:3px 10px;letter-spacing:0.02em}body:not(.page-home) .course-card{border:1px solid var(--line);border-radius:18px;padding:26px;box-shadow:0 1px 2px rgba(15,23,42,0.05);transition:transform 0.22s var(--ease),box-shadow 0.22s var(--ease),border-color 0.22s}body:not(.page-home) .course-card::before{right:auto;left:0;top:0;width:100%;height:4px;border-radius:0;background:var(--c);transform:none}body:not(.page-home) .course-card:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--c) 45%,var(--line));box-shadow:0 22px 40px -22px rgba(15,23,42,0.45)}body:not(.page-home) .course-card:hover::before{transform:none}body:not(.page-home) .cc-badge{width:50px;height:50px;border-radius:14px;border:0;box-shadow:0 8px 18px -8px var(--c),inset 0 1px 0 rgba(255,255,255,0.3);background:linear-gradient(145deg,color-mix(in srgb,var(--c) 78%,#fff),var(--c))}body:not(.page-home) .course-card h3{font-size:1.35rem}body:not(.page-home) .cc-meta span{background:color-mix(in srgb,var(--c) 9%,var(--bg-2))}body:not(.page-home) .cc-go{color:var(--c);filter:saturate(1.1) brightness(0.85)}body:not(.page-home) .mode-card{border:1px solid var(--line);border-radius:18px;padding:24px;box-shadow:0 1px 2px rgba(15,23,42,0.05);transition:transform 0.22s var(--ease),box-shadow 0.22s var(--ease),border-color 0.22s}body:not(.page-home) a.mode-card:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--c,var(--brand)) 45%,var(--line));box-shadow:0 22px 40px -22px rgba(15,23,42,0.45)}body:not(.page-home) .mode-ico{width:48px;height:48px;border-radius:14px;border:0;color:var(--c,var(--brand));background:color-mix(in srgb,var(--c,var(--brand)) 13%,var(--surface));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c,var(--brand)) 22%,transparent)}body:not(.page-home) .mode-card h3{font-size:1.15rem;margin-top:14px}body:not(.page-home) .mode-card p{font-size:0.92rem;line-height:1.55}body:not(.page-home) .mode-card .link-arrow{margin-top:10px;padding-top:12px;width:100%;border-top:1px solid var(--line);font-size:0.86rem}body:not(.page-home) .topic-card{border-radius:14px;border-color:var(--line);padding:14px 16px;transition:transform 0.2s var(--ease),box-shadow 0.2s var(--ease),border-color 0.2s}body:not(.page-home) .topic-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--c) 45%,var(--line));box-shadow:0 14px 28px -20px rgba(15,23,42,0.45)}body:not(.page-home) .tc-num{border-radius:12px;color:var(--c);background:color-mix(in srgb,var(--c) 13%,var(--surface));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 22%,transparent);filter:saturate(1.1) brightness(0.9)}@media (max-width:700px){.page-lesson .pager-top .pager-txt .pager-dir{display:none}.outcome-card{padding:22px}}.ex-type svg{width:15px;height:15px;stroke-width:2.2}.mistake-label svg{width:13px;height:13px;stroke-width:3}.btn-ghost.sm svg,.btn.sm svg{width:15px;height:15px}.ex-feedback .ico,.qz-streak .ico,.rv-line .ico,.qz-timer .ico{display:inline-block;width:1.1em;height:1.1em;vertical-align:-0.2em;margin-right:6px;stroke-width:2.4}.qz-timer .ico{margin-right:2px}.qz-streak .ico{color:var(--html)}.qz-next svg,.btn .ico{width:1em;height:1em}.rv-line{margin:0 0 4px}.rv-line.is-ok .ico{color:var(--ok)}.rv-line.is-no .ico{color:var(--danger)}.qz-review-item .link-arrow{font-size:0.85rem}.lesson-sec,.ex-group,.related,.keep-going,.site-footer,.rm-stage,.cheat-card{content-visibility:auto;contain-intrinsic-size:auto 600px}.ex-group{contain-intrinsic-size:auto 1600px}.site-footer{contain-intrinsic-size:auto 420px}.course-grid{grid-template-columns:repeat(auto-fill,minmax(min(290px,100%),1fr))}.related-grid{grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr))}.project-grid{grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr))}.mode-grid{grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr))}.roadmap{grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr))}.tut-cols{grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr))}.kg-grid{grid-template-columns:repeat(auto-fill,minmax(min(220px,100%),1fr))}.ch-grid>*,.two-col>*,.hero-grid>*,.project-grid-layout>*,.nf-grid>*{min-width:0}@media (max-width:1080px){.hero-grid,.ch-grid,.two-col,.paths-teaser,.daily-card,.nf-grid{grid-template-columns:minmax(0,1fr)}.project-grid-layout{grid-template-columns:minmax(0,1fr)}.course-hero{padding-bottom:36px}.ch-visual{max-width:560px}.project-side{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr))}}@media (max-width:900px){.site-header{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--bg)}.lesson{padding-top:16px}.footer-inner{gap:28px 24px;padding-top:44px}}@media (max-width:680px){.lesson-hero{padding:4px 0 18px;margin-bottom:18px}.lesson-hero h1{font-size:1.85rem}.lesson-lead{font-size:1.04rem}.lesson-sec{margin-top:36px}.lesson-top{margin-bottom:12px}.chapters-btn{padding:6px 10px}.pager.pager-top{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:24px}.page-lesson .pager-top .pager-link{padding:8px 10px;gap:8px}.page-lesson .pager-top .pager-ico{width:28px;height:28px}.page-lesson .pager-top .pager-link strong{font-size:0.86rem}.filter-bar{gap:10px;padding:12px;border-radius:14px}.filter-bar .select{width:100%}.filter-bar .select select{flex:1;max-width:none}.filter-bar .chips{flex-wrap:nowrap;overflow-x:auto;width:100%;scrollbar-width:none;margin-inline:-12px;padding-inline:12px;width:calc(100% + 24px)}.filter-bar .chips::-webkit-scrollbar{display:none}.filter-bar .chip{flex:none}.scoreboard{margin-left:0;padding:4px 12px}.ex-group-head h2{font-size:1.2rem}.ex-topic{margin-left:0}.ex-head{gap:6px}.course-hero{padding:24px 0 32px}.ch-visual{display:none}.ch-stats{gap:10px 24px}.hub-hero{padding:28px 0 30px}.hub-lead{font-size:1.04rem}.sec-head{margin-bottom:20px}.quiz-setup,.quiz-card{padding:18px;border-radius:18px}.qs-row{gap:8px;align-items:flex-start;flex-direction:column}.qs-label{min-width:0}.qz-q{font-size:1.08rem}.path-head{gap:14px}.path-mark{width:52px;height:52px;border-radius:15px}.path-mark svg{width:30px;height:30px}.rv-card{padding:16px}.kg-card{padding:14px}.keep-going{margin-top:40px;padding-top:26px}.callout{padding:16px 16px 16px 56px}.callout::before{left:14px;top:14px}.callout::after{left:20px;top:20px}.runner{border-radius:14px}.runner-bar{padding:5px}.btn-run{padding:0 11px}.out-preview iframe{height:200px}.cta-split{padding:20px}.cta-split .btn,.cta-split .btn-ghost{flex:1 1 auto}.contact-form{padding:18px}.project-grid-layout{padding-top:24px;gap:24px}.pstep{gap:10px}.pstep-num{width:32px;height:32px;border-radius:10px;font-size:0.9rem}.pstep-body{padding:14px 16px}.tut-col{padding:16px}.side-card{padding:16px}.footer-inner{grid-template-columns:1fr 1fr;gap:26px 18px;padding:40px 0 28px}.footer-bottom{flex-direction:column;gap:10px}}@media (max-width:380px){.header-tools{gap:6px}.icon-btn,.search-trigger{width:36px;height:36px}.logo-text{font-size:1.02rem}.footer-inner{grid-template-columns:1fr}.btn-lg{padding:0.85em 1.1em;font-size:0.96rem}}.course-hero .crumbs,.hub-hero .crumbs{margin-bottom:14px}@media (max-width:680px){.pp-group{grid-template-columns:1fr;gap:10px}.pp-label{padding-top:0}}.page-lesson .pager-link{border:1px solid color-mix(in srgb,var(--c,var(--brand)) 22%,var(--line));border-radius:16px;box-shadow:none}.page-lesson .pager-link.prev{background:color-mix(in srgb,var(--c,var(--brand)) 9%,var(--surface));color:var(--ink)}.page-lesson .pager-link.prev .pager-ico{background:var(--surface);color:var(--c,var(--brand));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c,var(--brand)) 25%,transparent)}.page-lesson .pager-link.prev .pager-dir{color:color-mix(in srgb,var(--c,var(--brand)) 70%,var(--ink))}.page-lesson .pager-link.next{background:var(--c,var(--brand));border-color:var(--c,var(--brand));color:var(--ci,#fff);box-shadow:0 10px 22px -14px var(--c,var(--brand))}.page-lesson .pager-link.next strong{color:var(--ci,#fff)}.page-lesson .pager-link.next .pager-dir{color:var(--ci,#fff);opacity:0.8}.page-lesson .pager-link.next .pager-ico{background:color-mix(in srgb,var(--ci,#fff) 20%,transparent);color:var(--ci,#fff)}.page-lesson .pager-link.prev:hover{border-color:color-mix(in srgb,var(--c,var(--brand)) 50%,var(--line));background:color-mix(in srgb,var(--c,var(--brand)) 14%,var(--surface));box-shadow:none;transform:translateY(-1px)}.page-lesson .pager-link.next:hover{filter:brightness(1.06);box-shadow:0 14px 28px -14px var(--c,var(--brand));transform:translateY(-1px)}.page-lesson .pager{display:flex;justify-content:space-between;align-items:center;gap:12px}.page-lesson .pager-link{flex:0 1 auto;max-width:calc(50% - 6px);min-width:0;border-radius:999px;gap:12px}.page-lesson .pager-link.prev{padding:8px 22px 8px 8px}.page-lesson .pager-link.next{padding:8px 8px 8px 22px;margin-left:auto;text-align:left}.page-lesson .pager-link.next .pager-txt{align-items:flex-start}.page-lesson .pager-ico{width:40px;height:40px}.page-lesson .pager-top .pager-link.prev{padding:6px 18px 6px 6px}.page-lesson .pager-top .pager-link.next{padding:6px 6px 6px 18px}@media (max-width:680px){.page-lesson .pager{gap:8px}.page-lesson .pager-link{max-width:calc(50% - 4px)}.page-lesson .pager-link.prev,.page-lesson .pager-top .pager-link.prev{padding:5px 14px 5px 5px}.page-lesson .pager-link.next,.page-lesson .pager-top .pager-link.next{padding:5px 5px 5px 14px}.page-lesson .pager-ico,.page-lesson .pager-top .pager-ico{width:32px;height:32px}.page-lesson .pager-link strong{font-size:0.88rem}}.page-lesson .pager-link,.page-lesson .pager-top .pager-link{border-radius:14px}.page-lesson .pager-link{--pad:7px;--ico:40px;position:relative;isolation:isolate;overflow:hidden;transition:transform 0.25s var(--ease),box-shadow 0.25s var(--ease),border-color 0.25s,color 0.35s}.page-lesson .pager-link>*{position:relative;z-index:1}.page-lesson .pager-link .pager-ico{width:var(--ico);height:var(--ico);overflow:hidden;transition:background 0.35s,color 0.35s,box-shadow 0.35s}.page-lesson .pager-link .pager-dir,.page-lesson .pager-link strong{transition:color 0.35s,opacity 0.35s}.page-lesson .pager-link.prev{padding:var(--pad) 22px var(--pad) var(--pad)}.page-lesson .pager-link.next{padding:var(--pad) var(--pad) var(--pad) 22px}.page-lesson .pager-link::before{content:'';position:absolute;z-index:0;top:50%;width:var(--ico);height:var(--ico);margin-top:calc(var(--ico) / -2);border-radius:50%;transform:scale(0.6);opacity:0;transition:transform 0.55s var(--ease),opacity 0.2s}.page-lesson .pager-link.prev::before{left:var(--pad);background:var(--c,var(--brand))}.page-lesson .pager-link.next::before{right:var(--pad);background:color-mix(in srgb,var(--c,var(--brand)) 72%,#000)}.page-lesson .pager-link:hover::before,.page-lesson .pager-link:focus-visible::before{transform:scale(22);opacity:1}.page-lesson .pager-link.prev{background:var(--surface);border:1.5px solid color-mix(in srgb,var(--c,var(--brand)) 30%,var(--line))}.page-lesson .pager-link.prev .pager-ico{background:var(--c,var(--brand));color:var(--ci,#fff);box-shadow:0 6px 14px -8px var(--c,var(--brand))}.page-lesson .pager-link.prev .pager-dir{color:var(--muted)}.page-lesson .pager-link.prev:hover,.page-lesson .pager-link.prev:focus-visible{background:var(--surface);border-color:var(--c,var(--brand));color:var(--ci,#fff);transform:translateY(-2px);box-shadow:0 16px 30px -18px var(--c,var(--brand))}.page-lesson .pager-link.prev:hover strong,.page-lesson .pager-link.prev:focus-visible strong{color:var(--ci,#fff)}.page-lesson .pager-link.prev:hover .pager-dir,.page-lesson .pager-link.prev:focus-visible .pager-dir{color:var(--ci,#fff);opacity:0.8}.page-lesson .pager-link.prev:hover .pager-ico,.page-lesson .pager-link.prev:focus-visible .pager-ico{background:color-mix(in srgb,var(--ci,#fff) 22%,transparent);box-shadow:none}.page-lesson .pager-link.next{border:1.5px solid var(--c,var(--brand))}.page-lesson .pager-link.next .pager-ico{background:var(--ci,#fff);color:var(--c,var(--brand))}.page-lesson .pager-link.next::after{content:'';position:absolute;z-index:2;inset:0;pointer-events:none;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,0.35) 50%,transparent 70%);transform:translateX(-120%)}.page-lesson .pager-link.next:hover::after,.page-lesson .pager-link.next:focus-visible::after{transform:translateX(120%);transition:transform 0.75s var(--ease)}.page-lesson .pager-link.next:hover,.page-lesson .pager-link.next:focus-visible{filter:none;transform:translateY(-2px);box-shadow:0 18px 32px -16px var(--c,var(--brand))}.page-lesson .pager-link.next:hover .pager-ico,.page-lesson .pager-link.next:focus-visible .pager-ico{color:color-mix(in srgb,var(--c,var(--brand)) 72%,#000)}:root[data-theme='dark'] .page-lesson .pager-link.next .pager-ico{background:#fff}@keyframes pager-out-right{0%{transform:translateX(0)}45%{transform:translateX(160%)}46%{transform:translateX(-160%)}100%{transform:translateX(0)}}@keyframes pager-out-left{0%{transform:translateX(0)}45%{transform:translateX(-160%)}46%{transform:translateX(160%)}100%{transform:translateX(0)}}.page-lesson .pager-link.next:hover .pager-ico svg,.page-lesson .pager-link.next:focus-visible .pager-ico svg{animation:pager-out-right 0.55s var(--ease)}.page-lesson .pager-link.prev:hover .pager-ico svg,.page-lesson .pager-link.prev:focus-visible .pager-ico svg{animation:pager-out-left 0.55s var(--ease)}.page-lesson .pager-link.prev:hover .pager-ico,.page-lesson .pager-link.next:hover .pager-ico{transform:none}.page-lesson .pager-link:active{transform:translateY(0) scale(0.98)}.page-lesson .pager-top .pager-link{--pad:5px;--ico:34px}.page-lesson .pager-top .pager-link.prev{padding:var(--pad) 18px var(--pad) var(--pad)}.page-lesson .pager-top .pager-link.next{padding:var(--pad) var(--pad) var(--pad) 18px}@media (max-width:680px){.page-lesson .pager-link,.page-lesson .pager-top .pager-link{--pad:5px;--ico:32px}.page-lesson .pager-link.prev,.page-lesson .pager-top .pager-link.prev{padding:var(--pad) 14px var(--pad) var(--pad)}.page-lesson .pager-link.next,.page-lesson .pager-top .pager-link.next{padding:var(--pad) var(--pad) var(--pad) 14px}}.page-lesson .pager{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:18px;padding:8px;border-radius:20px;background:color-mix(in srgb,var(--c,var(--brand)) 5%,var(--surface));border:1px solid color-mix(in srgb,var(--c,var(--brand)) 16%,var(--line));box-shadow:0 1px 2px rgba(15,23,42,0.04)}.page-lesson .pager-link{max-width:280px}.page-lesson .pager-link.next{margin-left:0}.pager-mid{display:flex;flex-direction:column;align-items:center;gap:9px;min-width:0}.pm-label{font-size:0.78rem;color:var(--muted);letter-spacing:0.02em;white-space:nowrap}.pm-label b{color:var(--c,var(--brand));font-weight:800;filter:saturate(1.1) brightness(0.9)}:root[data-theme='dark'] .pm-label b{filter:none}.pm-track{position:relative;display:flex;justify-content:space-between;align-items:center;width:100%;max-width:420px;height:14px}.pm-track::before,.pm-track::after{content:'';position:absolute;left:4px;top:50%;height:2px;margin-top:-1px;border-radius:2px}.pm-track::before{right:4px;background:var(--line)}.pm-track::after{width:calc((100% - 8px) * var(--p,0));background:var(--c,var(--brand))}.pm-dot{position:relative;z-index:1;flex:none;width:8px;height:8px;border-radius:50%;background:var(--surface);box-shadow:inset 0 0 0 2px var(--line);transition:transform 0.2s var(--ease),box-shadow 0.2s,background 0.2s}.pm-dot.is-done{background:var(--c,var(--brand));box-shadow:none}.pm-dot.is-now{width:22px;height:12px;border-radius:999px;background:var(--c,var(--brand));box-shadow:0 0 0 4px color-mix(in srgb,var(--c,var(--brand)) 22%,transparent);animation:pm-pulse 2.4s ease-in-out infinite}@keyframes pm-pulse{50%{box-shadow:0 0 0 7px color-mix(in srgb,var(--c,var(--brand)) 10%,transparent)}}.pm-dot:hover{transform:scale(1.6);box-shadow:inset 0 0 0 2px var(--c,var(--brand))}.pm-dot.is-done:hover,.pm-dot.is-now:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--c,var(--brand)) 25%,transparent)}.pm-dot.is-now:hover{transform:scale(1.15)}.pm-dot::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%,4px) scale(0.625);transform-origin:50% 100%;padding:5px 9px;border-radius:8px;background:var(--ink);color:var(--bg);font:600 0.75rem/1.2 var(--font-body);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 0.15s,transform 0.15s}.pm-dot.is-now::after{transform:translate(-50%,4px) scale(0.87)}.pm-dot:hover::after{opacity:1;transform:translate(-50%,0) scale(0.625)}.pm-dot.is-now:hover::after{transform:translate(-50%,0) scale(0.87)}.page-lesson .pager-top{margin-bottom:30px}.page-lesson .pager-top .pager-mid{gap:6px}@media (max-width:1080px){.page-lesson .pager-link{max-width:230px}}@media (max-width:680px){.page-lesson .pager{grid-template-columns:1fr 1fr;grid-template-areas:'mid mid' 'prev next';gap:10px 8px;padding:10px 6px 6px;border-radius:18px}.page-lesson .pager-link{max-width:none}.page-lesson .pager-link.prev{grid-area:prev}.page-lesson .pager-link.next{grid-area:next}.pager-mid{grid-area:mid;padding:0 8px}.page-lesson .pager-top{padding:6px}.page-lesson .pager-top .pager-mid{display:none}.page-lesson .pager-top{grid-template-areas:'prev next'}}@media (max-width:680px),(hover:none){.pm-dot::after{display:none}}.lang-logo{width:1em;height:1em;fill:currentColor;stroke:none;flex:none}.lang-logo [stroke]{fill:none}.lang-logo-text{font:800 0.8rem/1 var(--font-mono)}.lang-strip a.lang-link{gap:7px}.lang-strip .lang-logo{width:15px;height:15px;color:var(--muted);opacity:0.75;filter:grayscale(1);transition:color 0.2s,opacity 0.2s,filter 0.2s,transform 0.25s var(--ease)}.lang-strip a.lang-link:hover .lang-logo,.lang-strip a.lang-link.is-active .lang-logo,.lang-strip a.lang-link:focus-visible .lang-logo{color:var(--c);opacity:1;filter:none;transform:scale(1.12)}.lang-strip a.lang-link:hover{color:var(--ink)}.lang-strip a.lang-github:hover .lang-logo,.lang-strip a.lang-github.is-active .lang-logo{color:var(--ink)}.cc-badge .lang-logo{width:28px;height:28px}.mega-ico.lang-ico{background:color-mix(in srgb,var(--c) 12%,var(--surface));color:var(--c);border-color:color-mix(in srgb,var(--c) 28%,transparent)}.mega-ico .lang-logo{width:20px;height:20px}.mega-ico.sm .lang-logo{width:15px;height:15px}.sb-course .mega-ico .lang-logo{width:15px;height:15px}.pill-course .lang-logo{width:14px;height:14px;color:var(--c,var(--accent))}.rv-course .lang-logo{width:14px;height:14px;color:var(--c)}.mega-item:hover .mega-ico.lang-ico{background:var(--c);color:var(--ci,#fff)}:root[data-theme='dark'] .mega-ico.lang-ico[style],:root[data-theme='dark'] .lang-ico{color:color-mix(in srgb,var(--c) 70%,#fff)}.mega.mega-tutorials{flex-direction:column;min-width:0;width:max-content;max-width:min(860px,calc(100vw - 40px));padding:14px}.mega-cols{display:grid;grid-template-columns:repeat(3,minmax(220px,1fr));gap:4px 10px}.mega-cols .mega-col{flex:none}.mega-h{margin:2px 10px 6px;font-size:0.7rem;font-weight:800;letter-spacing:0.1em;text-transform:uppercase;color:var(--muted)}.mega-tutorials .mega-item{padding:8px 10px}.mega-tutorials .mega-item small{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.mega-tutorials .mega-all{margin:10px 10px 2px;padding-top:10px;border-top:1px solid var(--line)}.mm-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.mm-grid .mm-link{padding:10px 12px}.more-langs{margin-top:26px;display:flex;align-items:center;flex-wrap:wrap;gap:12px 16px}.more-langs-h{margin:0;font-size:0.8rem;font-weight:800;letter-spacing:0.08em;text-transform:uppercase;color:var(--muted)}.more-langs-row{display:flex;flex-wrap:wrap;gap:10px}.ml-chip{display:inline-flex;align-items:center;gap:9px;padding:9px 16px 9px 12px;border-radius:999px;background:var(--surface);border:2px solid var(--line);font-weight:700;font-size:0.92rem;text-decoration:none;color:var(--ink);transition:border-color 0.2s,transform 0.2s var(--ease),box-shadow 0.2s}.ml-chip .lang-logo{width:18px;height:18px;color:var(--muted);filter:grayscale(1);transition:color 0.2s,filter 0.2s,transform 0.3s var(--ease)}.ml-chip:hover{border-color:var(--c);transform:translateY(-2px);box-shadow:0 10px 20px -14px var(--c)}.ml-chip:hover .lang-logo{color:var(--c);filter:none;transform:rotate(-8deg) scale(1.15)}.tut-group{padding-bottom:10px}.tut-group + .tut-group{padding-top:10px}.tut-group-h{display:flex;align-items:center;gap:12px;margin-bottom:16px}.tut-group-h::after{content:'';flex:1;height:1px;background:var(--line)}.more-link{margin-top:18px}.ch-jump{margin:14px 0 0}.sec.sec-glance{padding:36px 0 0}.glance-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}.glance-card{padding:20px 22px;border-radius:var(--r-lg);background:var(--surface);border:1.5px solid var(--line)}.glance-card h3{font-size:1.05rem;margin:0 0 6px}.glance-card .prose p{margin:0 0 6px;font-size:0.95rem;color:var(--ink-2)}.glance-card .prose p:last-child{margin-bottom:0}@media (max-width:640px){.sec.sec-glance{padding-top:24px}.glance-grid{grid-template-columns:1fr 1fr;gap:10px}.glance-card{padding:14px}.glance-card h3{font-size:0.92rem}.glance-card .prose p{font-size:0.82rem;line-height:1.45}}.lang-dot.lang-python,.lang-dot.lang-py{background:#3776ab}.lang-dot.lang-sql{background:#00758f}.lang-dot.lang-java{background:#b07219}.lang-dot.lang-cpp{background:#00599c}.lang-dot.lang-php{background:#777bb4}.lang-dot.lang-bash,.lang-dot.lang-sh,.lang-dot.lang-git{background:#f05032}.static-ex{border-radius:16px;overflow:hidden;border:1.5px solid #2b2f3a;margin:0 0 14px;background:var(--code-bg)}.static-ex .code-block{margin:0;border:0;border-radius:0}.static-ex .code-block + .code-block{border-top:1px solid var(--code-line)}.static-out{background:var(--surface);border-top:2px solid #2b2f3a}.static-out-pre{margin:0;padding:12px 16px;background:var(--surface);color:var(--ink);font-size:0.88rem;white-space:pre-wrap;word-break:break-word}.static-out-pre code{white-space:pre-wrap}:root[data-theme='dark'] .static-out,:root[data-theme='dark'] .static-out-pre{background:#11141a}[data-path='backend-developer'] .path-mark{background:linear-gradient(145deg,#8f93cf,#5b5fa6);box-shadow:0 12px 24px -12px rgba(91,95,166,0.8),inset 0 1px 0 rgba(255,255,255,0.3)}[data-path-link='backend-developer']{--c:#5b5fa6}.opt{min-width:0}.opt-text{min-width:0;overflow-wrap:anywhere}.mobile-menu{inset:calc(var(--header-h) + var(--strip-h)) 0 0}@media (max-width:1080px){.lang-strip-inner{-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent);padding-right:28px}}.guide-sec{margin:48px 0 10px;padding-top:30px;border-top:1px solid var(--line)}.guide-sec>h2,.lesson-overview>h2{font-size:clamp(1.35rem,2.4vw,1.7rem);margin-bottom:14px}.lesson-overview{margin:44px 0 10px;padding-top:30px;border-top:1px solid var(--line)}.lo-stage + .lo-stage{margin-top:26px}.lo-stage h3{display:flex;align-items:center;gap:10px;font-size:1.1rem;margin:0 0 4px}.lo-stage h3::before{content:'';width:10px;height:10px;border-radius:3px;background:var(--c,var(--brand))}.lo-stage-text{color:var(--muted);font-size:0.92rem;margin:0 0 12px}.lo-list{list-style:none;padding:0;margin:0;display:grid;gap:8px}.lo-list a{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;background:var(--surface);border:1px solid var(--line);text-decoration:none;color:var(--ink);transition:border-color 0.15s,transform 0.15s var(--ease)}.lo-list a:hover{border-color:color-mix(in srgb,var(--c,var(--brand)) 45%,var(--line));transform:translateX(2px)}.lo-body{flex:1;min-width:0}.lo-body strong{display:block;font-size:0.97rem}.lo-body small{display:block;color:var(--muted);font-size:0.86rem;line-height:1.45}.lo-meta{flex:none;font-size:0.78rem;font-weight:700;color:var(--c,var(--brand));background:color-mix(in srgb,var(--c,var(--brand)) 10%,var(--surface));padding:3px 10px;border-radius:999px;filter:saturate(1.1) brightness(0.92)}@media (max-width:680px){.lo-list a{flex-wrap:wrap}.lo-meta{margin-left:36px}}.rm-stage{display:flex;flex-direction:column;content-visibility:visible;contain-intrinsic-size:none}.rm-stage>.rm-list{flex:none}.rm-more{position:relative;margin-top:0;padding-top:12px}.rm-start{margin-top:12px}.rm-more>.rm-list{margin-top:4px}.rm-more[open]{padding-top:0;padding-bottom:calc(var(--rm-toggle-height,calc(1.35rem + 24px)) + 12px)}.rm-more[open]>summary{position:absolute;inset-inline:0;bottom:0}.rm-more summary,.rm-start{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 14px;border-radius:10px;border:2px dashed var(--line);font-weight:700;font-size:0.9rem;line-height:1.5;color:var(--ink);text-decoration:none;cursor:pointer;list-style:none}.rm-more summary{scroll-margin-top:calc(var(--header-h) + var(--strip-h) + 16px);scroll-margin-bottom:20px}.rm-more summary::-webkit-details-marker{display:none}.rm-more summary:hover,.rm-start:hover{background:var(--cs);border-color:var(--c)}.rm-start svg{width:16px;height:16px}.rm-more .rm-hide,.rm-more[open] .rm-show{display:none}.rm-more[open] .rm-hide{display:inline}.lang-dot.lang-kotlin,.lang-dot.lang-kt{background:#7f52ff}.lang-dot.lang-swift{background:#f05138}.lang-dot.lang-csharp,.lang-dot.lang-cs{background:#68217a}.lang-dot.lang-node{background:#5fa04e}.lang-dot.lang-mongodb,.lang-dot.lang-mongosh{background:#47a248}.tut-cols{align-items:stretch}.tut-col{display:flex;flex-direction:column}.tut-body{flex:1}.tut-practice{margin-top:auto;padding-top:12px;border-top:1.5px dashed var(--line)}.tut-practice ul{margin-bottom:0}.tut-more{margin:4px 0 12px}.tut-more summary{display:flex;align-items:center;justify-content:center;gap:8px;padding:9px 14px;border-radius:10px;border:2px dashed var(--line);font-weight:700;font-size:0.9rem;color:var(--ink);cursor:pointer;list-style:none}.tut-more summary::-webkit-details-marker{display:none}.tut-more summary:hover{background:var(--cs);border-color:var(--c)}.tut-more[open] summary{margin-bottom:8px}.tut-more .rm-hide,.tut-more[open] .rm-show{display:none}.tut-more[open] .rm-hide{display:inline}.mega-tutorials .mega-cols{grid-template-columns:repeat(3,minmax(220px,1fr));gap:2px 10px}.pm-dot{flex:0 1 8px;min-width:4px;height:auto;aspect-ratio:1}.pm-dot.is-now{flex:none;height:12px;aspect-ratio:auto}.page-lesson .pager{grid-template-columns:minmax(0,1fr) minmax(110px,1.25fr) minmax(0,1fr)}.page-lesson .pager-link{min-width:0;max-width:100%}.page-lesson .pager-txt{min-width:0}.page-lesson .pager-txt strong{display:block;overflow:hidden;text-overflow:ellipsis}.page-lesson .pager-mid{width:100%;overflow:hidden;gap:6px}.page-lesson .pm-track{display:block;max-width:420px;height:28px;flex:none}.page-lesson .pm-track::before,.page-lesson .pm-track::after{display:none}.page-lesson .pm-slider{display:block;appearance:none;-webkit-appearance:none;width:100%;min-width:0;height:28px;margin:0;padding:0;background:transparent;cursor:grab;touch-action:pan-y}.page-lesson .pm-slider:active{cursor:grabbing}.page-lesson .pm-slider::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:linear-gradient(to right,var(--c) 0%,var(--c) calc(var(--p)*100%),var(--line) calc(var(--p)*100%),var(--line) 100%)}.page-lesson .pm-slider::-moz-range-track{height:4px;border-radius:999px;background:var(--line)}.page-lesson .pm-slider::-moz-range-progress{height:4px;background:var(--c);border-radius:999px}.page-lesson .pm-slider::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:24px;height:14px;border:2px solid var(--bg);border-radius:999px;margin-top:-5px;background:var(--c);box-shadow:0 0 0 2px var(--c)}.page-lesson .pm-slider::-moz-range-thumb{width:20px;height:10px;border:2px solid var(--bg);border-radius:999px;background:var(--c);box-shadow:0 0 0 2px var(--c)}.page-lesson .pm-slider:focus-visible{outline:2px solid var(--c);outline-offset:2px;border-radius:8px}.page-lesson .pm-preview{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--muted);min-height:16px}@media(max-width:680px){.page-lesson .pager{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.page-lesson .pager-top{grid-template-areas:'mid mid' 'prev next'}.page-lesson .pager-top .pager-mid{display:flex}}.path-stack{--ps:26px;--ring:var(--surface);display:inline-flex;align-items:center;flex:none}.ps-tile{position:relative;display:grid;place-items:center;width:var(--ps);height:var(--ps);border-radius:30%;color:var(--lc);background:color-mix(in srgb,var(--lc) 15%,var(--surface));border:1.5px solid color-mix(in srgb,var(--lc) 45%,transparent);box-shadow:0 0 0 2px var(--ring);transition:transform 0.2s var(--ease)}.ps-tile + .ps-tile{margin-left:calc(var(--ps) * -0.28)}.ps-tile:nth-child(1){z-index:3}.ps-tile:nth-child(2){z-index:2}.ps-tile:nth-child(3){z-index:1}.ps-tile .lang-logo,.mode-ico.path-ico .ps-tile .lang-logo,.path-mark .ps-tile .lang-logo{width:60%;height:60%}.path-pick-ico:has(.path-stack),.path-pick.is-on .path-pick-ico:has(.path-stack){width:auto;height:auto;background:none;border-radius:0}.path-pick .path-stack{--ps:22px;--ring:var(--surface)}.path-pick .ps-tile{border:0;border-radius:50%;background:color-mix(in srgb,var(--lc) 13%,var(--surface))}.path-pick.is-on .path-stack{--ring:var(--ink)}.path-pick.is-on .ps-tile{background:color-mix(in srgb,var(--lc) 16%,#fff)}.path-pick:hover .ps-tile + .ps-tile,.mode-card:hover .ps-tile + .ps-tile{transform:translateX(2px)}.path-mark:has(.path-stack){width:auto;min-width:64px;height:auto;padding:0;background:none;box-shadow:none;border-radius:0}.path-mark .path-stack{--ps:58px;--ring:var(--bg)}.path-mark .ps-tile{border-radius:18px;border-width:2px}.mode-ico.path-ico:has(.path-stack){width:auto;min-width:46px;padding:0;background:none;border:0}.mode-ico.path-ico .path-stack{--ps:42px}.mode-ico.path-ico .ps-tile{border-radius:12px}@media (max-width:640px){.path-mark .path-stack{--ps:46px}.path-mark .ps-tile{border-radius:14px}}