.uplot,.uplot *,.uplot *:before,.uplot *:after{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5;width:min-content}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{position:relative;-webkit-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;position:relative;width:100%;height:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:#00000012;position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{position:absolute;left:0;top:0;pointer-events:none;will-change:transform}.u-hz .u-cursor-x,.u-vt .u-cursor-y{height:100%;border-right:1px dashed #607D8B}.u-hz .u-cursor-y,.u-vt .u-cursor-x{width:100%;border-bottom:1px dashed #607D8B}.u-cursor-pt{position:absolute;top:0;left:0;border-radius:50%;border:0 solid;pointer-events:none;will-change:transform;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}:root{--ex-bg: #f7f7f8;--ex-panel-bg: #ffffff;--ex-panel-border: #e9e9ef;--ex-text: #1b1b1f;--ex-text-muted: #6e6e80;--ex-accent: #6965db;--ex-accent-soft: #ecebfa;--ex-radius: 12px;--ex-radius-sm: 8px;--ex-radius-pill: 999px;--ex-shadow: 0 6px 20px rgba(0, 0, 0, .08), 0 2px 6px rgba(0, 0, 0, .06);--ex-shadow-sm: 0 2px 8px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .04);--ex-grid-dot: #d6d6e0;--ex-font-ui: "Assistant", "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}body{font-family:var(--ex-font-ui);color:var(--ex-text);background:var(--ex-bg)}.app-container{position:relative;height:100vh;height:100dvh;width:100vw;background:var(--ex-bg);overflow:hidden}.main-content{position:absolute;inset:0;display:flex;min-height:0}.canvas-scroll{flex:1;min-width:0;min-height:0;overflow:auto;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.canvas-scroll svg{touch-action:pan-x pan-y}.canvas-scroll .joint-cell,.canvas-scroll .joint-link{touch-action:none}.floating-menu-btn{position:absolute;top:12px;left:12px;z-index:10;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow)}.floating-menu-btn:hover{background:var(--ex-accent-soft)}.floating-toolbar{position:absolute;top:12px;left:50%;transform:translate(-50%);display:flex;gap:8px;align-items:center;padding:6px 10px;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);z-index:10}.log-panel{position:fixed;left:12px;right:12px;bottom:12px;height:240px;display:flex;flex-direction:column;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);z-index:11;overflow:hidden}.log-panel-header{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 12px;border-bottom:1px solid var(--ex-panel-border);background:var(--ex-panel-bg)}.log-panel-title{font-size:14px;font-weight:600;color:var(--ex-text);margin-right:4px}.log-panel-count{font-size:11px;color:var(--ex-text-muted);font-variant-numeric:tabular-nums}.log-panel-spacer{flex:1}.log-panel-body{flex:1;overflow-y:auto;padding:6px 8px;background:var(--ex-bg);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px;line-height:1.4}.log-panel-empty{color:var(--ex-text-muted);font-family:var(--ex-font-ui);font-size:13px;padding:12px;text-align:center}.log-row{display:grid;grid-template-columns:90px 56px 110px 1fr;gap:8px;padding:1px 4px;border-radius:4px;white-space:pre-wrap;word-break:break-word;color:var(--ex-text)}.log-row:hover{background:#00000008}.log-time{color:var(--ex-text-muted)}.log-level{font-weight:600;text-transform:uppercase;font-size:11px;letter-spacing:.4px;align-self:center}.log-level-trace,.log-level-debug{color:#8884a0}.log-level-info{color:var(--ex-accent)}.log-level-warn{color:#b8860b}.log-level-error{color:#c53030}.log-row-warn{background:#ffc1070f}.log-row-error{background:#dc26260f}.log-source{font-size:10px;font-weight:600;letter-spacing:.3px;align-self:center;text-align:center;padding:1px 6px;border-radius:4px;background:var(--ex-panel-border);color:var(--ex-text-muted);white-space:nowrap}.log-source-cpp{background:var(--ex-accent-soft);color:var(--ex-accent)}.log-message{color:var(--ex-text)}.results-panel{width:420px;min-width:320px;margin:12px 12px 12px 0;display:flex;flex-direction:column;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);overflow:hidden}.results-panel-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--ex-panel-border);background:var(--ex-panel-bg)}.results-panel-title{font-size:14px;font-weight:600;color:var(--ex-text)}.results-panel-body{flex:1;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:8px;background:var(--ex-bg)}.results-chart{background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);padding:4px}.results-section-divider{font-size:11px;font-weight:600;color:var(--ex-text-muted);text-transform:uppercase;letter-spacing:.4px;padding:8px 4px 2px;border-top:1px solid var(--ex-panel-border);margin-top:4px}.results-graph-open-btn{display:flex;align-items:center;gap:6px;width:100%;padding:8px 10px;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);font-size:13px;font-weight:500;color:var(--ex-accent);font-family:var(--ex-font-ui);cursor:pointer;text-align:left;transition:background .15s,border-color .15s}.results-graph-open-btn:hover{background:var(--ex-accent-soft);border-color:var(--ex-accent)}.ctx-menu-backdrop{position:fixed;inset:0;z-index:1000}.ctx-menu{position:fixed;min-width:180px;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);padding:6px 0;font-size:13px;font-family:var(--ex-font-ui);color:var(--ex-text);-webkit-user-select:none;user-select:none;z-index:1001}.ctx-menu-title{padding:6px 12px;font-size:11px;font-weight:600;color:var(--ex-text-muted);text-transform:uppercase;letter-spacing:.4px}.ctx-menu-domain{position:relative}.ctx-menu-domain-label{display:flex;justify-content:space-between;align-items:center;padding:6px 12px;margin:0 4px;border-radius:var(--ex-radius-sm);cursor:default;color:var(--ex-text);font-weight:500}.ctx-menu-domain-label:hover{background:var(--ex-accent-soft);color:var(--ex-text)}.ctx-menu-arrow{font-size:10px;color:var(--ex-text-muted);margin-left:12px}.ctx-menu-submenu{position:absolute;left:100%;top:-6px;min-width:180px;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);padding:6px 0;z-index:1002}.ctx-menu-category-label{padding:6px 12px 2px;font-size:10px;font-weight:600;color:var(--ex-text-muted);text-transform:uppercase;letter-spacing:.3px}.ctx-menu-category+.ctx-menu-category{border-top:1px solid var(--ex-panel-border);margin-top:4px;padding-top:4px}.ctx-menu-item{padding:6px 12px 6px 20px;margin:0 4px;border-radius:var(--ex-radius-sm);cursor:default;color:var(--ex-text)}.ctx-menu-item:hover{background:var(--ex-accent-soft);color:var(--ex-text)}.canvas-ghost-active,.canvas-ghost-active *{cursor:crosshair!important}.wire-label-inline-editor-backdrop{position:fixed;inset:0;z-index:1000}.wire-label-inline-editor-anchor{position:fixed;transform:translate(-50%,-50%);z-index:1001;display:flex;flex-direction:column;align-items:center}.wire-label-inline-editor{font-family:sans-serif;font-size:14px;text-align:center;background:#fff;color:#000;border:1px solid #1976d2;border-radius:2px;padding:1px 4px;outline:none;box-shadow:0 0 0 2px #1976d226;caret-color:#1976d2;font-variant-numeric:normal}.wire-label-inline-editor.invalid{border-color:#d32f2f;color:#d32f2f;box-shadow:0 0 0 2px #d32f2f26;caret-color:#d32f2f}.wire-label-inline-editor-helper{margin-top:4px;background:#d32f2f;color:#fff;font-family:sans-serif;font-size:11px;line-height:1.3;padding:2px 6px;border-radius:2px;white-space:nowrap;pointer-events:none;box-shadow:0 1px 3px #0003}.scope-name-inline-editor-anchor{position:fixed;transform:translate(-50%,-50%);z-index:1001}.scope-name-inline-editor{font-family:sans-serif;font-size:12px;text-align:center;background:#fff;color:#333;border:1px solid #1976d2;border-radius:2px;padding:1px 4px;outline:none;box-shadow:0 0 0 2px #1976d226}.signal-ctx-menu{min-width:240px}.signal-ctx-menu-empty{padding:6px 12px 6px 20px;margin:0 4px;font-size:12px;color:var(--ex-text-muted);font-style:italic}.signal-ctx-scope-group+.signal-ctx-scope-group{margin-top:2px}.signal-ctx-scope-item{display:flex;align-items:center;justify-content:space-between}.signal-ctx-scope-arrow{color:var(--ex-text-muted);margin-left:8px}.signal-ctx-plot-submenu{margin:2px 6px 2px 16px;border-left:1px solid var(--ex-panel-border);padding-left:8px}.signal-ctx-plot-item{font-size:12px}.signal-ctx-menu-empty-plot{padding-left:12px}.signal-ctx-menu-new-plot{color:var(--ex-accent);font-size:12px}.signal-ctx-menu-divider{height:1px;background:var(--ex-panel-border);margin:4px 8px}.signal-ctx-menu-new{color:var(--ex-accent);font-weight:500}.scope-panel{display:flex;flex-direction:column;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);z-index:12;overflow:hidden;min-width:360px;min-height:220px;max-width:calc(100vw - 24px);max-height:90vh}.scope-panel-resize-handle{position:absolute;z-index:13;background:transparent;touch-action:none}.scope-panel-resize-handle:hover{background:var(--ex-accent-soft)}.scope-panel-resize-handle-n{top:0;left:12px;right:12px;height:5px;cursor:ns-resize}.scope-panel-resize-handle-s{bottom:0;left:12px;right:12px;height:5px;cursor:ns-resize}.scope-panel-resize-handle-e{right:0;top:12px;bottom:12px;width:5px;cursor:ew-resize}.scope-panel-resize-handle-w{left:0;top:12px;bottom:12px;width:5px;cursor:ew-resize}.scope-panel-resize-handle-ne{top:0;right:0;width:12px;height:12px;cursor:ne-resize}.scope-panel-resize-handle-nw{top:0;left:0;width:12px;height:12px;cursor:nw-resize}.scope-panel-resize-handle-se{bottom:0;right:0;width:12px;height:12px;cursor:se-resize}.scope-panel-resize-handle-sw{bottom:0;left:0;width:12px;height:12px;cursor:sw-resize}.scope-panel-header{display:flex;align-items:center;gap:8px;padding:4px 6px 4px 12px;height:36px;border-bottom:1px solid var(--ex-panel-border);background:var(--ex-panel-bg);cursor:grab;-webkit-user-select:none;user-select:none}.scope-panel-header:active{cursor:grabbing}.scope-panel-title-button{border:none;background:transparent;padding:2px 6px;margin:0;font-size:13px;font-weight:600;color:var(--ex-text);border-radius:var(--ex-radius-sm);cursor:text}.scope-panel-title-button:hover{background:var(--ex-bg)}.scope-panel-title-button:focus-visible{outline:1px solid var(--ex-accent);outline-offset:0}.scope-panel-title-input{min-width:120px;max-width:260px;border:1px solid var(--ex-accent);border-radius:var(--ex-radius-sm);background:var(--ex-bg);color:var(--ex-text);font-size:13px;font-weight:600;line-height:1.2;padding:2px 6px;-webkit-user-select:text;user-select:text}.scope-panel-meta{font-size:11px;color:var(--ex-text-muted);font-variant-numeric:tabular-nums}.scope-panel-spacer{flex:1}.scope-panel-add-plot{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:var(--ex-bg);color:var(--ex-text);font-size:12px;padding:2px 8px;cursor:pointer}.scope-panel-add-plot:hover{border-color:var(--ex-accent)}.scope-panel-body{display:flex;flex-direction:column;gap:8px;background:var(--ex-bg);padding:8px;overflow:auto;flex:1;min-height:0}.scope-panel-plot{display:flex;flex-direction:column;flex:1 1 0;min-height:160px;overflow:hidden;border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:var(--ex-panel-bg);padding:6px}.scope-panel-plot.active{border-color:var(--ex-accent)}.scope-panel-plot-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.scope-panel-plot-meta{font-size:11px;color:var(--ex-text-muted);font-variant-numeric:tabular-nums}.scope-panel-remove-plot{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:transparent;color:var(--ex-text-muted);font-size:11px;padding:2px 6px;cursor:pointer}.scope-panel-remove-plot:disabled{opacity:.5;cursor:not-allowed}.scope-panel-add-trace{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:var(--ex-bg);color:var(--ex-text);font-size:11px;padding:2px 6px;cursor:pointer}.scope-panel-add-trace:disabled{opacity:.5;cursor:not-allowed}.scope-panel-add-trace-menu{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.scope-panel-add-trace-option{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-pill);background:var(--ex-bg);color:var(--ex-text);font-size:11px;line-height:1.2;padding:3px 8px;cursor:pointer}.scope-panel-add-trace-option:hover{border-color:var(--ex-accent);color:var(--ex-accent)}.scope-panel-add-trace-empty{color:var(--ex-text-muted);font-size:11px;font-style:italic}.scope-panel-trace-list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.scope-panel-trace-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--ex-panel-border);border-radius:999px;padding:2px 6px;background:var(--ex-bg);cursor:grab}.scope-panel-trace-chip:active{cursor:grabbing}.scope-panel-trace-chip.dragging{opacity:.4}.scope-panel-subplot.drag-over{background:var(--ex-accent-soft);outline:2px dashed var(--ex-accent);outline-offset:-4px;border-radius:4px}.scope-panel-trace-swatch{width:8px;height:8px;border-radius:50%;flex:none}.scope-panel-trace-label{font-size:11px;color:var(--ex-text);border:none;background:transparent;padding:0;margin:0;font-family:inherit;cursor:pointer;border-radius:var(--ex-radius-sm)}.scope-panel-trace-label:hover{text-decoration:underline}.scope-panel-trace-label:focus-visible{outline:1px solid var(--ex-accent);outline-offset:1px}.scope-panel-remove-trace{border:none;background:transparent;color:var(--ex-text-muted);font-size:11px;line-height:1;cursor:pointer;padding:0}.scope-panel-plot-title{border:none;background:transparent;padding:2px 6px;margin:0;font-size:12px;font-weight:600;color:var(--ex-text);border-radius:var(--ex-radius-sm);cursor:text}.scope-panel-plot-title:hover{background:var(--ex-bg)}.scope-panel-plot-title-input,.scope-panel-subplot-title-input{min-width:100px;max-width:240px;border:1px solid var(--ex-accent);border-radius:var(--ex-radius-sm);background:var(--ex-bg);color:var(--ex-text);font-size:12px;font-weight:600;line-height:1.2;padding:2px 6px;-webkit-user-select:text;user-select:text;font-family:inherit}.scope-panel-subplot{display:flex;flex-direction:column;gap:4px;flex:1 1 0;min-height:0;overflow:hidden;border-left:2px solid var(--ex-panel-border);padding:4px 0 4px 8px;margin-top:6px}.scope-panel-subplot.solo{border-left:none;padding-left:0;margin-top:0}.scope-panel-plot.active .scope-panel-subplot{border-left-color:var(--ex-accent)}.scope-panel-plot.active .scope-panel-subplot.solo{border-left:none}.scope-panel-subplot-header{display:flex;align-items:center;gap:8px}.scope-panel-subplot-title{border:none;background:transparent;padding:2px 6px;margin:0;font-size:11px;font-weight:600;color:var(--ex-text);border-radius:var(--ex-radius-sm);cursor:text;text-transform:none}.scope-panel-subplot-title:hover{background:var(--ex-bg)}.scope-panel-subplot-meta{font-size:10px;color:var(--ex-text-muted);font-variant-numeric:tabular-nums}.scope-panel-add-subplot,.scope-panel-remove-subplot{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:transparent;color:var(--ex-text-muted);font-size:11px;padding:2px 6px;cursor:pointer}.scope-panel-add-subplot:hover,.scope-panel-remove-subplot:hover:not(:disabled){border-color:var(--ex-accent);color:var(--ex-text)}.scope-panel-remove-subplot:disabled{opacity:.5;cursor:not-allowed}.scope-panel-subplot-empty{display:flex;align-items:center;justify-content:center;flex:1 1 0;min-height:80px;color:var(--ex-text-muted);border:1px dashed var(--ex-panel-border);border-radius:var(--ex-radius-sm);font-size:11px}.scope-panel-subplot-canvas{width:100%;flex:1 1 0;min-height:48px}.scope-panel-add-trace-hint{flex-basis:100%;font-size:10px;color:var(--ex-text-muted);font-style:italic;margin-bottom:2px}.trace-color-picker-backdrop{position:fixed;inset:0;z-index:25;background:transparent}.trace-color-picker{z-index:26;background:var(--ex-panel-bg);border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius);box-shadow:var(--ex-shadow);padding:8px;min-width:200px;display:flex;flex-direction:column;gap:8px}.trace-color-picker-header{display:flex;align-items:center;gap:8px}.trace-color-picker-title{font-size:12px;font-weight:600;color:var(--ex-text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trace-color-picker-reset{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:transparent;color:var(--ex-text-muted);font-size:11px;padding:2px 6px;cursor:pointer}.trace-color-picker-reset:hover:not(:disabled){border-color:var(--ex-accent);color:var(--ex-text)}.trace-color-picker-reset:disabled{opacity:.5;cursor:not-allowed}.trace-color-picker-grid{display:grid;grid-template-columns:repeat(8,20px);gap:4px}.trace-color-picker-swatch{width:20px;height:20px;border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);padding:0;cursor:pointer;transition:transform 80ms ease}.trace-color-picker-swatch:hover{transform:scale(1.12)}.trace-color-picker-swatch.selected{outline:2px solid var(--ex-accent);outline-offset:1px}.trace-color-picker-custom-toggle{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:var(--ex-bg);color:var(--ex-text);font-size:11px;padding:4px 8px;cursor:pointer;align-self:flex-start}.trace-color-picker-custom-toggle:hover{border-color:var(--ex-accent)}.trace-color-picker-custom{display:flex;flex-direction:column;gap:6px}.trace-color-picker-custom .react-colorful{width:100%;height:160px}.trace-color-picker-hex-input{border:1px solid var(--ex-panel-border);border-radius:var(--ex-radius-sm);background:var(--ex-bg);color:var(--ex-text);font-family:inherit;font-size:12px;padding:4px 6px;text-transform:lowercase}.trace-color-picker-hex-input:focus{outline:1px solid var(--ex-accent);outline-offset:0}
