.react-flow{direction:ltr}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:#ffffff80;padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}@font-face{font-family:Latin Modern;font-style:normal;font-weight:400;font-display:swap;src:url(https://cdn.jsdelivr.net/npm/latex.css/fonts/LM-regular.woff2) format("woff2")}@font-face{font-family:Latin Modern;font-style:italic;font-weight:400;font-display:swap;src:url(https://cdn.jsdelivr.net/npm/latex.css/fonts/LM-italic.woff2) format("woff2")}@font-face{font-family:Latin Modern;font-style:normal;font-weight:700;font-display:swap;src:url(https://cdn.jsdelivr.net/npm/latex.css/fonts/LM-bold.woff2) format("woff2")}@font-face{font-family:Latin Modern;font-style:italic;font-weight:700;font-display:swap;src:url(https://cdn.jsdelivr.net/npm/latex.css/fonts/LM-bold-italic.woff2) format("woff2")}:root{--black: #0a0a0a;--white: #ffffff;--accent: #ffd400;--highlight: #ffee5a;--critical: #ff5757;--gray: #555555;--light: #f0f0f0;--green: #22c55e;--border: 2px solid var(--black);--border-thick: 3px solid var(--black);--border-card: 1px solid rgba(0, 0, 0, .1);--font-sans: "Inter", system-ui, sans-serif;--font-display: "Latin Modern", Georgia, serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--space-1: .5rem;--space-2: 1rem;--space-3: 1.5rem;--space-4: 2rem;--space-5: 3rem;--space-6: 4rem;--ease-snappy: cubic-bezier(.2, 0, 0, 1)}*,*:before,*:after{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%}body{font-family:var(--font-display);font-size:1.25rem;line-height:1.6;color:var(--black);background:var(--white);overflow:hidden;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body.cursor-hidden,body.cursor-hidden *{cursor:none!important}.app{position:relative;height:100vh;width:100vw;overflow:hidden}.scene-layer{position:absolute;inset:0;z-index:1}.header{position:absolute;top:0;left:0;right:0;z-index:100;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);background:#0a0a0a;border-bottom:3px solid #0a0a0a;padding:.5rem 1.5rem}.header__brand{display:flex;align-items:center;gap:.75rem}.header__wordmark{height:1.75rem;display:block}.header__sub{font-family:var(--font-sans);font-size:.625rem;letter-spacing:.16em;text-transform:uppercase;color:#999;padding-left:.75rem;border-left:1px solid #333}.header__right{display:flex;align-items:center;gap:.5rem}.nav-link{font-family:var(--font-sans);font-size:.6875rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#999;appearance:none;-webkit-appearance:none;background:transparent;border:none;outline:none;padding:.35rem .3rem;cursor:pointer;transition:color .15s var(--ease-snappy)}.nav-link:hover,.nav-link.is-active{color:var(--white)}.nav-link:focus{outline:none}.nav-link:focus-visible{outline:2px solid var(--white);outline-offset:2px}.status-badge{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-sans);font-size:.625rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#999;border:1px solid #333;padding:.3rem .6rem;background:#0a0a0a}.status-dot{width:8px;height:8px;border-radius:50%;background:#555;flex:none}.status-dot--live{background:var(--green);box-shadow:0 0 #22c55eb3}.status-dot--mock{background:var(--accent)}.status-dot--connecting{background:var(--white)}.status-dot--demo{background:var(--white);animation:pulse-dot-white 2s ease-in-out infinite}@keyframes pulse-dot-white{0%{box-shadow:0 0 #ffffff80}70%{box-shadow:0 0 0 6px #fff0}to{box-shadow:0 0 #fff0}}.status-dot--error{background:var(--critical)}@media (prefers-reduced-motion: no-preference){.status-dot--live{animation:pulse-dot 2s ease-in-out infinite}}.btn-chrome{font-family:var(--font-sans);font-size:.625rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#ccc;background:transparent;border:1px solid #333;padding:.3rem .6rem;cursor:pointer;transition:border-color .15s var(--ease-snappy),color .15s var(--ease-snappy)}.btn-chrome:hover{border-color:var(--accent);color:var(--white)}.btn-chrome:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.dcard{position:absolute;z-index:10;overflow:hidden;border:1px solid rgba(255,255,255,.16);color:var(--white);display:flex;flex-direction:column}.dcard--light{border:1px solid rgba(0,0,0,.16);color:var(--black)}.dcard--dragging{cursor:move}.card{display:flex;flex-direction:column;gap:.4rem;padding:.5rem .6rem;background:transparent;border:none;flex:1;min-height:0}.card__drag{cursor:move;user-select:none;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.section-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding-bottom:.35rem;border-bottom:1px solid rgba(255,255,255,.15)}.dcard--light .section-head{border-bottom-color:#0003}.card__title{font-family:var(--font-display);font-size:1.1rem;font-weight:500;letter-spacing:.02em;margin:0}.card__tools{display:flex;align-items:center;gap:.35rem;opacity:0;transition:opacity .15s var(--ease-snappy)}.dcard:hover .card__tools{opacity:1}.card__gear,.card__close{background:transparent;border:none;color:inherit;cursor:pointer;padding:2px;line-height:0;opacity:.7}.card__gear:hover,.card__close:hover{opacity:1;color:var(--accent)}.card__body{flex:1;min-height:0;overflow:auto;font-family:var(--font-mono);font-size:.8rem}.opacity-pop{position:absolute;top:2rem;right:.5rem;z-index:5;background:#0a0a0a;border:1px solid #333;padding:.4rem .6rem;display:flex;align-items:center;gap:.5rem}.dcard--light .opacity-pop{background:#fff;border-color:#00000040}.opacity-pop label{font-family:var(--font-sans);font-size:.5625rem;letter-spacing:.1em;text-transform:uppercase;color:#999}input[type=range]{-webkit-appearance:none;appearance:none;height:2px;background:#555;cursor:pointer}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:12px;height:12px;background:var(--accent);border:1px solid #0a0a0a}input[type=range]::-moz-range-thumb{width:12px;height:12px;background:var(--accent);border:1px solid #0a0a0a;border-radius:0}.card__resize{position:absolute;right:0;bottom:0;width:18px;height:18px;cursor:nwse-resize;z-index:6}.tag{display:inline-flex;border:1px solid #555}.tag__label{font-family:var(--font-mono);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:#999;padding:4px 9px}.tag__value{background:var(--highlight);color:#0a0a0a;font-family:var(--font-mono);font-size:.95rem;font-weight:600;padding:4px 10px;font-variant-numeric:tabular-nums}.bb{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.bb th,.bb td{text-align:left;padding:2px 6px;border:1px solid rgba(255,255,255,.12)}.dcard--light .bb th,.dcard--light .bb td{border-color:#00000024}.bb th{font-size:.5625rem;letter-spacing:.08em;text-transform:uppercase;color:#999;font-weight:600}.bb td{font-size:.75rem;color:var(--white)}.dcard--light .bb td{color:var(--black)}.bb td.num{text-align:right}.bar{position:relative;height:8px;background:#ffffff1a;overflow:hidden}.dcard--light .bar{background:#00000014}.bar__fill{position:absolute;top:0;bottom:0;background:var(--accent)}.bar__center{position:absolute;top:0;bottom:0;width:1px;left:50%;background:#fff6}.log-line{display:flex;gap:.5rem;font-family:var(--font-mono);font-size:.72rem;line-height:1.45;white-space:pre-wrap;word-break:break-word;padding:1px 0;border-bottom:1px solid rgba(255,255,255,.05)}.log-line__lvl{flex:none;width:3.2rem;font-weight:600;letter-spacing:.04em}.lvl-debug{color:#6b7280}.lvl-info{color:#9ca3af}.lvl-warn{color:var(--accent)}.lvl-error{color:var(--critical)}.lvl-fatal{color:var(--critical);font-weight:700}.log-line__src{flex:none;color:#6b7280;max-width:8rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-line__msg{flex:1;color:#d1d5db}.cam-frame{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#000}.cam-frame img,.cam-frame canvas{max-width:100%;max-height:100%;object-fit:contain;image-rendering:auto;display:block}.cam-empty{font-family:var(--font-mono);font-size:.72rem;color:#6b7280;text-align:center;padding:1rem}.kv-row{display:flex;flex-wrap:wrap;gap:.4rem}.field{display:flex;flex-direction:column;gap:.2rem}.field label{font-family:var(--font-sans);font-size:.5625rem;letter-spacing:.1em;text-transform:uppercase;color:#999}.field input[type=text],.field select{font-family:var(--font-mono);font-size:.75rem;background:#ffffff0d;color:var(--white);border:1px solid #333;padding:.3rem .4rem}.dcard--light .field input[type=text],.dcard--light .field select{background:#0000000a;color:var(--black);border-color:#0003}.field input:focus-visible,.field select:focus-visible{outline:none;border-color:var(--accent)}.muted{color:#6b7280}.chan-list{list-style:none;margin:0;padding:0;font-family:var(--font-mono);font-size:.7rem}.chan-list li{display:flex;justify-content:space-between;gap:.5rem;padding:1px 0;border-bottom:1px solid rgba(255,255,255,.06)}.chan-list .ok{color:var(--green)}.chan-list .off{color:#555}.rf-wrap{width:100%;height:100%}.react-flow__node.tf-node{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;width:auto;white-space:nowrap;padding:6px 9px;border:2px solid #0a0a0a;border-radius:0;background:#0a0a0a;color:#ffffff80}.react-flow__node.tf-node.tf-active{background:var(--accent);color:#0a0a0a}.react-flow__node.tf-node.tf-done{background:#0a0a0a;color:#fff}.react-flow__node.tf-node.tf-root{background:#fff;color:#0a0a0a}.react-flow__handle{opacity:0}.debug-fab{position:absolute;right:1rem;bottom:1rem;z-index:50;width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:#0a0a0a;border:1px solid #333;color:#fff;cursor:pointer}.debug-fab:hover{border-color:var(--accent)}.card__body::-webkit-scrollbar{width:6px;height:6px}.card__body::-webkit-scrollbar-thumb{background:#fff3}.dcard--light .card__body::-webkit-scrollbar-thumb{background:#0003}@media (prefers-reduced-motion: no-preference){.fade-in-up{opacity:0;animation:fade-in-up .42s var(--ease-snappy) forwards}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(12px);filter:blur(4px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}@keyframes pulse-dot{0%{box-shadow:0 0 #22c55e99}70%{box-shadow:0 0 0 6px #22c55e00}to{box-shadow:0 0 #22c55e00}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
