/* The lab owns the full working area; the course map remains available on demand. */
.lab-page .shell{display:block}
.lab-page main{max-width:1800px;padding:24px 32px 64px}
.lab-page #sidebar{display:none}
.lab-page #sidebar.open{display:block;position:fixed;top:88px;left:0;width:300px;height:calc(100dvh - 88px);z-index:25;box-shadow:12px 0 36px #0003}
.lab-page .mobile-menu{display:block}
.lab-page .page-head{padding-bottom:16px}
.lab-page .page-head h1{font-size:calc(28px * var(--reading-scale));margin:4px 0}
.lab-page .page-head p{margin:4px 0}
.lab-catalog{margin-top:14px;border-bottom:1px solid var(--line);padding-bottom:12px}
.lab-catalog>summary{cursor:pointer;color:var(--green);font-size:16px}
.lab-catalog>summary span{color:var(--muted);margin-left:10px;font-size:14px}
.lab-catalog .lab-picker{max-height:220px;margin-top:12px}
.lab-actions{display:flex;align-items:center;gap:20px;flex-wrap:wrap;padding:12px 0;background:var(--paper);position:sticky;top:88px;z-index:8;border-bottom:1px solid var(--line)}
.lab-actions a{font-size:15px}
.lab-actions>span{font-size:14px;color:var(--muted);margin-left:auto}
.lab-actions #open-params{display:inline-flex}
.lab-page .lab-grid{grid-template-columns:minmax(0,1fr) clamp(280px,25vw,340px);gap:20px;margin-top:16px;align-items:start}
.lab-page .lab-grid.params-collapsed{grid-template-columns:minmax(0,1fr)}
.lab-page #lab-form[hidden]{display:none}
.lab-page .lab-output{grid-column:1;grid-row:1;min-width:0}
.lab-page .controls{grid-column:2;grid-row:1;position:sticky;top:146px;max-height:calc(100dvh - 166px);overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;display:block;padding:18px;border-radius:9px}
.controls-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}
.controls-heading h3{margin:0;font-size:20px}
.controls-heading .pill{display:none}
#close-params{display:inline-flex;white-space:nowrap;padding:7px 10px;font-size:14px}
.controls>.unit-note{margin:8px 0 16px}
.controls>.btn{width:100%;justify-content:center;margin-top:10px}
.lab-page .control label{font-size:calc(14px * var(--reading-scale))}
.control input[aria-invalid=true]{border-color:var(--orange);outline:2px solid var(--orange)}
.control.is-adjusting{outline:2px solid var(--orange);outline-offset:5px;border-radius:4px;background:var(--surface-tint)}
.control.is-adjusting label>span:first-child:after{content:' · 调整中';font-size:12px;color:var(--orange);font-weight:700}
.param-focus{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;margin:10px 0;border:2px solid var(--orange);border-radius:7px;background:var(--warn-bg);color:var(--warn-ink);overflow-wrap:anywhere}
.param-focus[hidden]{display:none}
.param-focus strong{font-size:calc(16px * var(--reading-scale));line-height:1.7}
.param-focus p{margin:3px 0 0;font-size:14px;line-height:1.7}
.param-focus .btn{flex-shrink:0;padding:7px 10px;font-size:14px}
.param-card-active .detail-label-bg{fill:var(--warn-bg)!important;stroke:var(--line)!important;stroke-width:1px!important}
.param-leader-active{stroke:var(--orange)!important;stroke-width:2px!important}
.param-device-active:is(path,rect,circle,ellipse,line,polyline,polygon),.param-device-active :is(path,rect,circle,ellipse,line,polyline,polygon){stroke:var(--orange)!important;stroke-width:3px!important}
.param-device-active .detail-arrow{fill:var(--orange)}
.param-node-active{stroke:var(--orange)!important;stroke-width:5px!important;r:11px}
.param-halos{fill:none;stroke:var(--orange);stroke-width:3px;pointer-events:none}.param-halos>*{vector-effect:non-scaling-stroke}
/* A probe includes both its terminal and a freely moved readout. Outlining
   that entire group produces a misleading box spanning unrelated devices. */
