@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,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)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/space-grotesk-vietnamese-wght-normal-D0rl6rjA.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/space-grotesk-latin-ext-wght-normal-D9tNdqV9.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/space-grotesk-latin-wght-normal-BhU9QXUp.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#555;--xy-background-pattern-lines-color-default:#333;--xy-background-pattern-cross-color-default:#333;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.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__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray: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.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.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-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.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:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.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-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.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{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.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:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}:root{--bg:#060a12;--panel:#0b121e;--panel-2:#111a2a;--panel-3:#172235;--line:#1c2840;--line-2:#2a3957;--text:#e8effb;--text-2:#a9b8d2;--muted:#6f819f;--accent:#35e0ff;--accent-2:#2a7bff;--good:#3ddc84;--warn:#fab219;--bad:#ff5d7a;--sans:"Space Grotesk Variable", system-ui, sans-serif;--mono:"JetBrains Mono Variable", ui-monospace, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.45 var(--sans);-webkit-font-smoothing:antialiased;overflow:hidden}button,input,select{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0}h4{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 10px;font-size:10.5px;font-weight:600}.muted{color:var(--muted);font-size:12px}kbd{font:600 10px var(--mono);background:var(--panel-3);border:1px solid var(--line-2);color:var(--text-2);border-radius:5px;margin-right:6px;padding:2px 6px}.app{grid-template:"top top top"58px"side bench insp"1fr/248px 1fr 350px;height:100%;display:grid}.topbar{background:linear-gradient(180deg, #0d1626, var(--panel));border-bottom:1px solid var(--line);z-index:20;grid-area:top;align-items:center;gap:12px;padding:0 16px;display:flex;position:relative}.topbar:after{content:"";background:linear-gradient(90deg, transparent, var(--accent) 18%, var(--accent-2) 40%, transparent 75%);opacity:.55;height:1px;position:absolute;inset:auto 0 -1px}.sidebar{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;grid-area:side;min-height:0;padding:12px 10px 0;display:flex}.bench{background:radial-gradient(1200px 700px at 30% 10%, #0d1a30 0%, var(--bg) 60%);grid-area:bench;min-width:0;position:relative}.insp-wrap{background:var(--panel);border-left:1px solid var(--line);flex-direction:column;grid-area:insp;min-height:0;display:flex}.inspector{flex:1;min-height:0;overflow-y:auto}.sheet-grab,.fab,.scrim{display:none}.history{gap:2px;display:flex}.icon-btn:disabled{opacity:.3;cursor:default;background:0 0}.scroll{flex:1;min-height:0;padding:12px 2px 16px;overflow-y:auto}.spacer{flex:1}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:8px}.brand{align-items:center;gap:10px;width:222px;display:flex}.brand svg{filter:drop-shadow(0 0 10px #35e0ff73)}.brand b{letter-spacing:-.02em;font-size:19px;line-height:1;display:block}.brand em{color:var(--accent);font-style:normal}.brand span{color:var(--muted);letter-spacing:.12em;text-transform:uppercase;font-size:10px}.seg{background:var(--panel-2);border:1px solid var(--line);border-radius:9px;padding:3px;display:inline-flex}.seg.full{margin-bottom:10px;display:flex}.seg.full button{flex:1}.seg button{color:var(--text-2);text-transform:capitalize;border-radius:6px;padding:5px 12px;font-weight:500}.seg button.on{background:var(--panel-3);color:var(--text);box-shadow:inset 0 0 0 1px var(--line-2), 0 0 12px #35e0ff1f}.sim{background:var(--panel-2);border:1px solid var(--line);border-radius:22px;align-items:center;gap:8px;padding:4px 8px 4px 4px;display:flex}.round{background:var(--panel-3);width:32px;height:32px;color:var(--text);border:1px solid var(--line-2);border-radius:50%;place-items:center;display:grid}.round.on{background:linear-gradient(135deg, var(--accent), var(--accent-2));color:#04101f;border-color:#0000;box-shadow:0 0 16px #35e0ff66}.clock b{font:600 14px/1 var(--mono);letter-spacing:.04em;display:block}.clock span,.solver span{color:var(--muted);text-transform:uppercase;letter-spacing:.1em;font-size:9.5px}select{background:var(--panel-3);border:1px solid var(--line-2);border-radius:7px;outline:none;max-width:100%;padding:5px 8px}select:focus,input:focus{border-color:var(--accent)}.icon-btn{width:28px;height:28px;color:var(--text-2);border-radius:7px;flex:none;place-items:center;transition:all .15s;display:grid}.icon-btn:hover{background:var(--panel-3);color:var(--text)}.icon-btn.danger:hover{color:var(--bad)}.icon-btn.flip{transform:rotate(180deg)}.btn{background:var(--panel-2);border:1px solid var(--line);color:var(--text-2);border-radius:8px;align-items:center;gap:5px;padding:7px 13px;font-weight:500;transition:all .15s;display:inline-flex}.btn:hover{border-color:var(--line-2);color:var(--text)}.btn.primary{color:#fff;background:linear-gradient(135deg,#1e6bff,#19b8e6);border-color:#0000}.gas-badge{font:600 10px var(--mono);letter-spacing:.08em;color:#fab219;background:#fab21914;border:1px solid #fab21973;border-radius:12px;padding:4px 10px}.solver{align-items:center;gap:9px;margin-right:6px;display:flex}.solver b{font:500 11.5px/1.2 var(--mono);display:block}.solver i{background:var(--muted);border-radius:50%;width:8px;height:8px}.solver.ok i{background:var(--good);animation:2s infinite pulse;box-shadow:0 0 #3ddc8499}.solver.bad i{background:var(--bad)}.pop-wrap{position:relative}.popover{background:var(--panel-2);border:1px solid var(--line-2);border-radius:12px;width:250px;padding:12px;position:absolute;top:42px;right:0;box-shadow:0 20px 50px #0009}.share-link{width:100%;font:11px var(--mono,ui-monospace, monospace);color:var(--ink,#dbe6ff);background:var(--panel-3);border:1px solid var(--line-2);border-radius:8px;margin-top:8px;padding:7px 9px}.tabs{border-bottom:1px solid var(--line);gap:2px;margin-bottom:10px;display:flex}.tabs button{color:var(--muted);border-bottom:2px solid #0000;margin-bottom:-1px;padding:7px 11px;font-weight:500}.tabs.wide button{flex:1}.tabs button.on{color:var(--text);border-color:var(--accent)}.search{border:1px solid var(--line-2);background:#080e19;border-radius:9px;outline:none;width:100%;margin:2px 0 4px;padding:8px 11px}.search:focus{box-shadow:0 0 0 3px #35e0ff1f}.group-head{letter-spacing:.14em;text-transform:uppercase;width:100%;color:var(--muted);align-items:center;gap:8px;margin:12px 0 8px;padding:2px 4px;font-size:10.5px;font-weight:600;display:flex}.group-head:before{content:"›";font-size:14px;line-height:1;transition:transform .15s}.group-head.open:before{transform:rotate(90deg)}.group-head:hover{color:var(--text)}.group-head i{font:500 10px var(--mono);letter-spacing:0;background:var(--panel-3);border-radius:8px;margin-left:auto;padding:1px 6px;font-style:normal}.palette-item{border:1px solid var(--line);background:var(--panel-2);cursor:grab;border-radius:10px;align-items:center;gap:10px;margin-bottom:6px;padding:8px;transition:all .15s;display:flex}.palette-item:hover{border-color:var(--accent);transform:translate(3px);box-shadow:0 0 18px #35e0ff1f}.palette-icon,.insp-icon{border:1px solid var(--line);width:40px;height:40px;color:var(--text-2);background:#080e19;border-radius:9px;flex:none;place-items:center;display:grid}.palette-item b,.exp-item b{font-weight:600;display:block}.palette-item span,.exp-item span{color:var(--muted);font-size:11px;line-height:1.25;display:block}.sidebar h4{margin:14px 4px 8px}.howto{color:var(--muted);margin:16px 4px;font-size:11.5px}.howto p{margin:7px 0}.exp-item{text-align:left;border:1px solid #0000;border-radius:10px;align-items:center;gap:11px;width:100%;padding:9px 8px;transition:all .15s;display:flex}.exp-item i,.exp-head i{font:600 12px var(--mono);color:var(--accent);background:#35e0ff14;border:1px solid #35e0ff38;border-radius:8px;flex:none;place-items:center;width:32px;height:32px;font-style:normal;display:grid}.exp-item:hover{background:var(--panel-2)}.exp-item.on{background:var(--panel-2);border-color:var(--line-2);box-shadow:inset 3px 0 0 var(--accent)}.inspector section{border-bottom:1px solid var(--line);padding:14px 16px}.insp-head{border-bottom:1px solid var(--line);background:var(--panel);z-index:2;align-items:center;gap:11px;padding:14px 16px;display:flex;position:sticky;top:0}.insp-head>div:nth-child(2){flex:1;min-width:0}.insp-head span{color:var(--muted);font-size:11.5px}.insp-icon{color:var(--text)}.insp-name{background:0 0;border:1px solid #0000;border-radius:6px;outline:none;width:100%;margin-left:-5px;padding:1px 4px;font-size:16px;font-weight:600}.insp-name:hover{border-color:var(--line-2)}.hero{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px;display:grid}.hero>div{background:linear-gradient(180deg, var(--panel-2), #0c1422);border:1px solid var(--line);border-radius:10px;min-width:0;padding:9px 10px 8px}.hero b{font:600 19px/1.1 var(--mono);letter-spacing:-.03em;color:#fff;white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}.hero span{color:var(--muted);text-transform:uppercase;letter-spacing:.07em;white-space:nowrap;font-size:10px}.row,.field{color:var(--text-2);justify-content:space-between;align-items:center;gap:10px;padding:5px 0;display:flex}.row b{font:500 12.5px var(--mono);color:var(--text)}.row.good b{color:var(--good)}.row.warn b{color:var(--warn)}.row.bad b{color:var(--bad)}.field>span{flex:1;min-width:0}.field select{width:160px}.num{border:1px solid var(--line-2);background:#080e19;border-radius:7px;align-items:center;width:140px;display:flex;overflow:hidden}.num:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px #35e0ff1f}.num input{width:0;font:500 12.5px var(--mono);text-align:right;background:0 0;border:0;outline:none;flex:1;padding:5px 8px}.num span{color:var(--muted);min-width:34px;padding:0 8px 0 2px;font-size:11px}.field-slider{flex-wrap:wrap}.field-slider b{font:600 12.5px var(--mono);color:var(--accent)}input[type=range]{appearance:none;background:linear-gradient(90deg, var(--accent-2), var(--accent) var(--fill,50%), var(--panel-3) var(--fill,50%));border-radius:6px;outline:none;width:100%;height:6px;margin:4px 0 6px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:4px solid var(--accent);cursor:grab;background:#fff;border-radius:50%;width:18px;height:18px;box-shadow:0 0 12px #35e0ff99}.toggle{background:var(--panel-3);border:1px solid var(--line-2);font:600 11px var(--mono);color:var(--muted);border-radius:20px;align-items:center;gap:8px;padding:4px 12px 4px 5px;display:flex}.toggle i{background:var(--muted);border-radius:50%;width:18px;height:18px;transition:all .2s}.toggle.on{color:var(--good);border-color:#3ddc8480}.toggle.on i{background:var(--good);box-shadow:0 0 10px var(--good)}.field.pair{gap:6px}.field.pair .num{flex:1;width:auto}.seq-step{border-top:1px solid var(--line);margin-top:6px;padding-top:6px}.seq-step .field.pair span{opacity:.7;flex:none;font-size:11px}.seq-step select{flex:2;min-width:0}.surge-actions{flex-wrap:wrap;gap:8px;margin:8px 0 12px;display:flex}.btn:disabled{opacity:.5;cursor:default}.tip{padding:14px 16px}.chart{position:relative}.chart svg{width:100%;display:block;overflow:visible}.chart .grid{stroke:var(--line);stroke-width:1px}.chart .axis{stroke:var(--line-2)}.chart .crosshair{stroke:var(--text-2);stroke-dasharray:3 3;opacity:.6}.chart .tick{font:500 9.5px var(--mono);fill:var(--muted)}.chart .axis-label{font:500 10px var(--sans);fill:var(--muted)}.chart .marker-label{font:600 10px var(--mono);fill:var(--text);paint-order:stroke;stroke:var(--panel);stroke-width:4px}.chart-legend{color:var(--text-2);flex-wrap:wrap;gap:4px 12px;margin-bottom:4px;font-size:11px;display:flex}.chart-legend i,.chart-tip i{vertical-align:middle;border-radius:2px;width:10px;height:3px;margin-right:6px;display:inline-block}.chart-tip{pointer-events:none;border:1px solid var(--line-2);color:var(--text-2);white-space:nowrap;z-index:3;background:#080e19f0;border-radius:8px;flex-direction:column;gap:2px;padding:6px 9px;font-size:11px;display:flex;position:absolute;top:6px}.chart-tip b{color:var(--text);font-family:var(--mono)}.chart-tip em{color:var(--muted);font-style:normal}.chart-empty{height:120px;color:var(--muted);border:1px dashed var(--line-2);border-radius:10px;place-items:center;font-size:12px;display:grid}.react-flow{--xy-background-color:transparent}.eq{cursor:grab;position:relative}.eq-art{transform-origin:50%;position:absolute}.eq-art>svg{transition:filter .2s;display:block;overflow:visible}.eq.is-selected .eq-art>svg{filter:drop-shadow(0 0 3px var(--accent)) drop-shadow(0 0 14px #35e0ff8c)}.eq.is-off .eq-art>svg{filter:grayscale()opacity(.45)}.eq-label{white-space:nowrap;text-align:center;pointer-events:none;line-height:1.25;position:absolute;top:calc(100% + 5px);left:50%;transform:translate(-50%)}.eq-label b{color:var(--text);text-shadow:0 1px 4px #000;font-size:11.5px;font-weight:600;display:block}.eq-label span{font:500 10px var(--mono);color:var(--text-2);text-shadow:0 1px 4px #000}.eq-junction .eq-label{top:calc(100% + 1px)}.eq-badge{width:20px;height:20px;font:700 12px var(--mono);color:#1a1002;background:var(--warn);box-shadow:0 0 0 3px var(--bg), 0 0 14px var(--warn);border-radius:50%;place-items:center;animation:1.2s ease-in-out infinite bob;display:grid;position:absolute;top:-6px;right:-6px}.eq-badge.error{background:var(--bad);box-shadow:0 0 0 3px var(--bg), 0 0 14px var(--bad);color:#fff}.port.react-flow__handle{background:var(--bg);border:2.5px solid var(--line-2);opacity:0;width:12px;height:12px;transition:opacity .15s,border-color .15s,transform .15s}.eq:hover .port,.eq.is-selected .port,.react-flow__handle.connectingfrom,.react-flow__handle.connectingto{opacity:1}.port.react-flow__handle:hover,.port.react-flow__handle.connectingto{border-color:var(--accent);box-shadow:0 0 10px var(--accent)}.eq-junction .port.react-flow__handle{width:9px;height:9px}.node-slider{--fill:0%;border:1px solid var(--line-2);position:absolute;top:calc(100% + 38px);left:-14px;background:var(--panel-3)!important;width:calc(100% + 28px)!important}.svg-readout{font:600 15px var(--mono);fill:#fff;text-anchor:middle;paint-order:stroke;stroke:#0410288c;stroke-width:3px}.svg-readout.big{font-size:20px}.svg-readout.small{stroke:none;font-size:11px}.svg-unit{fill:#d5ecff;font-size:.62em}.svg-caption{font:600 7px var(--sans);letter-spacing:.16em;fill:#bcd7f5;text-anchor:middle;opacity:.8}.svg-tick{font:500 6.5px var(--mono);fill:var(--muted);text-anchor:middle}.svg-tag{font:700 8px var(--mono);fill:var(--accent);text-anchor:middle}.svg-lcd{font:600 15px var(--mono);fill:#5dffb4;text-anchor:end;filter:drop-shadow(0 0 4px #5dffb499)}.svg-lcd.turned{text-anchor:middle;font-size:11px}.svg-lcd-unit.turned{text-anchor:middle}.svg-tag.big{font-size:11px}.svg-port{font:700 7px var(--mono);text-anchor:middle;fill:#ff8fa6}.svg-port.lo{fill:#7fb4ff}.svg-lcd-unit{font:500 7px var(--mono);fill:#2f9d6d;text-anchor:end}.wave{animation:2.6s linear infinite wave}.wave-slow{animation-duration:4.2s;animation-direction:reverse}.bubble{fill:#cdf4ff;opacity:0;animation:3.4s ease-in infinite bubble}.bubble.b2{animation-delay:1.1s}.bubble.b3{animation-delay:2.3s}.impeller{animation:1s linear infinite spin}.led{animation:1.6s ease-in-out infinite led}.cavitating .pump-ring{stroke:var(--bad);animation:.5s ease-in-out infinite cav}.spray{fill:none;stroke:#bfefff;stroke-width:2.4px;stroke-linecap:round;stroke-dasharray:1.5 7;filter:drop-shadow(0 0 3px #4fd4ff);animation:.6s linear infinite spray}.port.port-signal.react-flow__handle{border-color:#9085e9;border-radius:3px;width:11px;height:11px;transform:translate(-50%,-50%)rotate(45deg)}.react-flow__handle-right.port-signal.react-flow__handle{transform:translate(50%,-50%)rotate(45deg)}.react-flow__handle-bottom.port-signal.react-flow__handle{transform:translate(-50%,50%)rotate(45deg)}.port.port-signal.react-flow__handle:hover,.port.port-signal.react-flow__handle.connectingto{border-color:#d9d2ff;box-shadow:0 0 10px #9085e9}.port.port-pv.react-flow__handle{border-color:#4fe0b0}.port.port-pv.react-flow__handle:hover,.port.port-pv.react-flow__handle.connectingto{border-color:#c9fff0;box-shadow:0 0 10px #4fe0b0}.node-hit{cursor:pointer;border-radius:50%;position:absolute;inset:14px}.signal-chip{font:600 10px var(--mono);color:#d9d2ff;pointer-events:none;background:#060a12e6;border:1px solid #4a4f7a;border-radius:9px;padding:1px 7px;position:absolute}.lamp-on{animation:.9s ease-in-out infinite led}.lamp-halo{animation:.9s ease-in-out infinite halo}.signal-live{animation:.7s linear infinite signal}.timer-state{letter-spacing:.08em;font-size:13px}.svg-lcd.timer-count{text-anchor:middle;fill:#cfd9ec;filter:none;font-size:11px}.pipe-flow{opacity:.92;pointer-events:none;animation:1s linear infinite flow}.pipe-label{border:1px solid var(--line-2);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);font:600 10.5px var(--mono);color:var(--text);pointer-events:none;white-space:nowrap;background:#060a12db;border-radius:12px;align-items:baseline;gap:4px;padding:3px 9px;display:flex;position:absolute}.pipe-label em{color:var(--muted);font-size:9.5px;font-style:normal;font-weight:500}.pipe-label .pipe-name{font-family:var(--sans);color:var(--accent);margin-right:4px;display:none}.pipe-label.is-selected{border-color:var(--accent);box-shadow:0 0 16px #35e0ff59}.pipe-label.is-full .pipe-name{display:inline}.pipe-label:not(.is-full){background:#060a129e;border-color:#0000;padding:1px 7px}.pipe-label .sep{background:var(--line-2);align-self:center;width:1px;height:9px;margin:0 3px}.exp-card{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--line-2);z-index:6;background:#0b121ee6;border-radius:14px;width:330px;transition:border-color .4s,box-shadow .4s;position:absolute;top:14px;left:14px;overflow:hidden;box-shadow:0 18px 50px #0000008c}.exp-card.done{border-color:#3ddc84b3;box-shadow:0 0 0 1px #3ddc844d,0 0 44px #3ddc8438}.exp-head{cursor:pointer;align-items:center;gap:11px;padding:11px 12px;display:flex}.exp-head>div{flex:1}.exp-head b{font-size:14.5px;display:block}.exp-head span{color:var(--muted);font-size:11.5px}.exp-body{color:var(--text-2);max-height:46vh;padding:0 14px 10px;font-size:12.5px;overflow-y:auto}.exp-body p{margin:8px 0}.exp-body ol{margin:8px 0;padding-left:18px}.exp-body li{margin:4px 0}.exp-body li::marker{color:var(--accent);font:600 11px var(--mono)}.formula{font:500 13px var(--mono);color:var(--accent);background:#35e0ff0f;border:1px solid #35e0ff2e;border-radius:8px;padding:8px 11px}.link{color:var(--muted);text-underline-offset:3px;padding:2px 0;font-size:11.5px;text-decoration:underline}.link:hover{color:var(--text)}.goal{border-top:1px solid var(--line);background:#ffffff05;align-items:center;gap:10px;padding:10px 12px;display:flex}.goal>div:nth-child(2){flex:1;min-width:0}.goal span{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:9.5px;display:block}.goal b{font-size:12px;font-weight:500;line-height:1.3;display:block}.goal em{font:600 12px var(--mono);color:var(--warn);text-align:right;max-width:104px;font-style:normal}.goal-check{border:2px solid var(--line-2);color:#04140a;border-radius:50%;flex:none;place-items:center;width:24px;height:24px;transition:all .3s;display:grid}.done .goal-check{background:var(--good);border-color:var(--good);box-shadow:0 0 18px var(--good);animation:.45s cubic-bezier(.3,1.6,.5,1) pop}.done .goal em,.done .goal span{color:var(--good)}.legend{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);z-index:5;background:#0b121ee0;border-radius:10px;width:200px;padding:9px 11px;position:absolute;bottom:14px;left:14px}.legend span{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:9.5px}.legend-bar{border-radius:4px;height:7px;margin:6px 0 4px}.legend-scale{font:500 10px var(--mono);color:var(--text-2);justify-content:space-between;display:flex}.legend-neg{margin-top:5px;display:block}.legend-neg i{background:#ff4fa3;border-radius:2px;width:8px;height:8px;margin-right:5px;display:inline-block}.alerts{z-index:5;flex-direction:column;align-items:center;gap:6px;max-width:46%;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.alert{border:1px solid var(--line-2);color:var(--text-2);text-align:left;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0b121eeb;border-radius:18px;align-items:center;gap:8px;padding:6px 12px 6px 6px;font-size:12px;display:flex}.alert i{width:18px;height:18px;font:700 11px var(--mono);background:var(--line-2);color:var(--text);border-radius:50%;flex:none;place-items:center;font-style:normal;display:grid}.alert.warn{border-color:#fab21980}.alert.warn i{background:var(--warn);color:#1a1002}.alert.error{color:var(--text);border-color:#ff5d7a99}.alert.error i{background:var(--bad);color:#fff}.empty{text-align:center;pointer-events:none;color:var(--muted);place-content:center;gap:6px;display:grid;position:absolute;inset:0}.empty b{color:var(--text-2);font-size:22px}.empty span{max-width:340px}.react-flow__controls{box-shadow:none;border:1px solid var(--line);border-radius:9px;overflow:hidden}.react-flow__controls-button{background:var(--panel-2);border-bottom:1px solid var(--line);fill:var(--text-2);width:28px;height:28px}.react-flow__controls-button:hover{background:var(--panel-3)}@keyframes halo{50%{opacity:.06}}@keyframes signal{to{stroke-dashoffset:-11px}}@keyframes flow{to{stroke-dashoffset:-18.1px}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes wave{to{transform:translate(44px)}}@keyframes spray{to{stroke-dashoffset:-8.5px}}@keyframes bubble{0%{opacity:0;transform:translateY(0)}20%{opacity:.6}to{opacity:0;transform:translateY(-46px)}}@keyframes pulse{70%{box-shadow:0 0 0 7px #3ddc8400}to{box-shadow:0 0 #3ddc8400}}@keyframes led{50%{opacity:.45}}@keyframes cav{50%{stroke-width:4px;opacity:.5}}@keyframes bob{50%{transform:translateY(-3px)}}@keyframes pop{0%{transform:scale(.3)}}@media (prefers-reduced-motion:reduce){.wave,.bubble,.eq-badge,.led{animation:none}}@media (pointer:coarse){.port.react-flow__handle{opacity:1;width:16px;height:16px}.eq-junction .port.react-flow__handle{width:12px;height:12px}}@media (width<=860px){.app{grid-template:"top"52px"bench"1fr/1fr}.topbar{scrollbar-width:none;gap:8px;padding:0 10px;overflow-x:auto}.topbar::-webkit-scrollbar{display:none}.topbar>*{flex:none}.brand{width:auto}.brand div,.solver div,.spacer{display:none}.popover{position:fixed;top:58px;right:8px}.sidebar{z-index:40;width:min(86vw,310px);transition:transform .28s cubic-bezier(.3,.9,.3,1);position:fixed;inset:52px auto 0 0;transform:translate(-102%);box-shadow:20px 0 60px #0009}.sheet-parts .sidebar{transform:none}.scrim{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:35;background:#03060c99;display:block;position:fixed;inset:52px 0 0}.insp-wrap{z-index:30;border-left:0;border-top:1px solid var(--line-2);border-radius:18px 18px 0 0;height:50vh;transition:transform .28s cubic-bezier(.3,.9,.3,1);position:fixed;inset:auto 0 0;overflow:hidden;transform:translateY(calc(100% - 84px));box-shadow:0 -18px 50px #0000008c}.sheet-insp .insp-wrap{transform:none}.sheet-grab{flex:none;place-items:center;width:100%;height:20px;display:grid}.sheet-grab i{background:var(--line-2);border-radius:4px;width:40px;height:4px}.insp-head{padding-top:4px}.fab{z-index:8;color:#04101f;background:linear-gradient(135deg, var(--accent), var(--accent-2));border-radius:50%;place-items:center;width:48px;height:48px;display:grid;position:absolute;bottom:98px;left:12px;box-shadow:0 8px 26px #35e0ff66}.exp-card{width:auto;top:10px;left:10px;right:10px}.exp-body{max-height:34vh}.legend{width:150px;bottom:98px;left:auto;right:10px}.alerts{width:max-content;max-width:92%;bottom:156px}.num,.field select{width:150px}.num input,select{font-size:16px}}.pipe-drop{opacity:.5;animation:.9s ease-in-out infinite halo}.pipe-bend{border:3px solid var(--accent-2);pointer-events:all;z-index:6;background:#fff;border-radius:50%;width:14px;height:14px;position:absolute;box-shadow:0 0 0 2px #04070d,0 0 12px #35e0ffb3}.pipe-bend.x{cursor:ew-resize}.pipe-bend.y{cursor:ns-resize}.react-flow__edgeupdater{cursor:grab}.react-flow__edge.selected .react-flow__edgeupdater{fill:var(--accent);fill-opacity:.14;stroke:var(--accent);stroke-width:1.5px;stroke-dasharray:3 3}.guide{pointer-events:none;z-index:4;position:absolute;top:0;left:0}.guide-x{border-left:1px dashed var(--accent);width:0;height:10000px}.guide-y{border-top:1px dashed var(--accent);width:10000px;height:0}.group-frame{border:1.5px dashed var(--line-2);pointer-events:none;z-index:-1;background:#2a7bff0a;border-radius:16px;position:absolute;top:0;left:0}.group-frame span{font:600 10.5px var(--sans);letter-spacing:.04em;text-transform:uppercase;color:var(--text-2);background:var(--bg);border-radius:6px;padding:0 7px;position:absolute;top:-9px;left:12px}.ctx-menu,.quick-add{z-index:30;border:1px solid var(--line-2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#0b121ef7;border-radius:11px;min-width:216px;padding:5px;position:absolute;box-shadow:0 18px 50px #0000008c}.ctx-menu>button{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;justify-content:space-between;align-items:center;gap:18px;padding:6px 9px;font-size:12.5px;display:flex}.ctx-menu>button:hover:not(:disabled){background:var(--panel-3)}.ctx-menu>button:disabled{color:var(--muted);cursor:default}.ctx-menu>button.danger{color:var(--bad)}.ctx-menu kbd{font:500 10.5px var(--mono);color:var(--muted)}.ctx-menu hr{border:0;border-top:1px solid var(--line);margin:4px 2px}.align-row{gap:2px;padding:2px;display:flex}.align-row button{width:26px;height:26px;color:var(--text-2);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;display:grid}.align-row button:hover:not(:disabled){background:var(--panel-3);color:var(--accent)}.align-row button:disabled{opacity:.3;cursor:default}.select-bar{z-index:8;border:1px solid var(--line-2);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#0b121ef0;border-radius:12px;align-items:center;gap:6px;padding:4px 8px 4px 12px;display:flex;position:absolute;top:12px;right:14px}.select-bar b{color:var(--accent);white-space:nowrap;margin-right:4px;font-size:12px}.select-bar>i{background:var(--line-2);width:1px;height:18px}.select-bar>button{color:var(--text-2);cursor:pointer;background:0 0;border:0;border-radius:7px;padding:4px 9px;font-size:12px}.select-bar>button:hover{background:var(--panel-3);color:var(--text)}.quick-scrim{z-index:29;position:absolute;inset:0}.quick-add{width:292px}.quick-add input{border:1px solid var(--line-2);background:var(--panel-2);width:100%;color:var(--text);border-radius:8px;outline:none;padding:8px 10px}.quick-add input:focus{border-color:var(--accent)}.quick-list{max-height:290px;margin-top:5px;overflow:auto}.quick-list button{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:7px;grid-template-columns:26px 1fr auto;align-items:center;gap:8px;padding:5px 8px;display:grid}.quick-list button svg{width:22px;height:22px}.quick-list button.on{background:var(--panel-3)}.quick-list button span{color:var(--muted);font-size:10.5px}.quick-list p{margin:0;padding:8px}.inline-edit{border:1px solid var(--accent);background:#0b121ef7;border-radius:11px;align-items:center;gap:8px;padding:7px 10px;display:flex;box-shadow:0 10px 34px #00000080,0 0 18px #35e0ff33}.inline-edit span{color:var(--text-2);white-space:nowrap;font-size:11.5px}.inline-edit input[type=range]{width:130px;accent-color:var(--accent)}.inline-edit input[type=number]{border:1px solid var(--line-2);background:var(--panel-2);width:68px;color:var(--text);font:600 12px var(--mono);border-radius:6px;padding:3px 6px}.inline-edit em{font:500 10.5px var(--mono);color:var(--muted);font-style:normal}.bench-toast{z-index:25;max-width:60%;color:var(--text);pointer-events:none;background:#0b121ef5;border:1px solid #fab2198c;border-radius:10px;padding:8px 14px;font-size:12.5px;position:absolute;top:58px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #00000073}.bench.connecting .port.react-flow__handle:not(.connectingfrom){opacity:.22}.bench.connecting-fluid .port.react-flow__handle:not(.port-signal),.bench.connecting-sig .port-signal[data-handleid=ctl],.bench.connecting-sig .port-signal[data-handleid=cin]:not(.port-pv),.bench.connecting-sig .port-signal[data-handleid=cin2],.bench.connecting-sig .port-signal[data-handleid=rsp],.bench.connecting-pv .port-signal.port-pv[data-handleid=cin],.bench.connecting-ctl .port-signal[data-handleid=sig],.bench.connecting-cin2 .port-signal[data-handleid=sig],.bench.connecting-rsp .port-signal[data-handleid=sig],.bench.connecting-cin .port-signal[data-handleid=sig],.bench.connecting-cin .port-signal[data-handleid=pv]{box-shadow:0 0 0 4px #35e0ff38,0 0 12px #35e0ff8c;opacity:1!important}.alert.goes{cursor:pointer}.alert.goes:hover{border-color:var(--accent)}.alerts.all{max-height:46%;padding:4px;overflow:auto}.alerts .link{font-size:11.5px}.palette-item .icon-btn{opacity:0;margin-left:auto}.palette-item:hover .icon-btn{opacity:1}.assembly-icon{font:700 13px var(--mono);color:var(--accent)}.bench-tools{z-index:8;align-items:center;gap:8px;display:flex;position:absolute;bottom:15px;right:56px}.bench.has-elev .bench-tools{bottom:176px}.grid-light{color:var(--text-2);background:var(--panel-2);border:1px solid var(--line);border-radius:9px;align-items:center;gap:7px;padding:5px 10px;display:flex}.grid-light input{width:92px;accent-color:var(--accent)}.elev-toggle{color:var(--text-2);background:var(--panel-2);border:1px solid var(--line);cursor:pointer;border-radius:9px;padding:5px 11px;font-size:11.5px}.elev-toggle:hover{color:var(--accent);border-color:var(--accent)}.elev-strip{z-index:7;border-top:1px solid var(--line-2);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#080d17f2;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.elev-strip header{color:var(--text-2);pointer-events:none;z-index:1;align-items:center;gap:14px;padding-left:78px;font-size:11px;display:flex;position:absolute;top:4px;left:0;right:6px}.elev-strip header b{color:var(--text);letter-spacing:.05em;text-transform:uppercase;font-size:10.5px}.elev-strip header em{color:var(--muted);margin-left:auto;font-style:normal}.elev-strip header button{pointer-events:all}.elev-strip .key:before{content:"";vertical-align:middle;border-top:2px solid #3987e5;width:16px;margin-right:6px;display:inline-block}.elev-strip .key-hgl:before{border-top:2px dashed #199e70}.elev-grid{stroke:var(--line);stroke-width:1px}.elev-zero{stroke:var(--line-2);stroke-width:1px}.elev-tick{font:500 9.5px var(--mono);fill:var(--muted)}.elev-pipe{stroke:#3987e5;stroke-width:2.5px;stroke-linecap:round}.elev-hgl{stroke:#199e70;stroke-width:2px;stroke-dasharray:5 4}.elev-water{stroke:#3987e5;stroke-opacity:.4;stroke-width:12px}.elev-part{cursor:ns-resize}.elev-dot{fill:#0b121e;stroke:#3987e5;stroke-width:2px}.elev-part:hover .elev-dot,.elev-part.on .elev-dot,.elev-part.dragging .elev-dot{fill:var(--accent);stroke:#fff}.elev-name{font:600 9.5px var(--sans);fill:var(--text-2);pointer-events:none}.bench.has-elev .legend,.bench.has-elev .alerts{bottom:182px}.bench.has-elev .react-flow__controls{bottom:172px}.react-flow__selection,.react-flow__nodesselection-rect{border:1px dashed var(--accent);background:#35e0ff12;border-radius:6px}.bench{-webkit-touch-callout:none}.bench .react-flow,.ctx-menu,.select-bar{-webkit-user-select:none;user-select:none}.pipe-bend,.elev-part{touch-action:none}.touch-tools{z-index:8;flex-direction:column-reverse;gap:10px;display:flex;position:absolute;bottom:156px;left:12px}.touch-tools.wide{bottom:96px}.touch-tools button{width:48px;height:48px;color:var(--text-2);border:1px solid var(--line-2);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0b121ef0;border-radius:50%;place-items:center;display:grid}.touch-tools button.on{color:#04101f;background:var(--accent);border-color:var(--accent);box-shadow:0 0 18px #35e0ff73}.touch-tools button.danger{color:var(--bad)}.bench.has-elev .touch-tools,.bench.has-elev .fab{bottom:182px}.bench.has-elev .touch-tools:not(.wide){bottom:240px}.select-bar{scrollbar-width:none;max-width:calc(100% - 28px);overflow-x:auto}@media (pointer:coarse){.ctx-menu>button{padding:11px 12px;font-size:14px}.ctx-menu kbd{display:none}.align-row button{width:38px;height:38px}.select-bar>button{padding:9px 11px}.pipe-bend{width:26px;height:26px}.quick-list button{padding:10px 8px}.inline-edit{padding:10px 12px}.inline-edit input[type=range]{width:170px}.elev-dot{r:7px}.elev-strip header em{display:none}}@media (width<=860px){.select-bar{inset:auto 10px 98px 70px}.bench.has-elev .select-bar{bottom:182px}.inline-edit.docked{z-index:20;flex-wrap:wrap;position:absolute;top:118px;left:10px;right:10px}.inline-edit.docked span{flex-basis:100%}.inline-edit.docked input[type=range]{flex:1;width:auto}}.howto .legal{color:var(--muted);margin-top:10px;font-size:10.5px}.howto .legal a{color:var(--text-2)}.analytics-preferences{z-index:9000;color:#e2e8f0;cursor:pointer;background:#172033;border:1px solid #64748b;border-radius:5px;padding:5px 9px;font:12px system-ui;position:fixed;bottom:8px;left:8px}.analytics-consent{z-index:9001;box-sizing:border-box;color:#e2e8f0;background:#172033;border:1px solid #64748b;border-radius:8px;width:calc(100vw - 16px);max-width:420px;padding:16px;font:14px/1.5 system-ui;position:fixed;bottom:42px;left:8px;box-shadow:0 4px 24px #0006}.analytics-consent[hidden]{display:none}.analytics-consent p{margin:0 0 12px}.analytics-consent a{color:#7dd3fc;margin-bottom:12px;display:block}.analytics-consent button{color:#fff;cursor:pointer;font:inherit;background:#25354b;border:1px solid #94a3b8;border-radius:4px;margin-right:8px;padding:7px 10px}.analytics-consent button:disabled{opacity:.5;cursor:default}.analytics-consent button:focus-visible,.analytics-preferences:focus-visible{outline-offset:2px;outline:2px solid #7dd3fc}
