:root{--bg: #07080c;--bg-2: #0b0d13;--panel: #0f1118;--panel-2: #141722;--raise: #1a1e2b;--raise-2: #222738;--line: rgba(255, 255, 255, .065);--line-2: rgba(255, 255, 255, .11);--line-3: rgba(255, 255, 255, .18);--text: #eef0f7;--text-2: #aab0c5;--text-3: #6d7390;--brand: #7c5cff;--brand-2: #a993ff;--brand-ink: #ffffff;--ok: #34d399;--ok-soft: rgba(52, 211, 153, .12);--bad: #ff5d73;--bad-soft: rgba(255, 93, 115, .12);--gold: #ffcc4d;--w: #7c5cff;--w-soft: color-mix(in srgb, var(--w) 14%, transparent);--w-line: color-mix(in srgb, var(--w) 38%, transparent);--r-sm: 8px;--r: 12px;--r-lg: 18px;--r-xl: 24px;--ease: cubic-bezier(.2, .8, .2, 1);--spring: cubic-bezier(.34, 1.56, .64, 1);--shadow: 0 1px 0 rgba(255, 255, 255, .04) inset, 0 12px 40px -12px rgba(0, 0, 0, .6);--shadow-lg: 0 1px 0 rgba(255, 255, 255, .05) inset, 0 30px 80px -20px rgba(0, 0, 0, .75);--font: "Geist", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "Geist Mono", "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--tb-h: 60px;--life: #ffb547;--tint: 255, 255, 255;--hi: white;--ink: #fff;--code: #d7dbea;--code-em: #e6dcff;--gutter: #3e4460;--caret: #c9b8ff;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:450 15px/1.5 var(--font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;overflow:hidden;font-feature-settings:"ss01","cv11"}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;border:0;background:none;padding:0;-webkit-tap-highlight-color:transparent}a{color:inherit}svg.ic{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;flex:none}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}:focus-visible{outline:2px solid var(--brand-2);outline-offset:2px;border-radius:6px}::selection{background:color-mix(in srgb,var(--brand) 45%,transparent)}code,.mono{font-family:var(--mono);font-feature-settings:normal}.rich code{font-size:.86em;padding:.12em .42em;border-radius:6px;background:var(--raise);border:1px solid var(--line-2);color:var(--code-em);white-space:nowrap}.rich strong{color:var(--text);font-weight:650}*{scrollbar-width:thin;scrollbar-color:rgba(var(--tint),.14) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:rgba(var(--tint),.12);border-radius:10px;border:3px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background-color:rgba(var(--tint),.22)}.backdrop{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}.backdrop:before{content:"";position:absolute;inset:-20% -10% auto;height:80vh;background:radial-gradient(40% 50% at 25% 30%,color-mix(in srgb,var(--w) 22%,transparent),transparent 70%),radial-gradient(35% 45% at 75% 10%,color-mix(in srgb,var(--brand) 18%,transparent),transparent 70%);filter:blur(20px);transition:background .6s var(--ease)}.backdrop:after{content:"";position:absolute;inset:0;background-image:radial-gradient(rgba(var(--tint),.055) 1px,transparent 1px);background-size:24px 24px;mask-image:linear-gradient(to bottom,rgba(0,0,0,.9),transparent 70%);-webkit-mask-image:linear-gradient(to bottom,rgba(0,0,0,.9),transparent 70%)}.btn{--b-bg: var(--raise);--b-fg: var(--text);--b-line: var(--line-2);display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border-radius:10px;background:var(--b-bg);color:var(--b-fg);box-shadow:0 0 0 1px var(--b-line) inset,0 1px #ffffff0f inset;font-weight:600;font-size:14px;letter-spacing:-.005em;white-space:nowrap;transition:transform .14s var(--ease),background .2s,box-shadow .2s,color .2s,opacity .2s;user-select:none}.btn:hover{--b-bg: var(--raise-2)}.btn:active{transform:scale(.97)}.btn[disabled]{opacity:.45;pointer-events:none}.btn.lg{height:48px;padding:0 22px;font-size:15px;border-radius:12px}.btn.sm{height:32px;padding:0 12px;font-size:13px;border-radius:8px}.btn.primary{--b-bg: var(--brand);--b-fg: #fff;--b-line: rgba(255, 255, 255, .14);background-image:linear-gradient(180deg,#ffffff29,#fff0);box-shadow:0 0 0 1px var(--b-line) inset,0 8px 24px -8px color-mix(in srgb,var(--brand) 80%,transparent)}.btn.primary:hover{--b-bg: #8a6dff}.btn.accent{--b-bg: var(--w);--b-fg: #0a0b10;--b-line: rgba(255, 255, 255, .2);background-image:linear-gradient(180deg,#ffffff40,#fff0);box-shadow:0 0 0 1px var(--b-line) inset,0 10px 30px -10px var(--w)}.btn.accent:hover{filter:brightness(1.06)}.btn.ok{--b-bg: var(--ok);--b-fg: #04150e;--b-line: rgba(255, 255, 255, .2);box-shadow:0 0 0 1px var(--b-line) inset,0 10px 30px -10px var(--ok)}.btn.ghost{--b-bg: transparent;--b-line: transparent;color:var(--text-2)}.btn.ghost:hover{--b-bg: var(--raise);color:var(--text)}.btn kbd,.kbd{font:500 11px/1 var(--mono);padding:3px 5px;border-radius:5px;background:#00000038;box-shadow:0 0 0 1px #ffffff26 inset;opacity:.85}.icon-btn{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:var(--text-2);transition:background .2s,color .2s,transform .14s var(--ease)}.icon-btn:hover{background:var(--raise);color:var(--text)}.icon-btn:active{transform:scale(.92)}.icon-btn.on{color:var(--brand-2)}#app{position:relative;z-index:1;height:100%;display:flex;flex-direction:column}.tb{height:var(--tb-h);flex:none;display:flex;align-items:center;gap:12px;padding:0 16px 0 10px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 72%,transparent);backdrop-filter:saturate(1.4) blur(16px);-webkit-backdrop-filter:saturate(1.4) blur(16px);position:relative;z-index:5}.tb-brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:-.02em;font-size:15.5px;margin-right:8px}.logo-mark{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:linear-gradient(140deg,#8f74ff,#5a3df0 55%,#ff5fb4);box-shadow:0 0 0 1px #ffffff2e inset,0 6px 18px -6px #7c5cff}.logo-mark svg{width:18px;height:18px;stroke:#fff;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round}.tb-nav{position:relative;display:flex;gap:2px;padding:3px;border-radius:11px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;margin:0 auto}.tb-tab{position:relative;z-index:1;height:32px;padding:0 14px;border-radius:8px;display:flex;align-items:center;gap:7px;color:var(--text-3);font-weight:550;font-size:13.5px;transition:color .2s}.tb-tab svg.ic{width:16px;height:16px}.tb-tab:hover{color:var(--text-2)}.tb-tab[aria-selected=true]{color:var(--text)}.tb-ind{position:absolute;z-index:0;top:3px;height:32px;border-radius:8px;background:var(--raise-2);box-shadow:0 0 0 1px var(--line-2) inset,0 2px 8px #00000059;transition:transform .32s var(--ease),width .32s var(--ease)}.tb-right{display:flex;align-items:center;gap:6px}.chip{height:32px;padding:0 11px;border-radius:9px;display:inline-flex;align-items:center;gap:7px;font:600 13px/1 var(--mono);color:var(--text);background:var(--panel);box-shadow:0 0 0 1px var(--line) inset}.chip svg{width:15px;height:15px}.chip.stars svg{fill:var(--gold);stroke:none}.chip.coins svg{stroke:var(--gold)}.chip.pop{animation:chipPop .5s var(--spring)}@keyframes chipPop{40%{transform:scale(1.14);box-shadow:0 0 0 1px var(--gold) inset}}#view{flex:1;min-height:0;position:relative}.view{position:absolute;inset:0;overflow:auto;animation:viewIn .38s var(--ease) both}@keyframes viewIn{0%{opacity:0;transform:translateY(8px)}}.home{display:grid;grid-template-columns:300px minmax(0,1fr);overflow:hidden}.rail{border-right:1px solid var(--line);overflow:auto;padding:22px 14px 30px;background:linear-gradient(180deg,color-mix(in srgb,var(--panel) 60%,transparent),transparent)}.rail-head{padding:0 10px 14px;display:flex;align-items:baseline;justify-content:space-between}.eyebrow{font:600 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3)}.rail-total{font:500 12px/1 var(--mono);color:var(--text-3)}.rail-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.rail-item{--w: inherit;width:100%;display:grid;grid-template-columns:34px 1fr auto;align-items:center;gap:12px;padding:10px;border-radius:12px;text-align:left;position:relative;transition:background .2s;animation:rise .5s var(--ease) both;animation-delay:calc(var(--i, 0) * 40ms)}.rail-item:hover{background:var(--panel-2)}.rail-item[aria-current=true]{background:var(--panel-2);box-shadow:0 0 0 1px var(--line-2) inset}.rail-item[aria-current=true]:before{content:"";position:absolute;left:-14px;top:12px;bottom:12px;width:3px;border-radius:0 3px 3px 0;background:var(--w);box-shadow:0 0 12px var(--w)}.ri-num{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font:700 13px/1 var(--mono);color:var(--w);background:var(--w-soft);box-shadow:0 0 0 1px var(--w-line) inset}.ri-num svg.ic{width:16px;height:16px}.rail-item.done .ri-num{background:var(--w);color:#0a0b10}.ri-title{display:block;font-weight:600;font-size:14px;letter-spacing:-.01em}.ri-sub{display:block;font-size:12.5px;color:var(--text-3);margin-top:1px}.ri-meter{width:42px;height:4px;border-radius:4px;background:var(--raise-2);overflow:hidden}.ri-meter i{display:block;height:100%;width:calc(var(--p) * 100%);background:var(--w);border-radius:4px;transition:width .6s var(--ease)}.ri-lock{color:var(--text-3)}.ri-lock svg.ic{width:15px;height:15px}.rail-foot{margin:18px 10px 0;padding:14px;border-radius:14px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;font-size:13px;color:var(--text-2)}.rail-foot b{color:var(--text);font-weight:600}.rail-foot .btn{margin-top:10px;width:100%}.rail-cert{margin:14px 10px 0;width:calc(100% - 20px);display:flex;gap:12px;align-items:center;padding:12px 14px;border-radius:14px;text-align:left;cursor:pointer;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;color:var(--text-2);font:inherit;font-size:13px;border:0}.rail-cert b{display:block;color:var(--text);font-weight:600;font-size:14px}.rail-cert small{font-size:12px}.rail-cert .rc-ic{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;flex:none;background:var(--raise-2);color:var(--text-3)}.rail-cert .rc-ic svg.ic{width:18px;height:18px}.rail-cert.ready{box-shadow:0 0 0 1.5px #ffcc4d inset}.rail-cert.ready .rc-ic{background:#ffcc4d;color:#3d2b00}.rail-cert:hover{box-shadow:0 0 0 1.5px var(--brand) inset}.rail-cert.strip-cert{display:none;margin:0 0 14px;width:100%}.detail{overflow:auto;padding:28px clamp(20px,3.4vw,48px) 60px}.detail-inner{max-width:1040px;margin:0 auto}.hero{position:relative;border-radius:var(--r-xl);overflow:hidden;isolation:isolate;padding:34px 36px 32px;min-height:250px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:28px;align-items:end;background:var(--panel);box-shadow:0 0 0 1px var(--line-2) inset,var(--shadow-lg);animation:rise .5s var(--ease) both}.hero-bg{position:absolute;inset:0;z-index:-1}.hero-bg:before{content:"";position:absolute;inset:0;background:radial-gradient(60% 90% at 100% 0%,color-mix(in srgb,var(--w) 55%,transparent),transparent 60%),radial-gradient(50% 80% at 70% 120%,color-mix(in srgb,var(--brand) 40%,transparent),transparent 60%),linear-gradient(180deg,var(--panel-2),var(--panel))}.hero-bg:after{content:"";position:absolute;inset:0;opacity:.5;background-image:linear-gradient(rgba(var(--tint),.05) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--tint),.05) 1px,transparent 1px);background-size:32px 32px;mask-image:radial-gradient(70% 90% at 85% 10%,#000,transparent 75%);-webkit-mask-image:radial-gradient(70% 90% at 85% 10%,#000,transparent 75%)}.hero-code{position:absolute;right:26px;top:22px;z-index:-1;font:500 12.5px/1.75 var(--mono);color:rgba(var(--tint),.55);text-align:left;white-space:pre;opacity:.9;pointer-events:none;mask-image:linear-gradient(90deg,transparent,#000 30%);-webkit-mask-image:linear-gradient(90deg,transparent,#000 30%)}.hero-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}.pill{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;font:600 11.5px/1 var(--mono);letter-spacing:.04em;text-transform:uppercase;background:rgba(var(--tint),.06);box-shadow:0 0 0 1px var(--line-2) inset;color:var(--text-2)}.pill.w{background:var(--w-soft);color:color-mix(in srgb,var(--w) 70%,var(--hi));box-shadow:0 0 0 1px var(--w-line) inset}.pill.free{background:var(--ok-soft);color:var(--ok);box-shadow:0 0 0 1px #34d3994d inset}.pill svg.ic{width:13px;height:13px}.hero h1{margin:0 0 10px;font-size:clamp(30px,3.6vw,46px);line-height:1.02;letter-spacing:-.035em;font-weight:750;background:linear-gradient(180deg,var(--ink) 30%,color-mix(in srgb,var(--ink) 65%,var(--w)));-webkit-background-clip:text;background-clip:text;color:transparent}.hero p{margin:0;max-width:560px;color:var(--text-2);font-size:15.5px}.hero-actions{display:flex;align-items:center;gap:12px;margin-top:22px;flex-wrap:wrap}.hero-build{font-size:13.5px;color:var(--text-2);display:flex;align-items:center;gap:8px}.hero-build b{color:var(--text);font-weight:600}.ring{position:relative;width:112px;height:112px}.ring svg{width:100%;height:100%;transform:rotate(-90deg)}.ring circle{fill:none;stroke-width:7}.ring .track{stroke:rgba(var(--tint),.08)}.ring .bar{stroke:var(--w);stroke-linecap:round;transition:stroke-dashoffset 1s var(--ease);filter:drop-shadow(0 0 8px color-mix(in srgb,var(--w) 70%,transparent))}.ring-label{position:absolute;inset:0;display:grid;place-content:center;text-align:center}.ring-label b{font:700 24px/1 var(--mono);letter-spacing:-.04em}.ring-label span{font-size:11.5px;color:var(--text-3);margin-top:4px}.hero-track{grid-column:1 / -1;display:flex;gap:14px;margin-top:4px;padding-top:18px;border-top:1px solid color-mix(in srgb,var(--line-2) 70%,transparent)}.ht-chap{flex:var(--n) 1 0;min-width:0;display:flex;flex-direction:column;gap:6px}.ht-chap.cap{flex:0 0 34px}.ht-chap.cap .ht-label{overflow:visible;align-self:flex-end;color:color-mix(in srgb,var(--w) 60%,var(--text-3))}.ht-ticks{display:flex;gap:3px}.ht-tick{flex:1;position:relative;padding:8px 0;border-radius:4px}.ht-tick i{display:block;height:5px;border-radius:3px;background:rgba(var(--tint),.11);transition:background .3s,transform .25s var(--spring),box-shadow .3s}.ht-tick:hover i{transform:scaleY(1.7);background:rgba(var(--tint),.24)}.ht-tick.done i{background:var(--w);box-shadow:0 0 10px -2px var(--w)}.ht-tick.done:hover i{background:color-mix(in srgb,var(--w) 80%,var(--hi))}.ht-tick.current i{background:linear-gradient(90deg,var(--w) 0 30%,color-mix(in srgb,var(--w) 25%,transparent) 30%);background-size:300% 100%;animation:tickSweep 2.4s var(--ease) infinite;box-shadow:0 0 0 1px var(--w-line)}@keyframes tickSweep{0%{background-position:100% 0}to{background-position:0 0}}.ht-chap.cap .ht-tick i{height:9px;margin-top:-2px;border-radius:3px;clip-path:polygon(0 50%,12% 0,88% 0,100% 50%,88% 100%,12% 100%)}.ht-label{font:600 10.5px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ht-tick[data-tip]:after{content:attr(data-tip);position:absolute;bottom:calc(100% + 4px);left:50%;z-index:3;transform:translate(-50%,4px);opacity:0;pointer-events:none;padding:6px 9px;border-radius:8px;white-space:nowrap;font:500 12px/1 var(--font);color:var(--text);background:var(--raise-2);box-shadow:0 0 0 1px var(--line-2) inset,0 8px 24px -6px #000000b3;transition:opacity .16s,transform .2s var(--ease)}.ht-tick:hover:after,.ht-tick:focus-visible:after{opacity:1;transform:translate(-50%)}.ht-chap:first-child .ht-tick:first-child:after{left:0;transform:translateY(4px)}.ht-chap:first-child .ht-tick:first-child:hover:after,.ht-chap:first-child .ht-tick:first-child:focus-visible:after{transform:none}.ht-chap.cap .ht-tick:after{left:auto;right:0;transform:translateY(4px)}.ht-chap.cap .ht-tick:hover:after,.ht-chap.cap .ht-tick:focus-visible:after{transform:none}.coach-card{margin-top:18px;display:flex;align-items:center;gap:16px;padding:16px 18px;border-radius:var(--r-lg);background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;animation:rise .5s var(--ease) both;animation-delay:60ms}.coach-card .jd{width:56px;height:56px}.coach-card .cc-text{flex:1;min-width:0}.cc-name{font-weight:650;font-size:13.5px;display:flex;align-items:center;gap:8px}.cc-name span{color:var(--text-3);font-weight:500}.cc-line{color:var(--text-2);font-size:14.5px;margin-top:2px}.sec-head{display:flex;align-items:end;justify-content:space-between;gap:16px;margin:34px 2px 14px}.sec-head h2{margin:0;font-size:19px;letter-spacing:-.02em;font-weight:680}.sec-head p{margin:4px 0 0;color:var(--text-3);font-size:13.5px}.sec-count{font:650 22px/1 var(--mono);letter-spacing:-.04em;color:var(--text)}.sec-count span{color:var(--text-3)}.chapters{position:relative}.chap{position:relative;animation:rise .5s var(--ease) both;animation-delay:calc(60ms + var(--i, 0) * 70ms)}.chap-head{position:relative;width:100%;display:grid;grid-template-columns:56px minmax(0,1fr) auto;align-items:center;gap:14px;padding:22px 16px 12px 0;text-align:left;border-radius:16px}.chap:first-child .chap-head{padding-top:4px}button.chap-head:hover .chap-title{color:var(--ink)}button.chap-head:hover .chap-chev{color:var(--text);background:var(--raise)}.chap-badge{justify-self:center;position:relative;z-index:1;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;font:700 12px/1 var(--mono);letter-spacing:-.02em;color:var(--text-3);background:var(--bg);box-shadow:0 0 0 1.5px var(--line-3) inset;transition:transform .3s var(--spring),background .3s,color .3s,box-shadow .3s}.chap-badge svg.ic{width:15px;height:15px;stroke-width:2.6}button.chap-head:hover .chap-badge{transform:scale(1.06)}.chap.active .chap-badge{color:color-mix(in srgb,var(--w) 75%,var(--hi));background:color-mix(in srgb,var(--w) 12%,var(--bg));box-shadow:0 0 0 1.5px var(--w) inset,0 0 22px -4px color-mix(in srgb,var(--w) 70%,transparent)}.chap.done .chap-badge{background:var(--w);color:#0a0b10;box-shadow:0 0 0 4px color-mix(in srgb,var(--w) 18%,transparent)}.chap.capstone .chap-badge{visibility:hidden}.chap.capstone .chap-head{padding-bottom:6px}.chap-text{display:flex;flex-direction:column;min-width:0}.chap-eyebrow{font:600 10.5px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3)}.chap.active .chap-eyebrow{color:color-mix(in srgb,var(--w) 70%,var(--hi))}.chap-title{font-weight:680;font-size:18px;letter-spacing:-.022em;margin-top:6px;transition:color .2s}.chap.locked .chap-title{color:var(--text-2)}.chap-sum{display:none;margin-top:4px;font-size:12.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chap-sum i{font-style:normal;margin:0 6px;opacity:.6}.chap.collapsed .chap-sum{display:block;animation:rise .3s var(--ease) both}.chap-meta{display:flex;align-items:center;gap:12px}.chap-seg{display:flex;gap:3px}.chap-seg i{width:14px;height:4px;border-radius:2px;background:var(--raise-2);transition:background .3s}.chap-seg i.on{background:var(--w)}.chap-count{font:600 12.5px/1 var(--mono);color:var(--text-2);min-width:26px;text-align:right}.chap-stars{display:inline-flex;align-items:center;gap:5px;font:600 12.5px/1 var(--mono);color:var(--text)}.chap-stars span{color:var(--text-3);margin-left:-4px}.chap-stars svg{width:14px;height:14px;fill:var(--gold);filter:drop-shadow(0 0 4px rgba(255,204,77,.45))}.chap-chev{width:28px!important;height:28px!important;padding:6px;border-radius:8px;color:var(--text-3);transition:transform .32s var(--ease),background .2s,color .2s}.chap.collapsed .chap-chev{transform:rotate(-90deg)}.chap-body{display:grid;grid-template-rows:1fr;transition:grid-template-rows .38s var(--ease)}.chap.collapsed .chap-body{grid-template-rows:0fr}.chap-clip{min-height:0;overflow:hidden}.chap-clip>.tl{transition:opacity .3s var(--ease),transform .38s var(--ease)}.chap.collapsed .chap-clip>.tl{opacity:0;transform:translateY(-6px)}.chap.locked .tl-row.locked{opacity:.45}.tl{list-style:none;margin:0;padding:0;position:relative}.tl-row:before,.tl-row:after,.chap-head:before,.chap-head:after{content:"";position:absolute;left:27px;width:2px;background:var(--line-2);pointer-events:none;transition:background .4s var(--ease)}.tl-row:before,.chap-head:before{top:0;height:50%}.tl-row:after,.chap-head:after{top:50%;bottom:0}.tl-row.done:before,.tl-row.done:after,.tl-row.current:before{background:var(--w)}.tl-row.done:after{box-shadow:0 0 8px color-mix(in srgb,var(--w) 50%,transparent)}.chap.done .chap-head:before,.chap.done .chap-head:after,.chap.active .chap-head:before,.chap.active .chap-head:after{background:var(--w)}.chap:first-child .chap-head:before,.chap.capstone .tl-row:last-child:after{display:none}.tl-row{position:relative;animation:rise .45s var(--ease) both;animation-delay:calc(80ms + var(--i, 0) * 45ms)}.tl-btn{width:100%;display:grid;grid-template-columns:56px minmax(0,1fr) auto auto;align-items:center;gap:14px;padding:12px 16px 12px 0;border-radius:16px;text-align:left;transition:background .2s,box-shadow .2s,transform .2s var(--ease)}.tl-btn:hover{background:var(--panel);box-shadow:0 0 0 1px var(--line) inset}.tl-btn:active{transform:scale(.995)}.tl-node{justify-self:center;width:22px;height:22px;border-radius:50%;position:relative;z-index:1;display:grid;place-items:center;background:var(--bg);box-shadow:0 0 0 2px var(--line-3) inset;transition:transform .3s var(--spring)}.tl-btn:hover .tl-node{transform:scale(1.12)}.tl-node svg.ic{width:12px;height:12px;stroke-width:3}.tl-row.done .tl-node{background:var(--w);box-shadow:0 0 0 4px color-mix(in srgb,var(--w) 20%,transparent);color:#0a0b10}.tl-row.current .tl-node{background:var(--bg);box-shadow:0 0 0 2px var(--w) inset}.tl-row.current .tl-node:after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--w);box-shadow:0 0 12px var(--w)}.tl-row.current .tl-node:before{content:"";position:absolute;inset:-6px;border-radius:50%;border:2px solid var(--w);opacity:0;animation:ping 2.2s var(--ease) infinite}@keyframes ping{0%{transform:scale(.6);opacity:.8}80%,to{transform:scale(1.5);opacity:0}}.tl-row.locked{opacity:.5}.tl-row.locked .tl-node{color:var(--text-3)}.tl-main{display:flex;flex-direction:column;min-width:0}.tl-title,.tl-sub{display:block}.tl-file{font:500 12.5px/1 var(--mono);color:var(--text-3);display:block}.tl-file .ext{color:color-mix(in srgb,var(--w) 70%,var(--hi))}.tl-title{font-weight:600;font-size:15.5px;letter-spacing:-.012em;margin-top:5px}.tl-sub{font-size:12.5px;color:var(--text-3);margin-top:2px}.tl-idx{font:500 11.5px/1 var(--mono);letter-spacing:.02em;color:var(--text-2)}.tl-idx:after{content:"·";margin:0 7px;color:var(--text-3);font-family:var(--font)}.tl-n{font:600 10px/1 var(--mono);color:var(--text-3)}.tl-tag{display:inline-flex;align-items:center;gap:4px;height:18px;padding:0 7px 0 5px;margin-left:8px;border-radius:999px;vertical-align:middle;font:600 10px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--gold);background:#ffcc4d1a;box-shadow:0 0 0 1px #ffcc4d47 inset}.tl-tag svg.ic{width:11px;height:11px;stroke-width:2.2}.tl-tag.workshop{color:color-mix(in srgb,var(--w) 70%,var(--hi));background:var(--w-soft);box-shadow:0 0 0 1px var(--w-line) inset}.tl-row.challenge .tl-node{border-radius:7px;transform:rotate(45deg) scale(.86)}.tl-row.challenge .tl-node>*{transform:rotate(-45deg)}.tl-row.challenge .tl-btn:hover .tl-node{transform:rotate(45deg) scale(.98)}.tl-row.challenge.current .tl-node:after{border-radius:3px}.tl-row.challenge.current .tl-node:before{border-radius:9px}.tl-row.flash .tl-btn{animation:rowFlash 1.4s var(--ease)}@keyframes rowFlash{0%,30%{background:var(--w-soft);box-shadow:0 0 0 1px var(--w-line) inset,0 0 0 4px color-mix(in srgb,var(--w) 10%,transparent)}}.stars{display:inline-flex;gap:2px}.stars svg{width:15px;height:15px;fill:var(--raise-2);stroke:none}.stars svg.on{fill:var(--gold);filter:drop-shadow(0 0 4px rgba(255,204,77,.45))}.tl-go{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;color:var(--text-3);transition:background .2s,color .2s,transform .2s var(--ease)}.tl-btn:hover .tl-go{background:var(--w);color:#0a0b10;transform:translate(2px)}.tl-row.locked .tl-btn:hover .tl-go{background:var(--raise-2);color:var(--text-2)}.tl-row.project{padding-top:4px}.tl-row.project .tl-btn{grid-template-columns:56px minmax(0,1fr) 220px;padding:14px 14px 14px 0;background:linear-gradient(90deg,transparent 56px,var(--panel) 56px);box-shadow:none}.tl-row.project .tl-btn:after{content:"";position:absolute;inset:0 0 0 56px;border-radius:16px;pointer-events:none;box-shadow:0 0 0 1px var(--w-line) inset}.tl-row.project .tl-node{width:28px;height:28px;border-radius:9px;transform:rotate(45deg)}.tl-row.project .tl-node svg{transform:rotate(-45deg)}.tl-row.project .tl-main{padding-left:18px}.tl-row.project .tl-btn:hover{background:linear-gradient(90deg,transparent 56px,var(--panel-2) 56px)}.thumb{position:relative;aspect-ratio:16 / 10;border-radius:10px;overflow:hidden;background:#fff;box-shadow:0 0 0 1px var(--line-2),0 10px 30px -10px #000000b3}.thumb iframe{position:absolute;left:0;top:0;width:300%;height:300%;border:0;transform:scale(.3334);transform-origin:0 0;pointer-events:none;background:#fff}.thumb.empty{background:repeating-linear-gradient(135deg,var(--panel-2) 0 10px,var(--panel) 10px 20px);display:grid;place-items:center;color:var(--text-3);font:500 12px/1.3 var(--mono);text-align:center}.page{max-width:1160px;margin:0 auto;padding:34px clamp(20px,3.4vw,48px) 60px}.page-head{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:24px;animation:rise .4s var(--ease) both}.page-head h1{margin:6px 0 4px;font-size:32px;letter-spacing:-.035em;font-weight:750}.page-head p{margin:0;color:var(--text-2)}.sites{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:18px}.site{--w: inherit;border-radius:var(--r-lg);overflow:hidden;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset,var(--shadow);display:flex;flex-direction:column;animation:rise .45s var(--ease) both;animation-delay:calc(var(--i, 0) * 50ms);transition:transform .25s var(--ease),box-shadow .25s}.site:hover{transform:translateY(-3px);box-shadow:0 0 0 1px var(--w-line) inset,var(--shadow-lg)}.site .thumb{border-radius:0;box-shadow:none;aspect-ratio:16 / 10}.site .thumb:after{content:"";position:absolute;inset:0;box-shadow:0 -1px 0 var(--line) inset}.site-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:4px;flex:1}.site-body h3{margin:0;font-size:15.5px;letter-spacing:-.012em;display:flex;align-items:center;gap:8px}.site-body h3 i{width:8px;height:8px;border-radius:50%;background:var(--w);box-shadow:0 0 8px var(--w)}.site-body .meta{font:500 12px/1.4 var(--mono);color:var(--text-3)}.site-actions{display:flex;gap:8px;margin-top:12px}.site.locked{opacity:.6}.site.locked .thumb{display:grid;place-items:center}.empty-state{grid-column:1 / -1;text-align:center;padding:60px 20px;border-radius:var(--r-xl);background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;color:var(--text-2)}.empty-state .jd{width:84px;height:84px;margin:0 auto 10px}.empty-state h3{margin:0 0 6px;color:var(--text);font-size:18px}.search{position:relative;width:min(340px,100%)}.search input{width:100%;height:42px;border-radius:11px;border:0;outline:0;padding:0 14px 0 40px;background:var(--panel);box-shadow:0 0 0 1px var(--line-2) inset;color:var(--text);font-size:14px;transition:box-shadow .2s}.search input:focus{box-shadow:0 0 0 1px var(--brand) inset,0 0 0 4px color-mix(in srgb,var(--brand) 22%,transparent)}.search svg.ic{position:absolute;left:13px;top:12px;color:var(--text-3)}.sheet-world{margin-top:28px}.sheet-world h2{display:flex;align-items:center;gap:10px;font-size:15px;margin:0 0 12px;letter-spacing:-.01em}.sheet-world h2 .ri-num{width:26px;height:26px;border-radius:8px;font-size:12px}.sheet-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}.sheet-card{--w: inherit;border-radius:var(--r-lg);background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;padding:16px;display:flex;flex-direction:column;gap:8px;min-width:0;animation:rise .4s var(--ease) both;animation-delay:calc(var(--i, 0) * 30ms)}.sheet-card h3{margin:0;font-size:14.5px;letter-spacing:-.01em}.sheet-card p{margin:0;color:var(--text-2);font-size:13.5px}.sheet-card .codeblock{margin-top:auto}.sheet-card.locked{position:relative;overflow:hidden}.sheet-card.locked>*:not(.lock-veil){filter:blur(5px);opacity:.5}.lock-veil{position:absolute;inset:0;display:grid;place-content:center;gap:6px;text-align:center;color:var(--text-2);font-size:13px}.lock-veil svg.ic{margin:0 auto}.codeblock{margin:4px 0 0;padding:12px 14px;border-radius:10px;background:var(--bg-2);box-shadow:0 0 0 1px var(--line) inset;font:450 12.5px/1.65 var(--mono);overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;max-height:220px;color:var(--code)}.tk-tag{color:#7cc4ff}.tk-attr{color:#ffcb6b}.tk-string{color:#a6e3a1}.tk-comment{color:#5f6788;font-style:italic}.tk-punct{color:#8a91ad}.tk-selector{color:#d4a8ff}.tk-prop{color:#7cc4ff}.tk-value,.tk-number{color:#f9b47c}.tk-keyword{color:#c99bff}.tk-fn{color:#82e0ff}.tk-builtin{color:#ff9ecd}#player{position:fixed;inset:0;z-index:30;display:none;flex-direction:column;background:var(--bg)}#player.open{display:flex;animation:playerIn .42s var(--ease) both}#player.closing{animation:playerOut .26s var(--ease) both}@keyframes playerIn{0%{opacity:0;transform:scale(.985)}}@keyframes playerOut{to{opacity:0;transform:scale(.985)}}.pl-top{height:58px;flex:none;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto auto;align-items:center;gap:14px;padding:0 14px 0 10px;border-bottom:1px solid var(--line);background:var(--bg-2)}.pl-title{display:flex;align-items:center;gap:12px;min-width:0}.pl-dot{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:var(--w-soft);color:var(--w);box-shadow:0 0 0 1px var(--w-line) inset;font:700 12px/1 var(--mono);flex:none}.pl-name{font-weight:650;letter-spacing:-.012em;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pl-file{font:500 12px/1 var(--mono);color:var(--text-3);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pl-pos:before{content:"·";margin:0 7px}.pl-steps{display:flex;gap:5px;align-items:center}.pl-steps i{width:30px;height:6px;border-radius:6px;background:var(--raise-2);position:relative;overflow:hidden;transition:width .35s var(--ease),background .3s}.pl-steps i.done{background:var(--w)}.pl-steps i.on{width:46px;background:var(--raise-2)}.pl-steps i.on:after{content:"";position:absolute;inset:0;background:var(--w);border-radius:inherit;animation:fillIn .5s var(--ease) both;transform-origin:left}@keyframes fillIn{0%{transform:scaleX(0)}to{transform:scaleX(.5)}}.pl-steps .count{font:500 12px/1 var(--mono);color:var(--text-3);margin-left:8px;min-width:32px}.pl-body{flex:1;min-height:0;display:grid;grid-template-columns:380px minmax(0,1fr);transition:grid-template-columns .4s var(--ease)}.coach{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line);background:linear-gradient(180deg,var(--bg-2),var(--bg))}.coach-head{display:flex;align-items:center;gap:12px;padding:16px 18px 6px}.coach-head .jd{width:48px;height:48px}.coach-who b{display:block;font-size:14px;font-weight:650;letter-spacing:-.01em}.coach-who span{font-size:12px;color:var(--text-3)}.wave{margin-left:auto;display:flex;gap:3px;align-items:center;height:22px;padding:0 4px;opacity:0;transition:opacity .25s}.wave i{width:3px;height:6px;border-radius:3px;background:var(--brand-2)}.talking .wave{opacity:1}.talking .wave i{animation:wave .9s var(--ease) infinite}.talking .wave i:nth-child(2){animation-delay:.12s}.talking .wave i:nth-child(3){animation-delay:.24s}.talking .wave i:nth-child(4){animation-delay:.36s}@keyframes wave{50%{height:18px}}.replay{width:32px;height:32px;border-radius:9px}.coach-scroll{flex:1;min-height:0;overflow:auto;padding:10px 18px 18px}.bubble{position:relative;padding:16px 18px;border-radius:4px 18px 18px;background:var(--panel-2);box-shadow:0 0 0 1px var(--line-2) inset;animation:bubbleIn .45s var(--spring) both}@keyframes bubbleIn{0%{opacity:0;transform:translateY(6px) scale(.98);transform-origin:top left}}.bubble .kicker{font:600 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--w);margin-bottom:8px;display:flex;align-items:center;gap:6px}.bubble h3{margin:0 0 8px;font-size:18px;letter-spacing:-.02em;line-height:1.25}.bubble .rich{color:var(--text-2);font-size:14.5px;line-height:1.62}.bubble .rich p{margin:0 0 8px}.bubble .rich p:last-child{margin:0}.try-tip{margin-top:12px;display:flex;gap:10px;align-items:flex-start;font-size:13px;color:var(--text-3)}.try-tip svg.ic{width:16px;height:16px;color:var(--w);margin-top:2px}.checks{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.checks li{display:grid;grid-template-columns:22px 1fr;gap:10px;align-items:start;padding:10px 12px;border-radius:11px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;font-size:13.5px;color:var(--text-2);line-height:1.45;transition:background .3s,box-shadow .3s,color .3s;animation:rise .35s var(--ease) both;animation-delay:calc(var(--i, 0) * 35ms)}.checks li .st{width:20px;height:20px;border-radius:50%;display:grid;place-items:center;margin-top:0;box-shadow:0 0 0 1.5px var(--line-3) inset;transition:background .25s,box-shadow .25s,transform .35s var(--spring)}.checks li .st svg{width:12px;height:12px;stroke-width:3;opacity:0;transform:scale(.4);transition:opacity .2s,transform .35s var(--spring)}.checks li.ok{color:var(--text);background:color-mix(in srgb,var(--ok) 7%,var(--panel));box-shadow:0 0 0 1px #34d39940 inset}.checks li.ok .st{background:var(--ok);box-shadow:none;color:#04150e}.checks li.bad{color:var(--text);background:color-mix(in srgb,var(--bad) 7%,var(--panel));box-shadow:0 0 0 1px #ff5d734d inset}.checks li.bad .st{background:var(--bad);box-shadow:none;color:#fff}.checks li.ok .st svg,.checks li.bad .st svg{opacity:1;transform:none}.checks li.pending .st{animation:spin .8s linear infinite;box-shadow:0 0 0 1.5px var(--line-2) inset;border-top:1.5px solid var(--brand-2)}@keyframes spin{to{transform:rotate(360deg)}}.verdict{margin-top:14px;display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;font-weight:600;font-size:14.5px;animation:verdictIn .45s var(--spring) both}.verdict .vi{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;flex:none}.verdict small{display:block;font-weight:450;font-size:12.5px;opacity:.8;margin-top:1px}.verdict.bad{background:var(--bad-soft);color:#ffb3bf;box-shadow:0 0 0 1px #ff5d7359 inset;animation:verdictIn .45s var(--spring) both,shake .42s .05s var(--ease)}.verdict.bad .vi{background:var(--bad);color:#fff}.verdict.ok{background:var(--ok-soft);color:#a7f3d0;box-shadow:0 0 0 1px #34d39959 inset}.verdict.ok .vi{background:var(--ok);color:#04150e}@keyframes verdictIn{0%{opacity:0;transform:translateY(6px) scale(.97)}}@keyframes shake{20%{transform:translate(-6px)}40%{transform:translate(5px)}60%{transform:translate(-3px)}80%{transform:translate(2px)}}.hint-box{margin-top:12px;padding:12px 14px;border-radius:12px;font-size:13.5px;color:#ffe7a6;line-height:1.5;background:#ffcc4d14;box-shadow:0 0 0 1px #ffcc4d40 inset;animation:verdictIn .4s var(--spring) both}.hint-box b{display:flex;align-items:center;gap:6px;font:600 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px;color:var(--gold)}.hint-box code{font-family:var(--mono);font-size:12.5px;color:#fff3cf;word-break:break-word}.v-more{margin-top:10px;display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}.why-btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 14px;border-radius:999px;font-weight:600;font-size:13px;color:var(--brand-2);background:color-mix(in srgb,var(--brand) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--brand) 45%,transparent) inset;transition:background .2s,transform .14s var(--ease),opacity .2s;animation:verdictIn .45s .12s var(--spring) both}.why-btn:hover{background:color-mix(in srgb,var(--brand) 24%,transparent)}.why-btn:active{transform:scale(.97)}.why-btn[disabled]{opacity:.75;pointer-events:none}.why-btn .ic{width:15px;height:15px}.why-spin{width:13px;height:13px;border-radius:50%;box-shadow:0 0 0 1.5px color-mix(in srgb,var(--brand-2) 30%,transparent) inset;border-top:1.5px solid var(--brand-2);animation:spin .8s linear infinite}.why-box{margin-top:12px;padding:12px 14px;border-radius:12px;font-size:13.5px;line-height:1.55;color:var(--text);background:color-mix(in srgb,var(--brand) 10%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--brand) 32%,transparent) inset;animation:verdictIn .4s var(--spring) both}.why-box b{display:flex;align-items:center;gap:6px;font:600 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;margin-bottom:7px;color:var(--brand-2)}.why-box p{margin:0}.why-box code{font-family:var(--mono);font-size:12.5px;color:var(--code-em);word-break:break-word}.why-foot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:10px}.why-line{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:8px;font:600 12px/1 var(--mono);color:var(--text);background:rgba(var(--tint),.06);box-shadow:0 0 0 1px var(--line-2) inset}.why-line:hover{background:rgba(var(--tint),.1)}.why-line .ic{width:13px;height:13px}.why-note{font-size:11.5px;color:var(--text-3)}.coach-foot{flex:none;padding:14px 18px 16px;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center;background:var(--bg-2)}.coach-foot .grow,.coach-foot .btn.primary,.coach-foot .btn.ok,.coach-foot .btn.accent{flex:1}.linkish{color:var(--text-3);font-size:12.5px;text-decoration:underline;text-underline-offset:3px}.linkish:hover{color:var(--text-2)}.ws{min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);background:var(--bg)}.ws.stacked{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) minmax(0,1fr)}.pane{min-width:0;min-height:0;display:flex;flex-direction:column}.pane+.pane{border-left:1px solid var(--line)}.ws.stacked .pane+.pane{border-left:0;border-top:1px solid var(--line)}.pane-bar{height:44px;flex:none;display:flex;align-items:center;gap:4px;padding:0 8px;border-bottom:1px solid var(--line);background:var(--bg-2)}.ftab{height:30px;padding:0 12px;border-radius:8px;display:inline-flex;align-items:center;gap:8px;font:500 12.5px/1 var(--mono);color:var(--text-3);position:relative;transition:background .2s,color .2s}.ftab:hover{color:var(--text-2);background:var(--panel)}.ftab[aria-selected=true]{color:var(--text);background:var(--panel-2);box-shadow:0 0 0 1px var(--line-2) inset}.ftab .lang{width:8px;height:8px;border-radius:2px}.ftab .lang.html{background:#ff7a59}.ftab .lang.css{background:#3d8bff}.ftab .lang.js{background:#f7df1e}.ftab .lang.server{background:#34d399}.ftab .lang.sh{background:#94a3b8}.ftab .dirty{width:6px;height:6px;border-radius:50%;background:var(--text-3);opacity:0;transition:opacity .2s}.ftab.is-dirty .dirty{opacity:1}.pane-bar .sp{flex:1}.tool{height:30px;padding:0 10px;border-radius:8px;display:inline-flex;align-items:center;gap:6px;color:var(--text-3);font-size:12.5px;font-weight:550;transition:background .2s,color .2s}.tool:hover{background:var(--panel-2);color:var(--text)}.tool svg.ic{width:15px;height:15px}.tool.on{color:var(--text);background:var(--panel-2);box-shadow:0 0 0 1px var(--line-2) inset}.eds{flex:1;min-height:0;position:relative}.eds>.ed{position:absolute;inset:0}.eds>.ed[hidden]{display:none}.ed{--ed-fs: 14.5px;--ed-lh: 1.7em;--ed-pad: 14px;--ed-gw: 46px;display:grid;grid-template-columns:var(--ed-gw) minmax(0,1fr);font:450 var(--ed-fs)/var(--ed-lh) var(--mono);font-feature-settings:"liga" 0,"calt" 0;background:var(--bg);overflow:hidden;tab-size:2}.ed-gutter{overflow:hidden;padding:var(--ed-pad) 0;text-align:right;user-select:none;border-right:1px solid var(--line);background:var(--bg)}.ed-lines span{display:block;padding-right:12px;color:var(--gutter);font-size:.86em;height:var(--ed-lh);line-height:var(--ed-lh)}.ed-lines span.on{color:var(--text-2)}.ed-body{position:relative;overflow:hidden}.ed-active{position:absolute;left:0;right:0;top:0;height:var(--ed-lh);pointer-events:none;background:rgba(var(--tint),.025);box-shadow:0 1px rgba(var(--tint),.02) inset,0 -1px rgba(var(--tint),.02) inset;opacity:0;transition:opacity .2s}.ed.is-focus .ed-active{opacity:1}.ed-hl,.ed-input,.ed-measure{margin:0;padding:var(--ed-pad) 18px 40vh var(--ed-pad);border:0;font:inherit;line-height:var(--ed-lh);letter-spacing:0;white-space:pre-wrap;overflow-wrap:break-word;word-break:normal;tab-size:2}.ed-hl{position:absolute;left:0;top:0;width:100%;pointer-events:none;color:var(--code);will-change:transform}.ed-hl code{font:inherit}.ed-measure{position:absolute;left:0;top:0;width:100%;visibility:hidden;pointer-events:none}.ed-measure div{min-height:var(--ed-lh)}.ed-input{position:absolute;inset:0;width:100%;height:100%;resize:none;outline:0;background:transparent;color:transparent;caret-color:var(--caret);overflow:hidden auto;-webkit-text-fill-color:transparent}.ed-input::selection{background:#7c5cff61;-webkit-text-fill-color:transparent}.ed.is-ro .ed-input{caret-color:transparent}.symbar{flex:none;display:none;gap:6px;padding:8px;overflow-x:auto;border-top:1px solid var(--line);background:var(--bg-2)}.touch .symbar{display:flex}.symbar button{min-width:42px;height:38px;padding:0 10px;border-radius:9px;flex:none;font:600 15px/1 var(--mono);color:var(--text);background:var(--raise);box-shadow:0 0 0 1px var(--line-2) inset,0 2px #00000059}.symbar button:active{transform:translateY(1px);background:var(--raise-2)}.pv-chrome{gap:8px}.dots{display:flex;gap:6px;padding:0 6px 0 4px}.dots i{width:10px;height:10px;border-radius:50%;background:#2a2f42}.dots i:nth-child(1){background:#ff5f57}.dots i:nth-child(2){background:#febc2e}.dots i:nth-child(3){background:#28c840}.urlbar{flex:1;min-width:0;height:28px;border-radius:8px;display:flex;align-items:center;gap:8px;padding:0 10px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;font:500 12px/1 var(--mono);color:var(--text-3);white-space:nowrap;overflow:hidden}.urlbar svg.ic{width:13px;height:13px;color:var(--ok)}.urlbar b{color:var(--text-2);font-weight:500}.urlbar .u{min-width:0;overflow:hidden;text-overflow:ellipsis}.live{flex:none}.live{display:inline-flex;align-items:center;gap:6px;font:600 10.5px/1 var(--mono);letter-spacing:.1em;color:var(--ok);text-transform:uppercase;margin-left:auto}.live i{width:6px;height:6px;border-radius:50%;background:var(--ok);box-shadow:0 0 8px var(--ok)}.live.busy i{animation:blink .6s ease-in-out infinite}@keyframes blink{50%{opacity:.25}}.devices{display:flex;gap:2px;padding:2px;border-radius:9px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset}.devices button{width:30px;height:26px;border-radius:7px;display:grid;place-items:center;color:var(--text-3)}.devices button svg.ic{width:15px;height:15px}.devices button[aria-pressed=true]{background:var(--raise-2);color:var(--text)}.pv-stage{flex:1;min-height:0;position:relative;overflow:auto;display:flex;justify-content:center;background:#e9ebf2;background-image:radial-gradient(rgba(10,12,30,.08) 1px,transparent 1px);background-size:16px 16px}.pv-frame{width:100%;height:100%;border:0;background:#fff;display:block;transition:width .4s var(--ease),box-shadow .4s,border-radius .4s,margin .4s}.pv-stage.dev-tablet .pv-frame,.pv-stage.dev-phone .pv-frame{flex:none;margin:16px 0;height:calc(100% - 32px);border-radius:18px;box-shadow:0 0 0 8px #11131a,0 0 0 9px #2a2f42,0 30px 60px -20px #00000080}.pv-stage.dev-tablet .pv-frame{width:600px}.pv-stage.dev-phone .pv-frame{width:375px}.pv-toast{position:absolute;left:50%;bottom:14px;transform:translate(-50%);z-index:2;padding:9px 14px;border-radius:10px;background:#11131a;color:var(--text);font-size:12.5px;box-shadow:var(--shadow-lg);display:flex;gap:8px;align-items:center;max-width:90%;animation:verdictIn .3s var(--spring) both}.pv-toast code{font-family:var(--mono);color:var(--brand-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.console{flex:none;height:160px;display:flex;flex-direction:column;border-top:1px solid var(--line);background:var(--bg-2);transition:height .3s var(--ease)}.console.min{height:36px}.js-only .pv-stage,.js-only .devices{display:none}.js-only .console{flex:1;height:auto;border-top:0;background:var(--bg)}.js-only .console.min{flex:none;height:36px}.js-only .console-out{font-size:13.5px;padding-top:8px}.js-only .console-out div{padding-top:4px;padding-bottom:4px}.console-bar{height:36px;flex:none;display:flex;align-items:center;gap:8px;padding:0 8px 0 12px;font:600 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-3)}.console-bar .count{padding:2px 6px;border-radius:6px;background:var(--raise);letter-spacing:0}.console-bar .count.err{background:var(--bad-soft);color:var(--bad)}.console-bar .sp{flex:1}.console-out{flex:1;overflow:auto;padding:4px 0 10px;font:450 12.5px/1.6 var(--mono)}.console-out div{padding:2px 12px 2px 30px;position:relative;white-space:pre-wrap;word-break:break-word;color:var(--code);border-bottom:1px solid rgba(var(--tint),.03);animation:logIn .25s var(--ease) both}.console-out div:before{content:"›";position:absolute;left:14px;color:var(--text-3)}.console-out div.error{color:#ffb3bf;background:#ff5d730f}.console-out div.warn{color:#ffe08a;background:#ffcc4d0f}.console-out div.sh-cmd{color:var(--text);font-weight:600;padding-top:7px}.console-out div.sh-cmd:before{content:"$";color:#34d399;font-weight:700}.console-out div.sh-out{color:var(--text-2)}.console-out div.sh-out:before{content:""}.console-out div.srv:before{content:"server";left:0;top:4px;font-size:8.5px;letter-spacing:.04em;text-transform:uppercase;color:#34d399;background:#34d3991f;border-radius:4px;padding:0 3px;line-height:13px;transform:translate(2px)}.console-out div.srv{padding-left:52px;color:#b9f5dc}.console-out div.error:before{content:"✕";color:var(--bad);font-size:10px;top:4px}.console-out div.warn{color:#ffe08a;background:#ffcc4d0d}.console-out .empty{color:var(--text-3);font-style:italic}.console-out .empty:before{content:""}@keyframes logIn{0%{opacity:0;transform:translate(-4px)}}.pl-body.quiz{grid-template-columns:1fr}.pl-body.quiz .ws{display:none}.pl-body.quiz .coach{border-right:0;background:none;align-items:center;justify-content:center}.pl-body.quiz .coach-inner{width:min(720px,100%);display:flex;flex-direction:column;min-height:0;max-height:100%}.coach-inner{display:flex;flex-direction:column;min-height:0;flex:1}.pl-body.quiz .coach-inner{flex:none}.pl-body.quiz .coach-foot{background:none;border-top:0}.bubble .quiz-q{font-size:clamp(20px,2.2vw,26px);font-weight:680;letter-spacing:-.025em;line-height:1.3;margin:0;color:var(--text)}.quiz-q code{font-size:.8em;white-space:normal;box-decoration-break:clone;-webkit-box-decoration-break:clone;line-height:1.9}.opts{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:20px}.opt{display:flex;align-items:center;gap:14px;text-align:left;min-height:64px;padding:12px 16px;border-radius:14px;background:var(--panel);box-shadow:0 0 0 1px var(--line-2) inset,0 2px #0000004d;font-size:15px;font-weight:550;transition:background .2s,box-shadow .2s,transform .15s var(--ease);animation:rise .4s var(--ease) both;animation-delay:calc(var(--i, 0) * 50ms + .12s)}.opt:hover{background:var(--panel-2);box-shadow:0 0 0 1px var(--line-3) inset,0 2px #0000004d}.opt:active{transform:translateY(1px) scale(.99)}.opt .key{width:28px;height:28px;border-radius:8px;flex:none;display:grid;place-items:center;font:600 12px/1 var(--mono);color:var(--text-3);background:var(--raise);box-shadow:0 0 0 1px var(--line-2) inset}.opt .txt.code{font-family:var(--mono);font-size:14px;color:var(--code-em)}.opt.picked-bad{box-shadow:0 0 0 1.5px var(--bad) inset;background:color-mix(in srgb,var(--bad) 8%,var(--panel));animation:shake .42s var(--ease)}.opt.picked-bad .key{background:var(--bad);color:#fff;box-shadow:none}.opt.picked-ok{box-shadow:0 0 0 1.5px var(--ok) inset;background:color-mix(in srgb,var(--ok) 10%,var(--panel))}.opt.picked-ok .key{background:var(--ok);color:#04150e;box-shadow:none}.opt[disabled]{pointer-events:none}.opt.dim{opacity:.45}.scrim{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:#0304089e;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fade .25s var(--ease) both}.scrim.out{animation:fadeOut .2s var(--ease) both}@keyframes fade{0%{opacity:0}}@keyframes fadeOut{to{opacity:0}}.modal{width:min(480px,100%);max-height:calc(100vh - 40px);overflow:auto;border-radius:var(--r-xl);background:var(--panel);box-shadow:0 0 0 1px var(--line-2) inset,var(--shadow-lg);animation:modalIn .42s var(--spring) both}.scrim.out .modal{animation:modalOut .2s var(--ease) both}@keyframes modalIn{0%{opacity:0;transform:translateY(14px) scale(.97)}}@keyframes modalOut{to{opacity:0;transform:translateY(8px) scale(.98)}}.modal-head{padding:22px 24px 4px;display:flex;align-items:start;justify-content:space-between;gap:12px}.modal-head h2{margin:0;font-size:19px;letter-spacing:-.02em}.modal-head p{margin:4px 0 0;color:var(--text-2);font-size:14px}.modal-body{padding:16px 24px 24px}.modal-foot{padding:0 24px 24px;display:flex;gap:10px;justify-content:flex-end}.win{text-align:center;padding:34px 28px 26px;position:relative;overflow:hidden}.win:before{content:"";position:absolute;inset:-40% -20% auto;height:300px;z-index:0;background:radial-gradient(50% 50% at 50% 50%,color-mix(in srgb,var(--w) 45%,transparent),transparent 70%)}.win>*{position:relative}.win .eyebrow{color:color-mix(in srgb,var(--w) 70%,var(--hi))}.win h2{margin:10px 0 6px;font-size:30px;letter-spacing:-.035em;font-weight:760}.win p{margin:0 auto;color:var(--text-2);max-width:340px}.big-stars{display:flex;justify-content:center;gap:10px;margin:22px 0 18px}.big-stars svg{width:54px;height:54px;fill:var(--raise-2);stroke:none;transform:scale(.4) rotate(-30deg);opacity:0;animation:starIn .6s var(--spring) forwards}.big-stars svg:nth-child(2){width:66px;height:66px;margin-top:-10px;animation-delay:.18s}.big-stars svg:nth-child(3){animation-delay:.36s}.big-stars svg.on{fill:var(--gold);filter:drop-shadow(0 6px 18px rgba(255,204,77,.55))}@keyframes starIn{to{transform:none;opacity:1}}.win-stats{display:flex;justify-content:center;gap:10px;margin:0 0 22px}.win-stats .stat{padding:10px 16px;border-radius:12px;background:var(--panel-2);box-shadow:0 0 0 1px var(--line) inset;min-width:96px}.win-stats b{display:block;font:700 20px/1.1 var(--mono);letter-spacing:-.03em}.win-stats span{font-size:12px;color:var(--text-3)}.win .thumb{margin:0 0 20px;aspect-ratio:16 / 9}.win-actions{display:grid;gap:8px}.win-actions .btn{height:46px;min-width:0}.win-actions .btn.primary{order:-1;height:50px;font-size:15px}.win-actions .btn span.t{overflow:hidden;text-overflow:ellipsis}.pics{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.pic{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 6px;border-radius:12px;background:var(--panel-2);box-shadow:0 0 0 1px var(--line) inset;transition:background .2s,box-shadow .2s,transform .15s var(--ease)}.pic:hover{background:var(--raise);box-shadow:0 0 0 1px var(--brand) inset}.pic:active{transform:scale(.96)}.pic img{width:48px;height:48px}.pic code{font:500 10.5px/1.2 var(--mono);color:var(--text-3)}.pic.copied{box-shadow:0 0 0 1.5px var(--ok) inset}.set-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--line)}.set-row:last-child{border-bottom:0}.set-row b{display:block;font-weight:600;font-size:14.5px}.set-row span{font-size:13px;color:var(--text-3)}.switch{position:relative;width:44px;height:26px;border-radius:26px;background:var(--raise-2);box-shadow:0 0 0 1px var(--line-2) inset;transition:background .25s;flex:none}.switch:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:transform .3s var(--spring)}.switch[aria-checked=true]{background:var(--brand)}.switch[aria-checked=true]:after{transform:translate(18px)}.seg{display:flex;padding:3px;border-radius:10px;background:var(--panel-2);box-shadow:0 0 0 1px var(--line) inset}.seg button{height:30px;padding:0 12px;border-radius:7px;font-size:13px;font-weight:600;color:var(--text-3)}.seg button[aria-pressed=true]{background:var(--raise-2);color:var(--text);box-shadow:0 0 0 1px var(--line-2) inset}.viewer{position:fixed;inset:0;z-index:70;display:flex;flex-direction:column;background:var(--bg);animation:playerIn .35s var(--ease) both}.viewer .pane-bar{height:52px;padding:0 12px}.viewer iframe{flex:1;border:0;background:#fff;width:100%}#toasts{position:fixed;left:50%;bottom:22px;transform:translate(-50%);z-index:90;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}.toast{padding:11px 16px;border-radius:12px;background:var(--raise);color:var(--text);font-size:14px;font-weight:550;box-shadow:0 0 0 1px var(--line-2) inset,var(--shadow-lg);display:flex;align-items:center;gap:10px;animation:toastIn .4s var(--spring) both}.toast.out{animation:fadeOut .25s var(--ease) both}@keyframes toastIn{0%{opacity:0;transform:translateY(12px) scale(.96)}}.narrow{position:fixed;inset:0;z-index:100;display:none;place-items:center;padding:24px;text-align:center;background:radial-gradient(80% 60% at 50% 0%,rgba(124,92,255,.25),transparent 60%),var(--bg)}.narrow .jd{width:110px;height:110px;margin:0 auto 10px}.narrow h2{margin:0 0 8px;font-size:22px;letter-spacing:-.02em}.narrow p{margin:0 auto 20px;color:var(--text-2);max-width:320px}@media (max-width: 699px){body:not(.narrow-ok) .narrow{display:grid}}#confetti{position:fixed;inset:0;z-index:80;pointer-events:none;width:100%;height:100%}.jd{display:block;overflow:visible;flex:none}.jd .jd-blink{transform-origin:center 52%;animation:jdBlink 5.5s infinite;transform-box:fill-box}@keyframes jdBlink{0%,94%,to{transform:scaleY(1)}96%{transform:scaleY(.1)}}.jd .jd-mouth-talk,.talking .jd .jd-mouth-idle{opacity:0}.talking .jd .jd-mouth-talk{opacity:1;animation:jdTalk .26s ease-in-out infinite alternate;transform-origin:center;transform-box:fill-box}@keyframes jdTalk{0%{transform:scaleY(.35)}to{transform:scaleY(1)}}.jd .jd-glint{animation:jdGlint 6s ease-in-out infinite}@keyframes jdGlint{0%,70%{transform:translate(0);opacity:0}78%{opacity:.9}90%,to{transform:translate(10px);opacity:0}}.jd-wrap{position:relative;flex:none}.jd-wrap:after{content:"";position:absolute;right:0;bottom:2px;width:12px;height:12px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px var(--bg-2)}.rail-group{padding:16px 10px 6px;font:600 10.5px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);display:flex;align-items:center;gap:8px}.rail-group:after{content:"";flex:1;height:1px;background:var(--line)}.rail-list>.rail-group:first-child{padding-top:2px}.con-tabs{display:flex;gap:2px;height:100%}.con-tab{display:flex;align-items:center;gap:7px;padding:0 10px;height:100%;position:relative;font:600 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-3);transition:color .2s}.con-tab svg.ic{width:14px;height:14px}.con-tab:hover{color:var(--text-2)}.con-tab[aria-selected=true]{color:var(--text)}.con-tab[aria-selected=true]:after{content:"";position:absolute;left:10px;right:10px;bottom:0;height:2px;border-radius:2px;background:var(--w)}.console-bar{padding-left:2px}.console-bar .tool span{letter-spacing:0;text-transform:none}.console-bar .tool[hidden]{display:none}.net-out{flex:1;overflow:auto;font:450 12.5px/1.6 var(--mono)}.net-out .empty{padding:10px 14px;color:var(--text-3);font-style:italic}.net-out .empty code{font-style:normal;color:var(--code-em)}.net-row{display:grid;grid-template-columns:64px minmax(0,1fr) 56px 64px;gap:10px;align-items:center;padding:5px 14px;border-bottom:1px solid rgba(var(--tint),.04);animation:logIn .25s var(--ease) both}.net-row.head{position:sticky;top:0;background:var(--bg-2);color:var(--text-3);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;animation:none}.net-row .u{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--code)}.net-row .m{font-weight:700;font-size:11px;color:#7cc4ff}.net-row .m.post{color:#ffcb6b}.net-row .s{justify-self:start;padding:1px 7px;border-radius:6px;font-weight:700;font-size:11.5px}.net-row .s2{color:var(--ok);background:var(--ok-soft)}.net-row .s3{color:#7cc4ff;background:#7cc4ff1f}.net-row .s4,.net-row .s5{color:var(--bad);background:var(--bad-soft)}.net-row .t{color:var(--text-3);text-align:right}.beats{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;counter-reset:beat}.beats li{animation:rise .35s var(--ease) both;animation-delay:calc(var(--i, 0) * 40ms)}.beat{width:100%;display:grid;grid-template-columns:26px 1fr;gap:12px;align-items:start;text-align:left;padding:11px 12px;border-radius:12px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;font-size:13.5px;line-height:1.5;color:var(--text-3);transition:background .25s,box-shadow .25s,color .25s,opacity .25s}.beat:disabled{cursor:default;opacity:.55}.beat .rich{color:inherit}.beat .bn{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;position:relative;font:700 11.5px/1 var(--mono);color:var(--text-3);box-shadow:0 0 0 1.5px var(--line-3) inset;transition:background .25s,color .25s,box-shadow .25s}.beat .bn svg.ic{position:absolute;width:13px;height:13px;stroke-width:2.6;opacity:0;transform:scale(.4);transition:opacity .2s,transform .35s var(--spring)}.beats li.done .beat{color:var(--text-2)}.beats li.done .beat:hover{background:var(--panel-2)}.beats li.done .bn{background:var(--w-soft);box-shadow:0 0 0 1px var(--w-line) inset;color:transparent}.beats li.done .bn svg.ic{opacity:1;transform:none;color:color-mix(in srgb,var(--w) 75%,var(--hi))}.beats li.on .beat{color:var(--text);background:color-mix(in srgb,var(--w) 8%,var(--panel));box-shadow:0 0 0 1px var(--w-line) inset,0 8px 24px -14px var(--w)}.beats li.on .bn{background:var(--w);color:#0a0b10;box-shadow:none}.beat-count{font-size:13px;font-weight:600;color:var(--text);min-width:34px}.beat-count span{color:var(--text-3)}.pl-body.walking .coach-foot .btn.primary,.pl-body.walking .coach-foot .btn.ok{flex:0 1 auto;min-width:150px}.ed-marks{position:absolute;left:0;right:0;top:0;pointer-events:none;will-change:transform}.ed-mark{position:absolute;left:0;right:0;background:color-mix(in srgb,var(--w) 13%,transparent);box-shadow:inset 2px 0 0 var(--w);animation:markGlow 2.8s var(--ease) forwards}@keyframes markGlow{0%{opacity:0}8%{opacity:1}70%{opacity:1}to{opacity:.25}}.ed.is-ro .ed-input{cursor:default}.recap{margin-top:12px;padding:12px;border-radius:14px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset}.recap-head{display:flex;align-items:center;gap:8px;font:600 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-3);margin-bottom:10px}.recap-head svg.ic{width:14px;height:14px}.recap-chips{display:flex;flex-wrap:wrap;gap:6px}.recap-chip{--w: inherit;display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 10px 0 4px;border-radius:9px;font-size:12.5px;font-weight:550;color:var(--text-2);background:var(--panel-2);box-shadow:0 0 0 1px var(--line-2) inset;transition:box-shadow .2s,color .2s,transform .2s var(--spring)}.recap-chip .ri-num{width:22px;height:22px;border-radius:6px;font-size:10.5px}.recap-chip .ri-num svg.ic{width:12px;height:12px;stroke-width:2.6}.recap-chip:hover{color:var(--text);box-shadow:0 0 0 1px var(--w-line) inset;transform:translateY(-1px)}.recap-chip.done .ri-num{background:var(--w);color:#0a0b10}.modal-body.review{display:flex;flex-direction:column;gap:12px;max-height:min(70vh,640px);overflow:auto}.modal-body.review .sheet-card{animation:none}.checks li.bad.nudge{animation:nudge 1.6s var(--ease) 2}@keyframes nudge{30%{box-shadow:0 0 0 1px #ff5d738c inset,0 0 0 4px #ff5d7324}}.tuts{margin-top:24px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.tut-world{display:flex;align-items:center;gap:8px;margin-bottom:4px;font:600 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:color-mix(in srgb,var(--w) 70%,var(--hi))}.tut-world .ri-num{width:20px;height:20px;border-radius:6px;font-size:10.5px}.tut{--w: inherit;display:flex;flex-direction:column;text-align:left;border-radius:var(--r-lg);overflow:hidden;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;transition:box-shadow .25s,transform .3s var(--spring);animation:rise .4s var(--ease) both;animation-delay:calc(var(--i, 0) * 30ms)}.tut:hover{transform:translateY(-3px);box-shadow:0 0 0 1px var(--w-line) inset,var(--shadow)}.tut-code{position:relative;display:block;height:150px;overflow:hidden;padding:30px 16px 0;background:radial-gradient(120% 120% at 100% 0%,var(--w-soft),transparent 60%),var(--bg-2);border-bottom:1px solid var(--line)}.tut-code .dots{position:absolute;left:14px;top:12px;display:flex;gap:5px}.tut-code .dots i{width:7px;height:7px;border-radius:50%;background:rgba(var(--tint),.14)}.tut-code pre{margin:0;font:450 11.5px/1.65 var(--mono);color:var(--code);white-space:pre;mask-image:linear-gradient(180deg,#000 55%,transparent);-webkit-mask-image:linear-gradient(180deg,#000 55%,transparent)}.tut-play{position:absolute;right:14px;bottom:14px;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--w);color:#0a0b10;box-shadow:0 8px 20px -6px var(--w);transition:transform .3s var(--spring)}.tut-play svg.ic{width:17px;height:17px;fill:currentColor}.tut:hover .tut-play{transform:scale(1.1)}.tut.locked .tut-play{background:var(--raise-2);color:var(--text-3);box-shadow:none}.tut.locked .tut-play svg.ic{fill:none}.tut-body{display:flex;flex-direction:column;gap:4px;padding:14px 16px 16px}.tut-title{font-weight:650;font-size:15px;letter-spacing:-.015em;color:var(--text)}.tut-sub{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-3)}.tut-sub .lang{width:8px;height:8px;border-radius:3px}.tut-sub .lang+.lang{margin-left:-3px}.tut-sub .lang:last-of-type{margin-right:2px}.tut-sub .lang.html{background:#ff7a59}.tut-sub .lang.css{background:#3d8bff}.tut-sub .lang.js{background:#f7df1e}.tut-for{font-size:12.5px;color:var(--text-3)}.tut-seen{display:inline-flex;align-items:center;gap:5px;color:var(--ok);font-weight:600}.tut-seen svg.ic{width:13px;height:13px;stroke-width:2.6}.tour{position:fixed;inset:0;z-index:90}.tour-hole{position:fixed;border-radius:14px;pointer-events:none;box-shadow:0 0 0 2px var(--w),0 0 0 9999px #04050aa8;transition:left .35s var(--ease),top .35s var(--ease),width .35s var(--ease),height .35s var(--ease)}.tour-card{position:fixed;width:min(340px,calc(100vw - 28px));padding:16px 16px 14px;border-radius:18px;background:var(--panel-2);box-shadow:0 0 0 1px var(--line-2) inset,var(--shadow-lg);animation:bubbleIn .4s var(--spring) both}.tour-top{display:flex;align-items:center;gap:12px}.tour-top .jd{width:40px;height:40px}.tour-card h3{margin:4px 0 0;font-size:16px;letter-spacing:-.015em}.tour-card p{margin:10px 0 12px;color:var(--text-2);font-size:14px;line-height:1.55}.tour-dots{display:flex;gap:5px;margin-bottom:12px}.tour-dots i{width:6px;height:6px;border-radius:3px;background:var(--line-3);transition:width .3s var(--ease),background .3s}.tour-dots i.on{width:18px;background:var(--w)}.tour-actions{display:flex;align-items:center;gap:10px}.tour-actions .grow{flex:1}@media (max-width: 640px){.net-row{grid-template-columns:48px minmax(0,1fr) 46px}.net-row .t{display:none}.con-tab{padding:0 7px}}:root[data-theme=light]{--bg: #f5f6fa;--bg-2: #eceef5;--panel: #ffffff;--panel-2: #f3f4f9;--raise: #eaecf3;--raise-2: #dfe2ec;--line: rgba(20, 24, 50, .08);--line-2: rgba(20, 24, 50, .13);--line-3: rgba(20, 24, 50, .22);--text: #141625;--text-2: #4b5170;--text-3: #7a809c;--brand: #6a4cf5;--brand-2: #5634e8;--ok: #0e9f6e;--ok-soft: rgba(14, 159, 110, .11);--bad: #e2364d;--bad-soft: rgba(226, 54, 77, .1);--gold: #f2ae00;--shadow: 0 1px 2px rgba(20, 24, 50, .06), 0 12px 32px -14px rgba(20, 24, 50, .18);--shadow-lg: 0 1px 2px rgba(20, 24, 50, .06), 0 28px 64px -24px rgba(20, 24, 50, .24);--tint: 20, 24, 50;--hi: #10121c;--ink: #10121c;--code: #2b2f45;--code-em: #4b2fd6;--gutter: #b3b8cb;--caret: #5634e8;color-scheme:light}:root[data-theme=light] .backdrop:before{opacity:.55}:root[data-theme=light] .btn.primary:hover{--b-bg: #5b3df0}:root[data-theme=light] .btn kbd,:root[data-theme=light] .kbd{background:#ffffff40}:root[data-theme=light] .tb-ind{box-shadow:0 0 0 1px var(--line-2) inset,0 1px 3px #1418321f;background:var(--panel)}:root[data-theme=light] .tb-nav,:root[data-theme=light] .seg,:root[data-theme=light] .devices{background:var(--raise)}:root[data-theme=light] .seg button[aria-pressed=true],:root[data-theme=light] .devices button[aria-pressed=true]{background:var(--panel)}:root[data-theme=light] .hero-bg:before{background:radial-gradient(60% 90% at 100% 0%,color-mix(in srgb,var(--w) 30%,transparent),transparent 60%),radial-gradient(50% 80% at 70% 120%,color-mix(in srgb,var(--brand) 16%,transparent),transparent 60%),linear-gradient(180deg,var(--panel),var(--panel-2))}:root[data-theme=light] .ring .bar,:root[data-theme=light] .rail-item[aria-current=true]:before{filter:none;box-shadow:none}:root[data-theme=light] .scrim{background:#1e223c52}:root[data-theme=light] .switch:after{box-shadow:0 1px 3px #1418324d}:root[data-theme=light] .symbar button,:root[data-theme=light] .opt{box-shadow:0 0 0 1px var(--line-2) inset,0 2px #14183214}:root[data-theme=light] .opt:hover{box-shadow:0 0 0 1px var(--line-3) inset,0 2px #14183214}:root[data-theme=light] .verdict.bad{color:#a8172c}:root[data-theme=light] .verdict.ok{color:#06663f}:root[data-theme=light] .hint-box{color:#6b4a00;background:#f2ae001f}:root[data-theme=light] .hint-box code{color:#4d3500}:root[data-theme=light] .why-btn{color:#5b3df0}:root[data-theme=light] .why-box b{color:#5b3df0}:root[data-theme=light] .why-box code{color:#4326c9}:root[data-theme=light] .console-out div.error{color:#b3192f}:root[data-theme=light] .console-out div.warn{color:#8a5d00}:root[data-theme=light] .pv-toast{background:var(--panel)}:root[data-theme=light] .tour-hole{box-shadow:0 0 0 2px var(--w),0 0 0 9999px #1e223c73}:root[data-theme=light] .net-row .m{color:#0b6bcb}:root[data-theme=light] .net-row .m.post{color:#a35a00}:root[data-theme=light] .narrow{background:radial-gradient(80% 60% at 50% 0%,rgba(124,92,255,.14),transparent 60%),var(--bg)}:root[data-theme=light] .tk-tag,:root[data-theme=light] .tk-prop{color:#0b6bcb}:root[data-theme=light] .tk-attr{color:#a35a00}:root[data-theme=light] .tk-string{color:#237a1f}:root[data-theme=light] .tk-comment{color:#8a90a8}:root[data-theme=light] .tk-punct{color:#6a7090}:root[data-theme=light] .tk-selector{color:#8a2bd1}:root[data-theme=light] .tk-value,:root[data-theme=light] .tk-number{color:#c2410c}:root[data-theme=light] .tk-keyword{color:#7a33e0}:root[data-theme=light] .tk-fn{color:#0e7490}:root[data-theme=light] .tk-builtin{color:#c0267a}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.detail-inner.swapped :is(.hero,.coach-card,.chap,.tl-row){animation:none}@media (max-width: 1180px){.pl-body{grid-template-columns:340px minmax(0,1fr)}.ws{grid-template-columns:1fr;grid-template-rows:minmax(0,1.1fr) minmax(0,1fr)}.pane+.pane{border-left:0;border-top:1px solid var(--line)}}@media (max-width: 980px){.home{grid-template-columns:1fr}.rail{display:none}.rail-cert.strip-cert{display:flex}.world-strip{display:flex!important}.tb-tab .lbl{display:none}.hero{grid-template-columns:1fr}.ring,.hero-code{display:none}.pl-body{grid-template-columns:300px minmax(0,1fr)}.pl-steps i{width:18px}.pl-steps i.on{width:30px}.tl-row.project .tl-btn{grid-template-columns:56px minmax(0,1fr) 150px}.hero-track{gap:10px}.opts{grid-template-columns:1fr}}@media (max-width: 820px) and (orientation: portrait){.pl-body{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}.coach{border-right:0;border-bottom:1px solid var(--line);max-height:44vh}.pl-body.quiz .coach{max-height:none}}@media (max-width: 640px){.ht-label{display:none}.hero-track{padding-top:12px}.chap-seg{display:none}.chap-title{font-size:16.5px}.tl-tag,.sec-count{display:none}}.world-strip{display:none;gap:8px;overflow-x:auto;padding:0 0 16px;margin:-6px 0 6px}.world-strip button{--w: inherit;flex:none;height:36px;padding:0 12px 0 6px;border-radius:10px;display:flex;align-items:center;gap:8px;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;font-size:13px;font-weight:600;color:var(--text-2)}.world-strip button .ri-num{width:26px;height:26px;border-radius:7px;font-size:11.5px}.world-strip button[aria-current=true]{color:var(--text);box-shadow:0 0 0 1px var(--w-line) inset;background:var(--panel-2)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.cs-stage{display:block;width:100%;height:100%}.cs-stage .cs-wave{animation:csWave 1s ease-in-out infinite alternate}@keyframes csWave{0%{transform:rotate(-10deg)}to{transform:rotate(8deg)}}.cs-stage .cs-led{animation:csLed 1.6s steps(2) infinite}@keyframes csLed{50%{opacity:.25}}.cs-stage .cs-eq{animation:csEq .7s ease-in-out infinite alternate;transform-box:fill-box;transform-origin:center}@keyframes csEq{0%{transform:scaleY(.35)}to{transform:scaleY(1)}}.cs-stage .cs-caret{animation:csCaret 1s steps(2) infinite}@keyframes csCaret{50%{opacity:0}}.cs-stage .cs-amb{animation:csAmb 17s ease-in-out infinite alternate;transform-box:fill-box;transform-origin:center}@keyframes csAmb{0%{transform:translate(-18px,-8px) scale(.96)}50%{transform:translate(10px,12px) scale(1.06)}to{transform:translate(20px,-6px) scale(1)}}.cs-stage .cs-tw{animation:csTw 4s ease-in-out infinite}@keyframes csTw{50%{opacity:.15}}.cs-stage.cs-enter{animation:csEnter .75s cubic-bezier(.16,1,.3,1) both}@keyframes csEnter{0%{opacity:0;transform:scale(1.025);filter:blur(6px)}}.cs-paused,.cs-paused *{animation-play-state:paused!important}@media (prefers-reduced-motion: reduce){.cs-stage .cs-wave,.cs-stage .cs-eq,.cs-stage .cs-led,.cs-stage .cs-amb,.cs-stage .cs-tw,.cs-stage.cs-enter{animation:none}}.pl-xp-btn{display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 14px 0 11px;border-radius:999px;border:1px solid var(--w-line);background:var(--w-soft);color:var(--ink);font:600 13px/1 var(--font);cursor:pointer;transition:background .2s var(--ease),transform .2s var(--ease),color .2s}.pl-xp-btn .ic{width:17px;height:17px}.pl-xp-btn:hover{background:color-mix(in srgb,var(--w) 24%,transparent)}.pl-xp-btn:active{transform:scale(.97)}.pl-xp-btn.on{background:var(--w);border-color:transparent;color:#fff}.xp-steps-label{display:inline-flex;align-items:center;gap:6px;font:600 11.5px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:color-mix(in srgb,var(--w) 65%,var(--hi))}.xp-steps-label .ic{width:15px;height:15px}.pl-body.xp-mode{display:flex;justify-content:center;align-items:flex-start;overflow:auto;padding:18px 24px 26px;background:radial-gradient(1100px 480px at 50% -12%,color-mix(in srgb,var(--w) 16%,transparent),transparent 62%),var(--bg)}.xp{width:min(1100px,100%);max-width:var(--fit-w, none);display:flex;flex-direction:column;gap:14px;animation:viewIn .45s var(--ease) both}.xp.cont{animation:none}.xp.cont .xp-meta>*{animation:xpTitleIn .55s cubic-bezier(.16,1,.3,1) both}.xp.cont .xp-meta h2{animation-delay:50ms}@keyframes xpTitleIn{0%{opacity:0;transform:translateY(10px);filter:blur(4px)}}.xp-stage{transition:opacity .3s var(--ease),transform .34s var(--ease),filter .3s var(--ease)}.xp-frame.leaving .xp-stage{opacity:0;transform:scale(.985);filter:blur(5px)}.xp-frame.leaving .xp-tap{opacity:0!important}.xp-top{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}.xp-kicker{display:inline-flex;align-items:center;gap:6px;font:600 11.5px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:color-mix(in srgb,var(--w) 65%,var(--hi))}.xp-kicker .ic{width:14px;height:14px}.xp-meta h2{margin:6px 0 0;font:700 clamp(20px,2.3vw,28px)/1.15 var(--font);letter-spacing:-.02em;color:var(--ink)}.xp-segs{display:flex;gap:6px;flex:none}.xp-seg{width:44px;padding:10px 0;border:0;background:none;cursor:pointer}.xp-seg i{display:block;position:relative;height:4px;border-radius:2px;background:rgba(var(--tint),.14);overflow:hidden}.xp-seg.on i:after{content:"";position:absolute;inset:0;width:var(--sp, 0%);background:var(--w);border-radius:inherit;transition:width .7s cubic-bezier(.16,1,.3,1);box-shadow:0 0 10px var(--w)}.xp-seg.done i{background:var(--w)}.xp-seg:hover i{background:rgba(var(--tint),.26)}.xp-seg.done:hover i{background:var(--w)}.xp-kicker.life{color:var(--life)}.xp-kicker.life em{font-style:normal;color:var(--text-3);margin-left:4px;padding-left:10px;border-left:1px solid rgba(var(--tint),.16)}.xp-seg.life i{background:color-mix(in srgb,var(--life) 22%,transparent)}.xp-seg.life.on i:after,.xp-seg.life.done i{background:var(--life)}.xp-frame.life{box-shadow:0 0 0 1px color-mix(in srgb,var(--life) 30%,transparent),0 30px 80px -24px #000c,0 0 90px -30px var(--life)}.xp-life-tag{position:absolute;left:16px;top:14px;display:inline-flex;align-items:center;gap:6px;padding:6px 11px 6px 9px;border-radius:999px;pointer-events:none;font:650 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:#2a1a05;background:linear-gradient(135deg,#ffd27a,var(--life));box-shadow:0 6px 20px -6px color-mix(in srgb,var(--life) 70%,transparent);animation:lifeTagIn .6s var(--spring) .15s both}.xp-life-tag .ic{width:13px;height:13px}@keyframes lifeTagIn{0%{opacity:0;transform:translateY(-8px) scale(.9)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.xp-life-tag{animation:none}}.xp-frame{position:relative;aspect-ratio:16 / 9;border-radius:22px;overflow:hidden;background:#090b1c;cursor:pointer;box-shadow:0 0 0 1px #ffffff14,0 30px 80px -24px #000c,0 0 90px -30px var(--w)}.xp-stage{position:absolute;inset:0}.xp-tap{position:absolute;left:50%;top:50%;width:84px;height:84px;border-radius:50%;border:0;display:grid;place-items:center;background:#ffffff29;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:#fff;cursor:pointer;opacity:0;pointer-events:none;transform:translate(-50%,-50%) scale(.8);transition:opacity .25s,transform .3s var(--spring)}.xp-tap .ic{width:34px;height:34px;margin-left:4px}.xp-frame.paused .xp-tap{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}.xp-end{position:absolute;inset:0;display:grid;place-items:center;background:#05060f8c;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);animation:viewIn .35s var(--ease) both;cursor:default}.xp-end[hidden]{display:none}.xp-end-card{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;padding:26px 30px 22px;border-radius:20px;background:#12162ee0;border:1px solid rgba(255,255,255,.1);box-shadow:var(--shadow-lg);animation:modalIn .6s var(--spring) .05s both}.xp-end-card>:not(.xp-end-ic){animation:rise .5s var(--ease) both}.xp-end-card>b{animation-delay:.22s}.xp-end-card>span:not(.xp-end-ic){animation-delay:.28s}.xp-end-actions{animation-delay:.36s!important}.xp-end-ic{position:relative;width:52px;height:52px;border-radius:50%;display:grid;place-items:center;background:var(--ok-soft);color:var(--ok);margin-bottom:4px;animation:endBadge .6s var(--spring) .12s both}.xp-end-ic:after{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:0 0 0 2px var(--ok);opacity:0;animation:endRing .9s cubic-bezier(.16,1,.3,1) .3s}.xp-end-ic .ic{width:26px;height:26px}.xp-end-ic .ic *{stroke-dasharray:32;stroke-dashoffset:32;animation:endTick .45s cubic-bezier(.65,0,.35,1) .32s forwards}@keyframes endBadge{0%{opacity:0;transform:scale(.4)}}@keyframes endRing{0%{opacity:.9;transform:scale(1)}to{opacity:0;transform:scale(1.9)}}@keyframes endTick{to{stroke-dashoffset:0}}.xp-end-card b{font:700 20px/1.2 var(--font);color:#fff}.xp-end-card>span{color:#aab0c5;font-size:14px}.xp-end-actions{display:flex;gap:10px;margin-top:12px}.xp-cap{display:flex;align-items:center;gap:12px;min-height:60px;padding:9px 16px 9px 9px;border-radius:16px;background:var(--panel);border:1px solid var(--line)}.xp-cap .jd-wrap,.xp-cap .jd{width:42px;height:42px}.xp-cap .jd-wrap:after{display:none}.xp-cap p{margin:0;font:500 15.5px/1.45 var(--font);color:var(--text);text-wrap:pretty}.xp-cap p.swap span{display:inline-block;animation:capWord .5s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--i, 0) * 16ms)}.xp-cap.off{display:none}@keyframes capWord{0%{opacity:0;transform:translateY(5px);filter:blur(3px)}}.xp-ctrls{display:flex;align-items:center;gap:8px}.xp-ctrls .icon-btn[disabled]{opacity:.35;pointer-events:none}.xp-pp{width:48px;height:48px;border-radius:50%;border:0;display:grid;place-items:center;background:var(--w);color:#fff;cursor:pointer;box-shadow:0 10px 26px -10px var(--w);transition:transform .2s var(--spring)}.xp-pp:active{transform:scale(.94)}.xp-pp .ic{width:20px;height:20px}.xp-dots{display:flex;gap:5px;margin-left:8px}.xp-dots i{width:6px;height:6px;border-radius:3px;background:rgba(var(--tint),.18);transition:width .35s var(--ease),background .35s}.xp-dots i.on{width:22px;background:var(--w)}.xp-dots i.past{background:color-mix(in srgb,var(--w) 55%,transparent)}.xp-chip{height:36px;min-width:42px;padding:0 10px;border-radius:10px;border:1px solid var(--line-2);background:var(--panel-2);color:var(--text-2);font:600 12.5px/1 var(--mono);display:grid;place-items:center;cursor:pointer}.xp-chip[aria-pressed=true]{color:var(--ink);border-color:var(--w-line);background:var(--w-soft)}.xp-chip .ic{width:19px;height:19px}@media (max-width: 760px){.pl-xp-btn span{display:none}.pl-xp-btn{padding:0 10px}.xp-segs{display:none}.pl-body.xp-mode{padding:12px}.xp{width:100%;min-width:0}.xp-cap p{font-size:14px}}.tut-seg button{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 14px;white-space:nowrap}.tut-seg button .ic{width:16px;height:16px}.tut-seg button span{font:600 11px/1 var(--mono);color:var(--text-3);padding:3px 6px;border-radius:6px;background:rgba(var(--tint),.06)}.tut-seg button[aria-pressed=true] span{color:var(--text-2)}.tut-sub .lang.server{background:#34d399}.tut-sub .lang.sh{background:#94a3b8}.xpws{display:flex;flex-direction:column;gap:30px;margin-top:8px}.xpw h2{display:flex;align-items:center;gap:10px;margin:0 0 12px;font-size:17px;font-weight:700;letter-spacing:-.02em}.xpw h2 .ri-num{width:24px;height:24px;border-radius:7px;font-size:12px}.xpw-count{margin-left:auto;font:500 12px/1 var(--mono);color:var(--text-3)}.xpcs{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}.xpc{display:flex;flex-direction:column;text-align:left;border-radius:16px;overflow:hidden;background:var(--panel);box-shadow:0 0 0 1px var(--line) inset;transition:transform .25s var(--ease),box-shadow .25s var(--ease);animation:rise .45s var(--ease) both;animation-delay:calc(min(var(--i),10)*30ms)}.xpc:hover{transform:translateY(-3px);box-shadow:0 0 0 1px var(--w-line) inset,var(--shadow)}.xpc:focus-visible{outline:2px solid var(--w);outline-offset:2px}.xpc-thumb{position:relative;aspect-ratio:16 / 9;background:#090b1c;overflow:hidden}.xpc-art{position:absolute;inset:0}.xpc-play{position:absolute;left:50%;top:50%;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;transform:translate(-50%,-50%) scale(.9);background:#ffffff29;color:#fff;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);opacity:0;transition:opacity .25s,transform .3s var(--spring)}.xpc-play .ic{width:20px;height:20px;margin-left:2px}.xpc:hover .xpc-play,.xpc:focus-visible .xpc-play,.xpc.locked .xpc-play{opacity:1;transform:translate(-50%,-50%) scale(1)}.xpc.locked .xpc-thumb>.xpc-art{filter:grayscale(.6) brightness(.6)}.xpc.locked .xpc-play .ic{margin:0}.xpc-len{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:7px;background:#05060fb8;color:#e6e9f8;font:600 11px/1 var(--mono);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.xpc-len .ic{width:12px;height:12px}.xpc-body{display:flex;flex-direction:column;gap:3px;padding:11px 13px 13px}.xpc-title{font-weight:650;font-size:14.5px;letter-spacing:-.015em;color:var(--text)}.xpc-sub{font-size:12px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xpc-body .tut-seen{margin-top:4px}.tl-xp{display:inline-grid;place-items:center;width:18px;height:18px;margin-right:7px;vertical-align:-4px;border-radius:5px;background:var(--w-soft);color:color-mix(in srgb,var(--w) 70%,var(--hi))}.tl-xp .ic{width:12px;height:12px}.tl-xp.seen{background:var(--ok-soft);color:var(--ok)}@media (max-width: 760px){.page-head{flex-wrap:wrap}.xpcs{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}
