:root{--accent: #d04a0a;--accent-dark: #9a3412;--accent-soft: #fff3e8;--bg: #f4f6f8;--border: #e5e7eb;--border-strong: #cbd5e1;--brand-100: #fff3e8;--brand-400: #fdba74;--brand-700: #d04a0a;--brand-900: #9a3412;--danger: #dc2626;--ok: #15803d;--warn: #b45309;--ink: #111827;--muted: #4b5563;--panel: #ffffff;--panel-2: #f8fafc;--run: #d04a0a;--shadow: 0 12px 36px rgba(154, 52, 18, .1);--soft-shadow: 0 4px 14px rgba(154, 52, 18, .07);--surface: var(--panel);--font-display: "Bricolage Grotesque", "Noto Sans SC", system-ui, sans-serif;--font-body: "Noto Sans SC", system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-xs: 11px;--fs-sm: 12px;--fs-md: 13px;--fs-lg: 14px;--fs-xl: 16px;--fs-2xl: 19px;--fs-3xl: 22px;--fs-metric: 28px;--fs-glyph-lg: 22px;--fw-normal: 500;--fw-semi: 600;--fw-bold: 700;--fw-heavy: 800;--lh-tight: 1.25;--lh-snug: 1.4;--lh-base: 1.55;--lh-relaxed: 1.75;color:var(--ink);background:var(--bg);font-family:var(--font-body),Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:var(--fs-md);font-synthesis:none;line-height:var(--lh-base)}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,select,input{border:1px solid var(--border-strong);border-radius:6px;min-height:34px}button{background:var(--panel);color:var(--ink);cursor:pointer;padding:0 12px}button:hover{border-color:var(--accent)}button:disabled{cursor:not-allowed;opacity:.58}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{box-shadow:0 0 0 5px var(--panel);outline:3px solid var(--brand-700);outline-offset:2px}input,select{background:var(--panel);color:var(--ink);padding:0 10px}h1,h2{margin:0}h1{font-size:var(--fs-2xl);line-height:1.15}h2{font-size:var(--fs-xl);line-height:1.2}p{margin:0}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.app{background:var(--bg);min-height:100vh}.muted{color:var(--muted);font-size:var(--fs-md)}.eyebrow{color:var(--muted);font-size:var(--fs-sm)}.eyebrow{display:block;font-weight:var(--fw-bold)}.run-button{background:var(--run);border-color:var(--run);color:var(--panel);font-weight:var(--fw-bold)}.hardware-menu{color:var(--muted);font-size:var(--fs-md);position:relative}.hardware-menu summary{align-items:center;background:var(--panel);border:1px solid var(--border-strong);border-radius:6px;color:var(--ink);cursor:pointer;display:inline-flex;min-height:34px;padding:0 12px}.hardware-menu span{background:var(--panel);border-left:1px solid var(--border);border-right:1px solid var(--border);display:block;min-width:190px;padding:8px 10px}.hardware-menu span:last-child{border-bottom:1px solid var(--border);border-radius:0 0 6px 6px}.workbench-notice{margin:0}.workbench-grid{display:grid;flex:1;grid-template-columns:minmax(320px,var(--editor-width, 35%)) 10px minmax(460px,1fr);min-height:0}.workbench-resizer{align-items:center;cursor:col-resize;display:flex;justify-content:center;min-width:10px;touch-action:none}.workbench-resizer:before{background:var(--border-strong);border-radius:999px;content:"";height:46px;width:4px}.workbench-resizer:hover:before,.workbench-resizer:focus-visible:before{background:var(--accent)}.editor-shell,.hardware-stage,.inspector-rail{background:#fffffff0;border:1px solid var(--border);border-radius:8px;box-shadow:var(--soft-shadow);min-width:0}.editor-shell,.hardware-stage{display:flex;flex-direction:column;min-height:0;overflow:hidden}.surface-header{align-items:center;border-bottom:1px solid var(--border);display:flex;gap:12px;justify-content:space-between;min-height:56px;padding:10px 12px}.segmented{align-items:center;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;display:inline-flex;gap:2px;padding:3px}.segmented button{border:0;border-radius:6px;color:var(--muted);min-height:28px;padding:0 10px}.segmented button[aria-pressed=true]{background:var(--accent);color:var(--panel)}.editor-grid{display:grid;flex:1;gap:8px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:0;padding:8px}.editor-grid-blocks,.editor-grid-code{grid-template-columns:minmax(0,1fr)}.editor-grid-blocks .code-frame,.editor-grid-code .blockly-frame{display:none}.editor-frame{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;min-height:0;overflow:hidden}.blockly{height:100%;min-height:0;position:relative}.editor-frame .blockly{border:0;border-radius:0}.code-frame textarea{background:#111a17;border:0;border-radius:0;color:#d9f7e8;height:100%;line-height:1.55;min-height:0;resize:none}.runtime-pill{align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:999px;color:var(--muted);display:inline-flex;font-size:var(--fs-md);gap:8px;min-height:30px;padding:0 10px}.status-dot{background:#8b9b91;border-radius:999px;height:8px;width:8px}.status-dot.is-running{background:var(--run);box-shadow:0 0 0 4px #d04a0a2e}.canvas-stage{border-bottom:1px solid var(--border);flex:1;margin:0;min-height:0;position:relative}.canvas-stage .canvas{border:0;border-radius:0;height:100%;min-height:0}.inspector-rail{display:grid;gap:10px;min-height:0;overflow:auto;padding:10px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:8px;min-width:0;padding:14px}.inspector-rail .panel{box-shadow:none;padding:10px}.panel-header{align-items:center;display:flex;gap:10px;justify-content:space-between;margin-bottom:10px}.hardware-column{display:grid;gap:14px;min-width:0}.module-actions{justify-content:flex-start}textarea{border:1px solid var(--border);border-radius:6px;color:#13201b;font-family:Cascadia Code,SFMono-Regular,Consolas,monospace;min-height:320px;padding:12px;width:100%}.canvas{border:1px solid var(--border);border-radius:6px;min-height:320px;overflow:hidden}.unified-canvas{background:linear-gradient(rgba(100,116,139,.12) 1px,transparent 1px),linear-gradient(90deg,rgba(100,116,139,.12) 1px,transparent 1px),#f9fbfa;background-size:22px 22px;cursor:default;overflow:hidden;position:relative;touch-action:none;user-select:none;-webkit-user-select:none}.unified-canvas *{user-select:none;-webkit-user-select:none}.x6-wiring-canvas{height:100%}.x6-wiring-graph{height:100%;min-height:320px;position:relative;width:100%}.x6-wiring-graph .x6-graph{height:100%;outline:none;overflow:hidden;position:relative;touch-action:none;width:100%}.x6-wiring-graph .x6-graph-background,.x6-wiring-graph .x6-graph-grid,.x6-wiring-graph .x6-graph-svg{inset:0;position:absolute}.x6-wiring-graph .x6-node [magnet=true]{cursor:crosshair}.x6-wiring-graph .x6-graph-svg-stage,.x6-wiring-graph .x6-graph-grid-stage{backface-visibility:hidden;transform:translateZ(0);will-change:transform}.x6-wiring-graph image{pointer-events:none}.x6-wiring-graph .x6-node{cursor:move}.x6-wiring-graph .x6-edge .connection{fill:none;stroke-linejoin:round}.x6-wiring-graph .x6-node .x6-module-delete-control,.x6-wiring-graph .x6-node .x6-module-delete-control-mark{opacity:0;transition:opacity .12s ease}.x6-wiring-graph .x6-node .x6-module-delete-control,.x6-wiring-graph .x6-node .x6-module-delete-control-mark{pointer-events:none}.x6-wiring-graph .x6-node:hover .x6-module-delete-control,.x6-wiring-graph .x6-node:hover .x6-module-delete-control-mark{opacity:1}.x6-wiring-graph .x6-node:hover .x6-module-delete-control{pointer-events:auto}.x6-board-hot-zone-layer{inset:0;pointer-events:none;position:absolute;transform-origin:0 0;z-index:3}.x6-board-hot-zone-node{pointer-events:none;position:absolute}.x6-board-hot-zone-node .board-image{opacity:0}.x6-board-hot-zone-node .board-hot-zone,.x6-board-hot-zone-node .board-sensor-popover,.x6-board-hot-zone-node .board-sensor-popover *{pointer-events:auto}.x6-module-button-hot-zone{background:transparent;border:0;border-radius:50%;cursor:pointer;padding:0;pointer-events:auto;position:absolute;transition:background .12s ease,box-shadow .12s ease,transform .12s ease}.x6-module-button-hot-zone:hover,.x6-module-button-hot-zone:focus-visible{box-shadow:0 0 0 4px #ffffff5c;outline:none}.x6-module-button-hot-zone.is-pressed{background:#00000042;box-shadow:inset 0 4px 10px #0000006b,0 0 0 5px #ff373742;transform:scale(.9)}.x6-sensor-input-overlay{pointer-events:none;position:absolute}.x6-sensor-value-label{color:var(--accent);font-size:var(--fs-xl);font-weight:var(--fw-heavy);left:50%;line-height:1;pointer-events:none;position:absolute;top:-30px;transform:translate(-50%)}.x6-sensor-adjust-button{background:#fffffff0;border:1px solid var(--border);border-radius:8px;box-shadow:var(--soft-shadow);color:var(--ink);cursor:pointer;font-size:var(--fs-lg);left:50%;min-height:36px;min-width:112px;opacity:0;padding:7px 14px;pointer-events:none;position:absolute;top:calc(100% + 8px);transform:translate(-50%) translateY(-4px);transition:opacity .12s ease,transform .12s ease,border-color .12s ease;z-index:5}.x6-sensor-adjust-button.is-visible,.x6-sensor-adjust-button:focus-visible,.x6-sensor-input-overlay.is-open .x6-sensor-adjust-button{opacity:1;pointer-events:auto;transform:translate(-50%)}.x6-sensor-adjust-button:hover,.x6-sensor-adjust-button:focus-visible{border-color:var(--brand-400);outline:none}.x6-sensor-input-popover{background:#fffffffa;border:1px solid var(--border);border-radius:8px;box-shadow:var(--soft-shadow);color:var(--ink);display:grid;gap:12px;left:50%;min-width:340px;padding:14px;pointer-events:auto;position:absolute;top:calc(100% + 52px);transform:translate(-50%);z-index:6}.x6-sensor-input-popover.potentiometer,.x6-sensor-input-popover.pir{min-width:280px}.x6-sensor-input-popover header{align-items:center;display:flex;gap:12px;justify-content:space-between}.x6-sensor-input-popover header button{align-items:center;background:#fff3e8;border:1px solid #fdba74;border-radius:999px;color:#9a3412;cursor:pointer;display:inline-flex;font-size:var(--fs-2xl);height:32px;justify-content:center;line-height:1;padding:0;width:32px}.x6-sensor-input-popover label{align-items:center;display:grid;gap:10px;grid-template-columns:76px minmax(120px,1fr) 96px}.x6-sensor-input-popover label span{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.x6-sensor-input-popover input[type=range]{min-height:auto;padding:0;width:100%}.x6-sensor-input-popover input[type=number]{min-height:40px}.x6-sensor-toggle-row{display:grid;gap:8px;grid-template-columns:1fr 1fr}.x6-sensor-toggle-row button{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--ink);cursor:pointer;min-height:38px}.x6-sensor-toggle-row button.active{background:var(--brand-100);border-color:var(--brand-400);color:var(--brand-900);font-weight:var(--fw-bold)}.canvas-connection-hint{background:#fffffff0;border:1px solid var(--border);border-radius:8px;box-shadow:var(--soft-shadow);color:var(--ink);font-size:var(--fs-md);margin:0;max-width:min(420px,calc(100% - 24px));padding:8px 10px;pointer-events:none;position:absolute;right:12px;text-align:center;top:54px;z-index:6}.canvas-connection-hint.valid{border-color:#6fd08a;color:#14532d}.canvas-connection-hint.invalid{border-color:#e4a399;color:#8a241a}.canvas-help{background:#fffffff0;border:1px solid var(--border);border-radius:8px;box-shadow:var(--soft-shadow);color:var(--ink);font-size:var(--fs-md);margin:0;max-width:calc(100% - 24px);padding:8px 10px;pointer-events:none;position:absolute;right:12px;top:12px;z-index:6}.unified-canvas-surface{left:0;overflow:visible;position:absolute;top:0;transform-origin:0 0}.wiring-lines{inset:0;overflow:visible;position:absolute;z-index:1}.wiring-lines path{fill:none;stroke:#1f6eea;stroke-linecap:round;stroke-linejoin:round;stroke-width:4}.wiring-lines text{fill:#24415f;font-size:var(--fs-md);paint-order:stroke;stroke:var(--panel);stroke-width:4px}.canvas-board-node,.canvas-module-node{cursor:grab;position:absolute;touch-action:none;-webkit-user-select:none;user-select:none;z-index:2}.canvas-board-node{display:grid;gap:8px}.canvas-module-node{align-items:center;background:#fffffff0;border:2px solid #a94d28;border-radius:8px;color:#4b2414;display:grid;justify-items:center;padding:12px}.canvas-module-node.grove_i2c_sensor{border-color:#4968a8;color:#1f315f}.canvas-module-node small{color:var(--muted)}.canvas-port{align-items:center;background:var(--panel);border:1px solid #aac9c1;border-radius:999px;color:#173d35;display:inline-flex;font-size:var(--fs-sm);font-weight:var(--fw-bold);justify-content:center;min-height:28px;min-width:42px;padding:0 8px;position:absolute;transform:translate(-50%,-50%)}.module-port{left:0;top:50%}.board-port{z-index:3}.board-shell{background:#1c2f2a;border:1px solid #14241f;border-radius:8px;color:#dceee7;display:grid;gap:10px;padding:14px}.board-panel{display:grid;gap:10px}.board-panel-embedded{background:transparent;border:0;box-shadow:none;padding:0}.board-visual{background:transparent;border-radius:8px;overflow:visible;position:relative;width:100%}.board-image{display:block;height:100%;object-fit:contain;-webkit-user-select:none;user-select:none;width:100%}.board-oled-layer,.board-hot-zone,.board-rgb-dot,.board-sensor-popover{position:absolute}.board-oled-layer{color:#e9fff7;overflow:hidden;pointer-events:none}.board-oled-canvas{display:block;height:100%;overflow:hidden;width:100%}.board-oled-text{fill:#e9fff7;font-family:Noto Sans CJK SC,Noto Sans SC,Microsoft YaHei,PingFang SC,sans-serif;font-weight:var(--fw-semi);white-space:pre}.board-oled-bitmap,.board-oled-bitmap-inverse-bg{fill:#e9fff7;shape-rendering:crispEdges}.board-oled-bitmap-inverse{fill:#06120f;shape-rendering:crispEdges}.board-oled-shape-on{fill:#e9fff7;shape-rendering:geometricPrecision}.board-oled-shape-off{fill:#06120f;color:#06120f;stroke:#06120f;shape-rendering:geometricPrecision}.board-rgb-dot{border:1px solid rgba(255,255,255,.68);border-radius:999px;box-shadow:0 0 8px currentColor;height:3.1%;transform:translate(-50%,-50%);width:3.1%}.board-hot-zone{background:transparent;border:1px solid transparent;border-radius:6px;min-height:0;padding:0}.board-hot-zone:hover,.board-hot-zone:focus-visible,.board-hot-zone.is-active{background:#d04a0a24;border-color:#d04a0a8c}.sensor-zone:hover,.sensor-zone:focus-visible,.sensor-zone.is-active{background:transparent;border-color:transparent}.sensor-zone:focus-visible{outline:3px solid rgba(208,74,10,.34);outline-offset:2px}.board-sensor-popover{background:#fffffff5;border:1px solid var(--border);border-radius:8px;box-shadow:var(--soft-shadow);color:var(--ink);display:grid;left:50%;padding:10px;top:0;transform:translate(-50%,calc(-100% - 10px));width:112px;z-index:4}.board-sensor-popover.accelerometer{max-height:60vh;overflow:auto;padding:8px;width:280px}.board-motion-inputs{border:0;display:grid;gap:8px;margin:0;min-width:0;padding:0}.board-motion-inputs>legend{color:var(--muted);font-size:var(--fs-sm);font-weight:var(--fw-bold);margin-bottom:2px}.board-motion-tabs{display:grid;grid-template-columns:1fr 1fr 1fr;width:100%}.board-motion-tabs button{font-size:var(--fs-sm);min-height:26px;padding:0 4px;white-space:nowrap}.board-motion-toggles{border:0;border-top:1px solid var(--border);display:grid;gap:6px;margin:0;min-width:0;padding:8px 0 0}.board-motion-toggles legend{color:var(--muted);font-size:var(--fs-xs);font-weight:var(--fw-bold);padding:0}.board-motion-toggle-row{align-items:center;display:flex;gap:10px;justify-content:space-between}.board-motion-toggles label{align-items:center;display:flex;gap:6px;min-width:0}.board-motion-toggles label input[type=checkbox]{min-height:auto;width:auto}.board-motion-toggles label input[type=number]{flex:none;min-height:28px;padding:0 6px;width:52px}.board-sensor-popover label{display:grid;gap:8px}.board-sensor-popover .board-motion-toggles label{align-items:center;display:flex;gap:6px;min-width:0;white-space:nowrap}.board-sensor-popover span{background:var(--panel-2);border:1px solid var(--border);border-radius:6px;color:var(--muted);display:inline-flex;font-variant-numeric:tabular-nums;justify-content:center;min-height:28px;padding:2px 8px}.board-sensor-popover input[type=range]{min-height:auto;padding:0;width:100%}.board-sensor-popover input[type=number]{min-width:0;width:100%}.board-accelerometer-inputs{border:0;display:grid;gap:6px;margin:0;min-width:0;padding:0}.board-accelerometer-inputs label{align-items:center;font-size:var(--fs-sm);gap:6px;grid-template-columns:4.5em minmax(0,1fr) 56px}.board-accelerometer-inputs input[type=number]{min-height:28px;padding:0 6px}.board-status-strip{color:var(--muted);display:flex;flex-wrap:wrap;font-size:var(--fs-sm);gap:6px}.board-status-strip span{background:var(--panel-2);border:1px solid var(--border);border-radius:999px;padding:2px 8px}.oled{align-items:center;background:#0d1512;border:1px solid #3b5b50;border-radius:4px;color:#9ff5d0;display:flex;font-family:Cascadia Code,Consolas,monospace;height:74px;justify-content:center}.led{background:#8f9692;border-radius:999px;display:inline-block;height:18px;width:18px}.led-on{background:#e34f2f;box-shadow:0 0 0 4px #e34f2f2e}.pin-led{align-items:center;display:inline-flex;gap:6px}.rgb-dot{border:1px solid rgba(255,255,255,.5);border-radius:999px;display:inline-block;height:18px;width:18px}.input-grid,.touch-grid{display:grid;gap:8px}.input-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));margin-top:10px}.input-grid.compact,.touch-grid{grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}.input-panel label,.input-panel fieldset{border:1px solid var(--border);border-radius:6px;display:grid;gap:6px;margin:0;min-width:0;padding:8px}.input-panel fieldset label{align-items:center;border:0;display:flex;gap:6px;padding:0}.input-panel input[type=checkbox]{min-height:auto}.stdout{background:#111a17;border-radius:6px;color:#d9f7e8;min-height:150px;overflow:auto;padding:12px;white-space:pre-wrap}.status{border:1px solid var(--border-strong);border-radius:999px;color:var(--muted);font-size:var(--fs-sm);padding:2px 8px}.running{border-color:var(--run);color:var(--brand-900)}.status-row{align-items:center;display:flex;gap:8px}.status.error{border-color:var(--danger);color:#9b2d24}.status.stopped{border-color:#7a8a82}.issue-list{display:grid;gap:8px;list-style:none;margin:10px 0 0;padding:0}.empty-state{color:var(--muted);font-size:var(--fs-md);margin-top:8px}.issue{border-left:3px solid #7a8a82;display:grid;gap:2px;padding-left:8px}.issue.error{border-color:var(--danger)}.issue.warning{border-color:var(--run)}.notice,.load-error{background:#fff7e5;border:1px solid #f0d8a8;border-radius:6px;color:#6f4b16;margin-bottom:10px;padding:8px 10px}table{border-collapse:collapse;font-size:var(--fs-md);width:100%}th,td{border-bottom:1px solid #e5e8e4;padding:8px;text-align:left}@media(max-width:1280px){.workbench-grid{grid-template-columns:minmax(300px,var(--editor-width, 38%)) 10px minmax(420px,1fr)}}@media(max-width:900px){.panel-header{align-items:stretch;flex-direction:column}.workbench-grid,.editor-grid,.inspector-rail{grid-template-columns:1fr}.workbench-resizer{display:none}.hardware-stage{min-height:780px}.canvas-stage{min-height:390px}.editor-shell{min-height:620px}}.skip-link{background:var(--brand-900);color:var(--panel);left:12px;padding:8px 12px;position:fixed;top:-80px;z-index:100}.skip-link:focus{top:12px}.lab-primary-nav-slot{min-width:0}.lab-student-nav{align-items:center;display:flex;gap:2px}.lab-student-nav a{border-radius:6px;color:#fffc;font-weight:var(--fw-bold);padding:8px 10px;text-decoration:none}.lab-student-nav a:hover{background:#ffffff24;color:var(--panel)}@media(max-width:1280px){.lab-topbar{gap:10px;grid-template-columns:minmax(200px,1fr) auto minmax(200px,1fr);padding:0 12px}.lab-student-nav a{padding-inline:7px}}@media(max-width:640px){.editor-grid-split{grid-template-columns:1fr}}.app:has(.lab-shell){background:#f4f5f6}.lab-shell{--brand-primary: #f97316;--brand-primary-strong: var(--accent);--brand-primary-hover: var(--accent-dark);--brand-primary-soft: var(--accent-soft);--workspace-chrome: #1e293b;--workspace-chrome-hover: #334155;--action-cta: var(--accent);--action-cta-hover: var(--accent-dark);--action-cta-soft: var(--accent-soft);--state-success: var(--ok);--state-success-soft: #ecfdf5;--state-warning: var(--warn);--state-warning-soft: #fffbeb;--state-danger: var(--danger);--state-danger-soft: #fef2f2;--surface-workspace: var(--panel-2);--surface-panel: var(--panel);--surface-muted: var(--bg);--border-default: var(--border);--text-primary: var(--ink);--text-secondary: var(--muted);--text-on-strong: var(--panel);--grid-dot-color: rgb(100 116 139 / .11);--focus-ring: var(--accent);--shadow-sm: 0 1px 2px rgb(15 23 42 / .06);--shadow-md: 0 8px 24px rgb(15 23 42 / .08);--shadow-lg: 0 16px 32px rgb(15 23 42 / .12);--radius-sm: 6px;--radius-md: 12px;--radius-lg: 16px;--z-canvas-control: 5;--z-canvas-feedback: 6;--z-inspector: 8;--z-header: 20;--z-menu: 30;--z-modal: 40;background:var(--surface-muted);color:var(--text-primary);display:grid;font-family:Noto Sans SC,Inter,ui-sans-serif,system-ui,sans-serif;grid-template-rows:56px 1fr 26px;height:100vh;overflow:hidden}.module-delete-backdrop{align-items:center;background:#14181e6b;display:flex;inset:0;justify-content:center;padding:18px;position:fixed;z-index:var(--z-modal)}.module-delete-dialog{background:var(--panel);border:4px solid #c6cbd2;border-radius:8px;box-shadow:0 18px 42px #14181e47;max-width:min(540px,100%);overflow:hidden;width:540px}.module-delete-header{align-items:center;background:var(--workspace-chrome);color:var(--panel);display:flex;justify-content:center;min-height:78px;padding:12px 64px;position:relative}.module-delete-header h2{color:var(--panel);font-size:var(--fs-3xl);font-weight:var(--fw-heavy);text-align:center}.module-delete-close{align-items:center;background:#d99424;border:0;border-radius:999px;color:var(--panel);display:flex;font-size:var(--fs-glyph-lg);font-weight:var(--fw-heavy);height:44px;justify-content:center;min-height:44px;padding:0;position:absolute;right:18px;top:17px;width:44px}.module-delete-body{display:grid;gap:36px;padding:36px 52px}.module-delete-body p{color:#202b3a;font-size:var(--fs-3xl);font-weight:var(--fw-heavy);line-height:1.45}.module-delete-actions{display:flex;gap:12px;justify-content:flex-end}.module-delete-actions button{border-color:#d4d9df;color:#3d4750;font-size:var(--fs-xl);font-weight:var(--fw-heavy);min-height:70px;min-width:92px}.module-delete-actions .module-delete-confirm{background:var(--state-danger);border-color:var(--state-danger);color:var(--text-on-strong)}.app-prompt-dialog .module-delete-body{gap:18px;padding:28px 52px 36px}.app-prompt-label{color:#202b3a;font-size:var(--fs-xl);font-weight:var(--fw-semi);line-height:1.45}.app-prompt-input{border:2px solid #c6cbd2;border-radius:8px;color:#202b3a;font-size:var(--fs-xl);font-weight:var(--fw-semi);min-height:52px;padding:0 14px;width:100%}.app-prompt-input:focus{border-color:var(--brand-primary-strong);outline:none}.module-delete-actions .app-prompt-confirm{background:var(--brand-primary-strong);border-color:var(--brand-primary-strong);color:var(--text-on-strong)}.lab-topbar{align-items:center;background:var(--brand-primary-strong);color:var(--text-on-strong);display:grid;gap:16px;grid-template-columns:minmax(240px,1fr) auto minmax(240px,1fr);min-width:0;padding:0 16px;position:relative;z-index:var(--z-header)}.lab-topbar-start,.lab-topbar-end{align-items:center;display:flex;gap:10px;min-width:0}.lab-topbar-end{justify-content:flex-end}.lab-mode-switch{background:#ffffff21;border-radius:11px;display:flex;gap:4px;padding:4px}.lab-mode-switch button{align-items:center;background:transparent;border:0;border-radius:8px;color:#ffffffe0;display:inline-flex;font-size:var(--fs-lg);font-weight:var(--fw-semi);gap:6px;min-height:36px;min-width:76px;padding:0 16px}.lab-mode-switch button[aria-selected=true]{background:var(--panel);color:var(--brand-primary-strong);font-weight:var(--fw-bold)}.lab-local-status{align-items:center;color:#ffffffdb;display:inline-flex;font-size:var(--fs-sm);gap:6px;white-space:nowrap}.lab-save-btn,.lab-run-btn{align-items:center;border:0;color:var(--panel);display:inline-flex;font-weight:var(--fw-bold);gap:6px;min-height:34px}.lab-save-btn{background:transparent;border:1px solid rgb(255 255 255 / .72);border-radius:8px;padding:0 12px}.lab-save-btn:hover{background:#ffffff1f}.lab-run-btn{background:var(--workspace-chrome);border-radius:999px;min-width:81px;padding:0 16px}.lab-run-btn.is-running{background:#0f172a}.lab-brand,.lab-toolbar-actions{align-items:center;display:flex}.lab-brand{gap:10px;min-width:0}.lab-brand strong{font-family:var(--font-display);font-size:var(--fs-2xl);font-weight:var(--fw-bold);letter-spacing:0;white-space:nowrap}.lab-brand-mark{align-items:center;background:var(--panel);border:0;border-radius:8px;display:inline-flex;height:28px;justify-content:center;overflow:hidden;width:28px}.lab-brand-mark img{width:100%;height:100%;display:block;object-fit:cover}.lab-toolbar-actions{gap:0;min-width:0;overflow:visible}.topbar-menu{position:relative}.topbar-menu summary{align-items:center;background:transparent;border:0;border-radius:0;color:var(--panel);cursor:pointer;display:inline-flex;font-weight:var(--fw-semi);gap:8px;list-style:none;min-height:56px;padding:0 10px;-webkit-user-select:none;user-select:none;white-space:nowrap}.topbar-menu summary::-webkit-details-marker{display:none}.topbar-menu-btn{align-items:center;background:transparent;border:0;border-radius:0;color:var(--panel);cursor:pointer;display:inline-flex;font-weight:var(--fw-heavy);gap:8px;list-style:none;min-height:56px;padding:0 10px;-webkit-user-select:none;user-select:none;white-space:nowrap}.topbar-menu-btn:after{border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid rgba(255,255,255,.88);content:"";height:0;width:0}.topbar-menu[open] summary,.topbar-menu summary:hover,.topbar-menu-btn:hover,.topbar-menu-btn[aria-expanded=true]{background:#0000001f}.topbar-menu-panel{background:var(--surface, var(--panel));border:1px solid var(--border);border-radius:12px;box-shadow:0 16px 36px #00000029;color:var(--ink);display:grid;gap:2px;left:0;min-width:230px;padding:6px;position:absolute;top:calc(100% + 6px);z-index:var(--z-menu)}.topbar-project-panel{min-width:320px}.topbar-course-panel{min-width:270px}.topbar-menu-panel button,.topbar-menu-panel .lab-toolbar-link{align-items:center;background:transparent;border:0;border-radius:8px;color:var(--ink);display:flex;font-weight:var(--fw-semi);font-size:var(--fs-md);gap:10px;justify-content:flex-start;min-height:44px;padding:0 12px;text-decoration:none;white-space:nowrap;width:100%}.topbar-menu-panel button svg,.topbar-menu-panel .lab-toolbar-link svg{color:var(--muted);flex:0 0 auto}.topbar-menu-panel button:hover,.topbar-menu-panel .lab-toolbar-link:hover{background:var(--bg);color:var(--ink)}.topbar-menu-panel button:hover svg,.topbar-menu-panel .lab-toolbar-link:hover svg{color:var(--ink)}.topbar-menu-panel button:focus-visible,.topbar-menu-panel .lab-toolbar-link:focus-visible{outline-color:var(--accent)}.topbar-menu-panel select{background:var(--surface, var(--panel));border:1px solid var(--border);border-radius:8px;color:var(--ink);min-height:44px;padding:0 10px;width:100%}.topbar-menu-field{color:var(--muted);display:grid;gap:6px;font-size:var(--fs-sm);font-weight:var(--fw-bold)}.topbar-menu-separator{border-top:1px solid var(--border);margin:4px 0}.topbar-project-name{align-items:center;background:#ffffff21;border-radius:9px;display:grid;gap:6px;grid-template-columns:14px minmax(80px,174px);min-width:0;padding:0 11px;transition:background-color .15s ease}.topbar-project-name:focus-within{background:#ffffff38}.topbar-project-name input{background:transparent;border:0;border-radius:0;color:var(--panel);font-size:var(--fs-md);font-weight:var(--fw-semi);min-height:34px;min-width:0;padding:0}.topbar-project-name input:focus,.topbar-project-name input:focus-visible{outline:none;box-shadow:none}.topbar-project-name button{display:none}.topbar-project-name button:hover:not(:disabled){background:var(--brand-primary-hover);border-color:var(--brand-primary-hover)}.topbar-project-manager{display:grid;gap:6px;grid-template-columns:repeat(3,minmax(0,1fr));min-width:0}.topbar-project-manager select{grid-column:1 / -1}.topbar-course-panel .assignment-submit-control{display:grid;gap:6px}.topbar-course-panel .assignment-submit-control select{max-width:none}.lab-topbar-end .lab-user-chip{justify-self:end}.lab-shell .lab-user-chip{background:#ffffff2e;color:var(--text-on-strong)}.lab-user-chip{align-items:center;align-self:center;background:#ffffff2e;border-radius:999px;color:var(--panel);display:inline-flex;gap:6px;font-weight:var(--fw-heavy);justify-self:end;min-height:26px;padding:2px 6px;text-decoration:none;white-space:nowrap;width:fit-content}.assignment-submit-control{align-items:center;display:inline-flex;gap:6px}.assignment-submit-control select{max-width:180px}.lab-user-account button{background:#ffffff2e;border:0;border-radius:999px;color:var(--panel);min-height:26px;padding:0 9px}.lab-user-link:hover,.lab-user-account button:hover{background:#ffffff47}.lab-clock{color:#ddffdb;font-variant-numeric:tabular-nums;font-weight:var(--fw-heavy);min-width:82px;text-align:right}.lab-status-dot{background:var(--panel);border-radius:999px;height:9px;width:9px}.lab-status-running{background:var(--action-cta)}.lab-status-error{background:#b42318}.lab-shell button:hover{border-color:var(--border-strong)}.lab-shell button:focus-visible,.lab-shell a:focus-visible,.lab-shell input:focus-visible,.lab-shell select:focus-visible,.lab-shell textarea:focus-visible,.lab-shell summary:focus-visible{outline-color:var(--focus-ring)}.mobile-workspace-tabs{display:none}.lab-workspace{display:grid;grid-template-columns:284px minmax(560px,1fr);min-height:0;overflow:hidden;position:relative}.lab-workspace-resizable{grid-template-columns:284px minmax(460px,1fr)}.lab-shell[data-workbench-mode=programming] .lab-workspace,.lab-shell[data-workbench-mode=programming] .lab-workspace-resizable{grid-template-columns:minmax(0,1fr)}.lab-shell[data-workbench-mode=programming] .lab-left,.lab-shell[data-workbench-mode=programming] .lab-workspace-resizer,.lab-shell[data-workbench-mode=wiring] .lab-workspace-resizer,.lab-shell[data-workbench-mode=scene] .lab-workspace-resizer{display:none}.lab-workspace-resizer{background:#f8f9fa;border-left:1px solid var(--border-default);border-right:1px solid var(--border-default);z-index:4}.lab-left,.lab-main,.lab-right{min-height:0;min-width:0}.lab-left{background:var(--surface-panel);border-right:1px solid var(--border-default);display:flex;flex-direction:column}.lab-left-tabs{align-items:center;background:#fbfbfc;border-bottom:1px solid var(--border-default);display:flex;gap:4px;height:42px;padding:0 14px}.lab-left-tabs button{background:transparent;border:0;border-radius:0;color:#4f5963;min-height:40px;padding:0 10px}.lab-left-tabs button[aria-pressed=true]{border-bottom:2px solid var(--brand-primary);color:var(--text-primary)}.lab-shell .blocklyToolbox{background:var(--surface-muted)!important;border-right:1px solid var(--border-default);overflow-x:hidden;overflow-y:auto;padding:6px;scrollbar-width:none;transition:width .18s ease;width:var(--mpython-toolbox-width, 108px)!important}.lab-shell .blocklyToolbox::-webkit-scrollbar{display:none;height:0;width:0}.lab-shell .blocklyToolboxCategoryGroup{display:flex;flex-direction:column;flex-wrap:nowrap;row-gap:2px}.lab-shell .mpython-toolbox-row{align-items:center;background:transparent;border-left:0!important;border-radius:8px;color:var(--text-secondary);display:flex;flex-direction:row;font-size:var(--fs-sm);font-weight:var(--fw-normal);min-height:38px;padding:0 6px;padding-left:6px!important;text-align:left;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease;width:100%}.lab-shell .mpython-toolbox-row:hover{background:#0f172a0d;color:var(--text-primary)}.lab-shell .mpython-toolbox-row:focus-visible{background:#0f172a0d;box-shadow:inset 0 0 0 2px var(--focus-ring);outline:none}.lab-shell .blocklyToolboxSelected.mpython-toolbox-selected,.lab-shell .mpython-toolbox-selected.blocklyToolboxSelected{background-color:var(--brand-primary-soft)!important;box-shadow:inset 3px 0 0 var(--brand-primary)!important;color:var(--brand-primary-strong)!important;font-weight:var(--fw-bold)}.lab-shell .mpython-toolbox-icon{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z'%20/%3e%3cpath%20d='m3.3%207%208.7%205%208.7-5'%20/%3e%3cpath%20d='M12%2022V12'%20/%3e%3c/svg%3e");background-color:currentColor;display:inline-block;flex:0 0 18px;height:18px;margin:0 6px 0 0;-webkit-mask-image:var(--toolbox-icon)!important;mask-image:var(--toolbox-icon)!important;mask-mode:luminance;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:18px 18px;mask-size:18px 18px;padding:0;transition:background-color .16s ease;visibility:visible!important;width:18px}.lab-shell .mpython-toolbox-icon--input{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3ccircle%20cx='12'%20cy='12'%20r='10'%20/%3e%3cline%20x1='22'%20x2='18'%20y1='12'%20y2='12'%20/%3e%3cline%20x1='6'%20x2='2'%20y1='12'%20y2='12'%20/%3e%3cline%20x1='12'%20x2='12'%20y1='6'%20y2='2'%20/%3e%3cline%20x1='12'%20x2='12'%20y1='22'%20y2='18'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--display{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3crect%20width='20'%20height='14'%20x='2'%20y='3'%20rx='2'%20/%3e%3cline%20x1='8'%20x2='16'%20y1='21'%20y2='21'%20/%3e%3cline%20x1='12'%20x2='12'%20y1='17'%20y2='21'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--music{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M9%2018V5l12-2v13'%20/%3e%3ccircle%20cx='6'%20cy='18'%20r='3'%20/%3e%3ccircle%20cx='18'%20cy='16'%20r='3'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--rgb{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M15%2014c.2-1%20.7-1.7%201.5-2.5%201-.9%201.5-2.2%201.5-3.5A6%206%200%200%200%206%208c0%201%20.2%202.2%201.5%203.5.7.7%201.3%201.5%201.5%202.5'%20/%3e%3cpath%20d='M9%2018h6'%20/%3e%3cpath%20d='M10%2022h4'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--wifi{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M12%2020h.01'%20/%3e%3cpath%20d='M2%208.82a15%2015%200%200%201%2020%200'%20/%3e%3cpath%20d='M5%2012.859a10%2010%200%200%201%2014%200'%20/%3e%3cpath%20d='M8.5%2016.429a5%205%200%200%201%207%200'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--broadcast{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M16.247%207.761a6%206%200%200%201%200%208.478'%20/%3e%3cpath%20d='M19.075%204.933a10%2010%200%200%201%200%2014.134'%20/%3e%3cpath%20d='M4.925%2019.067a10%2010%200%200%201%200-14.134'%20/%3e%3cpath%20d='M7.753%2016.239a6%206%200%200%201%200-8.478'%20/%3e%3ccircle%20cx='12'%20cy='12'%20r='2'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--loop{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M3%2012a9%209%200%200%201%209-9%209.75%209.75%200%200%201%206.74%202.74L21%208'%20/%3e%3cpath%20d='M21%203v5h-5'%20/%3e%3cpath%20d='M21%2012a9%209%200%200%201-9%209%209.75%209.75%200%200%201-6.74-2.74L3%2016'%20/%3e%3cpath%20d='M8%2016H3v5'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--logic{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M2.7%2010.3a2.41%202.41%200%200%200%200%203.41l7.59%207.59a2.41%202.41%200%200%200%203.41%200l7.59-7.59a2.41%202.41%200%200%200%200-3.41l-7.59-7.59a2.41%202.41%200%200%200-3.41%200Z'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--math{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M18%207V5a1%201%200%200%200-1-1H6.5a.5.5%200%200%200-.4.8l4.5%206a2%202%200%200%201%200%202.4l-4.5%206a.5.5%200%200%200%20.4.8H17a1%201%200%200%200%201-1v-2'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--text{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M12%204v16'%20/%3e%3cpath%20d='M4%207V5a1%201%200%200%201%201-1h14a1%201%200%200%201%201%201v2'%20/%3e%3cpath%20d='M9%2020h6'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--variable{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M8%2021s-4-3-4-9%204-9%204-9'%20/%3e%3cpath%20d='M16%203s4%203%204%209-4%209-4%209'%20/%3e%3cline%20x1='15'%20x2='9'%20y1='9'%20y2='15'%20/%3e%3cline%20x1='9'%20x2='15'%20y1='9'%20y2='15'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--advanced{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M10%205H3'%20/%3e%3cpath%20d='M12%2019H3'%20/%3e%3cpath%20d='M14%203v4'%20/%3e%3cpath%20d='M16%2017v4'%20/%3e%3cpath%20d='M21%2012h-9'%20/%3e%3cpath%20d='M21%2019h-5'%20/%3e%3cpath%20d='M21%205h-7'%20/%3e%3cpath%20d='M8%2010v4'%20/%3e%3cpath%20d='M8%2012H3'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--extension{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M10%2022V7a1%201%200%200%200-1-1H4a2%202%200%200%200-2%202v12a2%202%200%200%200%202%202h12a2%202%200%200%200%202-2v-5a1%201%200%200%200-1-1H2'%20/%3e%3crect%20x='14'%20y='2'%20width='8'%20height='8'%20rx='1'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--library{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='m16%206%204%2014'%20/%3e%3cpath%20d='M12%206v14'%20/%3e%3cpath%20d='M8%208v12'%20/%3e%3cpath%20d='M4%204v16'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--function{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3crect%20width='18'%20height='18'%20x='3'%20y='3'%20rx='2'%20ry='2'%20/%3e%3cpath%20d='M9%2017c2%200%202.8-1%202.8-2.8V10c0-2%201-3.3%203.2-3'%20/%3e%3cpath%20d='M9%2011.2h5.7'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--list{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M3%205h.01'%20/%3e%3cpath%20d='M3%2012h.01'%20/%3e%3cpath%20d='M3%2019h.01'%20/%3e%3cpath%20d='M8%205h13'%20/%3e%3cpath%20d='M8%2012h13'%20/%3e%3cpath%20d='M8%2019h13'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--tuple{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M8%2021s-4-3-4-9%204-9%204-9'%20/%3e%3cpath%20d='M16%203s4%203%204%209-4%209-4%209'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--set{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20(redrawn%20overlapping%20circles)%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3ccircle%20cx='9'%20cy='12'%20r='6'%20/%3e%3ccircle%20cx='15'%20cy='12'%20r='6'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--dict{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M8%203H7a2%202%200%200%200-2%202v5a2%202%200%200%201-2%202%202%202%200%200%201%202%202v5c0%201.1.9%202%202%202h1'%20/%3e%3cpath%20d='M16%2021h1a2%202%200%200%200%202-2v-5c0-1.1.9-2%202-2a2%202%200%200%201-2-2V5a2%202%200%200%200-2-2h-1'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--pin{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3crect%20width='18'%20height='18'%20x='3'%20y='3'%20rx='2'%20/%3e%3cpath%20d='M11%209h4a2%202%200%200%200%202-2V3'%20/%3e%3ccircle%20cx='9'%20cy='9'%20r='2'%20/%3e%3cpath%20d='M7%2021v-4a2%202%200%200%201%202-2h4'%20/%3e%3ccircle%20cx='15'%20cy='15'%20r='2'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--grove{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M12%2022v-5'%20/%3e%3cpath%20d='M9%208V2'%20/%3e%3cpath%20d='M15%208V2'%20/%3e%3cpath%20d='M18%208v5a4%204%200%200%201-4%204h-4a4%204%200%200%201-4-4V8Z'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--pressure{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='m12%2014%204-4'%20/%3e%3cpath%20d='M3.34%2019a10%2010%200%201%201%2017.32%200'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--digital-light{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3ccircle%20cx='12'%20cy='12'%20r='4'%20/%3e%3cpath%20d='M12%202v2'%20/%3e%3cpath%20d='M12%2020v2'%20/%3e%3cpath%20d='m4.93%204.93%201.41%201.41'%20/%3e%3cpath%20d='m17.66%2017.66%201.41%201.41'%20/%3e%3cpath%20d='M2%2012h2'%20/%3e%3cpath%20d='M20%2012h2'%20/%3e%3cpath%20d='m6.34%2017.66-1.41%201.41'%20/%3e%3cpath%20d='m19.07%204.93-1.41%201.41'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--ntc{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M14%204v10.54a4%204%200%201%201-4%200V4a2%202%200%200%201%204%200Z'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--ultrasonic{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M19.07%204.93A10%2010%200%200%200%206.99%203.34'%20/%3e%3cpath%20d='M4%206h.01'%20/%3e%3cpath%20d='M2.29%209.62A10%2010%200%201%200%2021.31%208.35'%20/%3e%3cpath%20d='M16.24%207.76A6%206%200%201%200%208.23%2016.67'%20/%3e%3cpath%20d='M12%2018h.01'%20/%3e%3cpath%20d='M17.99%2011.66A6%206%200%200%201%2015.77%2016.67'%20/%3e%3ccircle%20cx='12'%20cy='12'%20r='2'%20/%3e%3cpath%20d='m13.41%2010.59%205.66-5.66'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--pm25{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M12.8%2019.6A2%202%200%201%200%2014%2016H2'%20/%3e%3cpath%20d='M17.5%208a2.5%202.5%200%201%201%202%204H2'%20/%3e%3cpath%20d='M9.8%204.4A2%202%200%201%201%2011%208H2'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--mp3{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3ccircle%20cx='12'%20cy='12'%20r='10'%20/%3e%3cpath%20d='M6%2012c0-1.7.7-3.2%201.8-4.2'%20/%3e%3ccircle%20cx='12'%20cy='12'%20r='2'%20/%3e%3cpath%20d='M18%2012c0%201.7-.7%203.2-1.8%204.2'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--motor{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M11%2010.27%207%203.34'%20/%3e%3cpath%20d='m11%2013.73-4%206.93'%20/%3e%3cpath%20d='M12%2022v-2'%20/%3e%3cpath%20d='M12%202v2'%20/%3e%3cpath%20d='M14%2012h8'%20/%3e%3cpath%20d='m17%2020.66-1-1.73'%20/%3e%3cpath%20d='m17%203.34-1%201.73'%20/%3e%3cpath%20d='M2%2012h2'%20/%3e%3cpath%20d='m20.66%2017-1.73-1'%20/%3e%3cpath%20d='m20.66%207-1.73%201'%20/%3e%3cpath%20d='m3.34%2017%201.73-1'%20/%3e%3cpath%20d='m3.34%207%201.73%201'%20/%3e%3ccircle%20cx='12'%20cy='12'%20r='2'%20/%3e%3ccircle%20cx='12'%20cy='12'%20r='8'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--fan{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M10.827%2016.379a6.082%206.082%200%200%201-8.618-7.002l5.412%201.45a6.082%206.082%200%200%201%207.002-8.618l-1.45%205.412a6.082%206.082%200%200%201%208.618%207.002l-5.412-1.45a6.082%206.082%200%200%201-7.002%208.618l1.45-5.412Z'%20/%3e%3cpath%20d='M12%2012v.01'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--servo{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M21%2012a9%209%200%201%201-9-9c2.52%200%204.93%201%206.74%202.74L21%208'%20/%3e%3cpath%20d='M21%203v5h-5'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--siot{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M17.5%2019H9a7%207%200%201%201%206.71-9h1.79a4.5%204.5%200%201%201%200%209Z'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--strip{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20(redrawn%20LED%20strip)%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3crect%20x='2'%20y='8'%20width='20'%20height='8'%20rx='2'%20/%3e%3ccircle%20cx='7'%20cy='12'%20r='1.4'%20fill='white'%20stroke='none'%20/%3e%3ccircle%20cx='12'%20cy='12'%20r='1.4'%20fill='white'%20stroke='none'%20/%3e%3ccircle%20cx='17'%20cy='12'%20r='1.4'%20fill='white'%20stroke='none'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-icon--rgb-strip{--toolbox-icon: url("data:image/svg+xml,%3c!--%20@license%20lucide-static%20v0.544.0%20-%20ISC%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='white'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3crect%20width='7'%20height='7'%20x='3'%20y='3'%20rx='1'%20/%3e%3crect%20width='7'%20height='7'%20x='14'%20y='3'%20rx='1'%20/%3e%3crect%20width='7'%20height='7'%20x='14'%20y='14'%20rx='1'%20/%3e%3crect%20width='7'%20height='7'%20x='3'%20y='14'%20rx='1'%20/%3e%3c/svg%3e")}.lab-shell .mpython-toolbox-label{flex:1;font-family:Noto Sans SC,sans-serif;font-size:var(--fs-sm);font-weight:inherit;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lab-shell .mpython-toolbox-selected .mpython-toolbox-label{color:var(--brand-primary-strong)}.lab-shell .mpython-toolbox-row:has(.blocklyToolboxCategoryIconClosed):after{content:"▸";font-size:var(--fs-xs);margin-left:auto;opacity:.7;padding-left:4px}.lab-shell .mpython-toolbox-row:has(.blocklyToolboxCategoryIconOpen):after{content:"▾";font-size:var(--fs-xs);margin-left:auto;opacity:.85;padding-left:4px}.lab-shell .blocklyToolboxCategoryGroup .blocklyToolboxCategoryGroup .mpython-toolbox-row{font-size:var(--fs-xs);min-height:30px;padding-left:30px!important;padding-right:6px}.lab-shell .blocklyToolboxCategoryGroup .blocklyToolboxCategoryGroup .mpython-toolbox-icon{flex:0 0 15px;height:15px;margin-right:5px;-webkit-mask-size:15px 15px;mask-size:15px 15px;width:15px}.lab-shell .blocklyFlyoutBackground{fill:var(--panel)}.component-library{display:grid;flex:1;grid-template-columns:78px minmax(0,1fr);grid-template-rows:1fr;min-height:0;overflow:hidden}.library-rail{background:var(--surface-muted);border-right:1px solid var(--border-default);display:flex;flex-direction:column;gap:2px;overflow:auto;padding:6px}.library-rail button{align-items:center;background:transparent;border:0;border-radius:8px;color:var(--text-secondary);cursor:pointer;display:flex;font-size:var(--fs-sm);font-weight:var(--fw-normal);justify-content:center;min-height:44px;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease}.library-rail button:hover{background:#0f172a0d;color:var(--text-primary)}.library-rail button:focus-visible{box-shadow:inset 0 0 0 2px var(--focus-ring);outline:none}.library-rail button[aria-pressed=true]{background:var(--brand-primary-soft);box-shadow:inset 3px 0 0 var(--brand-primary);color:var(--brand-primary-strong);font-weight:var(--fw-bold)}.library-catalog{display:grid;grid-template-rows:auto auto auto auto auto 1fr;min-height:0;padding:12px}.library-catalog-head{align-items:center;display:flex;justify-content:space-between;margin-bottom:8px}.library-catalog-head strong{font-size:var(--fs-lg)}.library-catalog-head span{color:var(--text-secondary);font-size:var(--fs-sm)}.blockly-sidebar{display:grid;flex:1;grid-template-columns:92px 1fr;min-height:0}.blockly-sidebar.blockly-live{display:block;overflow:hidden;position:relative}.blockly-sidebar.blockly-live .blockly{height:100%;width:100%}.blockly-sidebar.blockly-live.programming-workspace{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:50px minmax(0,1fr);height:100%}.blockly-sidebar.blockly-live.programming-workspace.programming-split{grid-template-columns:minmax(0,1fr)}.programming-toolbar{align-items:center;background:var(--surface-panel);border-bottom:1px solid var(--border-default);display:flex;gap:16px;justify-content:space-between;padding:0 14px}.programming-toolbar strong{font-size:var(--fs-lg)}.programming-body{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);min-height:0;min-width:0}.programming-workspace.programming-split .programming-body{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.programming-blocks{min-height:0;min-width:0;overflow:hidden}.programming-blocks .blockly{height:100%;width:100%}.programming-code{height:100%;min-height:0;min-width:0}.programming-workspace.programming-blocks .programming-code{display:none}.programming-workspace.programming-code .programming-blocks,.programming-workspace.programming-code .programming-code{grid-column:1;grid-row:1}.programming-workspace.programming-code .programming-blocks{pointer-events:none;visibility:hidden}.programming-workspace.programming-split .programming-code{border-left:1px solid var(--border-default)}.python-code-editor{background:var(--panel);color:#14202a;display:grid;font-family:JetBrains Mono,Consolas,SFMono-Regular,Liberation Mono,monospace;font-size:var(--fs-lg);grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto 1fr;line-height:1.6;min-height:0;min-width:0;overflow:hidden}.python-code-readonly-banner{align-items:center;background:var(--state-warning-soft, #fffbeb);border-bottom:1px solid #fcd34d;color:var(--state-warning, #b45309);display:flex;font-family:var(--font-body, "Noto Sans SC", sans-serif);font-size:var(--fs-sm);gap:6px;grid-column:1 / -1;line-height:1.4;padding:6px 10px}.python-code-editor[data-readonly] .python-code-input{caret-color:transparent;cursor:not-allowed}.python-code-editor[data-readonly] .python-code-input::selection{background:#64748b2e}.python-code-gutter{background:#fbfbfc;border-right:1px solid #e5e7eb;color:#6b7280;grid-row:2;min-width:46px;overflow:hidden;padding:10px 8px;text-align:right;-webkit-user-select:none;user-select:none}.python-code-gutter-inner{will-change:transform}.python-code-line-number{display:block;font-variant-numeric:tabular-nums}.python-code-body{grid-row:2;min-height:0;min-width:0;overflow:hidden;position:relative}.python-code-highlight,.python-code-input{border:0;border-radius:0;box-sizing:border-box;font:inherit;inset:0;line-height:inherit;margin:0;min-height:100%;min-width:100%;padding:10px 12px;position:absolute;tab-size:2;white-space:pre}.python-code-highlight{pointer-events:none;will-change:transform}.python-code-input{background:transparent;caret-color:#14202a;color:transparent;height:100%;outline:none;overflow:auto;resize:none;width:100%}.python-code-input::selection{background:#d04a0a3d;color:transparent}.python-token-keyword{color:var(--brand-900);font-weight:var(--fw-bold)}.python-token-builtin{color:#c2410c;font-weight:var(--fw-bold)}.python-token-string{color:#0f766e}.python-token-number{color:#b91c1c}.python-token-comment{color:#6b7280;font-style:italic}.library-search{margin-bottom:12px;position:relative;z-index:1}.library-search input{background:var(--surface-muted);border-color:var(--border-default);border-radius:999px;width:100%}.library-search input:focus-visible{box-shadow:0 0 0 3px var(--panel);outline-offset:1px;outline-width:2px}.library-categories{display:grid;gap:5px}.library-categories button{align-items:center;background:transparent;border:0;border-radius:6px;color:#3d4750;display:flex;justify-content:flex-start;min-height:30px;padding:0 8px}.library-categories button[aria-pressed=true]{background:var(--brand-primary-soft);color:var(--text-primary);font-weight:var(--fw-heavy)}.library-quick-actions{display:grid;gap:6px;grid-template-columns:1fr 1fr}.library-quick-actions button{border-color:var(--action-cta-soft);color:var(--action-cta)}.library-quick-actions button:hover{background:var(--action-cta-soft);border-color:var(--action-cta)}.component-count{color:var(--text-secondary);font-size:var(--fs-sm)}.library-cards{display:grid;gap:8px;min-height:0;overflow:auto;padding-right:2px}.scene-library{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden}.scene-library-head{align-items:center;background:transparent;border:0;border-radius:8px;cursor:pointer;display:grid;gap:4px;grid-template-columns:1fr auto;margin-bottom:8px;padding:12px 12px 0;text-align:left;transition:background-color .16s ease,box-shadow .16s ease;width:100%}.scene-library-head:hover{background:#0f172a0d}.scene-library-head:focus-visible{box-shadow:inset 0 0 0 2px var(--focus-ring);outline:none}.scene-library-head strong{font-size:var(--fs-lg)}.scene-library-head span{color:var(--text-secondary);font-size:var(--fs-sm);grid-column:1 / -1}.scene-library-head:after{color:var(--text-secondary);content:"▾";font-size:var(--fs-xs);grid-column:2;grid-row:1;justify-self:end;padding-left:4px}.scene-library.is-collapsed .scene-library-head:after{content:"▸"}.scene-library.is-collapsed .scene-library-head{margin-bottom:0;padding-bottom:12px}.scene-library-list{display:grid;gap:8px;list-style:none;margin:0;min-height:0;overflow:auto;padding:0 12px 12px}.scene-library-list button{align-items:flex-start;background:var(--surface-panel);border:1px solid var(--border-default);border-radius:var(--radius-sm);display:grid;gap:4px;min-height:72px;padding:10px;text-align:left;transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease;width:100%}.scene-library-list button:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm)}.scene-library-list button:focus-visible{box-shadow:inset 0 0 0 2px var(--focus-ring);outline:none}.scene-library-list button[aria-pressed=true]{background:var(--brand-primary-soft);border-color:var(--brand-primary);box-shadow:inset 3px 0 0 var(--brand-primary);color:var(--brand-primary-strong);font-weight:var(--fw-bold)}.scene-library-list button[aria-pressed=true]:hover,.scene-library-list button[aria-pressed=true]:focus-visible{box-shadow:inset 3px 0 0 var(--brand-primary),var(--shadow-sm)}.scene-library-list strong{font-size:var(--fs-sm);font-weight:var(--fw-semi);line-height:1.15}.scene-library-list span{-webkit-box-orient:vertical;color:var(--text-secondary);display:-webkit-box;font-size:var(--fs-sm);font-weight:var(--fw-normal);-webkit-line-clamp:2;overflow:hidden}.programming-toolbar .lab-left-tabs{background:var(--surface-muted);border:0;border-radius:8px;gap:2px;height:32px;padding:2px}.programming-toolbar .lab-left-tabs button{border-radius:6px;min-height:28px}.programming-toolbar .lab-left-tabs button[aria-pressed=true]{background:var(--panel);border-bottom:0;color:var(--brand-primary-strong);font-weight:var(--fw-bold)}.lab-left .library-categories,.lab-left .library-quick-actions,.lab-left .component-count{display:none}.library-card{align-items:center;background:var(--surface-panel);border:1px solid var(--border-default);border-radius:var(--radius-sm);cursor:grab;display:flex;flex-direction:column;gap:5px;justify-content:flex-start;padding:10px 8px;text-align:center;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.library-card:hover,.library-card:focus-visible{border-color:var(--border-strong);box-shadow:var(--shadow-sm);outline:none;transform:translateY(-2px)}.library-card:active{cursor:grabbing}.library-card[hidden]{display:none!important}.component-thumb{display:block;height:44px;object-fit:contain;width:72px}.component-name{color:#111820;display:-webkit-box;font-size:var(--fs-sm);font-weight:var(--fw-semi);-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.15;overflow:hidden;overflow-wrap:anywhere;text-align:center;word-break:break-word}.component-badge{background:var(--brand-primary-soft);border-radius:999px;color:var(--brand-primary-strong);flex-shrink:0;font-size:var(--fs-xs);font-weight:var(--fw-bold);letter-spacing:.02em;padding:2px 7px}.lab-main{display:grid;grid-template-rows:minmax(360px,1fr);position:relative}.wb-pane{grid-column:1;grid-row:1;min-height:0;min-width:0;overflow:hidden}.wb-pane.is-inactive{pointer-events:none;visibility:hidden;z-index:0}.wb-pane.is-active{z-index:1}.wb-pane .programming-workspace,.wb-pane .simulation-canvas{height:100%}.programming-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;height:100%;min-height:0;min-width:0}.programming-layout .programming-workspace{min-width:0}.sim-summary{background:var(--panel);border-left:1px solid var(--border);min-height:0;overflow:auto;padding-bottom:16px}.sim-summary-title{padding:14px 16px 10px;font-size:var(--fs-sm);font-weight:var(--fw-bold);letter-spacing:.08em;color:var(--muted);margin:0}.sim-summary-state{margin:0 16px 14px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:13px 15px;display:flex;align-items:center;justify-content:space-between}.sim-summary-state-label{font-size:var(--fs-sm);color:var(--muted)}.sim-summary-state-value{font-family:var(--font-mono);font-size:var(--fs-md);font-weight:var(--fw-semi);color:var(--muted);display:flex;align-items:center;gap:7px}.sim-summary-state-value.is-running{color:var(--state-success)}.sim-led{width:8px;height:8px;border-radius:50%;background:currentColor}.sim-summary-state-value.is-running .sim-led{animation:sim-summary-pulse 1.6s ease-in-out infinite}@keyframes sim-summary-pulse{0%,to{opacity:1}50%{opacity:.4}}.sim-io-group{margin:0 16px 14px}.sim-io-head{font-size:var(--fs-sm);font-weight:var(--fw-bold);color:var(--ink);margin-bottom:8px;display:flex;align-items:center;gap:7px}.sim-io-tag{width:6px;height:14px;border-radius:3px;background:var(--accent)}.sim-io-tag.is-out{background:var(--workspace-chrome)}.sim-io-row{display:flex;align-items:center;justify-content:space-between;padding:9px 13px;background:var(--panel);border:1px solid var(--border);border-radius:9px;margin-bottom:7px}.sim-io-name{font-size:var(--fs-md);color:var(--ink)}.sim-io-state{font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:var(--fw-semi);color:var(--workspace-chrome)}.sim-io-state.is-on{color:var(--state-success)}.sim-fold{margin:6px 16px 0;border-top:1px solid var(--border-default);padding-top:8px}.sim-chart{display:block;width:100%;height:80px;margin:6px 0 2px}.sim-chart-line{fill:none;stroke:var(--accent, #2f7df6);stroke-width:1.5}.sim-fold-btn{width:100%;display:flex;align-items:center;justify-content:space-between;background:transparent;border:none;font-size:var(--fs-md);font-weight:var(--fw-normal);color:var(--muted);padding:9px 4px;border-radius:8px;cursor:pointer;transition:color .14s ease,background .14s ease}.sim-fold-btn:hover{color:var(--ink);background:var(--bg)}.sim-fold-chev{width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .2s ease}.sim-fold-btn[aria-expanded=true] .sim-fold-chev{transform:rotate(225deg)}.sim-fold-body{padding:4px 4px 8px;font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--muted);line-height:1.8;white-space:pre-wrap;word-break:break-all}.sim-detail{display:grid;gap:4px;margin:0}.sim-detail-row{display:flex;justify-content:space-between;gap:12px}@media(max-width:1280px){.programming-layout{grid-template-columns:minmax(0,1fr) 264px}}@media(max-width:1100px){.programming-layout{grid-template-columns:minmax(0,1fr)}.sim-summary{display:none}}.task-window.is-minimized{width:auto!important;height:auto!important;min-width:0;min-height:0;max-width:min(420px,calc(100vw - 24px));resize:none;border-radius:999px;box-shadow:0 12px 28px #0000002b;left:var(--task-win-left)!important;top:var(--task-win-top)!important;right:auto!important;bottom:auto!important}.task-window.is-minimized .task-window-body{display:none}.task-window.is-minimized .task-window-head{border-bottom:none;min-height:44px;padding:4px 4px 4px 14px;gap:8px}.task-window.is-minimized .task-sheet-handle{display:none}.task-window-chip{margin:0;min-width:0;flex:1;font-size:var(--fs-md);font-weight:var(--fw-bold);line-height:1.35;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-window.is-minimized .task-window-min{width:36px;height:36px;font-size:var(--fs-xl)}.task-window{position:fixed;top:72px;right:16px;width:380px;height:520px;min-width:320px;min-height:240px;max-width:calc(100vw - 24px);max-height:calc(100vh - 80px);display:flex;flex-direction:column;resize:both;overflow:hidden;background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:0 20px 48px #0003;z-index:24;transition:transform .18s ease,opacity .18s ease,box-shadow .18s ease}.task-window-head{display:flex;align-items:center;gap:10px;min-height:52px;padding:0 12px 0 16px;background:var(--panel);border-bottom:1px solid var(--border);cursor:move;-webkit-user-select:none;user-select:none}.task-sheet-handle{display:none}.task-window-kicker{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent);letter-spacing:.08em}.task-window-title{margin:2px 0 0;font-size:var(--fs-lg);line-height:1.35;font-weight:var(--fw-bold);color:var(--ink)}.task-window-min{width:44px;height:44px;margin-left:auto;display:grid;place-items:center;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--ink);font-size:var(--fs-2xl);line-height:1;cursor:pointer;transition:background .15s ease,border-color .15s ease}.task-window-min:hover{background:var(--bg);border-color:var(--border-strong);color:var(--ink)}.task-window-body{min-height:0;overflow:auto;padding:16px}.task-step-position{margin:0 0 16px;font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--muted)}.task-step-title{font-size:var(--fs-2xl);line-height:1.35;margin:0 0 8px;color:var(--ink)}.task-step-copy{font-size:var(--fs-md);line-height:1.75;color:var(--muted);margin:0}.task-goal{margin:14px 0;padding:12px;background:var(--accent-soft);border-radius:10px;font-size:var(--fs-md);line-height:1.7;color:var(--ink)}.task-action{width:100%;min-height:44px;border:0;border-radius:9px;background:var(--workspace-chrome);color:var(--panel);font-size:var(--fs-lg);font-weight:var(--fw-bold);cursor:pointer;transition:background .15s ease,transform .15s ease}.task-action:hover{background:oklch(from var(--workspace-chrome) calc(l + .1) c h);color:var(--panel)}.task-action:active{transform:scale(.98)}.task-secondary{margin-top:8px;width:100%;min-height:44px;border:1px solid var(--border);border-radius:9px;background:var(--panel);color:var(--ink);font-size:var(--fs-md);font-weight:var(--fw-semi);cursor:pointer}.task-secondary:hover{background:var(--bg);color:var(--ink)}.task-steps{display:grid;gap:4px;margin-top:18px;padding-top:14px;border-top:1px solid var(--border)}.task-step{display:flex;align-items:center;gap:9px;width:100%;min-height:44px;padding:7px;border:0;border-radius:8px;background:transparent;color:var(--ink);font-size:var(--fs-md);text-align:left;cursor:pointer}.task-step:hover{background:var(--bg);color:var(--ink)}.task-step-mark{width:22px;height:22px;display:grid;place-items:center;flex:0 0 22px;border:1px solid var(--border);border-radius:50%;background:var(--bg);color:var(--muted);font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:var(--fw-bold)}.task-step.completed .task-step-mark{background:var(--state-success);border-color:var(--state-success);color:var(--panel)}.task-step.attention .task-step-mark{background:oklch(from var(--state-danger) l c h / .14);border-color:var(--state-danger);color:var(--state-danger)}.task-step.active:not(.completed):not(.attention) .task-step-mark{background:var(--accent);border-color:var(--accent);color:var(--panel)}.task-step.active{font-weight:var(--fw-bold)}.task-step-state{margin-left:auto;color:var(--muted);font-size:var(--fs-xs);white-space:nowrap}.task-step.completed .task-step-state{color:var(--state-success)}.task-step.attention .task-step-state{color:var(--state-danger)}.task-status{margin-top:12px;padding:10px 12px;border-radius:9px;background:var(--bg);color:var(--muted);font-size:var(--fs-sm);line-height:1.55}.task-status.success{background:oklch(from var(--state-success) l c h / .12);color:var(--state-success)}.task-status.error{background:oklch(from var(--state-danger) l c h / .1);color:var(--state-danger)}.task-result-card{margin-top:14px;padding:14px;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--ink);animation:task-result-enter .18s ease both}@keyframes task-result-enter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.task-result-card h4,.task-result-card p{margin:0}.task-result-card h4{font-size:var(--fs-lg);line-height:1.4}.task-result-card h4:focus{outline:3px solid var(--accent);outline-offset:3px}.task-result-card p{margin-top:6px;color:var(--muted);font-size:var(--fs-sm);line-height:1.55}.task-result-card.is-fail{border-color:var(--state-danger);background:oklch(from var(--state-danger) l c h / .07)}.task-result-card.is-pass{border-color:var(--state-success);background:oklch(from var(--state-success) l c h / .09)}.task-result-card.is-blocked{border-color:var(--accent)}.task-result-running{display:grid;gap:5px;font-size:var(--fs-sm);color:var(--ink)}.task-result-running strong{font-size:var(--fs-md)}.task-result-actions{display:grid;gap:8px;margin-top:12px}.task-results-table{width:100%;margin-top:12px;border-collapse:collapse;font-size:var(--fs-xs);text-align:left}.task-results-table th,.task-results-table td{padding:7px 5px;border-bottom:1px solid var(--border);vertical-align:top}.task-results-table th{color:var(--muted);font-weight:var(--fw-semi)}.lab-shell .task-results-caption{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.task-workspace-target:focus,.programming-layout:focus,.scene-view:focus{outline:3px solid var(--accent);outline-offset:-3px}@media(max-width:920px){.task-window:not(.is-minimized){top:auto!important;right:12px!important;bottom:12px;width:min(380px,calc(100vw - 24px))!important;height:min(520px,calc(100vh - 24px))!important;resize:none}.task-window-head{cursor:default}}@media(max-width:640px){.task-window.is-task-sheet:not(.is-minimized){top:auto!important;right:0!important;bottom:env(safe-area-inset-bottom)!important;left:0!important;width:100%!important;height:min(66dvh,440px)!important;min-width:0;min-height:240px;max-width:100vw;max-height:calc(100dvh - 152px);resize:none;border-radius:18px 18px 0 0;box-shadow:0 -12px 32px #0003}.task-window.is-task-sheet.is-minimized{border-radius:999px;box-shadow:0 12px 28px #0000002b}.task-window-head{position:relative;min-height:58px;padding:10px 12px 0 16px;cursor:default}.task-sheet-handle{position:absolute;top:5px;left:50%;display:block;width:36px;height:4px;border-radius:999px;background:var(--border-strong);transform:translate(-50%)}.task-window-body{padding:12px 14px calc(14px + env(safe-area-inset-bottom));overscroll-behavior:contain}.task-step-title{font-size:var(--fs-xl);overflow-wrap:anywhere}.task-step-copy,.task-goal,.task-result-card p{overflow-wrap:anywhere}.task-step{min-width:0}.task-step>span:nth-child(2){min-width:0;overflow-wrap:anywhere}.task-step-state{flex:0 0 auto}.task-result-card{overflow-x:auto}.task-results-table{min-width:288px;table-layout:fixed}.task-results-table th,.task-results-table td{overflow-wrap:anywhere}}.simulation-canvas{background:var(--surface-workspace);border-bottom:1px solid var(--border-default);min-height:0;overflow:hidden;position:relative;user-select:none;-webkit-user-select:none}.canvas-runtime{align-items:center;color:var(--text-primary);display:flex;gap:12px;pointer-events:none;position:absolute;right:22px;top:10px;-webkit-user-select:none;user-select:none;z-index:var(--z-canvas-control)}.canvas-reset-pill{background:var(--surface-panel);border:1px solid var(--border-default);border-radius:999px;color:var(--text-primary);font-weight:var(--fw-heavy);min-height:30px;padding:3px 18px;pointer-events:auto;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.canvas-reset-pill:hover:not(:disabled){background:var(--surface-muted);border-color:var(--border-strong)}.canvas-runtime span:last-child{background:var(--surface-panel);border:1px solid var(--border-default);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);font-size:var(--fs-md);padding:8px 10px}.canvas-clock{color:var(--action-cta);font-variant-numeric:tabular-nums;min-width:86px}.canvas-surface{height:100%;position:relative;width:100%}.canvas-view-panel,.task-workspace-target{height:100%;min-height:0;width:100%}@media(max-width:640px){.simulation-canvas .canvas-help{top:54px}.simulation-canvas .canvas-connection-hint{top:96px}}.simulation-canvas .unified-canvas{background:var(--surface-workspace);border:0;border-radius:0;height:100%;min-height:0}.simulation-canvas .canvas-help{right:64px;top:54px}.simulation-canvas .canvas-connection-hint{right:64px;top:96px}.lab-shell .canvas-help{background:#fffffff0;border-color:var(--border-default);box-shadow:var(--shadow-sm);color:var(--text-primary);z-index:var(--z-canvas-feedback)}.lab-shell .canvas-connection-hint{background:#fffffff0;box-shadow:var(--shadow-sm);z-index:var(--z-canvas-feedback)}@media(prefers-reduced-motion:reduce){.lab-shell .library-card,.lab-shell .mpython-toolbox-row,.lab-shell .canvas-reset-pill{transition:none}.lab-shell .library-card:hover,.lab-shell .library-card:focus-visible{transform:none}.lab-right,.task-window{transition:none}.task-result-card{animation:none}}.lab-right{background:var(--surface-panel);border-left:1px solid var(--border-default);display:grid;grid-template-rows:minmax(240px,.48fr) minmax(300px,.52fr);position:absolute;right:0;top:0;bottom:0;transform:translate(100%);transition:transform .14s ease;width:360px;z-index:var(--z-inspector)}.lab-shell[data-active-panel=code] .lab-right,.lab-shell[data-active-panel=inspector] .lab-right{box-shadow:var(--shadow-lg);transform:translate(0)}@media(min-width:901px){.lab-shell[data-workbench-mode=programming] .lab-right{pointer-events:none;transform:translate(100%);visibility:hidden}}.lab-shell[data-active-panel=code] .right-inspector,.lab-shell[data-active-panel=inspector] .code-editor-panel{display:none}.lab-shell[data-active-panel=code] .lab-right,.lab-shell[data-active-panel=inspector] .lab-right{grid-template-rows:1fr}.right-inspector,.code-editor-panel{display:flex;flex-direction:column;min-height:0}.right-inspector{border-bottom:1px solid var(--border-default);overflow:auto}.panel-title{border-bottom:1px solid var(--border-default);display:grid;gap:2px;padding:10px 12px}.panel-title span{color:var(--text-secondary);font-size:var(--fs-sm)}.panel-title strong{font-size:var(--fs-lg)}.inspector-title{align-items:center;grid-template-columns:minmax(0,1fr) auto}.inspector-title-copy{display:grid;gap:2px;min-width:0}.inspector-title-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inspector-close{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--text-secondary);cursor:pointer;display:inline-flex;font-size:var(--fs-3xl);height:34px;justify-content:center;line-height:1;width:34px}.inspector-close:hover,.inspector-close:focus-visible{background:#f1f3f5;border-color:var(--border-default);color:var(--text-primary);outline:none}.property-list{display:grid;gap:8px;margin:0;padding:12px}.property-list div{align-items:center;background:#f8f9fa;border:1px solid #eceff2;border-radius:6px;display:grid;grid-template-columns:80px 1fr;min-height:34px;padding:6px 8px}.property-list dt{color:var(--text-secondary);font-size:var(--fs-sm)}.property-list dd{font-size:var(--fs-sm);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.module-property-editor{border:0;border-top:1px solid var(--border-default);display:grid;gap:10px;margin:0;padding:12px}.module-property-editor legend{color:var(--text-secondary);font-size:var(--fs-sm);font-weight:var(--fw-bold);padding:0 4px}.module-property-editor label{align-items:center;display:grid;gap:8px;grid-template-columns:80px 44px 1fr}.module-property-editor label span,.module-property-editor output,.module-property-editor p{font-size:var(--fs-sm)}.module-property-editor input[type=color]{background:var(--panel);border:1px solid var(--border-default);border-radius:6px;cursor:pointer;height:34px;padding:3px;width:44px}.module-property-editor output{color:var(--text-secondary);font-family:Consolas,Courier New,monospace}.module-property-editor p{color:var(--text-secondary);line-height:1.5;margin:0}.right-inspector .panel{border:0;border-top:1px solid var(--border-default);border-radius:0;padding:12px}.code-title{align-items:center;display:flex;flex-direction:row;justify-content:space-between}.mode-switch{display:flex;gap:4px}.mode-switch button{border:0;border-radius:999px;color:#737d87;min-height:28px}.mode-switch button[aria-pressed=true]{background:var(--brand-primary-soft);color:var(--text-primary)}.code-editor-grid{display:grid;flex:1;gap:0;grid-template-columns:1fr;min-height:0}.code-editor-grid.code-editor-blocks,.code-editor-grid.code-editor-split{grid-template-columns:1fr}.code-editor-code .blockly-pane{display:none}.blockly-pane{border-right:1px solid var(--border-default);min-height:0}.code-editor-grid .blockly,.code-editor-grid .python-code-editor{border:0;border-radius:0;height:100%;min-height:0}.code-editor-grid .python-code-editor{font-size:var(--fs-lg);line-height:1.6}.status-bar{align-items:center;background:var(--surface-panel);border-top:1px solid var(--border-default);color:var(--text-secondary);display:flex;font-size:var(--fs-sm);gap:14px;min-width:0;overflow:hidden;padding:0 12px;white-space:nowrap}.status-bar-mode{margin-left:auto}.status-bar span{overflow:hidden;text-overflow:ellipsis}.status-bar .status-error{color:#c0392b;flex-shrink:0;font-weight:var(--fw-semi);max-width:40ch;overflow:visible;text-overflow:clip;white-space:normal}@media(max-width:1280px){.lab-workspace,.lab-workspace-resizable{grid-template-columns:260px minmax(0,1fr)}.lab-shell[data-workbench-mode=programming] .lab-workspace,.lab-shell[data-workbench-mode=programming] .lab-workspace-resizable{grid-template-columns:minmax(0,1fr)}.lab-shell[data-workbench-mode=scene] .lab-workspace,.lab-shell[data-workbench-mode=scene] .lab-workspace-resizable{grid-template-columns:200px minmax(0,1fr)}.lab-topbar{grid-template-columns:minmax(200px,1fr) auto minmax(200px,1fr)}}@media(max-width:900px){.lab-shell{grid-template-rows:auto auto 1fr auto;height:auto;min-height:100vh;overflow:visible}.lab-topbar{gap:8px;grid-template-columns:1fr;padding:8px}.lab-topbar-end .lab-user-chip{grid-column:auto}.lab-toolbar-actions{flex-wrap:wrap}.topbar-menu summary,.topbar-menu-btn{min-height:42px;padding:0 14px}.topbar-menu-panel{max-width:calc(100vw - 16px)}.mobile-workspace-tabs{background:var(--panel);border-bottom:1px solid var(--border-default);display:grid;gap:4px;grid-template-columns:repeat(5,1fr);padding:6px}.mobile-workspace-tabs button{border:0;border-radius:6px;min-height:32px}.mobile-workspace-tabs button[aria-pressed=true]{background:var(--workspace-chrome);color:var(--text-on-strong)}.lab-workspace{border:0;display:block}.lab-left,.lab-main,.lab-right,.lab-workspace-resizer{display:none}.lab-shell[data-active-panel=components] .lab-left{display:flex;min-height:calc(100vh - 134px)}.lab-shell[data-active-panel=canvas] .lab-main{display:grid;grid-template-rows:minmax(520px,1fr) 240px;min-height:calc(100vh - 134px)}.lab-shell[data-active-panel=code] .lab-right,.lab-shell[data-active-panel=inspector] .lab-right{display:grid;grid-template-rows:1fr;min-height:calc(100vh - 134px)}.lab-shell[data-active-panel=code] .right-inspector,.lab-shell[data-active-panel=inspector] .code-editor-panel{display:none}}.dc-motor-shaft{transform-box:fill-box;transform-origin:center}.project-home-page{--z-modal: 40;min-height:100vh;background:var(--bg)}.project-home-header{display:flex;align-items:center;justify-content:space-between;padding:16px 32px;background:#d04a0a;color:var(--panel)}.project-home-brand{display:flex;align-items:center;gap:10px;font-size:var(--fs-xl)}.project-home-brand-mark{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:var(--panel);overflow:hidden}.project-home-brand-mark img{width:100%;height:100%;display:block;object-fit:cover}.project-home-brand-word{font-family:var(--font-display);font-weight:var(--fw-bold);letter-spacing:0}.project-home-header .lab-user-chip{background:#ffffff26;color:var(--panel);border:none;padding:6px 14px;border-radius:20px;font-size:var(--fs-md)}.project-home-main{max-width:1200px;margin:0 auto;padding:32px}.project-home-section{margin-bottom:40px}.project-home-section-title{font-size:var(--fs-3xl);font-weight:var(--fw-bold);color:var(--ink);margin:0 0 20px}.project-home-error{color:var(--danger);font-size:var(--fs-lg)}.project-home-empty{color:var(--muted);font-size:var(--fs-lg);padding:24px 0}.project-home-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px}.project-home-card{background:var(--panel);border-radius:12px;border:1px solid var(--border);overflow:hidden;cursor:pointer;transition:box-shadow .18s ease,transform .18s ease;outline:none}.project-home-card:hover{box-shadow:var(--shadow);transform:translateY(-2px)}.project-home-card:focus-visible{box-shadow:0 0 0 3px var(--brand-700)}.project-home-card-thumbnail{position:relative;height:140px;background:var(--panel-2);display:flex;align-items:center;justify-content:center;overflow:hidden}.project-home-card-thumb-img{width:100%;height:100%;object-fit:contain;padding:12px}.project-home-card-delete{position:absolute;top:8px;right:8px;width:44px;height:44px;border-radius:50%;background:#0000008c;color:var(--panel);border:none;font-size:var(--fs-3xl);line-height:1;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease,background .15s ease;padding:0;min-height:auto}.project-home-card-delete:focus-visible{outline:3px solid var(--panel);outline-offset:2px}.project-home-card:hover .project-home-card-delete,.project-home-card:focus-within .project-home-card-delete,.project-home-card-delete:focus-visible{opacity:1}.project-home-card-delete:hover{background:var(--danger)}@media(hover:none){.project-home-card .project-home-card-delete{opacity:1}}.project-home-card-info{padding:12px 14px;display:flex;flex-direction:column;gap:4px}.project-home-card-name{font-size:var(--fs-lg);font-weight:var(--fw-semi);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-home-card-time{font-size:var(--fs-sm);color:var(--muted)}.project-home-card-desc{font-size:var(--fs-sm);color:var(--muted);line-height:1.5}.project-home-card-new{border:2px dashed var(--border-strong);background:var(--panel)}.project-home-card-new:hover{border-color:var(--brand-700)}.project-home-card-new-preview{height:140px;background:var(--panel-2);display:flex;align-items:center;justify-content:center;padding:16px}.project-home-board-img{max-width:80%;max-height:80%;object-fit:contain;filter:drop-shadow(0 4px 8px rgba(0,0,0,.2))}.project-home-delete-backdrop{position:fixed;inset:0;background:#0f172a73;display:grid;place-items:center;z-index:var(--z-modal);padding:16px}.project-home-delete-dialog{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px 22px 18px;max-width:420px;width:100%;box-shadow:0 16px 36px #0f172a2e}.project-home-delete-title{font-size:var(--fs-xl);font-weight:var(--fw-semi);line-height:1.5;margin:0 0 18px;color:var(--ink);text-wrap:pretty}.project-home-delete-actions{display:flex;justify-content:flex-end;gap:10px}.project-home-delete-cancel,.project-home-delete-confirm{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 16px;border-radius:8px;font-size:var(--fs-lg);font-weight:var(--fw-semi);border:1px solid transparent;cursor:pointer;transition:background .16s ease,border-color .16s ease,color .16s ease}.project-home-delete-cancel{background:var(--panel);color:var(--ink);border-color:var(--border)}.project-home-delete-cancel:hover{background:var(--bg);border-color:var(--border-strong);color:var(--ink)}.project-home-delete-confirm{background:var(--danger);color:var(--panel)}.project-home-delete-confirm:hover{background:oklch(from var(--danger) calc(l - .08) c h);color:var(--panel)}.project-home-delete-cancel:focus-visible,.project-home-delete-confirm:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.menu-shortcut{font-size:var(--fs-sm);color:var(--muted);margin-left:auto;padding-left:24px}.scene-view{background:var(--panel-2);display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(200px,260px);height:100%;min-height:0;padding:12px;width:100%}.scene-stage{display:flex;min-height:0;min-width:0}.scene-view.is-stage-only{grid-template-columns:minmax(0,1fr)}.traffic-light-scene{display:flex;flex:1;flex-direction:column;gap:8px;min-height:0;min-width:0}.traffic-light-stage{background:#cfe8f5;border:1px solid var(--border);border-radius:10px;flex:1;min-height:240px;width:100%}.smart-trash-bin-scene{display:flex;flex:1;flex-direction:column;gap:8px;min-height:0;min-width:0}.smart-trash-bin-stage-wrap{flex:1;min-height:0;position:relative}.smart-trash-bin-stage{border:1px solid var(--border);border-radius:10px;display:block;height:100%;min-height:260px;width:100%}.stb-wall{fill:#f1eadb}.stb-floor{fill:#d5b88a}.stb-floor-lines{fill:none;stroke:#b99768;stroke-width:2}.stb-window-frame{fill:#fafafa;stroke:#9f825d;stroke-width:8}.stb-window{fill:#bfe5f6}.stb-window-divider{fill:none;stroke:#fff;stroke-width:7}.stb-sun{fill:#ffd85c}.stb-board{fill:#315c68;stroke:#203e46;stroke-width:5}.stb-board-title{fill:#fff;font-size:var(--fs-xl);font-weight:var(--fw-bold)}.stb-board-copy{fill:#d8eef1;font-size:var(--fs-sm)}.stb-distance-line,.stb-distance-ticks{fill:none;stroke:#73808c;stroke-dasharray:7 6;stroke-width:2}.stb-distance-ticks{stroke-dasharray:none}.stb-distance-text{fill:#475569;font-size:var(--fs-lg);font-weight:var(--fw-bold)}.stb-bin-body{fill:#3f8f55;stroke:#28673b;stroke-width:5}.stb-bin-panel{fill:#347b48}.stb-recycle-mark{fill:none;stroke:#edf8ef;stroke-linecap:round;stroke-width:8}.stb-wheel{fill:#334155;stroke:#172033;stroke-width:4}.stb-lid{fill:#327847;stroke:#225b35;stroke-width:4;transform-box:fill-box;transform-origin:111px 28px;transform:rotate(var(--lid-angle, 0deg));transition:transform .18s ease}.kitchen-exhaust-fan-scene{display:flex;flex:1;flex-direction:column;gap:8px;min-height:0;min-width:0}.kitchen-stage-wrap{flex:1;min-height:0;position:relative}.kitchen-stage{border:1px solid var(--border);border-radius:10px;display:block;height:100%;min-height:260px;width:100%}.kitchen-background-image{pointer-events:none}.kitchen-fan{filter:drop-shadow(0 2px 3px rgb(111 78 42 / 18%))}.kitchen-fan-casing{fill:#fffaf0;stroke:#b88a5d;stroke-width:4}.kitchen-fan-ring{fill:#e8f2f2;stroke:#8da6a5;stroke-width:3}.kitchen-fan-rotor{fill:#58a3ad;stroke:#477f87;stroke-linejoin:round;stroke-width:1.5;transform-box:view-box;transform-origin:328px 143px}.kitchen-fan-hub{fill:#f5c66b;stroke:#9b7448;stroke-width:2}.kitchen-fan.is-running .kitchen-fan-rotor{animation:kitchen-fan-spin .45s linear infinite}@keyframes kitchen-fan-spin{to{transform:rotate(360deg)}}.corridor-sound-light-scene{display:flex;flex:1;flex-direction:column;gap:8px;min-height:0;min-width:0}.corridor-stage-wrap{flex:1;min-height:0;position:relative}.corridor-stage{border:1px solid var(--border);border-radius:10px;display:block;height:100%;min-height:260px;width:100%}.corridor-background-image,.corridor-student-image{pointer-events:none}.corridor-student-image{transition:opacity .16s ease}.corridor-lamp-glow,.corridor-lamp-bulb{fill:var(--corridor-lamp-color);opacity:0;pointer-events:none;transition:fill .14s ease,opacity .14s ease}.corridor-lamp.is-on .corridor-lamp-glow{filter:blur(18px);opacity:calc(var(--corridor-lamp-opacity) * .34)}.corridor-lamp.is-on .corridor-lamp-bulb{filter:drop-shadow(0 0 22px var(--corridor-lamp-color));opacity:var(--corridor-lamp-opacity)}.pedestrian-traffic-light-scene{display:flex;flex:1;flex-direction:column;gap:8px;min-height:0;min-width:0}.pedestrian-traffic-stage-wrap{flex:1;min-height:0}.pedestrian-traffic-stage{border:1px solid var(--border);border-radius:10px;display:block;height:100%;min-height:260px;width:100%}.pedestrian-traffic-stage image{pointer-events:none}.pedestrian-traffic-lamp{fill:transparent;pointer-events:none;transition:fill .12s ease}.pedestrian-traffic-lamp.is-on{fill:var(--pedestrian-traffic-light-color);filter:drop-shadow(0 0 12px var(--pedestrian-traffic-light-color))}.posture-reminder-scene{display:flex;flex:1;flex-direction:column;gap:8px;min-height:0;min-width:0}.posture-reminder-stage-wrap{flex:1;min-height:0}.posture-reminder-stage{border:1px solid var(--border);border-radius:10px;display:block;height:100%;min-height:260px;width:100%}.posture-reminder-background{pointer-events:none}.posture-distance-badge rect{fill:#ffffffeb;stroke:#94a3b8;stroke-width:5px}.posture-distance-badge text{fill:#1f2937;font-size:var(--fs-metric);font-weight:var(--fw-bold)}.posture-speaker{fill:#64748b;opacity:.55}.posture-speaker.is-playing{fill:#d04a0a;opacity:1}.posture-sound-waves{fill:none;stroke:currentcolor;stroke-linecap:round;stroke-width:13px}.pedestrian-scene-button{cursor:pointer;fill:transparent;pointer-events:all;stroke:transparent;stroke-width:4}.pedestrian-scene-button:focus-visible{stroke:#0d6fb8}.pedestrian-scene-button.is-pressed{fill:#1e90ff59;stroke:#0d6fb8}.pedestrian-scene-button.is-disabled{cursor:not-allowed;pointer-events:none}.pedestrian-button-control{background:var(--brand-100);border:1px solid var(--brand-400);border-radius:999px;color:var(--brand-900);cursor:pointer;font:inherit;font-weight:var(--fw-bold);padding:8px 14px}.pedestrian-button-control.is-pressed{background:var(--brand-400)}.pedestrian-button-control:disabled{cursor:not-allowed;opacity:.55}.scene-controls{background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 1px 2px #0f172a0f;display:flex;flex-direction:column;font-size:var(--fs-md);gap:10px;padding:10px 12px}.scene-controls-row{align-items:center;display:grid;gap:6px;grid-template-columns:minmax(0,1fr)}.scene-controls-row input{min-width:0;width:100%}.scene-controls-label{color:var(--muted);font-size:var(--fs-sm)}.scene-controls-output{color:var(--brand-900);font-weight:var(--fw-bold);text-align:right}.corridor-person-control{align-items:center;border:0;display:flex;gap:8px;margin:0;padding:0}.corridor-person-control legend{float:left;font-size:var(--fs-md);margin-right:12px;width:60px}.corridor-person-control button{background:var(--panel);border:1px solid var(--border);border-radius:999px;color:var(--muted);cursor:pointer;font:inherit;padding:4px 14px}.corridor-person-control button.active{background:var(--brand-100);border-color:var(--brand-400);color:var(--brand-900);font-weight:var(--fw-bold)}.scene-status{color:var(--muted);font-size:var(--fs-md);margin:0;text-align:center}.scene-validation-preview{margin:0 0 8px;padding:8px 10px;border:1px solid var(--accent);border-radius:8px;background:var(--accent-soft);color:var(--ink);font-size:var(--fs-sm);text-align:center}.tl-sky{fill:#cfe8f5}.tl-ground{fill:#8fb98a}.tl-cloud{fill:#ffffffd9}.tl-road{fill:#50565e}.tl-road-edge,.tl-lane-dash,.tl-crosswalk{fill:#f4f6f7}.tl-sidewalk{fill:#9aa4ab}.tl-pole{fill:#37474f}.tl-pole-base{fill:#263238}.tl-lamp-head{fill:#263238;stroke:#102027;stroke-width:2}.tl-lamp-ring{fill:#1a2227;stroke:#0d1417;stroke-width:2}.tl-bulb{fill:#3d4a52;transition:fill .12s ease}.tl-lamp.is-on .tl-bulb{fill:var(--tl-lamp-color);filter:drop-shadow(0 0 16px var(--tl-lamp-color))}.scene-sidebar{display:flex;flex-direction:column;gap:10px;min-width:0;overflow-y:auto;position:relative}.scene-outputs{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px}.scene-outputs-head{font-size:var(--fs-sm);font-weight:var(--fw-bold);color:var(--ink);margin-bottom:8px;display:flex;align-items:center;gap:7px}.scene-outputs-tag{width:6px;height:14px;border-radius:3px;background:var(--accent)}.scene-outputs-tag.is-out{background:var(--workspace-chrome)}.scene-outputs-row{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;background:var(--surface, var(--panel));border:1px solid var(--border);border-radius:8px;margin-bottom:6px}.scene-outputs-row:last-child{margin-bottom:0}.scene-outputs-name{font-size:var(--fs-md);color:var(--ink)}.scene-outputs-state{font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:var(--fw-semi);color:var(--text-secondary)}.scene-outputs-state.is-on{color:var(--state-success)}.scene-legend{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0;padding:0}.scene-legend-item{align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:999px;display:inline-flex;font-size:var(--fs-md);gap:6px;padding:4px 10px}.scene-legend-pin{background:var(--brand-100);border-radius:6px;color:var(--brand-900);font-weight:var(--fw-bold);padding:0 6px}.scene-legend-pin.is-disconnected{background:var(--panel-2);color:var(--muted);font-weight:var(--fw-semi)}.scene-legend-hint{color:var(--muted);font-size:var(--fs-sm);margin:0}.scene-sidebar .board-panel{margin:0;max-width:none}.simulation-canvas .scene-view{padding-top:56px}.simulation-canvas .scene-legend{display:grid;grid-template-columns:1fr}.simulation-canvas .scene-legend-item{justify-content:space-between;width:100%}@media(max-width:640px){.simulation-canvas .scene-view{padding-top:56px}}.lesson-sim-board .scene-view{background:transparent;grid-template-columns:minmax(0,1fr) 180px;padding:0}.lesson-sim-board .traffic-light-stage{max-height:420px}.presentation-simulation-board .scene-view{padding:16px}.lab-shell .scene-view{background:var(--surface-muted)}.lab-shell .scene-controls{background:var(--surface-panel);border-color:var(--border-default);box-shadow:var(--shadow-sm)}.lab-shell .scene-controls-label{color:var(--text-secondary)}.lab-shell .scene-controls-output{color:var(--text-primary)}.lab-shell .scene-status{color:var(--text-secondary)}.lab-shell .scene-legend-item{background:var(--surface-panel);border-color:var(--border-default)}.lab-shell .scene-legend-pin{background:var(--brand-primary-soft);color:var(--text-primary)}.lab-shell .scene-legend-pin.is-disconnected{background:var(--surface-muted);color:var(--text-secondary)}.lab-shell .scene-legend-hint{color:var(--text-secondary)}.lab-shell .pedestrian-button-control{background:var(--brand-primary-soft);border-color:var(--brand-primary);color:var(--text-primary)}.lab-shell .pedestrian-button-control.is-pressed{background:var(--brand-primary-strong);color:var(--text-on-strong)}.lab-shell .corridor-person-control button.active{background:var(--brand-primary-soft);border-color:var(--brand-primary);color:var(--text-primary)}
