: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}.floating-log-btn{position:absolute;top:12px;left:60px;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-log-btn:hover{background:var(--ex-accent-soft)}.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}.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}
