@charset "UTF-8";:root{--canvas: #e9e9e6;--surface: #f8f8f6;--surface-raised: #fefefe;--surface-sunk: #e3e3e0;--fg: #1a1a1c;--fg-muted: #5f6063;--fg-faint: #8b8c8f;--fg-inverted: #ffffff;--border: #dcdcd8;--border-control: #90908a;--border-strong: #c4c4bf;--accent: #d6336c;--accent-hover: #b32456;--accent-ink: #a92553;--accent-wash: #f7e8ed;--ok-ink: #1c7048;--ok-wash: #e4ece6;--ok-edge: #bcd5c6;--warn-ink: #85570f;--warn-wash: #f0eade;--warn-edge: #dcc9a2;--crit-ink: #b0241d;--crit-wash: #f2e4e2;--crit-edge: #e0b8b3;--idle-ink: #5f6063;--idle-wash: #e7e7e4;--idle-edge: #d1d1cc;--busy-ink: #1e5b91;--busy-wash: #e2e8ef;--busy-edge: #b6cbdf;--deep: #1a1a1c;--deep-raised: #252528;--deep-fg: #f0f0f1;--deep-fg-muted: #9a9b9e;--deep-border: #2e2e32;--shadow-card: 0 1px 2px rgba(20, 20, 22, .04);--shadow-pop: 0 1px 2px rgba(20, 20, 22, .06), 0 8px 24px rgba(20, 20, 22, .1);--shadow-deep: 0 2px 4px rgba(20, 20, 22, .08), 0 16px 40px rgba(20, 20, 22, .16);--font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Mono", "Consolas", monospace;--radius-chip: 4px;--radius-control: 6px;--radius-panel: 10px;--radius-pop: 12px;--radius-pill: 999px;--radius-sm: var(--radius-control);--radius-md: var(--radius-chip);--radius-lg: var(--radius-panel);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--content-width: 1120px;--content-width-wide: 1400px;--rail-width: 236px;--duration: .12s;--ease: cubic-bezier(.2, 0, 0, 1);--bg: var(--canvas)}[data-theme=dark]{--canvas: #131315;--surface: #1b1b1e;--surface-raised: #232327;--surface-sunk: #0e0e10;--fg: #eaeaec;--fg-muted: #a0a1a6;--fg-faint: #74757a;--fg-inverted: #131315;--border: #2c2c31;--border-control: #55565d;--border-strong: #3c3d42;--accent: #e0457b;--accent-hover: #ee6595;--accent-ink: #f28cb0;--accent-wash: #2c1922;--ok-ink: #6ec994;--ok-wash: #16241c;--ok-edge: #2a4435;--warn-ink: #d8ac64;--warn-wash: #241f15;--warn-edge: #453a24;--crit-ink: #ec8b82;--crit-wash: #271a19;--crit-edge: #4a2e2b;--idle-ink: #a0a1a6;--idle-wash: #1e1e21;--idle-edge: #34353a;--busy-ink: #7fb5e3;--busy-wash: #15202a;--busy-edge: #294052;--deep: #0d0d0f;--deep-raised: #18181b;--deep-fg: #eaeaec;--deep-fg-muted: #8b8c91;--deep-border: #232326;--shadow-card: 0 1px 2px rgba(0, 0, 0, .24);--shadow-pop: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px rgba(0, 0, 0, .4);--shadow-deep: 0 2px 4px rgba(0, 0, 0, .36), 0 16px 40px rgba(0, 0, 0, .52)}:root{--sh-background: var(--canvas);--sh-surface: var(--surface);--sh-surface-muted: var(--surface-sunk);--sh-text: var(--fg);--sh-text-muted: var(--fg-muted);--sh-border: var(--border);--sh-border-strong: var(--border-strong);--sh-accent: var(--accent);--sh-accent-strong: var(--accent-hover);--sh-accent-subtle: var(--accent-wash);--sh-success: var(--ok-ink);--sh-warning: var(--warn-ink);--sh-warning-soft: var(--warn-wash);--sh-danger: var(--crit-ink);--sh-danger-soft: var(--crit-wash);--sh-radius: var(--radius-control);--sh-font-family: var(--font-sans);--sh-backdrop: rgb(20 20 22 / .55)}[data-theme=dark]{--sh-backdrop: rgb(0 0 0 / .6)}:root{--ff-white: #ffffff;--ff-black: #000000;--ff-gray-0: #ffffff;--ff-gray-25: #fcfcfc;--ff-gray-50: #f8f8f7;--ff-gray-75: #f2f2f0;--ff-gray-100: #e9e9e6;--ff-gray-150: #dcdcd7;--ff-gray-200: #c9c9c1;--ff-gray-300: #afafa5;--ff-gray-400: #8d8d81;--ff-gray-500: #69695f;--ff-gray-600: #505048;--ff-gray-700: #3c3c36;--ff-gray-800: #272722;--ff-gray-900: #1b1b18;--ff-gray-950: #141412;--ff-gray-1000: #0f0f0d;--ff-alpha-black-04: rgba(15, 15, 13, .04);--ff-alpha-black-06: rgba(15, 15, 13, .06);--ff-alpha-black-08: rgba(15, 15, 13, .08);--ff-alpha-black-10: rgba(15, 15, 13, .1);--ff-alpha-black-12: rgba(15, 15, 13, .12);--ff-alpha-black-15: rgba(15, 15, 13, .15);--ff-alpha-black-20: rgba(15, 15, 13, .2);--ff-alpha-black-30: rgba(15, 15, 13, .3);--ff-alpha-black-40: rgba(15, 15, 13, .4);--ff-alpha-black-60: rgba(15, 15, 13, .6);--ff-alpha-white-04: rgba(255, 255, 255, .04);--ff-alpha-white-06: rgba(255, 255, 255, .06);--ff-alpha-white-08: rgba(255, 255, 255, .08);--ff-alpha-white-10: rgba(255, 255, 255, .1);--ff-alpha-white-12: rgba(255, 255, 255, .12);--ff-alpha-white-15: rgba(255, 255, 255, .15);--ff-alpha-white-20: rgba(255, 255, 255, .2);--ff-alpha-white-30: rgba(255, 255, 255, .3);--ff-alpha-white-40: rgba(255, 255, 255, .4);--ff-alpha-white-60: rgba(255, 255, 255, .6);--ff-blue-100: #e8f2ff;--ff-blue-200: #bad8ff;--ff-blue-300: #7db7ff;--ff-blue-400: #4176ff;--ff-blue-500: #2759db;--ff-blue-600: #1b3f9e;--ff-green-100: #e7f7ef;--ff-green-300: #71c795;--ff-green-400: #2b9b5f;--ff-green-500: #1e7748;--ff-yellow-100: #fff5de;--ff-yellow-300: #e1b354;--ff-yellow-400: #bb8121;--ff-yellow-500: #916112;--ff-red-100: #feeceb;--ff-red-300: #e48d85;--ff-red-400: #c55245;--ff-red-500: #9e3a2f;--ff-radius-4: 4px;--ff-radius-6: 6px;--ff-radius-pill: 999px;--ff-font-family-sans: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ff-font-family-mono: ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;--ff-font-size-xs: 12px;--ff-font-size-sm: 14px;--ff-font-size-md: 16px;--ff-font-size-lg: 18px;--ff-shadow-1: 0 1px 2px rgba(15, 15, 13, .05), 0 8px 20px rgba(15, 15, 13, .04);--ff-shadow-2: 0 10px 28px rgba(15, 15, 13, .08), 0 3px 10px rgba(15, 15, 13, .05);--ff-shadow-3: 0 18px 48px rgba(15, 15, 13, .12), 0 6px 16px rgba(15, 15, 13, .08)}:root{--ff-color-surface-page: var(--ff-gray-25);--ff-color-surface-canvas: var(--ff-gray-25);--ff-color-surface-card: var(--ff-white);--ff-color-surface-group: rgba(65, 118, 255, .14);--ff-color-surface-group-active: rgba(65, 118, 255, .2);--ff-color-surface-muted: var(--ff-gray-50);--ff-color-surface-soft: var(--ff-gray-75);--ff-color-surface-accent-soft: rgba(65, 118, 255, .1);--ff-color-border-default: var(--ff-alpha-black-12);--ff-color-border-subtle: var(--ff-alpha-black-08);--ff-color-border-strong: var(--ff-alpha-black-20);--ff-color-border-accent: var(--ff-blue-500);--ff-color-text-primary: var(--ff-gray-800);--ff-color-text-secondary: var(--ff-gray-500);--ff-color-text-tertiary: var(--ff-gray-400);--ff-color-text-inverse: var(--ff-white);--ff-color-accent: var(--ff-blue-500);--ff-color-accent-strong: var(--ff-blue-600);--ff-color-success: var(--ff-green-400);--ff-color-warning: var(--ff-yellow-400);--ff-color-danger: var(--ff-red-400);--ff-color-disabled-surface: var(--ff-gray-100);--ff-color-disabled-border: var(--ff-alpha-black-10);--ff-color-disabled-text: var(--ff-gray-300);--ff-color-selection-fill: rgba(65, 118, 255, .12);--ff-color-selection-stroke: rgba(65, 118, 255, .28);--ff-color-grid: var(--ff-alpha-black-08);--ff-color-grid-strong: var(--ff-alpha-black-15);--ff-color-connector-connected: var(--ff-blue-500);--ff-color-connection: var(--ff-gray-600);--ff-color-connection-muted: var(--ff-gray-300);--ff-color-connection-hover: var(--ff-alpha-black-12);--ff-color-grouping-drop-target-border: var(--ff-gray-800);--ff-color-grouping-drop-target-border-active: var(--ff-gray-800);--ff-color-waypoint-fill: var(--ff-white);--ff-color-waypoint-stroke: var(--ff-blue-500);--ff-color-waypoint-candidate-fill: var(--ff-white);--ff-color-waypoint-candidate-stroke: var(--ff-green-400);--ff-color-minimap-surface: var(--ff-white);--ff-color-minimap-node: var(--ff-gray-700);--ff-color-minimap-view: rgba(65, 118, 255, .14);--ff-color-magnetic-line: var(--ff-blue-500);--ff-color-magnetic-rect-fill: rgba(65, 118, 255, .08);--ff-color-magnetic-rect-border: rgba(65, 118, 255, .24);--ff-radius-node: var(--ff-radius-4);--ff-radius-group: var(--ff-radius-4);--ff-radius-control: var(--ff-radius-4);--ff-radius-socket-square: var(--ff-radius-6);--ff-radius-pill: var(--ff-radius-pill);--ff-font-sans: var(--ff-font-family-sans);--ff-font-mono: var(--ff-font-family-mono);--ff-font-size-body: var(--ff-font-size-sm);--ff-font-size-label: var(--ff-font-size-xs);--ff-shadow-surface: var(--ff-shadow-1);--ff-shadow-floating: var(--ff-shadow-2)}.dark,[data-theme=dark]{--ff-color-surface-page: var(--ff-gray-1000);--ff-color-surface-canvas: var(--ff-gray-1000);--ff-color-surface-card: var(--ff-gray-950);--ff-color-surface-group: rgba(125, 183, 255, .18);--ff-color-surface-group-active: rgba(125, 183, 255, .24);--ff-color-surface-muted: var(--ff-gray-900);--ff-color-surface-soft: var(--ff-gray-900);--ff-color-surface-accent-soft: rgba(125, 183, 255, .14);--ff-color-border-default: var(--ff-alpha-white-12);--ff-color-border-subtle: var(--ff-alpha-white-08);--ff-color-border-strong: var(--ff-alpha-white-20);--ff-color-border-accent: var(--ff-blue-300);--ff-color-text-primary: var(--ff-gray-100);--ff-color-text-secondary: var(--ff-gray-300);--ff-color-text-tertiary: var(--ff-gray-400);--ff-color-text-inverse: var(--ff-gray-1000);--ff-color-accent: var(--ff-blue-300);--ff-color-accent-strong: var(--ff-blue-200);--ff-color-success: var(--ff-green-300);--ff-color-warning: var(--ff-yellow-300);--ff-color-danger: var(--ff-red-300);--ff-color-disabled-surface: var(--ff-gray-800);--ff-color-disabled-border: var(--ff-alpha-white-10);--ff-color-disabled-text: var(--ff-gray-500);--ff-color-selection-fill: rgba(125, 183, 255, .16);--ff-color-selection-stroke: rgba(125, 183, 255, .34);--ff-color-grid: var(--ff-alpha-white-08);--ff-color-grid-strong: var(--ff-alpha-white-15);--ff-color-connector-connected: var(--ff-blue-300);--ff-color-connection: var(--ff-gray-200);--ff-color-connection-muted: var(--ff-gray-500);--ff-color-connection-hover: var(--ff-alpha-white-12);--ff-color-grouping-drop-target-border: var(--ff-gray-100);--ff-color-grouping-drop-target-border-active: var(--ff-gray-100);--ff-color-waypoint-fill: var(--ff-gray-950);--ff-color-waypoint-stroke: var(--ff-blue-300);--ff-color-waypoint-candidate-fill: var(--ff-white);--ff-color-waypoint-candidate-stroke: var(--ff-green-300);--ff-color-minimap-surface: var(--ff-gray-950);--ff-color-minimap-node: var(--ff-gray-200);--ff-color-minimap-view: rgba(125, 183, 255, .18);--ff-color-magnetic-line: var(--ff-blue-300);--ff-color-magnetic-rect-fill: rgba(125, 183, 255, .1);--ff-color-magnetic-rect-border: rgba(125, 183, 255, .24);--ff-shadow-surface: 0 1px 2px rgba(0, 0, 0, .28), 0 8px 20px rgba(0, 0, 0, .14);--ff-shadow-floating: 0 14px 36px rgba(0, 0, 0, .26), 0 4px 12px rgba(0, 0, 0, .16)}:root{--ff-flow-background-color: var(--ff-color-surface-page);--ff-flow-text-color: var(--ff-color-text-primary);--ff-flow-font-family: var(--ff-font-sans);--ff-flow-font-size: var(--ff-font-size-body);--ff-canvas-background-color: var(--ff-color-surface-canvas);--ff-node-background-color: var(--ff-color-surface-card);--ff-node-background-color-inverse: var(--ff-color-text-primary);--ff-node-border-color: var(--ff-color-border-default);--ff-node-border-color-selected: var(--ff-color-border-accent);--ff-node-color: var(--ff-color-text-primary);--ff-node-border-radius: var(--ff-radius-node);--ff-node-shadow: var(--ff-shadow-surface);--ff-node-shadow-selected: var(--ff-shadow-floating);--ff-node-width: 120px;--ff-node-min-height: 56px;--ff-node-padding: 24px;--ff-group-background-color: var(--ff-color-surface-group);--ff-group-background-color-active: var(--ff-color-surface-group-active);--ff-group-border-color: var(--ff-color-border-subtle);--ff-group-border-color-selected: var(--ff-color-border-accent);--ff-group-border-color-active: var(--ff-color-border-accent);--ff-group-color: var(--ff-color-text-secondary);--ff-group-border-radius: var(--ff-radius-group);--ff-group-min-width: 180px;--ff-group-min-height: 120px;--ff-group-padding: 24px;--ff-grouping-drop-target-border-color: var(--ff-color-grouping-drop-target-border);--ff-grouping-drop-target-border-style: dashed;--ff-grouping-drop-target-border-width: 1px;--ff-grouping-drop-target-border-color-active: var( --ff-color-grouping-drop-target-border-active );--ff-grouping-drop-target-border-style-active: dashed;--ff-grouping-drop-target-border-width-active: 2px;--ff-resize-handle-size: 8px;--ff-resize-handle-fill: var(--ff-color-accent);--ff-resize-handle-stroke: var(--ff-color-surface-card);--ff-resize-handle-ring: var(--ff-color-accent);--ff-resize-handle-radius: 1px;--ff-resize-handle-fill-active: var(--ff-color-surface-card);--ff-rotate-handle-size: 16px;--ff-rotate-handle-offset: 40px;--ff-rotate-handle-background-color: var(--ff-color-surface-card);--ff-rotate-handle-border-color: var(--ff-color-border-strong);--ff-rotate-handle-guide-color: var(--ff-color-border-strong);--ff-connector-background-color: var(--ff-color-surface-card);--ff-connector-border-color: var(--ff-color-text-secondary);--ff-connector-connected-color: var(--ff-color-connector-connected);--ff-connector-accent-color: var(--ff-color-accent);--ff-connector-disabled-color: var(--ff-color-disabled-surface);--ff-connector-disabled-border-color: var(--ff-color-disabled-border);--ff-connector-size: 14px;--ff-connector-border-width: 2px;--ff-connector-input-radius: var(--ff-radius-4);--ff-connector-node-ring-color: var(--ff-canvas-background-color);--ff-outlet-background-color: var(--ff-color-surface-muted);--ff-outlet-border-color: var(--ff-color-border-default);--ff-outlet-color: var(--ff-color-accent);--ff-outlet-disabled-background-color: var(--ff-color-disabled-surface);--ff-outlet-disabled-border-color: var(--ff-color-disabled-border);--ff-outlet-disabled-color: var(--ff-color-disabled-text);--ff-outlet-border-radius: var(--ff-radius-pill);--ff-outlet-padding-y: 6px;--ff-outlet-padding-x: 12px;--ff-connection-color: var(--ff-color-connection);--ff-snap-connection-color: var(--ff-color-connection-muted);--ff-connection-hover-color: var(--ff-color-connection-hover);--ff-connection-selected-color: var(--ff-color-accent);--ff-connection-label-color: var(--ff-color-text-secondary);--ff-connection-content-color: var(--ff-node-color);--ff-connection-content-background-color: var(--ff-node-background-color);--ff-connection-content-border-color: var(--ff-node-border-color);--ff-connection-content-border-color-selected: var(--ff-connection-selected-color);--ff-connection-content-border-radius: var(--ff-node-border-radius);--ff-connection-content-font-size: 13px;--ff-connection-content-padding-y: 2px;--ff-connection-content-padding-x: 8px;--ff-connection-width: 2px;--ff-connection-hit-width: 14px;--ff-connection-drag-handle-fill: var(--ff-color-surface-card);--ff-connection-drag-handle-stroke: var(--ff-color-accent);--ff-marker-color: var(--ff-connection-color);--ff-waypoint-fill: var(--ff-color-waypoint-fill);--ff-waypoint-stroke: var(--ff-color-waypoint-stroke);--ff-waypoint-candidate-fill: var(--ff-color-waypoint-candidate-fill);--ff-waypoint-candidate-stroke: var(--ff-color-waypoint-candidate-stroke);--ff-background-line-color: var(--ff-color-grid);--ff-background-dot-color: var(--ff-color-grid-strong);--ff-selection-area-color: var(--ff-color-selection-fill);--ff-selection-area-border-color: var(--ff-color-selection-stroke);--ff-minimap-background-color: var(--ff-color-minimap-surface);--ff-minimap-border-color: var(--ff-color-border-default);--ff-minimap-node-color: var(--ff-color-minimap-node);--ff-minimap-node-selected-color: var(--ff-color-accent);--ff-minimap-view-color: var(--ff-color-minimap-view);--ff-minimap-view-border-color: var(--ff-color-selection-stroke);--ff-minimap-border-radius: var(--ff-radius-node);--ff-minimap-shadow: var(--ff-shadow-floating);--ff-magnetic-line-color: var(--ff-color-magnetic-line);--ff-magnetic-rect-fill: var(--ff-color-magnetic-rect-fill);--ff-magnetic-rect-border-color: var(--ff-color-magnetic-rect-border);--ff-external-item-background-color: var(--ff-color-surface-card);--ff-external-item-border-color: var(--ff-color-border-default);--ff-external-item-color: var(--ff-color-text-primary);--ff-external-item-disabled-color: var(--ff-color-disabled-text);--ff-external-item-disabled-background-color: var(--ff-color-disabled-surface);--ff-external-item-border-radius: var(--ff-radius-node);--ff-external-item-shadow: var(--ff-shadow-surface);--ff-external-item-preview-shadow: var(--ff-shadow-floating);--ff-external-item-placeholder-background-color: var(--ff-color-surface-soft);--ff-external-item-placeholder-border-color: var(--ff-color-border-subtle)}f-flow,.f-flow{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none;color:var(--ff-flow-text-color);background:var(--ff-flow-background-color);font-family:var(--ff-flow-font-family);font-size:var(--ff-flow-font-size);line-height:1.4}f-flow .f-canvas,.f-flow .f-canvas{background:var(--ff-canvas-background-color)}f-flow .f-node,.f-flow .f-node{width:var(--ff-node-width);min-height:var(--ff-node-min-height);padding:var(--ff-node-padding);box-sizing:border-box;color:var(--ff-node-color);text-align:center;background:var(--ff-node-background-color);border:1px solid var(--ff-node-border-color);border-radius:var(--ff-node-border-radius);box-shadow:var(--ff-node-shadow)}f-flow .f-node .node-content,.f-flow .f-node .node-content{width:100%;height:100%;overflow:hidden}f-flow .f-node.f-selected,.f-flow .f-node.f-selected{border-color:var(--ff-node-border-color-selected);box-shadow:var(--ff-node-shadow-selected)}f-flow .f-node.f-dragging,.f-flow .f-node.f-dragging{box-shadow:var(--ff-node-shadow-selected)}f-flow .f-group,.f-flow .f-group{min-width:var(--ff-group-min-width);min-height:var(--ff-group-min-height);padding:var(--ff-group-padding);box-sizing:border-box;color:var(--ff-group-color);background:var(--ff-group-background-color);border:1px solid var(--ff-group-border-color);border-radius:var(--ff-group-border-radius)}f-flow .f-group.f-selected,.f-flow .f-group.f-selected{border-color:var(--ff-group-border-color-selected)}f-flow .f-drag-handle,.f-flow .f-drag-handle{cursor:move}f-flow .f-drag-handle img,.f-flow .f-drag-handle img{pointer-events:none}f-flow .f-resize-handle,.f-flow .f-resize-handle{position:absolute;width:var(--ff-resize-handle-size);height:var(--ff-resize-handle-size);box-sizing:border-box;border:1.5px solid var(--ff-resize-handle-stroke);border-radius:var(--ff-resize-handle-radius);background:var(--ff-resize-handle-fill);box-shadow:0 0 0 1px var(--ff-resize-handle-ring),0 1px 2px #0f0f0d2e;transition:background-color .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1)}f-flow .f-resize-handle:hover,.f-flow .f-resize-handle:hover{box-shadow:0 0 0 1px var(--ff-resize-handle-ring),0 0 0 5px color-mix(in oklch,var(--ff-resize-handle-ring) 25%,transparent)}f-flow .f-resize-handle:active,.f-flow .f-resize-handle:active{background:var(--ff-resize-handle-fill-active);box-shadow:0 0 0 2px var(--ff-resize-handle-ring),0 0 0 6px color-mix(in oklch,var(--ff-resize-handle-ring) 28%,transparent)}f-flow .f-resize-handle.f-resize-handle-left,.f-flow .f-resize-handle.f-resize-handle-left{left:0;top:50%;transform:translate(-50%,-50%);cursor:col-resize}f-flow .f-resize-handle.f-resize-handle-left-top,.f-flow .f-resize-handle.f-resize-handle-left-top{left:0;top:0;transform:translate(-50%,-50%);cursor:nwse-resize}f-flow .f-resize-handle.f-resize-handle-top,.f-flow .f-resize-handle.f-resize-handle-top{left:50%;top:0;transform:translate(-50%,-50%);cursor:row-resize}f-flow .f-resize-handle.f-resize-handle-right-top,.f-flow .f-resize-handle.f-resize-handle-right-top{right:0;top:0;transform:translate(50%,-50%);cursor:nesw-resize}f-flow .f-resize-handle.f-resize-handle-right,.f-flow .f-resize-handle.f-resize-handle-right{right:0;top:50%;transform:translate(50%,-50%);cursor:col-resize}f-flow .f-resize-handle.f-resize-handle-right-bottom,.f-flow .f-resize-handle.f-resize-handle-right-bottom{right:0;bottom:0;transform:translate(50%,50%);cursor:nwse-resize}f-flow .f-resize-handle.f-resize-handle-bottom,.f-flow .f-resize-handle.f-resize-handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%);cursor:row-resize}f-flow .f-resize-handle.f-resize-handle-left-bottom,.f-flow .f-resize-handle.f-resize-handle-left-bottom{left:0;bottom:0;transform:translate(-50%,50%);cursor:nesw-resize}f-flow .f-rotate-handle,.f-flow .f-rotate-handle{position:absolute;left:50%;top:calc(var(--ff-rotate-handle-offset) * -1);display:inline-flex;align-items:center;justify-content:center;width:var(--ff-rotate-handle-size);height:var(--ff-rotate-handle-size);box-sizing:border-box;border:1px solid var(--ff-rotate-handle-border-color);border-radius:50%;background:var(--ff-rotate-handle-background-color);transform:translate(-50%);cursor:grab;transition:background-color .15s cubic-bezier(.4,0,.2,1),border-color .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1)}f-flow .f-rotate-handle:after,.f-flow .f-rotate-handle:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:calc(var(--ff-rotate-handle-offset) - var(--ff-rotate-handle-size));background:var(--ff-rotate-handle-guide-color);transform:translate(-50%);pointer-events:none}f-flow .f-rotate-handle:hover,.f-flow .f-rotate-handle:hover{border-color:var(--ff-color-accent);box-shadow:0 0 0 4px color-mix(in oklch,var(--ff-color-accent) 22%,transparent)}f-flow .f-rotate-handle:active,.f-flow .f-rotate-handle:active{background:var(--ff-color-accent);border-color:var(--ff-color-accent);cursor:grabbing;box-shadow:0 0 0 4px color-mix(in oklch,var(--ff-color-accent) 22%,transparent)}f-flow .f-node-input:not(.f-node),f-flow .f-node-output:not(.f-node),f-flow .f-connector-source:not(.f-node),f-flow .f-connector-target:not(.f-node),f-flow .f-connector-source-target:not(.f-node),.f-flow .f-node-input:not(.f-node),.f-flow .f-node-output:not(.f-node),.f-flow .f-connector-source:not(.f-node),.f-flow .f-connector-target:not(.f-node),.f-flow .f-connector-source-target:not(.f-node){position:absolute;width:var(--ff-connector-size);height:var(--ff-connector-size);box-sizing:border-box;border:var(--ff-connector-border-width) solid var(--ff-connector-border-color);border-radius:50%;background:var(--ff-connector-background-color);pointer-events:all;transition:background-color .15s cubic-bezier(.4,0,.2,1),border-color .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1)}f-flow .f-node-input:not(.f-node).left,f-flow .f-node-output:not(.f-node).left,f-flow .f-connector-source:not(.f-node).left,f-flow .f-connector-target:not(.f-node).left,f-flow .f-connector-source-target:not(.f-node).left,.f-flow .f-node-input:not(.f-node).left,.f-flow .f-node-output:not(.f-node).left,.f-flow .f-connector-source:not(.f-node).left,.f-flow .f-connector-target:not(.f-node).left,.f-flow .f-connector-source-target:not(.f-node).left{left:calc(var(--ff-connector-size) / -2);top:50%;transform:translateY(-50%)}f-flow .f-node-input:not(.f-node).right,f-flow .f-node-output:not(.f-node).right,f-flow .f-connector-source:not(.f-node).right,f-flow .f-connector-target:not(.f-node).right,f-flow .f-connector-source-target:not(.f-node).right,.f-flow .f-node-input:not(.f-node).right,.f-flow .f-node-output:not(.f-node).right,.f-flow .f-connector-source:not(.f-node).right,.f-flow .f-connector-target:not(.f-node).right,.f-flow .f-connector-source-target:not(.f-node).right{right:calc(var(--ff-connector-size) / -2);top:50%;transform:translateY(-50%)}f-flow .f-node-input:not(.f-node).top,f-flow .f-node-output:not(.f-node).top,f-flow .f-connector-source:not(.f-node).top,f-flow .f-connector-target:not(.f-node).top,f-flow .f-connector-source-target:not(.f-node).top,.f-flow .f-node-input:not(.f-node).top,.f-flow .f-node-output:not(.f-node).top,.f-flow .f-connector-source:not(.f-node).top,.f-flow .f-connector-target:not(.f-node).top,.f-flow .f-connector-source-target:not(.f-node).top{top:calc(var(--ff-connector-size) / -2);left:50%;transform:translate(-50%)}f-flow .f-node-input:not(.f-node).top-left,f-flow .f-node-output:not(.f-node).top-left,f-flow .f-connector-source:not(.f-node).top-left,f-flow .f-connector-target:not(.f-node).top-left,f-flow .f-connector-source-target:not(.f-node).top-left,.f-flow .f-node-input:not(.f-node).top-left,.f-flow .f-node-output:not(.f-node).top-left,.f-flow .f-connector-source:not(.f-node).top-left,.f-flow .f-connector-target:not(.f-node).top-left,.f-flow .f-connector-source-target:not(.f-node).top-left{top:calc(var(--ff-connector-size) / -2);left:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).top-right,f-flow .f-node-output:not(.f-node).top-right,f-flow .f-connector-source:not(.f-node).top-right,f-flow .f-connector-target:not(.f-node).top-right,f-flow .f-connector-source-target:not(.f-node).top-right,.f-flow .f-node-input:not(.f-node).top-right,.f-flow .f-node-output:not(.f-node).top-right,.f-flow .f-connector-source:not(.f-node).top-right,.f-flow .f-connector-target:not(.f-node).top-right,.f-flow .f-connector-source-target:not(.f-node).top-right{top:calc(var(--ff-connector-size) / -2);right:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).bottom,f-flow .f-node-output:not(.f-node).bottom,f-flow .f-connector-source:not(.f-node).bottom,f-flow .f-connector-target:not(.f-node).bottom,f-flow .f-connector-source-target:not(.f-node).bottom,.f-flow .f-node-input:not(.f-node).bottom,.f-flow .f-node-output:not(.f-node).bottom,.f-flow .f-connector-source:not(.f-node).bottom,.f-flow .f-connector-target:not(.f-node).bottom,.f-flow .f-connector-source-target:not(.f-node).bottom{bottom:calc(var(--ff-connector-size) / -2);left:50%;transform:translate(-50%)}f-flow .f-node-input:not(.f-node).bottom-left,f-flow .f-node-output:not(.f-node).bottom-left,f-flow .f-connector-source:not(.f-node).bottom-left,f-flow .f-connector-target:not(.f-node).bottom-left,f-flow .f-connector-source-target:not(.f-node).bottom-left,.f-flow .f-node-input:not(.f-node).bottom-left,.f-flow .f-node-output:not(.f-node).bottom-left,.f-flow .f-connector-source:not(.f-node).bottom-left,.f-flow .f-connector-target:not(.f-node).bottom-left,.f-flow .f-connector-source-target:not(.f-node).bottom-left{bottom:calc(var(--ff-connector-size) / -2);left:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node).bottom-right,f-flow .f-node-output:not(.f-node).bottom-right,f-flow .f-connector-source:not(.f-node).bottom-right,f-flow .f-connector-target:not(.f-node).bottom-right,f-flow .f-connector-source-target:not(.f-node).bottom-right,.f-flow .f-node-input:not(.f-node).bottom-right,.f-flow .f-node-output:not(.f-node).bottom-right,.f-flow .f-connector-source:not(.f-node).bottom-right,.f-flow .f-connector-target:not(.f-node).bottom-right,.f-flow .f-connector-source-target:not(.f-node).bottom-right{bottom:calc(var(--ff-connector-size) / -2);right:calc(var(--ff-connector-size) / -2)}f-flow .f-node-input:not(.f-node):hover,f-flow .f-node-output:not(.f-node):hover,f-flow .f-connector-source:not(.f-node):hover,f-flow .f-connector-target:not(.f-node):hover,f-flow .f-connector-source-target:not(.f-node):hover,.f-flow .f-node-input:not(.f-node):hover,.f-flow .f-node-output:not(.f-node):hover,.f-flow .f-connector-source:not(.f-node):hover,.f-flow .f-connector-target:not(.f-node):hover,.f-flow .f-connector-source-target:not(.f-node):hover{box-shadow:0 0 0 4px color-mix(in oklch,var(--ff-connector-accent-color) 22%,transparent)}f-flow .f-node-input:not(.f-node).f-connector-connectable,f-flow .f-node-output:not(.f-node).f-connector-connectable,f-flow .f-connector-source:not(.f-node).f-connector-connectable,f-flow .f-connector-target:not(.f-node).f-connector-connectable,f-flow .f-connector-source-target:not(.f-node).f-connector-connectable,.f-flow .f-node-input:not(.f-node).f-connector-connectable,.f-flow .f-node-output:not(.f-node).f-connector-connectable,.f-flow .f-connector-source:not(.f-node).f-connector-connectable,.f-flow .f-connector-target:not(.f-node).f-connector-connectable,.f-flow .f-connector-source-target:not(.f-node).f-connector-connectable{border-color:var(--ff-connector-accent-color)}f-flow .f-node-input:not(.f-node).f-node-output-connected,f-flow .f-node-input:not(.f-node).f-node-input-connected,f-flow .f-node-input:not(.f-node).f-connector-connected,f-flow .f-node-output:not(.f-node).f-node-output-connected,f-flow .f-node-output:not(.f-node).f-node-input-connected,f-flow .f-node-output:not(.f-node).f-connector-connected,f-flow .f-connector-source:not(.f-node).f-node-output-connected,f-flow .f-connector-source:not(.f-node).f-node-input-connected,f-flow .f-connector-source:not(.f-node).f-connector-connected,f-flow .f-connector-target:not(.f-node).f-node-output-connected,f-flow .f-connector-target:not(.f-node).f-node-input-connected,f-flow .f-connector-target:not(.f-node).f-connector-connected,f-flow .f-connector-source-target:not(.f-node).f-node-output-connected,f-flow .f-connector-source-target:not(.f-node).f-node-input-connected,f-flow .f-connector-source-target:not(.f-node).f-connector-connected,.f-flow .f-node-input:not(.f-node).f-node-output-connected,.f-flow .f-node-input:not(.f-node).f-node-input-connected,.f-flow .f-node-input:not(.f-node).f-connector-connected,.f-flow .f-node-output:not(.f-node).f-node-output-connected,.f-flow .f-node-output:not(.f-node).f-node-input-connected,.f-flow .f-node-output:not(.f-node).f-connector-connected,.f-flow .f-connector-source:not(.f-node).f-node-output-connected,.f-flow .f-connector-source:not(.f-node).f-node-input-connected,.f-flow .f-connector-source:not(.f-node).f-connector-connected,.f-flow .f-connector-target:not(.f-node).f-node-output-connected,.f-flow .f-connector-target:not(.f-node).f-node-input-connected,.f-flow .f-connector-target:not(.f-node).f-connector-connected,.f-flow .f-connector-source-target:not(.f-node).f-node-output-connected,.f-flow .f-connector-source-target:not(.f-node).f-node-input-connected,.f-flow .f-connector-source-target:not(.f-node).f-connector-connected{background:var(--ff-connector-connected-color);border-color:var(--ff-connector-connected-color)}f-flow .f-node-input:not(.f-node).f-node-output-not-connectable,f-flow .f-node-input:not(.f-node).f-node-input-not-connectable,f-flow .f-node-input:not(.f-node).f-connector-not-connectable,f-flow .f-node-input:not(.f-node).f-node-input-disabled,f-flow .f-node-input:not(.f-node).f-node-output-disabled,f-flow .f-node-input:not(.f-node).f-connector-disabled,f-flow .f-node-output:not(.f-node).f-node-output-not-connectable,f-flow .f-node-output:not(.f-node).f-node-input-not-connectable,f-flow .f-node-output:not(.f-node).f-connector-not-connectable,f-flow .f-node-output:not(.f-node).f-node-input-disabled,f-flow .f-node-output:not(.f-node).f-node-output-disabled,f-flow .f-node-output:not(.f-node).f-connector-disabled,f-flow .f-connector-source:not(.f-node).f-node-output-not-connectable,f-flow .f-connector-source:not(.f-node).f-node-input-not-connectable,f-flow .f-connector-source:not(.f-node).f-connector-not-connectable,f-flow .f-connector-source:not(.f-node).f-node-input-disabled,f-flow .f-connector-source:not(.f-node).f-node-output-disabled,f-flow .f-connector-source:not(.f-node).f-connector-disabled,f-flow .f-connector-target:not(.f-node).f-node-output-not-connectable,f-flow .f-connector-target:not(.f-node).f-node-input-not-connectable,f-flow .f-connector-target:not(.f-node).f-connector-not-connectable,f-flow .f-connector-target:not(.f-node).f-node-input-disabled,f-flow .f-connector-target:not(.f-node).f-node-output-disabled,f-flow .f-connector-target:not(.f-node).f-connector-disabled,f-flow .f-connector-source-target:not(.f-node).f-node-output-not-connectable,f-flow .f-connector-source-target:not(.f-node).f-node-input-not-connectable,f-flow .f-connector-source-target:not(.f-node).f-connector-not-connectable,f-flow .f-connector-source-target:not(.f-node).f-node-input-disabled,f-flow .f-connector-source-target:not(.f-node).f-node-output-disabled,f-flow .f-connector-source-target:not(.f-node).f-connector-disabled,.f-flow .f-node-input:not(.f-node).f-node-output-not-connectable,.f-flow .f-node-input:not(.f-node).f-node-input-not-connectable,.f-flow .f-node-input:not(.f-node).f-connector-not-connectable,.f-flow .f-node-input:not(.f-node).f-node-input-disabled,.f-flow .f-node-input:not(.f-node).f-node-output-disabled,.f-flow .f-node-input:not(.f-node).f-connector-disabled,.f-flow .f-node-output:not(.f-node).f-node-output-not-connectable,.f-flow .f-node-output:not(.f-node).f-node-input-not-connectable,.f-flow .f-node-output:not(.f-node).f-connector-not-connectable,.f-flow .f-node-output:not(.f-node).f-node-input-disabled,.f-flow .f-node-output:not(.f-node).f-node-output-disabled,.f-flow .f-node-output:not(.f-node).f-connector-disabled,.f-flow .f-connector-source:not(.f-node).f-node-output-not-connectable,.f-flow .f-connector-source:not(.f-node).f-node-input-not-connectable,.f-flow .f-connector-source:not(.f-node).f-connector-not-connectable,.f-flow .f-connector-source:not(.f-node).f-node-input-disabled,.f-flow .f-connector-source:not(.f-node).f-node-output-disabled,.f-flow .f-connector-source:not(.f-node).f-connector-disabled,.f-flow .f-connector-target:not(.f-node).f-node-output-not-connectable,.f-flow .f-connector-target:not(.f-node).f-node-input-not-connectable,.f-flow .f-connector-target:not(.f-node).f-connector-not-connectable,.f-flow .f-connector-target:not(.f-node).f-node-input-disabled,.f-flow .f-connector-target:not(.f-node).f-node-output-disabled,.f-flow .f-connector-target:not(.f-node).f-connector-disabled,.f-flow .f-connector-source-target:not(.f-node).f-node-output-not-connectable,.f-flow .f-connector-source-target:not(.f-node).f-node-input-not-connectable,.f-flow .f-connector-source-target:not(.f-node).f-connector-not-connectable,.f-flow .f-connector-source-target:not(.f-node).f-node-input-disabled,.f-flow .f-connector-source-target:not(.f-node).f-node-output-disabled,.f-flow .f-connector-source-target:not(.f-node).f-connector-disabled{background:var(--ff-connector-disabled-color);border-color:var(--ff-connector-disabled-border-color);box-shadow:none}f-flow .f-node-input:not(.f-node),f-flow .f-connector-target:not(.f-node),.f-flow .f-node-input:not(.f-node),.f-flow .f-connector-target:not(.f-node){border-radius:var(--ff-connector-input-radius)}f-flow .f-connections-dragging .f-node-input:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),f-flow .f-connections-dragging .f-node-output:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),f-flow .f-connections-dragging .f-connector-source:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),f-flow .f-connections-dragging .f-connector-target:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),f-flow .f-connections-dragging .f-connector-source-target:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),.f-flow .f-connections-dragging .f-node-input:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),.f-flow .f-connections-dragging .f-node-output:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),.f-flow .f-connections-dragging .f-connector-source:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),.f-flow .f-connections-dragging .f-connector-target:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected),.f-flow .f-connections-dragging .f-connector-source-target:not(.f-connector-connectable):not(.f-node-input-connected):not(.f-node-output-connected):not(.f-connector-connected){border-color:var(--ff-connector-disabled-border-color)}f-flow .f-node-outlet,f-flow .f-connector-outlet,.f-flow .f-node-outlet,.f-flow .f-connector-outlet{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:32px;padding:var(--ff-outlet-padding-y) var(--ff-outlet-padding-x);box-sizing:border-box;border:1px solid var(--ff-outlet-border-color);border-radius:var(--ff-outlet-border-radius);background:var(--ff-outlet-background-color);color:var(--ff-outlet-color);pointer-events:all}f-flow .f-node-outlet.f-node-outlet-disabled,f-flow .f-node-outlet.f-connector-disabled,f-flow .f-connector-outlet.f-node-outlet-disabled,f-flow .f-connector-outlet.f-connector-disabled,.f-flow .f-node-outlet.f-node-outlet-disabled,.f-flow .f-node-outlet.f-connector-disabled,.f-flow .f-connector-outlet.f-node-outlet-disabled,.f-flow .f-connector-outlet.f-connector-disabled{background:var(--ff-outlet-disabled-background-color);border-color:var(--ff-outlet-disabled-border-color);color:var(--ff-outlet-disabled-color)}f-flow .f-connection-content,.f-flow .f-connection-content{box-sizing:border-box;color:var(--ff-connection-content-color);font-size:var(--ff-connection-content-font-size);padding:var(--ff-connection-content-padding-y) var(--ff-connection-content-padding-x);background:var(--ff-connection-content-background-color);border:1px solid var(--ff-connection-content-border-color);border-radius:var(--ff-connection-content-border-radius)}f-flow .f-connection .f-connection-selection,.f-flow .f-connection .f-connection-selection{fill:none;stroke:transparent;stroke-width:var(--ff-connection-hit-width)}f-flow .f-connection .f-connection-path,.f-flow .f-connection .f-connection-path{fill:none;stroke:var(--ff-connection-color);stroke-width:var(--ff-connection-width)}f-flow .f-connection .f-connection-drag-handle,.f-flow .f-connection .f-connection-drag-handle{fill:transparent;stroke:transparent;cursor:move}f-flow .f-connection.f-snap-connection .f-connection-path,.f-flow .f-connection.f-snap-connection .f-connection-path{stroke:var(--ff-snap-connection-color);stroke-dasharray:8 4}f-flow .f-connection.f-selected .f-connection-content,.f-flow .f-connection.f-selected .f-connection-content{border-color:var(--ff-connection-content-border-color-selected)}f-flow .f-connection.f-selected .f-connection-path,.f-flow .f-connection.f-selected .f-connection-path{stroke:var(--ff-connection-selected-color)}f-flow:not(.f-dragging) .f-connection:not(.f-dragging):not(.f-selected):not(.f-connection-selection-disabled):hover .f-connection-selection,.f-flow:not(.f-dragging) .f-connection:not(.f-dragging):not(.f-selected):not(.f-connection-selection-disabled):hover .f-connection-selection{stroke:var(--ff-connection-hover-color)}f-flow .f-marker,f-flow .connection-marker,.f-flow .f-marker,.f-flow .connection-marker{color:var(--ff-marker-color)}f-flow .f-marker circle,f-flow .f-marker rect,f-flow .f-marker path,f-flow .f-marker polygon,f-flow .f-marker line,f-flow .connection-marker circle,f-flow .connection-marker rect,f-flow .connection-marker path,f-flow .connection-marker polygon,f-flow .connection-marker line,.f-flow .f-marker circle,.f-flow .f-marker rect,.f-flow .f-marker path,.f-flow .f-marker polygon,.f-flow .f-marker line,.f-flow .connection-marker circle,.f-flow .connection-marker rect,.f-flow .connection-marker path,.f-flow .connection-marker polygon,.f-flow .connection-marker line{fill:currentColor;stroke:currentColor}f-flow .f-connection.f-snap-connection .f-marker,f-flow .f-connection.f-snap-connection .connection-marker,.f-flow .f-connection.f-snap-connection .f-marker,.f-flow .f-connection.f-snap-connection .connection-marker{color:var(--ff-snap-connection-color)}f-flow .f-connection.f-selected .f-marker,f-flow .f-connection.f-selected .connection-marker,.f-flow .f-connection.f-selected .f-marker,.f-flow .f-connection.f-selected .connection-marker{color:var(--ff-connection-selected-color)}f-flow .f-connection .f-connection-waypoints .f-candidate,f-flow .f-connection .f-connection-waypoints .f-waypoint,.f-flow .f-connection .f-connection-waypoints .f-candidate,.f-flow .f-connection .f-connection-waypoints .f-waypoint{vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;stroke-width:1.5}f-flow .f-connection .f-connection-waypoints .f-candidate:hover,f-flow .f-connection .f-connection-waypoints .f-waypoint:hover,.f-flow .f-connection .f-connection-waypoints .f-candidate:hover,.f-flow .f-connection .f-connection-waypoints .f-waypoint:hover{transform:scale(1.1)}f-flow .f-connection .f-connection-waypoints .f-candidate,.f-flow .f-connection .f-connection-waypoints .f-candidate{fill:var(--ff-waypoint-candidate-fill);stroke:var(--ff-waypoint-candidate-stroke)}f-flow .f-connection .f-connection-waypoints .f-waypoint,.f-flow .f-connection .f-connection-waypoints .f-waypoint{fill:var(--ff-waypoint-fill);stroke:var(--ff-waypoint-stroke);cursor:move}f-flow .f-connection .f-connection-drag-handle,.f-flow .f-connection .f-connection-drag-handle{fill:transparent;stroke:var(--ff-connection-drag-handle-stroke);stroke-width:1.5}.f-external-item{display:inline-flex;align-items:center;gap:8px;padding:12px 14px;box-sizing:border-box;color:var(--ff-external-item-color);background:var(--ff-external-item-background-color);border:1px solid var(--ff-external-item-border-color);border-radius:var(--ff-external-item-border-radius);box-shadow:var(--ff-external-item-shadow);cursor:grab;-webkit-user-select:none;user-select:none}.f-external-item.f-external-item-disabled{color:var(--ff-external-item-disabled-color);background:var(--ff-external-item-disabled-background-color);cursor:not-allowed}.f-external-item-preview{box-sizing:border-box;box-shadow:var(--ff-external-item-preview-shadow)}.f-external-item-placeholder{box-sizing:border-box;background:var(--ff-external-item-placeholder-background-color);border:1px dashed var(--ff-external-item-placeholder-border-color);border-radius:var(--ff-external-item-border-radius)}f-flow .f-background line,f-flow .f-background path,.f-flow .f-background line,.f-flow .f-background path{stroke:var(--ff-background-line-color)}f-flow .f-background circle,.f-flow .f-background circle{fill:var(--ff-background-dot-color)}f-flow .f-selection-area,.f-flow .f-selection-area{box-sizing:border-box;background:var(--ff-selection-area-color);border:1px solid var(--ff-selection-area-border-color)}f-flow .f-minimap,.f-flow .f-minimap{overflow:hidden;background:var(--ff-minimap-background-color);border:1px solid var(--ff-minimap-border-color);border-radius:var(--ff-minimap-border-radius);box-shadow:var(--ff-minimap-shadow);bottom:16px;right:16px;width:140px;height:120px}f-flow .f-minimap .f-minimap-node,f-flow .f-minimap .f-minimap-group,.f-flow .f-minimap .f-minimap-node,.f-flow .f-minimap .f-minimap-group{fill:var(--ff-minimap-node-color)}f-flow .f-minimap .f-minimap-node.f-selected,f-flow .f-minimap .f-minimap-group.f-selected,.f-flow .f-minimap .f-minimap-node.f-selected,.f-flow .f-minimap .f-minimap-group.f-selected{fill:var(--ff-minimap-node-selected-color)}f-flow .f-minimap .f-minimap-view,.f-flow .f-minimap .f-minimap-view{fill:var(--ff-minimap-view-color);stroke:var(--ff-minimap-view-border-color);stroke-width:1}f-flow .f-magnetic-lines .f-line,f-flow .f-line-alignment .f-line,.f-flow .f-magnetic-lines .f-line,.f-flow .f-line-alignment .f-line{background:var(--ff-magnetic-line-color)}f-flow .f-magnetic-rects .f-rect,.f-flow .f-magnetic-rects .f-rect{box-sizing:border-box;background:var(--ff-magnetic-rect-fill);border:1px solid var(--ff-magnetic-rect-border-color)}:root,[data-theme=dark]{--ff-font-sans: var(--font-sans);--ff-font-mono: var(--font-mono);--ff-color-surface-page: var(--canvas);--ff-color-surface-canvas: transparent;--ff-color-surface-card: var(--surface-raised);--ff-color-surface-muted: var(--surface-sunk);--ff-color-surface-soft: var(--surface);--ff-color-border-default: var(--border-strong);--ff-color-border-subtle: var(--border);--ff-color-border-strong: var(--border-control);--ff-color-border-accent: var(--accent);--ff-color-accent: var(--accent);--ff-color-accent-strong: var(--accent-hover);--ff-color-text-primary: var(--fg);--ff-color-text-secondary: var(--fg-muted);--ff-color-text-tertiary: var(--fg-faint);--ff-color-text-inverse: var(--fg-inverted);--ff-color-connection: var(--border-strong);--ff-color-connection-hover: color-mix(in srgb, var(--fg-muted) 30%, transparent);--ff-color-connection-muted: var(--fg-faint);--ff-color-connector-connected: var(--fg-muted);--ff-color-grid: var(--border);--ff-color-grid-strong: color-mix(in srgb, var(--fg-faint) 50%, transparent);--ff-color-selection-fill: color-mix(in srgb, var(--accent) 8%, transparent);--ff-color-selection-stroke: var(--accent);--ff-color-minimap-surface: var(--surface);--ff-color-minimap-node: var(--border-control);--ff-color-minimap-view: color-mix(in srgb, var(--fg) 8%, transparent);--ff-color-success: var(--ok-ink);--ff-color-warning: var(--warn-ink);--ff-color-danger: var(--crit-ink);--ff-color-disabled-surface: var(--surface-sunk);--ff-color-disabled-border: var(--border-strong);--ff-color-disabled-text: var(--fg-faint);--ff-radius-node: 8px;--ff-node-shadow: none;--ff-node-shadow-selected: none;--ff-minimap-shadow: var(--shadow-pop);--ff-minimap-border-radius: var(--radius-control);--ff-external-item-shadow: none;--ff-external-item-border-color: transparent;--ff-external-item-background-color: transparent;--ff-external-item-preview-shadow: var(--shadow-deep);--ff-connector-size: 12px;--ff-connector-border-width: 1.5px;--ff-connection-width: 1.5px;--ff-connection-content-font-size: 11px}f-flow.hf{background:var(--canvas);font-size:13px}f-flow .hn.f-node{--tone-ink: var(--idle-ink);--tone-edge: var(--border-strong);width:236px;min-height:0;padding:0;text-align:left;color:var(--fg);background:var(--surface-raised);border:1px solid var(--tone-edge);border-radius:8px;box-shadow:none;transition:border-color var(--duration) var(--ease),opacity var(--duration);cursor:grab}f-flow .hn.f-node:hover{border-color:var(--border-control)}f-flow .hn.f-node.f-selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}f-flow .hn.f-node.f-dragging{cursor:grabbing;box-shadow:var(--shadow-pop)}f-flow .hn.f-node.static{cursor:default}f-flow .hn.f-node.clickable{cursor:pointer}f-flow .hn.f-node[data-tone=ok]{--tone-ink: var(--ok-ink);--tone-edge: var(--ok-edge)}f-flow .hn.f-node[data-tone=busy]{--tone-ink: var(--busy-ink);--tone-edge: var(--busy-ink)}f-flow .hn.f-node[data-tone=warn]{--tone-ink: var(--warn-ink);--tone-edge: var(--warn-edge)}f-flow .hn.f-node[data-tone=crit]{--tone-ink: var(--crit-ink);--tone-edge: var(--crit-ink)}f-flow .hn.f-node[data-state=skipped],f-flow .hn.f-node[data-state=pending]{border-style:dashed;background:var(--surface)}f-flow .hn.f-node[data-state=skipped]{opacity:.72}f-flow .hn.f-node.problem{border-color:var(--crit-ink);box-shadow:0 0 0 1px var(--crit-ink)}f-flow .hn.f-node .port{z-index:1;width:44px;height:44px;border:0!important;background:transparent!important;box-shadow:none!important}f-flow .hn.f-node .port.left{left:-22px}f-flow .hn.f-node .port.right{right:-22px}f-flow .hn.f-node .port:after{content:"";position:absolute;inset:16px;border:1.5px solid var(--border-control);border-radius:50%;background:var(--surface-raised);transition:background var(--duration) var(--ease),border-color var(--duration) var(--ease)}f-flow .hn.f-node .port.f-connector-connected:after,f-flow .hn.f-node .port.f-node-input-connected:after,f-flow .hn.f-node .port.f-node-output-connected:after{border-color:var(--fg-muted);background:var(--fg-muted)}f-flow .hn.f-node .port:hover:after,f-flow .hn.f-node .port.f-connector-connectable:after{border-color:var(--accent);background:var(--accent-wash)}f-flow .hn.f-node .port.f-connector-disabled:after{inset:18px;border-width:1.5px}f-flow.f-connections-dragging .hn.f-node .port.f-connector-connectable:after{inset:12px}@media(pointer:coarse){:root,[data-theme=dark]{--ff-connection-hit-width: 28px}f-flow .hn.f-node .port{width:56px;height:56px}f-flow .hn.f-node .port.left{left:-28px}f-flow .hn.f-node .port.right{right:-28px}f-flow .hn.f-node .port:after{inset:22px}.hf-controls button{width:44px!important;height:44px!important;font-size:1.1rem}.hf-legend{left:68px}}f-flow.readonly .f-connection,f-flow.readonly .f-connection *{pointer-events:none!important}.hf-empty{position:absolute;top:42%;left:50%;z-index:1;display:flex;flex-direction:column;gap:4px;width:min(340px,80%);padding:18px 22px;transform:translate(-50%,-50%);border:1px dashed var(--border-control);border-radius:var(--radius-panel);background:color-mix(in srgb,var(--surface) 85%,transparent);color:var(--fg-muted);text-align:center;pointer-events:none}.hf-empty strong{color:var(--fg)}.hf-toast{--tone-ink: var(--busy-ink);--tone-wash: var(--busy-wash);--tone-edge: var(--busy-edge);position:absolute;top:12px;left:12px;z-index:3;max-width:min(460px,70%);padding:7px 12px;border:1px solid var(--tone-edge);border-radius:var(--radius-control);background:var(--tone-wash);color:var(--tone-ink);font-size:.8125rem;font-weight:600}.hf-toast[data-tone=ok]{--tone-ink: var(--ok-ink);--tone-wash: var(--ok-wash);--tone-edge: var(--ok-edge)}.hf-toast[data-tone=crit]{--tone-ink: var(--crit-ink);--tone-wash: var(--crit-wash);--tone-edge: var(--crit-edge)}f-flow .f-connection .f-connection-path{transition:stroke var(--duration) var(--ease)}f-flow .f-connection[data-activity=done] .f-connection-path{stroke:var(--ok-ink)}f-flow .f-connection[data-activity=done] .f-marker{color:var(--ok-ink)}f-flow .f-connection[data-activity=active] .f-connection-path{stroke:var(--busy-ink);stroke-dasharray:7 6;animation:hf-flowing .7s linear infinite}f-flow .f-connection[data-activity=active] .f-marker{color:var(--busy-ink)}f-flow .f-connection[data-activity=failed] .f-connection-path,f-flow .f-connection[data-activity=skipped] .f-connection-path{stroke:var(--fg-faint);stroke-dasharray:3 5}f-flow .f-connection.problem .f-connection-path{stroke:var(--crit-ink);stroke-width:2}f-flow .f-connection.problem .f-marker{color:var(--crit-ink)}f-flow .f-connection.muted .f-connection-path{stroke-dasharray:4 5;stroke:var(--fg-faint)}f-flow .f-connection .f-connection-content.edge-note{max-width:180px;border-color:var(--crit-edge);background:var(--crit-wash);color:var(--crit-ink);font-weight:600;white-space:nowrap}@keyframes hf-flowing{to{stroke-dashoffset:-13}}@media(prefers-reduced-motion:reduce){f-flow .f-connection[data-activity=active] .f-connection-path{animation:none}}f-flow .f-minimap{width:168px;height:112px;right:12px;bottom:12px}f-flow .f-minimap .f-minimap-node.mm-ok{fill:var(--ok-ink)}f-flow .f-minimap .f-minimap-node.mm-busy{fill:var(--busy-ink)}f-flow .f-minimap .f-minimap-node.mm-warn{fill:var(--warn-ink)}f-flow .f-minimap .f-minimap-node.mm-crit{fill:var(--crit-ink)}f-flow .f-minimap .f-minimap-node.mm-accent{fill:var(--accent)}.hf-controls{position:absolute;left:12px;bottom:12px;z-index:2;display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-raised)}.hf-controls button{display:grid;place-items:center;width:32px;height:32px;padding:0;border:0;border-bottom:1px solid var(--border);background:none;color:var(--fg-muted);cursor:pointer}.hf-controls button:last-child{border-bottom:0}.hf-controls button:hover{background:var(--surface-sunk);color:var(--fg)}.hf-legend{position:absolute;left:56px;bottom:12px;z-index:2;display:flex;flex-wrap:wrap;align-items:center;gap:4px 16px;max-width:calc(100% - 260px);padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-raised);color:var(--fg-muted);font-size:.75rem}.hf-legend app-status{font-size:.75rem}.hf-legend .hint{color:var(--fg-muted)}.f-external-item-preview{opacity:.92;border-radius:var(--radius-control);box-shadow:var(--shadow-deep)}.dm.hn.f-node{padding:0}.dm.hn.f-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.dm.hn.f-node.dim{opacity:.32}f-flow .f-connection.dim{opacity:.25}.dm-label.f-node{width:auto;min-height:0;padding:0;border:0;background:none;box-shadow:none;text-align:left;white-space:nowrap}.dm-label.f-node.project{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 6px;border-radius:var(--radius-control);color:var(--fg);font-size:1.125rem;font-weight:650;cursor:pointer;white-space:normal}.dm-label.f-node.project.collapsed{background:var(--surface-raised);box-shadow:inset 0 0 0 1px var(--border)}.dm-label.f-node.project[data-tone=warn].collapsed{box-shadow:inset 3px 0 0 var(--warn-ink),inset 0 0 0 1px var(--border)}.dm-label.f-node.project[data-tone=crit].collapsed{box-shadow:inset 3px 0 0 var(--crit-ink),inset 0 0 0 1px var(--border)}.dm-label.f-node.project a{color:inherit;text-decoration:none}.dm-label.f-node.project a:hover{text-decoration:underline}.dm-label.f-node.project .project-toggle{display:inline-flex;flex:none;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;background:none;color:var(--fg-muted);cursor:pointer}.dm-label.f-node.project .project-toggle .chev{transition:transform var(--duration) var(--ease)}.dm-label.f-node.project .project-toggle[aria-expanded=true] .chev{transform:rotate(90deg)}.dm-label.f-node.project .project-toggle:hover{color:var(--fg)}.dm-label.f-node.project .counts{color:var(--fg-muted);font-size:.8125rem;font-weight:400;white-space:nowrap}.dm-label.f-node.column{display:flex;flex-direction:column;gap:2px;color:var(--fg-muted);font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.dm-label.f-node.column span{font-weight:400;letter-spacing:0;text-transform:none}:root{--sh-font-size: .875rem;--sh-spacing: 0;--sh-button-padding: .5rem .9rem;--content-max: 1280px;--page-pad: 32px;--row-height: 40px;color-scheme:light}[data-theme=dark]{color-scheme:dark}*{box-sizing:border-box}html{font-size:16px}body{margin:0;padding:0;background:var(--canvas);color:var(--fg);font-family:var(--font-sans);font-size:.9375rem;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration-color:color-mix(in srgb,currentColor 30%,transparent);text-underline-offset:2px}a:hover{color:var(--accent-ink);text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button{font:inherit}h1,h2,h3,h4,p{margin:0}h1{font-size:1.5rem;font-weight:600;line-height:1.2;letter-spacing:-.01em}h2{font-size:1rem;font-weight:650;line-height:1.3}h3{font-size:.9375rem;font-weight:650;line-height:1.3}.eyebrow{display:block;color:var(--fg-muted);font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;line-height:1.4}code,pre,.mono{font-family:var(--font-mono);font-size:.8125rem}.muted{color:var(--fg-muted)}.faint{color:var(--fg-faint)}.num,td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.tabular{font-variant-numeric:tabular-nums}.nowrap{white-space:nowrap}.visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.page{display:flex;flex-direction:column;gap:var(--space-5);width:100%;max-width:calc(var(--content-max) + 2 * var(--page-pad));padding:var(--space-2) var(--page-pad) var(--space-6)}.page.wide{max-width:none}.page.narrow{max-width:calc(720px + 2 * var(--page-pad))}.section{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}.section-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-2) var(--space-3)}.section-head .spacer{flex:1}.section-head a{font-size:.875rem}.spacer{flex:1}.columns{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--space-6);align-items:start}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,400px),1fr));gap:var(--space-5);align-items:start}@media(max-width:900px){.columns{grid-template-columns:minmax(0,1fr);gap:var(--space-5)}}@media(max-width:720px){:root{--page-pad: 20px}}@media(max-width:900px){.table .opt-md,.data-table .opt-md{display:none}}@media(max-width:720px){.table .opt,.data-table .opt{display:none}}.card,.panel{background:var(--surface);border-radius:var(--radius-panel);box-shadow:var(--shadow-card);padding:var(--space-4) var(--space-5)}.card.flush,.panel.flush{padding:0;overflow:hidden;overflow-x:auto}.card.flush>sh-table,.panel.flush>sh-table,.card.flush>app-run-table,.panel.flush>app-run-table{display:block}[data-theme=dark] .card,[data-theme=dark] .panel,[data-theme=dark] .stats{border:1px solid var(--border)}.page-head{display:flex;align-items:flex-start;flex-wrap:wrap;gap:var(--space-3)}.page-head .title{display:flex;flex-direction:column;gap:var(--space-2)}.page-head .actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-3)}.crumbs{font-size:.8125rem;color:var(--fg-muted)}.stats{display:flex;flex-wrap:wrap;background:var(--surface);border-radius:var(--radius-panel);box-shadow:var(--shadow-card);overflow:hidden}.stats>*{flex:1 1 150px;min-width:0;padding:var(--space-4) var(--space-5);box-shadow:-1px 0 0 var(--border)}.stats>a{color:inherit;text-decoration:none}.stats>a:hover{background:var(--surface-sunk)}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--space-3) var(--space-5);margin:0}.facts div{display:flex;flex-direction:column;gap:2px;min-width:0}.facts dt{color:var(--fg-muted);font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.facts dd{margin:0;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3)}.filters sh-field{min-width:170px;margin:0}.form{display:flex;flex-direction:column;gap:var(--space-4)}sh-field{margin-bottom:0}sh-field label{color:var(--fg);font-size:.8125rem;font-weight:600}sh-field .label{margin-bottom:4px}sh-field .hint,sh-field .error{font-size:.8125rem}.input,textarea.input,select.input{width:100%;min-height:36px;padding:4px 12px;border:1px solid var(--border-control);border-radius:var(--radius-control);background:var(--surface-raised);color:var(--fg);font:inherit;font-size:.9375rem;font-weight:400}.input::placeholder,textarea.input::placeholder,select.input::placeholder{color:var(--fg-muted);opacity:1}.input:focus-visible,textarea.input:focus-visible,select.input:focus-visible{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.input[aria-invalid=true],textarea.input[aria-invalid=true],select.input[aria-invalid=true]{border-color:var(--crit-ink)}textarea.input{min-height:7rem;resize:vertical;font-family:var(--font-mono);font-size:.8125rem}.hint-ok{color:var(--ok-ink)}.hint-crit{color:var(--crit-ink)}.segmented{display:inline-flex;padding:2px;border-radius:var(--radius-control);background:var(--surface-sunk)}.segmented button{padding:5px 12px;border:0;border-radius:4px;background:transparent;color:var(--fg-muted);font:inherit;font-size:.875rem;white-space:nowrap;cursor:pointer}.segmented button:hover{color:var(--fg)}.segmented button[aria-pressed=true]{background:var(--surface-raised);color:var(--fg);font-weight:600;box-shadow:var(--shadow-card)}.table,.data-table,sh-table table{width:100%;border-collapse:collapse;font-size:.875rem;font-variant-numeric:tabular-nums}.table th,.data-table th,sh-table table :is(th[class],th:not([class])){height:32px;padding:0 var(--space-3);border-bottom:1px solid var(--border);color:var(--fg-muted);font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;text-align:left;white-space:nowrap;vertical-align:middle}.table td,.data-table td,sh-table table :is(td[class],td:not([class])){height:var(--row-height);padding:4px var(--space-3);border-bottom:1px solid var(--border);vertical-align:middle}.table tbody:last-child tr:last-child td,.data-table tbody:last-child tr:last-child td,sh-table table tbody tr:last-child :is(td[class],td:not([class])){border-bottom:0}.table th.num,.data-table th.num,sh-table table th.right{text-align:right}.table tr.link,.data-table tr.link{cursor:pointer}.table tr.link:hover td,.data-table tr.link:hover td{background:var(--surface-sunk)}.table td.name a,.data-table td.name a{text-decoration:none}.table td.name a:hover,.data-table td.name a:hover{text-decoration:underline}.table td.name,.data-table td.name{max-width:28rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table tr.group th,.data-table tr.group th{height:auto;padding:var(--space-4) var(--space-3) var(--space-2);border-bottom:1px solid var(--border);background:none}.table tr.group th .count,.data-table tr.group th .count{margin-left:8px;color:var(--fg-muted);font-weight:400;letter-spacing:0}.table td .sub,.data-table td .sub{display:block;color:var(--fg-muted);font-size:.8125rem;line-height:1.35}.table td.actions,.data-table td.actions{text-align:right;white-space:nowrap}.table td.actions>.actions,.data-table td.actions>.actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:var(--space-1)}.table .sort,.data-table .sort{display:inline-flex;align-items:center;gap:4px;padding:0;border:0;background:none;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer}.table .sort:hover,.data-table .sort:hover{color:var(--fg)}.table-scroll{overflow-x:auto}.share-bar{display:block;height:4px;margin-top:3px;border-radius:2px;background:var(--fg-muted);min-width:1px}.code{margin:0;padding:var(--space-3) var(--space-4);overflow-x:auto;border-radius:var(--radius-control);background:var(--surface-sunk);font-family:var(--font-mono);font-size:.8125rem;line-height:1.55;white-space:pre}details.more>summary{cursor:pointer;color:var(--fg-muted);font-size:.875rem}sh-alert{display:block}sh-alert .alert{border-radius:var(--radius-panel);padding:var(--space-3) var(--space-4)}sh-dialog .dialog{border-radius:var(--radius-pop);box-shadow:var(--shadow-deep)}sh-dialog .body{padding:var(--space-4) var(--space-5);max-height:70vh;overflow-y:auto}sh-dialog header,sh-dialog footer{padding:var(--space-3) var(--space-5)}sh-tabs .tab{padding:8px 12px;font-size:.9375rem}sh-tabs .badge{color:var(--fg-muted);font-weight:400}sh-toggle{font-size:.9375rem}sh-toggle input.switch:checked:not(#_){background:var(--fg);border-color:var(--fg)}sh-toggle input.switch:checked:not(#_):after{background:var(--surface)}.table sh-toggle{font-size:.875rem}sh-empty .empty{padding:var(--space-6) var(--space-5)}sh-menu{vertical-align:middle}sh-menu .trigger:not(#_){display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:var(--radius-control);background:transparent;color:var(--fg-muted);font-size:1.125rem;line-height:1;letter-spacing:.02em}sh-menu .trigger:not(#_):hover,sh-menu .trigger:not(#_)[aria-expanded=true]{background:var(--surface-sunk);color:var(--fg)}sh-menu .list:not(#_){min-width:12rem;padding:4px;border:0;border-radius:var(--radius-pop);background:var(--surface-raised);box-shadow:var(--shadow-pop)}sh-menu .list:not(#_)>*{padding:8px 12px;border:0;border-radius:var(--radius-control);font-size:.9375rem;color:var(--fg)}sh-menu .list:not(#_)>*:hover{background:var(--surface-sunk)}sh-menu .list:not(#_)>*:disabled{color:var(--fg-muted);cursor:default;background:none}sh-menu .list:not(#_)>*.danger{color:var(--crit-ink)}[data-theme=dark] sh-menu .list:not(#_){border:1px solid var(--border)}.table tr .reveal{opacity:0;transition:opacity var(--duration) var(--ease)}.table tr:hover .reveal,.table tr:focus-within .reveal,.table tr .reveal:has([aria-expanded=true]){opacity:1}@media(hover:none){.table tr .reveal{opacity:1}}@media(pointer:coarse){sh-menu .trigger:not(#_){width:44px;height:44px}sh-menu .list:not(#_)>*{min-height:44px}}.flow-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,290px),1fr));gap:var(--space-4)}app-root{display:block;--rail: 232px}.skip{position:absolute;left:var(--space-2);top:-40px;z-index:40;padding:var(--space-2) var(--space-3);border-radius:var(--radius-control);background:var(--surface-raised);color:var(--fg);box-shadow:var(--shadow-pop)}.skip:focus{top:var(--space-2)}.shell{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);min-height:100vh}.rail{position:sticky;top:0;z-index:30;height:100vh;height:100dvh;display:flex;flex-direction:column;gap:var(--space-5);padding:var(--space-4) var(--space-3);background:var(--deep);color:var(--deep-fg);overflow-y:auto;overflow-x:hidden}.rail ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}.rail .group{display:flex;flex-direction:column;gap:6px}.rail .eyebrow{padding:0 var(--space-3);color:var(--deep-fg-muted);font-size:.6875rem}.rail li a{position:relative;display:flex;align-items:center;gap:10px;height:32px;padding:0 var(--space-3);border-radius:var(--radius-control);color:var(--deep-fg-muted);font-size:.875rem;text-decoration:none;white-space:nowrap;transition:background var(--duration) var(--ease),color var(--duration) var(--ease)}.rail li a:hover,.rail li a.active{background:var(--deep-raised);color:var(--deep-fg)}.rail li a.active:before{content:"";position:absolute;left:-1px;top:8px;bottom:8px;width:3px;border-radius:2px;background:var(--accent)}.rail li a:focus-visible{outline-offset:-2px}.rail .close{display:none}.brand{display:flex;align-items:center;gap:10px;height:32px;padding:0 var(--space-3);color:var(--deep-fg);font-size:1rem;font-weight:600;text-decoration:none}.brand svg{flex:none;color:var(--accent)}.rail-note{display:flex;align-items:center;gap:8px;margin:auto 0 0;padding:var(--space-2) var(--space-3);color:var(--deep-fg-muted);font-size:.75rem;line-height:1.3}.backdrop{display:none}.column{display:flex;flex-direction:column;min-width:0}.titlebar{display:flex;align-items:center;gap:var(--space-4);min-height:56px;padding:var(--space-4) var(--page-pad) var(--space-2)}.title{display:flex;flex-direction:column;gap:2px;min-width:min(12rem,35%);flex:1}.title h1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:6px;color:var(--fg-muted);font-size:.8125rem;line-height:1.3}.crumbs a{text-decoration:none}.crumbs a:hover{text-decoration:underline}.crumbs .sep{color:var(--border-strong)}.page-actions{display:flex;align-items:center;flex-wrap:wrap;min-width:0;justify-content:flex-end;gap:var(--space-2) var(--space-3)}.tools{display:flex;align-items:center;gap:var(--space-2);margin-left:var(--space-2);padding-left:var(--space-3);border-left:1px solid var(--border)}.live{display:inline-flex;align-items:center;gap:7px;padding:0 8px;color:var(--tone-ink);font-size:.8125rem;font-weight:600}.live .dot{width:8px;height:8px;border-radius:50%;background:currentColor}.live[data-state=open]{--tone-ink: var(--ok-ink)}.live[data-state=connecting]{--tone-ink: var(--warn-ink)}.live[data-state=closed]{--tone-ink: var(--crit-ink)}.tool{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:var(--radius-control);background:transparent;color:var(--fg-muted);cursor:pointer;transition:background var(--duration) var(--ease),color var(--duration) var(--ease)}.tool:hover{background:var(--surface-sunk);color:var(--fg)}.titlebar .menu{display:none}main{flex:1;outline:none;display:flex;flex-direction:column}.boot{margin:0;padding:var(--space-6);color:var(--fg-muted);text-align:center}@media(pointer:coarse){.rail li a{height:44px}.tool{width:44px;height:44px}}@media(max-width:1100px){app-root{--rail: 56px}.rail{padding:var(--space-4) 8px;gap:var(--space-4)}.rail .eyebrow{display:none}.rail .group+.group{padding-top:var(--space-3);border-top:1px solid var(--deep-border)}.rail li a{justify-content:center;padding:0;gap:0}.rail li a .label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.brand{justify-content:center;padding:0}.brand .wordmark{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.rail-note{justify-content:center;padding:var(--space-2) 0}.rail-note .label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}}@media(max-width:720px){.shell{grid-template-columns:minmax(0,1fr)}.rail{position:fixed;left:0;top:0;width:260px;padding:var(--space-4) var(--space-3);gap:var(--space-5);transform:translate(-100%);transition:transform .2s var(--ease);box-shadow:var(--shadow-deep)}.rail .eyebrow{display:block}.rail .group+.group{padding-top:0;border-top:0}.rail li a{justify-content:flex-start;padding:0 var(--space-3);gap:10px}.rail li a .label,.rail .rail-note .label{position:static;width:auto;height:auto;overflow:visible;clip:auto}.rail .close{position:absolute;right:10px;top:12px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:var(--radius-control);background:transparent;color:var(--deep-fg-muted);cursor:pointer}.rail .close:hover{background:var(--deep-raised);color:var(--deep-fg)}.brand{justify-content:flex-start;padding:0 var(--space-3)}.brand .wordmark{position:static;width:auto;height:auto;overflow:visible;clip:auto}.rail-note{justify-content:flex-start;padding:var(--space-2) var(--space-3)}.drawer-open .rail{transform:none}.drawer-open .backdrop{display:block;position:fixed;inset:0;z-index:20;background:#14141673}.titlebar .menu{display:inline-flex}.titlebar{padding:var(--space-3) var(--page-pad) var(--space-2);gap:var(--space-3)}.title h1{font-size:1.25rem}.live .label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.tools{margin-left:0}}@media(pointer:coarse){:root{--row-height: 44px}sh-button button,.segmented button,.input,select.input,sh-select .display,sh-dialog .cancel,sh-dialog .confirm{min-height:44px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition-property:color,background-color,border-color,fill,stroke,opacity!important;transition-duration:var(--duration)!important;scroll-behavior:auto!important}}
