/* V3 uses real layout rows for the dock; no content is placed underneath it. */
body{height:100dvh;overflow:hidden;display:grid;grid-template-columns:208px minmax(0,1fr) 280px;grid-template-rows:76px minmax(0,1fr) auto}
.system-header{position:static;grid-row:1;grid-column:1/-1;min-width:0;padding:0 20px}.system-brand{font-size:15px}.system-brand small{font-size:10px}.header-actions{gap:12px}#current-module{color:#e0f3fc;font-size:12px;border-right:1px solid #57798e;padding-right:12px}#nav-toggle{display:none}
.sidebar{position:static;grid-row:2/4;grid-column:1;width:auto;padding:20px 12px;overflow:auto;min-height:0}.sidebar-bottom{padding-bottom:10px}nav a{font-size:12px;padding:10px}.workspace{grid-row:2;grid-column:2;margin:0;padding:0;overflow:auto;min-width:0;min-height:0;scroll-padding:18px}main{padding:24px;max-width:none}.workspace footer{padding:20px 24px;font-size:9px}.page-head{margin-bottom:18px}.page-head h1{font-size:25px}.page-head p{font-size:11px}
#operation-dock{position:static;grid-row:3;grid-column:2/4;min-height:84px;max-height:150px;overflow:auto;padding:13px 20px;gap:18px;box-shadow:none;backdrop-filter:none}.dock-hint p{max-height:60px;color:#204158}.dock-progress{width:140px}#toast{bottom:110px;max-width:430px;right:24px;left:auto}
#inspector{grid-column:3;grid-row:2;background:#f8fbfd;border-left:1px solid var(--line);padding:18px;overflow:auto;min-height:0;font-size:12px}#inspector details{border:0;margin:0;padding:0}#inspector summary{font-size:12px;font-weight:bold;letter-spacing:.5px;margin-bottom:15px}#inspector h2{font-size:17px}#inspector h3{font-size:12px;margin-top:22px}#inspector p{font-size:11px;line-height:1.8}.inspector-task>span{font-size:9px;color:#63839b;letter-spacing:1px}.inspector-model{height:135px;border-radius:8px;background:#e4f0f7;display:grid;place-items:center;margin:14px 0}.inspector-model svg{height:125px;width:160px}.condition{font-size:11px;line-height:1.8;padding:10px;border-radius:5px;margin:12px 0}.condition.ready{background:#e3f1ec;color:#286858}.condition.blocked{background:#fff1de;color:#84521e}.operation-state{margin:15px 0;padding:12px;border:1px solid #cddfe9;background:#fff;border-radius:6px}.operation-state b{font-size:11px;line-height:1.8;font-weight:500;display:block}.operation-state label{font-size:10px;color:#617f94}.operation-state progress{width:100%;height:6px;accent-color:#168da4}.operation-state[data-opphase=error]{border-color:#dca16c;background:#fff7eb}.operation-state[data-opphase=done]{border-color:#87c3b4;background:#effaf5}#inspector .btn{width:100%;margin-top:7px;font-size:11px}.inspector-log{margin:0;padding-left:16px;font-size:10px;line-height:1.7}.inspector-log li{padding-bottom:10px}.inspector-log small{display:block;color:#6f899b;font-size:9px}
.lab-stage{min-height:340px;padding:125px 13px 55px}.bench-items{gap:8px;grid-template-columns:repeat(3,minmax(0,1fr))}.object-model svg{height:115px}.object-name{font-size:11px;min-height:32px}.lab-object{background:#ecf6fa55;border:1px solid #b7d3e25c}.room-windows{right:185px}.wall-monitor{width:135px}.lab-object.selected-object{border:2px solid #147e9a;background:#dbf3fb;box-shadow:0 0 0 3px #258ba31c}.working-object .object-model{animation:instrument-work .7s ease-in-out infinite}.working-object::after{content:'运行中';position:absolute;top:4px;right:4px;color:#fff;background:#0e8799;padding:3px 7px;border-radius:4px;font-size:9px}.error-object{border-color:#cf793e!important;background:#fff0dd!important}.lab-object:focus-visible{outline:3px solid #106b86;outline-offset:2px}.lab-stage:has(.working-object) .monitor-line{animation:scan-line .7s linear infinite}.lab-stage:has(.working-object)::after{content:'';position:absolute;left:15px;right:15px;top:135px;height:2px;background:#31b9b5;box-shadow:0 0 10px #0e9f98;animation:scan-line 1s linear infinite;pointer-events:none}
@keyframes instrument-work{50%{transform:translateY(-7px);filter:drop-shadow(0 0 9px #44c7c6)}}@keyframes scan-line{50%{opacity:.2;transform:translateY(14px)}}@media(prefers-reduced-motion:reduce){.working-object .object-model,.lab-stage::after,.monitor-line{animation:none!important}.working-object{outline:3px solid #20a89e}}
.v3-control{margin-bottom:18px}.v3-control p{font-size:11px}.grid.two{grid-template-columns:1fr}.fields{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.three .card{padding:15px}.task-banner{padding:13px;gap:12px}.task-banner h2{font-size:13px}.task-banner p{font-size:11px}.task-banner .btn{padding:8px;font-size:10px}.task-banner>span{padding-right:12px}.table-wrap{max-width:100%}th,td{padding:9px 8px;font-size:11px}main table{min-width:480px}.live-curve g[role=button]{cursor:pointer}.live-curve g[role=button]:focus circle:last-child{stroke:#103a52;stroke-width:4}.v3-calculation{margin:18px 0}.evidence-task{padding:16px 0;border-top:1px solid var(--line)}.evidence-task .btn{margin:12px 12px 0 0}.evidence-task small{font-size:10px}.evidence-chain{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-top:20px}.evidence-chain span{padding:10px 6px;background:#edf1f5;font-size:9px}.evidence-chain b{display:block;margin-top:5px;color:#77909f}.evidence-chain span.complete{background:#dcefe9}.evidence-chain .complete b{color:#2f7c6a}.hint-levels{padding:8px 15px;display:flex;gap:10px;align-items:center}.hint-levels label{font-size:10px;white-space:nowrap}.hint-levels select{padding:7px;font-size:11px}.score-dashboard{display:grid;grid-template-columns:180px 1fr;gap:22px;padding:24px;border:1px solid #bad8e3;background:linear-gradient(125deg,#e6f4f8,#fff);border-radius:10px}.score-dashboard>div>span{font-size:11px;color:#547a90}.score-dashboard strong{display:block;font-size:60px;line-height:1.4;color:#126f89}.score-dashboard strong small{font-size:15px}.score-dashboard p{font-size:11px}.score-meter{display:grid;grid-template-columns:110px 1fr 48px;align-items:center;gap:10px;font-size:10px;padding:9px 0}.score-meter progress{width:100%;height:7px;accent-color:#218a9c}.score-meter b{text-align:right}.student-text{white-space:pre-wrap;overflow-wrap:anywhere}.card li{font-size:12px;line-height:1.9}#html-report-preview{margin-top:20px}#report-frame{width:100%;height:900px;border:1px solid #cadbe6;background:white}#print-report{display:none}.assistant-panel{top:76px;bottom:0}#restore-status{color:#975e2a;font-size:12px}#log-filter{margin:8px 0}.sidebar .prep-subnav{font-size:10px}
@media(min-width:1600px){body{grid-template-columns:224px minmax(0,1fr) 310px}.bench-items{grid-template-columns:repeat(5,minmax(0,1fr))}.grid.two{grid-template-columns:1fr 1fr}.lab-stage{min-height:355px}.object-model svg{height:130px}}
@media(max-width:1100px) and (min-width:761px){body{grid-template-columns:170px minmax(0,1fr) 225px}.system-brand{font-size:12px}.system-brand small{max-width:280px;font-size:8px}.system-header{padding:0 12px}.header-actions{gap:8px;font-size:9px}#current-module{display:none}.sidebar{padding:15px 8px}nav a{font-size:10px;padding:10px 8px;gap:8px}main{padding:18px 14px}#inspector{padding:12px}.grid.three{grid-template-columns:1fr}.bench-items{grid-template-columns:repeat(2,minmax(0,1fr))}.fields{grid-template-columns:1fr}.score-dashboard{grid-template-columns:1fr}.score-meter{grid-template-columns:95px 1fr 38px}.category-tabs button{padding:9px 6px;font-size:10px}.task-banner{flex-wrap:wrap}.task-banner .btn{margin:0}.room-label{max-width:55%;font-size:9px;padding:8px}.room-label small{font-size:8px;margin-left:0}.wall-monitor{width:105px;right:9px;font-size:8px}.room-windows{right:130px}.object-model svg{height:95px}.operation-steps span{min-width:100px}.evidence-chain{grid-template-columns:1fr 1fr}.signal-path{gap:7px}.signal-path span{font-size:10px;padding:9px}}
@media(max-width:760px){body{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr) auto auto;height:100dvh}.system-header{grid-row:1;grid-column:1;min-height:70px;padding:10px;gap:8px}.system-brand{font-size:11px;gap:5px}.system-brand small{font-size:7px;max-width:180px}.system-brand .brand-icon{display:none}.header-actions{gap:3px}#current-module{display:none}#nav-toggle{display:block;padding:7px;font-size:10px;white-space:nowrap;color:white;border-color:#5f8297}#save-status{font-size:7px;max-width:85px}.sidebar{grid-row:2;grid-column:1;max-height:0;overflow:hidden;padding:0;border:0}.nav-open .sidebar{max-height:155px;overflow:auto;padding:8px 10px;border-bottom:1px solid var(--line)}.sidebar nav{display:flex;flex-wrap:wrap;overflow:visible}.sidebar nav a{font-size:10px;padding:7px;flex:0 0 auto}.prep-subnav{display:none!important}.workspace{grid-row:3;grid-column:1;min-height:0;overflow:auto}.workspace main{padding:18px 12px}.workspace footer{padding:15px 12px}.page-head h1{font-size:21px}.page-head p{font-size:10px}.lab-stage{padding:118px 9px 54px;min-height:320px}.bench-items{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.object-model svg{height:80px}.object-name{font-size:9px}.object-state{font-size:7px}.grid.three{grid-template-columns:1fr}.fields{grid-template-columns:1fr}.room-label{font-size:9px;max-width:59%}.room-label small{font-size:7px}.wall-monitor{width:98px}.score-dashboard{grid-template-columns:1fr;gap:6px;padding:18px}.score-dashboard strong{font-size:48px}.score-meter{grid-template-columns:100px 1fr 40px}.evidence-chain{grid-template-columns:1fr 1fr}#inspector{grid-row:4;grid-column:1;padding:9px 13px;border-top:1px solid var(--line);border-left:0;max-height:235px;overflow:auto}#inspector details:not([open]){max-height:22px}#inspector summary{font-size:11px;margin-bottom:7px}#inspector-content{display:grid;grid-template-columns:1fr 1fr;gap:7px}#inspector-content>*{margin:0!important}.inspector-task{grid-column:1/-1}.inspector-model,.inspector-log,#inspector-content>h3,#inspector-content>p{display:none}#inspector-content>h2{font-size:12px;align-self:center}.condition{font-size:10px;grid-column:1/-1;padding:7px}.operation-state{padding:7px;grid-column:1/-1}.operation-state label{margin:5px 0}.operation-state b{font-size:10px}#inspector .btn{font-size:10px;padding:8px}.inspector-task p{font-size:10px;line-height:1.5}#operation-dock{grid-row:5;grid-column:1;min-height:80px;max-height:125px;gap:8px;padding:9px 12px}.dock-hint{flex-basis:100%}.dock-hint p{font-size:10px;max-height:30px}.dock-progress{width:auto;flex:1}.dock-progress span{font-size:9px}#next-module{font-size:10px;padding:8px 12px}#toast{bottom:125px;left:12px;right:12px;font-size:10px;max-width:none}.assistant-panel{top:0}.card{padding:16px}main table{min-width:520px}#report-frame{height:650px}}
@media print{body{display:block!important;height:auto!important;overflow:visible!important}body>*{display:none!important}#print-report{display:block!important;white-space:normal!important;font:11px/1.7 "Microsoft YaHei",sans-serif!important;background:white!important;padding:0!important}#print-report .lab-report{margin:0;padding:0;max-width:none}#print-report table{min-width:0;width:100%;table-layout:fixed}#print-report h2{break-after:avoid}#print-report tr,#print-report svg{break-inside:avoid}@page{size:A4;margin:16mm}}

@media(max-width:760px){body:not(.nav-open) .sidebar{visibility:hidden}.nav-open .sidebar{visibility:visible}}


@media print{html,body{background:white!important}#print-report .lab-report footer{display:block!important}}
@media(max-width:760px){#toast,#toast.show{display:none}}

/* The operational laboratory is an unframed, full-width WebGL surface. */
.lab-stage.lab-stage-3d{min-height:0;padding:0;background:#111d20;border:1px solid #87999c;border-radius:6px;box-shadow:0 8px 24px #12333b24;overflow:hidden;color:#eef7f5}
.lab-stage-3d::before,.lab-stage-3d::after{display:none!important}
.lab3d-heading{min-height:52px;padding:9px 14px;display:flex;align-items:center;justify-content:space-between;gap:14px;background:#1b2a2e;border-bottom:1px solid #405357}
.lab3d-heading>div:first-child{display:flex;align-items:center;min-width:0;gap:8px}.lab3d-heading b{font-size:13px;white-space:nowrap}.lab3d-heading small{font-size:10px;color:#b7c9c8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lab3d-heading .live-dot{flex:0 0 auto}
.lab3d-progress{display:flex;align-items:center;gap:10px;white-space:nowrap}.lab3d-progress span{font-size:9px;color:#b8d7d1;border:1px solid #5d7775;padding:4px 7px;border-radius:3px}.lab3d-progress b{font-size:16px;color:#67d7c6}
.lab3d-viewport{position:relative;width:100%;height:clamp(430px,60vh,680px);min-height:430px;background:#bfc8c5;overflow:hidden}
.lab3d-canvas{display:block;width:100%;height:100%;touch-action:none;cursor:grab;outline:none}.lab3d-canvas:active{cursor:grabbing}.lab3d-canvas:focus-visible{outline:3px solid #69dccc;outline-offset:-4px}
.lab3d-toolbar{position:absolute;z-index:4;top:12px;right:12px;display:flex;gap:7px}.lab3d-toolbar button{min-height:36px;padding:7px 10px;border:1px solid #cce1dd;background:#f7fbf9e8;color:#173b3d;border-radius:4px;font:600 10px/1.2 inherit;box-shadow:0 2px 8px #102d3440;cursor:pointer}.lab3d-toolbar button:hover,.lab3d-toolbar button:focus-visible{background:#fff;outline:2px solid #167e86;outline-offset:1px}
.lab3d-tooltip{position:absolute;z-index:5;max-width:180px;padding:6px 9px;background:#14272dea;color:#fff;border:1px solid #80cbc1;border-radius:3px;font-size:10px;pointer-events:none}
.lab3d-status{position:absolute;z-index:3;left:12px;bottom:12px;max-width:calc(100% - 24px);padding:7px 10px;border:1px solid #819895;background:#13272cdc;color:#e8f5f2;border-radius:3px;font-size:9px;letter-spacing:.2px;pointer-events:none}
.lab3d-workarea-label{position:absolute;z-index:2;left:50%;bottom:48px;transform:translateX(-50%);padding:4px 9px;border:1px dashed #d5e8e2;background:#183337b8;color:#f2faf7;border-radius:3px;font-size:9px;pointer-events:none}
.lab-stage-3d.is-object-dragging .lab3d-canvas{cursor:grabbing}.lab-stage-3d.is-object-dragging .lab3d-status{border-color:#64d7c2;background:#123d3c;color:#fff}
.lab3d-fallback{display:none;position:absolute;inset:0;z-index:6;place-content:center;text-align:center;background:#e8efed;color:#28494c;padding:30px}.lab3d-fallback b,.lab3d-fallback span{display:block}.lab3d-fallback span{font-size:11px;margin-top:8px}
.lab-stage-3d.is-fallback .lab3d-canvas,.lab-stage-3d.is-fallback .lab3d-toolbar,.lab-stage-3d.is-fallback .lab3d-status{display:none}.lab-stage-3d.is-fallback .lab3d-fallback{display:grid}
.lab3d-shortcuts{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:1px;background:#3d5053;border-top:1px solid #586c6e}
.lab3d-shortcut{min-width:0;min-height:62px;display:flex;align-items:center;gap:7px;padding:7px 9px;border:0;background:#f4f8f6;color:#234043;text-align:left;cursor:pointer}.lab3d-shortcut:hover{background:#e6f3ef}.lab3d-shortcut:focus-visible{position:relative;z-index:2;outline:3px solid #0b7181;outline-offset:-3px}.lab3d-shortcut.is-selected,.lab3d-shortcut.selected-object{background:#d9f1eb;box-shadow:inset 0 0 0 2px #147f87}.lab3d-shortcut.working-object{background:#d7f4ee}.lab3d-shortcut.error-object{background:#fff0df!important;box-shadow:inset 0 0 0 2px #b96732}.lab3d-shortcut.is-complete small{color:#287357}.lab3d-shortcut.is-current:not(.is-selected){background:#fff5d9;box-shadow:inset 0 3px 0 #d79b2d}.lab3d-shortcut.is-current:not(.is-selected) small{color:#865a13;font-weight:700}.shortcut-icon{width:42px;height:42px;flex:0 0 42px;display:grid;place-items:center}.shortcut-icon svg{width:42px;height:36px}.lab3d-shortcut>span:last-child{min-width:0}.lab3d-shortcut b{display:block;font-size:10px;line-height:1.25;overflow-wrap:anywhere}.lab3d-shortcut small{display:block;margin-top:4px;color:#677c7d;font-size:8px}.scene-caption{position:static;padding:7px 12px;background:#16272b;color:#a9bfbd;text-align:right;font-size:8px}
.drag-inspector,.instrument-controls{margin-top:14px;padding-top:12px;border-top:1px solid #cfdee3}.drag-inspector h3,.instrument-controls h3{margin:0 0 6px!important}.drag-inspector p{margin:0 0 8px!important}.drag-inspector .btn[data-drop-target]{position:relative;text-align:left;padding-left:27px}.drag-inspector .btn[data-drop-target]::before{content:'→';position:absolute;left:10px;font-weight:700;color:#167b84}.instrument-controls{display:grid;grid-template-columns:1fr;gap:5px}.instrument-controls .btn{margin-top:0!important}.condition.drag-valid{border-color:#5eaa96;background:#e7f6f0;color:#245f52}.condition.drag-invalid{border-color:#d49a67;background:#fff1e3;color:#7e4c20}
@media(min-width:1600px){.lab3d-viewport{height:clamp(480px,62vh,720px)}}
@media(max-width:1100px) and (min-width:761px){.lab3d-viewport{height:clamp(410px,56vh,560px);min-height:410px}.lab3d-shortcuts{grid-template-columns:repeat(3,minmax(0,1fr))}.lab3d-heading small{max-width:240px}}
@media(max-width:760px){.lab-stage.lab-stage-3d{margin-left:-12px;margin-right:-12px;border-left:0;border-right:0;border-radius:0}.lab3d-heading{padding:8px 10px;min-height:50px}.lab3d-heading>div:first-child{display:grid;grid-template-columns:auto 1fr}.lab3d-heading small{grid-column:2;max-width:200px}.lab3d-progress span{display:none}.lab3d-progress b{font-size:14px}.lab3d-viewport{height:clamp(390px,52vh,480px);min-height:390px}.lab3d-toolbar{top:8px;right:8px}.lab3d-toolbar button{width:38px;height:38px;padding:0;font-size:17px}.lab3d-toolbar button span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.lab3d-status{left:8px;right:8px;bottom:8px;max-width:none;text-align:center}.lab3d-shortcuts{display:flex;overflow-x:auto;scroll-snap-type:x proximity}.lab3d-shortcut{flex:0 0 142px;scroll-snap-align:start}.scene-caption{text-align:left}}
@media(prefers-reduced-motion:reduce){.lab3d-canvas{scroll-behavior:auto}}
@media(max-width:760px){.lab3d-workarea-label{bottom:48px}.drag-inspector{grid-column:1/-1}.drag-inspector .btn[data-drop-target]{min-height:38px}}
