.wf-page[data-v-abf00573]{display:flex;flex-direction:column;height:100vh;height:100dvh}.wf-page-bar[data-v-abf00573]{flex:0 0 auto;padding:8px 16px 0}.wf-page[data-v-abf00573] .nd-app-header{margin-bottom:8px}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}.vue-flow__controls{box-shadow:0 0 2px 1px #00000014}.vue-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;user-select:none;padding:5px}.vue-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.vue-flow__controls-button:hover{background:#f4f4f4}.vue-flow__controls-button:disabled{pointer-events:none}.vue-flow__controls-button:disabled svg{fill-opacity:.4}.vue-flow__minimap{background-color:#fff}.vue-flow__minimap.pannable{cursor:grab}.vue-flow__minimap.dragging{cursor:grabbing}.vue-flow__minimap-mask.pannable{cursor:grab}.wf-editor{position:relative;flex:1 1 auto;min-height:0;display:flex}.wf-canvas-wrap{position:relative;flex:1 1 auto;min-width:0}.wf-canvas-wrap .vue-flow{background:var(--nd-field, #0f1216)}.wf-toolbar{position:absolute;z-index:5;top:10px;left:10px;right:10px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;pointer-events:none}.wf-toolbar>*{pointer-events:auto}.wf-title-input{font:inherit;font-weight:600;font-size:15px;color:var(--nd-text, #e7e9ee);background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-radius:8px;padding:7px 11px;min-width:200px}.wf-btn{font:inherit;font-size:13px;cursor:pointer;color:var(--nd-text, #e7e9ee);background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-radius:8px;padding:7px 12px;display:inline-flex;align-items:center;gap:6px;text-decoration:none}.wf-btn:hover{border-color:var(--nd-accent, #f2a900)}.wf-btn:disabled{opacity:.5;cursor:default}.wf-btn.primary{background:var(--nd-accent, #f2a900);color:#1a1205;border-color:transparent;font-weight:600}.wf-target{font:inherit;font-size:13px;cursor:pointer;color:var(--nd-text, #e7e9ee);background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-radius:8px;padding:7px 9px;max-width:200px}.wf-target:hover{border-color:var(--nd-accent, #f2a900)}.wf-spacer{flex:1 1 auto}.wf-open-empty{padding:6px 9px;color:var(--nd-muted, #97a0ad);font-size:12px}.wf-palette{position:absolute;z-index:5;bottom:14px;left:50%;transform:translate(-50%);display:flex;gap:6px;flex-wrap:wrap;justify-content:center;max-width:92%;background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-radius:12px;padding:7px;box-shadow:0 8px 24px #00000059}.wf-jobresult{position:absolute;z-index:6;bottom:14px;right:14px;max-width:420px;max-height:50%;display:flex;flex-direction:column;overflow:hidden;background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-radius:12px;box-shadow:0 8px 24px #00000059}.wf-jobresult-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;font-size:12.5px;font-weight:600;color:var(--nd-text, #e6e9ee)}.wf-rook-ico{width:15px;height:15px;vertical-align:-3px;margin-right:3px}.wf-jobresult-head .wf-rook-ico{vertical-align:-2px}.wf-jobresult-body{margin:0;padding:8px 10px;overflow:auto;font-size:11.5px;line-height:1.45;white-space:pre-wrap;word-break:break-word;color:var(--nd-text-soft, #c4cad3);border-top:1px solid var(--nd-line, var(--nd-border, #2a2f37))}.wf-open-menu{display:flex;flex-direction:column;align-items:stretch;gap:4px;min-width:200px;max-width:280px;padding:7px;background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-radius:12px;box-shadow:0 8px 24px #00000059}.wf-pal-btn{font:inherit;font-size:12px;cursor:pointer;color:var(--nd-text, #e7e9ee);background:transparent;border:1px solid transparent;border-radius:8px;padding:6px 9px;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.wf-pal-btn:hover{background:var(--nd-field, #0f1216);border-color:var(--nd-border, #2a2f37)}.wf-pal-btn[draggable=true]{cursor:grab}.wf-drag-ghost{position:absolute;top:-1000px;left:-1000px;pointer-events:none;min-width:140px;padding:9px 12px;border-radius:10px;background:var(--nd-surface, #1a1e24);border:1.5px solid var(--accent, #888);box-shadow:0 10px 28px #00000073;color:var(--nd-text, #e6e9ee)}.wf-drag-ghost-head{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600}.wf-drag-ghost-head img{width:18px;height:18px;object-fit:contain}.wf-drag-ghost-emoji{font-size:16px}.wf-pal-ico{font-size:15px}.wf-node{width:210px;background:var(--nd-surface, #1a1e24);border:1px solid var(--nd-border, #2a2f37);border-top:3px solid var(--accent, #888);border-radius:10px;color:var(--nd-text, #e7e9ee);box-shadow:0 3px 10px #00000040;font-size:13px;user-select:none}.wf-node.selected{border-color:var(--nd-accent, #f2a900);box-shadow:0 0 0 2px var(--nd-accent, #f2a900)}.wf-node.running{box-shadow:0 0 0 2px #3a9bdc}.wf-node.done{box-shadow:0 0 0 2px #2bb673}.wf-node.error{box-shadow:0 0 0 2px #ff6b6b}.wf-node-head{display:flex;align-items:center;gap:7px;padding:8px 10px 6px}.wf-node-ico{font-size:16px;line-height:1}.wf-node-ico-img{width:18px;height:18px;object-fit:contain;flex:0 0 auto;display:block}.wf-drawer-head .wf-node-ico-img{width:20px;height:20px}.wf-pal-ico-img{width:16px;height:16px;object-fit:contain;display:inline-block;vertical-align:middle}.wf-node-name{flex:1 1 auto;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-node-name-input{flex:1 1 auto;font:inherit;font-weight:600;background:var(--nd-field,#0f1216);color:var(--nd-text,#e7e9ee);border:1px solid var(--nd-accent,#f2a900);border-radius:5px;padding:1px 5px;min-width:0}.wf-node-type{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--nd-muted, #97a0ad);padding:0 10px}.wf-card-hint{padding:2px 10px 0;font-size:10.5px;color:var(--nd-accent, #f2a900);display:flex;align-items:center;gap:4px}.wf-choose-glyph{font-weight:700}.wf-port-choose .wf-port-label{color:var(--nd-accent, #f2a900);font-weight:600}.wf-port-choose .wf-choose-glyph{margin-right:4px}.wf-node .vue-flow__handle.is-choose{background:var(--nd-accent, #f2a900);box-shadow:0 0 0 3px #f2a90047}.wf-node-status{padding:0 10px 4px;font-size:11px;min-height:0}.wf-node-status .s-run{color:#3a9bdc}.wf-node-status .s-done{color:#2bb673}.wf-node-status .s-err{color:#ff6b6b}.wf-node-status .s-desktop{color:var(--nd-muted, #97a0ad)}.wf-ports{padding:6px 0 9px}.wf-port-row{position:relative;display:flex;align-items:center;min-height:22px;cursor:pointer}.wf-port-row:hover .wf-port-label{color:var(--nd-accent, #f2a900)}.wf-port-row.in{justify-content:flex-start}.wf-port-row.out{justify-content:flex-end}.wf-port-label{font-size:11.5px;color:var(--nd-muted, #c2c9d4);padding:1px 12px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-node .vue-flow__handle{width:12px;height:12px;border:2px solid var(--nd-surface, #1a1e24);background:#3a9bdc;cursor:crosshair;transition:transform .08s ease,box-shadow .08s ease}.wf-node .vue-flow__handle.pipe-file{background:var(--nd-accent, #f2a900);border-radius:2px}.wf-node .vue-flow__handle.pipe-pipe{border-radius:50%}.wf-node .vue-flow__handle-left:hover,.wf-node .vue-flow__handle-left.connect-armed{transform:translate(-6px,-6px) scale(1.5)}.wf-node .vue-flow__handle-right:hover,.wf-node .vue-flow__handle-right.connect-armed{transform:translate(6px,-6px) scale(1.5)}.wf-node .vue-flow__handle.connect-armed{box-shadow:0 0 0 4px #f2a90066}.wf-node .vue-flow__handle.connect-ok{box-shadow:0 0 0 4px #2bb67373}.vue-flow__edge.pipe-pipe .vue-flow__edge-path{stroke:#3a9bdc;stroke-width:2.5}.vue-flow__edge.pipe-file .vue-flow__edge-path{stroke:var(--nd-accent, #f2a900);stroke-width:2.5;stroke-dasharray:7 5}.vue-flow__edge.selected .vue-flow__edge-path{stroke-width:3.5;filter:drop-shadow(0 0 3px currentColor)}.wf-drawer{flex:0 0 340px;width:340px;border-left:1px solid var(--nd-border, #2a2f37);background:var(--nd-surface, #1a1e24);display:flex;flex-direction:column;min-height:0}.wf-drawer-head{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--nd-border, #2a2f37)}.wf-drawer-head .wf-node-ico{font-size:18px}.wf-drawer-head h3{margin:0;font-size:14px;flex:1 1 auto}.wf-drawer-close{background:transparent;border:0;color:var(--nd-muted, #97a0ad);font-size:18px;cursor:pointer;line-height:1}.wf-drawer-body{flex:1 1 auto;overflow-y:auto;padding:14px}.wf-blurb{font-size:12px;color:var(--nd-muted, #97a0ad);margin:0 0 14px;line-height:1.5}.wf-desktop-note{font-size:12px;background:#f2a9001a;border:1px solid rgba(242,169,0,.3);color:var(--nd-text, #e7e9ee);border-radius:8px;padding:8px 10px;margin:0 0 14px}.wf-field{margin-bottom:13px}.wf-field>label{display:block;font-size:12px;font-weight:600;margin-bottom:5px;color:var(--nd-text, #e7e9ee)}.wf-field .hint{font-weight:400;color:var(--nd-muted, #97a0ad)}.wf-input,.wf-select,.wf-textarea{width:100%;box-sizing:border-box;font:inherit;font-size:13px;color:var(--nd-text, #e7e9ee);background:var(--nd-field, #0f1216);border:1px solid var(--nd-border, #2a2f37);border-radius:7px;padding:7px 9px}.wf-textarea{resize:vertical;min-height:70px}.wf-textarea.code{font-family:var(--nd-font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:12px;min-height:150px;white-space:pre}.wf-row{display:flex;gap:6px;align-items:center;margin-bottom:6px}.wf-row .wf-input{flex:1 1 auto}.wf-mini{font:inherit;font-size:12px;cursor:pointer;color:var(--nd-text, #e7e9ee);background:var(--nd-field, #0f1216);border:1px solid var(--nd-border, #2a2f37);border-radius:6px;padding:5px 9px}.wf-mini:hover{border-color:var(--nd-accent, #f2a900)}.wf-mini.danger:hover{border-color:#ff6b6b;color:#ff6b6b}.wf-add{width:100%;justify-content:center}.wf-result{font-family:var(--nd-font-mono, ui-monospace, Menlo, monospace);font-size:11.5px;white-space:pre-wrap;background:var(--nd-field, #0f1216);border:1px solid var(--nd-border, #2a2f37);border-radius:7px;padding:8px;max-height:180px;overflow:auto}.vue-flow__minimap{background:var(--nd-surface, #1a1e24)!important;border:1px solid var(--nd-border, #2a2f37);border-radius:8px}.vue-flow__minimap-mask{fill:#0006}.vue-flow__minimap-node{fill:var(--nd-border, #3a4150)}.vue-flow__controls{box-shadow:0 3px 10px #00000059;border-radius:8px;overflow:hidden}.vue-flow__controls-button{background:var(--nd-surface, #1a1e24);border-bottom:1px solid var(--nd-border, #2a2f37);fill:var(--nd-text, #e7e9ee)}.vue-flow__controls-button:hover{background:var(--nd-field, #0f1216)}.vue-flow__controls-button svg{fill:var(--nd-text, #e7e9ee)}.wf-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;pointer-events:none;color:var(--nd-muted, #97a0ad);font-size:14px;text-align:center}
