@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-semi-condensed-vietnamese-500-normal-DGADhYWF.woff2)format("woff2"),url(/assets/barlow-semi-condensed-vietnamese-500-normal-hJ2t9k9e.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-semi-condensed-latin-ext-500-normal-BXdp1BvY.woff2)format("woff2"),url(/assets/barlow-semi-condensed-latin-ext-500-normal-rZeYuEMb.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-semi-condensed-latin-500-normal-G0uxJNrM.woff2)format("woff2"),url(/assets/barlow-semi-condensed-latin-500-normal-CFOoVYFH.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/barlow-semi-condensed-vietnamese-700-normal-Dm7RZTvf.woff2)format("woff2"),url(/assets/barlow-semi-condensed-vietnamese-700-normal-BvUTSFNY.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/barlow-semi-condensed-latin-ext-700-normal-BhgEo64M.woff2)format("woff2"),url(/assets/barlow-semi-condensed-latin-ext-700-normal-C0vCoZIV.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/barlow-semi-condensed-latin-700-normal-BpqDG8I9.woff2)format("woff2"),url(/assets/barlow-semi-condensed-latin-700-normal-BMyZXq_9.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-vietnamese-400-normal-Dpl4UHAZ.woff2)format("woff2"),url(/assets/barlow-vietnamese-400-normal-BFeobeCK.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-latin-ext-400-normal-HxX4XjxC.woff2)format("woff2"),url(/assets/barlow-latin-ext-400-normal-CvBsJvxq.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/barlow-latin-400-normal-qiz4-Cze.woff2)format("woff2"),url(/assets/barlow-latin-400-normal-fsAxiSwU.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-vietnamese-500-normal-zTViEIzf.woff2)format("woff2"),url(/assets/barlow-vietnamese-500-normal-GNfB7rCE.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-latin-ext-500-normal-DOaysfXq.woff2)format("woff2"),url(/assets/barlow-latin-ext-500-normal-CJPcKP2Q.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/barlow-latin-500-normal-BPAOfeC8.woff2)format("woff2"),url(/assets/barlow-latin-500-normal-C1h8hMer.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-vietnamese-600-normal-DcjprdFV.woff2)format("woff2"),url(/assets/barlow-vietnamese-600-normal-CA_GiK2e.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-latin-ext-600-normal-B8NK_A3D.woff2)format("woff2"),url(/assets/barlow-latin-ext-600-normal-DMVRjfRT.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/barlow-latin-600-normal-DILqtrty.woff2)format("woff2"),url(/assets/barlow-latin-600-normal-CNwfPWQD.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Newsreader;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/newsreader-vietnamese-600-normal-CaH84vfx.woff2)format("woff2"),url(/assets/newsreader-vietnamese-600-normal-CVAR0otO.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Newsreader;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/newsreader-latin-ext-600-normal-BXv5iMHi.woff2)format("woff2"),url(/assets/newsreader-latin-ext-600-normal-BrbfzHZ5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Newsreader;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/newsreader-latin-600-normal-30OJ_TG_.woff2)format("woff2"),url(/assets/newsreader-latin-600-normal-DUnT2r2g.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:var(--tl-bg);--bg-2:var(--tl-subtle);--paper:#fffffff5;--paper-solid:#fff;--line:var(--tl-line);--line-2:var(--tl-line-2);--ink:var(--tl-ink);--ink-2:var(--tl-ink-2);--muted:var(--tl-muted);--teal:var(--tl-accent);--teal-d:var(--tl-accent-ink);--teal-soft:var(--tl-accent-soft);--red:var(--tl-red);--blue:var(--tl-blue);--code-fn:#b4441a;--code-kw:#4527d9;--code-num:#0f7a8a;--shadow:var(--tl-shadow);--radius:var(--tl-radius);--head:var(--tl-serif);--body:var(--tl-serif);--mono:var(--tl-mono)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font:300 16px/1.5 var(--body);-webkit-font-smoothing:antialiased;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer}svg{display:block}.icon{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:22px;height:22px}.icon .fill,svg .fill{fill:currentColor;stroke:none}code{font:500 .92em var(--mono);color:var(--blue);background:#2a4bd112;border-radius:4px;padding:.05em .35em}.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.loader{z-index:100;background:var(--bg);place-items:center;transition:opacity .6s,visibility .6s;display:grid;position:fixed;inset:0}html:not(.is-loading) .loader{opacity:0;visibility:hidden}.loader-inner{justify-items:center;gap:16px;display:grid}.logo{fill:none;stroke:var(--ink);stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.logo .logo-play{fill:var(--teal);stroke:var(--teal)}.loader-logo{width:72px;height:72px;animation:1.6s ease-in-out infinite pulse}@keyframes pulse{50%{transform:scale(1.06)}}.loader-title{font:300 30px var(--head);letter-spacing:.01em;margin:0}.loader-track{background:var(--line-2);width:min(240px,60vw);height:1px;margin-top:4px;position:relative;overflow:visible}.loader-fill{background:var(--teal);width:0;height:1px;transition:width .4s;display:block;position:relative}.loader-fill:after{content:"";background:var(--teal);border-radius:50%;width:6px;height:6px;position:absolute;top:-2.5px;right:-3px;box-shadow:0 0 0 4px #e5132d24}.loader-step{font:400 12px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0}.noscript{text-align:center;max-width:360px}.loader-slow{text-align:center;max-width:320px;font:300 16px var(--body);color:var(--ink-2,#44454c);margin:6px 0 0}.loader-slow button{border:1px solid var(--line-2);background:#fff;border-radius:999px;margin-left:6px;padding:4px 14px}.loader.is-error{overflow:auto}.loader.is-error .loader-inner{padding:24px 16px}.lesson-card img.is-loading{background:linear-gradient(100deg, var(--tl-subtle-2) 30%, #fff 50%, var(--tl-subtle-2) 70%) 0 0 / 300% 100%;border-radius:8px;animation:1.4s ease-in-out infinite thumb-shimmer}@keyframes thumb-shimmer{0%{background-position:100% 0}to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.lesson-card img.is-loading{animation:none}}.explainer>.tl-state{border:1px solid var(--line);border-radius:var(--radius);height:max-content;box-shadow:var(--shadow);background:#fff;margin:auto;position:absolute;inset:0}.app{isolation:isolate;grid-template-rows:104px minmax(0,1.1fr) minmax(0,1fr) 166px;grid-template-columns:72px minmax(0,1fr) clamp(380px,29vw,470px);column-gap:0;height:100dvh;min-height:680px;display:grid;position:relative}.traces{z-index:-1;pointer-events:none;width:100%;height:100%;position:absolute;inset:0;-webkit-mask-image:radial-gradient(70% 62% at 42% 46%,#00000059 0%,#000 78%);mask-image:radial-gradient(70% 62% at 42% 46%,#00000059 0%,#000 78%)}.traces .ct-run{fill:none;stroke:#e2dfd7;stroke-width:1.5px;stroke-linejoin:round;stroke-linecap:round}.traces .ct-pad{fill:var(--bg);stroke:var(--tl-line-2);stroke-width:1.4px}.traces .ct-via{fill:var(--tl-line-2)}.traces .ct-chip{fill:var(--tl-subtle);stroke:var(--tl-line-2);stroke-width:1.4px}.traces .ct-pin{fill:none;stroke:var(--tl-line-2);stroke-width:1.6px;stroke-linecap:round}.sidebar{z-index:20;background:var(--bg-2);border-right:1px solid var(--line);flex-direction:column;grid-area:1/1/-1;align-items:stretch;width:72px;padding:14px 0 18px;transition:width .25s;display:flex}.sidebar.is-open{width:210px;box-shadow:10px 0 30px -18px #0c0c0e66}.side-toggle{border:1px solid var(--line);background:var(--paper-solid);border-radius:8px;place-items:center;width:44px;height:44px;margin:0 14px 34px;display:grid}.side-toggle svg{fill:none;width:20px;stroke:var(--ink);stroke-width:2px;stroke-linecap:round;transition:transform .25s}.sidebar.is-open .side-toggle svg{transform:rotate(180deg)}.side-nav{gap:18px;margin:0;padding:0;list-style:none;display:grid}.side-nav a{height:50px;color:var(--ink);font:500 15px var(--head);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;align-items:center;gap:16px;padding:0 23px;text-decoration:none;display:flex;position:relative}.side-nav a .icon{stroke-width:1.7px;flex:none;width:26px;height:26px}.side-nav li.is-active a{background:linear-gradient(90deg,#e5132d17,#0000)}.side-nav li.is-active a:before{content:"";background:var(--teal);border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:0}.side-nav li.is-muted a{color:var(--muted)}.side-nav a:hover{color:var(--teal)}.side-label{opacity:0;transition:opacity .2s}.sidebar.is-open .side-label{opacity:1}.side-foot{font:500 10px var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.1em;writing-mode:vertical-rl;align-self:center;justify-items:center;gap:2px;margin-top:auto;display:grid;transform:rotate(180deg)}.side-foot b{color:var(--ink-2)}.flyout{z-index:19;background:var(--paper-solid);border:1px solid var(--line);border-radius:var(--radius);opacity:0;visibility:hidden;width:340px;padding:20px 20px 16px;transition:all .22s;position:absolute;top:16px;bottom:16px;left:82px;overflow:auto;transform:translate(-12px);box-shadow:0 20px 50px -20px #0c0c0e73}.flyout.is-open{opacity:1;visibility:visible;transform:none}.flyout h3{font:500 20px var(--head);letter-spacing:.08em;text-transform:uppercase;margin:0 0 4px}.flyout .sub{color:var(--muted);margin:0 0 16px;font-size:14px}.fly-list{gap:6px;margin:0;padding:0;list-style:none;display:grid}.fly-list button{text-align:left;background:0 0;border:1px solid #0000;border-radius:6px;grid-template-columns:36px 1fr auto;align-items:center;gap:12px;width:100%;padding:8px 10px;display:grid}.fly-list button:hover{border-color:var(--line);background:#fff}.fly-list .fi{border:1px solid var(--line);background:#fff;border-radius:8px;place-items:center;width:36px;height:36px;display:grid}.fly-list .fi .icon{width:20px;height:20px}.fly-list b{font:500 15px var(--head);letter-spacing:.04em;text-transform:uppercase;display:block}.fly-list small{color:var(--ink-2);font-size:13px;line-height:1.3;display:block}.fly-list .done{color:var(--teal)}.fly-list .done .icon{stroke-width:2.4px;width:18px;height:18px}.fly-list li.is-current button{border-color:var(--teal);background:#fff}.setting{border-bottom:1px dashed var(--line);justify-content:space-between;align-items:center;gap:12px;padding:12px 0;display:flex}.setting b{font:500 15px var(--head);letter-spacing:.04em;text-transform:uppercase;display:block}.setting small{color:var(--ink-2);font-size:13px}.switch{border:1px solid var(--line-2);background:var(--tl-subtle-2);border-radius:24px;flex:none;width:44px;height:24px;transition:all .2s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:18px;height:18px;transition:all .2s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #00000040}.switch[aria-checked=true]{background:var(--teal);border-color:var(--teal)}.switch[aria-checked=true]:after{transform:translate(20px)}.btn-line{border:1px solid var(--line-2);font:500 14px var(--head);letter-spacing:.08em;text-transform:uppercase;background:#fff;border-radius:6px;margin-top:18px;padding:9px 14px}.brand{z-index:6;color:inherit;grid-area:1/2;place-self:start;align-items:center;gap:18px;margin:18px 0 0 26px;text-decoration:none;display:flex}.brand-logo{stroke-width:3.4px;width:64px;height:64px}.brand-rule{background:var(--line-2);width:1px;height:52px}.brand-text h1{font:300 34px/1 var(--head);letter-spacing:.01em;margin:0}.brand-text p{font:500 16px var(--head);letter-spacing:.32em;text-transform:uppercase;color:var(--muted);margin:8px 0 0}.brand-text i{color:var(--teal);padding:0 .3em;font-style:normal}.stage{grid-area:1/2/4;min-width:0;min-height:0;position:relative;overflow:hidden}#board-canvas{touch-action:none;cursor:grab;width:100%;height:100%;position:absolute;inset:0}#board-canvas.is-dragging{cursor:grabbing}#board-canvas.is-pointing{cursor:pointer}.dim{pointer-events:none;opacity:0;mix-blend-mode:multiply;background:radial-gradient(at 60% 45%,#14183240,#1418328c);transition:opacity .4s;position:absolute;inset:0}.leaders{pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.leaders path{fill:none;stroke:var(--tl-ink-2);stroke-width:1.3px;stroke-dasharray:4 4}.leaders .ring{fill:#ffffffd9;stroke:var(--teal);stroke-width:2.2px}.leaders .dot{fill:var(--teal)}.callouts{pointer-events:none;position:absolute;inset:0}.callout{background:var(--paper);border:1px solid var(--line);width:240px;box-shadow:var(--shadow);pointer-events:auto;cursor:default;border-radius:6px;grid-template-columns:34px 1fr;align-items:start;gap:12px;padding:14px 16px;transition:opacity .35s,transform .35s;display:grid;position:absolute}.callout .icon{stroke-width:1.5px;width:28px;height:28px;margin-top:2px}.callout b{font:500 17px/1.15 var(--head);letter-spacing:.05em;text-transform:uppercase;display:block}.callout span{color:var(--ink-2);margin-top:4px;font-size:14px;line-height:1.35;display:block}.callout code{font-size:12px}.callout:hover{border-color:var(--teal)}.callouts.is-entering .callout{opacity:0;transform:translateY(6px)}.stage.no-labels .callouts,.stage.no-labels .leaders{display:none}.signals{pointer-events:none;position:absolute;inset:0}.chip{border:1px solid var(--line-2);font:600 10.5px var(--mono);color:var(--ink);white-space:nowrap;background:#fff;border-radius:4px;align-items:center;gap:5px;padding:3px 7px 3px 6px;transition:opacity .2s;display:flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 2px 6px -3px #0000004d}.chip:before{content:"";background:var(--tl-muted);border-radius:50%;width:7px;height:7px}.chip.is-live:before{background:var(--red);box-shadow:0 0 6px var(--red)}.chip.is-gnd:before{background:var(--ink)}.tip{z-index:8;pointer-events:none;background:var(--ink);color:#fff;opacity:0;white-space:nowrap;border-radius:6px;padding:7px 10px;font-size:13px;transition:opacity .15s;position:absolute;transform:translate(-50%,calc(-100% - 14px))}.tip b{font:500 13px var(--head);letter-spacing:.08em;text-transform:uppercase;display:block}.tip span{color:#c9cde0}.tip.is-on{opacity:1}.inspector{z-index:9;background:var(--paper-solid);border:1px solid var(--line-2);border-radius:var(--radius);opacity:0;visibility:hidden;width:270px;padding:14px 16px 16px;transition:all .18s;position:absolute;transform:translateY(6px);box-shadow:0 18px 40px -16px #0c0c0e73}.inspector.is-open{opacity:1;visibility:visible;transform:none}.inspector h4{font:500 18px var(--head);letter-spacing:.06em;text-transform:uppercase;margin:0 26px 2px 0}.inspector p{color:var(--ink-2);margin:0 0 10px;font-size:13.5px}.inspector .x{background:0 0;border:0;width:26px;height:26px;padding:3px;position:absolute;top:10px;right:10px}.inspector .x svg{fill:none;stroke:var(--ink-2);stroke-width:2px;stroke-linecap:round}.ctl{margin-top:10px}.ctl label{font:500 13px var(--head);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);justify-content:space-between;margin-bottom:6px;display:flex}.ctl label output{font:600 13px var(--mono);color:var(--ink);letter-spacing:0;text-transform:none}.ctl input[type=range]{width:100%;accent-color:var(--teal)}.choices{flex-wrap:wrap;gap:6px;display:flex}.choices button{border:1px solid var(--line-2);font:500 13px var(--head);letter-spacing:.04em;background:#fff;border-radius:5px;padding:5px 10px}.choices button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}.choices .sw{vertical-align:0;border-radius:50%;width:9px;height:9px;margin-right:6px;display:inline-block}.ctl-note{font:500 12px var(--mono);color:var(--ink-2);margin-top:10px}.ctl-toggle{justify-content:space-between;align-items:center;display:flex}.viewbar{z-index:7;background:var(--paper-solid);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:9px;align-items:center;gap:2px;padding:5px;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.viewbar button{background:0 0;border:0;border-radius:6px;place-items:center;width:34px;height:32px;display:grid}.viewbar button svg{fill:none;width:19px;height:19px;stroke:var(--ink);stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round}.viewbar button svg .fill{fill:var(--ink)}.viewbar button:hover{background:#0c0c0e0f}.viewbar .toggle[aria-pressed=true]{background:var(--teal-soft)}.viewbar .toggle[aria-pressed=true] svg{stroke:var(--tl-accent-ink)}.viewbar .toggle[aria-pressed=true] svg .fill{fill:var(--tl-accent-ink)}.viewbar-sep{background:var(--line);width:1px;height:20px;margin:0 4px}.compass-needle{transform-origin:12px 12px;transition:transform .3s}.view-hint{white-space:nowrap;background:var(--ink);color:#fff;font:500 11px var(--head);letter-spacing:.06em;opacity:0;pointer-events:none;border-radius:5px;margin:0;padding:4px 10px;transition:opacity .3s;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)}.viewbar:hover .view-hint,.viewbar.show-hint .view-hint{opacity:1}.status{z-index:5;border:1px solid var(--line);border-radius:var(--radius);background:var(--tl-subtle);grid-area:1/3;align-self:start;align-items:center;gap:0;margin:18px 22px 0 0;padding:10px;display:flex}.progress-card{background:var(--paper-solid);border:1px solid var(--line);border-radius:6px;flex:1;align-items:center;gap:14px;padding:9px 16px;display:flex}.progress-icon .icon{stroke-width:1.4px;width:34px;height:34px}.progress-body{flex:1}.progress-label{font:500 15px var(--head);letter-spacing:.08em;text-transform:uppercase}.progress-row{align-items:center;gap:12px;display:flex}.progress-track{background:var(--tl-subtle-2);border-radius:8px;flex:1;height:8px;overflow:hidden}.progress-fill{border-radius:inherit;background:var(--teal);width:0;height:100%;transition:width .6s;display:block}.progress-count{font:500 17px var(--head);letter-spacing:.04em}.clock{font:500 16px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap;gap:2px;padding:0 12px 0 18px;display:grid}.info-card{z-index:5;background:var(--tl-subtle);flex-direction:column;grid-area:2/3;min-height:0;margin:14px 22px 0 0;padding:0 6px 6px;display:flex}.tabs{border-bottom:1px solid var(--line);scrollbar-width:none;gap:2px;padding:0 12px;display:flex;overflow-x:auto}.tabs button{font:400 15px var(--head);letter-spacing:.03em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap;background:0 0;border:0;padding:14px 7px 12px;position:relative}.tabs button.is-active{color:var(--ink)}.tabs button.is-active:after{content:"";background:var(--ink);border-radius:3px 3px 0 0;height:3px;position:absolute;bottom:-1px;left:8px;right:8px}.info-body{background:var(--paper-solid);border:1px solid var(--line);border-radius:6px;flex:1;min-height:0;margin-top:6px;position:relative}.info-content{padding:18px 20px;position:absolute;inset:0;overflow:auto}.expand{z-index:2;width:30px;height:30px;color:var(--ink-2);background:0 0;border:0;padding:4px;position:absolute;top:12px;right:12px}.expand svg,.btn-ghost svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round}.expand svg .fill,.btn-ghost svg .fill{fill:currentColor}.info-content h3{font:300 30px/1.1 var(--head);letter-spacing:0;margin:0 34px 8px 0}.info-content p{color:var(--ink-2);margin:0 0 14px;font-size:16px}.features{gap:10px;margin:0;padding:0;list-style:none;display:grid}.features li{color:var(--ink-2);grid-template-columns:44px 1fr;align-items:center;gap:16px;font-size:15px;display:grid}.features .fi{border:1px solid var(--line);width:44px;height:44px;color:var(--ink);background:#fff;border-radius:7px;place-items:center;display:grid}.pin-table{border-collapse:collapse;width:100%;font-size:14px}.pin-table th{text-align:left;font:500 12px var(--head);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);padding:0 8px 8px 0}.pin-table td{border-bottom:1px dashed var(--line);vertical-align:top;color:var(--ink-2);padding:9px 8px 9px 0}.pin-table td:first-child{font:600 13px var(--mono);color:var(--ink);white-space:nowrap}.pin-table small{color:var(--muted)}.spec-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.spec{border:1px solid var(--line);background:#fff;border-radius:6px;padding:10px 12px}.spec small{font:500 11.5px var(--head);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);display:block}.spec b{font:500 15px var(--body);color:var(--ink);margin-top:2px;display:block}.points{gap:8px;margin:0;padding:0;list-style:none;display:grid}.points li{color:var(--ink-2);padding-left:22px;position:relative}.points li:before{content:"";background:var(--teal);border-radius:2px;width:8px;height:8px;position:absolute;top:.55em;left:3px}.eyebrow{font:500 12px var(--head);letter-spacing:.14em;text-transform:uppercase;color:var(--teal);margin-bottom:8px;display:block}.code-card{z-index:5;background:var(--tl-subtle);flex-direction:column;grid-area:3/3;min-height:0;margin:14px 22px 0 0;padding:0 6px 6px;display:flex}.code-card header{justify-content:space-between;align-items:center;padding:10px 6px 8px 12px;display:flex}.code-card h2{font:500 18px var(--head);letter-spacing:.08em;text-transform:uppercase;margin:0}.code-actions{gap:8px;display:flex}.btn-ghost{border:1px solid var(--line);background:var(--paper-solid);width:38px;height:38px;color:var(--ink);border-radius:7px;padding:8px}.btn-ghost:hover{border-color:var(--line-2)}.btn-run{background:var(--ink);color:#fff;border:0;border-radius:7px;width:44px;height:38px;padding:9px 11px;transition:background .2s}.btn-run svg{fill:none;width:22px}.btn-run .fill{fill:#fff}.btn-run .i-stop{display:none}.code-card[data-state=running] .btn-run{background:var(--red)}.code-card[data-state=running] .i-play{display:none}.code-card[data-state=running] .i-stop{display:block}.code-wrap{background:var(--paper-solid);border:1px solid var(--line);border-radius:6px;flex:1;min-height:0;position:relative;overflow:hidden}.code-scroll{position:absolute;inset:0;overflow:auto}.code-card.has-console .code-scroll{bottom:42%}.code{font:400 14.5px/1.6 var(--mono);color:var(--ink);counter-reset:ln;min-width:max-content;margin:0;padding:10px 0}.ln{grid-template-columns:44px 1fr;display:grid;position:relative}.ln-no{text-align:right;color:#a8a08c;border-right:1px solid var(--line);-webkit-user-select:none;user-select:none;margin-right:14px;padding-right:14px}.ln-code{white-space:pre;padding-right:16px}.ln.is-current{background:#e5132d1a}.ln.is-current:before{content:"";background:var(--teal);width:3px;position:absolute;top:0;bottom:0;left:0}.ln.is-current .ln-no{color:var(--ink);font-weight:600}.t-kw{color:var(--code-kw)}.t-fn{color:var(--code-fn)}.t-const{color:var(--code-kw);font-weight:500}.t-num{color:var(--code-num)}.t-str{color:#3a8a4c}.t-com{color:#8f8f96}.param{color:var(--code-num);border-bottom:1.5px dashed var(--code-num);cursor:text;background:#0f7a8a14;border-radius:3px 3px 0 0;outline:none;padding:0 2px}.param:hover,.param:focus{background:#0f7a8a29}.console{background:var(--tl-subtle);border-top:1px solid var(--line);flex-direction:column;height:42%;transition:transform .3s;display:flex;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%)}.code-card.has-console .console{transform:none}.console-head{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:6px 12px;display:flex}.console-dot{background:var(--tl-line-2);border-radius:50%;width:8px;height:8px}.code-card[data-state=running] .console-dot{background:var(--teal);box-shadow:0 0 0 3px #e5132d2e}.console-title{font:500 12.5px var(--head);letter-spacing:.1em;text-transform:uppercase}.console-status{font:500 11px var(--mono);color:var(--muted);text-transform:uppercase}.console-real{border:1px solid var(--tl-iris);background:var(--tl-iris-soft);color:var(--tl-iris-ink);font:500 11px var(--head);letter-spacing:.08em;text-transform:uppercase;border-radius:4px;align-items:center;gap:5px;margin-left:auto;padding:2px 8px;display:inline-flex}.console-real svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:13px;height:13px}.console-real:hover,.console-real[aria-pressed=true]{background:var(--tl-iris);color:#fff}.console.is-real .console-dot{background:var(--tl-iris);box-shadow:0 0 0 3px #5b3df533}.console-real+.console-clear{margin-left:0}.console-clear{border:1px solid var(--line);font:500 11px var(--head);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);background:0 0;border-radius:4px;margin-left:auto;padding:2px 8px}.console-lines{font:400 13px/1.5 var(--mono);color:var(--ink-2);flex:1;padding:6px 12px;overflow:auto}.console-lines div{white-space:pre-wrap}.console-lines .sys{color:var(--muted)}.console-lines .err{color:var(--red)}.console-lines .echo{color:var(--teal-d,#157a75)}.console-form{border-top:1px solid var(--line);font:500 13px var(--mono);color:var(--muted);align-items:center;gap:6px;padding:5px 8px 6px 12px;display:none}.code-card.has-input .console-form{display:flex}.console-form input{border:1px solid var(--line);min-width:0;font:500 13px var(--mono);color:var(--ink);background:#fff;border-radius:4px;outline:none;flex:1;padding:4px 8px}.console-form input:focus{border-color:var(--teal)}.console-form button{background:var(--ink);color:#fff;font:500 11px var(--head);letter-spacing:.08em;text-transform:uppercase;border:0;border-radius:4px;padding:4px 10px}.code-card.has-input .code-scroll{bottom:50%}.code-card.has-input .console{height:50%;transform:none}.lessons{z-index:5;flex-direction:column;grid-area:4/2/auto/4;min-width:0;padding:4px 22px 16px 26px;display:flex}.lessons-head{align-items:center;gap:18px;min-width:0;margin-bottom:4px;display:flex}.lessons-nav{margin-left:auto}.lessons h2{font:500 18px var(--head);letter-spacing:.08em;text-transform:uppercase;margin:0}.lessons-nav{gap:6px;display:flex}.lessons-nav button{border:1px solid var(--line);background:var(--paper-solid);border-radius:50%;width:32px;height:32px;padding:6px}.lessons-nav svg{fill:none;stroke:var(--ink);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.lesson-list{scroll-snap-type:x proximity;scrollbar-width:none;flex:1;gap:12px;margin:0;padding:10px 2px 4px;list-style:none;display:flex;overflow-x:auto}.lesson-list::-webkit-scrollbar{display:none}.lesson-list li{scroll-snap-align:start;flex:none;position:relative}.lesson-card{text-align:left;background:var(--paper);border:1px solid var(--line);width:248px;height:86px;box-shadow:var(--shadow);border-radius:6px;grid-template-columns:104px 1fr 18px;align-items:center;gap:6px;padding:4px 14px 4px 4px;transition:border-color .2s,transform .2s;display:grid}.lesson-card:hover{border-color:var(--line-2);transform:translateY(-2px)}.lesson-card img{object-fit:contain;width:104px;height:74px}.lesson-card span{font:500 15px/1.2 var(--head);letter-spacing:.07em;text-transform:uppercase;color:var(--ink-2)}.lesson-card svg{fill:none;width:18px;stroke:var(--ink-2);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}li.is-active .lesson-card{border:2px solid var(--blue);padding:3px 13px 3px 3px}li.is-active .lesson-card span{color:var(--ink);font-weight:700}.badge{background:var(--teal);color:#fff;border:2px solid var(--bg);opacity:0;border-radius:50%;place-items:center;width:22px;height:22px;transition:all .25s;display:grid;position:absolute;top:-8px;right:-6px;transform:scale(.5)}.badge .icon{stroke-width:3px;width:13px;height:13px}li.is-done .badge{opacity:1;transform:none}.modal{z-index:50;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0c0c0e59;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.modal[hidden]{display:none}.modal-card{background:var(--paper-solid);flex-direction:column;width:min(920px,100%);max-height:88vh;padding:0;display:flex;position:relative}.modal-close{z-index:2;border:1px solid var(--line);background:#fff;border-radius:6px;width:34px;height:34px;padding:6px;position:absolute;top:12px;right:12px}.modal-close svg{fill:none;stroke:var(--ink);stroke-width:2px;stroke-linecap:round}.modal-body{padding:26px 28px;overflow:auto}.modal-body .code{font-size:15px}.modal-body h3{font:500 26px var(--head);letter-spacing:.06em;text-transform:uppercase;margin:0 40px 12px 0}.modal-body section+section{margin-top:24px}.toast{z-index:60;background:var(--ink);color:#fff;font:500 14px var(--head);letter-spacing:.06em;opacity:0;pointer-events:none;border-radius:8px;padding:10px 16px;transition:all .25s;position:fixed;bottom:24px;left:50%;transform:translate(-50%,20px)}.toast.is-on{opacity:1;transform:translate(-50%)}.track-tabs{scrollbar-width:none;gap:6px;min-width:0;padding:2px;display:flex;overflow-x:auto}.track-tabs::-webkit-scrollbar{display:none}.track-tabs button{border:1px solid var(--line);background:var(--paper-solid);font:500 13px var(--head);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);border-radius:999px;flex:none;align-items:center;gap:7px;padding:5px 10px 5px 8px;display:flex}.track-tabs .icon{width:16px;height:16px}.track-tabs small{font:500 11px var(--mono);color:var(--muted)}.track-tabs button:hover{border-color:var(--line-2);color:var(--ink)}.track-tabs button.is-active{background:var(--ink);border-color:var(--ink);color:#fff}.track-tabs button.is-active small{color:#b9bfd6}.progress-total{font:500 11px var(--mono);color:var(--muted);margin-top:1px;display:block}.code-title{justify-items:start;gap:3px;display:grid}.code-title small{font:600 11px var(--mono);color:var(--teal);background:var(--teal-soft);white-space:nowrap;border-radius:4px;padding:2px 7px}.checklist{border:1px dashed var(--line-2);background:#fff;border-radius:7px;gap:8px;margin:16px 0 0;padding:12px 14px;list-style:none;display:grid}.checklist li{color:var(--ink-2);align-items:center;gap:10px;font-size:14.5px;display:flex}.checklist .icon{width:18px;height:18px;color:var(--muted)}.checklist li.ok{color:var(--ink)}.checklist li.ok .icon{color:var(--teal);stroke-width:2.6px}.link{color:var(--teal);font:500 14px var(--body);background:0 0;border:0;padding:0 0 0 6px}.challenges{counter-reset:ch;gap:8px;margin:0;padding:0;list-style:none;display:grid}.challenges li{border:1px solid var(--line);color:var(--ink-2);counter-increment:ch;background:#fff;border-radius:7px;padding:10px 12px 10px 44px;font-size:14.5px;position:relative}.challenges li:before{content:counter(ch);background:var(--ink);color:#fff;width:22px;height:22px;font:600 12px var(--mono);border-radius:50%;place-items:center;display:grid;position:absolute;top:10px;left:12px}.challenges b{font:500 12px var(--head);letter-spacing:.1em;text-transform:uppercase;color:var(--teal);display:block}.info-content .eyebrow+h3{margin-top:0}.info-content .points+.eyebrow,.info-content p+.eyebrow{margin-top:18px}.quiz{counter-reset:q;gap:16px;margin:0;padding:0;list-style:none;display:grid}.quiz>li{counter-increment:q}.quiz .q{color:var(--ink);margin:0 0 8px;font-size:15px;font-weight:600}.quiz .q:before{content:counter(q) ". ";color:var(--teal)}.opts{gap:6px;display:grid}.opts button{text-align:left;border:1px solid var(--line);color:var(--ink-2);background:#fff;border-radius:6px;padding:8px 12px;font-size:14.5px;transition:all .15s}.opts button:not(:disabled):hover{border-color:var(--teal);color:var(--ink)}.opts button:disabled{cursor:default}.opts .is-right,.opts .is-answer{border-color:var(--teal);background:var(--teal-soft);color:var(--ink)}.opts .is-answer{border-style:dashed}.opts .is-wrong{border-color:var(--red);color:var(--ink);background:#fbe3df}.why{border-radius:6px;padding:8px 10px;margin:8px 0 0!important;font-size:13.5px!important}.why.ok{background:#e5132d14}.why.no{background:#d8443a14}.quiz-foot{border-top:1px dashed var(--line);color:var(--ink-2);justify-content:space-between;align-items:center;margin-top:16px;padding-top:12px;font-size:14px;display:flex}.quiz-foot b{color:var(--teal)}.quiz-foot .btn-line{margin:0}.fly-group{margin-bottom:14px}.fly-group h4{z-index:1;background:var(--paper-solid);font:500 14px var(--head);letter-spacing:.1em;text-transform:uppercase;border-bottom:1px solid var(--line);align-items:center;gap:8px;margin:0 0 6px;padding:8px 2px;display:flex;position:sticky;top:-20px}.fly-group h4 .icon{width:18px;height:18px;color:var(--teal)}.fly-group h4 small{font:500 11px var(--mono);color:var(--muted);letter-spacing:0;text-transform:none;margin-left:auto}.search{border:1px solid var(--line-2);background:#fff;border-radius:7px;align-items:center;gap:8px;margin-bottom:14px;padding:8px 12px;display:flex}.search .icon{width:18px;height:18px;color:var(--muted)}.search input{min-width:0;font:15px var(--body);color:var(--ink);background:0 0;border:0;outline:0;flex:1}.setting-actions{flex-wrap:wrap;gap:8px;display:flex}.btn-line.danger:hover{border-color:var(--red);color:var(--red)}.btn-line:hover{border-color:var(--teal);color:var(--ink)}.sub.small{margin-top:18px;font-size:12.5px}.keys{grid-template-columns:repeat(4,1fr);display:grid!important}.keys button{font-family:var(--mono);padding:8px 0}.keys button[aria-pressed=true]{background:var(--ink);color:#fff}.btn-act{width:100%;margin-top:0}.dock{z-index:6;pointer-events:none;flex-direction:column;align-items:flex-end;gap:10px;display:flex;position:absolute;bottom:64px;right:14px}.panel{pointer-events:auto;background:var(--paper-solid);border:1px solid var(--line-2);border-radius:8px;width:300px;overflow:hidden;box-shadow:0 16px 34px -18px #0c0c0e80}.panel header{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:7px 8px 7px 12px;display:flex}.panel header b{font:500 13px var(--head);letter-spacing:.1em;text-transform:uppercase}.panel header small{font:500 10.5px var(--mono);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.panel-dot{background:var(--teal);border-radius:50%;flex:none;width:8px;height:8px}.panel-min{background:0 0;border:0;flex:none;width:24px;height:24px;margin-left:auto;padding:3px}.panel-min svg{fill:none;stroke:var(--ink-2);stroke-width:2px;stroke-linecap:round}.panel.is-min .panel-body{display:none}.panel-camera{background:0 0}.panel-camera header{background:var(--paper-solid)}.panel-camera .panel-body{aspect-ratio:16/10;background:0 0;position:relative}.feed,.feed-ink{width:100%;height:100%;position:absolute;inset:0}.rec{font:600 10px var(--mono);color:#ff6b5e;letter-spacing:.08em;position:absolute;bottom:6px;left:8px}.panel-browser{width:280px}.panel-browser .url{background:var(--tl-subtle);font:500 11.5px var(--mono);color:var(--ink-2);border-radius:6px;align-items:center;gap:6px;margin:8px 10px 0;padding:5px 9px;display:flex}.panel-browser .url svg{fill:none;width:13px;height:13px;stroke:var(--teal);stroke-width:2px}.panel-browser .page{color:var(--ink);max-height:300px;padding:12px;font-size:14px;overflow:auto}.page h5{font:500 16px var(--head);letter-spacing:.06em;text-transform:uppercase;margin:0 0 8px}.page .big{font:500 30px var(--head);color:var(--ink)}.page .row{border-bottom:1px dashed var(--line);justify-content:space-between;align-items:center;gap:8px;padding:6px 0;display:flex}.page button{background:var(--ink);color:#fff;font:500 13px var(--head);letter-spacing:.06em;text-transform:uppercase;border:0;border-radius:6px;padding:7px 12px}.page button.on{background:var(--teal)}.page button.off{background:var(--tl-line-2)}.page input[type=range]{width:100%;accent-color:var(--teal)}.page .muted{color:var(--muted);font-size:12px}.panel-plotter .panel-body{padding:8px 10px 10px}.panel-plotter canvas{border:1px solid var(--line);background:#fff;border-radius:5px;width:100%;height:110px;display:block}.panel-plotter .legend{font:500 11px var(--mono);color:var(--ink-2);flex-wrap:wrap;gap:4px 12px;margin-top:6px;display:flex}.panel-plotter .legend i{vertical-align:3px;border-radius:2px;width:10px;height:3px;margin-right:5px;display:inline-block}.panel-plotter .legend b{color:var(--ink)}@media (width<=1360px){.callout{grid-template-columns:28px 1fr;gap:10px;width:210px;padding:11px 13px}.callout .icon{width:24px;height:24px}.callout b{font-size:15px}.callout span{font-size:13px}.brand-text h1{font-size:30px}.clock{padding-left:12px;font-size:14px}}@media (width<=1080px),(height<=640px) and (width<=1300px){body{overflow:auto}.app{flex-direction:column;height:auto;min-height:100vh;padding-bottom:76px;display:flex}.traces{opacity:.8;position:fixed;-webkit-mask-image:none;mask-image:none}.sidebar{z-index:40;height:64px;padding:6px 8px calc(6px + env(safe-area-inset-bottom));border-right:0;border-top:1px solid var(--line);flex-direction:row;position:fixed;inset:auto 0 0;box-shadow:0 -8px 20px -14px #0c0c0e59;width:auto!important}.side-toggle,.side-foot{display:none}.side-nav{justify-content:space-around;gap:0;width:100%;display:flex}.side-nav li{flex:1;min-width:0}.side-nav a{letter-spacing:.04em;flex-direction:column;justify-content:center;gap:2px;height:52px;padding:0 2px;font-size:10.5px}.side-nav a .side-label{text-overflow:ellipsis;max-width:100%;overflow:hidden}.side-nav a .icon{width:22px;height:22px}.side-label{opacity:1}.side-nav li.is-active a:before{border-radius:3px 3px 0 0;width:auto;height:3px;inset:auto 10px 0}.flyout{width:auto;max-height:70vh;position:fixed;inset:auto 12px 76px}.brand{order:1;padding:16px 16px 6px}.brand-logo{width:46px;height:46px}.brand-rule{height:40px}.brand-text h1{font-size:24px}.brand-text p{margin-top:5px;font-size:12px}.status{order:2;margin:6px 16px 0}.stage{border:1px solid var(--line);border-radius:var(--radius);background:#ffffff2e;flex:none;order:3;height:min(62vh,560px);min-height:380px;margin:10px 16px 0}.callouts,.leaders{display:none}.dock{bottom:56px;right:8px}.panel{width:230px}.lessons-head{flex-wrap:wrap}.track-tabs{order:3;width:100%}.lessons{order:4;padding:14px 16px 0}.info-card{order:5;min-height:360px;margin:14px 16px 0}.code-card{flex:none;order:6;height:460px;margin:14px 16px 0}.view-hint{display:none}}@media (width<=520px){.clock{display:none}.lesson-card{grid-template-columns:84px 1fr 14px;width:210px}.lesson-card img{width:84px;height:62px}.lesson-card span{font-size:13.5px}.tabs button{padding:12px 7px 10px;font-size:13.5px}.spec-grid{grid-template-columns:1fr}.viewbar button{width:30px}.info-content h3{font-size:21px}.inspector{width:min(270px,100% - 20px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation:none!important}}.explainer{z-index:4;display:none;position:absolute;inset:0}.app.is-explainer .explainer{display:block}.explainer .xp{background:0 0}.app.is-explainer .traces{-webkit-mask-image:radial-gradient(66% 72% at 38% 52%,#0000001f 0% 50%,#000 92%);mask-image:radial-gradient(66% 72% at 38% 52%,#0000001f 0% 50%,#000 92%)}.app.is-explainer #board-canvas,.app.is-explainer .viewbar,.app.is-explainer .callouts,.app.is-explainer .leaders,.app.is-explainer .signals,.app.is-explainer .dock{visibility:hidden}.app.is-explainer .code-card{display:none}.app.is-explainer .info-card{grid-row:2/4}.tabs button{letter-spacing:.02em;font-size:14px}.code-card header{gap:8px}.code-actions{flex-wrap:nowrap;gap:6px}.code-actions .btn-ghost{width:34px;height:34px;padding:7px}.code-card h2{white-space:nowrap}@media (width<=480px){.side-nav a .side-label{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.side-nav a .icon{width:24px;height:24px}}.traces{opacity:.7;-webkit-mask-image:radial-gradient(62% 58% at 42% 46%,#0000 0% 55%,#000 100%);mask-image:radial-gradient(62% 58% at 42% 46%,#0000 0% 55%,#000 100%)}.clock{display:none}.status .progress-card{flex:1}.callout{cursor:pointer;z-index:1;border-radius:999px;grid-template-columns:22px auto;align-items:center;gap:9px;width:auto;max-width:250px;padding:8px 14px 8px 10px;transition:opacity .35s,transform .35s,border-radius .2s,box-shadow .2s}.callout .icon{width:20px;height:20px;margin:0}.callout b{letter-spacing:.06em;white-space:nowrap;font-size:13.5px}.callout span{display:none}.callout:hover,.callout:focus-visible,.callout.is-open{z-index:3;border-color:var(--teal);border-radius:10px;outline:none;align-items:start;width:250px;max-width:250px;box-shadow:0 14px 34px -16px #0c0c0e66}.callout:hover span,.callout:focus-visible span,.callout.is-open span{display:block}.callout:hover b,.callout:focus-visible b,.callout.is-open b{white-space:normal}.leaders path{stroke-width:1px;stroke-dasharray:3 5;opacity:.5}.leaders .ring{stroke-width:1.6px}.lab-bar:not(.is-running):not(.is-paused) .lab-tools [data-act=pause],.lab-bar:not(.is-running):not(.is-paused) .lab-tools [data-act=step],.lab-bar:not(.is-running):not(.is-paused) .lab-tools [data-act=over],.lab-bar:not(.is-running):not(.is-paused) .lab-tools [data-act=out],.lab-bar:not(.is-running):not(.is-paused) .lab-sep{display:none}.console-title,.console-real,.console-clear{white-space:nowrap;flex:none}.console-status{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.viewbar-cta{background:var(--tl-ink);color:#fff;height:32px;font:500 13px var(--head);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;border-radius:999px;align-items:center;gap:7px;margin-left:2px;padding:0 14px 0 10px;text-decoration:none;display:inline-flex}.viewbar-cta[hidden]{display:none}.viewbar-cta svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.viewbar-cta:hover{background:var(--tl-accent)}.viewbar-cta:focus-visible{outline:2px solid var(--tl-iris);outline-offset:2px}.ctl-apart{font:400 15px var(--body);color:var(--tl-iris-ink);border-bottom:1px solid;margin-top:10px;text-decoration:none;display:inline-block}@media (width<=1700px){.console-real span{display:none}.console-real{padding:2px 6px}}@media (width<=600px){.viewbar-cta span{display:none}.viewbar-cta{padding:0 9px}.viewbar{max-width:calc(100vw - 24px)}.code-actions{flex-wrap:wrap;justify-content:flex-end;min-width:0}}@media (width>=1081px){.side-toggle{visibility:hidden;height:8px;margin-bottom:14px}.sidebar,.sidebar.is-open{width:72px;box-shadow:none}.side-nav{gap:6px}.side-nav a{height:60px;font:500 11px var(--head);letter-spacing:.02em;text-transform:none;flex-direction:column;justify-content:center;gap:5px;padding:0 2px}.side-nav a .icon{width:24px;height:24px}.side-label,.sidebar.is-open .side-label{opacity:1}}@media (width>=1081px) and (height<=760px){.side-nav{gap:0}.side-nav a{gap:3px;height:52px}.side-foot{display:none}}@media (width<=480px){.side-nav a{letter-spacing:0;text-transform:none;gap:3px;font-size:9px}.side-nav a .side-label{clip:auto;text-overflow:clip;width:auto;height:auto;position:static;overflow:hidden}.side-nav a .icon{width:21px;height:21px}}.welcome{max-width:600px;margin:0 auto}.welcome h3{font-size:30px}.welcome-lead{color:var(--ink-2);margin:0 0 22px;font-size:18px;line-height:1.55}.welcome-steps{gap:14px;margin:0;padding:0;list-style:none;display:grid}.welcome-steps li{border:1px solid var(--line);background:#fff;border-radius:10px;grid-template-columns:40px 1fr;align-items:start;gap:14px;padding:14px 16px;display:grid}.welcome-steps b{background:var(--teal);color:#fff;width:40px;height:40px;font:500 20px var(--head);border-radius:50%;place-items:center;display:grid}.welcome-steps strong{font:500 18px var(--head);margin-bottom:3px;display:block}.welcome-steps span{color:var(--ink-2);font-size:16px;line-height:1.5;display:block}.welcome-note{color:var(--muted);margin:18px 0 0;font-size:15px}.welcome-actions{flex-wrap:wrap;align-items:center;gap:12px 20px;margin-top:22px;display:flex}.welcome-go{background:var(--ink);color:#fff;font:500 16px var(--head);letter-spacing:.04em;cursor:pointer;border:0;border-radius:8px;padding:13px 22px}.welcome-go:hover{background:var(--teal)}.welcome-alt{color:var(--ink);text-underline-offset:3px;font-size:16px}@media (width<=480px){.welcome h3{font-size:24px}.welcome-lead{font-size:16px}.welcome-steps li{grid-template-columns:32px 1fr;gap:10px;padding:12px}.welcome-steps b{width:32px;height:32px;font-size:16px}.side-nav li:has(>[data-nav=site]){display:none}}.tabs button{text-transform:none;letter-spacing:0;padding-inline:6px;font-size:16px}@media (width<=1080px){.tabs button{font-size:15px}}.lab-bar{align-items:center;gap:8px;min-width:0;padding:0 4px 8px 6px;display:flex}.lab-bar[hidden]{display:none}.lab-mode{border:1px solid var(--tl-line);background:var(--tl-surface);border-radius:999px;flex:none;padding:2px;display:inline-flex}.lab-mode button{height:28px;font:500 13px var(--tl-serif);color:var(--tl-ink-2);white-space:nowrap;background:0 0;border:0;border-radius:999px;align-items:center;gap:5px;padding:0 12px;display:inline-flex}.lab-mode button .lucide{width:14px;height:14px}.lab-mode button[aria-checked=true]{background:var(--tl-ink);color:var(--tl-surface)}.lab-mode button:focus-visible,.lab-btn:focus-visible,.lab-tabs button:focus-visible{outline:2px solid var(--tl-iris);outline-offset:2px}.lab-bar.is-python .lab-mode [data-mode=code]{display:none}.lab-note{min-width:0;font:400 12px var(--tl-mono);color:var(--tl-muted);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.lab-tools{flex:none;align-items:center;gap:3px;display:none}.code-card.is-lab .lab-tools{display:inline-flex}.lab-btn{border:1px solid var(--tl-line);background:var(--tl-surface);width:29px;height:29px;color:var(--tl-ink);border-radius:999px;place-items:center;padding:0;display:grid}.lab-btn:hover:not(:disabled){border-color:var(--tl-iris);color:var(--tl-iris-ink)}.lab-btn:disabled{opacity:.35;cursor:default}.lab-btn .lucide{width:16px;height:16px}.code-card.is-lab .btn-run{background:var(--tl-accent);border-radius:999px}.code-card.is-lab .btn-run:hover{background:var(--tl-accent-ink)}.lab-bar.is-paused [data-act=pause]{background:var(--tl-iris);border-color:var(--tl-iris);color:var(--tl-surface)}.lab-sep{background:var(--tl-line);width:1px;height:18px;margin:0 3px}.lab-editor,.lab-drawer{display:none}.code-card.is-lab .code-wrap{flex-direction:column;display:flex}.code-card.is-lab .code-scroll{display:none}.code-card.is-lab .lab-editor{flex:1 1 0;min-height:72px;display:block;position:relative;overflow:hidden}.code-card.is-lab .lab-editor .cm-editor{position:absolute;inset:0}.code-card.is-lab .lab-drawer{border-top:1px solid var(--tl-line);background:var(--tl-surface);flex-direction:column;flex:none;max-height:44%;display:flex}.code-card.is-lab .lab-drawer.is-open{height:40%}.code-card.is-lab .console{flex:0 0 38%;height:auto;min-height:118px;position:relative;transform:none}.app.is-lab-tall .code-card.is-lab .console{flex-basis:30%}.lab-tabs{flex:none;align-items:center;gap:2px;min-height:32px;padding:3px 6px;display:flex}.lab-tabs [role=tab]{height:24px;font:500 11.5px var(--tl-serif);letter-spacing:.06em;text-transform:uppercase;color:var(--tl-ink-2);white-space:nowrap;background:0 0;border:0;border-radius:999px;align-items:center;gap:6px;padding:0 10px;display:inline-flex}.lab-tabs [role=tab]:hover{color:var(--tl-ink);background:var(--tl-subtle)}.lab-tabs [role=tab].is-active{background:var(--tl-iris-soft);color:var(--tl-iris-ink)}.lab-count:empty{display:none}.lab-count{min-width:18px;height:18px;font:600 10.5px var(--tl-mono);letter-spacing:0;background:var(--tl-subtle-2);color:var(--tl-ink-2);border-radius:999px;place-items:center;padding:0 5px;display:inline-grid}.lab-count.is-error{background:var(--tl-accent);color:var(--tl-surface)}.lab-count.is-warning{background:var(--tl-yellow);color:var(--tl-ink)}.lab-state{font:400 11.5px var(--tl-mono);color:var(--tl-muted);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;overflow:hidden}.lab-collapse{width:24px;height:24px;color:var(--tl-muted);background:0 0;border:0;border-radius:999px;padding:0;display:none}.lab-drawer.is-open .lab-collapse{place-items:center;display:grid}.lab-collapse:hover{color:var(--tl-ink);background:var(--tl-subtle)}.lab-collapse .lucide{width:15px;height:15px}.lab-panel{border-top:1px solid var(--tl-line);flex:1;min-height:0;overflow:auto}.lab-drawer:not(.is-open) .lab-panel{display:none}.lab-empty{font:400 13px/1.45 var(--tl-serif);color:var(--tl-muted);margin:0;padding:10px 12px}.lab-problems{margin:0;padding:4px 0;list-style:none}.lab-problems button{text-align:left;width:100%;font:400 12.5px/1.45 var(--tl-mono);color:var(--tl-ink);background:0 0;border:0;grid-template-columns:18px 1fr;gap:8px;padding:6px 12px;display:grid}.lab-problems button:hover{background:var(--tl-subtle)}.lab-problems .lucide{width:15px;height:15px;margin-top:2px}.lab-problems .is-error .lucide{color:var(--tl-accent)}.lab-problems .is-warning .lucide{color:var(--tl-yellow)}.lab-problems b{color:var(--tl-ink-2);margin-right:4px;font-weight:600}.lab-problems small{font:400 13px/1.4 var(--tl-serif);color:var(--tl-ink-2);margin-top:2px;display:block}.lab-stack{margin:0;padding:4px 0;list-style:none}.lab-stack button{width:100%;font:400 12.5px var(--tl-mono);color:var(--tl-ink-2);text-align:left;background:0 0;border:0;justify-content:space-between;gap:10px;padding:5px 12px;display:flex}.lab-stack button:hover{background:var(--tl-subtle)}.lab-stack .is-top button{color:var(--tl-iris-ink)}.lab-stack b{font-weight:500}.lab-scope{padding:4px 0 6px}.lab-scope h5{font:500 11px var(--tl-serif);letter-spacing:.12em;text-transform:uppercase;color:var(--tl-muted);margin:0;padding:4px 12px 2px}.lab-scope .var{font:400 12.5px var(--tl-mono);grid-template-columns:minmax(60px,auto) auto 1fr;align-items:baseline;gap:8px;padding:2px 12px 2px 24px;display:grid}.lab-scope summary.var{cursor:pointer;padding-left:12px;list-style:none}.lab-scope summary.var::-webkit-details-marker{display:none}.lab-scope summary.var:before{content:"▸";color:var(--tl-muted);margin-left:-1px;position:absolute}.lab-scope details[open]>summary.var:before{content:"▾"}.lab-scope summary.var .n{padding-left:12px}.lab-scope .var .n{color:var(--tl-ink)}.lab-scope .var .t{color:var(--tl-muted);font-size:11px}.lab-scope .var .v{color:var(--tl-iris-ink);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lab-scope .kids{border-left:1px solid var(--tl-line);margin-left:14px}@media (width>=1081px) and (height>=641px),(width>=1301px){.app.is-lab-mode{grid-template-rows:104px minmax(0,.8fr) minmax(0,1.2fr) 166px}.app.is-lab-mode .info-card .features{display:none}.app.is-lab-tall .code-card.is-lab{grid-row:2/4}.app.is-lab-tall .info-card{display:none}}@media (width<=1080px),(height<=640px) and (width<=1300px){.code-card.is-lab{height:620px}.lab-note{display:none}}@media (width<=420px){.lab-bar{flex-wrap:wrap}.lab-tools{justify-content:space-between;width:100%}}.lab-bar:not(.is-paused) [data-act=over],.lab-bar:not(.is-paused) [data-act=out]{display:none}
