@charset "UTF-8";
:root{--paper:#fbfaf7;--white:#fff;--ink:#263c40;--muted:#607174;--teal:#176e65;--teal-soft:#e9f2ed;--warm:#bc713b;--line:#dfe5df;--body-size:18px;--nav-width:274px;color-scheme:light}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;background:var(--paper);color:var(--ink);font:var(--body-size)/1.9 "Microsoft YaHei","PingFang SC",system-ui,sans-serif}button,input,select{font:inherit}button,a,input,select,summary{-webkit-tap-highlight-color:transparent}button,summary{cursor:pointer}button{color:inherit}a{color:var(--teal);text-underline-offset:4px;text-decoration-thickness:1px}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #d48644;outline-offset:4px}button:disabled{cursor:default;opacity:.4}p{margin:16px 0}h1,h2,h3,h4{line-height:1.5;font-weight:650;text-wrap:pretty}h1{font-size:clamp(30px,3.4vw,44px);letter-spacing:-1px;margin:12px 0 24px}h2{font-size:27px;margin:42px 0 24px}h3{font-size:21px;margin:26px 0 15px}h4{font-size:19px}ul,ol{padding-left:26px}li{margin:8px 0}li p{margin:8px 0}strong{font-weight:650}code,pre{font-family:"Cascadia Code",Consolas,"SFMono-Regular",monospace}code{font-size:.92em;background:#edf0eb;border-radius:4px;padding:2px 5px;overflow-wrap:anywhere}pre{white-space:pre;overflow:auto;background:#eff3f0;border:1px solid var(--line);padding:20px;font-size:15px;line-height:1.85;border-radius:10px}pre code{padding:0;background:none;overflow-wrap:normal}img{max-width:100%;height:auto}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.skip-link{position:fixed;top:-100px;left:20px;z-index:100;background:#fff;padding:10px}.skip-link:focus{top:10px}
.sidebar{width:var(--nav-width);height:100vh;position:fixed;top:0;left:0;display:flex;flex-direction:column;border-right:1px solid var(--line);background:#f1f3ed;padding:30px 19px 18px;z-index:30}.brand{display:flex;gap:13px;align-items:center;color:var(--ink);text-decoration:none;font-weight:700;font-size:20px;padding-left:7px;line-height:1.5}.brand small{display:block;font-size:11px;letter-spacing:1.8px;font-weight:500;color:var(--muted);margin-top:4px}.brand-mark{width:42px;height:47px;display:grid;place-items:center;background:var(--teal);color:#fff;border-radius:13px 3px 13px 3px;font:italic 27px Georgia,serif}.sidebar-intro{font-size:13px;line-height:1.7;color:var(--muted);margin:21px 8px}.search-label{font-size:12px;color:var(--muted);margin:0 8px 7px}.search-wrap input{width:100%;font-size:12px;background:#fff;border:1px solid #d3ded6;border-radius:8px;padding:10px;min-height:42px}.sidebar nav{overflow-y:auto;overscroll-behavior:contain;min-height:100px;margin:17px -7px 0;padding:0 5px 14px}.nav-group{margin-bottom:12px}.nav-group-title{display:block;font-size:11px;letter-spacing:1px;color:var(--muted);font-weight:650;padding:8px 10px}.week-link{display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border-radius:7px;text-decoration:none;color:#465a5c;font-size:12px;line-height:1.65;margin:2px 0;transition:background .16s}.week-link:hover{background:#e4ebe2}.week-link.active{background:#dcebe1;color:#155d54;box-shadow:inset 3px 0 var(--teal);font-weight:650}.week-number{font-size:11px;font-variant-numeric:tabular-nums;opacity:.7;flex:0 0 23px;padding-top:1px}.week-link .done-dot{margin-left:auto;flex-shrink:0;color:#2b7963}.sidebar-bottom{margin-top:auto;padding:14px 5px 0;border-top:1px solid var(--line)}.progress-caption{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}progress{width:100%;height:5px;appearance:none;border:0;border-radius:5px;background:#dce5dc}progress::-webkit-progress-bar{background:#dce5dc;border-radius:5px}progress::-webkit-progress-value{background:var(--teal);border-radius:5px}progress::-moz-progress-bar{background:var(--teal)}.tiny{font-size:11px;line-height:1.6;color:var(--muted);margin:7px 0}.sidebar .quiet{padding:4px 0;font-size:12px}.muted{color:var(--muted);font-size:14px}#search-status{margin:0 7px}.reader{margin-left:var(--nav-width)}.topbar{height:68px;position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:0 36px;background:rgba(251,250,247,.97);border-bottom:1px solid var(--line);font-size:12px}.top-actions{display:flex;gap:18px;align-items:center;white-space:nowrap}.top-actions a{text-decoration:none}.top-actions select{font-size:12px;background:transparent;color:var(--ink);border:0;padding:6px 2px}.quiet{border:0;background:transparent;border-radius:5px;padding:7px 10px;font-size:13px}.quiet:hover{background:#e8eee7}.mobile-menu{display:none}.reading-track{position:sticky;top:68px;z-index:21;height:2px;background:transparent}#reading-progress{width:0;height:100%;background:var(--warm)}main{max-width:1000px;margin:0 auto;padding:42px 52px 60px;min-height:70vh}.hero{padding:10px 0 28px;border-bottom:1px solid var(--line)}.eyebrow{font-size:11px;font-weight:700;letter-spacing:2px;color:var(--teal);margin:0 0 12px}.hero-meta{display:flex;align-items:center;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin:20px 0}.pill{display:inline-block;background:var(--teal-soft);color:var(--teal);padding:3px 10px;border-radius:100px;font-size:11px}.goals{list-style:none;padding:0;margin:18px 0 0;display:grid;gap:8px}.goals li{font-size:16px;margin:0;padding-left:22px;position:relative}.goals li:before{content:'↗';position:absolute;left:0;color:var(--warm)}.prerequisites{font-size:14px;margin:22px 0 0}.prerequisites summary{color:var(--muted)}.toc{padding:20px 0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:7px 15px;font-size:12px;line-height:1.7}.toc a{color:var(--muted);text-decoration:none}.toc a:hover{color:var(--teal)}.lesson-section{margin:38px 0 48px;scroll-margin-top:90px}.lesson-section h2{display:flex;align-items:baseline;gap:15px}.section-number{font-size:13px;font-weight:400;color:var(--warm);font-variant-numeric:tabular-nums;letter-spacing:1px}.worked{padding:24px 28px;margin:30px 0;background:#f0f4ec;border-left:3px solid #9ab59e;border-radius:0 12px 12px 0;font-size:.94em}.worked h3{margin:0 0 12px}.worked-result{border-top:1px solid #d4dfd0;padding-top:5px;margin-top:18px}.formula{position:relative;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:25px 25px 33px;margin:26px 0;overflow-x:auto}.formula-zoom{border:0;background:none;display:block;max-width:100%;padding:0;cursor:zoom-in}.formula-zoom img{display:block;max-width:none;max-height:none;min-height:22px}.zoom-hint{position:absolute;right:12px;bottom:5px;color:#768683;font-size:10px}.inline-math{display:inline-flex;vertical-align:middle;padding:0 3px;max-width:100%;overflow:auto}.inline-math img{max-width:none}.symbols{font-size:14px;border-left:2px solid var(--line);padding:0 0 0 16px;margin:12px 0 30px;color:var(--muted)}details summary{list-style-position:outside;margin-left:14px}details[open]>summary{margin-bottom:14px}.table-scroll{overflow-x:auto;margin:25px 0;border:1px solid var(--line);border-radius:10px}table{border-collapse:collapse;width:100%;font-size:14px;line-height:1.8}th,td{text-align:left;padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:top;min-width:90px}th{background:#edf2ea;font-weight:650}tr:last-child td{border-bottom:0}.section-lead{color:var(--muted);font-size:15px}.section-separator{margin:55px 0 0;padding-top:12px;border-top:1px solid var(--line)}
.lab{border:1px solid #cbded2;border-radius:16px;margin:35px 0 50px;background:#f5f8f1;padding:27px}.lab h2{font-size:25px;margin:4px 0 10px}.lab p{font-size:15px}.lab-visual{background:#fff;border:1px solid #e0e8df;border-radius:10px;margin:20px 0 14px;padding:8px;overflow:auto}.lab-visual svg{width:100%;min-width:560px;display:block}.lab-visual svg text{font:14px "Microsoft YaHei",sans-serif;fill:#43585b}.lab-controls{display:flex;gap:10px 22px;align-items:center;flex-wrap:wrap;font-size:13px}.lab-controls label{display:flex;gap:10px;align-items:center}.lab-controls input[type=range]{accent-color:var(--teal);width:145px}.lab-controls select{padding:6px;border:1px solid #cbdad0;border-radius:5px;background:white}.lab-controls output{min-width:40px;font-variant-numeric:tabular-nums}.lab-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:16px 0;border-bottom:1px solid var(--line);margin-bottom:14px}.lab-metrics div{font-size:12px;color:var(--muted)}.lab-metrics strong{display:block;font-size:23px;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.lab-note{font-size:13px!important;line-height:1.75;color:var(--muted);margin-bottom:0}.primary,.secondary{border-radius:7px;padding:8px 15px;font-size:13px;font-weight:600;min-height:40px}.primary{background:var(--teal);color:white;border:1px solid var(--teal)}.primary:hover{background:#125d55}.secondary{background:#fff;border:1px solid #bdcfc2}.secondary:hover{background:#edf4eb}.lab-status{font-size:13px;color:#8a512b;min-height:23px;margin:7px 0}.code-workbench{border:1px solid #cddbd2;border-radius:13px;overflow:hidden;background:#fff}.code-tabs{display:flex;gap:7px;padding:12px 17px;background:#f0f4ed;border-bottom:1px solid var(--line);align-items:center}.code-tabs button{font-size:13px;font-weight:600;border:0;background:transparent;border-radius:6px;padding:6px 14px}.code-tabs button[aria-selected=true]{color:white;background:var(--teal)}.code-tabs .code-download{margin-left:auto;font-size:12px}.code-toolbar{display:flex;gap:8px;align-items:center;padding:14px 18px;flex-wrap:wrap}.step-count{font-size:12px;color:var(--muted);margin-right:auto}.code-explanation{padding:0 24px 18px;border-bottom:1px solid var(--line)}.code-explanation h3{font-size:18px;margin:3px 0 8px}.code-explanation p{font-size:15px;line-height:1.85;margin:8px 0}.checkpoint{color:#87552f;background:#fbf3e8;padding:10px 13px;border-radius:6px;font-size:13px!important}.code-viewport{max-height:480px;overflow:auto;background:#f8faf7;scroll-behavior:smooth}.code-viewport pre{border:0;border-radius:0;margin:0;padding:15px 0;background:none;overflow:visible;line-height:1.85;font-size:14px;min-width:max-content}.code-line{display:block;padding:0 24px 0 0;border-left:3px solid transparent;min-height:25.9px;transition:background .2s}.code-line.active-line{background:#e2edda;border-left-color:#6b986a}.line-number{display:inline-block;width:51px;padding-right:14px;text-align:right;user-select:none;color:#82918b;font-size:11px}.code-line .k,.code-line .kn,.code-line .kd{color:#7653a0;font-weight:600}.code-line .s,.code-line .s1,.code-line .s2,.code-line .sa,.code-line .sd{color:#9c592e}.code-line .c,.code-line .c1,.code-line .cm,.code-line .cp{color:#6d8273;font-style:italic}.code-line .nf,.code-line .nb{color:#146c80}.code-line .mi,.code-line .mf{color:#9c4c55}.code-output{padding:18px 24px;background:#f3f6ef;font-size:13px;border-top:1px solid var(--line)}.code-output pre{font-size:13px;padding:12px;background:white}.run-help{margin:20px 0;font-size:14px}.run-help pre{font-size:13px}.exercise{margin:20px 0;padding:23px 26px;background:#fff;border:1px solid var(--line);border-radius:12px}.exercise h3{font-size:18px;margin:0 0 12px}.exercise p{font-size:16px}.hint,.answer{font-size:15px;margin:14px 0}.hint summary{color:#6c7452}.answer summary{font-weight:600;color:var(--teal)}.answer[open]{border-top:1px solid var(--line);padding-top:14px}.answer-body{margin:12px 0;padding:15px 20px;background:#edf4e9;border-radius:8px}.quiz fieldset{border:1px solid var(--line);border-radius:10px;margin:23px 0;padding:20px 24px;background:#fff}.quiz legend{font-weight:600;font-size:16px;padding:0 7px;max-width:100%}.quiz label{display:flex;gap:12px;padding:10px 12px;font-size:15px;line-height:1.8;border-radius:7px;cursor:pointer;margin:3px 0;border:1px solid transparent}.quiz label:hover{background:#f4f6f0}.quiz input{accent-color:var(--teal);flex-shrink:0;align-self:flex-start;margin-top:7px}.quiz label.correct{background:#e5f2e5;border-color:#bcd7bd}.quiz label.incorrect{background:#faeee4;border-color:#e7c6ab}.quiz-feedback{font-size:14px;padding:12px 0 0;border-top:1px solid var(--line);margin-top:12px}.quiz-result{font-weight:600;font-size:16px;margin:18px 0}.quiz-result small{display:block;font-weight:400;color:var(--muted);font-size:13px}.review-list{padding:0;list-style:none}.review-list details{padding:18px 22px;border-bottom:1px solid var(--line);font-size:16px}.review-list summary{font-weight:600}.delivery{display:grid;grid-template-columns:1fr 1fr;gap:28px;padding:22px 26px;background:#f0f4ed;border-radius:12px;font-size:15px}.delivery h3{margin-top:0}.mark-learned{display:flex;align-items:center;gap:10px;font-size:14px;margin:28px 0}.mark-learned input{accent-color:var(--teal);width:17px;height:17px}.references{font-size:13px;padding-left:20px}.references li{margin-bottom:13px}.references span{display:block;color:var(--muted)}.week-pager{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding-top:30px;margin-top:40px;font-size:14px}.week-pager a{text-decoration:none;max-width:48%}.week-pager small{display:block;color:var(--muted);font-size:11px}.site-footer{padding:20px 35px 36px;font-size:11px;text-align:center;color:var(--muted);border-top:1px solid var(--line)}#formula-dialog{max-width:92vw;width:max-content;max-height:88vh;border:1px solid var(--line);border-radius:14px;padding:20px 25px;color:var(--ink);background:#fff;box-shadow:0 20px 80px #203b3833}#formula-dialog::backdrop{background:#1b343b80}#formula-dialog form{text-align:right;margin-bottom:25px}#formula-large{overflow:auto;max-width:85vw;padding:15px}#formula-large img{max-width:none;width:auto;min-height:60px}#formula-dialog p{font-size:12px;color:var(--muted)}#toast{position:fixed;bottom:24px;left:calc(50% + var(--nav-width)/2);transform:translateX(-50%);max-width:80vw;background:#203c38;color:white;border-radius:7px;padding:9px 18px;font-size:13px;opacity:0;pointer-events:none;z-index:90;transition:opacity .2s}#toast.visible{opacity:1}.static-reader main{max-width:980px}.static-reader .formula-zoom{cursor:default}.static-reader .zoom-hint{display:none}.empty-search{font-size:13px;padding:15px 10px;color:var(--muted)}
@media(min-width:1500px){:root{--nav-width:300px}main{padding-left:68px;padding-right:68px}.sidebar{padding-left:27px;padding-right:27px}}
@media(max-width:1050px){:root{--nav-width:235px}.sidebar{padding:25px 13px 15px}main{padding:30px 32px 45px}.topbar{padding:0 25px}.top-actions{gap:11px}.brand{font-size:18px}.sidebar-intro{font-size:12px}.lab{padding:23px}}
@media(max-width:800px){:root{--nav-width:0px}.sidebar{width:274px;transform:translateX(-100%);transition:transform .22s;box-shadow:10px 0 30px #183f3522;top:68px;height:calc(100vh - 68px)}body.nav-open .sidebar{transform:translateX(0)}.mobile-menu{display:inline-block}.reader{margin-left:0}.topbar{padding:0 15px;gap:8px}.top-actions{gap:8px}#breadcrumb{display:none}main{padding:28px 24px 40px}.hero{padding-top:0}h2{font-size:25px}.delivery{grid-template-columns:1fr;gap:15px}.formula{justify-content:flex-start;padding:20px 18px 29px}.formula-zoom{margin:auto}.lab-metrics strong{font-size:20px}.code-explanation{padding:0 17px 15px}.code-tabs{padding:10px}.worked{padding:20px}.quiz fieldset{padding:16px}.lab{padding:20px}.lab-controls{gap:10px}.lab-controls input[type=range]{width:125px}.site-footer{padding:20px}.sidebar-bottom{padding-bottom:4px}}
@media(max-width:450px){.topbar{font-size:11px}.top-actions select{max-width:80px}.top-actions{gap:5px}.top-actions a{font-size:11px}main{padding:22px 17px 35px}.lab{padding:16px}.lab-metrics{gap:7px}.lab-metrics strong{font-size:18px}.exercise{padding:19px}.code-download{font-size:11px!important}.hero-meta{gap:10px}.brand small{font-size:10px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
@media print{.sidebar,.topbar,.reading-track,.toc,.lab-controls,.code-toolbar,.code-tabs,.mark-learned,.week-pager,.site-footer,.zoom-hint,.skip-link,#toast{display:none!important}.reader{margin:0}main{max-width:none;padding:0}body{background:white;font-size:11pt}.hero{padding:0}.lab,.exercise,.worked,.formula,fieldset{break-inside:avoid;box-shadow:none}h2,h3,h4{break-after:avoid}pre{white-space:pre-wrap;overflow:visible;font-size:9pt}.code-viewport{max-height:none;overflow:visible}.code-viewport pre{min-width:0;white-space:pre-wrap}.code-line{white-space:pre-wrap}.formula{overflow:visible}.formula img{max-width:100%}.formula-zoom{border:0}.lesson-section{margin:20px 0}.delivery{display:block}a{color:inherit}.section-separator{margin-top:25px}}