.detail-probe:focus-visible,.detail-component-label:focus-visible{outline:none}
.detail-probe:focus-visible>circle{stroke:var(--orange);stroke-width:4px}
.detail-probe:focus-visible .detail-label-bg,.detail-component-label:focus-visible .detail-label-bg{stroke:var(--orange);stroke-width:3px}
@media(max-width:700px){.param-focus{align-items:flex-start;flex-wrap:wrap}.param-focus .btn{margin-left:auto}}
@media print{.param-focus{display:none}}
.param-preview{display:none}
.lab-page .detail-lab-host{margin:0 0 16px;padding:18px}
.lab-page .detail-heading h2{font-size:calc(21px * var(--reading-scale))}
.lab-page .detail-heading .eyebrow,.lab-page .detail-heading>.pill{display:none}
.detail-display-settings{padding:10px 0;border-top:1px solid var(--line)}
.detail-display-settings>summary{cursor:pointer;color:var(--green);font-size:16px}
.detail-display-settings>label{display:inline-flex;align-items:center;gap:8px;margin:10px 14px 4px 0;font-size:15px;flex-wrap:wrap}
.detail-display-settings select{background:var(--input-bg);color:var(--ink);border:1px solid var(--line);border-radius:5px;padding:8px;font-size:15px}
.lab-page .detail-toolbar{margin:12px 0;gap:10px}
.lab-page .detail-status{padding:8px 12px}
.lab-page .detail-scroll{margin:12px 0;max-height:72dvh;overflow:auto;overscroll-behavior:contain}
.detail-learning{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}
.detail-learning>summary{font-size:18px;font-weight:600;cursor:pointer}
.detail-learning .detail-notes{margin-top:12px}
.lab-page .detail-meter{padding:14px;margin:16px 0}
.detail-lab-host,.calculation{scroll-margin-top:156px}
.params-backdrop{position:fixed;inset:0;border:0;background:#0007;z-index:40}
.params-backdrop[hidden],#param-error[hidden]{display:none}
@media(max-width:1100px){
  .lab-page main{padding:20px}
  .lab-page .topbar{gap:14px;padding:0 20px}
  .lab-page .topbar nav{gap:12px;font-size:14px}
  .lab-page .brand{font-size:15px}
}
@media(max-width:899px){
  .lab-page .lab-grid{display:block}
  .lab-page .controls{display:none}
  .lab-actions #open-params{display:inline-flex}
  .lab-actions>span{display:none}
  .lab-page .controls.params-open{display:block;position:fixed;top:0;right:0;bottom:0;width:min(380px,92vw);height:100dvh;max-height:none;z-index:41;border-radius:12px 0 0 12px;padding:20px 20px 90px;overflow-y:auto;scroll-padding-top:240px;scroll-padding-bottom:90px;box-shadow:-12px 0 40px #0003}
  .params-open .controls-heading{position:sticky;top:-20px;min-height:76px;padding:10px 0;background:var(--white);z-index:2}
  #close-params{display:inline-flex;white-space:nowrap;padding:8px 12px}
  .controls-heading h3{font-size:18px}
  .controls-heading .pill{display:none}
  .params-visible{overflow:hidden}
  .params-open .param-preview{display:grid;position:sticky;top:76px;z-index:1;gap:8px;padding:12px;background:var(--surface-tint);border:1px solid var(--line);border-radius:6px;margin-bottom:16px;box-shadow:0 6px 12px #0002}
  .param-preview>div{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 10px;font-size:14px}
  .param-preview strong{font-family:var(--mono);color:var(--green)}
  .lab-page .results{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media(max-width:700px){
  .lab-page main{padding:16px 12px 90px}
  .lab-page .topbar{padding:0 12px;gap:8px}
  .lab-page #sidebar.open{top:68px;height:calc(100dvh - 123px)}
  .lab-actions{top:68px;gap:12px;padding:8px 0}
  .lab-actions a{font-size:14px}
  .lab-page .detail-lab-host{padding:12px}
  .lab-page .detail-heading h2{font-size:22px}
  .lab-page .detail-heading .pill{display:none}
  .lab-page .detail-toolbar .btn{padding:8px 12px}
  .lab-page .detail-scroll{max-height:64dvh}
  .detail-lab-host,.calculation{scroll-margin-top:132px}
}
@media(max-width:420px){.lab-page .results{grid-template-columns:1fr}.lab-actions{gap:10px}.lab-actions a{font-size:13px}}
@media print{
  .lab-page #sidebar,.lab-actions,.lab-catalog,.params-backdrop{display:none!important}
  .lab-page main{padding:0}
  .lab-page .detail-scroll{max-height:none;overflow:visible}
}

.detail-source-sign{font:bold 22px var(--mono);fill:var(--orange)}
.detail-lab-host[data-fit="true"] :is(.detail-svg,.atlas-svg,.physics-svg,.package-svg){width:100%;min-width:0}
.detail-directions{border:1px solid var(--line);border-radius:7px;padding:12px 16px;margin:12px 0;font-size:15px;line-height:1.7}
.source-polarity-list{display:flex;gap:8px 24px;flex-wrap:wrap}.source-polarity-list span{display:block}.source-polarity-list b{font-family:var(--mono);color:var(--green)}
.detail-directions p{margin:8px 0 0;color:var(--muted)}
