@import "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Noto+Sans+TC:wght@400;500;600;700&display=swap";:root{color:#202124;font-synthesis:none;text-rendering:optimizelegibility;--blue:#1a73e8;--blue-strong:#0b57d0;--blue-soft:#e8f0fe;--green:#34a853;--yellow:#fbbc04;--red:#ea4335;--ink:#202124;--muted:#5f6368;--subtle:#f8fafd;--surface:#fff;--surface-raised:#fff;--outline:#dadce0;--outline-soft:#e8eaed;--code:#172033;--code-muted:#9aa8c1;--shadow:0 2px 8px #3c404329;background:#f8fafd;font-family:Noto Sans TC,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,textarea,select,input{font:inherit}button{color:inherit}button:focus-visible,a:focus-visible,textarea:focus-visible,select:focus-visible{outline-offset:2px;outline:3px solid #1a73e847}code,pre,textarea{font-family:JetBrains Mono,monospace}p,li{text-wrap:pretty}.skip-link{z-index:20;color:#fff;background:var(--blue-strong);border-radius:6px;padding:9px 12px;font-weight:600;text-decoration:none;position:fixed;top:8px;left:12px;transform:translateY(-150%)}.skip-link:focus{transform:translateY(0)}.app-shell{background:var(--subtle);min-height:100vh;color:var(--ink);grid-template:"topbar topbar topbar"64px"nav main lab"calc(100vh - 64px)/264px minmax(440px,1fr) minmax(360px,430px);display:grid}.topbar{border-bottom:1px solid var(--outline);background:var(--surface);z-index:3;grid-area:topbar;grid-template-columns:264px 1fr auto;align-items:center;padding:0 20px;display:grid;position:relative}.brand-lockup,.header-actions,.header-context,.progress-copy,.lab-header,.lab-header>div,.tweaks-heading,.switch-row{align-items:center;display:flex}.brand-lockup{gap:10px;font-size:15px}.stage-tag{letter-spacing:.08em;color:var(--blue-strong);background:var(--blue-soft);border-radius:99px;padding:5px 7px;font:600 10px/1 JetBrains Mono}.cloud-mark{grid-template-columns:repeat(2,1fr);gap:2px;width:27px;height:21px;display:grid;transform:rotate(45deg)}.cloud-mark i{border-radius:2px;display:block}.cloud-mark i:first-child{background:var(--blue)}.cloud-mark i:nth-child(2){background:var(--red)}.cloud-mark i:nth-child(3){background:var(--green)}.cloud-mark i:nth-child(4){background:var(--yellow)}.header-context{border-left:1px solid var(--outline-soft);gap:9px;padding-left:24px;font-size:14px}.course-label{color:var(--muted)}.header-actions{gap:12px}.text-button,.avatar-button{cursor:pointer;background:0 0;border:0}.text-button{color:var(--blue-strong);border-radius:6px;padding:10px;font-size:13px;font-weight:600;text-decoration:none}.text-button:hover{background:var(--blue-soft)}.atlas-link{color:var(--blue-strong);white-space:nowrap;font-size:12px;font-weight:600;text-decoration:none}.atlas-link:hover{text-underline-offset:3px;text-decoration:underline}.avatar-button{color:#fff;background:var(--blue-strong);border-radius:50%;width:34px;height:34px;font-size:12px;font-weight:700}.course-nav{border-right:1px solid var(--outline);background:var(--surface);grid-area:nav;padding:20px 12px 32px;overflow:auto}.nav-summary{border-bottom:1px solid var(--outline-soft);padding:2px 10px 18px}.overline,.lesson-kicker,.placeholder-label{letter-spacing:.08em;color:var(--muted);font:600 10px/1.4 JetBrains Mono}.progress-copy{color:var(--muted);justify-content:space-between;margin:10px 0;font-size:12px}.progress-copy strong{color:var(--ink);font-size:18px}.progress-track{background:var(--outline-soft);border-radius:99px;height:4px;overflow:hidden}.progress-track span{background:var(--blue);border-radius:inherit;height:100%;display:block}.module-list{padding-top:8px}.module{margin-top:12px}.module-heading{text-align:left;background:0 0;border:0;grid-template-columns:28px 1fr;gap:6px;width:100%;padding:8px 10px;display:grid}.module-heading span{color:var(--muted);padding-top:3px;font:500 10px JetBrains Mono}.module-heading strong{font-size:13px}.lesson-list{gap:2px;display:grid}.lesson-link{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;grid-template-columns:18px 1fr auto;align-items:center;gap:5px;min-height:38px;padding:6px 9px;font-size:12px;display:grid}.lesson-link small{color:var(--muted);font:400 9px JetBrains Mono}.lesson-link:not(:disabled):hover{background:var(--subtle)}.lesson-link.is-current{background:var(--blue-soft);color:var(--blue-strong);font-weight:600}.lesson-link.is-locked{color:#9aa0a6;cursor:not-allowed}.lesson-state{text-align:center;color:var(--green)}.lesson-link.is-current .lesson-state{color:var(--blue);font-size:20px;line-height:0}.module-planned{color:#9aa0a6;padding:2px 10px 4px 39px;font-size:10px;display:block}.lesson-main{background:var(--surface);grid-area:main;min-width:0;padding:22px clamp(24px,4vw,58px) 72px;overflow:hidden auto}.mobile-course-picker{display:none}.breadcrumb{color:var(--muted);gap:9px;font-size:12px;display:flex}.breadcrumb b{color:#9aa0a6;font-weight:400}.lesson-heading{justify-content:space-between;align-items:flex-start;gap:24px;margin:34px 0 28px;display:flex}.lesson-heading h1{letter-spacing:-.04em;max-width:760px;margin:10px 0 14px;font-size:clamp(30px,3vw,46px);line-height:1.12}.lesson-heading p{max-width:720px;color:var(--muted);margin:0;font-size:16px;line-height:1.85}.lesson-status{color:#137333;background:#e6f4ea;border-radius:99px;flex:none;padding:6px 10px;font-size:11px;font-weight:600}.lesson-tabs{border-bottom:1px solid var(--outline);gap:24px;display:flex}.lesson-tabs button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-bottom:3px solid #0000;padding:12px 1px 11px;font-size:14px;font-weight:500}.lesson-tabs button:hover{color:var(--blue-strong)}.lesson-tabs button.is-active{color:var(--blue-strong);border-bottom-color:var(--blue)}.lesson-content{max-width:900px;padding-top:30px}.lesson-content h2{letter-spacing:-.02em;margin:0 0 12px;font-size:22px}.lesson-content h3{margin:0 0 8px;font-size:15px}.lesson-content p,.reading-panel li{color:var(--muted);font-size:15px;line-height:1.8}.lesson-content code{color:var(--blue-strong);background:var(--blue-soft);border-radius:4px;padding:2px 5px;font-size:.9em}.request-flow{border:1px solid var(--outline);background:var(--subtle);border-radius:10px;grid-template-columns:1fr auto 1fr auto 1fr;align-items:center;gap:12px;margin:28px 0;padding:22px;display:grid}.request-flow div{gap:5px;display:grid}.request-flow div span{color:var(--blue);font:500 9px JetBrains Mono}.request-flow div strong{font:600 13px JetBrains Mono}.request-flow div small{color:var(--muted);font-size:11px}.request-flow i{color:var(--blue);font-style:normal}.detail-grid{border-top:1px solid var(--outline-soft);grid-template-columns:repeat(2,1fr);gap:28px;margin:32px 0;padding-top:26px;display:grid}.detail-grid p{margin:0;font-size:14px}.source-link{color:var(--blue-strong);gap:8px;padding:9px 0;font-size:14px;font-weight:600;text-decoration:none;display:inline-flex}.source-link:hover{text-decoration:underline}.reading-panel ol{padding-left:22px}.reading-panel li{padding:6px 0 6px 8px}.objective-list{color:var(--muted);gap:8px;padding-left:22px;line-height:1.7;display:grid}.concept-stack{border-block:1px solid var(--outline-soft);gap:0;margin:28px 0;display:grid}.concept-stack>div{border-bottom:1px solid var(--outline-soft);grid-template-columns:44px 1fr;align-items:start;gap:14px;padding:18px 0;display:grid}.concept-stack>div:last-child{border-bottom:0}.concept-stack span{color:var(--blue);font:600 11px/1.8 JetBrains Mono}.concept-stack p{margin:0}.concept-guide{gap:34px;display:grid}.concept-chapter{border-top:1px solid var(--outline-soft);padding-top:28px}.concept-chapter h2,.concept-grid h2{margin-top:7px}.flow-list{counter-reset:flow;gap:12px;margin:20px 0 0;padding:0;list-style:none;display:grid}.flow-list li{color:var(--muted);grid-template-columns:30px 1fr;align-items:start;gap:12px;line-height:1.75;display:grid}.flow-list li:before{counter-increment:flow;content:counter(flow);width:26px;height:26px;color:var(--blue-strong);background:var(--blue-soft);border-radius:50%;place-items:center;font:600 11px JetBrains Mono;display:grid}.concept-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;display:grid}.concept-grid>div{border:1px solid var(--outline);background:var(--subtle);border-radius:9px;min-width:0;padding:20px}.concept-grid p,.concept-grid li{color:var(--muted);font-size:14px;line-height:1.75}.concept-grid ul{margin:10px 0 0;padding-left:20px}.reference-note{border-top:1px solid var(--outline);color:var(--muted);grid-template-columns:auto 1fr auto;align-items:center;gap:14px;padding:16px 18px;font-size:13px;display:grid}.reference-note strong{color:var(--ink)}.reference-note a{color:var(--blue-strong);font-weight:600;text-decoration:none}.reference-note a:hover{text-decoration:underline}.practice-panel{border:1px solid var(--outline);background:var(--subtle);border-radius:10px;padding:24px}.practice-panel ul{color:var(--muted);line-height:1.75}.practice-panel details{color:var(--blue-strong);margin:20px 0}.practice-panel summary{cursor:pointer;font-weight:600}.execution-guide{background:#f3f7ff;border:1px solid #c7d7f4;border-radius:9px;min-width:0;margin:24px 0;padding:18px}.execution-guide h3{margin:7px 0 12px}.observation-badge{color:#185abc;background:#e8f0fe;border:1px solid #aecbfa;border-radius:999px;margin-bottom:10px;padding:4px 9px;font-size:12px;font-weight:700;display:inline-flex}.execution-guide pre{color:#dbe7ff;background:var(--code);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:7px;max-width:100%;margin:0 0 12px;padding:12px 14px;overflow-x:auto}.lesson-content .execution-guide pre code{color:inherit;background:0 0;border-radius:0;padding:0;font-size:13px;line-height:1.75}.execution-guide p{margin:0 0 12px;font-size:13px;line-height:1.7}.execution-guide strong{font-size:13px}.execution-guide ul{margin:7px 0 0;padding-left:20px}.is-dark .execution-guide{background:#202b3d;border-color:#40506e}.primary-button,.secondary-button,.solution-button,.run-button{cursor:pointer;border:1px solid #0000;border-radius:6px;padding:9px 14px;font-weight:600}.primary-button,.run-button{color:#fff;background:var(--blue-strong)}.primary-button:hover,.run-button:hover{background:#0842a0}.run-button:disabled{opacity:.65;cursor:wait}.secondary-button{color:var(--blue-strong);border-color:var(--outline);background:0 0}.secondary-button:hover{background:var(--blue-soft)}.solution-button{color:#d2e3fc;background:#263d61;border-color:#48678f}.solution-button:hover:not(:disabled){color:#fff;background:#31507d;border-color:#5f82b0}.solution-button:disabled,.secondary-button:disabled{opacity:.56;cursor:not-allowed}.lab-panel{background:var(--code);color:#edf2fb;border-left:1px solid #27334a;flex-direction:column;grid-area:lab;min-width:0;display:flex;overflow:hidden}.lab-header{min-height:48px;color:var(--code-muted);border-bottom:1px solid #2a3750;flex:none;justify-content:space-between;padding:0 16px;font:500 11px JetBrains Mono}.lab-header>div{color:#edf2fb;gap:8px}.status-dot{background:var(--green);border-radius:50%;width:7px;height:7px;box-shadow:0 0 0 3px #34a85326}.lab-back-button{color:#dbe7ff;cursor:pointer;background:0 0;border:1px solid #40506e;border-radius:6px;padding:7px 9px;display:none}.editor-wrap{background:#172033;border-bottom:1px solid #2a3750;flex:0 clamp(240px,44vh,520px);grid-template-columns:44px minmax(0,1fr);height:clamp(240px,44vh,520px);min-height:0;display:grid;position:relative;overflow:hidden}.line-numbers{color:#66748c;-webkit-user-select:none;user-select:none;flex-direction:column;align-items:flex-end;height:100%;padding:18px 8px;font:400 13px/1.75 JetBrains Mono;display:flex;overflow:hidden}.editor-wrap textarea{resize:none;scrollbar-gutter:stable;scrollbar-color:#40506e #172033;color:#dbe7ff;tab-size:4;white-space:pre;background:0 0;border:0;outline:0;width:100%;height:100%;min-height:0;padding:18px 16px 18px 8px;font-size:13px;line-height:1.75;overflow:auto}.lab-toolbar{background:var(--code);border-bottom:1px solid #2a3750;flex:none;justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.lab-panel .secondary-button{color:#b7c9e8;border-color:#40506e}.lab-panel .secondary-button:hover:not(:disabled){background:#243149}.terminal{background:#111827;flex:180px;min-width:0;min-height:120px;padding:14px 16px;overflow:auto}.terminal>div{color:var(--code-muted);letter-spacing:.08em;justify-content:space-between;font:500 9px JetBrains Mono;display:flex}.terminal.is-done>div span{color:#81c995}.terminal.is-error>div span{color:#f28b82}.terminal pre{overflow-wrap:anywhere;word-break:break-word;color:#c4d1e8;white-space:pre-wrap;max-width:100%;margin:14px 0 0;font-size:11px;line-height:1.65}.lab-note{overflow-wrap:anywhere;color:#c4d1e8;border:1px solid #34435e;border-radius:8px;flex:0 auto;min-width:0;max-height:min(22vh,220px);margin:0 16px 16px;padding:14px;overflow:auto}.lab-note strong{font-size:11px}.lab-note p,.lab-note li{color:var(--code-muted);font-size:11px;line-height:1.6}.lab-note ul{margin:7px 0 0;padding-left:18px}.content-state{min-height:100vh;color:var(--ink);background:var(--subtle);place-content:center;justify-items:center;gap:12px;display:grid}.content-state .cloud-mark{margin-bottom:6px}.content-state span{color:var(--muted);font-size:13px}.content-state button{color:#fff;background:var(--blue-strong);cursor:pointer;border:0;border-radius:6px;margin-top:8px;padding:10px 14px}.content-state.is-error strong{color:var(--red)}.tweaks-trigger{z-index:8;border:1px solid var(--outline);background:var(--surface-raised);box-shadow:var(--shadow);color:var(--blue-strong);cursor:pointer;border-radius:7px;padding:10px 14px;font-weight:600;position:fixed;bottom:18px;right:18px}.tweaks-panel{z-index:9;width:240px;color:var(--ink);background:var(--surface-raised);border:1px solid var(--outline);box-shadow:var(--shadow);border-radius:10px;gap:14px;padding:16px;display:grid;position:fixed;bottom:66px;right:18px}.tweaks-heading{justify-content:space-between}.tweaks-heading button{color:var(--muted);cursor:pointer;background:0 0;border:0;font-size:11px}.tweaks-panel label{color:var(--muted);gap:7px;font-size:12px;display:grid}.tweaks-panel select{width:100%;color:var(--ink);background:var(--surface);border:1px solid var(--outline);border-radius:6px;padding:8px}.tweaks-panel .switch-row{justify-content:space-between;display:flex}.is-compact .lesson-main{padding-top:14px}.is-compact .lesson-heading{margin:22px 0 18px}.is-compact .lesson-content{padding-top:20px}.is-compact .lesson-heading h1{font-size:34px}.is-compact .request-flow{margin:18px 0;padding:16px}.layout-focus{grid-template-columns:0 minmax(520px,1fr) minmax(360px,480px)}.layout-focus .course-nav{visibility:hidden}.layout-review{grid-template-columns:264px 1fr 0}.layout-review .lab-panel{visibility:hidden}.is-dark{--ink:#e8eaed;--muted:#aeb4bd;--subtle:#11151b;--surface:#181c22;--surface-raised:#20252d;--outline:#39414d;--outline-soft:#2b323c;--blue-soft:#22354f;--shadow:0 4px 16px #00000059}@media (width<=1180px){.app-shell{grid-template-columns:1fr;grid-template-areas:"topbar""main"}.course-nav{display:none}.lesson-main{margin-right:min(430px,52vw)}.mobile-course-picker{color:var(--muted);gap:6px;margin-bottom:18px;font-size:12px;display:grid}.mobile-course-picker select{border:1px solid var(--outline);width:100%;min-height:44px;color:var(--ink);background:var(--surface);border-radius:6px;padding:9px 12px}.lab-panel{z-index:5;width:min(430px,52vw);position:fixed;top:64px;bottom:0;right:0;box-shadow:-8px 0 24px #2021242e}.layout-review .lab-panel{display:none}.layout-review .lesson-main{margin-right:0}.topbar{grid-template-columns:auto 1fr auto}}@media (width<=760px){.atlas-link{font-size:0}.atlas-link:after{content:"Atlas ↗";font-size:12px}.app-shell{padding-top:58px;display:block}.topbar{justify-content:space-between;height:58px;padding:0 14px;display:flex;position:fixed;inset:0 0 auto}.header-context,.text-button,.course-nav{display:none}.lesson-main{min-height:calc(100vh - 58px);margin-right:0;padding:18px 18px 96px}.lesson-heading{margin:26px 0 20px;display:block}.lesson-heading h1{font-size:32px}.lesson-status{margin-top:14px;display:inline-block}.request-flow{grid-template-columns:1fr}.request-flow i{text-align:center;transform:rotate(90deg)}.detail-grid{grid-template-columns:1fr;gap:20px}.concept-grid{grid-template-columns:1fr}.reference-note{grid-template-columns:1fr;gap:6px}.lab-panel{display:none}.layout-focus .lab-panel{width:100%;display:flex;top:58px}.layout-focus .lab-note{margin-bottom:72px}.layout-focus .lesson-main{display:none}.layout-focus .lab-back-button{align-items:center;min-height:36px;display:inline-flex}.lesson-tabs{justify-content:space-between;gap:8px}.lesson-tabs button{min-height:44px;padding-inline:8px}.primary-button,.secondary-button,.solution-button,.run-button,.tweaks-trigger{min-height:44px}.tweaks-trigger{bottom:12px;right:12px}.tweaks-panel{bottom:60px;right:12px}}@media (prefers-reduced-motion:no-preference){button,a,.lesson-link{transition:color .16s,background-color .16s,border-color .16s,transform .16s}button:active{transform:translateY(1px)}}
