/* Native node editor. Colours identify content; port labels carry the same information. */
.workflow-workspace{display:grid;grid-template-columns:minmax(0,1fr) 330px;align-items:start;gap:16px}
.workflow-workspace:has(.workflow-inspector[hidden]){grid-template-columns:minmax(0,1fr)}
.workflow-inspector{position:sticky;top:calc(var(--top,64px) + 12px);max-height:calc(100dvh - var(--top,64px) - 24px);overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;border:1px solid var(--line);border-radius:18px;background:var(--panel)}
.workflow-inspector[hidden],.workflow-node[hidden]{display:none!important}
.workflow-inspector-heading{position:sticky;top:0;z-index:2;background:var(--panel);display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.07em}
.workflow-inspector-heading button{width:44px;height:44px;background:transparent;border:0;color:var(--text);cursor:pointer;font:inherit;font-size:22px;border-radius:8px}
.workflow-inspector .workflow-nodes{display:block}
.workflow-inspector .workflow-node{border:0;border-radius:0;box-shadow:none}
.workflow-inspector .workflow-node>header{padding:10px 16px}
.workflow-inspector .workflow-node>label{font-size:13px}
.workflow-inspector .workflow-node>footer{margin-bottom:0}
.workflow-inspector .provider-picker{margin:12px 16px}
.workflow-inspector .provider-picker-brands{flex-wrap:wrap}
.workflow-inspector .workflow-ports{grid-template-columns:1fr}
.workflow-toolbar{justify-content:space-between;align-items:center}
.workflow-add-controls{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.workflow-add-controls .btn{margin:0}.workflow-add-controls select{margin:0;flex:0 1 150px}
.workflow-examples{position:relative}
.workflow-examples>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;gap:12px;padding:10px 16px;border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--text);font-size:14px;font-weight:600;box-sizing:border-box;list-style:none}
.workflow-examples>summary::after{content:'⌄';font-size:18px;color:var(--muted)}
.workflow-examples>summary::-webkit-details-marker{display:none}
.workflow-template-list{position:absolute;inset-inline-start:0;top:calc(100% + 8px);width:min(400px,80vw);padding:10px;border:1px solid var(--line);border-radius:16px;background:var(--panel);box-shadow:0 16px 50px #0002;z-index:12;display:grid;gap:6px}
.workflow-template-list .btn{display:grid;text-align:start;gap:6px;white-space:normal;justify-content:stretch;padding:14px;background:transparent}
.workflow-template-list .btn:hover{background:var(--surface-2)}
.workflow-template-list strong{font-size:14px;font-weight:650}
.workflow-template-list small{font-size:12px;font-weight:400;color:var(--muted);line-height:1.5}
.wf-graph{--wf-text:#5d83d6;--wf-image:#329b88;--wf-video:#a07bca;--wf-audio:#c58d35;min-width:0;background:var(--surface-2);border:1px solid var(--line);border-radius:18px;overflow:hidden}
.wf-graph-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 14px;background:var(--panel);border-bottom:1px solid var(--line)}
.wf-graph-heading{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--text)}
.wf-graph-heading>svg{width:20px;height:20px;color:var(--accent)}
.wf-graph-count{font-size:11px;color:var(--muted);border:1px solid var(--line);border-radius:6px;padding:3px 6px;font-variant-numeric:tabular-nums}
.wf-graph-controls{display:flex;align-items:center;gap:2px;direction:ltr}
.wf-graph-tool{display:inline-grid;place-items:center;flex-shrink:0;min-width:44px;height:44px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--text);font:inherit;font-size:21px;cursor:pointer;padding:8px}
.wf-graph-tool svg{width:19px;height:19px}
.wf-graph-tool:hover:not(:disabled){background:var(--surface-2);border-color:var(--line)}
.wf-graph-tool:disabled{opacity:.35;cursor:default}
.wf-graph-tool[hidden]{display:none}
.wf-graph-zoom{font-size:11px;font-variant-numeric:tabular-nums;min-width:35px;text-align:center;color:var(--muted)}
.wf-graph-viewport{position:relative;overflow:auto;isolation:isolate;direction:ltr;background-image:radial-gradient(circle,var(--line) 1px,transparent 1.1px);background-size:20px 20px;overscroll-behavior-x:contain;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.wf-graph-stage{position:relative;transform-origin:top left;direction:ltr}
.wf-graph-wires{position:absolute;top:0;left:0;pointer-events:none;overflow:visible;z-index:0}
.wf-wire{fill:none;stroke:var(--wf-text);stroke-width:2.3;opacity:.8}
.wf-wire.image{stroke:var(--wf-image)}
.wf-wire.is-preview{stroke-dasharray:6 5;opacity:.7}
.wf-wire.is-flowing{stroke-dasharray:8 5;animation:wf-flow .8s linear infinite;opacity:1;stroke-width:3}
.wf-canvas-node{position:absolute;width:236px;box-sizing:border-box;min-width:0;background:var(--panel);border:1px solid var(--line);border-radius:16px;box-shadow:0 5px 18px #00000009;z-index:1;color:var(--text);transition:border-color .15s,box-shadow .15s;--wf-node-color:var(--wf-text)}
.wf-canvas-node[data-family=image]{--wf-node-color:var(--wf-image)}
.wf-canvas-node[data-family=video]{--wf-node-color:var(--wf-video)}
.wf-canvas-node[data-family=audio]{--wf-node-color:var(--wf-audio)}
.wf-canvas-node[data-family=mesh3d]{--wf-node-color:var(--accent)}
.wf-canvas-node.is-selected{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 24%,transparent),0 8px 24px #0001}
.wf-canvas-node[data-status=running]{border-color:var(--accent)}
.wf-node-title{width:100%;display:flex;gap:12px;align-items:center;cursor:grab;border:0;background:transparent;color:var(--text);padding:16px 14px 10px;text-align:start;border-radius:16px 16px 0 0;touch-action:none;font:inherit;user-select:none}
.wf-node-title:active{cursor:grabbing}
.wf-node-icon{display:grid;place-items:center;width:36px;height:38px;flex-shrink:0;border:1px solid color-mix(in srgb,var(--wf-node-color) 35%,var(--line));border-radius:10px;color:var(--wf-node-color);background:color-mix(in srgb,var(--wf-node-color) 8%,var(--panel))}
.wf-node-icon svg{width:21px;height:21px}
.wf-node-name{display:grid;gap:4px;min-width:0}
.wf-node-name small{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.wf-node-name strong{font-size:15px;line-height:1.3;overflow-wrap:anywhere}
.wf-node-actions{display:flex;align-items:center;gap:4px;padding:0 10px 8px;border-bottom:1px solid var(--line)}
.wf-node-actions .wf-graph-tool{width:40px;min-width:40px;height:40px;padding:8px}
.wf-node-actions .wf-graph-tool.is-danger{margin-inline-start:auto;color:var(--danger,var(--muted))}
.wf-node-actions .wf-graph-tool:hover:not(:disabled){color:var(--accent)}
.wf-node-actions .wf-graph-tool.is-danger:hover:not(:disabled){color:var(--danger,var(--text));border-color:currentColor}
.wf-node-description{font-size:12px;line-height:1.65;color:var(--muted);margin:4px 15px 14px;min-height:40px;max-height:40px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.wf-node-sockets{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;border-top:1px solid var(--line);padding:12px 0}
.wf-inputs,.wf-outputs{min-width:0;display:flex;flex-direction:column;gap:6px}
.wf-inputs{align-items:flex-start}.wf-outputs{align-items:flex-end}
.wf-socket-label{font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:0 14px}
.wf-port{position:relative;display:flex;align-items:center;gap:6px;background:transparent;color:var(--text);font:inherit;font-size:11px;line-height:1.4;border:1px solid transparent;border-radius:8px;min-height:44px;max-width:100%;padding:5px 6px;cursor:crosshair;text-align:start;touch-action:none}
.wf-port-in{margin-left:-9px}.wf-port-out{margin-right:-9px;flex-direction:row-reverse;text-align:end}
.wf-port span{overflow-wrap:anywhere}
.wf-input-row{display:flex;align-items:center;min-width:0;width:100%;gap:0}
.wf-input-row .wf-port{flex:1;min-width:0;gap:4px}
.wf-port-requirement{font-size:12px;color:var(--accent);flex:none}
.wf-port-disconnect{min-width:28px;width:28px;height:44px;padding:2px;font-size:20px;color:var(--muted)}
.wf-port-disconnect:hover:not(:disabled){color:var(--danger,var(--text))}
.wf-graph-legend{font-size:11px;color:var(--muted);padding:8px 16px;margin:0;border-top:1px solid var(--line);background:var(--panel)}
.wf-port-dot{display:block;width:12px;height:12px;flex:0 0 12px;border:2px solid var(--wf-text);border-radius:50%;background:var(--panel);box-sizing:border-box}
.wf-port[data-port-kind=image] .wf-port-dot{border-color:var(--wf-image);border-radius:4px}
.wf-port-out .wf-port-dot,.wf-port.is-linked .wf-port-dot{background:var(--wf-text)}
.wf-port[data-port-kind=image].wf-port-out .wf-port-dot,.wf-port[data-port-kind=image].is-linked .wf-port-dot{background:var(--wf-image)}
.wf-port:hover:not(:disabled),.wf-port.is-pending,.wf-port.is-compatible{background:var(--surface-2);border-color:var(--accent)}
.wf-port.is-incompatible{opacity:.4}
.wf-port:disabled{cursor:default}
.wf-port[data-terminal=true] .wf-port-dot{border-color:var(--wf-node-color);background:var(--wf-node-color);border-radius:3px}
.wf-node-status{font-size:11px;line-height:1.5;color:var(--muted);padding:11px 14px;border-top:1px solid var(--line);display:flex;align-items:center;gap:8px;min-height:39px;box-sizing:border-box}
.wf-node-status::before{content:'';width:5px;height:5px;flex-shrink:0;border-radius:50%;background:var(--wf-node-color)}
.wf-node-view{margin-inline-start:auto;border:1px solid var(--line);border-radius:8px;background:var(--surface-2);color:var(--text);font:inherit;min-height:36px;padding:6px 10px;cursor:pointer}
.wf-canvas-node[data-status=running] .wf-node-status::before{width:12px;height:12px;background:none;border:2px solid var(--line);border-top-color:var(--accent);animation:workflow-spin .9s linear infinite}
.wf-canvas-node[data-status=completed] .wf-node-status::before{content:'✓';width:auto;height:auto;background:none;color:var(--text)}
.wf-canvas-node[data-status=failed] .wf-node-status::before{content:'!';width:auto;height:auto;background:none;color:var(--text);font-weight:800}
.wf-graph-guidance{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--line);background:var(--panel);font-size:12px;line-height:1.6;color:var(--muted);min-height:45px;box-sizing:border-box}
.wf-graph.is-connecting .wf-graph-guidance{color:var(--text);border-top-color:var(--accent)}
.wf-graph-connections{padding:0 16px;background:var(--panel);border-top:1px solid var(--line)}
.wf-graph-connections>summary{min-height:44px;align-content:center;font-size:12px;color:var(--muted);cursor:pointer}
.wf-graph-link-list{display:grid;gap:8px;padding-bottom:14px}
.wf-graph-link-list .workflow-link{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px 6px 12px;font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.wf-graph-empty{padding:40px;color:var(--muted)}
.wf-graph :focus-visible,.workflow-examples :focus-visible,.workflow-inspector-heading button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
[dir=rtl] .wf-node-title,[dir=rtl] .wf-node-description,[dir=rtl] .wf-node-status{direction:rtl}
@keyframes wf-flow{to{stroke-dashoffset:-26}}
@media(min-width:1800px){.workflow-workspace{grid-template-columns:minmax(0,1fr) 360px}}
@media(max-width:1250px){.workflow-workspace{grid-template-columns:minmax(0,1fr)}.workflow-inspector .workflow-node{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}.workflow-inspector .workflow-node>header,.workflow-inspector .workflow-node>footer,.workflow-inspector .workflow-node>.provider-picker,.workflow-inspector .workflow-node>.workflow-source-hint{grid-column:1/-1}.workflow-inspector .workflow-node>label:has(textarea){grid-column:1/-1}.workflow-inspector .workflow-ports{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:680px){
 .workflow-toolbar{align-items:stretch}.workflow-examples{width:100%}.workflow-template-list{width:calc(100vw - 70px);max-width:400px}.workflow-add-controls{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto}.workflow-toolbar select{min-width:0;width:100%}
 .workflow-workspace{gap:12px}.wf-graph-toolbar{padding:8px 10px}.wf-graph-heading{font-size:13px}.wf-graph-controls{margin-inline-start:auto}.wf-graph-controls .wf-graph-tool{min-width:40px;width:40px}.wf-graph-controls .wf-graph-tool:nth-child(n+3),.wf-graph-zoom{display:none}
 .wf-graph-viewport{overflow:hidden}.wf-canvas-node{box-shadow:0 4px 12px #00000008}.wf-node-name strong{font-size:16px}.wf-node-description{font-size:13px;min-height:43px;max-height:43px}.wf-port{font-size:12px;touch-action:manipulation}.wf-node-title{touch-action:pan-y;cursor:pointer}.wf-node-sockets{gap:20px}.wf-node-status{font-size:12px}.wf-graph-guidance{font-size:13px}.wf-graph-link-list .workflow-link{font-size:13px}.workflow-inspector .workflow-node{display:block}.workflow-inspector .workflow-ports{grid-template-columns:1fr 1fr}
 .workflow-inspector{position:fixed;inset:auto 10px 10px;max-height:min(78dvh,760px);overflow:auto;z-index:90;box-shadow:0 -12px 70px #0005;border-color:var(--accent)}
 .workflow-inspector-heading{position:sticky;top:0;background:var(--panel);z-index:2}.workflow-inspector .workflow-node>footer{padding-bottom:max(16px,env(safe-area-inset-bottom))}
}
@media(prefers-reduced-motion:reduce){.wf-wire.is-flowing,.wf-canvas-node[data-status=running] .wf-node-status::before{animation:none}.wf-canvas-node{transition:none}}

.wf-node-error{margin:0;padding:10px 14px;border-top:1px solid var(--line);font-size:12px;color:var(--text);line-height:1.5;font-weight:600}.wf-node-error[hidden]{display:none}.workflow-node-diagnostic{padding:14px;border-inline-start:3px solid var(--accent);background:var(--surface-2);border-radius:8px;font-size:14px;line-height:1.6}

/* The graph is the primary workspace. Node settings use a focused modal. */
.workflow-workspace{display:block}
.wf-graph-add{display:inline-flex;grid-auto-flow:column;gap:8px;width:auto;padding-inline:13px;background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.wf-graph-add svg{width:18px;height:18px}.wf-graph-add span{font-size:13px;font-weight:700;white-space:nowrap}
.wf-graph-add:hover:not(:disabled){background:var(--accent);color:var(--on-accent);filter:brightness(1.06)}
.workflow-node-dialog{box-sizing:border-box;width:min(680px,calc(100vw - 32px));max-height:min(86dvh,840px);padding:0;border:1px solid var(--line);border-radius:20px;background:var(--panel);color:var(--text);box-shadow:0 24px 80px #0007;overflow:auto}
.workflow-node-dialog::backdrop{background:#0009;backdrop-filter:blur(3px)}
.workflow-node-dialog .workflow-inspector-heading,.workflow-node-dialog>form>header{position:sticky;top:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px;padding:10px 18px;box-sizing:border-box;border-bottom:1px solid var(--line);background:var(--panel);color:var(--text);text-transform:none;letter-spacing:normal}
.workflow-dialog-close{display:grid;place-items:center;width:44px;height:44px;flex:0 0 44px;border:0;border-radius:10px;background:transparent;color:var(--text);font:inherit;font-size:24px;cursor:pointer}
.workflow-dialog-close:hover{background:var(--surface-2)}
.workflow-node-dialog .workflow-nodes{display:block}.workflow-node-dialog .workflow-node{border:0;border-radius:0;box-shadow:none}.workflow-node-dialog .workflow-node[hidden]{display:none!important}
.workflow-node-dialog .workflow-dialog-actions,.workflow-node-dialog>form>footer{position:sticky;bottom:0;z-index:3;display:flex;justify-content:flex-end;gap:10px;padding:14px 18px;border-top:1px solid var(--line);background:var(--panel)}
.workflow-node-dialog .workflow-dialog-actions .btn,.workflow-node-dialog>form>footer .btn{width:auto;min-height:44px}
.workflow-add-dialog>form{display:grid}.workflow-add-dialog>form>.hint{margin:18px 18px 4px;line-height:1.6}.workflow-add-dialog>form>label{display:grid;gap:8px;margin:14px 18px 0;font-size:13px;font-weight:650}.workflow-add-dialog select{width:100%;min-height:48px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);font:inherit}
.workflow-run-dialog>form{display:grid}.workflow-run-node-name{margin:20px 20px 6px;font-size:16px}.workflow-run-warning,.workflow-run-note,.workflow-run-reused{margin:8px 20px;padding:12px 14px;border-radius:10px;line-height:1.55;background:var(--surface-2);border:1px solid var(--line)}.workflow-run-warning{border-inline-start:4px solid var(--accent)}.workflow-run-reused{color:var(--muted);font-size:13px}.workflow-run-price{display:flex;align-items:end;justify-content:space-between;gap:20px;margin:14px 20px 20px;padding-top:14px;border-top:1px solid var(--line);color:var(--muted);font-size:13px}.workflow-run-price strong{color:var(--text);font-size:20px;font-variant-numeric:tabular-nums}
.workflow-node-dialog :focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media(max-width:680px){.wf-graph-add{width:auto!important;min-width:44px!important}.wf-graph-add span{display:none}.wf-node-actions .wf-graph-tool{width:44px;min-width:44px;height:44px}.workflow-node-dialog{width:calc(100vw - 20px);max-height:calc(100dvh - 28px);margin:auto 10px 14px}.workflow-node-dialog .workflow-node{display:block}.workflow-node-dialog .workflow-ports{grid-template-columns:1fr 1fr}.workflow-node-dialog .workflow-dialog-actions,.workflow-node-dialog>form>footer{padding-bottom:max(14px,env(safe-area-inset-bottom))}}

/* Mobile edits use the same nodes, ports and quotes as the desktop graph. */
.workflow-view-switch,#workflowStepList{display:none}
.workflow-actions>summary{min-height:44px;cursor:pointer;padding:10px 14px;border:1px solid var(--line);border-radius:10px}
.workflow-actions>div{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.workflow-library-bar{align-items:start}.workflow-library-bar>strong{padding-block:12px;overflow-wrap:anywhere}
@media(min-width:741px){.workflow-actions{display:contents}.workflow-actions>summary{display:none}.workflow-actions:not([open])>div{display:flex}}
@media(max-width:740px){
 .workflow-head{align-items:start}.workflow-head h1{font-size:25px!important}.workflow-head p{font-size:14px}.chain-balance{font-size:12px}
 .workflow-library-bar{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px}.workflow-actions>div{display:grid;grid-template-columns:1fr}.workflow-actions .btn{min-height:44px!important;width:100%}
 .workflow-actions[open]{grid-column:1/-1}.workflow-actions[open]>div{grid-template-columns:1fr 1fr}
 .workflow-view-switch{display:flex;gap:8px;margin-bottom:14px}.workflow-view-switch .btn{flex:1;min-height:44px}
 .workflow-view-switch [aria-pressed=true]{border-color:var(--accent);color:var(--accent);background:var(--panel)}
 [data-mobile-view=steps] #workflowGraph{display:none}[data-mobile-view=steps] #workflowStepList{display:grid;gap:12px}
 .workflow-step-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--panel);overflow-wrap:anywhere}
 .workflow-step-card>strong{font-size:15px}.workflow-step-card>p{grid-column:1/-1;margin:0;white-space:pre-wrap;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.6;font-size:14px}
 .workflow-step-card>small{grid-column:1/-1;color:var(--muted);line-height:1.6}.workflow-step-card>.btn{grid-column:2;grid-row:1;min-height:44px!important;align-self:start}
 .workflow-step-card>.workflow-step-error{display:block;border-inline-start:3px solid var(--accent);padding-inline-start:8px}
 .workflow-launch-layout{display:flex!important;flex-direction:column;gap:16px}.workflow-workspace,.workflow-launch-panel{width:100%;min-width:0}.workflow-launch-panel{position:static!important}
 .workflow-estimate{padding:16px!important;display:flex!important;flex-wrap:wrap;gap:12px}.workflow-estimate>div{flex-basis:100%}.workflow-estimate>.btn{min-height:48px;flex:1;white-space:normal}
 .workflow-estimate.is-running>#workflowQuote,.workflow-estimate.is-running>#workflowRun{display:none}
 #workflowStepList>.btn{min-height:48px}.workflow-node-dialog input,.workflow-node-dialog select,.workflow-node-dialog textarea{font-size:16px}
 .wf-graph-tools{flex-wrap:wrap}.wf-graph-tools .wf-graph-tool{min-width:44px;min-height:44px}
}

@media(max-width:740px){#workflowWorkbench .workflow-head{gap:8px;margin-bottom:12px}#workflowWorkbench .chain-balance{display:none}#workflowWorkbench .workflow-library-bar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px;margin-top:8px}#workflowWorkbench .workflow-head p{margin:4px 0}}

/* Optional sockets never dictate the scale of the whole graph. */
.wf-input-group{grid-column:1/-1;min-width:0;border-top:1px solid var(--line);padding-top:6px}
.wf-input-group>.wf-port-group{width:100%;margin-inline-start:-9px;cursor:pointer;font-weight:600}
.wf-input-group-list{max-height:220px;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding-inline:8px 5px}
.wf-input-group-list[hidden]{display:none!important}.wf-input-group-list .wf-port{margin-left:0}
.wf-port-group.is-linked .wf-port-dot{background:var(--wf-image);border-color:var(--wf-image)}
.wf-wire.is-bundle{stroke-width:3px}
