.fw-app{--fw-input:#60a5fa;--fw-generate:var(--accent-violet-strong);--fw-process:#2dd4bf;--fw-output:var(--warn);--fw-type-image:#60a5fa;--fw-type-text:#f0abfc;--fw-type-mesh:var(--accent-violet-strong);--fw-panel:var(--bg-1);--fw-grid-dot:var(--stroke-strong);height:calc(100dvh - var(--nav-h));background:var(--bg-0);min-height:520px;color:var(--ink);font-family:var(--font-body);font-size:var(--text-md);flex-direction:column;display:flex}.fw-app[data-state=loading]{justify-content:center;align-items:center}.fw-boot{color:var(--ink-dim);text-align:center;padding:var(--space-xl) var(--space-md)}.fw-boot h1{font-family:var(--font-display);font-size:var(--text-xl);color:var(--ink-bright);margin:0 0 var(--space-xs)}.fw-app [hidden]{display:none!important}.fw-sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.fw-btn{border-radius:var(--radius-sm);border:1px solid var(--stroke-strong);background:var(--surface-2);height:32px;color:var(--ink-bright);font:inherit;font-size:var(--text-md);font-weight:var(--weight-medium);cursor:pointer;white-space:nowrap;transition:background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard), transform var(--duration-instant) var(--ease-standard), opacity var(--duration-fast) var(--ease-standard);align-items:center;gap:6px;padding:0 12px;text-decoration:none;display:inline-flex}.fw-btn:hover{background:var(--surface-3);border-color:var(--ink-faint)}.fw-btn:active{transform:translateY(1px)}.fw-btn:focus-visible,.fw-icon-btn:focus-visible,.fw-link:focus-visible,.fw-palette-item:focus-visible,.fw-tcard:focus-visible,.fw-menu-item:focus-visible,.fw-quickadd-item:focus-visible,.fw-drop:focus-within,.fw-crumb:focus-visible{outline:2px solid var(--accent-violet);outline-offset:2px}.fw-btn[disabled],.fw-btn[aria-disabled=true]{opacity:.5;cursor:not-allowed}.fw-btn[disabled]:hover{background:var(--surface-2);border-color:var(--stroke-strong)}.fw-btn.is-primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.fw-btn.is-primary:hover{filter:brightness(.92);background:var(--accent)}.fw-btn.is-ghost{color:var(--ink);background:0 0;border-color:#0000}.fw-btn.is-ghost:hover{background:var(--surface-2);border-color:var(--stroke)}.fw-btn.is-danger{background:color-mix(in srgb, var(--danger) 16%, transparent);border-color:color-mix(in srgb, var(--danger) 45%, transparent);color:var(--danger)}.fw-btn.is-danger:hover{background:color-mix(in srgb, var(--danger) 24%, transparent)}.fw-btn.is-sm{height:28px;font-size:var(--text-sm);padding:0 10px}.fw-btn.is-block{width:100%;height:44px;font-size:var(--text-ui);justify-content:center}.fw-btn kbd,.fw-keys kbd{font-family:var(--font-mono);font-size:var(--text-2xs);border:1px solid var(--stroke-strong);color:var(--ink-dim);background:var(--surface-1);border-radius:4px;padding:1px 5px}.fw-btn.is-primary kbd{color:inherit;border-color:color-mix(in srgb, var(--on-accent) 30%, transparent);background:0 0}.fw-icon-btn{border-radius:var(--radius-sm);width:32px;height:32px;color:var(--ink);cursor:pointer;transition:background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);background:0 0;border:1px solid #0000;place-items:center;font-size:18px;line-height:1;display:inline-grid}.fw-icon-btn:hover{background:var(--surface-3);color:var(--ink-bright)}.fw-icon-btn:active{transform:translateY(1px)}.fw-icon-btn[disabled]{opacity:.35;cursor:not-allowed;background:0 0}.fw-icon-btn.is-sm{width:24px;height:24px;font-size:16px}.fw-link{color:var(--ink-bright);font:inherit;text-align:left;text-decoration:underline;-webkit-text-decoration-color:var(--stroke-strong);text-decoration-color:var(--stroke-strong);text-underline-offset:3px;cursor:pointer;background:0 0;border:0;padding:0}.fw-link:hover{text-decoration-color:currentColor}.fw-toolbar{justify-content:space-between;align-items:center;gap:var(--space-sm);border-bottom:1px solid var(--stroke);background:var(--bg-0);z-index:5;flex-wrap:wrap;padding:8px 12px;display:flex;position:relative}.fw-tb-group{align-items:center;gap:4px;min-width:0;display:flex}.fw-tb-group.is-run{gap:8px}.fw-crumb{color:var(--ink-dim);font-size:var(--text-ui);border-radius:4px;text-decoration:none}.fw-crumb:hover{color:var(--ink-bright)}.fw-crumb-sep{color:var(--ink-faint);margin:0 4px}.fw-title{font-family:var(--font-display);font-size:var(--text-ui);font-weight:var(--weight-semibold);color:var(--ink-bright);margin:0 10px 0 0}.fw-saved{color:var(--ink-faint);font-size:var(--text-sm);white-space:nowrap}.fw-runstatus{color:var(--ink-dim);font-size:var(--text-sm);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;max-width:280px;overflow:hidden}.fw-runstatus.is-running{color:var(--ink-bright)}.fw-runstatus.is-done{color:var(--success)}.fw-runstatus.is-failed{color:var(--danger)}.fw-menu-wrap{position:relative}.fw-menu{border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);width:320px;box-shadow:var(--shadow-3);z-index:20;animation:fw-pop var(--duration-base) var(--ease-emphasized);padding:6px;position:absolute;top:calc(100% + 6px);left:0}.fw-menu-item{border-radius:var(--radius-sm);width:100%;color:var(--ink);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.fw-menu-item:hover{background:var(--surface-3)}.fw-menu-title{color:var(--ink-bright);font-weight:var(--weight-medium)}.fw-menu-sub{color:var(--ink-dim);font-size:var(--text-sm);line-height:var(--leading-tight)}.fw-menu-sep{background:var(--stroke);height:1px;margin:6px 4px}@keyframes fw-pop{0%{opacity:0;transform:translateY(-4px)scale(.98)}to{opacity:1;transform:none}}.fw-body{flex:1;grid-template-columns:200px minmax(0,1fr) 320px;min-height:0;display:grid}.fw-palette{border-right:1px solid var(--stroke);flex-direction:column;gap:14px;padding:12px 10px;display:flex;overflow-y:auto}.fw-palette-hint,.fw-palette-foot{color:var(--ink-faint);font-size:var(--text-sm);line-height:var(--leading-tight);margin:0}.fw-palette-foot{margin-top:auto}.fw-palette-group{flex-direction:column;gap:2px;display:flex}.fw-palette-title{font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-dim);font-weight:var(--weight-semibold);margin:0 0 4px 6px}.fw-palette-item{border-radius:var(--radius-sm);color:var(--ink);font:inherit;text-align:left;cursor:grab;transition:background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:7px 8px;display:flex}.fw-palette-item:hover{background:var(--surface-2);border-color:var(--stroke);color:var(--ink-bright)}.fw-palette-item:active{cursor:grabbing;background:var(--surface-3)}.cat-input{--fw-cat:var(--fw-input)}.cat-generate{--fw-cat:var(--fw-generate)}.cat-process{--fw-cat:var(--fw-process)}.cat-output{--fw-cat:var(--fw-output)}.fw-node-dot{background:var(--fw-cat,var(--ink-dim));border-radius:50%;flex:none;width:8px;height:8px}.fw-canvas-wrap{min-width:0;min-height:0;position:relative;overflow:hidden}.fw-canvas{cursor:default;touch-action:none;background-color:var(--bg-0);background-image:radial-gradient(circle, var(--fw-grid-dot) 1px, transparent 1.2px);background-size:var(--fw-grid,24px) var(--fw-grid,24px);outline:none;position:absolute;inset:0;overflow:hidden}.fw-canvas:focus-visible{box-shadow:inset 0 0 0 2px var(--accent-violet)}.fw-canvas.is-panning{cursor:grabbing}.fw-world{transform-origin:0 0;will-change:transform;position:absolute;top:0;left:0}.fw-edges{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.fw-nodes{position:absolute;top:0;left:0}.fw-edge{fill:none;stroke:var(--stroke-strong);stroke-width:2px;transition:stroke var(--duration-fast) var(--ease-standard)}.fw-edge.type-image{stroke:color-mix(in srgb, var(--fw-type-image) 55%, transparent)}.fw-edge.type-text{stroke:color-mix(in srgb, var(--fw-type-text) 55%, transparent)}.fw-edge.type-mesh{stroke:color-mix(in srgb, var(--fw-type-mesh) 55%, transparent)}.fw-edge.is-done{stroke-width:2.5px}.fw-edge.is-done.type-mesh{stroke:var(--fw-type-mesh)}.fw-edge.is-done.type-image{stroke:var(--fw-type-image)}.fw-edge.is-done.type-text{stroke:var(--fw-type-text)}.fw-edge.is-flowing{stroke-dasharray:6 6;animation:.6s linear infinite fw-flow}.fw-edge.is-selected{stroke:var(--ink-bright);stroke-width:3px}.fw-edge.is-temp{stroke-dasharray:5 5;stroke:var(--ink-bright)}.fw-edge-hit{fill:none;stroke:#0000;stroke-width:14px;pointer-events:stroke;cursor:pointer}.fw-edge-hit:hover+.fw-edge,.fw-edge-hit:hover{stroke:color-mix(in srgb, var(--ink-bright) 18%, transparent)}@keyframes fw-flow{to{stroke-dashoffset:-12px}}.fw-node{border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);width:228px;box-shadow:var(--shadow-2);-webkit-user-select:none;user-select:none;cursor:grab;transition:border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);position:absolute;top:0;left:0}.fw-node:before{content:"";border-radius:var(--radius-md) var(--radius-md) 0 0;background:var(--fw-cat);opacity:.85;height:3px;position:absolute;inset:0 0 auto}.fw-canvas.is-dragging .fw-node{cursor:grabbing}.fw-node:hover{border-color:var(--ink-faint)}.fw-node:focus-visible{outline:2px solid var(--accent-violet);outline-offset:2px}.fw-node.is-selected{border-color:var(--ink-bright);box-shadow:0 0 0 1px var(--ink-bright), var(--shadow-3)}.fw-node.has-error{border-color:color-mix(in srgb, var(--danger) 70%, transparent)}.fw-node.has-warning{border-color:color-mix(in srgb, var(--warn) 55%, transparent)}.fw-node[data-status=running]{border-color:var(--accent-violet);box-shadow:0 0 0 1px var(--accent-violet), 0 0 24px color-mix(in srgb, var(--accent-violet) 30%, transparent)}.fw-node[data-status=done]{border-color:color-mix(in srgb, var(--success) 55%, transparent)}.fw-node[data-status=failed]{border-color:var(--danger)}.fw-node[data-status=skipped],.fw-node[data-status=cancelled]{opacity:.7}.fw-node-head{align-items:center;gap:8px;padding:10px 10px 6px;display:flex}.fw-node-title{font-weight:var(--weight-semibold);color:var(--ink-bright);font-size:var(--text-md);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.fw-node-badge{font-size:var(--text-2xs);font-weight:var(--weight-semibold);border-radius:var(--radius-pill);white-space:nowrap;font-variant-numeric:tabular-nums;padding:1px 7px}.fw-node-badge:empty{display:none}.fw-node-badge.is-pending{color:var(--ink-dim);background:var(--surface-3)}.fw-node-badge.is-running{color:var(--accent-violet);background:color-mix(in srgb, var(--accent-violet) 16%, transparent)}.fw-node-badge.is-done{color:var(--success);background:color-mix(in srgb, var(--success) 14%, transparent)}.fw-node-badge.is-partial{color:var(--warn);background:color-mix(in srgb, var(--warn) 14%, transparent)}.fw-node-badge.is-failed{color:var(--danger);background:color-mix(in srgb, var(--danger) 16%, transparent)}.fw-node-badge.is-cancelled,.fw-node-badge.is-skipped{color:var(--ink-dim);background:var(--surface-2)}.fw-node-ports{grid-template-columns:1fr 1fr;gap:0 6px;padding:2px 0 4px;display:grid}.fw-node-ins,.fw-node-outs{flex-direction:column;gap:4px;min-width:0;display:flex}.fw-port{font-size:var(--text-sm);color:var(--ink-dim);align-items:center;gap:6px;min-height:20px;display:flex;position:relative}.fw-port.is-in{padding-left:14px}.fw-port.is-out{text-align:right;justify-content:flex-end;padding-right:14px}.fw-port.is-out .fw-port-label{order:-1}.fw-port-opt{color:var(--ink-faint);font-size:var(--text-2xs)}.fw-port-dot{border:2px solid var(--fw-panel);background:var(--ink-dim);cursor:crosshair;width:12px;height:12px;transition:transform var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);border-radius:50%;margin-top:-6px;position:absolute;top:50%}.fw-port.is-in .fw-port-dot{left:-7px}.fw-port.is-out .fw-port-dot{right:-7px}.fw-port[data-type=image] .fw-port-dot{background:var(--fw-type-image)}.fw-port[data-type=text] .fw-port-dot{background:var(--fw-type-text)}.fw-port[data-type=mesh] .fw-port-dot{background:var(--fw-type-mesh)}.fw-port-dot:after{content:"";border-radius:50%;position:absolute;inset:-8px}.fw-port-dot:hover{transform:scale(1.35)}.fw-canvas.is-connecting .fw-port.is-target-bad{opacity:.35}.fw-canvas.is-connecting .fw-port.is-target-ok .fw-port-dot{box-shadow:0 0 0 4px color-mix(in srgb, var(--ink-bright) 22%, transparent);transform:scale(1.3)}.fw-canvas.is-connecting .fw-port.is-target-ok.is-hover .fw-port-dot{box-shadow:0 0 0 5px color-mix(in srgb, var(--success) 45%, transparent);transform:scale(1.6)}.fw-node-summary{color:var(--ink-dim);font-size:var(--text-sm);line-height:var(--leading-tight);-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;padding:0 10px 8px;display:-webkit-box;overflow:hidden}.fw-node-summary:empty{display:none}.fw-node-issue{border-radius:var(--radius-sm);font-size:var(--text-sm);line-height:var(--leading-tight);background:color-mix(in srgb, var(--danger) 10%, transparent);color:var(--danger);margin:0 10px 8px;padding:6px 8px}.fw-node.has-warning .fw-node-issue{background:color-mix(in srgb, var(--warn) 10%, transparent);color:var(--warn)}.fw-node-progress{padding:0 10px 10px}.fw-bar{background:var(--surface-3);border-radius:2px;height:4px;overflow:hidden}.fw-bar>span{background:var(--accent-violet);transform-origin:0;height:100%;transition:transform var(--duration-slow) var(--ease-standard);display:block;transform:scaleX(0)}.fw-bar.is-indeterminate>span{width:35%;animation:fw-indet 1.3s var(--ease-standard) infinite;transform:none}@keyframes fw-indet{0%{transform:translate(-100%)}to{transform:translate(290%)}}.fw-progress-label{color:var(--ink-dim);font-size:var(--text-2xs);font-variant-numeric:tabular-nums;line-height:var(--leading-tight);margin-top:6px}.fw-result{cursor:default;-webkit-user-select:text;user-select:text;animation:fw-fade var(--duration-base) var(--ease-standard);flex-direction:column;gap:6px;padding:0 10px 10px;display:flex}.fw-result[hidden]{display:none}@keyframes fw-fade{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}.fw-viewer{border-radius:var(--radius-sm);background:radial-gradient(circle at 50% 40%, var(--surface-3), var(--surface-1));--poster-color:transparent;width:100%;height:180px}.fw-thumb{object-fit:contain;border-radius:var(--radius-sm);background:var(--surface-1);width:100%;max-height:140px}.fw-result-meta{color:var(--success);font-size:var(--text-2xs);align-items:center;gap:4px;display:flex}.fw-result-note{color:var(--ink-dim);font-size:var(--text-2xs);line-height:var(--leading-tight)}.fw-result-links{flex-wrap:wrap;gap:4px;display:flex}.fw-result-links .fw-btn{text-overflow:ellipsis;max-width:100%;overflow:hidden}.fw-pager{font-size:var(--text-2xs);color:var(--ink-dim);align-items:center;gap:4px;display:flex}.fw-pager-label{font-variant-numeric:tabular-nums}.fw-pager-dots{flex:1;justify-content:center;gap:3px;display:flex}.fw-pager-dot{background:var(--surface-3);border-radius:50%;width:6px;height:6px}.fw-pager-dot.is-done{background:var(--success)}.fw-pager-dot.is-failed{background:var(--danger)}.fw-pager-dot.is-current{box-shadow:0 0 0 2px var(--ink-bright)}.fw-error{border-radius:var(--radius-sm);border:1px solid color-mix(in srgb, var(--danger) 40%, transparent);background:color-mix(in srgb, var(--danger) 8%, transparent);flex-direction:column;gap:8px;padding:8px;display:flex}.fw-error-msg{color:var(--ink-bright);font-size:var(--text-sm);line-height:var(--leading-tight);overflow-wrap:anywhere;gap:6px;display:flex}.fw-error-msg svg{color:var(--danger);flex:none;margin-top:2px}.fw-error-actions{flex-wrap:wrap;gap:4px;display:flex}.fw-empty{padding:var(--space-lg);text-align:center;pointer-events:none;animation:fw-fade var(--duration-slow) var(--ease-standard);flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.fw-empty[hidden]{display:none}.fw-empty>*{pointer-events:auto}.fw-empty-title{font-family:var(--font-display);font-size:var(--text-xl);color:var(--ink-bright);margin:0 0 6px}.fw-empty-sub{color:var(--ink-dim);margin:0 0 var(--space-lg);max-width:520px;line-height:var(--leading-normal);font-size:var(--text-ui)}.fw-empty-grid{grid-template-columns:repeat(2,minmax(0,260px));gap:10px;display:grid}.fw-tcard{border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:border-color var(--duration-fast) var(--ease-standard), transform var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);flex-direction:column;gap:6px;padding:14px;display:flex}.fw-tcard:hover{border-color:var(--ink-faint);box-shadow:var(--shadow-2);transform:translateY(-2px)}.fw-tcard:active{transform:translateY(0)}.fw-tcard-title{color:var(--ink-bright);font-weight:var(--weight-semibold);font-size:var(--text-ui)}.fw-tcard-desc{color:var(--ink-dim);font-size:var(--text-sm);line-height:var(--leading-tight)}.fw-tcard-needs{color:var(--ink-faint);font-size:var(--text-2xs);margin-top:auto}.fw-zoom{border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);box-shadow:var(--shadow-1);align-items:center;gap:2px;padding:3px;display:flex;position:absolute;bottom:12px;right:12px}.fw-zoom-label{text-align:center;min-width:44px;font-size:var(--text-sm);color:var(--ink-dim);font-variant-numeric:tabular-nums}.fw-canvas-wrap.is-empty .fw-zoom{display:none}.fw-issues{border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);max-width:min(460px,100% - 200px);box-shadow:var(--shadow-2);position:absolute;bottom:12px;left:12px;overflow:hidden}.fw-issues[hidden]{display:none}.fw-issues-head{width:100%;color:var(--ink-bright);font:inherit;font-weight:var(--weight-medium);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:8px 12px;display:flex}.fw-issues-head:hover{background:var(--surface-2)}.fw-issues-head:focus-visible{outline:2px solid var(--accent-violet);outline-offset:-2px}.fw-issues-head.is-error svg{color:var(--danger)}.fw-issues-head.is-warning svg{color:var(--warn)}.fw-issues-sub{color:var(--ink-dim);font-weight:var(--weight-regular)}.fw-issues-list{max-height:220px;font-size:var(--text-sm);line-height:var(--leading-tight);flex-direction:column;gap:6px;margin:0;padding:0 12px 10px 34px;list-style:none;display:flex;overflow-y:auto}.fw-issues-list li{position:relative}.fw-issues-list li:before{content:"";background:var(--danger);border-radius:50%;width:6px;height:6px;position:absolute;top:6px;left:-14px}.fw-issues-list li.is-warning:before{background:var(--warn)}.fw-issues-list.is-inline{border-radius:var(--radius-md);background:color-mix(in srgb, var(--danger) 8%, transparent);padding:8px 12px 8px 26px}.fw-quickadd{z-index:10;border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);min-width:200px;box-shadow:var(--shadow-3);animation:fw-pop var(--duration-base) var(--ease-emphasized);padding:6px;position:absolute}.fw-quickadd-title{color:var(--ink-dim);font-size:var(--text-2xs);padding:4px 8px 6px}.fw-quickadd-item{border-radius:var(--radius-sm);width:100%;color:var(--ink);font:inherit;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:7px 8px;display:flex}.fw-quickadd-item:hover,.fw-quickadd-item:focus-visible{background:var(--surface-3);color:var(--ink-bright)}.fw-inspector{border-left:1px solid var(--stroke);flex-direction:column;gap:14px;padding:14px 14px 24px;display:flex;overflow-y:auto}.fw-insp-head{flex-direction:column;gap:4px;display:flex}.fw-cat{font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.08em;font-weight:var(--weight-semibold);color:var(--fw-cat,var(--ink-dim));align-self:flex-start}.fw-insp-title{font-family:var(--font-display);font-size:var(--text-lg);color:var(--ink-bright);margin:0}.fw-insp-blurb{color:var(--ink-dim);line-height:var(--leading-normal);font-size:var(--text-sm);margin:0}.fw-section{border-top:1px solid var(--stroke);flex-direction:column;gap:10px;padding-top:12px;display:flex}.fw-section-title{font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-dim);font-weight:var(--weight-semibold);margin:0}.fw-insp-actions{flex-flow:wrap;gap:6px}.fw-row{flex-wrap:wrap;gap:6px;display:flex}.fw-modly-status{font-size:var(--text-sm);color:var(--ink);line-height:var(--leading-tight)}.fw-modly-status:empty{display:none}.fw-form{flex-direction:column;gap:12px;display:flex}.fw-field{flex-direction:column;gap:5px;display:flex}.fw-label{font-size:var(--text-sm);color:var(--ink);font-weight:var(--weight-medium)}.fw-hint{font-size:var(--text-2xs);color:var(--ink-faint);line-height:var(--leading-tight);margin:0}.fw-hint:empty{display:none}.fw-input{box-sizing:border-box;border-radius:var(--radius-sm);border:1px solid var(--stroke-strong);background:var(--surface-1);width:100%;min-height:34px;color:var(--ink-bright);font:inherit;font-size:var(--text-md);transition:border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);padding:7px 10px}.fw-input:hover{border-color:var(--ink-faint)}.fw-input:focus{border-color:var(--accent-violet);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent-violet) 25%, transparent);outline:none}.fw-input:disabled{opacity:.55;cursor:not-allowed}textarea.fw-input{resize:vertical;line-height:var(--leading-normal)}select.fw-input{cursor:pointer}select.fw-input option{background:var(--bg-1);color:var(--ink-bright)}.fw-check{font-size:var(--text-sm);cursor:pointer;align-items:center;gap:8px;display:flex}.fw-check input{accent-color:var(--accent-violet);width:16px;height:16px}.fw-images{flex-direction:column;gap:8px;display:flex}.fw-images.is-uploading .fw-drop{opacity:.6;pointer-events:none}.fw-images-grid{grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:6px;display:grid}.fw-images-grid:empty{display:none}.fw-image{aspect-ratio:1;border-radius:var(--radius-sm);background:var(--surface-2);margin:0;position:relative;overflow:hidden}.fw-image img{object-fit:cover;width:100%;height:100%;display:block}.fw-image-remove{background:var(--scrim-strong);width:20px;height:20px;color:var(--on-scrim-bright);cursor:pointer;opacity:.85;transition:opacity var(--duration-fast) var(--ease-standard);border:0;border-radius:50%;place-items:center;display:grid;position:absolute;top:3px;right:3px}.fw-image-remove:hover,.fw-image-remove:focus-visible{opacity:1;outline:2px solid var(--accent-violet)}.fw-drop{border-radius:var(--radius-sm);border:1px dashed var(--stroke-strong);background:var(--surface-1);color:var(--ink-bright);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);flex-wrap:wrap;align-items:center;gap:8px;padding:12px;display:flex}.fw-drop:hover,.fw-drop.is-over{border-color:var(--accent-violet);background:color-mix(in srgb, var(--accent-violet) 8%, transparent)}.fw-drop-sub{color:var(--ink-faint);font-size:var(--text-sm)}.fw-images-pending{font-size:var(--text-sm);color:var(--ink-dim)}.fw-images-pending:empty{display:none}.fw-mesh-field{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.fw-steps{flex-direction:column;gap:6px;max-height:260px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.fw-step{font-size:var(--text-sm);grid-template-columns:10px 1fr auto;align-items:center;gap:4px 8px;display:grid}.fw-step-dot{background:var(--ink-faint);border-radius:50%;width:8px;height:8px}.fw-step.is-done .fw-step-dot{background:var(--success)}.fw-step.is-failed .fw-step-dot{background:var(--danger)}.fw-step.is-running .fw-step-dot{background:var(--accent-violet);animation:1s ease-in-out infinite fw-pulse}.fw-step-name{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.fw-step-state{color:var(--ink-dim)}.fw-step-error{color:var(--danger);line-height:var(--leading-tight);overflow-wrap:anywhere;grid-column:2/-1}@keyframes fw-pulse{50%{opacity:.35}}.fw-issues-inline{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.fw-issues-inline li{font-size:var(--text-sm);line-height:var(--leading-tight);color:var(--ink);gap:6px;display:flex}.fw-issues-inline li.is-error svg{color:var(--danger);flex:none;margin-top:1px}.fw-issues-inline li.is-warning svg{color:var(--warn);flex:none;margin-top:1px}.fw-run-word{font-weight:var(--weight-semibold);color:var(--ink-bright);margin:0}.fw-run-word.is-done{color:var(--success)}.fw-run-word.is-failed{color:var(--danger)}.fw-failed-list{font-size:var(--text-sm);flex-direction:column;gap:4px;margin:0;padding-left:18px;display:flex}.fw-keys{font-size:var(--text-sm);grid-template-columns:auto 1fr;align-items:center;gap:6px 10px;margin:0;display:grid}.fw-keys dt{margin:0}.fw-keys dd{color:var(--ink-dim);margin:0}.fw-toasts{z-index:1000;pointer-events:none;width:max-content;max-width:min(460px,100vw - 32px);font-family:var(--font-body);flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:20px;left:50%;transform:translate(-50%)}.fw-toast{pointer-events:auto;border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--bg-1);color:var(--ink-bright);box-shadow:var(--shadow-3);font-size:var(--text-md);line-height:var(--leading-tight);opacity:0;transition:opacity var(--duration-base) var(--ease-standard), transform var(--duration-base) var(--ease-standard);padding:10px 14px;transform:translateY(8px)}.fw-toast.is-in{opacity:1;transform:none}.fw-toast.is-error{border-color:color-mix(in srgb, var(--danger) 55%, transparent)}.fw-toast.is-success{border-color:color-mix(in srgb, var(--success) 50%, transparent)}.fw-linear{flex-direction:column;flex:1;gap:14px;padding:14px 16px 0;display:flex}.fw-linear[hidden]{display:none}.fw-linear-steps{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.fw-linear-step{border-radius:var(--radius-md);border:1px solid var(--stroke-strong);background:var(--fw-panel);flex-direction:column;gap:8px;padding:12px;display:flex;position:relative}.fw-linear-step:before{content:"";background:var(--fw-cat);border-radius:0 3px 3px 0;width:3px;position:absolute;top:10px;bottom:10px;left:0}.fw-linear-head{align-items:center;gap:8px;display:flex}.fw-linear-num{background:var(--surface-3);width:22px;height:22px;color:var(--ink-dim);font-size:var(--text-2xs);font-variant-numeric:tabular-nums;border-radius:50%;place-items:center;display:grid}.fw-linear-title{font-weight:var(--weight-semibold);color:var(--ink-bright);flex:1}.fw-linear-step .fw-node-summary,.fw-linear-step .fw-result{padding:0}.fw-linear-step .fw-viewer{height:240px}.fw-linear-empty{color:var(--ink-dim);text-align:center;padding:var(--space-lg) 0}.fw-linear-bar{padding:16px 16px calc(12px + env(safe-area-inset-bottom));background:linear-gradient(to top, var(--bg-0) 70%, transparent);z-index:6;margin:0 -16px;position:sticky;bottom:0}.fw-app[data-layout=linear] .fw-body,.fw-app[data-layout=linear] .fw-toolbar .fw-tb-group:nth-child(2),.fw-app[data-layout=linear] .fw-toolbar .fw-tb-group.is-run{display:none}.fw-app[data-layout=linear]{height:auto;min-height:calc(100dvh - var(--nav-h))}@media (width<=1180px){.fw-body{grid-template-columns:168px minmax(0,1fr) 280px}.fw-hide-sm{display:none}}@media (width<=760px){.fw-empty-grid{grid-template-columns:1fr}.fw-toasts{bottom:calc(84px + env(safe-area-inset-bottom))}}@media (prefers-reduced-motion:reduce){.fw-app *,.fw-toast{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.fw-edge.is-flowing{stroke-dasharray:none}}
