@font-face{font-family:Geist Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-sans-latin-400-normal-gapTbOY8.woff2)format("woff2"),url(/assets/geist-sans-latin-400-normal-BOaIZNA2.woff)format("woff")}@font-face{font-family:Geist Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/geist-sans-latin-500-normal-uokXdC-Q.woff2)format("woff2"),url(/assets/geist-sans-latin-500-normal-CN2lyvyL.woff)format("woff")}@font-face{font-family:Geist Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/geist-sans-latin-600-normal-DFOURf8L.woff2)format("woff2"),url(/assets/geist-sans-latin-600-normal-CA1yjETN.woff)format("woff")}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-mono-cyrillic-400-normal-Ce5q_31Z.woff2)format("woff2"),url(/assets/geist-mono-cyrillic-400-normal-BPBWmzPh.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-mono-latin-ext-400-normal-Cgks_Qgx.woff2)format("woff2"),url(/assets/geist-mono-latin-ext-400-normal-CxNRRMGd.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-mono-latin-400-normal-LC9RFr9I.woff2)format("woff2"),url(/assets/geist-mono-latin-400-normal-CoULgQGM.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/geist-mono-cyrillic-500-normal-CJBLNVQT.woff2)format("woff2"),url(/assets/geist-mono-cyrillic-500-normal-mNhfPmgl.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/geist-mono-latin-ext-500-normal-CQcGuCNt.woff2)format("woff2"),url(/assets/geist-mono-latin-ext-500-normal-diTenJ8L.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/geist-mono-latin-500-normal-D3o2eNa9.woff2)format("woff2"),url(/assets/geist-mono-latin-500-normal-DOxI7kZ4.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--s-0:0px;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:20px;--s-6:24px;--s-7:32px;--s-8:40px;--s-9:48px;--s-10:64px;--r-1:3px;--r-2:5px;--r-3:6px;--r-4:8px;--r-pill:999px;--font-sans:"Geist Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono:"Geist Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-caption:11px;--lh-caption:1.35;--fs-label:12px;--lh-label:1.4;--fs-body:13px;--lh-body:1.5;--fs-body-lg:14px;--lh-body-lg:1.45;--fs-h6:13px;--lh-h6:1.35;--fw-h6:600;--fs-h5:14px;--lh-h5:1.35;--fw-h5:600;--fs-h4:16px;--lh-h4:1.3;--fw-h4:600;--fs-h3:18px;--lh-h3:1.25;--fw-h3:600;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--tracking-tight:-.006em;--tracking-wide:.045em;--t-fast:.12s;--t-base:.18s;--t-slow:.26s;--ease:cubic-bezier(.2, .8, .2, 1);--z-overlay:50;--z-modal:100;--z-toast:200}:root,:root[data-theme=dark]{--bg-canvas:#101114;--bg-base:#15161a;--bg-surface:#1b1d22;--bg-surface-solid:#1b1d22;--bg-elevated:#22252b;--bg-overlay:#2a2e36;--bg-input:#14161a;--bg-control:#202329;--bg-control-hover:#292d35;--bg-control-active:#17191e;--border-subtle:#272a31;--border:#343943;--border-strong:#4a515f;--fg-primary:#e8eaee;--fg-secondary:#a9aeb8;--fg-muted:#767d89;--fg-disabled:#555b65;--brand-primary:#4f7cff;--brand-hover:#628cff;--brand-active:#3f68df;--brand-subtle:#4f7cff1f;--brand-subtle-strong:#4f7cff33;--brand-border:#628cff6b;--brand-fg:#c9d7ff;--brand-ring:#4f7cff42;--cyan:#38bdf8;--cyan-subtle:#38bdf81f;--magenta:#f472b6;--magenta-subtle:#f472b61f;--status-success:#37c98b;--status-success-bg:#37c98b1f;--status-warn:#e0a82e;--status-warn-bg:#e0a82e21;--status-error:#f06a6a;--status-error-bg:#f06a6a1f;--shadow-1:0 1px 1px #0000003d;--shadow-2:0 4px 12px #00000047;--shadow-3:0 12px 28px #0000005c;--shadow-glow:0 0 0 3px var(--brand-ring)}:root[data-theme=light]{--bg-canvas:#eef1f5;--bg-base:#f5f7fa;--bg-surface:#fff;--bg-surface-solid:#fff;--bg-elevated:#f8fafc;--bg-overlay:#fff;--bg-input:#f9fafb;--bg-control:#fff;--bg-control-hover:#f3f6fa;--bg-control-active:#e9edf3;--border-subtle:#dfe4eb;--border:#cfd6e1;--border-strong:#aeb8c8;--fg-primary:#171b22;--fg-secondary:#4d5665;--fg-muted:#768191;--fg-disabled:#a7b0bd;--brand-primary:#285ecf;--brand-hover:#326de8;--brand-active:#204da8;--brand-subtle:#285ecf17;--brand-subtle-strong:#285ecf29;--brand-border:#285ecf47;--brand-fg:#21488f;--brand-ring:#285ecf2e;--cyan:#027fa6;--cyan-subtle:#027fa61a;--magenta:#c32772;--magenta-subtle:#c327721a;--status-success:#168a5b;--status-success-bg:#dff7ea;--status-warn:#a66b00;--status-warn-bg:#fff3d1;--status-error:#c93535;--status-error-bg:#ffe2e2;--shadow-1:0 1px 1px #121b260a;--shadow-2:0 4px 12px #121b2614;--shadow-3:0 12px 28px #121b261c;--shadow-glow:0 0 0 3px var(--brand-ring)}*,:before,:after{box-sizing:border-box}html,body,#app{height:100%;margin:0;padding:0}html{font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--fg-primary);background:var(--bg-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}body{background:var(--bg-base);color:var(--fg-primary)}button{font-family:inherit;font-size:inherit;color:inherit}button svg,button .lucide,.btn-link .lucide{stroke-width:2px;flex:none;width:13px;height:13px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--r-pill);border:2px solid var(--bg-base)}::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}#app{background:var(--bg-canvas);height:100%;color:var(--fg-primary);padding:var(--s-2);gap:var(--s-2);box-sizing:border-box;grid-template-rows:44px 1fr auto;display:grid}main{grid-template-columns:var(--editor-w,680px) 6px minmax(420px, 1fr) 6px var(--right-w,292px);background:0 0;gap:0;min-height:0;padding:0;display:grid;overflow:visible}main.editor-collapsed{grid-template-columns:34px minmax(420px, 1fr) 6px var(--right-w,292px)}main.editor-collapsed #resize-editor{display:none}.topbar{padding:0 var(--s-2) 0 var(--s-3);background:var(--bg-surface-solid);border:1px solid var(--border-subtle);border-radius:var(--r-3);box-shadow:var(--shadow-1);justify-content:space-between;align-items:center;gap:var(--s-3);z-index:80;min-width:0;height:100%;display:flex;position:relative;overflow:visible}.topbar-left{align-items:center;gap:var(--s-3);min-width:0;display:flex}.brand{align-items:center;gap:var(--s-2);font-size:var(--fs-body);font-weight:var(--fw-semibold);letter-spacing:var(--tracking-tight);color:var(--fg-primary);white-space:nowrap;padding-right:var(--s-1);display:flex}.brand .dot{border-radius:var(--r-pill);background:var(--status-success);width:7px;height:7px;box-shadow:0 0 0 3px var(--status-success-bg)}.divider{background:var(--border-subtle);width:1px;height:24px}.arena-controls{align-items:center;gap:var(--s-1);display:flex}.field-label{font-size:var(--fs-caption);color:var(--fg-muted);text-transform:uppercase;letter-spacing:var(--tracking-wide);font-weight:var(--fw-medium)}.controls{justify-content:flex-end;align-items:center;gap:var(--s-1);min-width:0;display:flex}.btn{justify-content:center;align-items:center;gap:var(--s-1);padding:0 var(--s-3);border-radius:var(--r-2);border:1px solid var(--border);background:var(--bg-control);height:28px;color:var(--fg-primary);font-family:inherit;font-size:var(--fs-label);font-weight:var(--fw-medium);cursor:pointer;transition:background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease), transform var(--t-fast) var(--ease);-webkit-user-select:none;user-select:none;white-space:nowrap;box-shadow:inset 0 1px 0 #ffffff09, var(--shadow-1);display:inline-flex}.btn svg,.btn .lucide{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:13px;height:13px}.btn:hover:not(:disabled){border-color:var(--border-strong);background:var(--bg-control-hover)}.btn:active:not(:disabled){background:var(--bg-control-active);transform:translateY(1px);box-shadow:inset 0 1px 2px #0000002e}.btn:focus-visible{border-color:var(--brand-primary);box-shadow:var(--shadow-glow);outline:none}.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;background:var(--bg-control-active)}.btn-primary{background:var(--brand-primary);border-color:var(--brand-primary);color:#fff;box-shadow:var(--shadow-1)}.btn-primary:hover:not(:disabled){background:var(--brand-hover);border-color:var(--brand-hover)}.btn-primary:active:not(:disabled){background:var(--brand-active)}.danger-action{background:var(--status-error);border-color:var(--status-error);color:#fff}.danger-action:hover:not(:disabled){background:var(--status-error);border-color:var(--status-error);filter:brightness(1.04)}.btn-sm{height:26px;padding:0 var(--s-2);font-size:var(--fs-caption)}.btn-success{background:var(--status-success-bg);color:var(--status-success);border-color:#37c98b57}.btn-warn{background:var(--status-warn-bg);color:var(--status-warn);border-color:#e0a82e57}.playback-controls{background:var(--bg-control-active);border:1px solid var(--border);border-radius:var(--r-2);box-shadow:var(--shadow-1);align-items:center;display:inline-flex;overflow:hidden}.playback-btn{justify-content:center;align-items:center;gap:var(--s-1);border:none;border-right:1px solid var(--border);color:var(--fg-secondary);height:28px;padding:0 var(--s-2);cursor:pointer;font:inherit;font-size:var(--fs-label);font-weight:var(--fw-medium);transition:background var(--t-fast) var(--ease), color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);background:0 0;display:inline-flex}.playback-btn:last-child{border-right:none}.playback-btn svg,.playback-btn .lucide{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:13px;height:13px}.playback-run svg,.playback-run .lucide{fill:currentColor;stroke:none}.playback-btn:hover:not(:disabled){background:var(--bg-control-hover);color:var(--fg-primary)}.playback-btn:active:not(:disabled){background:var(--bg-control-active);box-shadow:inset 0 1px 2px #0000002e}.playback-btn:disabled{opacity:.3;cursor:not-allowed}.btn-link{align-items:center;gap:var(--s-1);color:var(--fg-muted);cursor:pointer;font-family:inherit;font-size:var(--fs-caption);font-weight:var(--fw-medium);padding:3px var(--s-2);border-radius:var(--r-1);transition:background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease);background:0 0;border:1px solid #0000;display:inline-flex}.btn-link svg,.btn-link .lucide{width:12px;height:12px}.btn-link:hover:not(:disabled){color:var(--fg-primary);background:var(--bg-control-hover);border-color:var(--border-subtle)}.btn-link:disabled{opacity:.4;cursor:not-allowed}.btn-link.danger:hover:not(:disabled){color:var(--status-error);background:var(--status-error-bg)}.control-cluster{align-items:center;gap:var(--s-1);display:inline-flex}.select-control,.sketch-bar{position:relative}.select-control{background:var(--bg-input);border:1px solid var(--border-subtle);border-radius:var(--r-2);height:30px;transition:border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease), background var(--t-fast) var(--ease);align-items:center;display:inline-flex;overflow:visible;box-shadow:inset 0 1px #ffffff09}.select-control:focus-within{border-color:var(--brand-primary);box-shadow:var(--shadow-glow)}.select-control:hover{border-color:var(--border-strong)}.select-control.is-open{background:var(--bg-control);border-color:var(--brand-border);box-shadow:var(--shadow-glow)}.field-label{padding:0 var(--s-2);height:100%;font-size:var(--fs-caption);font-weight:var(--fw-semibold);color:var(--fg-muted);background:var(--bg-control);border-right:1px solid var(--border-subtle);letter-spacing:var(--tracking-wide);text-transform:uppercase;-webkit-user-select:none;user-select:none;align-items:center;display:inline-flex}.select,.input{appearance:none;color:var(--fg-primary);padding:0 26px 0 var(--s-2);height:100%;font-family:inherit;font-size:var(--fs-label);font-weight:var(--fw-medium);cursor:pointer;background-color:#0000;background-image:none;background-repeat:no-repeat;background-position:right var(--s-2) center;min-width:74px;transition:background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);border:none;outline:none}.native-select-hidden{opacity:0!important;pointer-events:none!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important}.custom-select-host{isolation:isolate;z-index:1}.custom-select-host.is-open{z-index:140}.custom-select-trigger{justify-content:space-between;align-items:center;gap:var(--s-2);min-width:96px;height:100%;padding:0 var(--s-2);color:var(--fg-primary);cursor:pointer;font:inherit;font-size:var(--fs-label);font-weight:var(--fw-medium);letter-spacing:var(--tracking-tight);background:0 0;border:0;outline:none;display:inline-flex}.custom-select-trigger:hover{background:var(--bg-control-hover)}.custom-select-value{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.custom-select-chevron{width:14px;height:14px;color:var(--fg-muted);transition:transform var(--t-fast) var(--ease), color var(--t-fast) var(--ease);flex:none}.custom-select-chevron:before{content:"";clip-path:polygon(24% 38%,50% 64%,76% 38%,86% 48%,50% 84%,14% 48%);background:currentColor;width:100%;height:100%;display:block}.custom-select-host.is-open .custom-select-chevron{color:var(--brand-primary);transform:rotate(180deg)}.sketch-bar .custom-select-host.is-open .custom-select-trigger{border-color:var(--brand-border);box-shadow:var(--shadow-glow)}.custom-select-menu{z-index:150;min-width:100%;padding:var(--s-1);border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg-overlay);box-shadow:var(--shadow-3);position:absolute;top:calc(100% + 5px);left:0}.custom-select-menu[hidden]{display:none}.custom-select-option{width:100%;min-height:28px;padding:0 var(--s-2);border-radius:var(--r-2);color:var(--fg-secondary);cursor:pointer;font:inherit;font-size:var(--fs-label);text-align:left;white-space:nowrap;background:0 0;border:0;justify-content:space-between;align-items:center;display:flex}.custom-select-option:hover,.custom-select-option[aria-selected=true]{background:var(--brand-subtle);color:var(--fg-primary)}.custom-select-option[aria-selected=true]:after{content:"";width:6px;height:6px;margin-left:var(--s-4);border-radius:var(--r-pill);background:var(--brand-primary);box-shadow:0 0 0 3px var(--brand-ring)}.arena-controls .custom-select-trigger{min-width:96px}.speed-control .custom-select-trigger{font-variant-numeric:tabular-nums;min-width:58px}.custom-select-compact .custom-select-menu{min-width:86px}.sketch-bar .custom-select-host{flex:auto;min-width:0}.sketch-bar .custom-select-trigger{border:1px solid var(--border-subtle);border-radius:var(--r-2);background:var(--bg-input);width:100%;min-width:160px;max-width:280px;height:26px}.sketch-bar .custom-select-menu{min-width:min(280px,100%)}.select:focus,.input:focus{background-color:var(--bg-elevated)}select.select:not(.select-control select){border:1px solid var(--border);border-radius:var(--r-2);background-color:var(--bg-input);height:28px;box-shadow:var(--shadow-1)}select.select:not(.select-control select):hover{border-color:var(--border-strong)}select.select:not(.select-control select):focus{border-color:var(--brand-primary);box-shadow:var(--shadow-glow)}.status-pill{align-items:center;gap:var(--s-1);height:28px;padding:0 var(--s-2);border-radius:var(--r-2);font-size:var(--fs-caption);font-weight:var(--fw-semibold);background:var(--bg-input);color:var(--fg-secondary);border:1px solid var(--border);white-space:nowrap;text-transform:lowercase;min-width:148px;transition:background var(--t-base) var(--ease), border-color var(--t-base) var(--ease), color var(--t-base) var(--ease);display:inline-flex}.status-pill .indicator{border-radius:var(--r-pill);background:var(--fg-muted);flex-shrink:0;width:7px;height:7px}.status-pill[data-state=compiled]{background:var(--status-success-bg);color:var(--status-success);border-color:#37c98b57}.status-pill[data-state=compiled] .indicator{background:var(--status-success)}.status-pill[data-state=compiling]{background:var(--status-warn-bg);color:var(--status-warn);border-color:#e0a82e57}.status-pill[data-state=compiling] .indicator{background:var(--status-warn);animation:1s ease-in-out infinite pulse}.status-pill[data-state=running]{background:var(--brand-subtle);color:var(--brand-fg);border-color:var(--brand-border)}.status-pill[data-state=running] .indicator{background:var(--brand-primary);animation:.9s ease-in-out infinite pulse}.status-pill[data-state=error]{background:var(--status-error-bg);color:var(--status-error);border-color:#f06a6a57}.status-pill[data-state=error] .indicator{background:var(--status-error)}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.7)}}.left,.right{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-3);box-shadow:var(--shadow-1);flex-direction:column;min-height:0;display:flex;position:relative;overflow:hidden}:is(.left:has(.custom-select-host.is-open),.right:has(.custom-select-host.is-open),.topbar:has(.custom-select-host.is-open)){z-index:120}.left:has(.custom-select-host.is-open){overflow:visible}.left{margin-right:var(--s-1)}.right{margin-left:var(--s-1);overflow-y:auto}.center{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-3);box-shadow:var(--shadow-1);margin:0 var(--s-1);position:relative;overflow:hidden}.resize-handle{z-index:20;color:var(--fg-disabled);touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;display:flex;position:relative}.resize-handle:after{content:"";border-radius:var(--r-pill);transition:background var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);background:0 0;display:block}.resize-handle-x{cursor:col-resize;width:6px}.resize-handle-x:after{width:2px;height:42px}.resize-handle-y{cursor:row-resize;height:10px;position:absolute;inset:-5px 0 auto}.resize-handle-y:after{width:54px;height:2px}.resize-handle:hover:after,body.is-resizing .resize-handle:after{background:var(--brand-primary);box-shadow:0 0 0 3px var(--brand-ring)}body.is-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.is-resizing-y{cursor:row-resize}#scene{width:100%;height:100%}.overlay,.hint{font-size:var(--fs-caption);color:var(--fg-secondary);-webkit-backdrop-filter:blur(4px);padding:5px var(--s-2);border-radius:var(--r-2);border:1px solid var(--border);pointer-events:none;font-family:var(--font-mono);letter-spacing:0;background:#14161ae0;position:absolute}:root[data-theme=light] .overlay,:root[data-theme=light] .hint{background:#ffffffeb}.overlay{bottom:var(--s-3);left:var(--s-3)}.hint{top:var(--s-3);right:var(--s-3);font-family:var(--font-sans)}.sensor-camera-panel{left:var(--s-3);top:var(--s-3);border:1px solid var(--border);border-radius:var(--r-2);width:232px;box-shadow:var(--shadow-2);z-index:7;-webkit-backdrop-filter:blur(10px)saturate(1.05);background:#101216eb;position:absolute;overflow:hidden}:root[data-theme=light] .sensor-camera-panel{background:#fcfdfff0}.sensor-camera-header{justify-content:space-between;align-items:center;gap:var(--s-2);color:var(--fg-secondary);font-size:var(--fs-caption);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:var(--tracking-wide);border-bottom:1px solid var(--border-subtle);padding:6px 10px;display:flex}.sensor-camera-header .sensor-camera-sub{color:var(--fg-muted);font-weight:var(--fw-medium);font-family:var(--font-mono);letter-spacing:.04em;text-transform:none;font-size:10px}.sensor-camera-viewport{background:var(--bg-input);width:100%;height:168px;position:relative}.sensor-camera-viewport:after{content:"";pointer-events:none;border-radius:0;position:absolute;inset:0;box-shadow:inset 0 0 0 1px #ffffff0a}.sensor-camera-viewport canvas{width:100%;height:100%;display:block}.sensor-camera-legend{border-top:1px solid var(--border-subtle);grid-template-columns:1fr 1fr 1fr;gap:0;display:grid}.sensor-readout{--sensor-fill:0;font-family:var(--font-mono);color:var(--fg-secondary);justify-content:center;align-items:center;gap:6px;padding:5px 6px;font-size:10px;display:flex;position:relative;overflow:hidden}.sensor-readout+.sensor-readout{border-left:1px solid var(--border-subtle)}.sensor-readout:before{content:"";height:2px;width:calc(var(--sensor-fill) * 100%);opacity:.55;background:currentColor;transition:width 80ms linear;position:absolute;bottom:0;left:0}.sensor-readout[data-ch="0"]{color:#63d3ff}.sensor-readout[data-ch="1"]{color:#f8d66d}.sensor-readout[data-ch="2"]{color:#f472b6}.sensor-readout .sensor-pin{font-style:normal;font-weight:var(--fw-semibold);letter-spacing:.04em;opacity:.85}.sensor-readout .sensor-val{font-weight:var(--fw-semibold);color:var(--fg);font-variant-numeric:tabular-nums;text-align:right;min-width:26px}.sensor-dot{border-radius:var(--r-pill);background:currentColor;width:6px;height:6px;display:inline-block;box-shadow:0 0 0 1px #00000040}.sensor-dot.left,.sensor-dot.center,.sensor-dot.right{background:currentColor}.panel-bar{padding:0 var(--s-2);background:var(--bg-surface-solid);border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;gap:var(--s-2);z-index:30;flex-shrink:0;height:34px;display:flex;position:relative;overflow:visible}.panel-bar-title{font-size:var(--fs-caption);text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--fg-muted);font-weight:var(--fw-medium)}.panel-bar-actions{gap:var(--s-1);align-items:center;display:flex}.panel-section-title{font-size:var(--fs-caption);text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--fg-muted);font-weight:var(--fw-medium);padding:var(--s-2) var(--s-3) var(--s-1);justify-content:space-between;align-items:center;display:flex}.sketch-bar{align-items:center;gap:var(--s-1);flex:1;min-width:0;display:flex}.sketch-select{background-color:var(--bg-input);color:var(--fg-primary);border:1px solid var(--border-subtle);padding:0 26px 0 var(--s-2);border-radius:var(--r-2);font:inherit;font-size:var(--fs-label);cursor:pointer;text-overflow:ellipsis;appearance:none;background-image:none;background-repeat:no-repeat;background-position:right var(--s-2) center;min-width:0;max-width:280px;height:26px;transition:border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease), background var(--t-fast) var(--ease);outline:none;flex:auto;opacity:0!important;pointer-events:none!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important}.sketch-select:hover{border-color:var(--border-strong)}.sketch-select:focus{border-color:var(--brand-primary);box-shadow:var(--shadow-glow)}main.editor-collapsed .left .sketch-bar{display:none}main.editor-collapsed .left{margin-right:var(--s-1);min-width:0}#editor{background:var(--bg-input);flex:1;min-height:0;overflow:hidden}#editor .cm-editor{height:100%;font-family:var(--font-mono);font-size:var(--fs-body);background:var(--bg-input);line-height:1.6}#editor .cm-editor.cm-focused{outline:none}#editor .cm-scroller{font-family:inherit}#editor .cm-gutters{background:var(--bg-base);border-right:1px solid var(--border-subtle);color:var(--fg-muted)}main.editor-collapsed .left .panel-bar-title,main.editor-collapsed .left #editor{display:none}main.editor-collapsed .left .panel-bar{padding:var(--s-2)}main.editor-collapsed .left #btn-toggle-editor{transform:rotate(180deg)}:root[data-theme=dark] #editor .cm-editor,:root[data-theme=dark] #editor .cm-gutters{background:var(--bg-input)!important}:root[data-theme=light] #editor .cm-editor{background:var(--bg-input)!important;color:var(--fg-primary)!important}:root[data-theme=light] #editor .cm-gutters{background:var(--bg-base)!important;border-right-color:var(--border-subtle)!important;color:var(--fg-muted)!important}:root[data-theme=light] #editor .cm-content{color:var(--fg-primary)!important}:root[data-theme=light] #editor .cm-activeLine{background:var(--brand-subtle)!important}:root[data-theme=light] #editor .cm-activeLineGutter{background:var(--brand-subtle)!important;color:var(--brand-fg)!important}:root[data-theme=light] #editor .cm-cursor{border-left-color:var(--fg-primary)!important}:root[data-theme=light] #editor .cm-selectionBackground{background:var(--brand-subtle-strong)!important}:root[data-theme=light] #editor .cm-content ::selection{background:var(--brand-subtle-strong)!important}:root[data-theme=light] #editor .ͼ1 .cm-keyword{color:#b91c1c!important}:root[data-theme=light] #editor .ͼ1 .cm-string{color:#15803d!important}:root[data-theme=light] #editor .ͼ1 .cm-number{color:#b45309!important}:root[data-theme=light] #editor .ͼ1 .cm-comment{font-style:italic;color:var(--fg-muted)!important}:root[data-theme=light] #editor .ͼ1 .cm-typeName{color:var(--brand-primary)!important}:root[data-theme=light] #editor .ͼ1 .cm-variableName{color:var(--fg-primary)!important}:root[data-theme=light] #editor .ͼ1 .cm-propertyName{color:var(--cyan)!important}:root[data-theme=light] #editor .ͼ1 .cm-bracket{color:var(--fg-secondary)!important}.props{padding:var(--s-2) var(--s-3) var(--s-3);font-size:var(--fs-label);border-bottom:1px solid var(--border-subtle)}.props .empty{color:var(--fg-muted);padding:var(--s-1) 0;font-style:italic}.props .prop-title{font-weight:var(--fw-semibold);color:var(--brand-fg);margin-bottom:var(--s-1);font-size:var(--fs-body);letter-spacing:var(--tracking-tight)}.props .prop-row{gap:var(--s-2);font-family:var(--font-mono);font-size:var(--fs-caption);grid-template-columns:88px 1fr;padding:2px 0;display:grid}.props .prop-row .key{color:var(--fg-muted)}.props .prop-row .val{color:var(--fg-primary)}#sensors,#motors{padding:var(--s-1) var(--s-3) var(--s-3);font-size:var(--fs-label)}.row{gap:var(--s-2);grid-template-columns:74px 1fr 48px;align-items:center;margin-bottom:6px;display:grid}.row .row-label{font-family:var(--font-mono);font-size:var(--fs-caption);color:var(--fg-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.row .row-value{text-align:right;color:var(--fg-secondary);font-family:var(--font-mono);font-size:var(--fs-caption);font-variant-numeric:tabular-nums}.bar{background:var(--bg-input);border-radius:var(--r-pill);border:1px solid var(--border-subtle);height:5px;overflow:hidden}.bar-fill{background:var(--cyan);border-radius:var(--r-pill);height:100%;transition:width var(--t-base) var(--ease), background var(--t-fast) var(--ease)}.bar-fill.motor{background:var(--magenta)}.serial-pane{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-3);box-shadow:var(--shadow-1);height:var(--serial-h,188px);min-height:34px;transition:height var(--t-base) var(--ease);flex-direction:column;display:flex;position:relative;overflow:hidden}.serial-pane.collapsed{height:34px}.serial-pane.collapsed pre{display:none}.serial-pane.collapsed #btn-toggle-serial{transform:rotate(180deg)}#serial{padding:var(--s-2) var(--s-3);font-size:var(--fs-caption);font-family:var(--font-mono);white-space:pre-wrap;background:var(--bg-input);color:var(--fg-secondary);flex:1;margin:0;line-height:1.6;overflow-y:auto}.speed-control{min-width:92px}.speed-control select{font-variant-numeric:tabular-nums}.toggle-btn{background:var(--bg-control);border:1px solid var(--border-subtle);color:var(--fg-muted);border-radius:var(--r-1);cursor:pointer;width:22px;height:22px;transition:all var(--t-fast) var(--ease);justify-content:center;align-items:center;padding:0;font-size:11px;line-height:1;display:flex}.toggle-btn:hover{color:var(--brand-primary);background:var(--brand-subtle);border-color:var(--brand-border)}.theme-toggle{background:var(--bg-control);border:1px solid var(--border);border-radius:var(--r-2);cursor:pointer;width:28px;height:28px;color:var(--fg-secondary);transition:all var(--t-fast) var(--ease);flex-shrink:0;justify-content:center;align-items:center;display:flex}.theme-toggle:hover{background:var(--bg-control-hover);color:var(--fg-primary);border-color:var(--border-strong)}.theme-toggle svg,.theme-toggle .lucide{width:14px;height:14px}.theme-toggle .icon-sun{display:none}.theme-toggle .icon-moon,:root[data-theme=light] .theme-toggle .icon-sun{display:block}:root[data-theme=light] .theme-toggle .icon-moon{display:none}.modal-backdrop{z-index:var(--z-modal);padding:var(--s-4);-webkit-backdrop-filter:blur(3px);background:#0000006b;place-items:center;display:grid;position:fixed;inset:0}.modal-backdrop[hidden]{display:none}.modal-card{background:var(--bg-surface-solid);width:min(420px,100%);color:var(--fg-primary);border:1px solid var(--border);border-radius:var(--r-4);box-shadow:var(--shadow-3);margin:0;padding:0;overflow:hidden}.modal-header{justify-content:space-between;align-items:flex-start;gap:var(--s-3);padding:var(--s-4) var(--s-4) var(--s-2);display:flex}.modal-header h2{font-size:var(--fs-h4);line-height:var(--lh-h4);font-weight:var(--fw-semibold);margin:0}.modal-header p{margin:var(--s-1) 0 0;color:var(--fg-secondary);font-size:var(--fs-body)}.modal-close{border-radius:var(--r-2);width:26px;height:26px;color:var(--fg-muted);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.modal-close:hover{color:var(--fg-primary);background:var(--bg-control-hover);border-color:var(--border-subtle)}.modal-field{gap:var(--s-2);padding:var(--s-2) var(--s-4) var(--s-4);color:var(--fg-secondary);font-size:var(--fs-label);font-weight:var(--fw-medium);display:grid}.modal-field.is-hidden{display:none}.modal-input{width:100%;height:34px;padding:0 var(--s-3);border:1px solid var(--border);border-radius:var(--r-2);background:var(--bg-input);color:var(--fg-primary);font:inherit;transition:border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease), background var(--t-fast) var(--ease);outline:none}.modal-input:hover{border-color:var(--border-strong)}.modal-input:focus{border-color:var(--brand-primary);box-shadow:var(--shadow-glow)}.modal-actions{justify-content:flex-end;gap:var(--s-2);padding:var(--s-3) var(--s-4);background:var(--bg-base);border-top:1px solid var(--border-subtle);display:flex}@media (width<=1200px){.topbar{overflow:auto visible}.controls,.topbar-left{flex-shrink:0}.playback-btn span,#btn-generate span{display:none}.playback-btn{padding:0 var(--s-2)}}@media (width<=900px){#app{padding:var(--s-1);gap:var(--s-1)}main{gap:var(--s-1);grid-template-rows:340px minmax(320px,1fr) 220px;grid-template-columns:1fr}.resize-handle-x{display:none}.left,.right,.center{margin:0}.left,.right,.center,.serial-pane,.topbar{border-radius:var(--r-2)}}.orbit-hud{top:var(--s-3,12px);right:var(--s-3,12px);z-index:8;pointer-events:none;position:absolute}.orbit-card{pointer-events:auto;box-shadow:none;background:0 0;border:0;flex-direction:column;align-items:center;padding:0;display:flex}.orbit-gizmo{cursor:pointer;filter:drop-shadow(0 10px 14px #00000038);background:0 0;border:0;border-radius:50%;place-items:center;width:160px;height:160px;margin:0;padding:0;display:grid}.orbit-gizmo:hover .orbit-gizmo-canvas{transform:translateY(-1px)scale(1.03)}.orbit-gizmo:focus-visible,.orbit-collapse:focus-visible,.projection-toggle:focus-visible,.rotate-view-btn:focus-visible,.view-btn:focus-visible{box-shadow:var(--shadow-glow,0 0 0 3px #4f7cff42);outline:none}.orbit-gizmo-canvas{width:160px;height:160px;transition:transform var(--t-fast,.12s) var(--ease,ease);display:block}.orbit-collapse{border:1px solid var(--border-subtle,#272a31);border-radius:var(--r-1,3px);width:22px;height:18px;color:var(--fg-muted,#767d89);cursor:pointer;opacity:.72;transition:background var(--t-fast,.12s) var(--ease,ease), border-color var(--t-fast,.12s) var(--ease,ease), color var(--t-fast,.12s) var(--ease,ease), transform var(--t-fast,.12s) var(--ease,ease);background:#14161ac2;align-self:flex-end;margin-top:-18px;margin-right:18px;padding:0}:root[data-theme=light] .orbit-collapse{background:#ffffffd1}.orbit-collapse:before{content:"";border-top:5px solid;border-left:4px solid #0000;border-right:4px solid #0000;width:0;height:0;margin:6px auto 0;display:block}.orbit-hud:not(.is-collapsed) .orbit-collapse:before{transform:rotate(180deg)}.orbit-collapse:hover{color:var(--fg-primary,#e8eaee);border-color:var(--brand-border,#628cff6b);background:var(--bg-control-hover,#292d35);opacity:1;transform:translateY(1px)}.view-presets{width:170px;margin-top:var(--s-2,8px);border:1px solid var(--border,#343943);border-radius:var(--r-2,5px);background:var(--bg-surface-solid,#1b1d22);box-shadow:var(--shadow-2,0 4px 12px #00000047);transform-origin:top;transition:opacity var(--t-base,.18s) var(--ease,ease), transform var(--t-base,.18s) var(--ease,ease), max-height var(--t-base,.18s) var(--ease,ease), padding var(--t-base,.18s) var(--ease,ease), margin var(--t-base,.18s) var(--ease,ease);opacity:1;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;max-height:180px;padding:5px;display:grid}:root[data-theme=light] .view-presets{background:#ffffffe6}.orbit-hud.is-collapsed .view-presets{opacity:0;pointer-events:none;max-height:0;margin-top:0;padding-top:0;padding-bottom:0;overflow:hidden;transform:translateY(-6px)scale(.98)}.projection-toggle,.view-btn,.rotate-view-btn{border-radius:var(--r-1,3px);height:25px;color:var(--fg-secondary,#a9aeb8);font-family:var(--font-sans,system-ui, sans-serif);font-size:var(--fs-caption,11px);font-weight:var(--fw-semibold,600);cursor:pointer;transition:background var(--t-fast,.12s) var(--ease,ease), border-color var(--t-fast,.12s) var(--ease,ease), color var(--t-fast,.12s) var(--ease,ease);background:0 0;border:0}.projection-toggle{justify-content:center;align-items:center;gap:var(--s-1,4px);padding:0 var(--s-2,8px);border-bottom:1px solid var(--border-subtle,#272a31);border-radius:0;grid-column:1/-1;margin-bottom:3px;display:inline-flex}.rotation-controls{border-bottom:1px solid var(--border-subtle,#272a31);grid-column:1/-1;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;margin-bottom:3px;padding-bottom:4px;display:grid}.projection-indicator{border-radius:var(--r-pill,999px);background:var(--brand-primary,#4f7cff);width:7px;height:7px;box-shadow:0 0 0 3px var(--brand-ring,#4f7cff42)}.projection-toggle[data-mode=orthographic] .projection-indicator{background:var(--status-success,#37c98b);box-shadow:0 0 0 3px var(--status-success-bg,#37c98b1f)}.projection-toggle:hover,.view-btn:hover,.rotate-view-btn:hover{background:var(--bg-control-hover,#292d35);color:var(--fg-primary,#e8eaee)}.view-btn-home{color:var(--brand-fg,#c9d7ff);background:var(--brand-subtle,#4f7cff1f);grid-column:1/-1}
