:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh}#root{width:100%;min-height:100vh}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.\!fixed{position:fixed!important}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.break-all{word-break:break-all}.border{border-width:1px}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.underline{text-decoration-line:underline}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}html,body,#root{margin:0;padding:0;width:100%;height:100%;overflow:hidden;background-color:#fff}.workflow-scope{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;width:100%;height:100%;overflow:hidden;position:relative;box-sizing:border-box}.workflow-scope *,.workflow-scope *:before,.workflow-scope *:after{box-sizing:inherit}.workflow-scope button{font-family:inherit;font-size:100%;line-height:1.15;margin:0;text-transform:none;-webkit-appearance:button;cursor:pointer}.library-tree-row:hover{background-color:#e5e7eb}.workflow-scope.dark-mode .library-tree-row{color:#e2e8f0!important}.workflow-scope.dark-mode .library-tree-row:hover{background-color:#334155}.workflow-scope{--bg-app: #ffffff;--bg-panel: #f8f9fa;--bg-canvas: #f3f4f6;--bg-node: #ffffff;--border-color: #d1d5db;--split-color: #d1d5db;--text-primary: #333333;--text-secondary: #666666;--bg-input: #ffffff;--bg-hover: #eef2ff;--color-error: #b91c1c;--color-primary: #3b82f6;--port-disconnected: #f1f5f9;--port-idle: #d1d5db;--port-connected: #10b981;--port-hover: #3b82f6;--link-color: #888888;--font-size-title: 18px;--font-size-heading: 14px;--font-size-body: 12px;--font-size-caption: 11px;--font-size-code: 11px;--font-weight-title: 600;--font-weight-heading: 600;--font-weight-body: 400;--font-weight-caption: 400;--line-height-title: 1.4;--line-height-heading: 1.4;--line-height-body: 1.6;--line-height-caption: 1.4;--line-height-code: 1.6;--font-family-code: monospace}.workflow-scope.dark-mode{--bg-app: #0f172a;--bg-panel: #1e293b;--bg-canvas: #0B1435;--bg-node: #1A264E;--border-color: #334155;--split-color: #2a3548;--text-primary: #f1f5f9;--text-secondary: #94a3b8;--bg-input: #0f172a;--bg-hover: #334155;--color-error: #f87171;--color-primary: #60a5fa;--port-disconnected: #243049;--port-idle: var(--bg-node);--port-connected: #10b981;--port-hover: #60A5FA;--link-color: #64748B}.workflow-editor{width:100%;height:100%;overflow:hidden;background-color:transparent;display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none}.canvas-container{flex:1;position:relative;overflow:hidden;cursor:grab}.canvas-container:active{cursor:grabbing}.world{position:absolute;top:0;left:0;width:100%;height:100%;transform-origin:0 0}.link-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0;overflow:visible}.link-path{fill:none;stroke:var(--link-color);stroke-width:2px;cursor:pointer;transition:stroke .2s;pointer-events:stroke}.link-path:hover{stroke:var(--port-hover)}.link-path.selected{stroke:var(--port-hover);stroke-width:3px;filter:drop-shadow(0 0 2px rgba(59,130,246,.5))}.link-path.invalid{stroke:#ef4444;stroke-dasharray:6,4}.link-path.invalid:hover{stroke:#f87171}.link-path.invalid.selected{stroke:#ef4444;filter:drop-shadow(0 0 2px rgba(239,68,68,.6))}.link-hit-area{fill:none;stroke:transparent;stroke-width:15px;cursor:pointer;pointer-events:stroke}.node-wrapper{position:absolute;width:80px;z-index:10;cursor:grab;pointer-events:all}.node-wrapper:active{cursor:grabbing}.node-title{position:absolute;top:-20px;left:50%;transform:translate(-50%);font-size:12px;font-weight:600;color:var(--text-primary);text-align:center;white-space:nowrap;pointer-events:none;text-shadow:0 0 2px var(--bg-canvas);display:flex;align-items:center;gap:4px}.node-title-text{pointer-events:auto;display:inline-flex;align-items:baseline;gap:5px}.node-title-text.editable{cursor:text}.node-title-class{font-size:10px;font-weight:500;color:var(--text-secondary);opacity:.8;text-shadow:none}.node-title-input{pointer-events:auto;width:120px;padding:1px 4px;font-size:12px;font-weight:600;text-align:center;color:var(--text-primary);background:var(--bg-panel);border:1px solid var(--port-hover);border-radius:3px;outline:none}.node-instance-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background-color:#22c55e;color:#fff;font-size:10px;font-weight:600;pointer-events:auto}.node-box{width:100%;background:var(--bg-node);border:1px solid var(--border-color);border-radius:6px;box-shadow:0 1px 3px #00000014;position:relative;overflow:visible;transition:box-shadow .1s,border .1s}.node-box.selected{border-color:transparent}.node-box.selected:after{content:"";position:absolute;inset:-2px;border:2px solid var(--port-hover);border-radius:8px;box-shadow:0 0 0 2px #3b82f633,0 2px 8px #0000001f;pointer-events:none;z-index:30}.node-data-icon{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;justify-content:center;font-size:18px;opacity:.25;pointer-events:none;border-radius:5px 5px 0 0}.node-data-icon-svg{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;color:var(--text-primary)}.node-data-icon-svg>svg{width:100%;height:100%}.node-group-divider{position:absolute;left:0;right:0;height:1px;background:var(--border-color);pointer-events:none}.node-control-group{position:absolute;left:0;right:0;background-color:#0000000d;border-radius:0 0 5px 5px;pointer-events:none}.status-bar-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px}.status-lamps-row{display:flex;align-items:center;gap:4px}.status-text{font-size:9px;line-height:1;color:var(--text-secondary);opacity:.9;text-align:center;white-space:nowrap;font-family:var(--font-family-code, monospace)}.status-lamp{width:8px;height:8px;border-radius:50%;background-color:#d1d5db;transition:background-color .3s}.blink-green{animation:blink-green 1s infinite}.status-lamp.ring-green{background-color:transparent;border:2px solid #22c55e;box-sizing:border-box;animation:ring-green-pulse 1.6s ease-in-out infinite}@keyframes ring-green-pulse{0%,to{border-color:#22c55e;box-shadow:0 0 #22c55e80}50%{border-color:#4ade80;box-shadow:0 0 0 3px #22c55e00}}.status-lamps-row.freshness-stale{opacity:.55}.status-lamps-row.freshness-dead{opacity:.35;filter:grayscale(1)}.status-text.freshness-stale{color:#d97706}.status-ext-badge{color:#f59e0b;font-weight:600;cursor:help}.status-text.freshness-dead{color:#b91c1c;font-weight:600}@keyframes blink-green{0%,to{background-color:#22c55e}50%{background-color:transparent}}.status-lamps-row.status-cycling{gap:3px}.status-cycling .cycling-dot{animation:cycling-pulse 1.1s ease-in-out infinite}.status-text-cycling{font-style:italic;opacity:.9}@keyframes cycling-pulse{0%,to{transform:scale(.7);opacity:.45}50%{transform:scale(1.15);opacity:1}}.port-hit-area{position:absolute;width:20px;height:20px;display:flex;align-items:center;justify-content:center;z-index:20;cursor:crosshair}.port-visual{width:6px;height:12px;background-color:var(--port-idle);border:none;transition:transform .15s cubic-bezier(.34,1.56,.64,1),background-color .2s,box-shadow .2s}.port-hit-area.in{left:-14px}.port-hit-area.in .port-visual{border-radius:12px 0 0 12px;transform-origin:right center;box-shadow:-1px 1px 3px #00000014}.port-hit-area.in:hover .port-visual{transform:scale(1.6) translate(0);background-color:var(--port-hover)}.port-hit-area.out{right:-14px}.port-hit-area.out .port-visual{border-radius:0 12px 12px 0;transform-origin:left center;box-shadow:1px 1px 3px #00000014}.port-hit-area.out:hover .port-visual{transform:scale(1.6) translate(0);background-color:var(--port-hover)}.port-visual.connected{background-color:var(--port-connected)}.port-visual.active{background-color:var(--port-hover)}.virtual-port-container{position:absolute;top:150px;height:auto;display:flex;flex-direction:column;gap:20px;z-index:50;padding:10px 0}.virtual-port-container.in{left:0;align-items:flex-start}.virtual-port-container.out{right:0;align-items:flex-end}.virtual-port-wrapper{position:relative;width:40px;height:40px;cursor:crosshair;display:flex;align-items:center;justify-content:center}.virtual-port-container.in .virtual-port-wrapper{margin-left:-20px}.virtual-port-container.out .virtual-port-wrapper{margin-right:-20px}.virtual-port-visual{width:14px;height:20px;background-color:transparent;box-shadow:inset 0 0 0 2px var(--port-disconnected);border:2px solid var(--bg-canvas);transition:transform .2s,background-color .2s,box-shadow .2s}.virtual-port-container.in .virtual-port-visual{border-radius:0 12px 12px 0}.virtual-port-container.out .virtual-port-visual{border-radius:12px 0 0 12px}.virtual-port-wrapper:hover .virtual-port-visual{background-color:var(--port-hover);box-shadow:inset 0 0 0 2px var(--port-hover);transform:scale(1.2)}.virtual-port-visual.connected{background-color:var(--port-connected);box-shadow:inset 0 0 0 2px var(--port-connected)}.context-menu{position:fixed;background:var(--bg-node);border:1px solid var(--border-color);border-radius:6px;box-shadow:0 4px 12px #00000026;z-index:1000;min-width:160px;overflow:hidden;padding:4px 0}.menu-group{border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:4px}.menu-group:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.menu-header{font-size:11px;color:var(--text-secondary);padding:4px 12px;font-weight:700;text-transform:uppercase;pointer-events:none}.menu-item{padding:8px 12px;font-size:13px;color:var(--text-primary);cursor:pointer;display:flex;align-items:center;gap:8px}.menu-item:hover{background-color:var(--bg-panel)}.menu-item.danger{color:#ef4444}.menu-item.danger:hover{background-color:#ef44441a}.menu-icon-activate{color:#f59e0b}.menu-icon-start{color:#22c55e;fill:#22c55e}.menu-icon-pause{color:#f59e0b;fill:#f59e0b}.menu-icon-stop{color:#ef4444;fill:#ef4444}.menu-icon-reset{color:#3b82f6}.node-floating-toolbar{position:absolute;top:100%;margin-top:12px;left:50%;transform:translate(-50%) scale(1);background-color:var(--bg-node);border:1px solid var(--border-color);border-radius:20px;box-shadow:0 4px 12px #00000026;display:flex;align-items:center;gap:4px;padding:4px 8px;z-index:100;white-space:nowrap;animation:popIn .2s cubic-bezier(.175,.885,.32,1.275) forwards}@keyframes popIn{0%{opacity:0;transform:translate(-50%) scale(.8)}to{opacity:1;transform:translate(-50%) scale(1)}}.node-exec-binding path{fill:none;stroke:var(--port-hover);stroke-width:1.5;stroke-dasharray:4 3;opacity:.8;animation:execBindingFadeIn .18s ease-out}@keyframes execBindingFadeIn{0%{opacity:0}to{opacity:.8}}.nft-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:50%;border:none;background:transparent;cursor:pointer;transition:background-color .2s,color .2s;color:var(--text-primary)}.nft-btn:hover{background-color:var(--bg-panel)}.nft-btn:disabled{color:#9ca3af;opacity:.4;cursor:not-allowed}.nft-btn:disabled:hover{background-color:transparent}.nft-btn.activate{color:#f59e0b}.nft-btn.activate:hover{background-color:#f59e0b1a}.nft-btn.pool:disabled{opacity:1;cursor:default;color:inherit}.nft-btn.pool:disabled:hover{background-color:transparent}.nft-btn.pool:hover{background-color:#ef44441f}.nft-btn.activate.stage-none,.nft-btn.activate.stage-idle{color:#fff;background-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b73;animation:stage-call-to-action 2s ease-in-out infinite}.nft-btn.activate.stage-none:hover,.nft-btn.activate.stage-idle:hover{background-color:#d97706}@keyframes stage-call-to-action{0%,to{box-shadow:0 0 0 2px #f59e0b73}50%{box-shadow:0 0 0 5px #f59e0b26}}.nft-btn.activate.stage-staging_requested{color:#f59e0b;opacity:.6;animation:stage-pulse 1s ease-in-out infinite}.nft-btn.activate.stage-staging_failed{color:#ef4444}.nft-btn.activate.stage-staging_failed:hover{background-color:#ef44441f}.nft-btn.activate.stage-lost{color:#f59e0b}.nft-btn.activate.stage-lost:hover{background-color:#f59e0b24}@keyframes stage-pulse{0%,to{opacity:.35}50%{opacity:.8}}.nft-btn.start{color:#22c55e}.nft-btn.start:hover{background-color:#22c55e1a}.nft-btn.pause{color:#f59e0b}.nft-btn.pause:hover{background-color:#f59e0b1a}.nft-btn.stop{color:#ef4444}.nft-btn.stop:hover{background-color:#ef44441a}.nft-btn.reset{color:#3b82f6}.nft-btn.reset:hover{background-color:#3b82f61a}.canvas-toolbar-area{position:absolute;top:20px;right:20px;display:flex;flex-direction:column;align-items:flex-end;gap:8px;z-index:50}.canvas-info{font-size:var(--font-size-caption);color:var(--text-secondary);-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-right:4px}.canvas-toolbar{display:flex;gap:12px}.toolbar-group{display:flex;background-color:var(--bg-node);border:1px solid var(--border-color);border-radius:6px;box-shadow:0 2px 6px #00000014;overflow:hidden}.toolbar-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;border-right:1px solid var(--border-color);background-color:transparent;color:var(--text-primary);cursor:pointer;transition:background-color .2s,color .2s;padding:0}.toolbar-btn:last-child{border-right:none}.toolbar-btn:hover{background-color:var(--bg-panel);color:var(--port-hover)}.toolbar-btn:active{background-color:var(--border-color)}.toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.toolbar-dropdown{position:absolute;top:calc(100% + 6px);left:0;min-width:180px;background-color:var(--bg-node);border:1px solid var(--border-color);border-radius:6px;box-shadow:0 4px 12px #00000026;padding:4px;z-index:100;display:flex;flex-direction:column}.toolbar-dropdown-item{text-align:left;padding:6px 10px;border:none;background:transparent;color:var(--text-primary);font-size:var(--font-size-body);cursor:pointer;border-radius:4px}.toolbar-dropdown-item:hover{background-color:var(--bg-panel);color:var(--port-hover)}.toolbar-btn.activate.power-on{color:#f59e0b;background-color:#f59e0b1a}.toolbar-btn.pool-power.ready{color:#22c55e;background-color:#22c55e1a}.toolbar-btn.pool-power.ready:disabled{opacity:1;cursor:default}.toolbar-btn.pool-power.short{color:#ef4444;background-color:#ef44441a}.toolbar-btn.active-run{color:#22c55e;background-color:#22c55e1a}.toolbar-btn.active-pause{color:#f59e0b;background-color:#f59e0b1a}.toolbar-btn.stop:hover{color:#ef4444;background-color:#ef44441a}.tab-lamp{width:8px;height:8px;border-radius:50%;margin-right:6px;display:inline-block;transition:background-color .3s}.tab-lamp.saved{background-color:#22c55e;box-shadow:0 0 4px #22c55e66}.tab-lamp.dirty{background-color:#ef4444;box-shadow:0 0 4px #ef444466}.canvas-telemetry-banner{padding:6px 12px;font-size:12px;color:var(--warning-text, #92400e);background:var(--warning-bg, #fef3c7);border-bottom:1px solid var(--warning-border, #f59e0b)}.conn-modal-backdrop{position:fixed;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1100}.conn-modal-card{background:var(--bg-panel, #ffffff);color:var(--text-primary, #1f2937);border:1px solid var(--border-color, #d1d5db);border-radius:8px;min-width:520px;max-width:760px;max-height:86vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 8px 24px #0000002e}.conn-modal{display:flex;flex-direction:column;flex:1;min-height:0}.conn-modal-header{padding:14px 18px;border-bottom:1px solid var(--border-color, #d1d5db)}.conn-modal-header h3{margin:0;font-size:15px;font-weight:600}.conn-modal-subhead{margin-top:4px;font-size:11px;color:var(--text-secondary, #6b7280);font-family:ui-monospace,SFMono-Regular,monospace}.conn-modal-body{padding:12px 18px;overflow-y:auto;flex:1;min-height:0}.conn-modal-footer{display:flex;gap:8px;align-items:center;padding:12px 18px;border-top:1px solid var(--border-color, #d1d5db)}.conn-modal-footer-spacer{flex:1}.conn-btn{height:30px;padding:0 14px;border:1px solid var(--border-color, #d1d5db);border-radius:4px;background:transparent;color:var(--text-primary, #1f2937);font-size:13px;cursor:pointer}.conn-btn:hover:not(:disabled){background:#0000000a}.conn-btn:disabled{opacity:.5;cursor:not-allowed}.conn-btn-primary{background:#3b82f6;border-color:#3b82f6;color:#fff}.conn-btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.conn-type-picker{display:flex;flex-direction:column;flex:1;min-height:0}.conn-type-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;padding:14px 18px;overflow-y:auto;flex:1;min-height:0}.conn-type-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid var(--border-color, #d1d5db);border-radius:6px;background:transparent;cursor:pointer;text-align:left;transition:border-color .1s,background .1s}.conn-type-card:hover:not(:disabled){border-color:#3b82f6;background:#3b82f60d}.conn-type-card:disabled{opacity:.4;cursor:not-allowed}.conn-type-icon{color:var(--text-secondary, #6b7280)}.conn-type-name{font-weight:600;font-size:13px}.conn-type-cat{font-size:10px;color:var(--text-secondary, #6b7280);font-family:ui-monospace,SFMono-Regular,monospace}.conn-field-form{display:flex;flex-direction:column;gap:14px}.conn-field-group{border:1px solid var(--border-color, #d1d5db);border-radius:6px;padding:10px 14px 12px;margin:0}.conn-field-group-legend{padding:0 4px;font-size:11px;font-weight:600;text-transform:uppercase;color:var(--text-secondary, #6b7280);letter-spacing:.5px}.conn-field-row{display:grid;grid-template-columns:160px 1fr;gap:12px;align-items:start;margin-top:8px}.conn-field-label{font-size:12px;padding-top:6px;color:var(--text-primary, #1f2937)}.conn-field-required{color:#ef4444}.conn-field-control{display:flex;flex-direction:column;gap:4px}.conn-field-help{font-size:11px;color:var(--text-secondary, #6b7280)}.conn-field-error{font-size:11px;color:#ef4444}.conn-input{height:28px;padding:0 8px;border:1px solid var(--border-color, #d1d5db);border-radius:4px;background:var(--bg-app, #ffffff);color:var(--text-primary, #1f2937);font-size:13px;outline:none}.conn-input:focus{border-color:#3b82f6}.conn-textarea{padding:6px 8px;border:1px solid var(--border-color, #d1d5db);border-radius:4px;background:var(--bg-app, #ffffff);color:var(--text-primary, #1f2937);font-size:12px;font-family:ui-monospace,SFMono-Regular,monospace;outline:none;resize:vertical}.conn-textarea:focus{border-color:#3b82f6}.conn-checkbox{width:16px;height:16px}.conn-chip-input{display:flex;flex-direction:column;gap:4px}.conn-chip-list{display:flex;flex-wrap:wrap;gap:4px}.conn-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;background:#3b82f61a;border:1px solid rgba(59,130,246,.3);border-radius:3px;font-size:12px}.conn-chip-remove{background:transparent;border:none;cursor:pointer;color:var(--text-secondary, #6b7280);font-size:14px;padding:0 2px}.conn-chip-remove:hover{color:#ef4444}.conn-loading{padding:14px 18px;color:var(--text-secondary, #6b7280);font-size:13px}.conn-error{padding:10px 18px;color:#b91c1c;background:#ef444414;font-size:12px}.conn-empty{padding:24px 18px;text-align:center;color:var(--text-secondary, #6b7280);font-size:13px}.conn-advanced-toggle{width:100%;text-align:left;color:var(--text-secondary, #6b7280);margin:4px 0}
