:root{color:#1f2933;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#eef2f3;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-width:1120px}button,input,select{font:inherit}button{min-height:36px;border:1px solid #c5ccd3;border-radius:7px;background:#f9fafb;color:#1f2933;cursor:pointer;font-weight:650}button:hover{border-color:#6c7f8f;background:#fff}button.ghost{background:transparent}button.danger{border-color:#d8a49a;color:#9f2f1f}input,select{width:100%;min-height:36px;border:1px solid #c9d1d8;border-radius:7px;background:#fff;color:#1f2933;padding:0 10px}label{display:grid;gap:6px;color:#52616f;font-size:12px;font-weight:700}h1,h2,h3,p{margin:0}h1{font-size:20px;line-height:1.1}h2{color:#26313b;font-size:12px;letter-spacing:0;text-transform:uppercase}h3{color:#52616f;font-size:12px;font-weight:750}.app-shell{display:grid;grid-template-columns:284px minmax(760px,1fr) 318px;height:100vh;overflow:hidden}.panel{background:#f7f9fa;border-color:#d9dee2}.palette,.inspector{display:grid;align-content:start;gap:20px;overflow-y:auto;padding:18px}.palette{border-right:1px solid #d9dee2}.inspector{border-left:1px solid #d9dee2}.brand{display:flex;align-items:center;justify-content:space-between;padding-bottom:14px;border-bottom:1px solid #d9dee2}.brand p,.inspector-header p,.muted{color:#6b7885;font-size:13px}.compact{line-height:1.35}.button-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.stack{display:grid;gap:12px}.metric-block{display:grid;gap:8px;margin-top:10px}.metric-row{display:flex;align-items:center;justify-content:space-between;border:1px solid #d9dee2;border-radius:8px;background:#fff;padding:10px 12px}.metric-row span{color:#52616f;font-size:13px;font-weight:650}.metric-row strong{color:#1f2933;font-size:18px}.compact-row{padding:7px 10px}.compact-row strong{font-size:14px}.rate-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}.rate-list li{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:8px;min-height:30px;border:1px solid #d9dee2;border-radius:8px;background:#fff;padding:6px 8px;color:#26313b;font-size:12px}.rate-list strong{color:#1f2933;font-size:12px}.item-dot{width:10px;height:10px;border-radius:999px}.workspace{display:grid;grid-template-rows:52px 1fr 152px;min-width:0;background:#e8edef}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #d4dbe0;background:#fbfcfc;padding:0 18px;color:#52616f;font-size:13px}.topbar strong{color:#1f2933}.topbar span{display:inline-block;width:16px}.canvas-controls{display:flex;align-items:center;gap:8px}.canvas-controls button{min-width:36px;min-height:32px;padding:0 10px}.canvas-controls strong{min-width:46px;text-align:center}.legend{display:flex;gap:16px}.legend span{display:flex;align-items:center;gap:6px;width:auto}.legend i{width:9px;height:9px;border-radius:999px}.ok{background:#2f8f68}.warn{background:#c28524}.bad{background:#c74433}.factory-canvas{width:100%;height:100%;user-select:none;-webkit-user-select:none;background:#e8edef;cursor:grab;touch-action:none}.factory-canvas.panning{cursor:grabbing}.factory-canvas.connecting{cursor:crosshair}.canvas-hitbox{fill:#e8edef}.canvas-grid{fill:url(#grid);pointer-events:none}.factory-node{cursor:grab;user-select:none;-webkit-user-select:none}.factory-node rect{fill:#fff;stroke:#9eacb7;stroke-width:1.5;filter:drop-shadow(0 6px 8px rgb(31 41 51 / .08))}.factory-node.selected rect{stroke:#1f6f8b;stroke-width:3}.factory-node .node-status-dot{fill:#6b7885}.factory-node.status-ok .node-status-dot{fill:#2f8f68}.factory-node.status-warn .node-status-dot{fill:#c28524}.factory-node.status-bad .node-status-dot{fill:#c74433}.factory-node.status-idle .node-status-dot{fill:#8b98a4}.node-port{stroke:#fff;stroke-width:2}.node-port-in{fill:#7a8794;pointer-events:none}.node-port-out{fill:#1f6f8b;cursor:crosshair}.node-port-out:hover{fill:#174f66}.node-port.full{fill:#9aa5af;opacity:.72}.node-port-out.full{cursor:not-allowed}.node-input rect{fill:#f8fbf7}.node-machine rect{fill:#fffaf2}.node-splitter rect,.node-merger rect{fill:#f7fbfc}.node-output rect{fill:#f6f8fc}.node-kind{fill:#52616f;font-size:11px;font-weight:800;pointer-events:none;user-select:none;-webkit-user-select:none;text-transform:uppercase}.node-name{fill:#1f2933;font-size:15px;font-weight:800;pointer-events:none;user-select:none;-webkit-user-select:none}.node-subtitle{fill:#52616f;font-size:11px;font-weight:650;pointer-events:none;user-select:none;-webkit-user-select:none}.belt{cursor:pointer}.belt path{fill:none;stroke:#64748b;stroke-width:4}.belt rect{fill:#fbfcfc;stroke:#c8d1d8}.belt text{fill:#1f2933;font-size:11px;font-weight:800;pointer-events:none;user-select:none;-webkit-user-select:none}.belt .belt-tier{fill:#6b7885;font-size:9px;font-weight:750}.belt.selected path{stroke-width:6}.belt.selected rect{stroke:#1f6f8b;stroke-width:2}.belt-calm path{stroke:#5b7c8f}.belt-warm path{stroke:#c28524}.belt-hot path{stroke:#c74433}.connection-preview path{fill:none;stroke:#1f6f8b;stroke-dasharray:10 8;stroke-linecap:round;stroke-width:4;pointer-events:none}.connection-preview.snapped path{stroke:#2f8f68;stroke-dasharray:none}.connection-preview circle{fill:#2f8f6829;stroke:#2f8f68;stroke-width:2;pointer-events:none}.inspector-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;overflow:auto;border-top:1px solid #d4dbe0;background:#fbfcfc;padding:14px 18px}.inspector-strip>div{min-width:0}.inspector-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:14px;border-bottom:1px solid #d9dee2}.connection-box{display:grid;gap:10px;margin-top:4px;border-top:1px solid #d9dee2;padding-top:14px}.compact-actions{margin-top:0;border-top:0;border-bottom:1px solid #d9dee2;padding-top:0;padding-bottom:14px}.notice{border:1px solid #e2c6a5;border-radius:8px;background:#fff7e8;color:#7b4e19;padding:10px 12px;font-size:12px;line-height:1.4}@media(max-width:1180px){body{min-width:0}.app-shell{grid-template-columns:240px minmax(620px,1fr) 290px}}
