:root{--bg-canvas:#090b10;--bg-surface:#121620;--bg-surface-elevated:#181e2b;--bg-surface-glass:#121620d9;--bg-surface-glass-heavy:#0e121af2;--border-subtle:#ffffff12;--border-medium:#ffffff24;--border-focus:#8b5cf699;--text-primary:#f8fafc;--text-secondary:#94a3b8;--text-muted:#64748b;--text-inverse:#090b10;--color-purple:#8b5cf6;--color-purple-glow:#8b5cf659;--color-indigo:#6366f1;--color-cyan:#06b6d4;--color-emerald:#10b981;--color-amber:#f59e0b;--color-rose:#f43f5e;--color-blue:#3b82f6;--status-idle:#64748b;--status-running:#3b82f6;--status-running-glow:#3b82f680;--status-success:#10b981;--status-success-glow:#10b98166;--status-failed:#ef4444;--status-failed-glow:#ef444466;--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-display:"Outfit", var(--font-sans);--font-mono:"JetBrains Mono", "Fira Code", monospace;--shadow-sm:0 2px 4px #00000040;--shadow-md:0 4px 12px #00000059;--shadow-lg:0 10px 25px #00000073;--shadow-node:0 8px 24px -4px #0009;--shadow-node-hover:0 12px 32px -4px #000c, 0 0 20px var(--color-purple-glow);--backdrop-blur:blur(16px);--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-full:9999px;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-normal:.25s cubic-bezier(.4, 0, .2, 1)}*{box-sizing:border-box;margin:0;padding:0}body,html{background-color:var(--bg-canvas);width:100%;height:100%;color:var(--text-primary);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden}#root{flex-direction:column;width:100%;height:100%;display:flex}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#ffffff40}.canvas-wrapper{-webkit-user-select:none;user-select:none;background-color:var(--bg-canvas);background-image:radial-gradient(#ffffff14 1.2px,#0000 1.2px);background-size:24px 24px;flex:1;width:100%;position:relative;overflow:hidden}.canvas-transform-layer{transform-origin:0 0;will-change:transform;width:100%;height:100%;position:absolute;top:0;left:0}.canvas-connections-svg{pointer-events:none;z-index:1;width:10000px;height:10000px;position:absolute;top:0;left:0;overflow:visible}.bezier-edge-path{fill:none;stroke:#ffffff38;stroke-width:3px;pointer-events:stroke;cursor:pointer;transition:stroke .2s,stroke-width .2s}.bezier-edge-path:hover{stroke:var(--color-purple);stroke-width:4px}.bezier-edge-path.edge-active{stroke:var(--color-purple);stroke-width:3.5px}.bezier-edge-flow{fill:none;stroke:#a78bfa;stroke-width:3.5px;stroke-dasharray:8 12;pointer-events:none;animation:1s linear infinite flowPulse}@keyframes flowPulse{0%{stroke-dashoffset:40px}to{stroke-dashoffset:0}}.edge-label-pill{background:var(--bg-surface-elevated);border:1px solid var(--border-medium);border-radius:var(--radius-full);color:var(--text-secondary);box-shadow:var(--shadow-sm);z-index:5;pointer-events:auto;cursor:pointer;transition:var(--transition-fast);align-items:center;gap:4px;padding:3px 8px;font-size:11px;font-weight:500;display:flex;position:absolute;transform:translate(-50%,-50%)}.edge-label-pill:hover{border-color:var(--color-purple);color:var(--text-primary);transform:translate(-50%,-50%)scale(1.05)}.canvas-controls{background:var(--bg-surface-glass);-webkit-backdrop-filter:var(--backdrop-blur);backdrop-filter:var(--backdrop-blur);border:1px solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-md);z-index:20;align-items:center;gap:4px;padding:4px;display:flex;position:absolute;bottom:24px;left:24px}.canvas-control-btn{color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;width:32px;height:32px;transition:var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;display:flex}.canvas-control-btn:hover{color:var(--text-primary);background:#ffffff14}.canvas-zoom-label{color:var(--text-muted);text-align:center;min-width:44px;font-size:12px;font-weight:500;font-family:var(--font-mono);padding:0 6px}.canvas-add-btn{background:linear-gradient(135deg, var(--color-purple), var(--color-indigo));color:#fff;border-radius:var(--radius-full);font-family:var(--font-display);cursor:pointer;box-shadow:0 4px 20px var(--color-purple-glow), var(--shadow-md);z-index:20;border:1px solid #fff3;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.canvas-add-btn:hover{box-shadow:0 6px 28px #8b5cf680, var(--shadow-lg);transform:translate(-50%)translateY(-2px)scale(1.03)}.canvas-add-btn:active{transform:translate(-50%)translateY(0)scale(.98)}.workflow-node-wrapper{-webkit-user-select:none;user-select:none;cursor:grab;z-index:10;width:96px;transition:filter var(--transition-fast);flex-direction:column;align-items:center;display:flex;position:absolute}.workflow-node-wrapper:active{cursor:grabbing}.workflow-node-wrapper.node-selected .node-circle{box-shadow:0 0 0 3px #fff, 0 0 25px var(--color-purple)}.node-circle{background:var(--bg-surface-elevated);width:80px;height:80px;box-shadow:var(--shadow-node);color:#fff;border:2.5px solid #ffffff26;border-radius:50%;justify-content:center;align-items:center;transition:all .25s cubic-bezier(.4,0,.2,1);display:flex;position:relative}.workflow-node-wrapper:hover .node-circle{box-shadow:var(--shadow-node-hover);border-color:#ffffff59;transform:translateY(-2px)scale(1.04)}.node-circle-inner{border-radius:50%;justify-content:center;align-items:center;width:66px;height:66px;display:flex;box-shadow:inset 0 2px 6px #ffffff4d,inset 0 -4px 8px #0006}.node-step-badge{background:var(--bg-surface);border:1.5px solid var(--border-medium);color:var(--text-primary);font-family:var(--font-mono);width:22px;height:22px;box-shadow:var(--shadow-sm);z-index:5;border-radius:50%;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex;position:absolute;top:-4px;left:-4px}.node-inspector-bubble{color:#fff;border-radius:var(--radius-full);cursor:pointer;border:2px solid var(--bg-surface);z-index:6;background:#10b981;justify-content:center;align-items:center;gap:2px;min-width:22px;height:22px;padding:0 4px;font-size:11px;font-weight:700;animation:.3s cubic-bezier(.175,.885,.32,1.275) popIn;display:flex;position:absolute;top:-6px;right:-6px;box-shadow:0 2px 8px #10b98180}.node-inspector-bubble:hover{background:#059669;transform:scale(1.15)}@keyframes popIn{0%{transform:scale(0)}to{transform:scale(1)}}.node-port{background:var(--bg-surface-elevated);cursor:crosshair;width:14px;height:14px;transition:var(--transition-fast);z-index:8;border:2px solid #ffffff4d;border-radius:50%;position:absolute;top:50%;transform:translateY(-50%)}.node-port:hover{background:var(--color-purple);box-shadow:0 0 8px var(--color-purple);border-color:#fff;transform:translateY(-50%)scale(1.3)}.node-port-left{left:-7px}.node-port-right{right:-7px}.node-label-container{text-align:center;flex-direction:column;align-items:center;width:140px;margin-top:8px;display:flex}.node-title{color:var(--text-primary);text-shadow:0 2px 4px #000c;white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:12.5px;font-weight:600;line-height:1.25;overflow:hidden}.node-subtitle{color:var(--text-muted);margin-top:2px;font-size:11px}.node-circle.status-running{border-color:var(--status-running);box-shadow:0 0 20px var(--status-running-glow), inset 0 0 15px var(--status-running-glow);animation:1.2s ease-in-out infinite pulseRunning}@keyframes pulseRunning{0%,to{box-shadow:0 0 15px var(--status-running-glow);transform:scale(1)}50%{box-shadow:0 0 35px var(--status-running-glow);transform:scale(1.05)}}.node-circle.status-success{border-color:var(--status-success);box-shadow:0 0 20px var(--status-success-glow)}.node-circle.status-failed{border-color:var(--status-failed);box-shadow:0 0 25px var(--status-failed-glow);animation:.4s shake}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-4px)}75%{transform:translate(4px)}}.config-drawer{background:var(--bg-surface-glass-heavy);width:440px;height:100vh;-webkit-backdrop-filter:var(--backdrop-blur);backdrop-filter:var(--backdrop-blur);border-left:1px solid var(--border-medium);z-index:50;flex-direction:column;animation:.25s cubic-bezier(.16,1,.3,1) slideDrawer;display:flex;position:fixed;top:0;right:0;box-shadow:-10px 0 35px #0009}@keyframes slideDrawer{0%{transform:translate(100%)}to{transform:translate(0)}}.drawer-header{border-bottom:1px solid var(--border-subtle);background:#ffffff05;justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.drawer-title-group{align-items:center;gap:12px;display:flex}.drawer-module-icon{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;display:flex;box-shadow:0 2px 10px #0006}.drawer-title{font-family:var(--font-display);color:var(--text-primary);font-size:16px;font-weight:700}.drawer-subtitle{color:var(--text-muted);margin-top:2px;font-size:12px}.drawer-close-btn{color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-sm);transition:var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;padding:6px;display:flex}.drawer-close-btn:hover{color:var(--text-primary);background:#ffffff1a}.drawer-content{flex-direction:column;flex:1;gap:20px;padding:24px;display:flex;overflow-y:auto}.form-group{flex-direction:column;gap:8px;display:flex}.form-label-row{justify-content:space-between;align-items:center;display:flex}.form-label{color:var(--text-primary);font-size:13px;font-weight:600}.form-required{color:var(--color-rose);margin-left:4px}.form-pill-btn{color:var(--color-purple);border-radius:var(--radius-full);cursor:pointer;transition:var(--transition-fast);background:#8b5cf61f;border:1px solid #8b5cf64d;align-items:center;gap:4px;padding:2px 8px;font-size:11px;display:flex}.form-pill-btn:hover{color:#fff;background:#8b5cf640}.form-input,.form-textarea,.form-select{background:var(--bg-surface);border:1px solid var(--border-medium);border-radius:var(--radius-sm);width:100%;font-family:var(--font-sans);color:var(--text-primary);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);outline:none;padding:10px 14px;font-size:13px}.form-textarea{min-height:90px;font-family:var(--font-mono);resize:vertical;font-size:12px;line-height:1.5}.form-input:focus,.form-textarea:focus,.form-select:focus{border-color:var(--color-purple);box-shadow:0 0 0 2px var(--color-purple-glow)}.form-hint{color:var(--text-muted);font-size:11.5px;line-height:1.4}.pill-picker-container{background:var(--bg-surface);border:1px solid var(--border-medium);border-radius:var(--radius-md);box-shadow:var(--shadow-md);max-height:220px;margin-top:6px;padding:12px;overflow-y:auto}.pill-picker-header{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:8px;font-size:11px;font-weight:700}.pill-picker-group{margin-bottom:10px}.pill-picker-module-title{color:var(--color-purple);align-items:center;gap:6px;margin-bottom:6px;font-size:12px;font-weight:600;display:flex}.pill-tags-list{flex-wrap:wrap;gap:6px;display:flex}.pill-tag{border:1px solid var(--border-medium);color:var(--text-secondary);font-family:var(--font-mono);border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);background:#ffffff0d;align-items:center;gap:4px;padding:3px 8px;font-size:11.5px;display:flex}.pill-tag:hover{background:var(--color-purple);color:#fff;border-color:var(--color-purple);transform:translateY(-1px)}.drawer-footer{border-top:1px solid var(--border-subtle);background:#ffffff05;justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.btn-delete-node{color:var(--color-rose);border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);background:#ef44441f;border:1px solid #ef444440;padding:8px 14px;font-size:13px;font-weight:500}.btn-delete-node:hover{background:#ef444440}.btn-save-drawer{background:var(--color-purple);color:#fff;border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);box-shadow:0 2px 8px var(--color-purple-glow);border:none;padding:8px 20px;font-size:13px;font-weight:600}.btn-save-drawer:hover{background:#7c3aed}.navbar{background:var(--bg-surface-glass);height:56px;-webkit-backdrop-filter:var(--backdrop-blur);backdrop-filter:var(--backdrop-blur);border-bottom:1px solid var(--border-subtle);z-index:30;box-shadow:var(--shadow-sm);justify-content:space-between;align-items:center;padding:0 20px;display:flex}.nav-left{align-items:center;gap:16px;display:flex}.brand-badge{font-family:var(--font-display);color:var(--text-primary);letter-spacing:-.02em;align-items:center;gap:8px;font-size:17px;font-weight:800;text-decoration:none;display:flex}.brand-logo-icon{background:linear-gradient(135deg, var(--color-purple), var(--color-indigo));color:#fff;width:28px;height:28px;box-shadow:0 2px 10px var(--color-purple-glow);border-radius:8px;justify-content:center;align-items:center;display:flex}.nav-divider{background:var(--border-medium);width:1px;height:22px}.scenario-title-input{color:var(--text-primary);font-family:var(--font-display);border-radius:var(--radius-sm);transition:var(--transition-fast);background:0 0;border:1px solid #0000;outline:none;min-width:180px;padding:4px 8px;font-size:15px;font-weight:600}.scenario-title-input:hover{border-color:var(--border-medium);background:#ffffff08}.scenario-title-input:focus{border-color:var(--color-purple);background:#ffffff0d}.nav-right{align-items:center;gap:10px;display:flex}.btn-run-once{color:#fff;border-radius:var(--radius-full);font-family:var(--font-display);cursor:pointer;box-shadow:0 4px 14px var(--color-purple-glow);background:linear-gradient(135deg,#8b5cf6 0%,#6366f1 100%);border:1px solid #fff3;align-items:center;gap:7px;padding:8px 18px;font-size:13.5px;font-weight:700;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.btn-run-once:hover:not(:disabled){background:linear-gradient(135deg,#9333ea 0%,#4f46e5 100%);transform:translateY(-1px);box-shadow:0 6px 20px #8b5cf680}.btn-run-once:disabled{opacity:.65;cursor:not-allowed}.btn-run-once.is-running{animation:1.5s infinite pulseRunningBtn}@keyframes pulseRunningBtn{0%,to{box-shadow:0 0 10px var(--color-purple-glow)}50%{box-shadow:0 0 25px #8b5cf6cc}}.nav-btn{border:1px solid var(--border-medium);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);background:#ffffff0a;align-items:center;gap:6px;padding:7px 13px;font-size:13px;font-weight:500;display:flex}.nav-btn:hover{color:var(--text-primary);border-color:var(--border-medium);background:#ffffff17}.nav-btn.btn-active{border-color:var(--color-purple);color:#fff;background:#8b5cf626}.modal-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:100;background:#000000b3;justify-content:center;align-items:center;padding:20px;animation:.15s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-card{background:var(--bg-surface-elevated);border:1px solid var(--border-medium);border-radius:var(--radius-lg);width:100%;max-width:640px;box-shadow:var(--shadow-lg);flex-direction:column;max-height:85vh;animation:.2s cubic-bezier(.16,1,.3,1) scaleUp;display:flex;overflow:hidden}@keyframes scaleUp{0%{transform:scale(.96)}to{transform:scale(1)}}.modal-header{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;padding:18px 24px;display:flex}.modal-title{font-family:var(--font-display);color:var(--text-primary);font-size:17px;font-weight:700}.modal-body{flex-direction:column;gap:16px;padding:24px;display:flex;overflow-y:auto}.module-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.module-card-item{background:var(--bg-surface);border:1px solid var(--border-medium);border-radius:var(--radius-md);cursor:pointer;flex-direction:column;align-items:flex-start;gap:10px;padding:14px;transition:all .2s;display:flex}.module-card-item:hover{border-color:var(--color-purple);box-shadow:0 4px 16px var(--color-purple-glow);transform:translateY(-2px)}.module-card-icon{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;display:flex}.module-card-name{color:var(--text-primary);font-size:13.5px;font-weight:600}.module-card-desc{color:var(--text-muted);font-size:11px;line-height:1.35}.json-tree-container{border:1px solid var(--border-medium);border-radius:var(--radius-sm);font-family:var(--font-mono);color:#38bdf8;white-space:pre-wrap;word-break:break-all;background:#090b10;max-height:320px;padding:12px;font-size:12px;overflow-y:auto}
