.node{cursor:pointer;-webkit-user-select:none;user-select:none}.node .node-shape{fill:var(--bg-secondary);stroke:var(--border-medium);stroke-width:2;transition:all .15s ease}.node.boundary .node-shape{fill:var(--accent-primary);stroke:var(--accent-primary)}.node.junction .node-shape{fill:var(--bg-tertiary);stroke:var(--text-secondary)}.node:hover .node-shape{stroke-width:3;filter:brightness(1.1)}.node.selected .node-shape{stroke:var(--accent-secondary);stroke-width:3}.node.connectable .node-shape{stroke:var(--accent-secondary);stroke-dasharray:4 2;animation:pulse .8s ease-in-out infinite}.node.connecting-from .node-shape{fill:var(--accent-secondary);stroke:var(--accent-secondary)}.node .selection-ring{fill:none;stroke:var(--accent-secondary);stroke-width:2;stroke-dasharray:6 3;opacity:.6;animation:spin 8s linear infinite}.node .node-label{fill:var(--text-primary);font-size:12px;font-weight:600;text-anchor:middle;pointer-events:none}.node.boundary .node-label{fill:#fff}.node .node-pressure{fill:var(--text-secondary);font-size:10px;font-family:var(--font-mono);text-anchor:middle;pointer-events:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes spin{0%{stroke-dashoffset:0}to{stroke-dashoffset:36}}.pipe{cursor:pointer}.pipe .pipe-hitarea{stroke:#ffffff03;stroke-width:20;fill:none;cursor:pointer;pointer-events:stroke}.pipe .pipe-line{stroke:var(--border-medium);stroke-width:4;stroke-linecap:round;fill:none;transition:stroke .15s ease,stroke-width .15s ease}.pipe:hover .pipe-line{stroke:var(--text-secondary);stroke-width:5}.pipe.selected .pipe-line{stroke:var(--accent-secondary);stroke-width:5}.pipe.has-flow .pipe-line{stroke:var(--accent-primary)}.pipe .flow-arrow{fill:var(--accent-primary);opacity:.9}.pipe .pipe-label{fill:var(--text-primary);font-size:11px;font-family:var(--font-mono);font-weight:500;text-anchor:middle}.pipe .pipe-info-bg{fill:var(--bg-secondary);stroke:var(--border-medium);stroke-width:1}.pipe .pipe-info-text{fill:var(--text-secondary);font-size:10px;font-family:var(--font-mono);text-anchor:middle}.pipe .valve-symbol{pointer-events:none}.pipe .valve-shape{fill:var(--bg-secondary);stroke:var(--text-secondary);stroke-width:2}.pipe .valve-shape.throttled{fill:var(--warning);stroke:var(--warning)}.pipe .valve-shape.closed{fill:var(--error);stroke:var(--error)}.pipe .valve-label{fill:var(--warning);font-size:9px;font-family:var(--font-mono);font-weight:600;text-anchor:middle}.pipe .orifice-symbol{pointer-events:none}.pipe .orifice-plate{stroke:var(--accent-secondary);stroke-width:3;stroke-linecap:round}.pipe .orifice-ring{fill:none;stroke:var(--accent-secondary);stroke-width:1.5;opacity:.6}.canvas-container{flex:1;overflow:hidden;position:relative}.canvas{width:100%;height:100%;display:block;background:var(--bg-primary)}.canvas-bg{cursor:default}.canvas.cursor-add,.canvas.cursor-add .canvas-bg{cursor:crosshair}.canvas.cursor-connect,.canvas.cursor-connect .canvas-bg{cursor:pointer}.toolbar{display:flex;align-items:center;gap:16px;padding:8px 16px;background:var(--bg-secondary);border-bottom:1px solid var(--border-subtle);height:56px}.toolbar-brand{display:flex;align-items:center;gap:8px;padding-right:16px;border-right:1px solid var(--border-subtle)}.brand-icon{width:28px;height:28px;fill:var(--accent-primary)}.brand-name{font-size:18px;font-weight:700;color:var(--text-primary)}.toolbar-tools{display:flex;align-items:center;gap:4px}.tool-divider{width:1px;height:24px;background:var(--border-subtle);margin:0 8px}.tool-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.tool-btn svg{width:18px;height:18px;fill:currentColor}.tool-btn:hover{background:var(--bg-tertiary);color:var(--text-primary)}.tool-btn.active{background:var(--accent-primary);color:#fff;border-color:var(--accent-primary)}.toolbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.action-btn{display:flex;align-items:center;gap:6px;padding:8px 16px;border:none;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s ease}.action-btn svg{width:16px;height:16px;fill:currentColor}.action-btn.solve{background:var(--accent-primary);color:#fff}.action-btn.solve:hover:not(:disabled){background:var(--accent-hover)}.action-btn.solve:disabled{background:var(--bg-tertiary);color:var(--text-disabled);cursor:not-allowed}.action-btn.clear{background:var(--bg-tertiary);color:var(--text-secondary)}.action-btn.clear:hover{background:var(--error);color:#fff}.toolbar-status{padding:6px 12px;border-radius:4px;font-size:12px;font-weight:600}.toolbar-status.success{background:#22c55e26;color:var(--success)}.toolbar-status.error{background:#ef444426;color:var(--error)}:root{--bg-primary: #0f0f0f;--bg-secondary: #1a1a1a;--bg-tertiary: #252525;--text-primary: #ffffff;--text-secondary: #a0a0a0;--text-disabled: #555555;--border-subtle: #2a2a2a;--border-medium: #3a3a3a;--accent-primary: #3b82f6;--accent-hover: #2563eb;--accent-secondary: #8b5cf6;--success: #22c55e;--error: #ef4444;--warning: #f59e0b;--grid-dot: rgba(255, 255, 255, .08);--grid-dot-large: rgba(255, 255, 255, .15);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "SF Mono", "Monaco", "Inconsolata", monospace}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-sans);background:var(--bg-primary);color:var(--text-primary);line-height:1.5;-webkit-font-smoothing:antialiased}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.main-content{display:flex;flex:1;overflow:hidden}.properties-panel{width:280px;background:var(--bg-secondary);border-left:1px solid var(--border-subtle);padding:16px;overflow-y:auto}.properties-panel h3{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);margin-bottom:16px}.property-group{display:flex;flex-direction:column;gap:12px}.property-group>label{font-size:14px;font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border-subtle)}.property-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}.property-row span:first-child{color:var(--text-secondary)}.property-row .value{color:var(--text-primary);font-family:var(--font-mono)}.property-row.result{background:var(--bg-tertiary);padding:8px;border-radius:4px;margin-top:4px}.property-row.result .value{color:var(--accent-primary);font-weight:600}.property-row input{width:100px;padding:6px 8px;background:var(--bg-tertiary);border:1px solid var(--border-medium);border-radius:4px;color:var(--text-primary);font-family:var(--font-mono);font-size:13px;text-align:right}.property-row input:focus,.property-row select:focus{outline:none;border-color:var(--accent-primary)}.property-row select{width:120px;padding:6px 8px;background:var(--bg-tertiary);border:1px solid var(--border-medium);border-radius:4px;color:var(--text-primary);font-size:13px;cursor:pointer}.property-subsection{margin-top:12px;padding-top:12px;border-top:1px solid var(--border-subtle)}.property-subsection .subsection-title{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-secondary);margin-bottom:8px}.delete-btn{margin-top:12px;padding:8px 12px;background:transparent;border:1px solid var(--error);border-radius:4px;color:var(--error);font-size:12px;font-weight:500;cursor:pointer;transition:all .15s ease}.delete-btn:hover{background:var(--error);color:#fff}.status-bar{display:flex;align-items:center;gap:16px;padding:8px 16px;background:var(--bg-secondary);border-top:1px solid var(--border-subtle);font-size:12px;color:var(--text-secondary)}.status-bar .mode-hint{color:var(--accent-secondary);font-weight:500}.status-bar .status-success{color:var(--success);font-weight:600;margin-left:auto}.status-bar .status-error{color:var(--error);font-weight:600;margin-left:auto}html,body,#root{height:100%;margin:0;padding:0}button,label{-webkit-user-select:none;user-select:none}:focus-visible{outline:2px solid var(--accent-primary);outline-offset:2px}
