:root{--ai-blue: #2f6fe4;--verify-green: #2fa36b;--deploy-amber: #d9970f;--revert-pink: #e0447c;--ink: #1d2433;--ink-soft: #5a6478;--paper: #f7f6f2;--paper-card: #ffffff;--line: #e6e2d8;--console: #14161c;--console-deep: #0e1015;--console-line: #262a35;--console-text: #d8dee9;--console-dim: #8a93a6;--font-display: "Songti TC", "Noto Serif TC", "Times New Roman", serif;--font-body: "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif;--font-mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, monospace;--sidebar-w: 264px}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font-family:var(--font-body);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased}#root{height:100%}button{font-family:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--ai-blue);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.stepbar{display:flex;height:3px;border-radius:2px;overflow:hidden}.stepbar i{flex:1}.stepbar i:nth-child(1){background:var(--ai-blue);flex:3}.stepbar i:nth-child(2){background:var(--verify-green);flex:2}.stepbar i:nth-child(3){background:var(--deploy-amber);flex:1.2}.stepbar i:nth-child(4){background:var(--revert-pink);flex:.8}.shell{display:flex;height:100vh}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{display:flex;align-items:center;gap:14px;padding:0 20px;height:52px;background:var(--paper-card);border-bottom:1px solid var(--line)}.topbar .crumb{font-size:13px;color:var(--ink-soft);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar .crumb b{color:var(--ink);font-weight:600}.topbar .spacer{flex:1}.topbar .pct{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft)}.sidebar{width:var(--sidebar-w);flex-shrink:0;display:flex;flex-direction:column;background:var(--console);color:var(--console-text);border-right:1px solid var(--console-line)}.brand{padding:18px 18px 14px;border-bottom:1px solid var(--console-line)}.brand .name{font-family:var(--font-display);font-size:21px;letter-spacing:.5px;color:#fff}.brand .sub{font-size:10.5px;color:var(--console-dim);margin:3px 0 10px}.progress-ring{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--console-line)}.progress-ring .label{font-size:12px;color:var(--console-dim)}.progress-ring .val{font-family:var(--font-mono);font-size:16px}.chapnav{flex:1;overflow-y:auto;padding:8px 0}.chap{width:100%;text-align:left;background:none;border:0;color:inherit;display:flex;align-items:center;gap:10px;padding:10px 18px;font-size:13.5px}.chap:hover{background:#ffffff0d}.chap.active{background:#ffffff14;box-shadow:inset 3px 0 0 var(--c, var(--ai-blue))}.chap .dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.chap .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chap .st{font-family:var(--font-mono);font-size:11px;color:var(--console-dim)}.chap.locked{opacity:.38;cursor:not-allowed}.chap.done .st{color:var(--verify-green)}.sidebar .foot{padding:12px 18px;border-top:1px solid var(--console-line)}.reset-btn{background:none;border:1px solid var(--console-line);color:var(--console-dim);font-size:12px;padding:6px 12px;border-radius:6px;width:100%}.reset-btn:hover{color:var(--revert-pink);border-color:var(--revert-pink)}.reset-btn.arm{color:#fff;background:var(--revert-pink);border-color:var(--revert-pink)}.home{flex:1;overflow-y:auto;padding:52px 48px}.home .hero{max-width:720px;margin:0 auto 44px}.home .eyebrow{font-family:var(--font-mono);font-size:12px;letter-spacing:.12em;color:var(--ink-soft)}.home h1{font-family:var(--font-display);font-size:clamp(30px,4.5vw,44px);line-height:1.3;margin:12px 0 16px}.home .lede{font-size:15px;line-height:2;color:var(--ink-soft)}.home .cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;background:var(--ink);color:#fff;border:0;padding:13px 28px;border-radius:8px;font-size:15px}.home .cta:hover{background:#000}.chappath{max-width:720px;margin:0 auto}.pathrow{display:flex;gap:16px;width:100%;text-align:left;background:none;border:0;padding:0;color:inherit}.pathrow .rail{display:flex;flex-direction:column;align-items:center;width:30px;flex-shrink:0}.pathrow .node{width:30px;height:30px;border-radius:50%;border:2.5px solid var(--c, var(--ai-blue));background:var(--paper);color:var(--c, var(--ai-blue));flex-shrink:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:13px;font-weight:700;transition:background .15s}.pathrow.done .node{background:var(--c);color:#fff}.pathrow .wire{width:2.5px;flex:1;background:var(--line);min-height:26px}.pathrow:last-child .wire{display:none}.pathrow .pbody{flex:1;min-width:0;padding:3px 0 24px;border-radius:8px}.pathrow .ptitle{font-size:16.5px;font-weight:650;display:flex;align-items:baseline;gap:10px}.pathrow .pstatus{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);font-weight:400}.pathrow.done .pstatus{color:var(--verify-green)}.pathrow .pdesc{font-size:13px;color:var(--ink-soft);line-height:1.8;margin-top:4px;max-width:520px}.pathrow:not(.locked):hover .ptitle{text-decoration:underline;text-underline-offset:4px}.pathrow.locked{cursor:not-allowed}.pathrow.locked .pbody,.pathrow.locked .node{opacity:.42}.lesson{flex:1;display:flex;min-height:0}.instruction{width:44%;min-width:340px;max-width:560px;overflow-y:auto;padding:30px 34px 0;background:var(--paper);display:flex;flex-direction:column}.instruction .iscroll{flex:1}.workspace{flex:1;min-width:0;display:flex;flex-direction:column;position:relative;background:var(--console-deep);border-left:1px solid var(--line)}.workspace .band{height:3px;background:var(--c, var(--ai-blue));flex-shrink:0}.workspace .ws-body{flex:1;overflow-y:auto;padding:22px;display:flex;flex-direction:column}.step-eyebrow{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.14em;color:var(--c, var(--ai-blue))}.instruction h2{font-family:var(--font-display);font-size:25px;margin:8px 0 16px;line-height:1.4}.instruction p{font-size:14.5px;line-height:2;color:#333c50}.instruction strong{color:var(--ink)}.instruction code{font-family:var(--font-mono);font-size:12.5px;background:#edeae2;padding:2px 6px;border-radius:5px}.card{border-left:3px solid var(--cc, var(--ai-blue));background:#fff9;padding:10px 16px 12px;margin:18px 0;font-size:13.5px;line-height:1.9;border-radius:0 8px 8px 0}.card .card-title{font-family:var(--font-mono);font-weight:700;font-size:11px;letter-spacing:.16em;margin-bottom:4px;color:var(--cc, var(--ai-blue))}.card.concept{--cc: var(--ai-blue)}.card.tip{--cc: var(--deploy-amber)}.card.warn{--cc: var(--revert-pink)}.task-card{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--verify-green);background:#f0f7f2;border-radius:8px;padding:13px 16px;margin:16px 0;font-size:14px;line-height:1.9}.task-card .tick{width:20px;height:20px;border:2px solid var(--verify-green);border-radius:5px;flex-shrink:0;margin-top:4px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:700;background:transparent;transition:background .2s}.task-card.checked .tick{background:var(--verify-green)}.task-card .tt{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;color:var(--verify-green);font-weight:700}.stepnav{position:sticky;bottom:0;margin-top:auto;display:flex;gap:12px;align-items:center;padding:14px 0 18px;background:linear-gradient(transparent,var(--paper) 26%);border-top:1px solid var(--line)}.stepdots{flex:1;display:flex;gap:7px;justify-content:center}.stepdots i{width:8px;height:8px;border-radius:50%;background:var(--line)}.stepdots i.done{background:var(--verify-green)}.stepdots i.cur{background:var(--ink);outline:2px solid var(--line);outline-offset:2px}.btn{border-radius:8px;border:1px solid var(--line);padding:10px 18px;font-size:14px;background:var(--paper-card);color:var(--ink);white-space:nowrap}.btn.primary{background:var(--ink);border-color:var(--ink);color:#fff}.btn.primary:hover:not(:disabled){background:#000}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.primary.ready{animation:nudge 1.6s ease infinite}@keyframes nudge{0%,to{transform:none}50%{transform:translate(3px)}}.locknote{font-size:12px;color:var(--ink-soft);position:absolute;visibility:hidden}.done-banner{display:flex;align-items:center;gap:8px;margin:14px 0 6px;color:var(--verify-green);font-weight:600;font-size:14px}.terminal{background:var(--console);border:1px solid var(--console-line);border-radius:12px;overflow:hidden;display:flex;flex-direction:column;font-family:var(--font-mono)}.term-head{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#1b1e26;border-bottom:1px solid var(--console-line)}.term-head .dots{display:flex;gap:6px}.term-head .dots i{width:11px;height:11px;border-radius:50%}.term-head .title{font-size:11.5px;color:var(--console-dim);margin-left:6px}.term-out{padding:14px 16px;font-size:12.5px;line-height:1.85;color:var(--console-text);min-height:120px;max-height:46vh;overflow-y:auto;white-space:pre-wrap;word-break:break-all;flex:1}.tl{display:block;margin:3px 0}.tl.cmd{color:var(--console-dim)}.tl.cmd:before{content:"> "}.tl.text{color:var(--console-text);padding-left:16px;text-indent:-16px}.tl.text:before{content:"⏺ ";color:#e8ecf3}.tl.tool{color:#fff;padding-left:16px;text-indent:-16px}.tl.tool:before{content:"⏺ ";color:#4ebd7a}.tl.res{color:var(--console-dim);padding-left:34px;text-indent:-18px}.tl.res:before{content:"⎿  "}.tl.ok{color:#7ed4a5}.tl.err{color:#ff8fb3}.tl.dim{color:var(--console-dim)}.tl.spin{color:var(--console-text);margin-top:10px}.cc-spark{color:#d97757;font-weight:700}.dim2{color:var(--console-dim)}.cc-welcome{border:1px solid #3a4050;border-radius:8px;padding:10px 14px;margin-bottom:14px;color:var(--console-text);font-size:12.5px;line-height:1.5}.cc-welcome b{color:#fff}.prompt-input{display:flex;flex-direction:column;padding:10px 14px 12px;border-top:1px solid var(--console-line);background:var(--console)}.prompt-input .inbox{display:flex;align-items:flex-start;gap:8px;border:1px solid #3a4050;border-radius:8px;padding:8px 12px;background:var(--console-deep)}.prompt-input .inbox:focus-within{border-color:#566179}.prompt-input .mark{color:var(--console-text);font-family:var(--font-mono);font-size:13px;line-height:1.6}.prompt-input textarea{flex:1;background:none;border:0;resize:none;color:#fff;font-family:var(--font-mono);font-size:13px;line-height:1.6;padding:0;min-height:44px}.prompt-input textarea:focus{outline:none}.prompt-input textarea::placeholder{color:#566179}.prompt-input .below{display:flex;align-items:center;margin-top:6px;font-family:var(--font-mono);font-size:11px;color:#566179}.prompt-input .below .sp{flex:1}.prompt-input button{background:none;border:0;color:#8a93a6;font-family:var(--font-mono);font-size:11px;padding:2px 6px;border-radius:5px}.prompt-input button:hover:not(:disabled){color:#fff;background:#262a35}.prompt-input button:disabled{opacity:.4}.feedback{border-radius:9px;padding:12px 14px;margin-top:12px;font-size:13px;line-height:1.8}.feedback.miss{background:#2a1e28;border:1px solid #5c3550;color:#f0c6d8}.feedback.pass{background:#17281f;border:1px solid #2fa36b;color:#a9e8c6}.feedback ul{margin:6px 0 0;padding-left:18px}.hint-row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}.hint-btn{background:none;border:1px dashed var(--console-line);color:var(--console-dim);border-radius:7px;padding:6px 12px;font-size:12px}.hint-btn:hover{color:var(--console-text)}.hint-text{font-size:12.5px;color:#d8c9a0;margin-top:8px;line-height:1.8}.solution{margin-top:10px;background:#22262f;border-radius:8px;padding:12px;font-family:var(--font-mono);font-size:12.5px;color:#cfe0ff;line-height:1.7}.ide-row{display:flex;gap:10px;align-items:stretch}.ide-main{flex:1;min-width:0;display:flex;flex-direction:column}.ide-main .terminal{flex:1}.file-panel{width:200px;flex-shrink:0;background:var(--console);border:1px solid var(--console-line);border-radius:12px;padding:10px 8px;display:flex;flex-direction:column;gap:2px;font-family:var(--font-mono)}.fp-head{font-size:12px;color:#fff;padding:4px 8px 8px;font-weight:600;border-bottom:1px solid var(--console-line);margin-bottom:6px}.fp-empty{font-size:11.5px;color:#566179;text-align:center;padding:22px 6px;line-height:1.9;font-family:var(--font-body)}.file-row{display:flex;align-items:center;gap:7px;width:100%;text-align:left;background:none;border:0;border-radius:7px;color:var(--console-text);font-family:var(--font-mono);font-size:11.5px;padding:6px 8px}.file-row:hover{background:#ffffff12}.file-row .fi{width:7px;height:7px;border-radius:2px;flex-shrink:0;background:var(--fc, #8a93a6)}.fp-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fbadge{font-size:10px;font-weight:700;border-radius:4px;padding:1px 5px;flex-shrink:0}.fbadge.A{color:#7ed4a5;background:#17281f}.fbadge.M{color:#ecc46f;background:#2b2415}.file-row.flash{animation:file-in .6s ease}@keyframes file-in{0%{opacity:0;transform:translate(-8px);background:#17281f}60%{background:#17281f}to{opacity:1;transform:none;background:transparent}}.fp-hint{margin-top:auto;padding:8px 8px 2px;font-size:10.5px;color:#566179;font-family:var(--font-body)}.code-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0a0c10b8;display:flex;align-items:center;justify-content:center;padding:24px;z-index:20}.code-card{background:var(--console);border:1px solid #3a4050;border-radius:12px;width:min(720px,100%);max-height:100%;display:flex;flex-direction:column;box-shadow:0 18px 50px #00000080}.code-head{display:flex;align-items:center;gap:8px;padding:11px 14px;border-bottom:1px solid var(--console-line);font-family:var(--font-mono)}.code-head .fi{width:8px;height:8px;border-radius:2px;background:var(--fc, #8a93a6)}.code-head .cp{color:#fff;font-size:12.5px}.code-head .cl{color:var(--console-dim);font-size:11px;flex:1}.code-close{background:none;border:0;color:var(--console-dim);font-size:14px;padding:2px 6px;border-radius:5px}.code-close:hover{color:#fff;background:#262a35}.code-body{margin:0;padding:14px 16px;overflow:auto;font-family:var(--font-mono);font-size:11.5px;line-height:1.65;color:var(--console-text);white-space:pre}@media(max-width:1200px){.ide-row{flex-direction:column}.file-panel{width:100%;flex-direction:row;flex-wrap:wrap;align-items:center}.fp-head{border:0;margin:0}.file-row{width:auto}.fp-empty{padding:6px}.fp-hint{margin:0}}.ws-tabs{display:flex;gap:4px;margin-bottom:14px}.ws-tab{background:none;border:1px solid var(--console-line);color:var(--console-dim);font-size:12.5px;padding:7px 16px;border-radius:8px 8px 0 0;border-bottom:0}.ws-tab.active{background:var(--console);color:#fff}.ws-tab:disabled{opacity:.35;cursor:not-allowed}.ws-tab.unlocked:not(.active){color:#7ed4a5;border-color:#2fa36b;animation:tab-glow 1.8s ease infinite}@keyframes tab-glow{0%,to{background:transparent}50%{background:#17281f}}.game-frame{background:var(--paper);border-radius:12px;padding:26px 20px 30px;display:flex;flex-direction:column;align-items:center}.game-frame .url-bar{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-soft);background:#fff;border:1px solid var(--line);border-radius:999px;padding:6px 16px;margin-bottom:18px}.ttt h3{font-family:var(--font-display);margin:0 0 10px;font-size:20px;text-align:center}.ttt .modes{display:flex;gap:8px;margin-bottom:12px;justify-content:center}.ttt .mode{padding:7px 14px;font-size:13px;border-radius:999px;border:2px solid var(--line);background:#fff;color:var(--ink)}.ttt .mode.active{border-color:var(--ink);background:var(--ink);color:#fff}.ttt .status{text-align:center;font-size:16px;margin:8px 0 12px;min-height:22px}.ttt .board{display:grid;grid-template-columns:repeat(3,76px);grid-template-rows:repeat(3,76px);gap:7px}.ttt .cellb{background:#fff;border:2px solid var(--line);border-radius:10px;font-size:38px;font-weight:700;font-family:var(--font-mono);display:flex;align-items:center;justify-content:center;padding:0}.ttt .cellb.x{color:var(--ai-blue)}.ttt .cellb.o{color:var(--deploy-amber)}.ttt .cellb.win{background:#dff9e5;border-color:var(--verify-green)}.ttt .restart{margin-top:16px;background:var(--ink);color:#fff;border:0;border-radius:8px;padding:9px 22px;font-size:14px}.goal-note{margin-top:14px;font-size:12.5px;color:var(--ink-soft)}.goal-note.hit{color:var(--verify-green);font-weight:600}.ft-wrap{display:grid;grid-template-columns:1fr 1fr;gap:14px}.ft-col{background:var(--console);border:1px solid var(--console-line);border-radius:12px;padding:16px}.ft-col h4{margin:0 0 4px;font-size:13px;color:#fff;font-weight:600}.ft-col .sub{font-size:11.5px;color:var(--console-dim);margin-bottom:12px}.ft-file{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:none;border:1px solid transparent;border-radius:7px;color:var(--console-text);font-family:var(--font-mono);font-size:12.5px;padding:7px 10px}.ft-file:not(:disabled):hover{background:#ffffff0f}.ft-file .ln{margin-left:auto;color:var(--console-dim);font-size:11px}.ft-file.hot{border-color:var(--verify-green);background:#17281f}.ft-file.bad{border-color:var(--revert-pink);background:#2a1e28}.ft-mono-blob{font-family:var(--font-mono);font-size:11px;color:var(--console-dim);line-height:1.7;background:var(--console-deep);border-radius:8px;padding:10px 12px}.token-meter{margin-top:16px;background:var(--console);border:1px solid var(--console-line);border-radius:12px;padding:16px}.token-meter .row{display:flex;align-items:center;gap:10px;margin:8px 0;font-size:12.5px;color:var(--console-text)}.token-meter .bar{height:14px;border-radius:7px;transition:width 1s ease}.token-meter .lbl{width:110px;flex-shrink:0;font-family:var(--font-mono);font-size:11.5px}.token-meter .num{font-family:var(--font-mono);color:var(--console-dim);font-size:11.5px}.git-wrap{display:flex;flex-direction:column;gap:16px}.git-line{display:flex;flex-direction:column;gap:0}.commit{display:flex;gap:14px}.commit .rail{display:flex;flex-direction:column;align-items:center;width:22px;flex-shrink:0}.commit .node{width:15px;height:15px;border-radius:50%;border:3px solid var(--verify-green);background:var(--console);flex-shrink:0}.commit.red .node{border-color:var(--revert-pink)}.commit.pink .node{border-color:var(--revert-pink);background:var(--revert-pink)}.commit .wire{width:3px;flex:1;background:var(--console-line);min-height:12px}.commit .body{padding-bottom:16px;min-width:0;flex:1}.commit .msg{font-family:var(--font-mono);font-size:12.5px;color:#fff}.commit .hash{font-family:var(--font-mono);font-size:11px;color:var(--console-dim);margin-left:8px}.commit .e2e{font-size:11.5px;margin-top:3px;font-family:var(--font-mono)}.commit .e2e.g{color:#7ed4a5}.commit .e2e.r{color:#ff8fb3}.commit.ghost .node{border-color:var(--console-line);border-style:dashed}.commit.ghost .msg{color:#566179}.commit.cur .node{border-color:#fff;box-shadow:0 0 0 3px #ffffff1f}.commit.cur .msg{color:var(--console-dim)}.git-panel{background:var(--console);border:1px solid var(--console-line);border-radius:12px;padding:16px}.git-panel .now{font-size:13px;color:var(--console-text);line-height:1.8;margin-bottom:12px}.git-panel .now b{color:#fff}.git-actions{display:flex;gap:10px;flex-wrap:wrap}.gbtn{border:0;border-radius:8px;padding:9px 18px;font-size:13px;color:#fff;font-family:var(--font-mono)}.gbtn.e2e{background:var(--verify-green)}.gbtn.commit{background:var(--ai-blue)}.gbtn.revert{background:var(--revert-pink)}.gbtn:disabled{opacity:.35;cursor:not-allowed}.e2e-run{font-family:var(--font-mono);font-size:12px;line-height:1.9;margin-top:12px;background:var(--console-deep);border-radius:8px;padding:12px}.e2e-run .ok{color:#7ed4a5}.e2e-run .bad{color:#ff8fb3}.e2e-run .dim{color:var(--console-dim)}.deploy-wrap{display:flex;flex-direction:column;gap:16px}.world{position:relative;background:var(--console);border:1px solid var(--console-line);border-radius:12px;padding:10px}.world svg{width:100%;height:auto;display:block}.world .edge-dot{fill:var(--deploy-amber);opacity:0}.world .edge-dot.on{animation:pop .5s ease forwards}@keyframes pop{0%{opacity:0;r:0}60%{opacity:1}to{opacity:.9}}.deploy-url{display:flex;align-items:center;gap:10px;background:#17281f;border:1px solid var(--verify-green);border-radius:10px;padding:13px 16px;font-family:var(--font-mono);font-size:13px;color:#a9e8c6}.cost-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.cost-card{background:var(--console);border:1px solid var(--console-line);border-radius:10px;padding:12px;text-align:center}.cost-card .v{font-family:var(--font-mono);font-size:17px;color:var(--deploy-amber)}.cost-card .k{font-size:11px;color:var(--console-dim);margin-top:3px;line-height:1.5}.quiz{display:flex;flex-direction:column;gap:10px}.quiz .q{font-size:15px;font-weight:600;color:#fff;line-height:1.8;margin-bottom:4px}.quiz .opt{text-align:left;background:var(--console);border:1px solid var(--console-line);color:var(--console-text);border-radius:10px;padding:13px 16px;font-size:13.5px;line-height:1.7}.quiz .opt:hover:not(:disabled){border-color:var(--console-dim)}.quiz .opt.right{border-color:var(--verify-green);background:#17281f}.quiz .opt.wrong{border-color:var(--revert-pink);background:#2a1e28}.quiz .explain{font-size:13px;line-height:1.9;border-radius:9px;padding:12px 14px}.quiz .explain.ok{background:#17281f;color:#a9e8c6}.quiz .explain.no{background:#2a1e28;color:#f0c6d8}.flow-fig{display:flex;flex-direction:column;gap:8px}.flow-step{display:flex;align-items:center;gap:12px;background:var(--console);border:1px solid var(--console-line);border-left:4px solid var(--c);border-radius:10px;padding:12px 16px;color:var(--console-text)}.flow-step .no{font-family:var(--font-mono);color:var(--c);font-size:13px;width:20px}.flow-step .ft{font-size:13.5px;font-weight:600;color:#fff}.flow-step .fd{font-size:12px;color:var(--console-dim);margin-top:2px}.finale{background:linear-gradient(135deg,#1b2333,#0e1015);border:1px solid var(--console-line);border-radius:14px;padding:34px 28px;text-align:center;color:#fff}.finale .big{font-family:var(--font-display);font-size:26px;margin-bottom:6px}.finale .fbar{max-width:200px;margin:0 auto 16px}.finale p{color:var(--console-dim);font-size:13.5px;line-height:2}.finale .chips{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:16px}.finale .chip{font-family:var(--font-mono);font-size:11.5px;padding:6px 12px;border-radius:999px;border:1px solid var(--console-line);color:var(--console-text)}@media(max-width:980px){.shell{flex-direction:column;height:auto;min-height:100vh}.sidebar{width:100%;flex-direction:row;align-items:center;overflow-x:auto}.brand,.progress-ring{border:0;flex-shrink:0}.chapnav{display:flex;padding:0 8px}.chap{width:auto;white-space:nowrap}.sidebar .foot{display:none}.lesson{flex-direction:column}.instruction{width:100%;max-width:none;min-width:0}.workspace{border-left:0;border-top:1px solid var(--line);min-height:70vh}.ft-wrap{grid-template-columns:1fr}.home{padding:32px 22px}}.topbar .xp{color:var(--deploy-amber);font-weight:700}.xp-gain{font-family:var(--font-mono);font-size:12px;color:var(--deploy-amber);background:#fdf3dd;border-radius:999px;padding:3px 10px;animation:xp-pop .5s ease}@keyframes xp-pop{0%{transform:scale(.6);opacity:0}to{transform:none;opacity:1}}.e2e-lab{display:flex;gap:12px;margin-top:14px;align-items:stretch}.e2e-log{width:46%;min-width:220px;background:var(--console-deep);border:1px solid var(--console-line);border-radius:10px;padding:10px 12px;font-family:var(--font-mono);font-size:12px}.e2e-log .log-head{color:var(--console-dim);font-size:11px;letter-spacing:.08em;border-bottom:1px solid var(--console-line);padding-bottom:8px;margin-bottom:8px}.log-row{display:flex;gap:8px;padding:5px 2px;color:#566179;line-height:1.6}.log-row .ico{width:14px;flex-shrink:0;text-align:center}.log-row.run{color:var(--console-text)}.log-row.run .ico{animation:spin-ico 1s linear infinite;display:inline-block}.log-row.ok{color:#7ed4a5}.log-row.bad{color:#ff8fb3}@keyframes spin-ico{to{transform:rotate(360deg)}}.mini-browser{flex:1;min-width:0;border:1px solid var(--console-line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;background:var(--paper)}.mb-chrome{display:flex;align-items:center;gap:10px;padding:8px 12px;background:#e9e6de;border-bottom:1px solid var(--line)}.mb-dots{display:flex;gap:5px}.mb-dots i{width:9px;height:9px;border-radius:50%;background:#c9c4b8}.mb-url{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-soft);background:#fff;border-radius:999px;padding:3px 12px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mb-tag{font-family:var(--font-mono);font-size:10px;color:var(--verify-green);border:1px solid var(--verify-green);border-radius:999px;padding:2px 8px;animation:tag-blink 1.4s ease infinite}@keyframes tag-blink{50%{opacity:.45}}.mb-body{position:relative;padding:14px 10px 16px;display:flex;justify-content:center}.mb-body .ttt h3{font-size:15px;margin-bottom:6px}.mb-body .ttt .board{grid-template-columns:repeat(3,52px);grid-template-rows:repeat(3,52px);gap:5px}.mb-body .ttt .cellb{font-size:26px;border-radius:8px}.mb-body .ttt .status{font-size:13px;margin:4px 0 8px;min-height:18px}.mb-body .ttt .mode{padding:4px 9px;font-size:11px}.mb-body .ttt .restart{padding:6px 14px;font-size:12px;margin-top:8px}.auto-cursor{position:absolute;width:18px;height:18px;border-radius:50%;border:2.5px solid var(--ai-blue);background:#2f6fe440;transform:translate(-50%,-50%);pointer-events:none;opacity:0;z-index:5;transition:left .28s ease,top .28s ease,transform .12s ease}.auto-cursor.show{opacity:1}.auto-cursor.down{transform:translate(-50%,-50%) scale(.6);background:#2f6fe48c}.gbtn.pulse{animation:gbtn-pulse 1.4s ease infinite}@keyframes gbtn-pulse{50%{box-shadow:0 0 0 6px #ffffff14}}@media(max-width:1100px){.e2e-lab{flex-direction:column}.e2e-log{width:100%}}
