.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}:root{--bg: #eef1f4;--panel: #ffffff;--panel-alt: #f7f9fb;--ink: #0f1c2a;--ink-soft: #4b5b6c;--ink-faint: #5f6c79;--line: #dde3e9;--line-strong: #b9c3cd;--accent: #0f766e;--accent-soft: #d6efec;--danger: #b42318;--danger-soft: #fdecea;--allow: #15803d;--on-status: #ffffff;--brand-bg: #0f2a3d;--icon-ink: #1d3b4f;--icon-fill: #cde7e3;--icon-badge-bg: #ffffff;--crit-high: #b42318;--crit-medium: #b54708;--crit-low: #667085;--radius: 8px;--font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: ui-monospace, "Cascadia Code", "SFMono-Regular", Consolas, monospace;--on-accent: #ffffff;--allow-soft: #dcfce7;--danger-line: #f5c2bd;--path: #6d28d9;--on-path: #ffffff;--info-bg: #e0f2fe;--info-line: #bae6fd;--info-ink: #0c4a6e;--toolbar-ink: #e6eef5;--toolbar-muted: #9fb3c4;--toolbar-btn: #16384f;--toolbar-btn-hover: #1d4763;--toolbar-btn-line: #2c4a61;--toolbar-active: #5eead4;--toolbar-active-ink: #0f2a3d;--toolbar-failed: #fca5a5;--link-stroke: #5b6b7b;--lane-a: rgba(255, 255, 255, .55);--lane-b: rgba(226, 232, 238, .55);--lane-dmz-a: rgba(139, 92, 246, .06);--lane-dmz-b: rgba(139, 92, 246, .02);--shadow-sm: 0 1px 2px rgba(15, 28, 42, .08);--shadow-md: 0 8px 24px rgba(15, 28, 42, .18);--shadow-lg: 0 24px 60px rgba(15, 28, 42, .3);--backdrop: rgba(15, 28, 42, .35);--focus-ring: 2px solid var(--accent);color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme]){--bg: #0e1621;--panel: #16212d;--panel-alt: #1c2a38;--ink: #e6edf3;--ink-soft: #b3c1ce;--ink-faint: #8a9aab;--line: #2a3a4a;--line-strong: #3d5266;--accent: #2dd4bf;--accent-soft: #123b37;--on-accent: #062420;--danger: #f87171;--danger-soft: #3b1a1a;--danger-line: #7f1d1d;--path: #c4b5fd;--on-path: #1e1033;--allow: #4ade80;--on-status: #0b1520;--allow-soft: #12321f;--info-bg: #0c2a3d;--info-line: #164e63;--info-ink: #bae6fd;--brand-bg: #08111a;--toolbar-btn: #13283a;--toolbar-btn-hover: #1a3650;--toolbar-btn-line: #24405a;--icon-ink: #cfe3ef;--icon-fill: #1f4a47;--icon-badge-bg: #16212d;--crit-high: #dc2626;--crit-medium: #d97706;--crit-low: #64748b;--link-stroke: #8aa0b4;--lane-a: rgba(255, 255, 255, .015);--lane-b: rgba(255, 255, 255, .045);--lane-dmz-a: rgba(167, 139, 250, .1);--lane-dmz-b: rgba(167, 139, 250, .03);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow-md: 0 8px 24px rgba(0, 0, 0, .5);--shadow-lg: 0 24px 60px rgba(0, 0, 0, .6);--backdrop: rgba(0, 0, 0, .55);color-scheme:dark}}:root[data-theme=dark]{--bg: #0e1621;--panel: #16212d;--panel-alt: #1c2a38;--ink: #e6edf3;--ink-soft: #b3c1ce;--ink-faint: #8a9aab;--line: #2a3a4a;--line-strong: #3d5266;--accent: #2dd4bf;--accent-soft: #123b37;--on-accent: #062420;--danger: #f87171;--danger-soft: #3b1a1a;--danger-line: #7f1d1d;--path: #c4b5fd;--on-path: #1e1033;--allow: #4ade80;--on-status: #0b1520;--allow-soft: #12321f;--info-bg: #0c2a3d;--info-line: #164e63;--info-ink: #bae6fd;--brand-bg: #08111a;--toolbar-btn: #13283a;--toolbar-btn-hover: #1a3650;--toolbar-btn-line: #24405a;--icon-ink: #cfe3ef;--icon-fill: #1f4a47;--icon-badge-bg: #16212d;--crit-high: #dc2626;--crit-medium: #d97706;--crit-low: #64748b;--link-stroke: #8aa0b4;--lane-a: rgba(255, 255, 255, .015);--lane-b: rgba(255, 255, 255, .045);--lane-dmz-a: rgba(167, 139, 250, .1);--lane-dmz-b: rgba(167, 139, 250, .03);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow-md: 0 8px 24px rgba(0, 0, 0, .5);--shadow-lg: 0 24px 60px rgba(0, 0, 0, .6);--backdrop: rgba(0, 0, 0, .55);color-scheme:dark}:root[data-theme=contrast]{--bg: #ffffff;--panel: #ffffff;--panel-alt: #f0f0f0;--ink: #000000;--ink-soft: #000000;--ink-faint: #333333;--line: #000000;--line-strong: #000000;--accent: #003d99;--accent-soft: #d6e4ff;--on-accent: #ffffff;--danger: #9b0000;--danger-soft: #ffe5e5;--danger-line: #9b0000;--path: #4b0082;--on-path: #ffffff;--allow: #005c1a;--allow-soft: #ddf5e3;--info-bg: #ffffff;--info-line: #000000;--info-ink: #000000;--brand-bg: #000000;--toolbar-ink: #ffffff;--toolbar-muted: #ffffff;--toolbar-btn: #000000;--toolbar-btn-hover: #333333;--toolbar-btn-line: #ffffff;--toolbar-active: #ffd400;--toolbar-active-ink: #000000;--toolbar-failed: #ffd400;--icon-ink: #000000;--icon-fill: #ffffff;--icon-badge-bg: #ffffff;--crit-high: #9b0000;--crit-medium: #7a3d00;--crit-low: #333333;--link-stroke: #000000;--lane-a: #ffffff;--lane-b: #f0f0f0;--lane-dmz-a: #ece6ff;--lane-dmz-b: #ffffff;--focus-ring: 3px solid #000000;color-scheme:light}:root[data-theme=contrast] .device-node{border-width:2px 2px 2px 6px}:root[data-theme=contrast] .panel-section,:root[data-theme=contrast] .rule,:root[data-theme=contrast] .zone{border-width:2px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{transition:none!important;animation:none!important}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);font-size:14px;color:var(--ink);background:var(--bg)}button,input,select{font:inherit;color:inherit}input[type=text],input[type=number],input[type=date],select,textarea{width:100%;min-width:0;padding:6px 8px;border:1px solid var(--line-strong);border-radius:6px;background:var(--panel)}input[aria-invalid=true]{border-color:var(--danger);background:var(--danger-soft)}input:focus-visible,select:focus-visible,button:focus-visible{outline:var(--focus-ring);outline-offset:1px}.app{display:flex;flex-direction:column;height:100%}.workspace{--palette-w: 232px;--inspector-w: 340px;--palette-track: min(calc(var(--palette-w) * var(--ui-scale, 1)), 32vw);--inspector-track: min(calc(var(--inspector-w) * var(--ui-scale, 1)), 38vw);flex:1;display:grid;grid-template-columns:var(--palette-track) minmax(0,1fr) var(--inspector-track);min-height:0}.toolbar,.notice,.canvas-bar,.level-tabs,.palette,.inspector,.inventory,.outline,dialog{zoom:var(--ui-scale, 1)}:root[data-text-size] .toolbar,:root[data-text-size] .canvas-bar{flex-wrap:wrap}.toolbar{display:flex;align-items:center;gap:20px;padding:8px 14px;background:var(--brand-bg);color:var(--toolbar-ink)}.brand{display:flex;align-items:center;gap:10px;min-width:0;margin-right:auto;overflow:hidden}.brand img{flex:none}.brand__name{font-weight:700;letter-spacing:.02em;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand__project{color:var(--toolbar-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}.toolbar__group{display:flex;align-items:center;gap:6px}.toolbar__label{color:var(--toolbar-muted);font-size:12px;margin-right:2px}.toolbar .button,.segment{white-space:nowrap;display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--toolbar-btn-line);border-radius:6px;background:var(--toolbar-btn);color:var(--toolbar-ink);cursor:pointer}.toolbar .button:hover,.segment:hover{background:var(--toolbar-btn-hover)}.toolbar .button:disabled{opacity:.4;cursor:default}.toolbar .icon-only{padding:6px 8px}.toolbar__select{width:auto;padding:5px 6px;border:1px solid var(--toolbar-btn-line);border-radius:6px;background:var(--toolbar-btn);color:var(--toolbar-ink)}.autosave{min-width:0;font-size:11.5px;color:var(--toolbar-muted);white-space:nowrap}.autosave.is-failed{color:var(--toolbar-failed)}.segment.is-active{background:var(--toolbar-active);border-color:var(--toolbar-active);color:var(--toolbar-active-ink);font-weight:600}.notice{display:flex;align-items:flex-start;gap:12px;padding:10px 14px;background:var(--danger-soft);border-bottom:1px solid var(--danger-line);color:var(--danger)}.notice--info{align-items:center;background:var(--info-bg);border-bottom-color:var(--info-line);color:var(--info-ink)}.notice p{margin:0;flex:1}.notice .button{flex:none;padding:6px 12px;border:1px solid var(--line-strong);background:var(--panel);color:var(--ink);font:inherit;font-size:13px}.notice .button:hover{border-color:var(--accent)}.notice ul{margin:0;padding-left:18px;flex:1;max-height:140px;overflow:auto}.toasts{position:fixed;left:50%;bottom:16px;z-index:50;display:grid;gap:8px;width:min(600px,calc(100vw - 32px));transform:translate(-50%);pointer-events:none}.toast{border:1px solid var(--info-line);border-radius:8px;box-shadow:var(--shadow-lg);pointer-events:auto}@media print{.toasts{display:none}}.palette,.inspector{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.panel-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:6px;min-height:38px;padding:4px 6px 4px 14px;border-bottom:1px solid var(--line)}.panel-head__title{overflow:hidden;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint);white-space:nowrap;text-overflow:ellipsis}.panel-head__toggle{flex:none;padding:4px 6px;border-color:transparent;background:none}.panel-body{flex:1;min-height:0;overflow-y:auto}.panel-edge{position:absolute;top:0;bottom:0;z-index:5;width:6px;cursor:col-resize;touch-action:none}.panel-edge--palette{right:0}.panel-edge--inspector{left:0}.panel-edge:after{content:"";position:absolute;top:0;bottom:0;width:2px;background:transparent;transition:background .12s}.panel-edge--palette:after{right:0}.panel-edge--inspector:after{left:0}.panel-edge:hover:after,.panel-edge:active:after,.panel-edge:focus-visible:after{background:var(--accent)}.panel-edge:focus-visible{outline:none}@media (min-width: 901px){.palette-folded{--palette-track: calc(40px * var(--ui-scale, 1))}.inspector-folded{--inspector-track: calc(40px * var(--ui-scale, 1))}.palette-folded .palette>:not(.panel-head),.inspector-folded .inspector>:not(.panel-head){display:none}.palette-folded .palette .panel-head,.inspector-folded .inspector .panel-head{flex:1;flex-direction:column-reverse;justify-content:flex-end;padding:6px 0;border-bottom:none}.palette-folded .panel-head__title,.inspector-folded .panel-head__title{writing-mode:vertical-rl}}@media (max-width: 900px){.panel-head .panel-head__toggle,.panel-edge{display:none}}.fold-button{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:0;border:none;background:none;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;text-align:left;cursor:pointer}.fold-button:hover{color:var(--ink)}.fold-button__chevron{flex:none;transition:transform .15s}.fold-button[aria-expanded=true] .fold-button__chevron{transform:rotate(90deg)}.palette{background:var(--panel);border-right:1px solid var(--line)}.palette__body{padding:10px 10px 12px}.palette__hint{margin:0 4px 12px;color:var(--ink-faint);font-size:12px;line-height:1.4}.palette__group h3{margin:14px 4px 6px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint)}.palette__group ul{list-style:none;margin:0;padding:0}.palette__row{display:flex;align-items:center;gap:2px}.palette__item{display:flex;align-items:center;gap:9px;flex:1;min-width:0;padding:5px 6px;border:1px solid transparent;border-radius:6px;background:none;text-align:left;cursor:grab}.palette__item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.palette__item:hover{background:var(--panel-alt);border-color:var(--line)}.palette__item svg{color:var(--icon-ink);flex:none}.palette__item--variant{font-size:12.5px;padding:3px 6px}.palette__toggle{flex:none;display:grid;place-items:center;width:26px;height:26px;border:none;border-radius:6px;background:none;color:var(--ink-faint);cursor:pointer}.palette__toggle:hover{background:var(--panel-alt);color:var(--ink)}.palette__toggle svg{transition:transform .15s}.palette__toggle.is-open svg{transform:rotate(90deg)}.palette__variants{margin:2px 0 6px 16px!important;padding-left:8px!important;border-left:1px solid var(--line)}.canvas-column{display:flex;flex-direction:column;min-width:0;min-height:0}.canvas-column .canvas{flex:1}.canvas-bar{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;padding:6px 10px 0;background:var(--panel-alt);border-bottom:1px solid var(--line)}.site-tabs{display:flex;align-items:flex-end;gap:2px;min-width:0}.site-tabs__list{display:flex;align-items:flex-end;gap:2px;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.site-tabs>button{flex:none}.site-tab{display:flex;align-items:center;border:1px solid transparent;border-bottom:none;border-radius:7px 7px 0 0}.site-tab.is-active{background:var(--panel);border-color:var(--line);margin-bottom:-1px;padding-bottom:1px}.site-tab__button{display:flex;align-items:center;gap:6px;padding:7px 12px;border:none;background:none;white-space:nowrap;cursor:pointer;color:var(--ink-soft)}.site-tab.is-active>.site-tab__button{color:var(--ink);font-weight:600}.site-tab__count{padding:0 6px;border:1px solid var(--line);border-radius:9px;background:var(--panel-alt);color:var(--ink-soft);font-size:11px;font-weight:600}.site-tab__input{width:140px!important;margin:3px 6px;padding:3px 6px!important}.site-tab__close,.site-tabs__add{display:grid;place-items:center;margin-right:4px;padding:3px;border:none;border-radius:5px;background:none;color:var(--ink-faint);cursor:pointer}.site-tabs__add{margin:0 0 5px 4px}.site-tabs__add+.site-tabs__add{margin-left:0}.site-tab__close:hover,.site-tabs__add:hover{background:var(--line);color:var(--ink)}.filter-bar{display:flex;align-items:center;gap:6px;padding-bottom:6px;color:var(--ink-faint)}.filter{position:relative}.filter summary,.tidy-button{display:flex;align-items:center;gap:5px;padding:4px 9px;border:1px solid var(--line-strong);border-radius:14px;background:var(--panel);color:var(--ink-soft);font-size:12.5px;cursor:pointer;list-style:none}.tidy-button{flex:none;margin:0 0 6px auto}.tidy-button:hover{border-color:var(--accent)}.filter summary::-webkit-details-marker{display:none}.filter.is-active summary{border-color:var(--accent);background:var(--accent-soft);color:var(--ink)}.filter__count{padding:0 5px;border-radius:8px;background:var(--accent);color:var(--on-accent);font-size:10.5px;font-weight:700}.filter__menu{position:absolute;right:0;z-index:30;min-width:190px;max-height:320px;overflow-y:auto;margin-top:4px;padding:6px;background:var(--panel);border:1px solid var(--line-strong);border-radius:8px;box-shadow:var(--shadow-md)}.filter__option{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:5px;color:var(--ink);cursor:pointer}.filter__option:hover{background:var(--panel-alt)}.swatch{width:10px;height:10px;border-radius:3px}.filter__clear{display:flex;align-items:center;gap:3px;padding:4px 8px;border:none;border-radius:12px;background:none;color:var(--accent);font-size:12.5px;cursor:pointer}.react-flow__node.is-dimmed,.is-dimmed,.flow-label.is-dimmed{opacity:.22}.is-aggregated{stroke-width:3px!important}.area{width:100%;height:100%;border:2px dashed var(--area-color);border-radius:12px;background:color-mix(in srgb,var(--area-color) 6%,transparent)}.area.is-selected{border-style:solid}.area__head{display:flex;align-items:center;gap:6px;width:max-content;max-width:100%;padding:3px 6px 3px 10px;border-radius:10px 0;background:var(--area-color);color:#fff;font-size:12px;font-weight:600}.area__count{padding:0 6px;border-radius:8px;background:#ffffff40;font-size:11px}.area__toggle{display:grid;place-items:center;padding:2px;border:none;border-radius:4px;background:#fff3;color:#fff;cursor:pointer}.area--collapsed{display:flex;flex-direction:column;border-style:solid;background:var(--panel);box-shadow:var(--shadow-sm)}.area--collapsed .area__head{width:100%;border-radius:9px 9px 0 0}.area__members{display:flex;align-items:center;gap:3px;padding:6px 10px;color:var(--icon-ink)}.area__members .muted{margin-left:auto;font-size:11px}.area__handle{opacity:0;pointer-events:none}.area__resize-line{border-color:var(--accent)!important}.area__resize-handle{width:9px!important;height:9px!important;background:var(--accent)!important;border:2px solid var(--panel)!important}.portal{display:flex;align-items:center;gap:7px;padding:5px 10px 5px 8px;border:1px dashed var(--line-strong);border-radius:18px;background:var(--panel-alt);color:var(--icon-ink);cursor:pointer}.portal:hover{border-color:var(--accent)}.portal__text{display:flex;flex-direction:column}.portal__label{font-size:12px;font-weight:600;color:var(--ink)}.portal__site{display:flex;align-items:center;gap:3px;font-size:10.5px;color:var(--accent)}.color-choices{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;border:none}.color-choices legend{width:100%;margin-bottom:4px}.color-choice{position:relative;width:26px;height:26px;border-radius:50%;border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line-strong);cursor:pointer}.color-choice input{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;opacity:0;cursor:pointer}.color-choice:has(input:checked){box-shadow:0 0 0 2px var(--ink)}.color-choice:has(input:focus-visible){outline:var(--focus-ring);outline-offset:3px}.network-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.network{padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-alt)}.network__grid{display:grid;grid-template-columns:1fr 1fr;gap:0 8px}.network__usage{margin:2px 0 0;font-size:12px}.mono{font-family:var(--mono)}.address-info{margin:2px 0 8px;font-size:12.5px}.address-info ul{list-style:none;margin:0;padding:0}.issues{list-style:none;margin:4px 0 0;padding:0;display:grid;gap:3px;color:var(--crit-medium);font-size:12px}.issues li{display:flex;align-items:flex-start;gap:5px}.issues svg{flex:none;margin-top:2px}.note{min-height:40px;padding:8px 10px;border:1px solid var(--line-strong);border-top:4px solid var(--note-color);border-radius:var(--radius);background:color-mix(in srgb,var(--note-color) 9%,var(--panel));color:var(--ink);font-size:12.5px;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:var(--shadow-sm)}.note.is-selected{box-shadow:0 0 0 2px var(--accent),var(--shadow-md)}.note.is-editing{padding:4px}.note__editor{display:block;width:100%;min-height:60px;resize:vertical;font:inherit;color:var(--ink);background:var(--panel);border:1px solid var(--accent);border-radius:4px;padding:4px 6px}.member-list{list-style:none;margin:0;padding:0}.member-list button{display:flex;align-items:center;gap:8px;width:100%;padding:4px 6px;border:none;border-radius:5px;background:none;color:var(--icon-ink);text-align:left;cursor:pointer}.member-list button:hover:not(:disabled){background:var(--panel-alt)}.gallery-dialog{width:min(980px,calc(100vw - 32px));max-height:calc(100vh - 64px);padding:0;border:1px solid var(--line-strong);border-radius:12px;background:var(--panel);color:var(--ink);box-shadow:var(--shadow-lg)}.gallery-dialog::backdrop{background:var(--backdrop)}.gallery-dialog header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line)}.gallery-dialog h2{margin:0;font-size:17px}.template-grid{list-style:none;margin:0;padding:16px 18px;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.template{display:flex;flex-direction:column;gap:6px;width:100%;height:100%;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--panel);text-align:left;cursor:pointer}.template:hover,.template:focus-visible{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.template__preview{width:100%;height:120px;border-radius:7px;background:var(--panel-alt)}.template__preview--blank{display:grid;place-items:center;color:var(--ink-faint)}.template .muted{font-size:12.5px}.template__meta{margin-top:auto;font-size:11.5px;color:var(--ink-soft)}.gallery-dialog__note{padding:0 18px 16px}.segmented{display:inline-flex;padding:2px;border:1px solid var(--line-strong);border-radius:8px;background:var(--panel)}.segmented button{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:none;border-radius:6px;background:none;color:var(--ink-soft);font-size:12.5px;white-space:nowrap;cursor:pointer}.segmented button.is-active{background:var(--accent);color:var(--on-accent)}.view-switch{align-self:center;margin-bottom:6px}.inventory{flex:1;display:flex;flex-direction:column;min-height:0;background:var(--panel)}.inventory__bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}.inventory__bar .button{padding:6px 10px;border:1px solid var(--line-strong);background:var(--panel)}.inventory__search{width:220px!important}.inventory__spacer{flex:1}.inventory__table-wrap{flex:1;overflow:auto}.inventory__table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}.inventory__table th{position:sticky;top:0;z-index:1;padding:0;background:var(--panel-alt);border-bottom:1px solid var(--line-strong);text-align:left;font-size:12px;font-weight:600;color:var(--ink-soft);white-space:nowrap}.inventory__table th:not(:has(button)){padding:8px}.inventory__table th button{display:flex;align-items:center;gap:4px;width:100%;padding:8px;border:none;background:none;font:inherit;color:inherit;cursor:pointer}.inventory__table td{padding:3px 6px;border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap}.inventory__table tr:hover td,.inventory__table tr.is-checked td{background:var(--panel-alt)}.inventory__table select,.cell-input{min-width:90px;padding:4px 6px!important;border-color:transparent!important;background:transparent!important}.inventory__table select:hover,.inventory__table select:focus,.cell-input:hover,.cell-input:focus{border-color:var(--line-strong)!important;background:var(--panel)!important}.col-check{width:34px;text-align:center}.col-name{display:flex;align-items:center;gap:6px;min-width:220px;color:var(--icon-ink)}.col-name .cell-input{font-weight:600;color:var(--ink)}.inventory__empty{margin:16px}.outline{flex:1;display:flex;flex-direction:column;min-height:0;background:var(--panel)}.outline__bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;padding:10px 12px;border-bottom:1px solid var(--line)}.outline__help{flex:1 1 320px;margin:0;font-size:12.5px}.outline__filtered{margin:0;font-size:12.5px;font-weight:600}.outline__picker{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);background:var(--panel-alt)}.outline__picker p{margin:0;font-weight:600}.outline__picker .device-picker{width:min(420px,100%)}.outline__scroll{flex:1;overflow:auto;padding:6px 0}.outline__tree,.outline__tree ul{margin:0;padding:0;list-style:none}.outline__row:focus{outline:var(--focus-ring);outline-offset:-2px}.outline__row{display:flex;align-items:center;gap:6px;min-height:30px;padding-right:12px;font-size:13px;cursor:pointer}.outline__row:hover{background:var(--panel-alt)}.outline__row.is-selected{background:var(--accent-soft)}.outline__twisty,.outline__icon{display:grid;place-items:center;flex:none}.outline__twisty{width:16px;color:var(--ink-soft)}.outline__icon{width:20px;color:var(--icon-ink)}.outline__text{display:flex;align-items:baseline;gap:8px;min-width:0}.outline__label{white-space:nowrap}.outline__row--site .outline__label,.outline__row--level .outline__label,.outline__row--device .outline__label,.outline__row--zones .outline__label,.outline__row--areas .outline__label,.outline__row--notes .outline__label{font-weight:600}.outline__comma{font-size:0}.outline__detail{overflow:hidden;color:var(--ink-soft);font-size:12px;white-space:nowrap;text-overflow:ellipsis}.outline__empty{margin:16px}.protocol-dot{display:inline-block;width:9px;height:9px;margin-right:6px;border-radius:50%}.action{padding:1px 7px;border-radius:9px;font-size:11.5px;font-weight:600}.action--allow{background:var(--allow-soft);color:var(--allow)}.action--deny{background:var(--danger-soft);color:var(--danger)}.link-button{padding:0;border:none;background:none;color:var(--accent);text-decoration:underline;cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.menu{position:relative}.menu summary{list-style:none}.menu summary::-webkit-details-marker{display:none}.menu__items{position:absolute;right:0;z-index:40;min-width:240px;margin-top:6px;padding:5px;background:var(--panel);color:var(--ink);border:1px solid var(--line-strong);border-radius:8px;box-shadow:var(--shadow-md)}.menu__items button{display:block;width:100%;padding:7px 10px;border:none;border-radius:5px;background:none;text-align:left;cursor:pointer}.menu__items button:hover:not(:disabled),.menu__items button:focus-visible{background:var(--panel-alt)}.menu__items button:disabled{color:var(--ink-faint);cursor:default}.menu__items hr{margin:4px 0;border:none;border-top:1px solid var(--line)}.display-menu__mark{min-width:16px;font-weight:700;letter-spacing:-.02em}.display-menu__items{min-width:230px;padding:8px}.display-menu__items fieldset{margin:0;padding:0 0 6px;border:none}.display-menu__items fieldset+fieldset{padding-top:8px;border-top:1px solid var(--line)}.display-menu__items legend{padding:0 6px 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint)}.display-menu__hint{margin:6px 6px 0;font-size:11.5px;line-height:1.4;color:var(--ink-faint)}.import-dialog{width:min(640px,calc(100vw - 32px))}.import-dialog__body{display:flex;flex-direction:column;gap:12px;padding:16px 18px}.import-dialog__body code{font-family:var(--mono);font-size:12px}.file-button{align-self:flex-start;padding:8px 12px;border:1px dashed var(--line-strong);background:var(--panel-alt)}.import-errors{max-height:200px;overflow-y:auto;margin:0;padding:8px 8px 8px 26px;border-radius:6px;background:var(--danger-soft);color:var(--danger);font-size:12.5px}.text-danger{color:var(--danger)}.merge-sites{display:grid;gap:6px;margin:0;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius)}.merge-sites legend{padding:0 4px;font-size:13px;font-weight:600}.merge-summary{padding:10px 12px;border-radius:var(--radius);background:var(--panel-alt);font-size:13px}.merge-summary p{margin:0 0 6px}.merge-summary ul{margin:0;padding-left:20px}.import-dialog__footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid var(--line)}.import-dialog__footer .button{padding:7px 12px;border:1px solid var(--line-strong);background:var(--panel)}.button--primary{background:var(--accent)!important;border-color:var(--accent)!important;color:var(--on-accent)}.button--primary:disabled{opacity:.5;cursor:default}.help-dialog{width:min(620px,calc(100vw - 32px))}.shortcuts{display:grid;gap:2px;margin:0;padding:12px 18px}.shortcuts div{display:grid;grid-template-columns:minmax(180px,40%) 1fr;gap:12px;padding:5px 0;border-bottom:1px solid var(--line)}.shortcuts dd{margin:0}.shortcuts kbd{font-family:var(--mono);font-size:12px;padding:1px 6px;border:1px solid var(--line-strong);border-radius:4px;background:var(--panel-alt)}.help-dialog__note{padding:0 18px 16px}.narrow-only{display:none!important}.toolbar .button.is-active{background:var(--toolbar-active);border-color:var(--toolbar-active);color:var(--toolbar-active-ink)}@media (max-width: 900px){.narrow-only{display:flex!important}.toolbar{flex-wrap:wrap;gap:8px}.brand{margin-right:0}.toolbar .button:not(.icon-only),.segment{padding:6px 8px}.workspace{grid-template-columns:1fr;position:relative;overflow:hidden}.palette,.inspector{position:absolute;top:0;bottom:0;z-index:25;width:min(320px,88vw);box-shadow:var(--shadow-lg);transition:transform .18s ease;visibility:hidden}.palette{left:0;transform:translate(-100%)}.inspector{right:0;transform:translate(100%)}.drawer-palette .palette,.drawer-inspector .inspector{transform:none;visibility:visible}.canvas-bar{flex-wrap:wrap}}.search-trigger kbd,.search__box kbd{font-family:var(--mono);font-size:10.5px}.search__box kbd{color:var(--ink-soft)}.search{width:min(560px,calc(100vw - 32px));margin-top:12vh;padding:0;border:1px solid var(--line-strong);border-radius:12px;background:var(--panel);color:var(--ink);box-shadow:var(--shadow-lg)}.search::backdrop{background:var(--backdrop)}.search__box{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line)}.search__box input{flex:1;border:none!important;padding:4px 0!important;font-size:15px;outline:none}.search__results{list-style:none;margin:0;padding:6px;max-height:50vh;overflow-y:auto}.search__results li{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;padding:7px 10px;border-radius:7px;color:var(--icon-ink);cursor:pointer}.search__results li svg{grid-row:span 2;align-self:center}.search__results li.is-active{background:var(--accent-soft)}.search__label{color:var(--ink);font-weight:600}.search__results .muted{font-size:12px}.search__none{display:block!important}.canvas{position:relative;min-width:0;min-height:0}.canvas .react-flow__node-lane{pointer-events:none}.lane{width:100%;height:100%;border-bottom:1px dashed var(--line-strong);display:flex;flex-direction:column;justify-content:center;padding-left:18px;background:var(--lane-a)}.lane--4,.lane--3,.lane--1{background:var(--lane-b)}.lane--3-5{background:repeating-linear-gradient(135deg,var(--lane-dmz-a) 0 12px,var(--lane-dmz-b) 12px 24px)}.lane__level{font-family:var(--mono);font-size:22px;font-weight:700;color:var(--ink-faint);opacity:.8}.lane__name{font-size:12px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.06em;max-width:170px}.lane__actions{display:flex;gap:4px;margin-top:6px;pointer-events:auto}.lane__button{display:grid;place-items:center;width:26px;height:26px;padding:0;border:1px solid var(--line-strong);border-radius:6px;background:var(--panel);color:var(--ink-soft);cursor:pointer}.lane__button:hover{color:var(--ink);border-color:var(--ink-faint)}.lane__button[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.level-tabs{display:flex;align-items:flex-end;gap:2px;padding:4px 10px 0;overflow-x:auto;scrollbar-width:thin;background:var(--panel-alt);border-bottom:1px solid var(--line)}.level-tab{display:flex;align-items:center;flex:none;border:1px solid transparent;border-bottom:none;border-radius:7px 7px 0 0}.level-tab.is-active,.level-tab__button.is-active{background:var(--panel);border-color:var(--line)}.level-tab__button{display:flex;align-items:center;gap:6px;flex:none;padding:5px 12px;border:1px solid transparent;border-bottom:none;border-radius:7px 7px 0 0;background:none;white-space:nowrap;cursor:pointer;color:var(--ink-soft)}.level-tab>.level-tab__button{border:none}.level-tab.is-active>.level-tab__button,.level-tab__button.is-active{color:var(--ink);font-weight:600}.level-tab__level{font-family:var(--mono);font-weight:700}.level-tab__close{display:grid;place-items:center;margin-right:4px;padding:3px;border:none;border-radius:5px;background:none;color:var(--ink-faint);cursor:pointer}.level-tab__close:hover{background:var(--line);color:var(--ink)}.react-flow__node.level-group{pointer-events:none}.level-group .area__toggle{display:none}.portal--level .portal__site svg{display:none}.device-node--stack{box-shadow:5px 5px 0 -1px var(--panel),5px 5px 0 0 var(--line-strong),10px 10px 0 -1px var(--panel),10px 10px 0 0 var(--line-strong),var(--shadow-sm)}.device-node--stack.is-selected{box-shadow:0 0 0 2px var(--accent),5px 5px 0 -1px var(--panel),5px 5px 0 0 var(--accent),10px 10px 0 -1px var(--panel),10px 10px 0 0 var(--accent),var(--shadow-md)}.stack-badge{position:absolute;left:6px;bottom:-9px;padding:0 6px;border-radius:8px;background:var(--ink);color:var(--panel);font-size:10.5px;font-weight:700;line-height:16px}.edge-count{position:absolute;padding:0 5px;border:1px solid var(--line-strong);border-radius:8px;background:var(--panel);color:var(--ink);font-size:10px;font-weight:700;line-height:15px;white-space:nowrap;pointer-events:none}.edge-count.is-dimmed{opacity:.22}.device-node{position:relative;display:flex;align-items:center;gap:9px;width:190px;height:64px;padding:6px 10px 6px 8px;background:var(--panel);border:1px solid var(--line-strong);border-left:5px solid var(--zone-color);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.device-node.is-selected{box-shadow:0 0 0 2px var(--accent),var(--shadow-md)}.is-connect-source .device-node,.is-connect-target .device-node{outline:3px dashed var(--accent);outline-offset:3px}.is-connect-target .device-node{outline-style:solid}.is-connect-source .device-node:after,.is-connect-target .device-node:after{content:"From";position:absolute;top:-22px;left:-3px;padding:1px 6px;border-radius:4px;background:var(--accent);color:var(--on-accent);font-size:11px;font-weight:600}.is-connect-target .device-node:after{content:"To"}.device-node__icon{display:grid;place-items:center;flex:none;color:var(--icon-ink)}.device-node__text{display:flex;flex-direction:column;min-width:0;padding-right:10px}.device-node__label{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-node__meta{font-size:11px;color:var(--ink-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.criticality{position:absolute;top:4px;right:4px;display:grid;place-items:center;width:15px;height:15px;border-radius:50%;font-size:9px;font-weight:700;color:#fff}.criticality--high{background:var(--crit-high)}.criticality--medium{background:var(--crit-medium)}.criticality--low{background:var(--crit-low)}.device-node .react-flow__handle{width:9px;height:9px;background:var(--panel);border:2px solid var(--ink-faint);opacity:0;transition:opacity .12s}.device-node:hover .react-flow__handle,.device-node.is-selected .react-flow__handle{opacity:1}.connect-flow .device-node .react-flow__handle{border-color:var(--accent)}.link-edge{stroke:var(--link-stroke)!important;stroke-width:2px!important}.link-edge.medium-serial{stroke-dasharray:2 4}.link-edge.medium-wireless{stroke-dasharray:8 5}.link-edge.is-selected{stroke:var(--accent)!important;stroke-width:3.5px!important}.flow-edge{stroke-width:2px!important}.flow-edge.is-selected{stroke-width:3.5px!important}.flow-label{position:absolute;padding:1px 6px 1px 4px;border-radius:10px;font-size:10.5px;font-weight:600;color:var(--ink);background:var(--panel);border:1.5px solid var(--protocol-color);border-left-width:5px;pointer-events:none;white-space:nowrap}.flow-label.is-selected{box-shadow:0 0 0 2px var(--protocol-color)}.react-flow__attribution{background:var(--panel)!important}.react-flow__attribution a{color:var(--ink-soft)!important}.legend{padding:8px 10px;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--line);border-radius:8px;font-size:11.5px}.legend ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}.legend li{display:flex;align-items:center;gap:8px}.legend__link{stroke:var(--link-stroke);stroke-width:2}.node-menu{position:absolute;z-index:20;min-width:190px;padding:4px;background:var(--panel);border:1px solid var(--line-strong);border-radius:8px;box-shadow:var(--shadow-md)}.node-menu>button{display:flex;align-items:center;gap:8px;width:100%;padding:7px 9px;border:none;border-radius:5px;background:none;text-align:left;cursor:pointer}.node-menu>button:hover,.node-menu>button:focus-visible{background:var(--panel-alt)}.node-menu>button.danger{color:var(--danger)}.node-menu kbd{margin-left:auto;font-family:var(--mono);font-size:10.5px;color:var(--ink-faint)}.device-picker{display:flex;flex-direction:column;gap:6px;width:260px;max-width:100%}.inspector .device-picker{width:100%}.device-picker ul{list-style:none;margin:0;padding:0;max-height:220px;overflow-y:auto;border:1px solid var(--line);border-radius:6px}.device-picker li button{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;width:100%;padding:5px 8px;border:none;background:none;text-align:left;cursor:pointer;color:var(--icon-ink)}.device-picker li button span:nth-child(2){color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-picker li button:hover,.device-picker li button:focus-visible{background:var(--panel-alt)}.device-picker__none{padding:8px}.button-row,.tool-grid{display:flex;flex-wrap:wrap;gap:6px}.button.is-active{background:var(--accent-soft);border-color:var(--accent)}.tool-grid .icon-button{padding:6px 8px}.inspector{background:var(--panel);border-left:1px solid var(--line)}.panel-section__body:not([hidden]){display:contents}.panel-section.is-folded{padding-bottom:12px}.panel-section{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:10px}.panel-section__header{display:flex;align-items:center;justify-content:space-between}.panel-section h3{margin:0;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft)}.panel-actions{padding:14px 16px}.field{display:flex;flex-direction:column;gap:4px;min-width:0}.field__label{font-size:12px;font-weight:600;color:var(--ink-soft)}.field__hint{font-size:11.5px;color:var(--ink-faint)}.toggle{display:flex;align-items:center;gap:8px;cursor:pointer}.toggle input{width:16px;height:16px;accent-color:var(--accent)}.muted{margin:0;color:var(--ink-faint);font-size:12.5px;line-height:1.45}.empty{margin:0;padding:10px;border:1px dashed var(--line-strong);border-radius:6px;color:var(--ink-faint);font-size:12.5px}.stats{margin:0;font-family:var(--mono);font-size:12px;color:var(--ink-soft)}.button,.icon-button{display:inline-flex;align-items:center;gap:6px;border-radius:6px;cursor:pointer}.inspector .button{padding:7px 12px;border:1px solid var(--line-strong);background:var(--panel)}.icon-button{padding:4px 7px;border:1px solid var(--line);background:var(--panel-alt);font-size:12px;color:var(--ink-soft)}.icon-button:hover:not(:disabled){border-color:var(--line-strong);color:var(--ink)}.icon-button:disabled{opacity:.4;cursor:default}.button.danger,.icon-button.danger{color:var(--danger)}.button.danger:hover,.icon-button.danger:hover{background:var(--danger-soft);border-color:var(--danger-line)}.asset-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}textarea{resize:vertical}.endpoints{margin:0;font-weight:600}.roles{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0}.roles dt{font-size:12px;color:var(--ink-faint)}.roles dd{margin:0;font-weight:600}.service-list,.rule-list,.zone-list,.conduit-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.service-list li{display:grid;grid-template-columns:1fr 90px auto;gap:6px;align-items:center}.rule{border:1px solid var(--line);border-left:4px solid var(--danger);border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:8px;background:var(--panel-alt)}.rule--allow{border-left-color:var(--allow)}.rule__head{display:flex;align-items:center;gap:8px}.rule__head select{width:auto}.rule__index{font-family:var(--mono);font-weight:700;color:var(--ink-soft)}.rule__tools{margin-left:auto;display:flex;gap:4px}.rule__grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.zone{border:1px solid var(--line);border-left:5px solid;border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:8px}.zone__row{display:flex;align-items:flex-end;gap:8px}.zone__row input[type=color]{flex:none;width:32px;height:32px;padding:2px;border:1px solid var(--line-strong);border-radius:6px;background:var(--panel)}.zone__row .field{width:90px;flex:none}.zone__row .toggle{padding-bottom:7px}.zone__count{margin-left:auto;padding-bottom:7px;font-size:12px;color:var(--ink-faint)}.conduit-list li{display:flex;flex-direction:column;padding:8px 10px;border:1px solid var(--line);border-radius:6px}.gallery{max-width:1100px;margin:0 auto;padding:24px 16px 60px;overflow-y:auto;height:100%}.gallery h2{font-size:15px;margin:28px 0 10px}.gallery__row{display:flex;flex-wrap:wrap;gap:12px}.gallery figure{margin:0;width:150px;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--panel)}.gallery__sizes{display:flex;align-items:flex-end;gap:10px;color:var(--icon-ink)}.gallery figcaption{display:flex;flex-direction:column;margin-top:8px;font-size:12px}.gallery code{font-size:10.5px;color:var(--ink-faint)}@media (max-width: 1600px){.brand__project,.toolbar__label,.search-trigger kbd{display:none}.toolbar-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}@media (max-width: 1100px){.workspace{--palette-w: 180px;--inspector-w: 300px}.brand__project,.toolbar__label{display:none}}@media print{@page{size:landscape;margin:10mm}.toolbar,.palette,.inspector,.canvas-bar,.notice,.react-flow__controls,.react-flow__minimap,.react-flow__handle{display:none!important}html,body,#root,.app{height:auto;background:#fff}.workspace{display:block;height:180mm}.canvas-column,.canvas{height:100%}}.cell-with-flag{display:flex;align-items:center;gap:4px}.cell-flag{display:inline-flex;color:var(--crit-medium)}.issues-cell{color:var(--crit-medium);font-size:12px}.react-flow__node.diff-added .device-node,.react-flow__node.diff-added .note,.react-flow__node.diff-added .area{outline:3px solid var(--allow);outline-offset:3px}.react-flow__node.diff-changed .device-node,.react-flow__node.diff-changed .note,.react-flow__node.diff-changed .area{outline:3px dashed var(--crit-medium);outline-offset:3px}.diff-badge{position:absolute;top:-10px;left:8px;padding:0 6px;border-radius:8px;font-size:10.5px;font-weight:700;line-height:16px;color:var(--on-status)}.diff-badge--added{background:var(--allow)}.diff-badge--changed{background:var(--crit-medium)}.link-edge.diff-added,.flow-edge.diff-added{stroke-width:4px!important;filter:drop-shadow(0 0 2px var(--allow))}.link-edge.diff-changed,.flow-edge.diff-changed{stroke-width:4px!important;filter:drop-shadow(0 0 2px var(--crit-medium))}.flow-label.diff-added{outline:2px solid var(--allow)}.flow-label.diff-changed{outline:2px dashed var(--crit-medium)}.change-summary{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}.change-tag{display:inline-block;padding:0 7px;border-radius:9px;font-size:11px;font-weight:700;line-height:18px;color:var(--on-status);text-transform:uppercase;letter-spacing:.03em}.change-tag--added{background:var(--allow)}.change-tag--changed{background:var(--crit-medium)}.change-tag--removed{background:var(--danger)}.change-group h4{margin:12px 0 4px;font-size:12px;color:var(--ink-soft)}.change-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.change-list>li{font-size:12.5px}.change-list ul{margin:2px 0 0 18px;padding:0;color:var(--ink-soft);font-size:12px}.revision-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}.revision{padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-alt)}.revision.is-comparing{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.revision__date{margin:2px 0 6px;font-size:11.5px}.revision__save{display:flex;gap:6px;margin-bottom:10px}.revision__save input{flex:1;min-width:0}.share-dialog{width:min(640px,calc(100vw - 32px))}.share-dialog__link{display:flex;gap:8px;margin:10px 0 4px}.share-dialog__link input{flex:1;min-width:0;font-family:var(--mono);font-size:12px}.waypoint{position:absolute;width:12px;height:12px;border:2px solid var(--panel);border-radius:50%;background:var(--accent);box-shadow:0 0 0 1px var(--accent);cursor:grab;pointer-events:all}.waypoint:active{cursor:grabbing}.port-label{position:absolute;padding:0 4px;border:1px solid var(--line-strong);border-radius:4px;background:var(--panel);color:var(--ink-soft);font-family:var(--mono);font-size:9.5px;line-height:14px;white-space:nowrap;pointer-events:none}.port-label.is-dimmed{opacity:.22}.lock-badge{position:absolute;top:-7px;right:18px;display:grid;place-items:center;width:16px;height:16px;border:1px solid var(--line-strong);border-radius:50%;background:var(--panel);color:var(--ink-soft)}.lock-badge--note{right:6px}.note{position:relative}.layers-menu .filter__menu{right:0;left:auto}@media print{.waypoint{display:none}}.layers-menu{flex:none;margin-bottom:6px}.legend{-webkit-user-select:none;user-select:none}.tag-editor{display:grid;gap:6px;margin-bottom:8px}.tag-list{display:flex;flex-wrap:wrap;gap:5px;margin:0;padding:0;list-style:none}.tag{display:inline-flex;align-items:center;gap:3px;padding:1px 4px 1px 8px;border:1px solid var(--line-strong);border-radius:10px;background:var(--accent-soft);color:var(--ink);font-size:12px}.tag button{display:grid;place-items:center;padding:1px;border:none;border-radius:50%;background:none;color:var(--ink-soft);cursor:pointer}.tag button:hover{color:var(--danger)}.command-palette .search__results li{grid-template-columns:70px 1fr auto}.command-palette__group{color:var(--ink-soft);font-size:11.5px;text-transform:uppercase;letter-spacing:.04em}.command-palette kbd{font-family:var(--mono);font-size:11px;padding:0 5px;border:1px solid var(--line-strong);border-radius:4px;color:var(--ink-soft)}.history-menu__items{width:340px;max-height:60vh;overflow-y:auto}.history-menu__title{margin:4px 8px 6px;font-size:12px;font-weight:600;color:var(--ink-soft)}.history-menu__empty{margin:0 8px 6px}.history-menu ol{list-style:none;margin:0;padding:0}.history-menu ol button{width:100%;text-align:left}.history-menu ol button[aria-current=step]{font-weight:600;background:var(--accent-soft)}.history-menu ol button.is-undone{color:var(--ink-faint)}.tour__spot{position:fixed;z-index:60;border:2px solid var(--accent);border-radius:10px;box-shadow:0 0 0 9999px #0f1c2a73;pointer-events:none;transition:all .2s ease}.tour__card{position:fixed;z-index:61;padding:16px 18px;border:1px solid var(--line-strong);border-radius:12px;background:var(--panel);color:var(--ink);box-shadow:var(--shadow-lg)}.tour__card h2{margin:0 0 6px;font-size:16px}.tour__card p{margin:0 0 12px;font-size:13.5px;line-height:1.5}.tour__count{color:var(--ink-faint);font-size:12px!important;margin-bottom:4px!important}.tour__actions{display:flex;gap:8px;justify-content:flex-end}.tour__skip{margin-right:auto}.tour .button:not(.button--primary){padding:6px 12px;border:1px solid var(--line-strong);background:var(--panel);color:var(--ink)}@media (prefers-reduced-motion: reduce){.tour__spot{transition:none}}.canvas{position:relative}.canvas-empty{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);max-width:420px;padding:16px 20px;border:1px dashed var(--line-strong);border-radius:12px;background:var(--panel);text-align:center;pointer-events:none;z-index:5}.canvas-empty p{margin:0 0 4px}.link-edge.sec-violation,.flow-edge.sec-violation{stroke:var(--danger)!important;stroke-width:3.5px!important}.sec-badge{position:absolute;right:8px;bottom:-9px;display:inline-flex;align-items:center;gap:2px;padding:0 5px;border-radius:8px;font-size:10.5px;font-weight:700;line-height:16px;color:var(--on-status)}.sec-badge--high{background:var(--crit-high);color:#fff}.sec-badge--medium{background:var(--crit-medium)}.sec-badge--low{background:var(--crit-low);color:#fff}.count-badge{min-width:18px;padding:0 5px;border-radius:9px;background:var(--crit-low);color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center}.count-badge--high{background:var(--crit-high);color:#fff}.finding-list,.check-list,.policy-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.finding{padding-left:8px;border-left:3px solid var(--crit-low)}.finding--high{border-left-color:var(--crit-high)}.finding--medium{border-left-color:var(--crit-medium)}.finding__message{text-align:left}.finding__reference{margin:2px 0 0;color:var(--ink-soft);font-size:11.5px;font-variant-numeric:tabular-nums}.finding__fix{margin:2px 0 0;font-size:12px}.severity-tag{padding:0 6px;border-radius:8px;font-size:10.5px;font-weight:700;line-height:16px;text-transform:uppercase;color:var(--on-status);background:var(--crit-low)}.severity-tag--high{background:var(--crit-high);color:#fff}.severity-tag--medium{background:var(--crit-medium)}.severity-tag--low{color:#fff}.check-list .muted{margin:2px 0 0 24px;font-size:12px}.policy{padding:6px 8px;border:1px solid var(--line);border-radius:var(--radius)}.policy.is-disabled{opacity:.75}.policy summary{cursor:pointer}.policy__summary{display:block;font-size:12px}.policy details[open]>summary{margin-bottom:8px}.selector,.choice-grid{margin:8px 0;padding:6px 8px;border:1px solid var(--line);border-radius:var(--radius)}.choice-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:2px 8px}.selector .choice-grid{border:none;padding:0}.security-footer{margin:8px 12px 16px;font-size:11.5px}.link-edge.sec-path,.flow-edge.sec-path{stroke:var(--path)!important;stroke-width:4px!important}.sec-path-step .device-node,.sec-path .device-node{outline:3px solid var(--path);outline-offset:2px}.sec-path .device-node{outline-style:dashed}.path-step-badge{position:absolute;top:-10px;left:-10px;display:grid;place-items:center;min-width:20px;height:20px;padding:0 4px;border-radius:10px;background:var(--path);color:var(--on-path);font-size:11.5px;font-weight:700}.path-list,.endpoint-list{list-style:none;margin:0;padding:0;display:grid;gap:12px}.path{padding:6px 8px;border:1px solid var(--line);border-left:3px solid var(--line-strong);border-radius:var(--radius)}.path.is-selected{border-left-color:var(--path);box-shadow:0 0 0 1px var(--path)}.path__title{font-weight:600;text-align:left}.path__relies{margin:6px 0 0;font-size:12px;color:var(--ink-soft)}.attack-chain{list-style:none;margin:6px 0 0;padding:0;display:grid;justify-items:start;gap:16px}.attack-chip{position:relative;display:flex;flex-direction:column;padding:3px 7px;border:1px solid var(--line-strong);border-radius:6px;background:var(--panel);font-size:11.5px;line-height:1.35}.attack-chip+.attack-chip:before{content:"↓";position:absolute;left:10px;top:-16px;line-height:16px;color:var(--ink-soft)}.attack-chip__device{font-weight:600}.attack-chip__label{font-variant-numeric:tabular-nums}.attack-chip__name{color:var(--ink-soft)}.endpoint-list{gap:2px;margin:6px 0}.endpoint-list li{display:flex;align-items:center;justify-content:space-between;gap:8px}@media (pointer: coarse){button,summary,select,input:not([type=checkbox],[type=radio]),.filter__option,.toggle{min-height:44px}.icon-only,.icon-button,.palette__toggle,.panel-head__toggle,.lane__button,.level-tab__close{min-width:44px;justify-content:center}.palette__toggle{width:44px;height:44px}input[type=checkbox],input[type=radio]{width:22px;height:22px}.panel-edge{width:14px}.device-node .react-flow__handle{width:18px;height:18px}.react-flow__edge-interaction{stroke-width:28px}.react-flow__controls-button{width:44px;height:44px}.canvas{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.toolbar,.canvas-bar{flex-wrap:wrap}}
