@import"https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700&family=Noto+Sans+SC:wght@400;450;500;600;650;700;800&display=swap";:root{font-family:Noto Sans SC,Microsoft YaHei,system-ui,sans-serif;color:#17262e;background:#f2f5f7;font-synthesis:none;font-size:15px;font-weight:400;--accent:#107e67;--ink:#17262e;--muted:#71808a;--line:#dfe5e9;--surface:#fff;--rail:#192d34}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible,pre:focus-visible{outline:3px solid #76bdae;outline-offset:3px}a{color:inherit;text-decoration:none}button{color:inherit}svg{width:19px;height:19px;flex-shrink:0}h1,h2,h3,p{margin:0}button{border:0}fieldset{min-width:0;border:0;padding:0;margin:0}output,code,.lesson-number,.range-limits,.tcp-readout b,.readout-row strong{font-family:Cascadia Code,Consolas,monospace}.app-shell{display:flex;min-height:100vh}.sidebar{width:218px;position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column;background:var(--rail);color:#c5d2d8;z-index:20}.brand{height:116px;padding:24px 20px;display:flex;align-items:center;gap:11px;color:#fff}.brand-symbol{display:grid;place-items:center;width:33px;height:44px}.brand-symbol svg{width:33px;height:38px;stroke-width:1.5;color:#bde5d9}.brand strong{font-family:Barlow Condensed,Arial Narrow,sans-serif;font-size:25px;letter-spacing:.1px;white-space:nowrap}.brand span{display:block;font-size:12px;letter-spacing:3px;margin-top:5px;color:#e3ecef}.sidebar nav{display:flex;flex-direction:column;gap:5px}.sidebar nav a{display:flex;align-items:center;gap:17px;padding:19px 18px;border-left:4px solid transparent;font-size:14px;min-height:59px;transition:background .18s}.sidebar nav a:hover{background:#243b43}.sidebar nav a[aria-current]{border-color:#68d3b5;background:#28434b;color:#fff}.lesson-number{font-size:16px;color:#acbdc6}.sidebar nav a[aria-current] .lesson-number{color:#bce9dd}.sidebar-footer{margin:auto 21px 28px;padding-top:22px;border-top:1px solid #395058;font-size:12px;color:#8fa6b0}.sidebar-footer>svg{display:none}.sidebar-footer p{line-height:1.8;margin-bottom:9px;letter-spacing:1px}.sidebar-footer>span{font-size:10px;letter-spacing:1.1px}.main-content{margin-left:218px;flex:1;min-width:0;padding:25px 25px 18px}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:15px;margin-bottom:15px}.page-header h1{font-size:clamp(23px,2.25vw,34px);font-weight:800;line-height:1.4;letter-spacing:-1px}.page-header p{font-size:15px;color:#64737e;line-height:1.7;margin-top:5px}.button{display:inline-flex;align-items:center;justify-content:center;gap:7px;border-radius:5px;padding:9px 13px;min-height:37px;font-size:13px;font-weight:500;transition:background .15s,box-shadow .15s;white-space:nowrap}.button svg{width:17px;height:17px}.button.primary{background:var(--accent);color:#fff;border:1px solid var(--accent);box-shadow:0 1px 2px #092f2315}.button.primary:hover{background:#096651}.button.secondary{background:#fff;border:1px solid #d3dce1;color:#35464e}.button.secondary:hover{background:#f3f7f7;border-color:#adbbbf}.reset-experiment{margin-top:4px;padding:9px 15px;font-size:14px}.pipeline{display:flex;align-items:center;gap:15px;margin:10px 0 20px;min-height:37px}.pipeline-step{display:flex;align-items:center;justify-content:space-between;gap:18px;flex:1}.pipeline-step:last-child{flex:.8}.pipeline-step>svg{width:27px;color:#9cabb4;stroke-width:1}.pipeline-step>button{display:flex;align-items:center;gap:11px;font-size:14px;font-weight:600;white-space:nowrap;background:transparent;padding:6px 0}.pipeline-step>button>span{font-family:Consolas,monospace;font-weight:400;color:#88969f;margin-right:8px}.pipeline-step>button>svg{display:none}.pipeline-step>button[aria-current]{color:var(--accent)}.pipeline-step>button:hover{color:var(--accent)}.lab-layout{display:grid;grid-template-columns:minmax(0,1.67fr) minmax(315px,1fr);gap:17px;align-items:start}.experiment-column{min-width:0}.viewport-panel,.control-panel,.guide-panel{background:var(--surface);border:1px solid #e5eaee;border-radius:7px;overflow:hidden}.viewport-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 14px;min-height:49px}.viewport-toolbar h2,.section-heading h2{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:650;white-space:nowrap}.viewport-toolbar h2>svg{width:19px;height:19px}.view-modes{display:flex;gap:5px}.view-modes button{display:flex;align-items:center;gap:4px;background:#f8f9fb;border:1px solid #dde4e8;border-radius:4px;padding:5px 7px;font-size:11px;white-space:nowrap}.view-modes button>svg{width:14px;height:14px;stroke-width:1.5}.view-modes button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.viewport-subbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;background:#fbfcfc;border-top:1px solid var(--line)}.canvas-wrap{height:clamp(350px,47vh,550px);position:relative;overflow:hidden;background:#edf1f3}.scene-canvas{width:100%;height:100%;touch-action:none}.scene-canvas canvas{display:block}.canvas-message{position:absolute;inset:0;display:grid;place-items:center;padding:35px;text-align:center;background:#edf1f3e8;color:#64777d;font-size:14px;pointer-events:none}.canvas-message.error{color:#b64e3b}.canvas-hint{position:absolute;top:13px;left:16px;color:#829198;font-size:11px;pointer-events:none;letter-spacing:.5px}.camera-reset{position:absolute;top:12px;right:12px;background:#ffffffba;display:grid;place-items:center;width:30px;height:30px;border:1px solid #d6e0e4;border-radius:5px;color:#65747b}.camera-reset svg{width:15px;height:15px}.scene-origin{position:absolute;bottom:20px;left:16px;display:flex;flex-direction:column;gap:6px;font-size:10px;color:#87959e;pointer-events:none}.axis-z{font-family:Consolas,monospace;font-size:14px;color:#568da7}.tcp-readout{position:absolute;bottom:15px;right:12px;display:flex;align-items:center;gap:13px;max-width:calc(100% - 18px);padding:8px 10px;border:1px solid #ffffffaa;background:#ffffffd9;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);font-size:11px;border-radius:5px;color:#60727b;pointer-events:none}.tcp-readout b{color:#21343f;font-size:12px;font-weight:500;margin-left:4px}.viewport-status{display:flex;justify-content:space-between;gap:10px;padding:8px 13px;font-size:10px;color:#7e8c96;background:#fbfcfd}.viewport-status>span{display:flex;align-items:center;gap:7px}.viewport-status i{height:5px;width:5px;display:inline-block;border-radius:50%;background:#288b75}.viewport-status b{font-family:Consolas,monospace;font-size:10px;font-weight:400;border-left:1px solid #d6dfe3;padding-left:8px;margin-left:4px}.control-panel{margin-top:12px;padding:13px 16px 16px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:16px}.sliders{display:flex;flex-direction:column;gap:17px}.sliders:disabled{opacity:.45}.range-row{display:grid;grid-template-columns:76px minmax(70px,1fr) 63px;gap:15px;align-items:start}.range-row>label{font-size:13px;line-height:22px}.range-row>label small{font-size:10px;margin-left:8px;color:#8998a1;font-family:Consolas,monospace}.range-track-wrap{padding-top:3px}.range-track-wrap input{appearance:none;display:block;height:5px;border-radius:5px;width:100%;margin:7px 0 0;background:linear-gradient(to right,#1b967b var(--fill),#dbe3e8 var(--fill))}.range-track-wrap input::-webkit-slider-thumb{appearance:none;border:1px solid #08705a;height:17px;width:17px;border-radius:50%;background:#12846b;box-shadow:0 1px 3px #203c3b30;cursor:grab}.range-track-wrap input::-moz-range-thumb{border:1px solid #08705a;height:16px;width:16px;border-radius:50%;background:#12846b}.range-limits{display:flex;justify-content:space-between;font-size:10px;color:#8b98a1;padding-top:9px}.range-number{display:flex;gap:5px;align-items:center;font-size:11px;color:#7a8b94}.range-number output{background:#f9fbfc;border:1px solid #e1e7eb;min-width:49px;min-height:28px;padding:4px 5px;display:block;text-align:center;border-radius:4px;font-size:13px;color:#273943}.control-footer{display:flex;justify-content:space-between;align-items:center;margin-top:13px;padding-top:11px;border-top:1px solid var(--line);font-size:11px;color:#8b959e;gap:8px}.text-button{display:flex;align-items:center;gap:8px;color:var(--accent);padding:0;background:transparent;font-size:12px}.text-button>svg{width:14px;height:14px}.small-note{font-size:11px!important;line-height:1.8;color:#82919a;margin-top:12px!important}.experiment-footnote{display:flex;align-items:center;justify-content:center;gap:7px;color:#87949d;font-size:10px;margin-top:13px;line-height:1.7}.experiment-footnote svg{width:13px;height:13px}.notice{padding:11px 15px;border:1px solid #b9dccf;border-radius:5px;color:#266957;background:#edf8f3;margin-top:10px;font-size:13px}.guide-panel{padding:19px 18px 15px;display:flex;flex-direction:column;min-height:calc(47vh + 305px)}.guide-introduction h2{font-size:21px;font-weight:750;letter-spacing:-.5px;line-height:1.45;margin-bottom:9px}.guide-introduction p{font-size:14px;line-height:1.9;color:#60717c}.try-callout{display:flex;align-items:flex-start;gap:11px;padding:15px 13px;background:#eef8f5;border-radius:5px;margin:17px 0 15px;color:#12826a}.try-callout>svg{margin-top:2px;width:21px;height:24px;stroke-width:1.5}.try-callout h3{font-size:14px;font-weight:650;margin-bottom:5px}.try-callout p{font-size:12px;line-height:1.85;color:#637b77}.guide-tabs{display:flex;border-bottom:1px solid #d9e3e7;gap:8px;margin-bottom:19px}.guide-tabs button{flex:1;background:transparent;padding:10px 0 12px;font-size:13px;color:#79858e;border-bottom:3px solid transparent;margin-bottom:-1px;white-space:nowrap}.guide-tabs button[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent);font-weight:650}.guide-content{flex:1;min-width:0}.explanation-list{display:flex;flex-direction:column;gap:15px}.explanation-row{display:flex;gap:11px;align-items:flex-start}.explanation-row>span{display:grid;place-items:center;flex-shrink:0;width:24px;height:24px;border-radius:50%;background:#edf1f4;font-family:Consolas,monospace;color:#5b717c;font-size:12px;margin-top:1px}.explanation-row h3{font-size:13px;font-weight:650;margin-bottom:4px}.explanation-row p{font-size:12px;color:#697a84;line-height:1.8}.when-block{margin-top:18px;border-top:1px solid #e7ecef;padding-top:13px}.when-block h3{font-size:12px;font-weight:650;color:#24735f;margin-bottom:5px}.when-block h3:not(:first-child){margin-top:10px;color:#7c8991}.when-block p{font-size:12px;color:#6a7a85;line-height:1.8}.scope-note{border-left:2px solid #cbd6dc;padding-left:10px;color:#85949c;font-size:11px;line-height:1.8;margin-top:16px}.next-lesson{margin-top:18px;background:var(--accent);color:#fff;width:100%;padding:12px 13px;border-radius:4px;display:flex;justify-content:space-between;align-items:center;font-size:13px}.next-lesson:hover{background:#086850}.next-lesson svg{width:17px;height:17px}.references{margin-top:14px;font-size:11px;color:#7c8b94}.references summary{cursor:pointer}.references a{display:flex;align-items:center;justify-content:space-between;padding:7px 0;color:#317b68}.references svg{width:11px;height:11px}.segmented{display:flex;border:1px solid #dce5e7;border-radius:5px;overflow:hidden;background:#f5f8f9}.segmented button{background:transparent;padding:6px 9px;font-size:11px;white-space:nowrap;color:#6f818a}.segmented button[aria-pressed=true]{background:#fff;color:#13745f;box-shadow:0 0 3px #314d5120;font-weight:600}.toggle-label{display:inline-flex;align-items:center;gap:7px;cursor:pointer;position:relative;font-size:11px;color:#607680;white-space:nowrap}.toggle-label input{position:absolute;opacity:0;width:27px;height:16px;inset:0 auto auto 0;margin:0}.toggle-track{width:27px;height:16px;background:#cbd6dc;border-radius:12px;position:relative;transition:background .2s;flex-shrink:0}.toggle-track:after{content:"";position:absolute;width:12px;height:12px;top:2px;left:2px;background:#fff;border-radius:50%;box-shadow:0 1px 2px #29454020;transition:transform .2s}.toggle-label input:checked+.toggle-track{background:var(--accent)}.toggle-label input:checked+.toggle-track:after{transform:translate(11px)}.toggle-label input:focus-visible+.toggle-track{outline:3px solid #76bdae;outline-offset:3px}.actions{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:18px;align-items:center}.actions.compact{margin:15px 0 0}.actions .toggle-label{margin-left:auto}.status{font-size:10px;color:#819099;line-height:1.6}.status.good{color:#178069}.readout-row{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #e5ecee;margin-top:17px;padding-top:13px;gap:8px}.readout-row>div{display:flex;flex-direction:column;gap:7px}.readout-row span{font-size:10px;color:#84959d}.readout-row strong{font-size:14px;font-weight:500;color:#354c55}.readout-row strong.warning-text{color:#bc6240}.physics-toggles{display:flex;gap:17px;flex-wrap:wrap}.solver-result{display:flex;align-items:start;gap:5px;flex-direction:column;margin-top:14px;padding:11px 12px;border-radius:5px;background:#f0f8f4;font-size:12px;color:#397361}.solver-result strong{font-size:13px}.solver-result code{font-size:11px}.solver-result.failure{background:#fff5ef;color:#ad6043}.code-view{min-width:0}.code-heading{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:11px;color:#57717c;margin-bottom:8px}.code-heading button{display:grid;place-items:center;background:#f0f4f5;border-radius:4px;padding:6px;color:#617e87}.code-heading svg{width:14px;height:14px}.code-view pre{background:#1d3038;color:#c2e0d9;font-family:Consolas,monospace;border-radius:5px;padding:14px 12px;margin:0;font-size:11px;line-height:1.85;max-height:395px;overflow:auto;tab-size:2;white-space:pre}.source-options{display:flex;margin-bottom:9px;gap:5px}.source-options button{padding:5px 7px;background:#f2f6f6;border-radius:4px;font-size:11px;color:#798991}.source-options button[aria-pressed=true]{color:var(--accent);background:#e5f5ee}.source-download{font-size:11px;display:flex;align-items:center;gap:6px;margin-top:10px;color:var(--accent)}.source-download>svg{width:13px;height:13px}.download-row{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px;font-size:11px;color:var(--accent)}.download-row>a{display:flex;align-items:center;gap:5px}.download-row svg{width:13px;height:13px}.download-row .button{font-size:10px;padding:6px 8px;min-height:30px}.recipe-options{display:flex;gap:6px;flex-wrap:wrap}.recipe-options button{background:#f3f6f7;border:1px solid #e1e8eb;padding:7px 10px;border-radius:4px;font-size:11px}.recipe-options button[aria-pressed=true]{color:#fff;background:var(--accent);border-color:var(--accent)}.recipe-panel p{font-size:12px;line-height:1.8;color:#6e8089;margin:12px 0}.table-scroll{overflow-x:auto}.recipe-panel table{border-collapse:collapse;width:100%;font-size:11px;text-align:center}.recipe-panel th{background:#f3f6f8;padding:10px 5px;color:#697c86;font-weight:500;white-space:nowrap}.recipe-panel td{padding:10px 5px;border-bottom:1px solid #e4eaed;color:#9aa6ac;white-space:nowrap}.recipe-panel td.required{color:var(--accent);font-weight:600}.recipe-flow{padding:10px 12px;background:#eef7f3;font-size:11px;line-height:1.8;color:#427867;border-radius:4px}@media(min-width:1600px){.main-content{padding:32px 32px 22px}.sidebar{width:240px}.main-content{margin-left:240px}.lab-layout{grid-template-columns:minmax(0,1.8fr) minmax(380px,1fr);gap:22px}.guide-panel{padding:25px}.guide-introduction p{font-size:16px}.try-callout p,.explanation-row p,.when-block p{font-size:14px}.explanation-row h3{font-size:15px}.guide-introduction h2{font-size:25px}.viewport-toolbar h2,.section-heading h2{font-size:17px}.view-modes button{font-size:13px}.guide-tabs button{font-size:15px}.range-row>label{font-size:15px}.canvas-wrap{height:53vh}.guide-panel{min-height:calc(53vh + 305px)}}@media(max-width:1170px){.sidebar{width:185px}.brand{padding:22px 15px;gap:7px}.brand strong{font-size:22px}.brand span{font-size:10px;letter-spacing:2px}.brand-symbol{width:25px}.brand-symbol svg{width:25px}.sidebar nav a{padding:17px 12px;gap:10px;font-size:12px}.main-content{margin-left:185px;padding:22px 17px}.lab-layout{grid-template-columns:minmax(0,1.45fr) minmax(285px,1fr);gap:12px}.pipeline,.pipeline-step{gap:8px}.pipeline-step button{gap:5px;font-size:12px}.pipeline-step button>span{margin-right:3px}.pipeline-step>svg{width:20px}.view-modes button>span{display:none}.view-modes button{padding:6px}.range-row{grid-template-columns:61px minmax(50px,1fr) 54px;gap:10px}.control-panel{padding:12px}.range-row>label small{margin-left:5px}.guide-panel{padding:16px 14px}.tcp-readout{gap:8px}.guide-introduction h2{font-size:20px}.page-header h1{font-size:26px}.status{font-size:9px}.physics-toggles{gap:10px}}@media(max-width:940px){.sidebar{width:175px}.main-content{margin-left:175px}.lab-layout{grid-template-columns:minmax(0,1fr)}.guide-panel{min-height:0}.guide-content{max-height:none}.guide-introduction p{font-size:15px}.try-callout p,.explanation-row p,.when-block p{font-size:14px}.explanation-row h3{font-size:15px}.when-block h3,.guide-tabs button{font-size:14px}.scope-note{font-size:12px}.guide-panel{padding:20px}.canvas-wrap{height:440px}.page-header h1{font-size:25px}.reset-experiment{font-size:0;padding:9px}.reset-experiment>svg{width:18px;height:18px}.page-header p{font-size:13px}.view-modes button>span{display:inline}.pipeline-step>button{font-size:11px}.pipeline-step>button>span{display:none}.pipeline{gap:4px}.sidebar nav a{font-size:11px}.range-row>label{font-size:14px}.range-number output{font-size:14px}.control-panel{padding:15px}.section-heading h2,.viewport-toolbar h2{font-size:16px}}@media(max-width:620px){:root{font-size:15px}.app-shell{display:block}.sidebar{position:sticky;top:0;width:100%;height:auto;display:block;box-shadow:0 1px 8px #17303912}.brand{height:57px;padding:9px 17px}.brand-symbol{width:28px;height:30px}.brand-symbol svg{height:27px;width:27px}.brand strong{font-size:21px}.brand span{display:none}.sidebar nav{flex-direction:row;overflow-x:auto;gap:0;padding:0 10px;scrollbar-width:none}.sidebar nav a{flex-shrink:0;font-size:12px;gap:7px;padding:10px 9px;min-height:41px;border-left:0;border-bottom:3px solid transparent;white-space:nowrap}.sidebar nav a[aria-current]{border-bottom-color:#67d3b5;border-left:0;background:#29434b}.lesson-number{font-size:11px}.sidebar-footer{display:none}.main-content{margin-left:0;padding:18px 12px 26px}.page-header{gap:8px;margin-bottom:12px}.page-header h1{font-size:22px;letter-spacing:-.8px}.page-header p{font-size:12px;line-height:1.8}.reset-experiment{margin-top:0;padding:8px;min-height:33px}.pipeline{margin:5px 0 13px;gap:3px;min-height:27px}.pipeline-step{gap:3px}.pipeline-step>button{font-size:10px;gap:3px}.pipeline-step>svg{width:13px}.lab-layout{gap:13px}.viewport-toolbar{padding:10px}.viewport-toolbar h2{font-size:13px;gap:5px}.viewport-toolbar h2>svg{width:16px}.view-modes{gap:4px}.view-modes button{font-size:9px;padding:5px 6px}.view-modes button>span{display:none}.view-modes button>svg{width:14px;height:14px}.canvas-wrap{height:340px}.canvas-hint{font-size:10px;left:12px}.tcp-readout{font-size:10px;gap:8px;bottom:12px;right:8px;padding:7px 8px}.tcp-readout b{font-size:11px;margin-left:2px}.scene-origin{bottom:51px;left:12px;font-size:9px;gap:3px}.axis-z{font-size:12px}.viewport-status{font-size:9px;padding:8px;gap:4px}.viewport-status>span{gap:4px}.viewport-status b{display:none}.control-panel{padding:13px 12px}.section-heading{gap:8px;margin-bottom:16px}.section-heading h2{font-size:14px}.button{font-size:11px;padding:8px 10px;min-height:33px}.button svg{width:14px;height:14px}.range-row{grid-template-columns:60px minmax(80px,1fr) 53px;gap:11px}.range-row>label{font-size:12px}.range-row>label small{font-size:9px;margin-left:4px}.range-limits{font-size:9px}.range-number output{font-size:12px;min-width:40px}.sliders{gap:16px}.experiment-footnote{font-size:9px;padding:0 5px}.guide-panel{padding:20px 16px 16px}.guide-introduction h2{font-size:22px}.guide-introduction p{font-size:14px}.try-callout p,.explanation-row p,.when-block p{font-size:13px}.explanation-row h3{font-size:14px}.scope-note{font-size:11px}.control-footer{font-size:9px}.text-button{font-size:11px}.viewport-subbar{padding:8px 10px}.toggle-label{font-size:10px}.segmented button{font-size:10px;padding:6px 7px}.physics-toggles{gap:12px}.status{font-size:9px;max-width:145px;text-align:right}.readout-row strong{font-size:13px}.readout-row span{font-size:9px}.actions.compact{gap:7px}.actions.compact .toggle-label{margin-left:0}.recipe-options{gap:5px}.recipe-options button{font-size:10px;padding:7px 8px}.recipe-panel p{font-size:12px}.recipe-panel th,.recipe-panel td{font-size:10px}.download-row{gap:6px}.download-row .button{font-size:9px}.notice{font-size:12px}.next-lesson{font-size:14px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}@media(min-width:941px){.guide-panel{height:calc(100vh - 200px);min-height:745px;max-height:none;padding:20px}.guide-content{overflow-y:auto;padding-right:5px;min-height:90px;scrollbar-width:thin;scrollbar-color:#cfdbdf transparent}.guide-introduction h2{font-size:24px}.guide-introduction p{font-size:15px;line-height:1.85}.try-callout p{font-size:13px;line-height:1.85}.try-callout h3{font-size:15px}.explanation-row h3,.when-block h3{font-size:14px}.explanation-row p,.when-block p{font-size:14px;line-height:1.8}.guide-tabs button{font-size:14px}.scope-note{font-size:12px}.pipeline-step>button{font-size:15px}.view-modes button{font-size:12px}.range-row>label{font-size:14px}.range-number output{font-size:14px}}
