*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--ink:#2e2e2e;--ink-light:#5c6370;--ink-muted:#8a9099;--rule:#d4cfc4;--rule-light:#e8e4dc;--bg:#faf8f5;--bg-panel:#f3efe8;--bg-toolbar:#333;--bg-canvas:#fffefb;--accent:#333;--accent-inv:#faf8f5;--red:#a63d2f;--blue:#2563a8;--toolbar-h:52px;--timeline-h:44px;--tool-bar-w:44px;--props-w:220px;--status-h:28px;--radius:3px;--font-serif:"Source Serif 4", "Libre Baskerville", Georgia, "Times New Roman", serif;--font-sans:"DM Sans", "Segoe UI", system-ui, sans-serif;--font-math:KaTeX_Main, "Latin Modern Roman", "Times New Roman", Times, serif}html,body,#app{height:100%;font-family:var(--font-sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:13px;line-height:1.45;overflow:hidden}#toolbar{height:var(--toolbar-h);background:var(--bg-toolbar);color:var(--accent-inv);-webkit-user-select:none;user-select:none;z-index:100;border-bottom:1px solid #0000002e;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:0 16px;display:flex;position:relative;box-shadow:inset 0 1px #ffffff0f}#app-title{font-family:var(--font-sans);letter-spacing:.02em;color:#fff;font-size:18px;font-weight:500}#toolbar-center{flex:1;justify-content:center;align-items:center;gap:10px;display:flex}#toolbar-right{align-items:center;gap:4px;display:flex}.control-group{align-items:center;gap:6px;display:flex}.divider{background:#ffffff24;width:1px;height:22px}#toolbar button:not(.menu-item){border-radius:var(--radius);color:#ffffffe6;cursor:pointer;font-size:12px;font-family:var(--font-sans);background:#ffffff12;border:1px solid #ffffff24;align-items:center;gap:6px;height:32px;padding:5px 10px;font-weight:500;transition:background .15s,color .15s,border-color .15s;display:flex}#toolbar button:not(.menu-item) svg{fill:currentColor;flex-shrink:0;width:16px;height:16px}#toolbar button:not(.menu-item):hover{color:#fff;background:#ffffff24;border-color:#ffffff38}#toolbar button.primary:not(.menu-item){color:var(--accent);background:#faf8f5;border-color:#0000;font-weight:600}#toolbar button.primary:not(.menu-item):hover{background:#ece8e0}#toolbar button.primary:not(.menu-item).recording{background:var(--red);color:#fff;border-color:#0000}#toolbar button.primary:not(.menu-item).recording:hover{background:#8f3428}#toolbar button:not(.menu-item).active{color:#fff;background:#ffffff2e;border-color:#ffffff40}#toolbar button:not(.menu-item):disabled{opacity:.35;cursor:not-allowed}#toolbar button:not(.menu-item).recording{background:var(--red);color:#fff;border-color:#0000}.rec-dot{background:var(--red);border-radius:50%;width:8px;height:8px;display:inline-block}button.recording .rec-dot{background:#fff}#speed-group label{color:#ffffffa6;font-size:11px;font-family:var(--font-sans);letter-spacing:.03em;font-weight:500}#speed-slider{appearance:none;background:#ffffff47;border-radius:2px;outline:none;width:80px;height:3px}#speed-slider::-webkit-slider-thumb{-webkit-appearance:none;cursor:pointer;background:#faf8f5;border-radius:50%;width:12px;height:12px}#speed-label{color:#ffffffe6;font-family:var(--font-sans);font-variant-numeric:tabular-nums;min-width:28px;font-size:12px}#toolbar button.icon-only{gap:0;padding:5px 8px}.menu-chevron{opacity:.75;width:14px!important;height:14px!important}.menu-wrap{position:relative}.menu-trigger[aria-expanded=true]{background:#ffffff2e;border-color:#ffffff40}.menu-dropdown{background:var(--bg-canvas);border:1px solid var(--rule);border-radius:var(--radius);z-index:200;min-width:220px;padding:4px;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 8px 24px #2c334524}.menu-item{text-align:left;width:100%;height:auto;font-family:var(--font-sans);color:var(--ink);cursor:pointer;background:0 0;border:none;border-radius:2px;padding:7px 10px;font-size:12px;font-weight:400;transition:background .12s,color .12s;display:block}.menu-item:hover{background:var(--accent);color:#fff}.menu-item.active{background:var(--bg-panel);color:var(--ink);font-weight:600}.menu-item.active:hover{background:var(--accent);color:#fff}.menu-section-label{font-family:var(--font-sans);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-muted);pointer-events:none;padding:6px 10px 4px;font-size:10px;font-weight:600}.menu-divider{background:var(--rule);height:1px;margin:4px 6px}.menu-item:disabled{opacity:.4;cursor:not-allowed}.menu-item:disabled:hover{color:var(--ink);background:0 0}#main-layout{height:calc(100% - var(--toolbar-h) - var(--timeline-h) - var(--status-h));display:flex;overflow:hidden}#tool-bar,#properties-wrap,#object-browser-wrap{background:var(--bg-panel);border-right:1px solid var(--rule);flex-shrink:0}#properties-wrap{border-right:none;border-left:1px solid var(--rule);height:100%;display:flex}#object-browser-wrap{border-right:1px solid var(--rule);height:100%;display:flex}.props-toggle,.ob-toggle{background:var(--bg-panel);cursor:pointer;width:22px;color:var(--ink-muted);border:none;flex-shrink:0;justify-content:center;align-self:stretch;align-items:center;padding:0;transition:background .12s,color .12s;display:flex}.props-toggle{border-right:1px solid var(--rule-light)}.ob-toggle{border-left:1px solid var(--rule-light)}.props-toggle:hover,.ob-toggle:hover{color:var(--ink);background:#2c33450f}.props-toggle svg,.ob-toggle svg{width:14px;height:14px;transition:transform .18s}#properties-wrap.collapsed .props-toggle svg,#object-browser-wrap.collapsed .ob-toggle svg{transform:rotate(180deg)}#tool-bar{width:var(--tool-bar-w);border-right:1px solid var(--rule);flex-direction:column;align-items:center;gap:4px;padding:8px 4px;display:flex}#properties-panel,#object-browser-panel{width:var(--props-w);padding:12px 10px;transition:width .2s,padding .2s,opacity .15s;overflow:hidden auto}#properties-wrap.collapsed #properties-panel,#object-browser-wrap.collapsed #object-browser-panel{opacity:0;pointer-events:none;width:0;padding:0}.ob-fs{border-radius:var(--radius);min-height:48px;transition:background .12s,outline-color .12s}.ob-fs.ob-drop-over{outline:1px dashed var(--blue);outline-offset:2px;background:#2563a80a}.ob-list{flex-direction:column;gap:0;display:flex}.ob-empty,.ob-hint{color:var(--ink-muted);margin:8px 0 0;font-size:10px;line-height:1.4}.ob-node{position:relative}.ob-children{border-left:1px solid var(--rule-light);flex-direction:column;margin:0 0 2px 11px;padding-left:12px;display:flex}.ob-row{text-align:left;border-radius:var(--radius);width:100%;color:var(--ink);font-family:var(--font-sans);cursor:default;background:0 0;border:1px solid #0000;align-items:center;gap:2px;padding:3px 4px 3px 2px;font-size:12px;display:flex}.ob-row:hover{background:#2c33450f}.ob-row.selected{background:#5c63701f;border-color:#00aad440}.ob-row.ob-dragging{opacity:.45}.ob-row.ob-drop-over{border-color:var(--blue);background:#2563a81a}.ob-drop-reject{animation:.35s ob-shake}@keyframes ob-shake{0%,to{transform:translate(0)}25%{transform:translate(-3px)}75%{transform:translate(3px)}}.ob-row-main{cursor:pointer;min-width:0;color:inherit;font:inherit;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:6px;margin:0;padding:0;display:flex}.ob-icon{width:14px;height:14px;color:var(--ink-muted);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.ob-ico{width:14px;height:14px;display:block}.ob-ico-meta{color:var(--ink-muted);font-size:12px;line-height:1}.ob-row[data-kind=aggregate] .ob-icon,.ob-row[data-kind=weld] .ob-icon,.ob-row[data-kind=rope] .ob-icon{color:#8a7340}.ob-row[data-kind=constraint] .ob-icon{color:var(--blue)}.ob-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.ob-meta{color:var(--ink-muted);text-transform:lowercase;letter-spacing:.02em;text-overflow:ellipsis;flex-shrink:0;max-width:56px;font-size:9px;overflow:hidden}.ob-twist,.ob-twist-spacer{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:18px;display:inline-flex}.ob-twist{cursor:pointer;color:var(--ink-muted);background:0 0;border:none;border-radius:2px;padding:0;font-size:10px}.ob-twist:hover{color:var(--ink);background:#2c334514}.ob-rename{width:100%;font:inherit;border:1px solid var(--rule);border-radius:var(--radius);color:var(--ink);background:#fff;padding:1px 3px;font-size:12px}.tool-btn{border-radius:var(--radius);cursor:pointer;width:32px;height:32px;color:var(--accent);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s;display:flex;position:relative}.tool-btn svg{width:20px;height:20px}.tool-btn:hover{border-color:var(--rule);background:#2c33450f}.tool-btn.active{background:var(--accent);color:#fff;border-color:#0000}.tool-btn.active svg{color:#fff;stroke:#fff}.tool-btn:after{content:attr(data-tip);background:var(--accent);color:#fff;font-family:var(--font-sans);white-space:nowrap;border-radius:var(--radius);pointer-events:none;opacity:0;visibility:hidden;z-index:50;padding:4px 8px;font-size:11px;transition:opacity .12s,visibility .12s;position:absolute;top:50%;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 2px 8px #0000001f}.tool-btn:hover:after,.tool-btn:focus-visible:after{opacity:1;visibility:visible}body.shift-pan-preview .tool-btn.active:not([data-tool=pan]),body.shift-pan-preview .obj-btn.active{color:var(--ink-muted);opacity:.45;background:#2c33450f;border-color:#0000}body.shift-pan-preview .tool-btn.active:not([data-tool=pan]) svg{color:inherit;stroke:currentColor;fill:currentColor}body.shift-pan-preview .obj-btn.active svg{stroke:currentColor}body.shift-pan-preview .tool-btn[data-tool=pan]{background:var(--accent);color:#fff;box-shadow:0 0 0 2px var(--bg-panel), 0 0 0 4px var(--accent);border-color:#0000}body.shift-pan-preview .tool-btn[data-tool=pan] svg{color:#fff;stroke:#fff}body.shift-pan-preview .tool-btn[data-tool=pan]:after{content:"Pan (Shift)";opacity:1;visibility:visible}#object-bar{background:var(--bg-panel);border-left:1px solid var(--rule);border-right:1px solid var(--rule);flex-direction:column;flex-shrink:0;align-items:center;gap:4px;width:46px;padding:10px 4px;display:flex}.obj-bar-label{letter-spacing:.04em;color:var(--ink-muted);text-align:center;word-break:break-word;max-width:100%;margin-bottom:2px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:10px;font-weight:600;line-height:1.15}.obj-bar-label-section{border-top:1px solid var(--rule);width:100%;margin-top:10px;padding-top:8px}.obj-btn{border-radius:var(--radius);cursor:pointer;width:32px;height:32px;color:var(--accent);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s;display:flex}.obj-btn svg{width:20px;height:20px}.obj-btn:hover{border-color:var(--rule);background:#2c33450f}.obj-btn.active{background:var(--accent);color:#fff;border-color:#0000}.obj-btn.active svg{stroke:#fff}.obj-btn{touch-action:none;-webkit-user-select:none;user-select:none}#palette-drag-ghost{pointer-events:none;z-index:9999;background:var(--bg-canvas);border:1px solid var(--rule);border-radius:var(--radius);opacity:.9;justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:fixed;transform:translate(-50%,-50%);box-shadow:0 2px 10px #2c33451f}#palette-drag-ghost svg{width:20px;height:20px}#sandbox-svg.palette-drop-target{outline:2px solid var(--blue);outline-offset:-2px}#properties-panel h3,#object-browser-panel h3{font-family:var(--font-sans);letter-spacing:.05em;color:var(--ink-muted);border-bottom:1px solid var(--rule-light);margin-bottom:8px;padding-bottom:5px;font-size:11px;font-weight:600}.hint{color:var(--ink-light);font-size:11px;font-style:italic;line-height:1.5}.prop-row{border-bottom:1px solid var(--rule-light);justify-content:space-between;align-items:center;gap:6px;padding:4px 0;display:flex}.prop-label{font-family:var(--font-sans);color:var(--ink-light);font-size:11px}.math{font-family:var(--font-math);letter-spacing:0;font-style:italic;font-weight:400}.math sub{vertical-align:baseline;font-size:.72em;font-style:italic;position:relative;bottom:-.22em}.prop-label .math,.prop-section-title .math{color:inherit}.prop-section-title .math{font-weight:400}.prop-value{font-family:var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink);text-align:right;background:0 0;border:none;border-radius:2px;width:84px;padding:2px 4px;font-size:11px}.prop-value:focus{outline:1px solid var(--accent);background:var(--bg-canvas)}select.prop-value{cursor:pointer;width:auto;min-width:84px;max-width:118px}.prop-section-title{font-family:var(--font-sans);letter-spacing:.04em;color:var(--ink-muted);margin:10px 0 4px;font-size:10px;font-weight:600}.prop-delete-btn{border:1px solid var(--red);border-radius:var(--radius);width:100%;color:var(--red);cursor:pointer;font-family:var(--font-sans);background:0 0;margin-top:12px;padding:6px;font-size:11px;font-weight:500;transition:background .12s,color .12s;display:block}.prop-delete-btn:hover{background:var(--red);color:#fff}.prop-back-btn{color:var(--blue);cursor:pointer;font-family:var(--font-sans);background:0 0;border:none;align-items:center;margin:0 0 4px;padding:2px 0;font-size:11px;font-weight:500;display:inline-flex}.prop-back-btn:hover{text-decoration:underline}.prop-component-list{flex-direction:column;gap:4px;margin:0 0 4px;display:flex}.prop-component-row{background:var(--bg-canvas);border:1px solid var(--rule-light);border-radius:var(--radius);width:100%;color:var(--ink);cursor:pointer;text-align:left;font-family:var(--font-sans);flex-direction:column;align-items:flex-start;gap:1px;padding:6px 8px;display:flex}.prop-component-row:hover{border-color:var(--blue);background:#f0f5fb}.prop-component-name{font-size:12px;font-weight:600}.prop-component-meta{color:var(--ink-light);font-size:10px}#camera-overlay{pointer-events:none;z-index:4;width:100%;height:100%;display:none;position:absolute;inset:0;overflow:visible}#canvas-container{background:var(--bg-canvas);box-shadow:inset 0 0 0 1px var(--rule-light);-webkit-user-select:none;user-select:none;-webkit-user-drag:none;flex:1;position:relative;overflow:hidden}#canvas-container *{-webkit-user-select:none;user-select:none}#sandbox-svg{cursor:crosshair;touch-action:none;width:100%;height:100%;display:block}#sandbox-svg.mode-select{cursor:default}#sandbox-svg.mode-pan{cursor:grab}#sandbox-svg.mode-pan:active{cursor:grabbing}#sandbox-svg.mode-rotate{cursor:crosshair}#sandbox-svg.mode-scale{cursor:default}#sandbox-svg.mode-measure{cursor:crosshair}#sandbox-svg.mode-camera{cursor:default;pointer-events:none}#camera-overlay.camera-pan-ready{cursor:grab}#camera-overlay.camera-pan-active{cursor:grabbing}#camera-overlay [data-cam-handle=origin],#camera-overlay [data-cam-handle=move]{cursor:move}.export-size-readout{font-variant-numeric:tabular-nums;color:var(--ink)}#canvas-overlay{pointer-events:none;position:absolute;top:10px;right:14px}#basis-indicator{pointer-events:none;opacity:.6;position:absolute;top:10px;left:10px}#sim-time{font-family:var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-light);border-radius:var(--radius);border:1px solid var(--rule);background:#fffefbeb;padding:3px 8px;font-size:12px}#status-bar{height:var(--status-h);background:var(--bg-panel);border-top:1px solid var(--rule);font-family:var(--font-sans);color:var(--ink-light);flex-shrink:0;align-items:center;gap:20px;padding:0 14px;font-size:11px;display:flex}#status-bar strong{font-family:var(--font-sans);color:var(--ink);font-weight:600}#status-record{color:var(--red);font-weight:600}.hidden{display:none!important}.toggle-label{cursor:pointer;flex-shrink:0;align-items:center;gap:0;display:flex}.toggle-label input[type=checkbox]{display:none}.toggle-track{background:var(--rule);border-radius:8px;width:30px;height:16px;transition:background .15s;position:relative}.toggle-label input:checked+.toggle-track{background:var(--accent)}.toggle-thumb{background:#fff;border-radius:50%;width:12px;height:12px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0003}.toggle-label input:checked+.toggle-track .toggle-thumb{transform:translate(14px)}#env-section .prop-row{padding:4px 0}#env-section .prop-row-slider{align-items:center;gap:10px}#env-section .prop-slider-wrap{flex:1;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}#env-section .prop-slider-wrap input[type=range]{appearance:none;background:var(--rule);cursor:pointer;border-radius:2px;outline:none;flex:1;min-width:72px;max-width:140px;height:3px}#env-section .prop-slider-wrap input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent);border:2px solid var(--bg-canvas);width:12px;height:12px;box-shadow:0 0 0 1px var(--accent);cursor:pointer;border-radius:50%}#env-section .prop-slider-wrap input[type=range]::-moz-range-thumb{background:var(--accent);border:2px solid var(--bg-canvas);width:12px;height:12px;box-shadow:0 0 0 1px var(--accent);cursor:pointer;border-radius:50%}#env-section .prop-slider-value{font-family:var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-light);text-align:right;min-width:2.6em;font-size:12px}#timeline-bar{height:var(--timeline-h);background:var(--bg-panel);border-top:1px solid var(--rule);-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:12px;padding:0 14px;display:flex}.tl-badge{font-family:var(--font-sans);letter-spacing:.08em;text-transform:uppercase;border-radius:var(--radius);text-align:center;flex-shrink:0;min-width:58px;padding:3px 8px;font-size:10px;font-weight:600}.tl-setup{color:var(--ink-light);background:#e6e2d9}.tl-live{background:var(--red);color:#fff}.tl-review{background:var(--blue);color:#fff}#tl-transport{flex-shrink:0;align-items:center;gap:2px;display:flex}#tl-transport button{border-radius:var(--radius);cursor:pointer;width:28px;height:28px;color:var(--accent);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;transition:background .1s,border-color .1s;display:flex}#tl-transport button svg{fill:currentColor;pointer-events:none;width:16px;height:16px}#tl-transport button:hover{border-color:var(--rule);background:#2c33450f}#tl-transport button:disabled{opacity:.3;cursor:not-allowed}#tl-transport button.active{background:var(--accent);color:#fff}.tl-clear-btn{margin-left:6px!important}.tl-clear-btn:hover:not(:disabled){color:var(--red)!important;background:#a63d2f1a!important;border-color:#a63d2f4d!important}.tl-play-btn{width:32px!important;height:32px!important}#tl-scrubber-wrap{flex:1;align-items:center;gap:8px;min-width:0;display:flex;position:relative}#tl-ic-marker{font-family:var(--font-sans);color:var(--ink-light);border:1px solid var(--rule);letter-spacing:.04em;cursor:help;background:#e6e2d9;border-radius:2px;flex-shrink:0;padding:2px 5px;font-size:9px;font-weight:600}#tl-track{flex:1;align-items:center;height:20px;display:flex;position:relative}#tl-fill{background:var(--accent);pointer-events:none;z-index:1;border-radius:2px;width:0%;height:4px;position:absolute;top:50%;left:0;transform:translateY(-50%)}#tl-scrubber{appearance:none;z-index:2;background:var(--rule);cursor:pointer;background:0 0;border-radius:2px;outline:none;width:100%;height:4px;position:relative}#tl-scrubber::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent);border:2px solid var(--bg-canvas);width:14px;height:14px;box-shadow:0 0 0 1px var(--accent);cursor:pointer;border-radius:50%;transition:transform .1s}#tl-scrubber::-moz-range-thumb{background:var(--accent);border:2px solid var(--bg-canvas);width:14px;height:14px;box-shadow:0 0 0 1px var(--accent);cursor:pointer;border-radius:50%}#tl-scrubber::-webkit-slider-thumb:hover{transform:scale(1.15)}#tl-scrubber:disabled{opacity:.35;cursor:not-allowed}#tl-scrubber:disabled::-webkit-slider-thumb{cursor:not-allowed}#tl-track:before{content:"";background:var(--rule);pointer-events:none;border-radius:2px;height:4px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}#tl-info{flex-direction:column;flex-shrink:0;align-items:flex-end;gap:1px;display:flex}#tl-frame-count,#tl-time-display{font-family:var(--font-sans);font-variant-numeric:tabular-nums;color:var(--ink-light);font-size:11px;line-height:1.25}#tl-time-display{color:var(--ink);font-size:12px}.body-group{cursor:pointer}.body-group:hover .body-shape{filter:drop-shadow(0 0 3px #00000040)}.body-group.selected .body-shape:not(.box-body):not(.circle-ring):not(.circle-filled):not(.wedge-ring){stroke:var(--blue)!important;stroke-width:2.5px!important}.body-group.selected .body-shape.circle-ring,.body-group.selected .body-shape.wedge-ring{stroke:var(--blue)!important;stroke-width:1.75px!important}.body-group.selected .body-shape.circle-filled,.body-group.selected rect.body-shape.box-body,.body-group.selected polygon.body-shape.box-body,.body-group.selected .body-shape.rope-segment,.body-group.selected .rope-stroke-path,.rope-stroke.selected .rope-stroke-path{filter:drop-shadow(0 0 2px var(--blue)) drop-shadow(0 0 6px #2563a866)}.body-shape.selected-part{filter:drop-shadow(0 0 3px var(--blue)) drop-shadow(0 0 8px #2563a873);stroke:var(--blue)!important;stroke-width:2.75px!important}.body-group.hover-target .body-shape{filter:drop-shadow(0 0 6px var(--blue));opacity:.8}.body-label{font-family:var(--font-sans);fill:var(--ink-light);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:11px}.constraint-group{cursor:pointer}.constraint-group.selected>line:not(.constraint-hit),.constraint-group.selected>path:not(.constraint-hit){stroke-width:2.25px;stroke:var(--blue)!important}.constraint-hit{stroke:#0000!important}.vector-arrow{pointer-events:none}.trace-path{pointer-events:none;opacity:.5}.modal-backdrop{z-index:300;background:#2c334552;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-backdrop.hidden{display:none}.modal-dialog{background:var(--bg-canvas);border:1px solid var(--rule);border-radius:calc(var(--radius) + 1px);width:min(360px,100vw - 32px);box-shadow:0 16px 40px #2c33452e}.modal-header{border-bottom:1px solid var(--rule-light);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.modal-header h2{font-family:var(--font-sans);color:var(--ink);font-size:16px;font-weight:600}.modal-close{color:var(--ink-light);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:22px;line-height:1}.modal-close:hover{color:var(--ink)}.modal-body{padding:12px 16px 16px}.modal-body .prop-value{width:100px}.modal-body select.prop-value{width:140px;max-width:100%}.modal-body .prop-row:last-child{border-bottom:none}.modal-footer{border-top:1px solid var(--rule-light);justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.modal-btn{font-family:var(--font-sans);border:1px solid var(--rule);border-radius:var(--radius);background:var(--bg-panel);color:var(--ink);cursor:pointer;padding:6px 14px;font-size:13px}.modal-btn:hover{background:#2c33450f}.modal-btn-primary{background:var(--accent);color:var(--accent-inv);border-color:#0000}.modal-btn-primary:hover{background:#1a1a1a}.modal-btn:disabled{opacity:.45;cursor:not-allowed}.export-hint{color:var(--ink-light);margin-top:10px;font-size:12px;line-height:1.45}.export-section{border-top:1px solid #2c33451f;margin-top:12px;padding-top:12px}.export-section:first-child{border-top:none;margin-top:0;padding-top:0}.export-section-toggle{color:var(--ink);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.export-section-toggle input{margin:0}.export-section-panel{margin-top:10px}.export-section-panel.hidden{display:none}#video-export-dialog{width:min(560px,100vw - 32px);max-height:min(88vh,720px)}#video-export-section{max-height:min(62vh,520px);overflow-y:auto}.graph-export-list{flex-direction:column;gap:10px;display:flex}.graph-export-row{background:#fffefbb3;border:1px solid #2c334524;border-radius:8px;padding:10px 12px}.graph-export-row.is-disabled{opacity:.55}.graph-export-row-head{align-items:flex-start;gap:8px;margin-bottom:8px;display:flex}.graph-export-row-head label{cursor:pointer;flex:1;align-items:flex-start;gap:8px;font-size:13px;font-weight:500;display:flex}.graph-export-row-head input{margin-top:3px}.graph-export-row-title{line-height:1.35}.graph-export-row-note{color:var(--ink-light);font-size:11px;font-weight:400}.graph-export-settings{grid-template-columns:72px 1fr;align-items:center;gap:6px 10px;display:grid}.graph-export-settings .prop-label{color:var(--ink-light);font-size:11px}.graph-export-settings select,.graph-export-settings .export-size-readout{width:100%;font-size:12px}.graph-export-settings .export-size-readout{grid-column:2}.graph-window{z-index:40;background:var(--bg-panel);border:1px solid var(--rule);border-radius:var(--radius);pointer-events:auto;-webkit-user-select:none;user-select:none;flex-direction:column;width:min(900px,100% - 24px);min-width:240px;height:360px;min-height:180px;display:flex;position:absolute;overflow:hidden;box-shadow:0 8px 28px #1e1c182e}.graph-window.is-minimized,.graph-window[hidden]{display:none!important}.graph-window-header{background:var(--bg-toolbar);color:var(--accent-inv);cursor:grab;flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px 6px 10px;display:flex}.graph-window-header:active{cursor:grabbing}.graph-window-title{font-family:var(--font-math), var(--font-sans);letter-spacing:.01em;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:12px;font-style:italic;font-weight:600;overflow:hidden}.graph-window-header-btns{flex-shrink:0;align-items:center;gap:2px;display:flex}.graph-window-min,.graph-window-close{color:inherit;cursor:pointer;opacity:.75;background:0 0;border:none;min-width:22px;padding:0 4px;font-size:16px;line-height:1}.graph-window-min:hover,.graph-window-close:hover{opacity:1}.graph-dock{z-index:45;pointer-events:none;flex-wrap:wrap;align-items:flex-end;gap:6px;display:flex;position:absolute;bottom:8px;left:8px;right:8px}.graph-dock[hidden]{display:none!important}.graph-dock-tab{pointer-events:auto;text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-family:var(--font-math), var(--font-sans);border:1px solid var(--rule);border-radius:var(--radius) var(--radius) 0 0;background:var(--bg-toolbar);color:var(--accent-inv);cursor:pointer;padding:6px 12px;font-size:11px;font-style:italic;font-weight:600;overflow:hidden;box-shadow:0 4px 14px #1e1c1829}.graph-dock-tab:hover{filter:brightness(1.06)}.graph-advanced{border-bottom:1px solid var(--rule-light);background:var(--bg);flex-shrink:0}.graph-advanced-summary{font-family:var(--font-sans);letter-spacing:.01em;color:var(--ink-light);cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 10px;font-size:11px;font-weight:600;list-style:none}.graph-advanced-summary::-webkit-details-marker{display:none}.graph-advanced-summary:before{content:"▸";margin-right:6px;transition:transform .12s;display:inline-block}.graph-advanced[open]>.graph-advanced-summary:before{transform:rotate(90deg)}.graph-advanced[open]>.graph-advanced-summary{color:var(--ink);border-bottom:1px solid var(--rule-light)}.graph-window-toolbar{border-bottom:1px solid var(--rule-light);background:var(--bg);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px 8px;padding:6px 10px;display:flex}.graph-window-toolbar[hidden],.graph-sweep-panel[hidden]{display:none!important}.graph-fit-bar{border-bottom:1px solid var(--rule-light);background:var(--bg-panel);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px 8px;padding:5px 10px;display:flex}.graph-fit-degree-wrap{align-items:center;gap:4px;display:inline-flex}.graph-fit-degree-wrap[hidden]{display:none!important}.graph-fit-degree{width:44px;max-width:44px}.graph-fit-domain-wrap{align-items:center;gap:4px;display:inline-flex}.graph-fit-domain{width:64px;max-width:72px}.graph-fit-domain-sep{color:var(--ink-muted);font-size:11px}.graph-fit-domain-all{padding:3px 6px}.graph-fit-btn{font-family:var(--font-sans);color:var(--ink);background:var(--bg-canvas);border:1px solid var(--rule);border-radius:var(--radius);cursor:pointer;padding:3px 8px;font-size:11px;font-weight:500}.graph-fit-btn:hover{border-color:var(--ink-light)}.graph-fit-btn:disabled{opacity:.4;cursor:not-allowed}.graph-fit-btn-muted{color:var(--ink-light)}.graph-phase-btn.active{background:var(--blue);color:#fffefb;border-color:var(--blue)}.graph-phase-obs-wrap{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.graph-phase-obs-wrap[hidden]{display:none}.graph-phase-bounds-wrap{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.graph-phase-bounds-wrap[hidden]{display:none}.graph-phase-bound{width:66px;max-width:72px}.graph-phase-overlay-select{max-width:92px}.graph-fit-btn.active{background:var(--blue);color:#fffefb;border-color:var(--blue)}.graph-desmos-wrap{align-items:center;gap:6px;margin-left:auto;display:flex;position:relative}.graph-desmos-view-btn{align-items:center;gap:6px;font-weight:600;display:inline-flex}.graph-desmos-icon{object-fit:contain;flex-shrink:0;width:14px;height:14px;display:block}.graph-desmos-copy-wrap{position:relative}.graph-desmos-menu{z-index:20;background:var(--bg-canvas);border:1px solid var(--rule);border-radius:var(--radius);min-width:150px;padding:4px 0;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 4px 14px #2e2e2e1f}.graph-desmos-menu.hidden{display:none}.graph-desmos-item{text-align:left;width:100%;font-family:var(--font-sans);color:var(--ink);cursor:pointer;background:0 0;border:none;padding:6px 12px;font-size:12px;display:block}.graph-desmos-item:hover{background:var(--bg-panel)}.graph-field-label{font-family:var(--font-sans);color:var(--ink-light);font-size:11px}.graph-unwrap-toggle{font-family:var(--font-sans);color:var(--ink-light);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-size:11px;display:inline-flex}.graph-unwrap-toggle[hidden]{display:none}.graph-unwrap-toggle input{cursor:pointer;margin:0}.graph-select{font-family:var(--font-sans);color:var(--ink);background:var(--bg-canvas);border:1px solid var(--rule);border-radius:var(--radius);-webkit-user-select:auto;user-select:auto;max-width:140px;padding:2px 6px;font-size:12px}.graph-select-math{font-family:var(--font-math), var(--font-sans);font-style:italic}.graph-select-wide{width:100%;max-width:none;padding:3px 6px}.graph-num{font-family:var(--font-sans);color:var(--ink);background:var(--bg-canvas);border:1px solid var(--rule);border-radius:var(--radius);-webkit-user-select:auto;user-select:auto;width:100%;padding:3px 6px;font-size:12px}.graph-num.graph-phase-bound{width:66px;max-width:72px}.graph-num.graph-fit-domain{width:64px;max-width:72px}.graph-num.graph-fit-degree{width:44px;max-width:44px}.graph-sweep-panel{background:var(--bg-panel);flex-direction:column;flex-shrink:0;gap:0;display:flex}.graph-sweep-form{grid-template-columns:1fr 1fr;gap:6px 10px;padding:8px 10px 4px;display:grid}.graph-sweep-field{flex-direction:column;gap:2px;display:flex}.graph-sweep-field:first-child,.graph-sweep-field:nth-child(2){grid-column:span 1}.graph-sweep-actions{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 10px 8px;display:flex}.graph-sweep-run{font-family:var(--font-sans);border:1px solid var(--ink);border-radius:var(--radius);background:var(--ink);color:var(--accent-inv);cursor:pointer;padding:6px 10px;font-size:12px;font-weight:600}.graph-sweep-run:hover{opacity:.9}.graph-sweep-run:disabled{opacity:.45;cursor:default}.graph-sweep-show-time[hidden]{display:none!important}.graph-readout{font-family:var(--font-sans);color:var(--ink-light);border-bottom:1px solid var(--rule-light);white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;flex-shrink:0;padding:4px 10px 6px;font-size:11px;overflow:hidden}.graph-plot-wrap{background:var(--bg-canvas);cursor:crosshair;touch-action:none;flex:1;min-height:0;position:relative}.graph-plot-wrap.graph-plot-panning{cursor:grabbing}.graph-plot{pointer-events:none;width:100%;height:100%;display:block}.graph-window-resize{cursor:nwse-resize;z-index:2;background:linear-gradient(135deg, transparent 0 55%, var(--ink-muted) 55% 62%, transparent 62% 72%, var(--ink-muted) 72% 78%, transparent 78%);width:16px;height:16px;position:absolute;bottom:0;right:0}
