:root{--ink:#26352e;--muted:#6f7e74;--green:#28614e;--line:#dfe6df;--mono:Consolas,"Cascadia Code",monospace}*{box-sizing:border-box}body{margin:0;background:#f6f8f5;color:var(--ink);font:14px/1.6 "Segoe UI","Microsoft YaHei",sans-serif}button,input,select{font:inherit;color:inherit}button,select{cursor:pointer}button{background:white;border:1px solid var(--line);border-radius:5px;padding:7px 12px;white-space:nowrap}button:hover:not(:disabled){background:#edf3ed}button:disabled{opacity:.4;cursor:not-allowed}button:focus-visible,a:focus-visible,select:focus-visible{outline:2px solid #4d8767;outline-offset:3px}input:focus{outline:2px solid #8ab59b}a{color:inherit;text-decoration:none}h1,h2,p{margin:0}header{height:72px;background:white;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 36px;gap:48px}.brand{font-size:19px;font-weight:650;display:flex;align-items:center;gap:11px}.brand>span{width:31px;height:34px;background:var(--green);color:#f1f5df;border-radius:6px;display:grid;place-items:center;font-size:25px}nav{display:flex;gap:8px}nav button{border:0;padding:8px 20px;color:var(--muted);background:none}nav button.selected{background:#eaf1e8;color:var(--green);font-weight:600}.header-actions{display:flex;gap:12px;margin-left:auto;font-size:12px}.header-actions>button:first-child{border:0;background:none;color:var(--muted)}main{max-width:1680px;margin:0 auto;padding:26px 36px}.title-row{display:flex;justify-content:space-between;align-items:center;gap:15px}h1{font-size:24px;font-weight:650}h1 small{font-size:12px;font-weight:400;background:#eaf0e6;color:#617b53;padding:4px 8px;border-radius:4px;margin-left:12px}.title-row label{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted)}select{background:white;border:1px solid var(--line);border-radius:4px;padding:5px 8px;font-size:12px}.description{margin:8px 0 20px;font-size:13px;color:#65786b}.lab{background:white;border:1px solid var(--line);border-radius:9px;overflow:hidden}.toolbar{padding:17px 21px;display:flex;justify-content:space-between;gap:15px;align-items:center;border-bottom:1px solid var(--line)}form{display:flex;gap:9px;align-items:center}form label{font-size:12px;color:var(--muted);margin-right:2px}input{width:83px;height:36px;border:1px solid #cbd7cd;border-radius:4px;font:15px var(--mono);padding:6px 10px}.toolbar button{font-size:12px}.primary{background:var(--green);color:white;border-color:var(--green)}.primary:hover:not(:disabled){background:#214e40}.tools{display:flex;gap:10px}.tools button{border:0;color:#718273;padding:6px}.lifecycle{display:flex;gap:9px;align-items:center;padding:11px 21px;background:#fbfcfa;border-bottom:1px solid var(--line);font-size:12px}.lifecycle>span:first-child{color:var(--muted);font-size:11px;margin-right:6px}.lifecycle button{padding:5px 10px;font-size:11px}.arrow{color:#99a699}.muted-button{margin-left:auto;color:#748577;background:none!important;border-color:transparent}.lab-body{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(420px,1fr)}.visual-panel{min-width:0;display:flex;flex-direction:column}.visual-meta{padding:16px 22px;display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--muted)}#state-label{background:#edf2eb;border-radius:4px;padding:3px 8px;color:#56724b}.legend{display:flex;gap:12px;font-size:10px}.legend span{display:flex;gap:5px;align-items:center}.legend i{width:8px;height:8px;display:inline-block;border-radius:2px}.filled{background:#e5ecd8;border:1px solid #b6c9a5}.next{background:#f6ddc6;border:1px solid #d6a47e}.empty{border:1px dashed #a9b7a6}.boards{height:390px;display:flex;gap:16px;padding:0 22px}.board{flex:1;min-width:0;display:flex;flex-direction:column;position:relative}.board-caption{height:27px;font-size:12px;color:#638057}.board-caption small{margin-left:7px;font:10px var(--mono);color:#929e8c}.scene-scroll{flex:1;overflow:auto;scrollbar-width:thin}.scene{height:100%;min-height:320px;position:relative}.stack .rail{position:absolute;left:50%;transform:translateX(-50%);width:152px;bottom:26px;border:2px solid #c6d1bf;border-top:0;border-radius:0 0 7px 7px;background:#fafcf7}.node,.slot{position:absolute;border-radius:4px;display:flex;align-items:center;justify-content:center;font-family:var(--mono)}.stack .node,.stack .slot{width:130px;left:calc(50% - 65px);height:39px}.slot{border:1px dashed #d4dec9;background:#fbfcf9;color:#a1ac96;font-size:10px;z-index:1}.slot.boundary{border-color:transparent;background:none;color:#a5ae9d;font-size:9px}.node{background:#eaf0df;border:1px solid #bdcfa8;font-size:20px;color:#4d713d;z-index:3;overflow:hidden}.node.next{background:#f7dfc9;border-color:#d9ab85;color:#a2643d}.node span{max-width:calc(100% - 9px);overflow:hidden;text-overflow:ellipsis}.node::after{content:attr(data-index);position:absolute;right:5px;bottom:1px;font-size:8px;color:#80916c}.slot.current{border-color:#739a72;background:#f1f7ee}.pointer,.base-pointer{position:absolute;font:12px var(--mono);color:var(--green);z-index:5;white-space:nowrap;transition:bottom .35s ease}.stack .pointer{left:calc(50% + 86px)}.stack .base-pointer{right:calc(50% + 86px);bottom:44px;color:#6d7d64}.top-note{position:absolute;bottom:3px;text-align:center;width:100%;font-size:10px;color:#829077}.empty-label{position:absolute;inset:30% 0 auto;text-align:center;color:#89977e;font-size:12px;z-index:2}.descriptor{position:absolute;inset:23% 0 auto;display:flex;flex-direction:column;align-items:center;gap:10px;font-size:12px;color:#75856d}.descriptor code{border:1px solid #cfdac6;padding:14px 28px;border-radius:6px;background:#fafcf7;font:15px var(--mono)}.output{min-height:38px;padding-top:8px;display:flex;gap:6px;align-items:center;flex-wrap:wrap;font-size:10px;color:#829078}.output b{font:12px var(--mono);color:#9c704e;background:#faf0e6;padding:1px 5px;border-radius:3px}.queue .scene{min-height:300px}.queue .rail{position:absolute;left:8px;right:8px;top:95px;height:75px;border-block:2px solid #c8d4bd;background:#fafcf7}.queue .node{top:107px;height:51px;font-size:17px}.queue .pointer{top:68px;left:12px;font-size:10px}.queue .tail-pointer{position:absolute;top:182px;color:#638455;font:10px var(--mono);white-space:nowrap}.queue .flow{position:absolute;left:12px;right:12px;top:233px;display:flex;justify-content:space-between;font-size:11px;color:#849676}.queue .empty-label{top:119px}.readout{display:flex;gap:20px;align-items:center;flex-wrap:wrap;padding:10px 22px;border-top:1px solid #ecf0e8;font-size:11px;color:#7c8a71;min-height:44px}.readout strong{font:12px var(--mono);color:#526d40;margin-left:6px}.notice{margin:0 18px 12px;padding:10px 12px;min-height:57px;display:flex;align-items:center;background:#f0f5eb;color:#536e41;font-size:12px;line-height:1.8;border-radius:5px}.notice.error{background:#fff0e5;color:#995832}.playback{padding:12px 20px;border-top:1px solid var(--line);display:flex;align-items:center;gap:17px;font-size:11px;margin-top:auto}.playback button{border:0;background:none;padding:5px 0;font-size:12px;color:#5e7950}#play{font-weight:600}.playback label{margin-left:auto;display:flex;align-items:center;gap:7px;color:var(--muted)}#step-count{font:10px var(--mono);color:#8c9c80}.playback select{font:11px var(--mono);padding:3px}.code-panel{min-width:0;border-left:1px solid var(--line);background:#fcfdfb;display:flex;flex-direction:column}.code-heading{height:58px;padding:0 22px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #eaf0e4;font-size:12px}.code-heading strong{font-weight:600}.code-heading>div{display:flex;align-items:center;gap:10px}.code-heading button{padding:4px 9px;font-size:11px}.code-heading button[aria-pressed=true]{background:#e9f0df}.code-source{padding:15px 22px 8px;font:12px var(--mono);color:#819073}.code-scroll{padding:0 12px 16px 0;overflow:auto;flex:1;max-height:560px;min-height:380px}.code-scroll ol{margin:0;padding:0;list-style:none;counter-reset:line}.code-scroll li{counter-increment:line;display:flex;white-space:pre;line-height:1.8;font:12px/1.85 var(--mono);min-height:22px;padding:0 12px 0 0;border-left:3px solid transparent}.code-scroll li::before{content:counter(line);display:inline-block;min-width:42px;text-align:right;padding-right:15px;color:#b1bca7;font-size:10px;user-select:none}.code-scroll li.active{background:#eaf1df;border-left-color:#76a15d}.code-scroll code{font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.comment{color:#8a977d}.keyword{color:#745a8b}.string{color:#a5784b}.code-note{font-size:11px;color:#78886d;padding:12px 22px;border-top:1px solid #e5ecdf;line-height:1.8;background:#f7faf3}.history-details{margin-top:17px;background:white;border:1px solid var(--line);border-radius:7px;padding:12px 20px}summary{cursor:pointer;font-size:12px;color:#687b5c}summary>span{font:10px var(--mono);color:#9aa58f;margin-left:10px}#history{max-height:200px;overflow:auto;font:11px/1.8 var(--mono);padding-top:10px;color:#738367}.history-row{display:grid;grid-template-columns:35px 130px 1fr;gap:10px;padding:7px 0;border-top:1px solid #eff2e9}.history-row>span:first-child{color:#a5af9b}.history-row>span:last-child{overflow-wrap:anywhere}.history-row b{font-weight:400;color:#4d7140}footer{display:flex;justify-content:space-between;gap:10px;color:#9aa591;font-size:10px;padding:16px 0}dialog{max-width:calc(100% - 30px);width:600px;border:1px solid var(--line);border-radius:10px;padding:25px;color:var(--ink);font-size:13px}dialog::backdrop{background:#263b3155}dialog>div{display:flex;justify-content:space-between;align-items:center}dialog h2{font-size:20px}dialog>div button{border:0;font-size:22px}dialog li{margin:9px 0}dialog p{margin-top:15px;color:#78876e}.compare-mode .lab-body{grid-template-columns:minmax(0,1.3fr) minmax(380px,1fr)}.compare-mode .board+.board{border-left:1px dashed var(--line);padding-left:12px}.compare-mode .stack .node,.compare-mode .stack .slot{width:95px;left:calc(50% - 47.5px)}.compare-mode .stack .rail{width:116px}.compare-mode .stack .pointer{left:calc(50% + 66px);font-size:10px}.compare-mode .stack .base-pointer{right:calc(50% + 65px);font-size:10px}.compare-mode .readout{gap:12px}.presentation main{max-width:none;padding:16px 24px}.presentation header{height:56px}.presentation .code-scroll li{font-size:15px}.presentation .notice{font-size:15px}.presentation .node{font-size:23px}.presentation .boards{height:430px}.presentation .description{font-size:15px}.presentation .readout,.presentation .readout strong{font-size:13px}[hidden]{display:none!important}
@media(min-width:1600px){.code-scroll li{font-size:14px}.boards{height:425px}.notice{font-size:14px}.code-scroll{min-height:430px}}
@media(max-width:1100px){header{padding:0 23px;gap:25px}main{padding:23px}.lab-body{grid-template-columns:minmax(0,1fr) minmax(370px,1fr)}.toolbar{flex-wrap:wrap;gap:10px}.lifecycle{gap:7px;flex-wrap:wrap}.lifecycle>span:first-child{display:none}.legend{gap:6px;font-size:9px}.compare-mode .lab-body{grid-template-columns:minmax(0,1fr) minmax(350px,1fr)}.compare-mode .boards{height:700px;flex-direction:column}.compare-mode .board{flex:none;height:335px}.compare-mode .board+.board{border-left:0;border-top:1px dashed var(--line);padding-left:0}.compare-mode .code-scroll{max-height:750px}.compare-mode .scene{min-height:260px}.compare-mode .queue .flow{top:214px}#step-count{display:none}.readout{gap:10px}.visual-meta{padding:13px}.boards{padding:0 14px}.code-scroll li{font-size:11px}.stack .node,.stack .slot{width:118px;left:calc(50% - 59px)}.stack .rail{width:140px}.stack .pointer{left:calc(50% + 77px);font-size:11px}.stack .base-pointer{right:calc(50% + 77px);font-size:11px}}
@media(max-width:800px){header{padding:0 15px;gap:15px;height:auto;min-height:65px;flex-wrap:wrap}.brand{font-size:17px}.header-actions{gap:5px}.header-actions button{font-size:10px;padding:6px}nav{order:3;width:100%;padding-bottom:10px;gap:8px}nav button{flex:1;font-size:13px}main{padding:19px 15px}.title-row{flex-wrap:wrap}h1{font-size:21px}h1 small{font-size:10px}.title-row label{font-size:10px}.description{font-size:12px;margin-bottom:16px}.toolbar{padding:14px}form{flex-wrap:wrap;gap:8px}form label{font-size:11px}input{width:69px}form button{padding:7px 9px;font-size:11px!important}.tools{margin-left:auto}.lifecycle{padding:9px 14px}.lifecycle button{font-size:10px}.muted-button{margin-left:0}.lab-body,.compare-mode .lab-body{grid-template-columns:1fr}.code-panel{border-left:0;border-top:1px solid var(--line)}.code-scroll{min-height:0;max-height:580px;padding-bottom:18px}.code-scroll li{font-size:12px}.visual-meta{padding:13px 18px}.legend{font-size:10px}.boards{height:390px;padding:0 17px}.stack .pointer{left:calc(50% + 82px)}.stack .base-pointer{right:calc(50% + 80px)}.notice{font-size:12px}.playback{gap:14px}.code-heading{height:52px}.history-row{grid-template-columns:25px 100px 1fr;font-size:10px}footer{flex-direction:column;font-size:9px}.presentation .code-scroll li{font-size:13px}.presentation .notice{font-size:13px}.presentation main{padding:15px}.compare-mode .boards{height:740px}.compare-mode .board{height:355px}.compare-mode .scene{min-height:280px}.compare-mode .code-scroll{max-height:580px}.presentation.compare-mode .boards{height:740px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
/* Keep classroom code legible at normal desktop zoom. */
@media(min-width:1101px){.code-scroll li{font-size:14px}.node{font-size:22px}.readout,.readout strong{font-size:12px}}
.stack .base-pointer{bottom:46px}
/* Course navigation and a small amount of beginner guidance. */
:root{--sidebar-width:194px}
.course-sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar-width);background:#fcfdf9;border-right:1px solid var(--line);padding:30px 17px;display:flex;flex-direction:column;z-index:10;overflow:auto}
.course-sidebar .brand{font-size:17px;gap:9px;padding:0 5px;flex-shrink:0}.course-sidebar .brand small{display:block;font:8px var(--mono);font-weight:400;color:#83917b;letter-spacing:1.2px;margin-top:3px}.course-sidebar .brand>span{width:32px;height:37px}
.sidebar-label{font-size:10px;letter-spacing:1px;color:#929f87;display:flex;justify-content:space-between;margin:41px 10px 13px}.sidebar-label>span{font-family:var(--mono)}
.course-nav{display:block;padding:0;order:initial;width:auto}.course-nav button{display:flex;align-items:center;gap:10px;width:100%;padding:12px 12px;margin-bottom:7px;border:0;background:none;font-size:13px;text-align:left;color:#566c50;border-radius:6px}.course-nav .nav-symbol{font-size:23px;width:23px;line-height:1}.course-nav button small{font:9px var(--mono);margin-left:auto;color:#8a9980}.course-nav button.selected{background:#eaf0df;color:#3a6237}.course-nav button.selected small{color:#6a8259}
.future-courses .sidebar-label{margin-top:30px}.future-item{display:flex;justify-content:space-between;align-items:center;padding:11px 11px;font-size:12px;color:#8f9c83}.future-item small{padding:2px 5px;background:#f0f3eb;color:#98a18f;border-radius:3px;font-size:9px}.sidebar-foot{margin-top:auto;padding:35px 10px 0;font-size:11px;color:#728765}.sidebar-foot p{font-size:9px;color:#a0aa96;margin-top:8px}.small-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:#8aa25f;margin-right:5px}
body>header{margin-left:var(--sidebar-width);padding:0 28px;gap:28px;height:70px;background:transparent}.breadcrumb{font-size:11px;color:#8a9881;white-space:nowrap}.breadcrumb>span{color:#bac5af;margin:0 12px}.breadcrumb>strong{font-weight:500;color:#647b57}body>header nav{gap:2px}body>header nav button{font-size:12px;padding:7px 14px}main{margin-left:var(--sidebar-width);padding:24px 28px;max-width:none}.presentation main{margin-left:var(--sidebar-width)}
.lab-body{grid-template-columns:minmax(0,1.13fr) minmax(370px,1fr)}.compare-mode .lab-body{grid-template-columns:minmax(0,1.25fr) minmax(370px,1fr)}.code-panel{background:#fcfdf9}.code-heading{height:50px;flex-shrink:0}.code-scroll{flex:0 1 auto;min-height:0;max-height:405px;padding-bottom:15px}.code-scroll li{font-size:12.5px;line-height:1.85}.code-source{padding-top:11px;padding-bottom:10px;font-size:11px}.code-scroll li::before{min-width:38px;padding-right:12px}.boards{flex:1;min-height:390px;height:auto}.visual-meta{padding-top:18px;padding-bottom:18px}
.operation-guide{margin:15px 18px 0;padding:12px 14px 13px;background:#f0f5eb;border:1px solid #e3ebda;border-radius:7px}.guide-top{display:flex;align-items:center;justify-content:space-between;font-size:10px;color:#78915e;margin-bottom:6px}.guide-top small{font-size:9px;color:#8c9b7b}.guide-top small.finished{color:#5b8051}.guide-top small.warning{color:#a66e3f}.operation-guide h2{font-size:14px;line-height:1.6;font-weight:600;color:#46673c;margin-bottom:5px}.operation-guide p{font-size:12px;line-height:1.8;color:#788b65}.operation-guide ol{list-style:none;padding:0;margin:10px 0 0;display:flex;gap:7px;flex-wrap:wrap}.operation-guide li{font-size:10px;color:#8a9879;display:flex;align-items:center;gap:4px;padding:3px 5px;border-radius:4px}.operation-guide li>span{font:9px var(--mono);background:#e5eddb;border-radius:50%;width:15px;height:15px;display:inline-grid;place-items:center;color:#82976b}.operation-guide li.active{color:#436c39;background:#e1edcf}.operation-guide li.active>span{background:#678a4d;color:white}
.feature-tip{display:flex;gap:10px;padding:14px;margin:0 18px 13px;background:#f7f4e9;border:1px solid #eeead9;border-radius:7px;margin-top:auto}.feature-icon{color:#9a8f53;font-size:17px;line-height:1.4}.feature-tip h3{font-size:13px;color:#786c3b;margin:3px 0 5px;font-weight:550}.feature-tip p{font-size:11px;line-height:1.8;color:#9a906e;margin:0}.feature-tip span{font:9px var(--mono);color:#aaa07f;letter-spacing:.3px}.code-details{border-top:1px solid #e5ecdf}.code-details>summary{padding:9px 22px;color:#87967b;font-size:10px}.code-note{border:0;padding-top:0;font-size:10px;background:none}
.syntax-keyword{color:#8b6096}.syntax-type{color:#397a79}.syntax-function{color:#467d49}.syntax-string{color:#b17c48}.syntax-comment{color:#98a38b;font-style:italic}.syntax-number{color:#a17246}
@media(min-width:1600px){.code-scroll li{font-size:14px}.operation-guide h2{font-size:15px}.operation-guide p{font-size:13px}.feature-tip p{font-size:12px}.lab-body{grid-template-columns:minmax(0,1.2fr) minmax(450px,1fr)}}
@media(max-width:1250px){:root{--sidebar-width:170px}.course-sidebar{padding:26px 11px}.course-sidebar .brand{font-size:15px;gap:7px}.course-sidebar .brand small{font-size:7px}.course-sidebar .brand>span{width:29px;height:33px}.course-nav button{padding:11px 10px}.course-nav button small{font-size:8px}.course-nav button{gap:7px}body>header{padding:0 20px;gap:15px}main{padding:20px}.lab-body,.compare-mode .lab-body{grid-template-columns:minmax(0,1fr) minmax(355px,1fr)}.toolbar{flex-wrap:wrap}.lifecycle{flex-wrap:wrap}.lifecycle>span:first-child{display:none}.operation-guide{margin:12px 13px 0;padding:11px}.operation-guide h2{font-size:13px}.operation-guide p{font-size:11px}.feature-tip{margin:0 13px 12px;padding:12px}.code-scroll li{font-size:12px}.legend{gap:7px;font-size:9px}.visual-meta{padding:14px}.readout{gap:10px;padding:10px 16px}.playback{gap:13px;padding:12px 16px}#step-count{display:none}.breadcrumb{font-size:10px}.breadcrumb>span{margin:0 7px}}
@media(min-width:801px) and (max-width:1000px){:root{--sidebar-width:146px}.course-sidebar{padding:24px 9px}.course-sidebar .brand{font-size:13px}.course-sidebar .brand small{font-size:6px}.course-sidebar .brand>span{width:25px;height:30px}.course-nav button small{display:none}main{padding:18px 14px}body>header{padding:0 14px;gap:10px}body>header nav{display:none}.lab-body,.compare-mode .lab-body{grid-template-columns:minmax(0,1fr) minmax(310px,1fr)}.visual-meta{flex-wrap:wrap;gap:7px}.code-heading{padding:0 14px}.code-source{padding-left:14px;font-size:10px}.code-scroll li{font-size:11px}.code-scroll li::before{min-width:29px;padding-right:8px}.guide-top small{font-size:8px}.operation-guide li{font-size:9px}.boards{padding:0 10px}.stack .pointer{left:calc(50% + 67px);font-size:10px}.stack .base-pointer{right:calc(50% + 67px);font-size:10px}.stack .rail{width:125px}.stack .node,.stack .slot{width:105px;left:calc(50% - 52.5px)}.toolbar form{flex-wrap:wrap}.playback{gap:10px;padding:10px}.playback button{font-size:10px}.playback label{gap:4px;font-size:10px}}
@media(max-width:800px){.course-sidebar{position:relative;inset:auto;width:100%;padding:16px 15px 12px;border-right:0;border-bottom:1px solid var(--line);display:block;overflow:visible}.course-sidebar .brand{font-size:17px;padding:0}.course-sidebar .brand small{font-size:8px}.course-sidebar .brand>span{width:31px;height:34px}.course-sidebar>.sidebar-label,.sidebar-foot{display:none}.course-nav{display:flex;gap:6px;margin-top:15px;padding:0;width:100%;order:initial}.course-nav button{flex:1;margin:0;padding:8px 10px;gap:8px;font-size:12px;justify-content:center}.course-nav button small{display:none}.course-nav .nav-symbol{font-size:19px;width:20px}.future-courses{display:flex;align-items:center;gap:7px;margin-top:12px;flex-wrap:wrap}.future-courses .sidebar-label{font-size:9px;margin:0 5px 0 0;letter-spacing:0}.future-item{padding:2px;font-size:10px;gap:4px}.future-item small{font-size:8px;padding:1px 3px}body>header{margin:0;height:48px;min-height:48px;padding:0 15px;gap:10px;flex-wrap:nowrap}body>header nav{display:none}.breadcrumb{font-size:10px}.header-actions{gap:5px}.header-actions>button{font-size:10px;padding:5px 7px}main,.presentation main{margin-left:0;padding:17px 15px}.lab-body,.compare-mode .lab-body{grid-template-columns:1fr}.boards{flex:none;height:390px;min-height:390px}.compare-mode .boards,.presentation.compare-mode .boards{height:740px;min-height:740px}.code-scroll{max-height:520px}.operation-guide{margin:15px 15px 0;padding:12px}.operation-guide h2{font-size:14px}.operation-guide p{font-size:12px}.code-scroll li{font-size:12px}.feature-tip{margin:0 15px 15px;padding:13px}.code-heading{height:50px}.feature-tip p{font-size:12px}.presentation .code-scroll li{font-size:13px}.presentation header{height:48px}.presentation .boards{height:430px;min-height:430px}}
.operation-guide p{color:#60754f}.feature-tip p{color:#7a6e4b}.feature-tip span{color:#8d815e}
/* Statement stepping controls stay beside the animation. */
.trace-controls{margin:14px 18px 0;padding:11px 12px;background:#f4f7f0;border:1px solid #e1e9d9;border-radius:7px}.trace-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.trace-actions button{font-size:11px;padding:6px 10px}#manual-toggle{background:white;color:#687c57}#manual-toggle[aria-pressed=true]{color:#3b6536;background:#e5efd9;border-color:#cbdcba}.trace-actions .primary{color:white;background:#28614e}.trace-actions button:disabled{opacity:.45}.trace-actions #line-cancel{border-color:transparent;background:none;color:#8e8e74}.trace-controls>p{font-size:10px;line-height:1.7;color:#7b8c69;margin-top:7px}.trace-locals{display:flex;flex-wrap:wrap;gap:5px 12px;margin-top:8px;padding-top:8px;border-top:1px solid #dfe8d4}.trace-locals>span{display:flex;align-items:center;gap:6px;font-size:10px;max-width:100%}.trace-locals code{font:11px var(--mono);color:#788d64}.trace-locals strong{font:11px var(--mono);color:#9a7046;overflow-wrap:anywhere}.stack .trace-memory{width:130px;left:calc(50% - 65px);height:39px;background:#eeeaf8;border:1px dashed #a599bd;color:#76668f;box-shadow:none;z-index:4}.trace-memory small{font:8px var(--mono);position:absolute;right:4px;bottom:1px;color:#8f82a3}.stack .trace-memory.retired{background:#f2f0eb;border-color:#c2b8a6;color:#998b70}.trace-memory:after{display:none}.trace-current{border-left-width:3px!important}.code-scroll li.trace-waiting{background:#edf1f7;border-left-color:#92a7bf}.code-scroll li.trace-waiting::before{color:#6a86a5}.trace-controls+.visual-meta{padding-top:14px}.presentation .trace-actions button{font-size:13px}.presentation .trace-controls>p{font-size:12px}.presentation .trace-locals code,.presentation .trace-locals strong{font-size:13px}
@media(max-width:1250px){.trace-controls{margin:12px 13px 0;padding:10px}.trace-actions{gap:6px}.trace-actions button{font-size:10px;padding:5px 8px}.trace-controls>p{font-size:10px}}
@media(max-width:1100px){.stack .trace-memory{width:118px;left:calc(50% - 59px)}}
@media(min-width:801px) and (max-width:1000px){.stack .trace-memory{width:105px;left:calc(50% - 52.5px)}.trace-actions button{font-size:9px;padding:5px 6px}}
.compare-mode .stack .trace-memory{width:95px;left:calc(50% - 47.5px)}
/* Linked nodes and circular storage share the established classroom palette. */
.course-nav button{padding-block:10px;margin-bottom:3px}.sidebar-label{margin-top:30px}.future-courses .sidebar-label{margin-top:23px}body>header nav button{padding:6px 9px;font-size:11px}.toolbar form{flex-wrap:wrap}.linkstack .scene,.circular .scene,.deque .scene{min-height:350px}.linked-view{padding:40px 4px 20px}.linked-caption{font-size:12px;color:var(--green);margin-bottom:26px}.linked-caption span{float:right;font-size:10px;color:#92a080}.linked-chain{display:flex;align-items:center;gap:8px;overflow-x:auto;padding:8px 0 18px;min-height:98px}.head-arrow{font:13px var(--mono);white-space:nowrap;color:var(--green)}.link-item{display:flex;align-items:stretch;flex-shrink:0;border:1px solid #bdcfa8;border-radius:5px;overflow:hidden;background:#f3f6eb}.link-value{min-width:55px;max-width:100px;padding:8px 10px;display:flex;flex-direction:column;align-items:center}.link-value strong{font:19px var(--mono);color:#4d713d}.link-value small{font:9px var(--mono);color:#8d9a7e}.link-value.next{border:0}.link-next{padding:17px 6px;font:10px var(--mono);border-left:1px solid #d4ddc9;color:#788b63}.null-node{padding:9px;color:#8b967e;font-size:11px}.diagram-note{font-size:10px;color:#89977a;line-height:1.8;margin:16px 0}.temp-node{display:flex;flex-wrap:wrap;align-items:center;gap:12px;border:1px dashed #aa9abb;border-radius:6px;padding:13px;color:#7f6c91;background:#f4f0f8;margin-top:30px;font-size:11px}.temp-node strong{font:21px var(--mono)}.temp-node code{font:11px var(--mono)}
.ring-view{position:relative;width:330px;height:310px;max-width:100%;margin:18px auto 0}.ring-track{position:absolute;inset:16% 15%;border:2px dashed #d8e1cd;border-radius:50%}.ring-center{position:absolute;inset:34% 25%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px}.ring-center b{font-size:13px;font-weight:500;color:#6e845a}.ring-center code{font:18px var(--mono);color:#99ab7e}.ring-center span{font-size:9px;color:#8f9d7f;white-space:nowrap}.array-cell{width:69px;min-height:56px;border:1px dashed #d2dcc6;border-radius:6px;background:#fbfcf7;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;color:#a1ac94}.ring-view .array-cell{position:absolute;left:var(--x);top:var(--y);transform:translate(-50%,-50%)}.array-cell small{font:9px var(--mono);color:#91a07f;position:absolute;left:5px;top:3px}.array-cell strong{font:20px var(--mono);max-width:100%;overflow:hidden;text-overflow:ellipsis;padding:8px 3px 1px}.array-cell.occupied{border:1px solid #becfa9;background:#eaf0df;color:#4d713d}.array-cell.next{border:1px solid #d9ab85;background:#f7dfc9;color:#a2643d}.array-cell.pending{border:1px dashed #9c8ab1;background:#f0eaf7;color:#7f6c91}.array-cell.retired{background:#f3efe9;color:#9d8e76}.cell-pointer{position:absolute;top:calc(100% + 3px);left:50%;transform:translateX(-50%);font:10px var(--mono);color:#34694f;white-space:nowrap;min-height:15px}.array-formula{text-align:center;font:11px/1.8 var(--mono);color:#778b63;margin:21px 0 13px}.deque-view{padding:46px 0 15px}.end-labels{display:flex;justify-content:space-between;font-size:11px;color:#788b63;margin:0 6px 15px}.end-labels b{font-weight:500}.deque-logical{display:flex;align-items:center;justify-content:center;gap:8px;min-height:66px;border-block:2px solid #d7dfcb;background:#fafcf7;overflow-x:auto;padding:10px 5px}.deque-logical>span{color:#77915d;font:22px var(--mono);flex-shrink:0}.deque-value{border:1px solid #c1d0ad;background:#eaf0df;color:#537244;border-radius:4px;min-width:43px;text-align:center;padding:7px 8px;font:20px var(--mono)}.deque-value.next{background:#f7dfc9;border-color:#d9ab85;color:#a2643d}.deque-logical i{font-style:normal;color:#bcc7af}.deque-logical small{color:#93a384;padding:0 20px}.array-row{display:flex;gap:7px;justify-content:center;min-width:300px;padding:7px 0 25px}.array-row .array-cell{flex:1;min-width:42px;max-width:75px}.array-row .array-cell strong{font-size:17px}.deque-view .diagram-note{text-align:center;margin:25px 0 10px}.deque-view .array-formula{margin-top:8px}
@media(max-width:1250px){.breadcrumb{display:none}body>header nav button{padding:6px}.array-row{gap:5px}.link-value{min-width:48px}.linked-chain{gap:6px}.ring-view{width:300px}}
@media(max-width:800px){.course-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.course-nav button{padding:7px 5px;gap:5px}.breadcrumb{display:block}.course-nav .nav-symbol{font-size:17px}.linkstack .scene,.circular .scene,.deque .scene{min-height:320px}.ring-view{width:300px;height:280px;margin-top:8px}.ring-view .array-cell{width:61px;min-height:51px}.ring-center span{font-size:8px}.linked-view{padding-top:25px}.deque-view{padding-top:25px}.array-row{min-width:280px}.array-formula{font-size:10px}.deque-logical{gap:5px}.deque-value{min-width:35px;font-size:16px;padding:6px}.future-courses .sidebar-label{margin-top:0}}
@media(max-width:800px){.trace-controls{margin:13px 15px 0;padding:11px}.trace-actions button{font-size:11px}.trace-controls>p{font-size:11px}}

.deque-value.pending-value{border:1px dashed #aa9abb;background:#f0eaf7;color:#7f6c91;font-size:13px}.ring-view{height:280px;margin-top:10px}.ring-view+.array-formula{margin-top:15px}
/* Stack application lesson: use two stacks to explain expression evaluation. */
.stack-lessons{display:flex;gap:6px;margin:0 0 17px;border-bottom:1px solid var(--line);padding-bottom:9px}.stack-lessons button{border:0;background:none;font-size:12px;color:#7c8c6e}.stack-lessons button.selected{background:#e8efdf;color:#356448;font-weight:600}.expression-toolbar{padding:16px 21px;border-bottom:1px solid var(--line)}#expression-form{flex-wrap:wrap;gap:10px}#expression-input{width:min(330px,100%);font:17px var(--mono);flex:1;min-width:140px}#expression-form label{font-size:12px}#expression-form button{font-size:12px}.expression-examples{display:flex;align-items:center;gap:7px;margin-top:11px;flex-wrap:wrap}.expression-examples>span{font-size:10px;color:#8b9a7e;margin-right:4px}.expression-examples button{font-size:10px;padding:3px 8px;background:#f7f9f3;color:#6d825b}#expression-input-hint{font-size:10px;color:#8a987d;margin-top:8px}.expression-error{font-size:12px;color:#a75c34;margin-top:10px;padding:9px 12px;background:#fff1e6;border-radius:4px}#expression-input[aria-invalid=true]{border-color:#c78253}.expression-lab .lab-body{grid-template-columns:minmax(0,1.12fr) minmax(380px,1fr)}.expression-speed-label{font-size:10px;color:#8a997b;margin-left:auto;display:flex;gap:4px;align-items:center}.expression-speed-label select{font-size:10px;padding:3px}.expression-stream{padding:17px 21px 0}.expression-section-label{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:#697e56}.expression-section-label small{font-size:9px;color:#8e9c81}.expression-tokens{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:11px 0;min-height:41px}.expression-token{min-width:29px;border:1px solid #e0e7d8;border-radius:5px;padding:4px 9px;text-align:center;color:#6c805c;background:#fafcf7;font:19px/1.5 var(--mono);transition:background .2s}.expression-token.current{background:#f7dfc9;color:#9e603b;border-color:#d9ab85;box-shadow:0 0 0 2px #faf0e7}.expression-token.consumed{color:#a5b09c;background:#f3f6ee;border-color:#edf0e8}.expression-token.sentinel{font-size:14px;border-style:dashed}.expression-placeholder{font-size:11px;color:#99a58b}.expression-rule{display:flex;align-items:center;flex-wrap:wrap;gap:10px;min-height:36px;font-size:10px;color:#738862;padding:8px 10px;background:#f7f9f3;border-radius:5px}.expression-rule code{font:16px var(--mono);color:#4e7443;margin-left:5px}.expression-rule>b{font:20px var(--mono);color:#ae7951}.expression-rule small{font-size:10px;margin-left:auto}.expression-stacks{display:grid;grid-template-columns:1fr 1fr;padding:22px 20px 13px;gap:20px;min-height:355px}.expression-stack{min-width:0}.expression-stack h2{font-size:13px;font-weight:600;color:#48643d}.expression-stack h2 code{font:10px var(--mono);color:#899e71;margin-left:7px}.expression-stack>p{font-size:10px;color:#90a180;margin-top:3px}.expression-stack-scroll{height:250px;overflow:auto;scrollbar-width:thin;margin-top:13px;padding:0 42px}.expression-stack-slots{display:flex;flex-direction:column-reverse;gap:6px;min-height:244px;border-inline:2px solid #cbd7bd;border-bottom:2px solid #cbd7bd;border-radius:0 0 5px 5px;padding:8px 6px;position:relative}.expression-cell{position:relative;background:#eaf0df;border:1px solid #bdcfa8;border-radius:4px;min-height:36px;display:flex;justify-content:center;align-items:center;font:19px var(--mono);color:#4d713d;flex-shrink:0}.expression-cell>span{overflow:hidden;text-overflow:ellipsis;max-width:100%;padding:1px 3px}.expression-cell small{position:absolute;right:3px;bottom:0;font:8px var(--mono);color:#98a784}.expression-cell.stack-last{background:#f5e2cb;color:#9f6b45;border-color:#d7b18e}.expression-cell.vacant{background:#fbfcf8;border:1px dashed #b5c6a3;min-height:32px;color:#9aa88b;font:9px var(--mono)}.expression-top,.expression-base{position:absolute;white-space:nowrap;font:10px var(--mono);color:#4e7751;top:50%;transform:translateY(-50%)}.expression-top{left:calc(100% + 10px)}.expression-base{right:calc(100% + 10px);color:#8a987c}.expression-stack-placeholder{font-size:12px;color:#89997a;line-height:2;text-align:center;padding:55px 0}.expression-stack-placeholder small{font-size:9px;white-space:nowrap}.expression-stack-count{font:10px var(--mono);text-align:center;color:#82956c;margin-top:11px}.expression-stack-changed .expression-cell.stack-last{animation:expression-flash .4s ease-out}.expression-workspace{padding:12px 20px;border-top:1px solid #edf1e7;margin-top:auto}.expression-formula{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:10px}.expression-formula>span,.expression-formula>strong{min-width:70px;text-align:center;border:1px solid #e2e9d8;background:#fafcf6;border-radius:6px;padding:6px;font:19px/1.5 var(--mono);max-width:30%;overflow-wrap:anywhere}.expression-formula>strong{color:#386849;background:#edf3e5}.expression-formula small{display:block;font:9px/1.8 "Microsoft YaHei",sans-serif;color:#93a182}.expression-formula>b{font:17px var(--mono);color:#8f9e7b}.expression-variable-row{display:flex;gap:15px;flex-wrap:wrap;margin-top:10px;font:10px var(--mono);color:#8a987c}.expression-variable-row code{color:#668251}.expression-result{display:flex;align-items:center;gap:15px;padding:14px 20px;border-top:1px solid var(--line);font-size:11px;color:#81926e;background:#fafcf6}.expression-result>strong{font:23px var(--mono);color:#346346}.expression-result>small{margin-left:auto;font-size:9px;max-width:52%;color:#8fa17d}.expression-lab .code-scroll{max-height:505px}.expression-history{padding:12px 21px;border-top:1px solid var(--line);font-size:11px;color:#718360}.expression-history summary{cursor:pointer}.expression-history summary span{margin-left:10px;color:#9aa78c}.expression-history ol{font:12px/2.2 var(--mono);margin:8px 0;padding-left:25px}.expression-history b{color:#416e43}.expression-lab .operation-guide{min-height:115px}.expression-lab .notice{margin-top:2px;min-height:52px}.presentation .expression-token{font-size:23px}.presentation .expression-guide-text{font-size:15px}
@keyframes expression-flash{from{box-shadow:0 0 0 4px #94b77c55}to{box-shadow:0 0 0 0 #94b77c00}}
@media(max-width:1250px){.expression-lab .lab-body{grid-template-columns:minmax(0,1fr) minmax(355px,1fr)}.expression-stacks{padding:18px 12px 12px;gap:9px}.expression-stack-scroll{padding:0 34px}.expression-top,.expression-base{font-size:9px}.expression-top{left:calc(100% + 8px)}.expression-base{right:calc(100% + 8px)}.expression-stack h2{font-size:11px}.expression-stack h2 code{font-size:9px;margin-left:2px}.expression-formula{gap:9px}.expression-formula>span,.expression-formula>strong{min-width:52px}.expression-rule{gap:7px}.expression-rule small{margin-left:0}.expression-speed-label{margin-left:0}.expression-result{flex-wrap:wrap;gap:9px}.expression-result>small{max-width:100%;margin-left:0}}
@media(min-width:801px) and (max-width:1000px){.expression-lab .lab-body{grid-template-columns:1fr}.expression-lab .code-panel{border-left:0;border-top:1px solid var(--line)}.expression-stack-scroll{padding:0 55px}.expression-stacks{gap:25px;padding:20px 40px}.expression-lab .code-scroll{max-height:450px}}
@media(max-width:800px){.stack-lessons button{font-size:11px;padding:7px 9px}.expression-lab .lab-body{grid-template-columns:1fr}.expression-toolbar{padding:14px}#expression-form{gap:8px}#expression-form label{width:100%;font-size:11px}#expression-input{font-size:15px}#expression-form button{font-size:11px!important}.expression-stream{padding:15px 14px 0}.expression-token{font-size:17px;min-width:25px;padding:4px 7px}.expression-stacks{padding:18px 10px 12px;gap:5px}.expression-stack-scroll{padding:0 30px}.expression-stack h2{font-size:11px}.expression-stack>p{font-size:9px}.expression-cell{font-size:16px}.expression-top,.expression-base{font-size:8px}.expression-top{left:calc(100% + 7px)}.expression-base{right:calc(100% + 7px)}.expression-stack-count{font-size:9px}.expression-workspace{padding:12px 14px}.expression-result{padding:13px 14px}.expression-result>strong{font-size:21px}.expression-section-label small{font-size:8px}.expression-examples{gap:5px}.expression-examples button{padding:3px 6px;font-size:9px}.expression-examples>span{font-size:9px}#expression-input-hint{font-size:9px}.expression-lab .code-scroll{max-height:500px}.expression-lab .trace-actions button{font-size:10px;padding:5px 7px}.expression-speed-label{font-size:9px}.expression-formula>span,.expression-formula>strong{font-size:17px}.expression-history{padding:12px 14px}}
@media(prefers-reduced-motion:reduce){.expression-stack-changed .expression-cell.stack-last{animation:none}.expression-token{transition:none}}
