:root{--bg:#f6f7f9;--panel:#fff;--panel-2:#f1f3f6;--line:#e2e6eb;--line-strong:#cbd2da;--text:#17202a;--muted:#64707d;--accent:#0f766e;--accent-soft:#ccfbf1;--warn:#b45309;--warn-bg:#fef3c7;--error:#b91c1c;--error-bg:#fee2e2;--ok:#15803d;--copper:#475569;--fibre:#ea580c;--wireless:#0284c7;--vpn:#7c3aed;--internet:#64748b;--private:#0e7490;--canvas:#fbfcfd;--shadow:0 1px 2px #1018280f, 0 1px 3px #10182814;--radius:8px;color:var(--text);background:var(--bg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0b0f14;--panel:#121820;--panel-2:#18202a;--line:#232d39;--line-strong:#334152;--text:#e6ebf0;--muted:#8b98a6;--accent:#2dd4bf;--accent-soft:#134e4a;--warn:#fbbf24;--warn-bg:#3a2a06;--error:#f87171;--error-bg:#3b1212;--ok:#4ade80;--copper:#94a3b8;--fibre:#fb923c;--wireless:#38bdf8;--vpn:#a78bfa;--internet:#94a3b8;--private:#22d3ee;--canvas:#0f1419;--shadow:0 1px 3px #00000080}}:root[data-theme=dark]{--bg:#0b0f14;--panel:#121820;--panel-2:#18202a;--line:#232d39;--line-strong:#334152;--text:#e6ebf0;--muted:#8b98a6;--accent:#2dd4bf;--accent-soft:#134e4a;--warn:#fbbf24;--warn-bg:#3a2a06;--error:#f87171;--error-bg:#3b1212;--ok:#4ade80;--copper:#94a3b8;--fibre:#fb923c;--wireless:#38bdf8;--vpn:#a78bfa;--internet:#94a3b8;--private:#22d3ee;--canvas:#0f1419;--shadow:0 1px 3px #00000080}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg)}button{font:inherit;color:inherit;cursor:pointer}input,select,textarea{font:inherit;color:inherit}[hidden]{display:none!important}.mono{font-family:ui-monospace,Cascadia Mono,SF Mono,Consolas,monospace;font-size:12.5px}.muted{color:var(--muted)}.small{font-size:12px}.ok{color:var(--ok);font-size:12px;font-weight:500}.nowrap{white-space:nowrap}kbd{color:var(--muted);margin-left:auto;font:11px ui-monospace,monospace}.app{flex-direction:column;height:100%;display:flex}.toolbar{background:var(--panel);border-bottom:1px solid var(--line);flex-shrink:0;align-items:center;gap:12px;height:52px;padding:0 12px;display:flex}.brand{letter-spacing:-.01em;align-items:center;gap:8px;font-size:15px;font-weight:700;display:flex}.brand-by{color:var(--muted);white-space:nowrap;margin-left:-3px;font-size:12px;font-weight:400}@media (width<=1100px){.toolbar .brand-by{display:none}}.title-input{background:0 0;border:1px solid #0000;border-radius:6px;width:260px;min-width:120px;max-width:30vw;padding:5px 8px;font-weight:500}.title-input:hover{border-color:var(--line)}.title-input:focus{border-color:var(--accent);background:var(--panel);outline:none}.saved{white-space:nowrap;font-size:12px}.tabs{background:var(--panel-2);border-radius:8px;margin:0 auto;padding:3px;display:flex}.tabs button{color:var(--muted);background:0 0;border:0;border-radius:6px;padding:5px 14px;font-weight:500}.tabs button.on{background:var(--panel);color:var(--text);box-shadow:var(--shadow)}.actions{align-items:center;gap:6px;display:flex}.btn{border:1px solid var(--line);background:var(--panel);white-space:nowrap;border-radius:6px;padding:5px 10px;font-weight:500}.btn:hover:not(:disabled){border-color:var(--line-strong);background:var(--panel-2)}.btn:disabled{opacity:.4;cursor:default}.btn.icon{width:32px;padding:5px 0;font-size:16px;line-height:1}.btn.ghost{color:var(--muted);border-color:#0000}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .btn.primary{color:#042f2e}}:root[data-theme=dark] .btn.primary{color:#042f2e}.btn.primary:hover{filter:brightness(1.08);background:var(--accent)}.btn.primary.destructive,.btn.primary.destructive:hover{background:var(--error);border-color:var(--error);color:#fff}.confirm-dialog{width:min(440px,100vw - 32px)}.confirm-dialog h2{margin-top:0}.confirm-body{white-space:pre-line;color:var(--muted);margin:0 0 12px}.menu{position:relative}.menu-pop{z-index:50;background:var(--panel);border:1px solid var(--line);border-radius:8px;min-width:220px;padding:4px;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #00000024}.menu-pop button,.menu-pop .menu-link{color:inherit;font-size:inherit;text-align:left;background:0 0;border:0;border-radius:5px;width:100%;padding:7px 10px;text-decoration:none;display:flex}.menu-pop button:hover,.menu-pop .menu-link:hover{background:var(--panel-2)}.menu-pop hr{border:0;border-top:1px solid var(--line);margin:4px 0}.banner{background:var(--accent-soft);border-bottom:1px solid var(--line);justify-content:center;align-items:center;gap:14px;padding:8px 12px;font-size:13px;display:flex}.workspace{flex:1;min-height:0;display:flex;overflow:hidden}.palette,.inspector{background:var(--panel);flex-shrink:0;overflow-y:auto}.palette{border-right:1px solid var(--line);width:216px;padding:10px 12px 16px}.inspector{border-left:1px solid var(--line);width:320px;padding:14px 16px 24px}.stage{flex:1;min-width:0;position:relative}.dock{z-index:20;flex-shrink:0;display:flex;position:relative}.dock-right{flex-direction:row-reverse}.dock-panel{min-height:0;display:flex}.dock-pin{background:var(--panel-2);width:12px;color:var(--muted);cursor:pointer;border:0;flex-shrink:0;align-self:stretch;place-items:center;padding:0;font-size:13px;line-height:1;display:grid}.dock-left .dock-pin{border-right:1px solid var(--line)}.dock-right .dock-pin{border-left:1px solid var(--line)}.dock-pin:hover,.dock.peek .dock-pin{background:color-mix(in srgb, var(--accent) 14%, var(--panel));color:var(--accent)}.dock.collapsed .dock-panel{visibility:hidden;opacity:0;transition:transform .16s,opacity .16s,visibility .16s;position:absolute;top:0;bottom:0;box-shadow:0 8px 30px #00000040}.dock-left.collapsed .dock-panel{left:100%;transform:translate(-16px)}.dock-right.collapsed .dock-panel{right:100%;transform:translate(16px)}.dock.collapsed.peek .dock-panel{visibility:visible;opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.dock.collapsed .dock-panel{transition:none}}.stage-layer{position:absolute;inset:0}.canvas{width:100%;height:100%}.palette h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:14px 0 6px;font-size:11px;font-weight:600}.palette .hint{color:var(--muted);margin:2px 0 0;font-size:12px}.groups-section .hint p{margin:0 0 6px}.palette .tip{margin-top:18px;line-height:1.45}.palette-grid{grid-template-columns:1fr 1fr;gap:6px;display:grid}.tile{border:1px solid var(--line);background:var(--panel);border-radius:var(--radius);text-align:center;color:var(--text);cursor:grab;flex-direction:column;align-items:center;gap:4px;padding:9px 4px 7px;font-size:11.5px;line-height:1.2;display:flex}.tile svg{color:var(--accent)}.tile:hover{border-color:var(--accent);background:var(--panel-2)}.tile:active{cursor:grabbing}.react-flow{--xy-background-color:var(--canvas);--xy-node-border-radius:8px}.device{text-align:center;background:var(--panel);border:1px solid var(--line-strong);width:112px;min-height:84px;box-shadow:var(--shadow);border-radius:10px;padding:8px 6px 7px;transition:border-color .12s,box-shadow .12s;position:relative}.device.is-selected{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent)}.device-icon{color:var(--accent);height:28px;display:inline-block;position:relative}.device[data-kind=cloud] .device-icon,.device[data-kind=modem] .device-icon{color:var(--muted)}.device[data-kind=firewall] .device-icon{color:#dc2626}.device-name{overflow-wrap:anywhere;margin-top:3px;font-size:12px;font-weight:600;line-height:1.25}.device-ip{color:var(--muted);margin-top:2px;font:11px ui-monospace,Cascadia Mono,Consolas,monospace}.badge{color:#fff;border-radius:50%;place-items:center;width:16px;height:16px;font-size:11px;font-weight:700;line-height:1;display:inline-grid}.device .badge{position:absolute;top:-4px;right:-12px}.badge-warn{background:#d97706}.badge-error{background:#dc2626}.handle.react-flow__handle{background:var(--accent);color:#fff;border:2px solid var(--panel);opacity:0;cursor:crosshair;z-index:2;border-radius:50%;place-items:center;width:14px;height:14px;transition:opacity .12s,width .12s,height .12s;display:grid}.handle-arrow{pointer-events:none;place-items:center;transition:transform .12s;display:grid;transform:scale(.7)}.handle.react-flow__handle-top .handle-arrow{rotate:-90deg}.handle.react-flow__handle-bottom .handle-arrow{rotate:90deg}.handle.react-flow__handle-left .handle-arrow{rotate:180deg}.handle.react-flow__handle-top{top:-4px}.handle.react-flow__handle-bottom{bottom:-4px}.handle.react-flow__handle-left{left:-4px}.handle.react-flow__handle-right{right:-4px}.device:hover .handle{opacity:.85}.react-flow__node.selected .handle{opacity:1;width:24px;height:24px}.react-flow__node.selected .handle .handle-arrow{transform:none}.react-flow__node.selected .handle.react-flow__handle-top{top:-10px}.react-flow__node.selected .handle.react-flow__handle-bottom{bottom:-10px}.react-flow__node.selected .handle.react-flow__handle-left{left:-10px}.react-flow__node.selected .handle.react-flow__handle-right{right:-10px}.handle.react-flow__handle:hover{filter:brightness(1.15)}.handle-body.react-flow__handle{opacity:1;z-index:1;background:0 0;border:2px dashed #0000;border-radius:10px;width:auto;height:auto;inset:0;transform:none}.handle-body.react-flow__handle.connectingto,.handle-body.react-flow__handle:hover{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent)}.zone{border:1.5px dashed var(--zone);background:color-mix(in srgb, var(--zone) 7%, transparent);border-radius:14px;width:100%;height:100%}.react-flow__node-zone.selected .zone{background:color-mix(in srgb, var(--zone) 11%, transparent);border-style:solid}.zone-label{cursor:move;background:color-mix(in srgb, var(--zone) 16%, var(--panel));color:var(--text);border-radius:14px 0 10px;flex-wrap:wrap;align-items:baseline;gap:8px;max-width:100%;padding:7px 12px;font-size:12px;display:flex;position:absolute;top:0;left:0}.zone-label strong{color:color-mix(in srgb, var(--zone) 70%, var(--text))}.zone-label span{font:11.5px ui-monospace,Consolas,monospace}.zone-label .muted{font-family:inherit}.zone-label .bad{color:var(--error);-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.link{stroke-width:2px}.react-flow__edge-path.link-copper{stroke:var(--copper)}.react-flow__edge-path.link-fibre{stroke:var(--fibre);stroke-width:2.6px}.react-flow__edge-path.link-wireless{stroke:var(--wireless);stroke-dasharray:6 5}.react-flow__edge-path.link-vpn{stroke:var(--vpn);stroke-dasharray:2 4;stroke-linecap:round;stroke-width:2.4px}.react-flow__edge-path.link-internet{stroke:var(--internet);stroke-dasharray:1 5;stroke-linecap:round;stroke-width:2px}.react-flow__edge-path.link-private{stroke:var(--private);stroke-width:3.4px}.medium-internet{color:var(--internet)}.medium-private{color:var(--private)}.react-flow__edge-path.is-selected{stroke-width:3.5px;filter:drop-shadow(0 0 3px color-mix(in srgb, var(--accent) 60%, transparent))}.port-label,.link-label{pointer-events:none;white-space:nowrap;background:var(--canvas);color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:1px 4px;font:10px ui-monospace,Consolas,monospace;position:absolute}.link-label{color:var(--text);background:var(--panel);font:600 10.5px system-ui,sans-serif}.link-label.is-selected{border-color:var(--accent)}.panel-head{align-items:center;gap:10px;margin-bottom:14px;display:flex}.panel-head h2{overflow-wrap:anywhere;margin:0;font-size:16px;line-height:1.25}.panel-head p{margin:2px 0 0;font-size:12px}.panel-icon{background:var(--accent-soft);width:38px;height:38px;color:var(--accent);border-radius:9px;flex-shrink:0;place-items:center;display:grid}.panel-swatch{opacity:.85;border-radius:9px;flex-shrink:0;width:38px;height:38px}.panel-line{border-top:3px solid var(--copper);flex-shrink:0;width:38px;height:0}.panel-line.link-fibre{border-color:var(--fibre)}.panel-line.link-wireless{border-color:var(--wireless);border-top-style:dashed}.panel-line.link-vpn{border-color:var(--vpn);border-top-style:dotted}.field{flex-direction:column;flex:1;gap:4px;min-width:0;margin-bottom:11px;display:flex}.field>span{color:var(--muted);font-size:12px;font-weight:500}.field input,.field select,.field textarea{border:1px solid var(--line);background:var(--panel);border-radius:6px;width:100%;padding:6px 8px}.field input[type=checkbox],.field input[type=radio]{flex:none;width:auto;padding:0}.field textarea{resize:vertical;min-height:60px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.field small{color:var(--muted);flex-wrap:wrap;gap:4px 8px;font-size:11.5px;display:flex}.row{gap:10px;display:flex}.link-btn{color:var(--accent);background:0 0;border:0;padding:0;font-size:11.5px;font-weight:500;text-decoration:underline}.section{text-transform:uppercase;letter-spacing:.05em;color:var(--text);align-items:baseline;gap:6px;margin:18px 0 8px;font-size:12px;display:flex}.issues{flex-direction:column;gap:5px;margin:0 0 12px;padding:0;list-style:none;display:flex}.issues li{border-radius:6px;padding:6px 9px;font-size:12px;line-height:1.35}.issues li.warn{background:var(--warn-bg);color:var(--warn)}.issues li.error{background:var(--error-bg);color:var(--error)}.issues.clickable button{text-align:left;color:inherit;font-size:inherit;background:0 0;border:0;padding:0}.conn-list{margin:0 0 8px;padding:0;list-style:none}.conn-list button{text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:7px;width:100%;padding:6px 8px;font-size:12.5px;display:flex}.conn-list button:hover{background:var(--panel-2)}.conn-list .arrow{color:var(--muted)}.conn-list .push{margin-left:auto}.conn-list .chip{white-space:nowrap;flex-shrink:0}.chip{background:var(--panel-2);border:1px solid var(--line);border-radius:10px;margin-left:auto;padding:1px 6px;font-size:10.5px}.port-grid{flex-wrap:wrap;gap:4px;margin-bottom:12px;display:flex}.port{border:1px solid var(--line);color:var(--muted);border-radius:4px;padding:2px 5px;font:10.5px ui-monospace,Consolas,monospace}.port.used{background:var(--accent);border-color:var(--accent);color:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .port.used{color:#042f2e}}:root[data-theme=dark] .port.used{color:#042f2e}.swatches{gap:6px;display:flex}.swatch{border:2px solid #0000;border-radius:50%;width:24px;height:24px;padding:0}.swatch.on{border-color:var(--text)}.stats{grid-template-columns:repeat(2,1fr);gap:8px;margin:4px 0;display:grid}.stats div{background:var(--panel-2);border-radius:8px;flex-direction:column;padding:10px;display:flex}.stats strong{font-size:20px}.stats span{color:var(--muted);font-size:12px}button.danger{border:1px solid var(--line);width:100%;color:var(--error);background:0 0;border-radius:6px;margin-top:18px;padding:7px;font-weight:500}button.danger:hover{background:var(--error-bg);border-color:#0000}.inventory{background:var(--bg);height:100%;padding:16px 20px 40px;overflow:auto}.inventory h3{text-transform:uppercase;letter-spacing:.05em;margin:22px 0 8px;font-size:13px}.inv-bar{align-items:center;gap:12px;display:flex}.search{border:1px solid var(--line);background:var(--panel);border-radius:6px;width:320px;max-width:100%;padding:7px 10px}.search:focus{border-color:var(--accent);outline:none}.table-wrap{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13px}th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);background:var(--panel-2);white-space:nowrap;padding:8px 10px;font-size:12px;font-weight:600}td{border-bottom:1px solid var(--line);padding:4px 10px}tr:last-child td{border-bottom:0}tr.sel td{background:color-mix(in srgb, var(--accent) 8%, transparent)}.sort{font:inherit;color:inherit;background:0 0;border:0;padding:0}.sort.on{color:var(--text)}.sort.on:after{content:" ↓"}.cell{background:0 0;border:1px solid #0000;border-radius:4px;width:100%;min-width:90px;padding:4px 6px}.cell:hover{border-color:var(--line)}.cell:focus{border-color:var(--accent);background:var(--panel);outline:none}.name-cell{color:var(--accent);align-items:center;gap:4px;display:flex}.name-cell .cell{color:var(--text);min-width:130px;font-weight:500}.zone-chip{background:color-mix(in srgb, var(--zone) 15%, transparent);color:color-mix(in srgb, var(--zone) 65%, var(--text));border-radius:10px;padding:2px 8px;font-size:12px;font-weight:500}.medium{text-transform:capitalize;font-size:12px}.medium-fibre{color:var(--fibre)}.medium-wireless{color:var(--wireless)}.medium-vpn{color:var(--vpn)}.toast{z-index:100;background:var(--text);color:var(--bg);border-radius:8px;padding:9px 16px;font-size:13px;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0003}@media (width<=900px){.palette{width:170px}.inspector{width:260px}.saved,.brand span{display:none}.title-input{width:140px}}.crash{max-width:560px;margin:12vh auto;padding:0 16px}.crash h1{margin:0 0 8px;font-size:20px}.crash pre{background:var(--error-bg);color:var(--error);border-radius:var(--radius);white-space:pre-wrap;padding:10px 12px;font-size:12px}.crash-actions{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.zone.drop-target{border:2px solid var(--accent);background:color-mix(in srgb, var(--accent) 14%, transparent);box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 30%, transparent)}.zone{transition:background .12s,box-shadow .12s}.box-select .react-flow__node-zone{pointer-events:none!important}.box-select .react-flow__node-zone .zone-label,.box-select .react-flow__node-zone .react-flow__resize-control{pointer-events:auto}button.port{cursor:pointer;background:0 0}.port[data-media^=sfp],.port[data-media^=qsfp],.port[data-media=fibre]{border-color:var(--fibre)}.port[data-media=virtual]{border-style:dashed}.port.used[data-media^=sfp],.port.used[data-media^=qsfp],.port.used[data-media=fibre]{background:var(--fibre);border-color:var(--fibre)}.port.sel{outline:2px solid var(--accent);outline-offset:1px}.port-ip{color:var(--accent);margin-left:3px;font-weight:700}.port.used .port-ip{color:inherit}.port-actions{gap:14px;margin:-4px 0 10px;display:flex}.port-editor{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-2);margin-bottom:8px;padding:10px 10px 8px}.port-editor p{margin:0 0 6px}.danger-link{color:var(--error)}.routes{gap:4px;margin-bottom:6px;display:grid}.route{border:1px solid var(--line);background:var(--panel-2);border-radius:6px;grid-template-columns:1fr auto 1fr 18px;grid-template-areas:"dest via hop x""iface iface metric x""owner owner owner owner";align-items:center;gap:4px;padding:6px;display:grid}.r-dest{grid-area:dest}.r-via{grid-area:via;font-size:11px}.r-hop{grid-area:hop}.r-if{grid-area:iface}.r-metric{grid-area:metric}.route .icon-x{grid-area:x;align-self:start}.route input,.route select{border:1px solid var(--line);background:var(--panel);width:100%;min-width:0;color:var(--text);border-radius:5px;padding:4px 5px;font-size:11px}.route input:focus,.route select:focus{border-color:var(--accent);outline:none}.icon-x{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0;font-size:15px;line-height:1}.icon-x:hover{color:var(--error)}.badge-text.error{color:var(--error);-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.modal-backdrop{z-index:50;background:#0f172a73;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--panel);color:var(--text);border:1px solid var(--line-strong);border-radius:12px;width:min(620px,100%);max-height:calc(100vh - 32px);padding:18px 20px;overflow:auto;box-shadow:0 20px 50px #0000004d}.modal h2{margin:0 0 12px;font-size:16px}.port-picker .ends{grid-template-columns:1fr;gap:12px;margin-bottom:10px;display:grid}@media (width<=560px){.port-picker .ends{grid-template-columns:1fr}}.port-picker .end{border:1px solid var(--line);border-radius:var(--radius);min-width:0;margin:0;padding:8px 10px 4px}.port-picker legend{align-items:center;gap:6px;padding:0 4px;font-size:13px;font-weight:600;display:flex}.port-picker .end p{margin:0 0 6px}.port-list{flex-direction:column;gap:1px;max-height:220px;margin-bottom:8px;display:flex;overflow:auto}.port-opt{cursor:pointer;border-radius:5px;align-items:center;gap:6px;padding:3px 6px;font-size:12px;display:flex}.port-opt:hover{background:var(--panel-2)}.port-opt.in-use>.mono{color:var(--muted)}.port-opt.new{color:var(--accent);font-weight:500}.port-opt .push{margin-left:auto}.media-tag{border:1px solid var(--line);color:var(--muted);border-radius:8px;padding:0 5px;font-size:10px}.media-tag[data-media^=sfp],.media-tag[data-media^=qsfp],.media-tag[data-media=fibre]{border-color:var(--fibre);color:var(--fibre)}.modal-foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:6px;display:flex}.modal-actions{gap:8px;margin-left:auto;display:flex}.check{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:flex}.problem{color:var(--error);margin:0 0 6px}.check.toggle{margin:-2px 0 10px}.ip-row .ip-mode{flex:0 0 112px}.field-hint{color:var(--muted);flex-wrap:wrap;gap:4px 8px;margin:-6px 0 11px;font-size:11.5px;display:flex}.gateway-link{flex-wrap:wrap;align-items:center;gap:6px 10px;margin:-6px 0 11px;display:flex}.gateway-link select{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:5px;max-width:100%;padding:2px 4px;font-size:11.5px}.dhcp-size{margin:-6px 0 10px}.r-owner{grid-area:owner;justify-self:start;font-size:11px}.route .r-owner:empty{display:none}.route.auto{background:0 0;border-style:dashed}.route.auto .mono{padding:4px 0;font:11px ui-monospace,Consolas,monospace}.port-opt.none{color:var(--muted);border-bottom:1px solid var(--line);border-radius:5px 5px 0 0;margin-bottom:2px;font-style:italic}.link-end .move-end{color:var(--muted);margin-top:4px;padding:3px 5px;font-size:11.5px}.link-grab{pointer-events:all;cursor:grab;background:var(--panel);border:2.5px solid var(--accent);z-index:10;border-radius:50%;width:14px;height:14px;position:absolute;box-shadow:0 1px 3px #00000040}.link-grab:hover{transform-origin:50%;background:var(--accent)}.link-grab.dragging{cursor:grabbing;pointer-events:none;background:var(--accent)}.react-flow__edge-path.is-moving{stroke-dasharray:6 4}.device.link-target{outline:2.5px solid var(--accent);outline-offset:3px;box-shadow:0 0 0 7px color-mix(in srgb, var(--accent) 22%, transparent)}.device.has-fill{background:var(--dev-fill)}.device.has-border{border-color:var(--dev-border)}.device.thick{border-width:2px}.device.has-icon .device-icon{color:var(--dev-icon)}.device.has-text .device-name,.device.has-text .device-ip{color:var(--dev-text)}.device.has-text .device-ip{opacity:.8}.appearance{flex-direction:column;gap:8px;display:flex}.appearance .swatches{flex-wrap:wrap}.swatch.none{background:linear-gradient(135deg, var(--panel) 45%, var(--error) 45% 55%, var(--panel) 55%);border-color:var(--line-strong)}.swatch.none.on{border-color:var(--text)}.swatch.pick{cursor:pointer;background:conic-gradient(#ef4444,#f59e0b,#16a34a,#0ea5e9,#7c3aed,#ef4444);position:relative;overflow:hidden}.swatch.pick input{opacity:0;cursor:pointer;position:absolute;inset:0}.segmented{border:1px solid var(--line);border-radius:7px;align-self:flex-start;gap:2px;padding:2px;display:inline-flex}.segmented button{color:var(--muted);background:0 0;border:0;border-radius:5px;padding:3px 12px;font-size:12px}.segmented button.on{background:var(--panel-2);color:var(--text);box-shadow:var(--shadow)}.custom-colours summary{color:var(--muted);cursor:pointer;font-size:12px}.colour-parts{grid-template-columns:1fr 1fr;gap:6px;margin-top:6px;display:grid}.colour-part{align-items:center;gap:6px;font-size:12px;display:flex}.colour-part input[type=color]{border:1px solid var(--line);background:0 0;border-radius:5px;width:28px;height:22px;padding:0}.route-mode .device:not(.on-route){opacity:.28}.route-mode .react-flow__edge-path:not(.on-route){opacity:.12}.route-mode .port-label,.route-mode .link-label{opacity:.25}.route-mode .zone:not(.on-route){opacity:.45}.device.on-route{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 35%, transparent), var(--shadow)}.react-flow__edge-path.on-route{stroke-dasharray:10 6;animation:.8s linear infinite route-flow;stroke:var(--accent)!important;stroke-width:4px!important}.react-flow__edge-path.on-route.rev{animation-direction:reverse}@keyframes route-flow{to{stroke-dashoffset:-16px}}@media (prefers-reduced-motion:reduce){.react-flow__edge-path.on-route{animation:none}}.zone.on-route{border-style:solid;border-width:2px}.route-banner{z-index:6;background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px;max-width:calc(100% - 24px);padding:7px 10px 7px 12px;font-size:12px;display:flex;position:absolute;top:10px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0000002e}.route-title{color:var(--accent);text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:700}.route-hops{flex-wrap:wrap;align-items:center;gap:4px;margin:0;padding:0;list-style:none;display:flex}.route-hops li{align-items:center;gap:4px;display:flex}.route-hop{border:1px solid var(--line);background:var(--panel-2);color:var(--text);border-radius:6px;align-items:center;gap:4px;padding:2px 7px;font-size:12px;display:inline-flex}.route-hop:hover{border-color:var(--accent)}.route-arrow{color:var(--muted)}.route-note{color:var(--accent);background:var(--accent-soft);border-radius:8px;padding:0 6px;font-size:10.5px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .route-note{background:color-mix(in srgb, var(--accent) 20%, transparent)}}:root[data-theme=dark] .route-note{background:color-mix(in srgb, var(--accent) 20%, transparent)}.route-problem{color:var(--error);font-weight:600}.route-msg{color:var(--muted);flex-basis:100%;font-size:11.5px}.route-close{margin-left:2px;font-size:18px}.react-flow__edge-path.power-cable{stroke:#ca8a04;stroke-width:2.6px;stroke-dasharray:9 3 2 3}.react-flow__edge-path.power-cable.is-selected{stroke-width:4px}.react-flow__edge-path.power-cable.backup{stroke-dasharray:3 5;opacity:.8}.port-label.power{border-color:color-mix(in srgb, #ca8a04 50%, var(--line))}.device-member{color:var(--muted);margin-top:1px;font-size:10.5px}.device.has-text .device-member{color:var(--dev-text);opacity:.8}.device.virtual{background:color-mix(in srgb, var(--dev-fill,var(--panel)) 45%, transparent);box-shadow:none;border-style:dashed;border-width:1.5px}.device.virtual.is-selected{box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent)}.new-switch{width:min(460px,100%)}.port-rows{flex-direction:column;align-items:flex-start;gap:6px;margin-bottom:12px;display:flex}.port-row{align-items:center;gap:8px;display:flex}.port-row input[type=number]{width:64px}.port-row input,.port-row select,.new-switch .field input{border:1px solid var(--line);background:var(--panel);color:var(--text);font:inherit;border-radius:6px;padding:5px 7px}.new-switch .check.dual{align-self:flex-end;margin-bottom:14px}.port-row .port-role{flex:0 0 90px;width:90px}.new-switch .summary{margin:0 0 12px;line-height:1.45}.port-group{color:var(--muted);margin:0 0 3px;font-size:11px;font-weight:600}.add-ports .row{justify-content:flex-end;gap:8px}.add-ports .port-row{margin-bottom:8px}.add-ports .port-row input,.add-ports .port-row select{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:6px;padding:4px 6px}.add-ports .port-row input{width:60px}.port-editor.member{padding-top:6px}.member-head{align-items:center;gap:8px;margin-bottom:4px;display:flex}.member-head .icon-x{margin-left:auto}.power-input{flex-wrap:wrap;align-items:center;display:flex}.power-input>button:first-child{flex:1 1 0;min-width:0}.power-input>.icon-x{flex:none;width:auto;padding:4px 6px}.power-input>button:disabled{cursor:default;opacity:1}.power-input .input-meta{flex-direction:column;flex-basis:100%;gap:2px;padding:0 0 6px 8px;display:flex}.power-input .chain{margin-top:0}.outlet-count{align-self:flex-end;margin-bottom:18px}.links-pill{border:1px solid var(--line);background:var(--panel);color:var(--muted);box-shadow:var(--shadow);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:4px 6px 4px 9px;font-size:12px;display:inline-flex}.links-pill.on{color:var(--text)}.links-pill svg{color:var(--muted)}.links-pill.on svg{color:var(--accent)}.pill-count{color:var(--muted);font:11px ui-monospace,Consolas,monospace}.pill-state{background:var(--panel-2);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:600}.links-pill.on .pill-state{background:var(--accent);color:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .links-pill.on .pill-state{color:#042f2e}}:root[data-theme=dark] .links-pill.on .pill-state{color:#042f2e}.links-pill:hover{border-color:var(--line-strong)}.phase-tag{color:#fff;background:#64748b;border-radius:6px;margin-left:6px;padding:0 5px;font:600 10px ui-monospace,Consolas,monospace}.phase-tag.L1{background:#92400e}.phase-tag.L2{background:#1f2937;box-shadow:inset 0 0 0 1px #6b7280}.phase-tag.L3{background:#6b7280}.phase-tag.\33 P{background:var(--accent)}.phase-balance{gap:4px;margin:-4px 0 12px;display:grid}.phase-bar{grid-template-columns:34px 1fr auto;align-items:center;gap:6px;display:grid}.phase-bar .phase-tag{text-align:center;margin:0}.phase-bar .bar{background:var(--panel-2);border-radius:3px;height:6px;overflow:hidden}.phase-bar .bar span{background:#ca8a04;height:100%;display:block}.unit-input{align-items:center;gap:6px;display:flex}.unit-input input{flex:1;min-width:0}.unit-input .unit{color:var(--muted);font-size:12px}.load-summary{border:1px solid var(--line);background:var(--panel-2);border-radius:8px;margin:4px 0 12px;padding:8px 10px}.load-summary p{margin:4px 0 0}.load-line{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.load-bar{background:var(--panel);border-radius:3px;height:6px;margin-top:6px;display:block;overflow:hidden}.load-bar span{height:100%;display:block}.load-bar .ok{background:#16a34a}.load-bar .high{background:#d97706}.load-bar .over{background:#dc2626}.virtual-pill{border-radius:999px;margin:-4px 0 12px}.virtual-pill button{border-radius:999px}.filters{border-bottom:1px solid var(--line);margin-bottom:4px;padding-bottom:8px}.filters summary{cursor:pointer;justify-content:space-between;align-items:center;list-style:none;display:flex}.filters summary::-webkit-details-marker{display:none}.filters summary h3{margin:4px 0 6px}.filters summary h3:before{content:"▸";width:12px;transition:transform .15s;display:inline-block}.filters[open] summary h3:before{transform:rotate(90deg)}.link-btn{color:var(--accent);cursor:pointer;background:0 0;border:0;padding:0;font-size:12px}.link-btn:hover{text-decoration:underline}.filter-tree,.filter-tree ul{margin:0;padding:0;list-style:none}.filter-tree ul{margin-bottom:4px;padding-left:18px}.filter-row{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:2px 0;font-size:12.5px;display:flex}.filter-row.group{font-weight:600}.filter-row input{accent-color:var(--accent);margin:0}.filter-row svg{color:var(--muted);flex-shrink:0}.filter-row>span:not(.filter-count){text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.filter-row.none{color:var(--muted)}.filter-count{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}.pills{flex-wrap:wrap;gap:6px;display:flex}.focus-mode .react-flow__background{background:color-mix(in srgb, var(--text) 9%, transparent)}.focus-mode .react-flow__node.dimmed{opacity:.22;filter:grayscale(.7);transition:opacity .15s,filter .15s}.focus-mode .react-flow__node-zone.dimmed{opacity:.4}.focus-mode .react-flow__edge.dimmed{opacity:.1}.focus-mode .react-flow__edge.in-focus .react-flow__edge-path{stroke-width:3px}.focus-mode .react-flow__node-device.focus-picked .device{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent), 0 0 0 10px color-mix(in srgb, var(--accent) 22%, transparent), 0 8px 24px #00000059;transform:scale(1.06)}.focus-mode .react-flow__node-device.in-focus .device{border-color:color-mix(in srgb, var(--accent) 55%, var(--line))}.focus-mode .react-flow__node-device.focus-sibling .device{outline:2px dashed var(--accent);outline-offset:4px}.focus-mode .react-flow__node-device.focus-sibling .device:before{content:"Same cluster";background:var(--panel);color:var(--accent);border:1px solid var(--accent);white-space:nowrap;pointer-events:none;border-radius:999px;padding:0 6px;font-size:10px;font-weight:600;position:absolute;top:-28px;left:50%;transform:translate(-50%)}.menu-field{align-items:center;gap:8px;padding:6px 10px;font-size:13px;display:flex}.menu-field span{color:var(--muted);white-space:nowrap}.menu-field select{flex:1;min-width:0;max-width:220px}.edge-labels{display:contents}.edge-labels>*{z-index:var(--edge-z,auto)}.focus-mode .edge-labels.dimmed>*{opacity:.15}.focus-mode .react-flow__node-device.focus-sibling .device[data-kind=switch]:before{content:"Same stack"}.focus-mode .react-flow__node-device.focus-sibling .device[data-view=network]:before{content:"Same object"}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .focus-mode .react-flow__node-device.focus-picked .device:before{color:#042f2e}}:root[data-theme=dark] .focus-mode .react-flow__node-device.focus-picked .device:before{color:#042f2e}.device.virtual{outline:1.5px dashed color-mix(in srgb, var(--vpn) 70%, var(--line-strong));outline-offset:4px}.device.virtual:after{content:"virtual";background:var(--panel);border:1px solid color-mix(in srgb, var(--vpn) 70%, var(--line-strong));color:var(--vpn);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none;border-radius:999px;padding:0 6px;font-size:9px;font-weight:700;line-height:13px;position:absolute;top:-12px;left:50%;transform:translate(-50%)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .device.virtual:after{color:#c4b5fd}}:root[data-theme=dark] .device.virtual:after{color:#c4b5fd}.focus-mode .react-flow__node-device .device.virtual:before{top:-32px}.device.is-copy{border-style:dashed}.device.single-psu{outline-offset:3px;outline:2.5px solid #f59e0b}.device.single-psu:after{content:"1 PSU";color:#1c1917;pointer-events:none;background:#f59e0b;border-radius:999px;padding:0 6px;font-size:9px;font-weight:700;line-height:13px;position:absolute;top:-10px;right:8px}.copy-note{border:1px dashed var(--line-strong);border-radius:8px;margin:0 0 12px;padding:8px 10px}.copy-note p{margin:0 0 6px}.copy-note .row{align-items:flex-end}.copy-row{margin-top:4px}.device-host{color:var(--vpn);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:10.5px;overflow:hidden}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .device-host{color:#c4b5fd}}:root[data-theme=dark] .device-host{color:#c4b5fd}.device.has-text .device-host{color:var(--dev-text);opacity:.85}.react-flow__edge-path.host-edge{stroke:var(--vpn);stroke-width:1.5px;stroke-dasharray:2 5;stroke-linecap:round;opacity:.8}.react-flow__edge-path.host-edge.any-node{opacity:.45}.host-where ul,.guest-list{margin:4px 0 8px;padding:0;list-style:none}.host-where li,.guest-list li{align-items:center;gap:6px;padding:2px 0;font-size:12.5px;display:flex}.guest-list li .muted{margin-left:auto}.guest-list svg{color:var(--muted)}.react-flow__edge-path.backup-edge{stroke:#d97706;stroke-width:2px;stroke-dasharray:8 5;opacity:.85}.device-host.backup{color:#b45309}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .device-host.backup{color:#fbbf24}}:root[data-theme=dark] .device-host.backup{color:#fbbf24}.supplier{margin-bottom:6px}.filter-view{text-transform:none;letter-spacing:0;color:var(--accent);margin-left:4px;font-weight:500}.context-menu{z-index:50;background:var(--panel);border:1px solid var(--line-strong);border-radius:8px;min-width:190px;padding:4px;position:fixed;box-shadow:0 8px 24px #0000002e}.context-menu button{text-align:left;width:100%;color:var(--text);background:0 0;border:0;border-radius:5px;justify-content:space-between;align-items:center;gap:12px;padding:7px 10px;font-size:13px;display:flex}.context-menu button:hover:not(:disabled),.context-menu button:focus-visible{background:var(--panel-2);outline:none}.context-menu button:disabled{color:var(--muted);opacity:.6}.context-menu kbd{color:var(--muted);font-size:11px}.context-menu hr{border:0;border-top:1px solid var(--line);margin:4px 0}.context-menu .danger-item:not(:disabled){color:var(--error)}.place-dialog{width:min(520px,100vw - 32px)}.place-dialog .new-place{border-left:2px solid var(--accent);background:var(--panel-2);border-radius:0 6px 6px 0;margin:-4px 0 10px;padding:8px 10px 2px}.place-dialog .qty-field input{width:80px}.place-levels{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:0 8px;display:grid}.place-levels select{width:100%;min-width:0}.place-inputs{gap:6px;margin-bottom:8px;display:grid}.place-input{grid-template-columns:56px auto minmax(0,1fr);align-items:center;gap:8px;display:grid}.place-input>select{min-width:0}.plug-picker{align-items:center;gap:4px;min-width:0;display:inline-flex}.plug-picker select{max-width:150px;font-size:12px}.plug-icon{color:var(--text);background:var(--panel-2);border-radius:4px;flex:none;padding:1px}.backup-tag{border:1px dashed var(--muted);color:var(--muted);border-radius:6px;margin-left:6px;padding:0 5px;font-size:10px}.power-choice{width:min(460px,100vw - 32px)}.place-dialog .modal-foot .check{align-items:center;gap:6px;display:flex}.breaker-board{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;gap:6px;margin:4px 0 10px;padding:8px;display:grid}.breaker-board.two{grid-template-columns:1fr 1fr}.breaker-col{align-content:start;gap:6px;min-width:0;display:grid}.breaker{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--line-strong);border-radius:6px;gap:4px;min-width:0;padding:6px;display:grid}.breaker.used{border-left-color:#ca8a04}.breaker.off{opacity:.6;border-left-color:var(--error)}.breaker-head{align-items:center;gap:5px;min-width:0;display:flex}.breaker-head .mono{min-width:16px;font-weight:600}.breaker-head .phase-tag{margin-left:0}.breaker-head select{flex:1;min-width:0;padding:2px;font-size:11px}.breaker-label,.breaker-feeds{width:100%;min-width:0;font-size:12px}.breaker-toggle{border:1px solid var(--line-strong);background:var(--panel-2);cursor:pointer;border-radius:3px;flex:none;width:14px;height:22px;padding:0;position:relative}.breaker-toggle span{background:var(--ok);border-radius:2px;height:9px;transition:top .1s;position:absolute;top:1px;left:1px;right:1px}.breaker-toggle[aria-checked=false] span{background:var(--error);top:10px}.breaker-to{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.breaker-specs{grid-template-columns:1fr 1fr;gap:4px;display:grid}.breaker-specs select{min-width:0;padding:2px;font-size:11px}.zone-label.handle-only{opacity:0}.zone-title-overlay{pointer-events:none;width:100%;position:relative}.zone-title-overlay .zone-label{pointer-events:auto;cursor:move;box-shadow:0 1px 0 color-mix(in srgb, var(--zone) 30%, transparent)}.react-flow__node-zoneTitle{pointer-events:none!important}.focus-mode .react-flow__node-zoneTitle.dimmed{opacity:.4}.device-editor{flex-direction:column;width:min(1000px,100vw - 32px);max-height:calc(100vh - 48px);padding:0;display:flex}.device-editor-head{border-bottom:1px solid var(--line);color:var(--accent);align-items:center;gap:12px;padding:14px 18px;display:flex}.device-editor-head>div:nth-child(2){min-width:0;color:var(--text);flex:1}.device-editor-head h2{margin:0;font-size:16px}.device-editor-head p{margin:2px 0 0}.device-editor-body{padding:12px 18px 18px;overflow:auto}.device-editor-power{max-width:520px}.ports-table-wrap{overflow-x:auto}.ports-table{border-collapse:collapse;width:100%;font-size:13px}.ports-table th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);background:var(--panel);padding:6px;font-size:11.5px;font-weight:600;position:sticky;top:-12px}.ports-table td{border-bottom:1px solid color-mix(in srgb, var(--line) 60%, transparent);vertical-align:middle;padding:3px 6px}.ports-table tr.group td{color:var(--accent);border-bottom:1px solid var(--line);padding-top:12px;font-weight:600}.ports-table tr.used td:first-child{box-shadow:inset 3px 0 0 var(--accent)}.ports-table input,.ports-table select{width:100%;min-width:0;padding:3px 5px;font-size:12.5px}.ports-table td:first-child{width:110px}.ports-table td:last-child{text-align:center;width:24px}.new-port{gap:0;margin-top:6px;display:grid}.new-subnet{width:min(520px,100vw - 32px)}.modal.port-picker{width:min(760px,100vw - 32px);max-height:calc(100vh - 48px);overflow:auto}.faceplate-wrap{flex-direction:column;gap:8px;display:flex}.fp-member{flex-direction:column;gap:3px;min-width:0;display:flex}.fp-member-label{color:var(--accent);font-size:11.5px;font-weight:700}.fp-member-panel{background:var(--panel-2);border:1px solid var(--line-strong);border-radius:8px;flex-wrap:wrap;gap:6px 14px;min-width:0;padding:8px 10px;display:flex}.faceplate-block{flex-direction:column;gap:4px;display:flex}.fp-label{color:var(--muted);font-size:10.5px;font-weight:600}.faceplate{grid-template-rows:repeat(2,auto);grid-auto-flow:column;gap:4px;display:grid}.fp-port{cursor:pointer;border:1.5px solid var(--line-strong);background:var(--panel);width:27px;height:26px;color:var(--text);border-radius:4px;padding:0;font:600 11px ui-monospace,Consolas,monospace}.warn-note{color:var(--warn);margin:0 0 6px}.fp-port{position:relative}.fp-port:not(.cage){width:auto;min-width:27px;padding:0 3px}.fp-port.new{border-style:dashed}.fp-badge{color:#fff;text-align:center;pointer-events:none;z-index:1;background:#16a34a;border-radius:999px;min-width:15px;height:15px;padding:0 3px;font:700 9.5px/15px system-ui,sans-serif;position:absolute;top:-7px;right:-7px}.fp-port.in-use .fp-badge{background:#d97706}.fp-badge.inline{display:inline-block;position:static}.port-picker .end.active{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 30%, transparent)}.port-picker .end-role{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500}.port-picker .end.active .end-role{color:var(--accent)}.pp-prompt{background:color-mix(in srgb, var(--accent) 12%, var(--panel));border:1px solid color-mix(in srgb, var(--accent) 40%, transparent);border-radius:6px;margin:0 0 10px;padding:7px 10px;font-size:13px;font-weight:600}.pp-prompt.ready{background:color-mix(in srgb, #22c55e 14%, var(--panel));border-color:#16a34a73}.picked-ports{flex-direction:column;gap:4px;margin:0 0 6px;display:flex}.picked-row{flex-wrap:wrap;align-items:center;gap:6px;font-size:12.5px;display:flex}.picked-row select{width:auto;padding:2px 4px;font-size:12px}.new-port .row{align-items:flex-end}.new-port .field.qty{flex:0 0 72px}.fp-port.cage{border-style:double;border-width:3px;border-radius:2px;width:34px}.fp-port:hover{border-color:var(--accent)}.fp-port.in-use{background:repeating-linear-gradient(135deg, var(--panel-2) 0 4px, color-mix(in srgb, var(--muted) 25%, transparent) 4px 6px);color:var(--muted)}.fp-port.picked{background:color-mix(in srgb, #22c55e 30%, var(--panel));color:var(--text);border-color:#16a34a;box-shadow:0 0 0 2px #22c55e59}.fp-port.in-use.picked{background:color-mix(in srgb, #f59e0b 30%, var(--panel));border-color:#d97706}.fp-extra{flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 6px;display:flex}.fp-extra .push{margin-left:auto}.chip{border:1px solid var(--line-strong);background:var(--panel);cursor:pointer;color:var(--text);border-radius:999px;padding:3px 10px;font-size:12px}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.device.has-issue{border-color:color-mix(in srgb, var(--warn) 70%, var(--line-strong))}.device.has-issue.error{border-color:color-mix(in srgb, var(--error) 75%, var(--line-strong))}.port.has-issue,.fp-port.has-issue{box-shadow:0 0 0 2px var(--warn)}.port.has-issue.error{box-shadow:0 0 0 2px var(--error)}.power-input.has-issue,.conn-list li.has-issue,.route.has-issue{box-shadow:inset 3px 0 0 var(--warn);background:color-mix(in srgb, var(--warn) 8%, transparent);border-radius:6px}.power-input.has-issue.error,.route.has-issue.error{box-shadow:inset 3px 0 0 var(--error);background:color-mix(in srgb, var(--error) 8%, transparent)}.field.has-issue input,.field.has-issue select{border-color:var(--warn);box-shadow:0 0 0 2px color-mix(in srgb, var(--warn) 25%, transparent)}.field.has-issue.error input,.field.has-issue.error select{border-color:var(--error);box-shadow:0 0 0 2px color-mix(in srgb, var(--error) 25%, transparent)}.ports-table tr.has-issue td{background:color-mix(in srgb, var(--warn) 10%, transparent)}.ports-table tr.has-issue.error td{background:color-mix(in srgb, var(--error) 10%, transparent)}.react-flow__edge.has-issue .react-flow__edge-path{stroke-width:4px;opacity:1;stroke:var(--warn)!important}.issues.clickable li>button{all:unset;cursor:pointer;display:block}.issues.clickable li>button:hover{text-decoration:underline}@keyframes issue-flash{0%,to{outline-color:#0000}20%,60%{outline-color:var(--warn)}}.issue-flash{outline-offset:2px;border-radius:6px;outline:3px solid #0000;animation:.6s ease-in-out 3 issue-flash}.device-editor-details{max-width:620px;margin:0 auto}.device-editor-details>.panel-head{display:none}.picked-port{margin-top:2px}.connected-cell{align-items:center;gap:6px;display:flex}.move-port.compact select{width:auto;padding:1px 4px;font-size:11.5px}.simple-link{width:min(440px,100vw - 32px)}.diagram-top{z-index:5;pointer-events:none;flex-wrap:wrap;align-items:center;gap:8px;display:flex;position:absolute;top:10px;left:12px;right:12px}.diagram-top>*{pointer-events:auto}.draw-mode{background:var(--panel);border:1px solid var(--line);border-radius:10px;align-items:center;gap:8px;padding:4px 4px 4px 10px;display:flex;box-shadow:0 4px 14px #0000001f}.draw-mode-label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;font-size:11px;font-weight:600}.react-flow__edge-path.trunk-edge{stroke:var(--accent);stroke-width:2px;stroke-dasharray:10 4 2 4;opacity:.85}.trunk-list{gap:3px;margin:2px 0 4px;display:grid}.trunk-list .check{align-items:center;gap:6px;font-size:12.5px;display:flex}.trunk-list .swatch{border-radius:3px;flex:none;width:10px;height:10px}.filters:not([open]) .filter-tree{display:none}.vlan-section{gap:6px;margin:4px 0 12px;display:grid}.vlan-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.vlan-head>span{color:var(--muted);font-size:12px;font-weight:600}.vlan-section select{width:100%}.vlan-section p{margin:0}.vlan-chips{flex-wrap:wrap;gap:5px;display:flex}.vlan-chip{cursor:pointer;border:1px solid var(--line-strong);background:var(--panel);color:var(--muted);border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.vlan-chip .swatch{background:var(--zone);border-radius:50%;flex:none;width:9px;height:9px}.vlan-chip.on{color:var(--text);border-color:var(--zone);background:color-mix(in srgb, var(--zone) 18%, var(--panel))}.zone-anchor.react-flow__handle{opacity:0;pointer-events:none;border:0;width:1px;min-width:0;height:1px;min-height:0}.collapsible{border-top:1px solid var(--line);margin-top:10px}.collapsible>summary{cursor:pointer;align-items:center;gap:6px;list-style:none;display:flex}.collapsible>summary::-webkit-details-marker{display:none}.collapsible>summary:before{content:"▸";color:var(--muted);font-size:11px;transition:transform .12s}.collapsible[open]>summary:before{transform:rotate(90deg)}.collapsible>summary h3.section{border:0;margin:8px 0;padding:0}.collapsible-body{padding-bottom:6px}.mgmt-vlan{align-items:end}.mgmt-vlan .check.inherit{align-items:center;gap:6px;padding-bottom:14px;font-size:12.5px;display:flex}.mgmt-vlan .check.inherit.disabled{opacity:.5}.mgmt-vlan input:disabled{opacity:.6}.zone.empty{background:0 0;border-color:#0000}.zone-label.empty{border:1.5px dashed var(--zone);box-sizing:border-box;white-space:nowrap;border-radius:10px;flex-wrap:nowrap;align-items:center;height:30px;padding-top:0;padding-bottom:0}.zone-title-overlay .zone-label.empty{width:100%}.zone.empty.drop-target{border-color:var(--zone);background:color-mix(in srgb, var(--zone) 10%, transparent);border-radius:10px}.align-sides{flex-wrap:wrap;margin-bottom:4px}.guide-lines .guide line{stroke:#f43f5e;stroke-width:1.25px;vector-effect:non-scaling-stroke}.guide-lines .guide.top line,.guide-lines .guide.bottom line{stroke:#8b5cf6;stroke-dasharray:5 4}.guide-lines .guide text{fill:#f43f5e;font:600 10px system-ui,sans-serif}.guide-lines .guide.top text,.guide-lines .guide.bottom text{fill:#8b5cf6}.panel-tabs{border-bottom:1px solid var(--line);gap:2px;margin:-4px 0 14px;display:flex}.panel-tabs button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;flex:1;margin-bottom:-1px;padding:7px 4px 6px;font-size:12.5px;font-weight:500}.panel-tabs button:hover{color:var(--text)}.panel-tabs button.on{color:var(--text);border-bottom-color:var(--accent)}.route-picks{grid-template-columns:repeat(4,1fr);gap:4px;margin-bottom:6px;display:grid}.route-picks button{border:1px solid var(--line);background:var(--panel);color:var(--muted);border-radius:6px;place-items:center;min-height:32px;padding:4px 0;display:grid}.route-picks button:hover{color:var(--text);border-color:color-mix(in srgb, var(--accent) 50%, var(--line))}.route-picks button.on{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, var(--panel))}.route-picks .route-box{fill:none;stroke:currentColor;stroke-width:1.2px;opacity:.7}.route-default{font-size:11.5px;font-weight:600}.swatches.wrap{flex-wrap:wrap}.swatch-default{background:conic-gradient(var(--copper) 0 25%, var(--fibre) 0 50%, var(--wireless) 0 75%, var(--vpn) 0)}.swatch-custom{cursor:pointer;background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);display:inline-block;position:relative;overflow:hidden}.swatch-custom input{opacity:0;cursor:pointer;border:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.icon-row{flex-wrap:wrap;gap:4px;margin-bottom:8px;display:flex}.icon-btn{border:1px solid var(--line);background:var(--panel);width:34px;height:32px;color:var(--muted);border-radius:6px;place-items:center;padding:0;display:grid}.icon-btn:hover{color:var(--accent);border-color:var(--accent)}.line-end{stroke-linejoin:round;stroke-linecap:round;pointer-events:none}.react-flow__edge.has-issue .line-end{stroke:var(--warn)!important}.react-flow__edge.has-issue .line-end.filled{fill:var(--warn)!important}.route-mode .line-end{opacity:.12}.line-point{pointer-events:all;cursor:move;background:var(--accent);border:2px solid var(--panel);width:12px;height:12px;box-shadow:0 0 0 1.5px var(--accent), 0 1px 3px #0000004d;z-index:11;border-radius:3px;position:absolute}.line-point:hover,.line-point.dragging{transform-origin:50%;box-shadow:0 0 0 3px var(--accent), 0 1px 3px #0000004d}.divide-row{align-items:flex-end}.divide-row .field input{width:80px}.divide-row>button{margin-bottom:11px}.edge-labels.on-top>*{z-index:1500}.edge-labels.lifted>*{z-index:1100}.link-grab,.line-point{z-index:2000}.group-box{border:2px dashed var(--group);background:color-mix(in srgb, var(--group) 4%, transparent);border-radius:18px;width:100%;height:100%;position:relative}.group-box.is-selected{box-shadow:0 0 0 3px color-mix(in srgb, var(--group) 25%, transparent);border-style:solid}.group-label{background:color-mix(in srgb, var(--group) 22%, var(--panel));height:28px;color:var(--text);pointer-events:all;cursor:move;white-space:nowrap;border-radius:0 0 10px 10px;align-items:center;gap:8px;padding:0 6px 0 12px;font:600 12.5px system-ui,sans-serif;display:inline-flex;position:absolute;top:0;left:14px}.group-label strong{color:var(--group);text-transform:uppercase;letter-spacing:.04em}.group-label .muted{font-size:11.5px;font-weight:500}.group-hide{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:5px;place-items:center;padding:3px;display:grid}.group-hide:hover{color:var(--text);background:color-mix(in srgb, var(--group) 25%, transparent)}.group-list{margin:0 0 6px;padding:0;list-style:none}.group-row{border-radius:6px;align-items:center;gap:6px;padding:3px 4px;font-size:12.5px;display:flex}.group-row:hover{background:var(--panel-2)}.group-row .dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.group-row .name{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;color:var(--text);cursor:pointer;font:inherit;background:0 0;border:0;flex:1;padding:0;overflow:hidden}.group-row.off .name{color:var(--muted);text-decoration:line-through}.group-row .eye,.group-row .only,.group-row .box{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:2px 4px;font-size:11px}.group-row .box.box-off{opacity:.7;text-decoration:line-through}.group-row .box:disabled{opacity:.35;cursor:default}.group-row .box.filter-tag{cursor:default;font-style:italic}.groups-new{gap:8px;display:flex}.export-each{margin-bottom:6px}.group-row .eye:hover,.group-row .only:hover,.group-row .box:hover:not(:disabled){color:var(--accent);background:var(--panel)}.group-actions{gap:10px;padding:0 4px 8px;display:flex}.groups-section{border-bottom:1px solid var(--line);margin-bottom:6px;padding-bottom:6px}.groups-head{justify-content:space-between;align-items:center;display:flex}.groups-head h3{margin:4px 0 6px}.group-row.on{background:color-mix(in srgb, var(--accent) 12%, transparent)}.context-menu .menu-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:4px 12px 2px;font-size:11px}.context-menu .menu-indent{justify-content:flex-start;gap:4px;padding-left:20px}.context-menu .current-group{font-weight:600}.context-menu .menu-note{color:var(--accent);margin-left:auto;padding-left:12px;font-size:11px;font-weight:500}.context-menu .menu-dot{vertical-align:middle;border-radius:50%;width:9px;height:9px;margin-right:4px;display:inline-block}.react-flow__controls-button.box-select-on{background:var(--accent);color:#fff}.react-flow__controls-button.box-select-on svg{fill:none;stroke:#fff}.react-flow__controls-button svg[viewBox="0 0 24 24"]{fill:none}.row.wrap{flex-wrap:wrap}.context-menu.flyout{z-index:51;max-height:calc(100vh - 16px);overflow-y:auto}.context-menu button.menu-open{background:var(--panel-2)}.context-menu .menu-kind span{align-items:center;gap:8px;display:inline-flex}.context-menu .menu-kind svg{color:var(--muted);flex:none}.react-flow__node.ghost{opacity:.3;pointer-events:none;filter:grayscale(.6)}.react-flow__node.ghost .device,.react-flow__node.ghost .zone{outline:1px dashed var(--muted);outline-offset:2px}.centre-tag{background:var(--accent);color:var(--panel);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none;border-radius:999px;padding:0 6px;font-size:9px;font-weight:700;line-height:14px;position:absolute;bottom:-9px;left:50%;transform:translate(-50%)}.react-flow__edge-path.mgmt-edge{stroke:var(--accent);stroke-width:1.5px;stroke-dasharray:2 5;stroke-linecap:round;opacity:.8}.lines-control{cursor:default;gap:4px}.lines-control button.pill-state{cursor:pointer;color:var(--muted);background:0 0;border:0}.lines-control button.pill-state:hover{background:var(--panel-2);color:var(--text)}.links-pill.lines-control .pill-state.picked{background:var(--accent);color:#fff}.links-pill.lines-control:not(.on) .pill-state.picked{background:var(--panel-2);color:var(--text)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .links-pill.lines-control .pill-state.picked{color:#042f2e}:root:not([data-theme=light]) .links-pill.lines-control:not(.on) .pill-state.picked{color:var(--text)}}:root[data-theme=dark] .links-pill.lines-control .pill-state.picked{color:#042f2e}:root[data-theme=dark] .links-pill.lines-control:not(.on) .pill-state.picked{color:var(--text)}.links-pill.lines-control .pill-state:not(.picked){color:var(--muted);background:0 0}.links-pill.lines-control .pill-state:not(.picked):hover{background:var(--panel-2);color:var(--text)}.react-flow__edge-path.gw-edge{stroke:var(--accent);stroke-width:1.5px;stroke-dasharray:2 5;stroke-linecap:round;opacity:.9}.gw-label{pointer-events:all;cursor:grab}.gw-label.dragging{cursor:grabbing}.zone-title-overlay .zone-label:active{cursor:move}.port-label.line-text,.link-label.line-text{pointer-events:auto;cursor:grab}.line-text.dragging{cursor:grabbing;border-color:var(--accent);z-index:1600}.route-mode .line-text{pointer-events:none}.label-row{grid-template-columns:1fr auto;align-items:center;gap:6px 8px;margin-bottom:10px;display:grid}.label-row .label-name{font-size:12px;font-weight:600}.react-flow .react-flow__node,.react-flow .react-flow__node.draggable,.react-flow .react-flow__node.selectable{cursor:default}.react-flow .react-flow__node.dragging,.react-flow .react-flow__node.dragging *{cursor:move}.ip-dhcp{border:1px dashed var(--line);color:var(--muted);border-radius:6px;padding:6px 9px;font:12.5px ui-monospace,Consolas,monospace}.device-ip.dhcp{font-style:italic}.palette-add-head{justify-content:space-between;align-items:baseline;display:flex}.palette-add-head .link-btn.on{font-weight:600}.palette-head{cursor:pointer;text-transform:uppercase;letter-spacing:.06em;width:100%;color:var(--muted);text-align:left;background:0 0;border:0;align-items:center;gap:5px;margin:14px 0 6px;padding:0;font-size:11px;font-weight:600;display:flex}.palette-head:hover{color:var(--text)}.palette-head .chev{width:10px;font-size:10px}.tile{position:relative}.tile.tucked{opacity:.45;border-style:dashed}.tile-eye{color:var(--accent);font-size:9px;position:absolute;top:3px;right:6px}.tile.tucked .tile-eye{color:var(--muted)}.palette-other{border:1px dashed var(--line-strong);background:var(--panel);width:100%;color:var(--text);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;margin-top:12px;padding:7px 10px;font-size:12.5px;display:flex}.palette-other:hover,.palette-other[aria-expanded=true]{border-color:var(--accent);background:var(--panel-2)}.palette-flyout{z-index:3000;border:1px solid var(--line-strong);background:var(--panel);width:216px;box-shadow:var(--shadow);border-radius:10px;padding:8px;position:fixed}.agg-ring{pointer-events:all;cursor:grab;box-sizing:border-box;border:1.6px solid;border-radius:50%;position:absolute}.agg-ring:hover,.agg-ring.dragging{border-width:2.4px}.agg-ring.dragging{cursor:grabbing}.focus-mode .edge-labels.dimmed>.agg-ring{opacity:.15}.agg-members{margin:4px 0 8px;padding:0;font-size:12px;list-style:none}.agg-members li{justify-content:space-between;padding:2px 0;font-family:ui-monospace,Consolas,monospace;display:flex}.agg-label-parts{grid-template-columns:1fr 1fr;gap:4px 10px;display:grid}.agg-label-parts .check{color:var(--text);justify-content:flex-start;font-size:12.5px}.field .agg-label-parts input[type=checkbox]{width:auto;box-shadow:none;flex:none;margin:0;padding:0}.switches{flex-direction:column;gap:6px;margin:2px 0 6px;display:flex}.switch-row{color:var(--muted);justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;display:flex}.switch-row.on .switch-name{color:var(--text)}.switch-options{border:1px solid var(--line);border-radius:999px;flex:none;gap:2px;padding:2px;display:inline-flex}.switch-options button.pill-state{cursor:pointer;color:var(--muted);background:0 0;border:0;padding:2px 9px}.switch-options button.pill-state:hover{background:var(--panel-2);color:var(--text)}.switch-row.on .pill-state.picked{background:var(--accent);color:#fff}.switch-row:not(.on) .pill-state.picked{background:var(--panel-2);color:var(--text)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .switch-row.on .pill-state.picked{color:#042f2e}}:root[data-theme=dark] .switch-row.on .pill-state.picked{color:#042f2e}.add-devices-btn{margin:0 0 6px}.device-order li[draggable=true]{cursor:grab}.device-order li.dragging{opacity:.45}.device-order li.drop-before{box-shadow:inset 0 2px 0 var(--accent)}.device-order li.drop-after{box-shadow:inset 0 -2px 0 var(--accent)}.device-order .grip{color:var(--muted);letter-spacing:-2px;width:10px;font-size:10px}.modal.add-devices{width:min(520px,100vw - 32px)}.add-devices-list{gap:10px;max-height:min(60vh,520px);margin-bottom:10px;display:grid;overflow:auto}.add-devices-list section{gap:1px;display:grid}.add-devices-head,.add-devices-row{cursor:pointer;border-radius:6px;align-items:center;gap:7px;padding:4px 6px;font-size:12.5px;display:flex}.add-devices-head{border-bottom:1px solid var(--line);border-radius:0;margin-bottom:2px}.add-devices-row{padding-left:22px}.add-devices-row:hover{background:var(--panel-2)}.add-devices-row .push{text-align:right;margin-left:auto}.rack-ear{box-sizing:border-box;pointer-events:none;border:1.5px solid color-mix(in srgb, var(--text) 45%, transparent);width:22px;color:color-mix(in srgb, var(--text) 80%, transparent);flex-direction:column;justify-content:center;align-items:center;padding:3px 0;font:600 10px ui-monospace,Consolas,monospace;display:flex;position:absolute}.rack-ear.tall{justify-content:space-between}.rack-ear.left{border-right:0;border-radius:4px 0 0 4px}.rack-ear.right{border-left:0;border-radius:0 4px 4px 0}.palette .palette-asks{gap:2px;margin:6px 0 2px;display:grid}.palette .palette-ask{margin:0}.theme-btn{align-items:center;padding:5px 8px;display:inline-flex}.agg-ring.fixed{cursor:default}.swap-backdrop{z-index:49;position:fixed;inset:0}.modal.export-dialog{width:min(640px,100vw - 32px)}.export-cols{grid-template-columns:1fr 1fr;gap:8px 24px;display:grid}@media (width<=560px){.export-cols{grid-template-columns:1fr}}.export-dialog h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:4px 0 6px;font-size:11px;font-weight:600}.export-dialog section>h3~h3{margin-top:14px}.export-dialog .check{color:var(--text);padding:2px 0;font-size:13px}.export-group{margin-bottom:8px}.export-sub{margin:6px 0 2px;font-size:12px;font-weight:600}.export-dialog .segmented{margin-bottom:6px}.edit-row{color:var(--muted);vertical-align:middle;background:0 0;border:0;border-radius:5px;place-items:center;margin-right:2px;padding:2px 4px;display:inline-grid}.edit-row:hover{color:var(--accent);background:var(--panel-2)}.export-output{margin:-4px 0 12px}.export-page{margin-top:8px}.export-linktext{margin-bottom:6px}.visual-text{width:100%;height:100%;color:var(--text);border:1px dashed #0000;border-radius:6px;padding:6px 8px;line-height:1.35;overflow:hidden}.visual-text:hover{border-color:var(--line-strong)}.visual-text.selected{border-color:var(--accent)}.visual-text-body{white-space:pre-wrap;word-break:break-word}.visual-text textarea{resize:none;width:100%;height:100%;color:inherit;font:inherit;background:0 0;border:0;outline:none;padding:0;line-height:1.35}.react-flow__node-visual.visual-box-node{pointer-events:none!important}.visual-box{border:2px dashed var(--box);background:color-mix(in srgb, var(--box) 7%, transparent);border-radius:16px;width:100%;height:100%;position:relative}.visual-box.selected{background:color-mix(in srgb, var(--box) 11%, transparent);border-style:solid}.visual-box .box-badge,.visual-box .react-flow__resize-control{pointer-events:auto}.box-badge{background:var(--panel);border:1.5px solid var(--box);color:var(--box);cursor:move;white-space:nowrap;border-radius:999px;align-items:center;gap:5px;max-width:calc(100% - 28px);padding:3px 9px 3px 7px;font-weight:600;display:inline-flex;position:absolute;top:-13px;left:14px}.box-badge span{text-overflow:ellipsis;color:var(--text);overflow:hidden}.visual-icon{cursor:move;border-radius:8px;outline:1px dashed #0000;flex-direction:column;align-items:center;width:100%;height:100%;display:flex}.visual-icon:hover{outline-color:var(--line-strong)}.visual-icon.selected{outline-color:var(--accent)}.visual-icon-shape{flex:1;place-items:center;width:100%;min-height:0;display:grid}.visual-icon-shape svg{max-width:100%;max-height:100%;display:block}.visual-icon-label{color:var(--text);text-align:center;white-space:nowrap;padding-top:2px;line-height:1.2}.icon-picks{flex-wrap:wrap;gap:6px;display:flex}.icon-pick{border:1px solid var(--line);background:var(--panel);width:38px;height:34px;color:var(--text);border-radius:7px;place-items:center;display:grid}.icon-pick:hover{border-color:var(--line-strong)}.icon-pick.on{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 30%, transparent)}.also-groups{margin-top:6px}.also-groups small{margin-bottom:4px;display:block}.route-picker .route-from{gap:2px;margin-bottom:6px;display:grid}.route-to{align-items:center;gap:8px;display:flex}.route-to-btn{border:1px solid var(--line);background:var(--panel);color:var(--muted);text-align:left;border-radius:6px;flex:1;justify-content:space-between;align-items:center;gap:8px;padding:6px 9px;font-size:13px;display:flex}.route-to-btn.set{color:var(--text);border-color:var(--accent)}.route-tree{border:1px solid var(--line);background:var(--panel);border-radius:8px;max-height:340px;margin-top:6px;padding:6px;overflow:auto}.route-search{width:100%;margin-bottom:6px}.route-branch,.route-leaf{text-align:left;width:100%;color:var(--text);background:0 0;border:0;border-radius:5px;align-items:center;gap:6px;padding:4px 6px;font-size:12.5px;display:flex}.route-branch{font-weight:600}.route-leaf{padding-left:22px}.route-leaf.route-ip{padding-left:38px}.route-leaf .push{margin-left:auto}.route-branch:hover,.route-leaf:hover{background:var(--panel-2)}.canvas.route-picking .react-flow__node,.canvas.route-picking .react-flow__pane{cursor:crosshair!important}.react-flow__edge-path.on-route.route-lane{stroke-width:3px!important}.route-arrow{fill:var(--accent);stroke:var(--panel);stroke-width:1.2px;pointer-events:none}.react-flow__edge-path.service-edge{stroke:#8b5cf6;stroke-width:1.6px;stroke-dasharray:1 4;stroke-linecap:round;opacity:.9}.react-flow__edge-path.copy-edge{stroke:var(--muted);stroke-width:1.6px;stroke-dasharray:6 4 1 4;stroke-linecap:round;opacity:.8}.react-flow__edge-path.wlc-edge{stroke:#0284c7}.service-search{width:100%;margin-bottom:4px}.service-hosts{border:1px solid var(--line);border-radius:6px;max-height:220px;padding:4px;overflow:auto}.service-host{color:var(--text);gap:6px;padding:3px 4px;font-size:12.5px}.field .service-host input[type=checkbox]{width:auto;box-shadow:none;flex:none;margin:0;padding:0}.service-host svg{flex:none}.service-host>span:not(.push){text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.service-host .push{flex:none;margin-left:auto}.device[data-kind=service]{border-style:dashed;border-color:#8b5cf6}.device[data-kind=service] .device-icon{color:#8b5cf6}.group-swatch{border-radius:3px;flex:none;width:10px;height:10px}.export-group-row{justify-content:space-between;align-items:center;gap:8px;display:flex}.export-group-row .own-files{color:var(--muted);white-space:nowrap;font-size:12px}.modal.new-doc{width:min(460px,100vw - 32px)}.new-doc .field{margin-bottom:12px}.view-checks{gap:6px;margin:6px 0 10px;display:grid}.view-check{color:var(--text);border:1px solid var(--line);border-radius:8px;align-items:flex-start;padding:6px 8px;font-size:13px}.view-check input{margin-top:2px}.view-check>span{gap:1px;display:grid}.views-menu{align-items:center;display:flex}.tabs .tab-add{color:var(--muted);padding:5px 9px;font-weight:600}.tabs .tab-add:hover{color:var(--text)}.views-pop{width:290px;padding:8px 10px;left:0;right:auto}.views-pop .view-check{padding:5px 7px}.views-pop .view-check:hover{background:0 0}.modal.about{width:min(520px,100vw - 32px);font-size:13px;line-height:1.5}.about-head{align-items:center;gap:12px;margin-bottom:10px;display:flex}.about-head h2{margin:0}.about-list{margin:4px 0 12px;padding-left:18px}.about-list li{margin:3px 0}.outlet-phases{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:4px 8px;margin:4px 0 8px;display:grid}.outlet-phases label{justify-content:space-between;align-items:center;gap:6px;font-size:12px;display:flex}.outlet-phases select{padding:1px 4px;font-size:12px}.outlet-phases label>span{color:var(--muted)}.outlet-phases .used{color:var(--text);font-weight:600}.sheet-grid{pointer-events:none;position:absolute;top:0;left:0}.sheet{border:3px dashed var(--accent);background:color-mix(in srgb, var(--accent) 4%, transparent);box-sizing:border-box;border-radius:2px;position:absolute;top:0;left:0}.sheet.empty{border-color:color-mix(in srgb, var(--muted) 35%, transparent);background:0 0}.sheet-no{color:color-mix(in srgb, var(--accent) 55%, transparent);font:700 64px/1 system-ui,sans-serif;position:absolute;bottom:8px;right:12px}.pages-bar{background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px;padding:4px 6px 4px 10px;font-size:12px;display:flex;box-shadow:0 4px 14px #0000001f}.pages-bar select{width:auto;max-width:92px;padding:3px 6px;font-size:12px}.pages-count{white-space:nowrap;font-weight:600}.pages-warn{color:#b45309;white-space:nowrap;background:#f59e0b29;border-radius:6px;padding:1px 6px;font-weight:600}.pages-warn-text{color:#b45309}.btn.small{padding:3px 8px;font-size:12px}.visual-page{border:2px dashed var(--accent);background:color-mix(in srgb, var(--accent) 4%, transparent);border-radius:4px;width:100%;height:100%;position:relative}.visual-page.selected{background:color-mix(in srgb, var(--accent) 8%, transparent);border-style:solid}.visual-page .page-tab,.visual-page .react-flow__resize-control{pointer-events:auto}.page-tab{cursor:move;white-space:nowrap;background:var(--accent);color:#fff;border-radius:6px 6px 0 0;align-items:baseline;gap:8px;padding:3px 9px;font-size:12px;display:flex;position:absolute;bottom:100%;left:-2px}.page-tab span{opacity:.85;font-size:11px}.export-pagecount{color:var(--muted);margin-left:8px;font-size:11.5px;font-weight:400}.device.cloud-card,.device.cloud-card.has-fill,.device.cloud-card.on-route,.device.cloud-card.is-selected{box-shadow:none;background:0 0;border-color:#0000;padding-top:18px}.cloud-card>:not(.cloud-shape):not(.react-flow__handle):not(.centre-tag){z-index:1;position:relative}.cloud-card .react-flow__handle{z-index:2}.cloud-shape{z-index:0;pointer-events:none;filter:drop-shadow(0 1px 2px #0000001f);width:100%;height:100%;position:absolute;inset:0;overflow:visible}.cloud-shape path{fill:var(--dev-fill,var(--panel));stroke:var(--dev-border,var(--line-strong));stroke-width:1.2px}.cloud-card.is-selected .cloud-shape path,.cloud-card.on-route .cloud-shape path{stroke:var(--accent);stroke-width:2.5px}.cloud-card.has-issue.warn .cloud-shape path{stroke:#d97706;stroke-width:2px}.cloud-card.has-issue.error .cloud-shape path{stroke:#dc2626;stroke-width:2px}.cloud-card .device-icon{color:#0284c7}.cloud-card .device-ip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cloud-icon-pick{align-items:center;gap:8px;display:flex}.cloud-icon-preview{border:1px solid var(--line);color:#0284c7;border-radius:8px;flex:none;place-items:center;width:30px;height:30px;display:grid}.visual-arrow{width:100%;height:100%;position:relative}.visual-arrow svg{position:absolute;top:0;left:0}.arrow-hit{stroke:#0000;stroke-width:16px;stroke-linecap:round;pointer-events:stroke;cursor:move}.arrow-knob{fill:var(--panel);stroke:var(--accent);stroke-width:2px;pointer-events:all;cursor:crosshair}.arrow-label{white-space:nowrap;background:color-mix(in srgb, var(--panel) 80%, transparent);pointer-events:auto;cursor:move;border-radius:4px;padding:0 4px;font-weight:600;position:absolute;transform:translate(-50%,-130%)}.save-status{color:var(--muted);white-space:nowrap;padding:3px 8px;font-size:12px;font-weight:400}.save-status.warn{color:var(--warn,#b45309);font-weight:500}.save-status.bad{color:var(--error);font-weight:600}.banner.warn{background:color-mix(in srgb, #f59e0b 16%, var(--panel))}.banner.bad{background:color-mix(in srgb, var(--error) 14%, var(--panel))}.banner{flex-wrap:wrap}.modal.saved-copies{width:min(600px,100vw - 32px);font-size:13px;line-height:1.5}.modal.saved-copies p{margin:0 0 12px}.copies-now{border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;padding:10px 12px;display:flex}.version-list{flex-direction:column;gap:2px;max-height:320px;margin:0 0 10px;padding:0;list-style:none;display:flex;overflow:auto}.version-list li,.copies-unreadable{border-radius:6px;align-items:center;gap:6px;padding:6px 8px;display:flex}.version-list li:hover{background:var(--panel-2)}.version-what,.copies-unreadable>span{flex-direction:column;flex:1;min-width:0;display:flex}.version-what b{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.copies-unreadable{border:1px dashed var(--line-strong);margin-bottom:10px}.small-screen{z-index:200;background:var(--bg);place-items:center;padding:24px 16px;display:grid;position:fixed;inset:0;overflow:auto}.small-screen-card{text-align:center;flex-direction:column;align-items:center;gap:12px;width:100%;max-width:360px;line-height:1.5;display:flex}.small-screen-card h1{margin:4px 0 0;font-size:22px;line-height:1.25}.small-screen-card p{margin:0;font-size:15px}.small-screen-card .muted{font-size:14px}.small-screen-card .btn{justify-content:center;width:100%;padding:11px 14px;font-size:15px}.small-screen-card .btn.primary{margin-top:6px}.small-screen-links{margin-top:8px!important;font-size:13px!important}.small-screen-links a{color:inherit}.small-screen-on .app{display:none}.react-flow{--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:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--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:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--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:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--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 #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.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:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--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:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--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:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--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 #00000014;--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{width:100%;height:100%;position:absolute;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{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.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;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:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.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:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;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%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;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{z-index:5;margin:15px;position:absolute}.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{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.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{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.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{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;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));padding:10px;font-size:12px}.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{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.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-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.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))}
