:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color-scheme:dark;--bg: #0f0f12;--panel: #17171c;--panel-hi: #21212a;--text: #e8e8ee;--text-dim: #8a8a95;--accent: #6ea8ff;--border: #2a2a34}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100vh;width:100vw;background:var(--bg);color:var(--text);overflow:hidden}.app{display:grid;grid-template-columns:260px 1fr;height:100vh;width:100vw}.sidebar{background:var(--panel);border-right:1px solid var(--border);padding:16px 12px;overflow-y:auto}.sidebar h1{font-size:14px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim);margin:0 4px 12px}.sidebar .group{margin-top:12px;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim);padding:4px}.sidebar button{display:block;width:100%;text-align:left;background:transparent;color:var(--text);border:1px solid transparent;border-radius:6px;padding:8px 10px;margin:2px 0;font:inherit;cursor:pointer}.sidebar button:hover{background:var(--panel-hi)}.sidebar button.active{background:var(--panel-hi);border-color:var(--accent);color:var(--accent)}.viewport{position:relative;overflow:hidden}#leva__root{z-index:10}.viewport canvas{display:block}.empty-state{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-dim)}.loading{position:absolute;top:12px;left:12px;background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:12px;color:var(--text-dim)}.experiment-error{position:absolute;left:16px;bottom:16px;max-width:min(560px,calc(100vw - 300px));background:#17171cf5;border:1px solid #b64b4b;border-radius:6px;color:var(--text);padding:10px 12px;z-index:8;box-shadow:0 10px 30px #00000052}.experiment-error strong{display:block;margin-bottom:4px;color:#ff8a8a;font-size:12px}.experiment-error span{display:block;color:var(--text-dim);font-size:12px;line-height:1.4;overflow-wrap:anywhere}.experiment-error-canvas{position:static;width:320px;max-width:320px;transform:translate(-50%,-50%)}.knot-explorer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.knot-panel{position:absolute;left:18px;top:18px;width:min(440px,calc(100vw - 312px));max-height:calc(100vh - 36px);overflow-y:auto;pointer-events:auto;background:#17171cf0;border:1px solid var(--border);border-radius:8px;padding:14px;box-shadow:0 18px 45px #00000057}.knot-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.knot-header h2{margin:0 0 4px;font-size:18px;line-height:1.2;letter-spacing:0}.knot-header span,.knot-readout>span,.knot-readout label span{color:var(--text-dim);font-size:12px}.knot-header strong{flex:0 0 auto;color:#5fd6a2;border:1px solid rgba(95,214,162,.36);background:#5fd6a21a;border-radius:999px;padding:4px 8px;font-size:12px}.knot-degree{display:grid;grid-template-columns:52px 1fr 24px;align-items:center;gap:10px;color:var(--text);font-size:13px;margin-bottom:16px}.knot-select{display:grid;grid-template-columns:76px 1fr;align-items:center;gap:10px;color:var(--text);font-size:13px;margin-bottom:12px}.knot-select select{width:100%;min-width:0;color:var(--text);background:#111116;border:1px solid var(--border);border-radius:6px;padding:8px;font:inherit}.knot-degree input{width:100%}.knot-degree b{text-align:right}.knot-slider{position:relative;height:78px;margin:2px 6px 10px;cursor:ew-resize;touch-action:none}.knot-track{position:absolute;left:0;right:0;top:36px;height:6px;border-radius:999px;background:#30323a}.knot-tick{position:absolute;bottom:20px;width:3px;margin-left:-1.5px;border-radius:999px;background:#8ab4ff}.knot-cursor{position:absolute;top:8px;bottom:8px;width:2px;margin-left:-1px;background:#f7e36b;box-shadow:0 0 0 5px #f7e36b21}.knot-readout{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}.knot-readout>span,.knot-readout label{background:#ffffff0a;border:1px solid var(--border);border-radius:6px;padding:7px 8px;overflow-wrap:anywhere}.knot-readout label{display:grid;grid-template-columns:18px minmax(0,1fr);align-items:center;gap:6px}.knot-readout input{min-width:0;width:100%;color:var(--text);background:#111116;border:1px solid var(--border);border-radius:5px;padding:4px 5px;font:inherit;font-size:12px}.knot-input-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.knot-input-grid label{display:grid;gap:4px;color:var(--text-dim);font-size:11px}.knot-input-grid input{width:100%;min-width:0;color:var(--text);background:#111116;border:1px solid var(--border);border-radius:6px;padding:7px 6px;font:inherit}.knot-actions{display:flex;gap:8px;margin-top:12px}.knot-actions button{border:1px solid var(--border);border-radius:6px;background:var(--panel-hi);color:var(--text);padding:8px 10px;font:inherit;font-size:12px;cursor:pointer}.knot-actions button:hover{border-color:var(--accent)}.knot-section-title{margin:14px 0 8px;color:var(--text-dim);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.knot-weight-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.knot-warning{margin-top:12px;border:1px solid rgba(255,138,138,.45);background:#ff8a8a1a;color:#faa;border-radius:6px;padding:8px 10px;font-size:12px}.intersection-explorer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.intersection-panel{position:absolute;left:18px;top:18px;width:min(380px,calc(100vw - 312px));max-height:calc(100vh - 36px);overflow-y:auto;pointer-events:auto;background:#17171cf0;border:1px solid var(--border);border-radius:8px;padding:14px;box-shadow:0 18px 45px #00000057}.intersection-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.intersection-header h2{margin:0 0 4px;font-size:18px;line-height:1.2;letter-spacing:0}.intersection-header span,.intersection-select span,.intersection-results span{color:var(--text-dim);font-size:12px}.intersection-header strong{flex:0 0 auto;color:#f7e36b;border:1px solid rgba(247,227,107,.36);background:#f7e36b1a;border-radius:999px;padding:4px 8px;font-size:12px}.intersection-select{display:grid;grid-template-columns:52px 1fr;align-items:center;gap:10px;color:var(--text);font-size:13px;margin-bottom:12px}.intersection-select select{width:100%;min-width:0;color:var(--text);background:#111116;border:1px solid var(--border);border-radius:6px;padding:8px;font:inherit}.intersection-legend{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}.intersection-legend span{display:flex;align-items:center;gap:6px;min-width:0;color:var(--text-dim);background:#ffffff0a;border:1px solid var(--border);border-radius:6px;padding:7px 8px;font-size:12px}.intersection-legend i{display:block;width:10px;height:10px;border-radius:999px}.intersection-legend .curve-a{background:#6ea8ff}.intersection-legend .curve-b{background:#f4a261}.intersection-legend .curve-hit{background:#f7e36b}.intersection-results{display:grid;gap:8px}.intersection-result-row{display:grid;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:8px;background:#ffffff0a;border:1px solid var(--border);border-radius:6px;padding:8px}.intersection-result-row b{font-size:12px}.intersection-result-row span{overflow-wrap:anywhere}.intersection-warning{margin-top:12px;border:1px solid rgba(255,138,138,.45);background:#ff8a8a1a;color:#faa;border-radius:6px;padding:8px 10px;font-size:12px}.debug-viewer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:11;pointer-events:none}.debug-side-panel{position:absolute;top:10px;left:270px;width:300px;max-height:calc(100vh - 20px);display:grid;gap:8px;overflow-y:auto;pointer-events:auto}.debug-section{background:#17171cf2;border:1px solid var(--border);border-radius:8px;padding:12px;box-shadow:0 18px 45px #00000057}.debug-timeline,.debug-inspector{min-height:0}.debug-edge-faces{display:grid;gap:14px;margin-top:16px;padding-top:12px;border-top:1px solid var(--border)}.debug-edge-faces>h3,.debug-face-inspector>h3{margin:0;font-size:13px;letter-spacing:0}.debug-face-inspector{display:grid;gap:4px;padding:10px;border:1px solid rgba(255,255,255,.1);border-radius:7px;background:#ffffff06}.debug-panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.debug-panel-header h2,.debug-uv h3{margin:0;font-size:14px;letter-spacing:0}.debug-panel-header span{color:var(--text-dim);font-size:12px}.debug-header-actions{display:flex;gap:6px}.debug-section button{border:1px solid var(--border);border-radius:6px;background:var(--panel-hi);color:var(--text);padding:7px 9px;font:inherit;font-size:12px;cursor:pointer}.debug-section button:disabled{color:var(--text-dim);cursor:default}.debug-dump-list{display:grid;gap:6px}.debug-dump-list button{display:grid;grid-template-columns:38px minmax(0,1fr);gap:4px 8px;width:100%;text-align:left}.debug-dump-list button.active{border-color:var(--accent);color:var(--accent)}.debug-dump-list span,.debug-dump-list small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.debug-dump-list small{grid-column:2;color:var(--text-dim)}.debug-tree{min-height:0}.debug-tree-list{display:grid;gap:2px;max-height:260px;overflow-y:auto}.debug-tree-row{display:grid;grid-template-columns:16px 14px minmax(0,1fr) auto;align-items:center;gap:6px;border-radius:5px;padding:3px 4px;font-size:12px}.debug-tree-row:hover{background:#ffffff0d}.debug-tree-row.dimmed{color:var(--text-dim)}.debug-tree-row input{margin:0}.debug-section .debug-tree-caret{border:none;background:none;padding:0;color:var(--text-dim);line-height:1;text-align:center}.debug-tree-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.debug-tree-row small{color:var(--text-dim)}.debug-empty,.debug-error{color:var(--text-dim);border:1px solid var(--border);border-radius:6px;padding:8px;font-size:12px}.debug-error{margin-bottom:8px;color:#faa;border-color:#ff8a8a73;background:#ff8a8a1a}.debug-summary,.debug-alpha-grid{display:grid;gap:7px}.debug-kv{display:grid;grid-template-columns:96px minmax(0,1fr);align-items:start;gap:8px;border-bottom:1px solid rgba(255,255,255,.06);padding:6px 0;font-size:12px}.debug-kv span{color:var(--text-dim)}.debug-kv b{min-width:0;overflow-wrap:anywhere;font-weight:500}.debug-pre{max-height:180px;overflow:auto;background:#111116;border:1px solid var(--border);border-radius:6px;color:var(--text);padding:8px;font-size:11px;line-height:1.35;white-space:pre-wrap}.debug-checkbox{display:flex;align-items:center;gap:8px;border:1px solid var(--border);border-radius:6px;padding:7px 8px;margin:8px 0;color:var(--text);font-size:12px}.debug-checkbox input{margin:0}.debug-uv{display:grid;gap:12px;margin-top:12px}.debug-console-panel{position:absolute;right:10px;bottom:10px;left:578px;height:min(360px,46vh);display:grid;grid-template-rows:auto minmax(0,1fr) auto;max-height:calc(100vh - 20px);min-height:180px;pointer-events:auto}.debug-console-panel.is-collapsed{height:auto;min-height:0}.debug-console-panel.is-collapsed .debug-panel-header{margin-bottom:0}.debug-console-panel.is-collapsed .debug-console-output,.debug-console-panel.is-collapsed .debug-console-input-wrap{display:none}.debug-console-resize-handle{position:absolute;top:-7px;right:12px;left:12px;z-index:1;height:13px;cursor:ns-resize;touch-action:none}.debug-console-resize-handle:after{position:absolute;top:4px;left:50%;width:46px;height:3px;border-radius:999px;background:#ffffff38;content:"";transform:translate(-50%);transition:background .12s ease,width .12s ease}.debug-console-resize-handle:hover:after,.debug-console-resize-handle:focus-visible:after{width:64px;background:var(--accent)}.debug-console-resize-handle:focus-visible{outline:1px solid var(--accent);outline-offset:-2px}.debug-console-output{min-height:0;overflow:auto;border:1px solid var(--border);border-radius:6px 6px 0 0;background:#0c0c10f5;font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:12px}.debug-console-help{padding:12px;color:var(--text-dim);line-height:1.55}.debug-console-help code{color:#a9dcff}.debug-console-entry{padding:8px 10px;border-bottom:1px solid rgba(255,255,255,.06)}.debug-console-entry.error{color:#faa}.debug-console-command{display:flex;gap:8px;margin-bottom:5px;color:#a9dcff;white-space:pre-wrap}.debug-console-command span,.debug-console-prompt{color:var(--accent);font-weight:700}.debug-console-value{color:#d8dce6;overflow-wrap:anywhere}.debug-console-object{min-width:0}.debug-console-object-summary{display:inline-flex;align-items:center;gap:2px;max-width:100%}.debug-section .debug-console-disclosure{display:inline-flex;gap:5px;align-items:center;padding:0;border:0;background:transparent;color:#d8dce6;font-family:inherit}.debug-section .debug-console-topology-reference{min-width:0;padding:1px 4px;border:0;background:transparent;color:#a9dcff;font-family:inherit;overflow-wrap:anywhere}.debug-section .debug-console-topology-reference:hover{background:#69d8ff24;color:#d4f4ff}.debug-section .debug-console-topology-reference.selected{background:#f7e36b29;color:#f7e36b;box-shadow:inset 0 0 0 1px #f7e36b73}.debug-console-properties{display:grid;gap:3px;margin:5px 0 2px 14px;padding-left:10px;border-left:1px solid rgba(255,255,255,.12)}.debug-console-property{display:grid;grid-template-columns:minmax(80px,max-content) minmax(0,1fr);gap:10px;min-width:0}.debug-console-property>span{color:#c3a6ff}.debug-console-property code{color:var(--text-dim)}.debug-console-accessor{min-width:0}.debug-console-accessor .debug-console-disclosure code{color:#a9dcff;font-family:inherit}.debug-console-accessor-result{min-width:0;margin-top:5px}.debug-console-accessor-result.error{color:#faa}.debug-console-input-wrap{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:8px;padding:8px;border:1px solid var(--border);border-top:0;border-radius:0 0 6px 6px;background:var(--panel-hi)}.debug-console-prompt{padding-top:7px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.debug-console-input-wrap textarea{width:100%;min-height:31px;max-height:92px;resize:vertical;box-sizing:border-box;border:0;outline:0;background:transparent;color:var(--text);padding:7px 0;font:12px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace}.debug-console-completions{position:absolute;right:54px;bottom:calc(100% - 1px);left:27px;z-index:2;display:grid;max-height:220px;overflow:auto;border:1px solid var(--border);border-radius:6px;background:#17171d;box-shadow:0 14px 34px #0000006b}.debug-section .debug-console-completions button{border:0;border-radius:0;padding:6px 9px;background:transparent;text-align:left;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.debug-section .debug-console-completions button.active{background:#56b8ff2e;color:#a9dcff}@media (max-width: 980px){.debug-console-panel{left:270px}.debug-side-panel{max-height:calc(54vh - 20px)}}.debug-uv-face{display:grid;gap:6px}.debug-uv-svg{width:100%;height:220px}.debug-uv-svg rect{fill:#111116;stroke:var(--border)}.debug-uv-svg polyline{fill:none;stroke-width:2;vector-effect:non-scaling-stroke}.debug-uv-svg .debug-uv-pcurve{stroke:#aeb4c0;transition:stroke .1s ease,stroke-width .1s ease}.debug-uv-svg .debug-uv-pcurve.hovered{stroke:#69d8ff;stroke-width:5}.debug-uv-svg .debug-uv-pcurve.selected{stroke:#f7e36b;stroke-width:6}.debug-uv-svg .debug-uv-pcurve-hit{cursor:pointer;pointer-events:stroke;stroke:transparent;stroke-width:12}.debug-uv-svg .debug-uv-arrow-segment{pointer-events:none;stroke:transparent}.debug-uv-svg .debug-uv-start{cursor:pointer;fill:#65e6a8;vector-effect:non-scaling-stroke}.debug-uv-svg .debug-uv-end{cursor:pointer;fill:#ff9f68;vector-effect:non-scaling-stroke}.debug-uv-svg .debug-uv-start.hovered,.debug-uv-svg .debug-uv-end.hovered{fill:#69d8ff}.debug-uv-svg .debug-uv-start.selected,.debug-uv-svg .debug-uv-end.selected{fill:#f7e36b;stroke:#111116;stroke-width:1.5}.debug-uv-svg marker path{fill:none;stroke:#f7e36b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
