:root{--bg:#f4f6f8;--surface:#fff;--text:#0f172a;--muted:#475569;--border:#d5dce4;--primary:#0b6bcb;--primary-text:#fff;--primary-hover:#0a5cae;--danger:#b91c1c;--router:#0b6bcb;--switch:#0f766e;--pc:#475569;--server:#7c3aed;--cloud:#c2410c;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}@media (prefers-color-scheme:dark){:root{--bg:#0b1120;--surface:#131c2e;--text:#e2e8f0;--muted:#94a3b8;--border:#26324a;--primary:#4ea1f3;--primary-text:#0b1120;--primary-hover:#74b6f6;--danger:#f87171;--router:#4ea1f3;--switch:#2dd4bf;--pc:#cbd5e1;--server:#a78bfa;--cloud:#fb923c}}*{box-sizing:border-box}body{margin:0}h2{margin:0 0 8px;font-size:1rem}:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.app{grid-template:"top top top""err err err""pal canvas insp"1fr/200px 1fr 280px;height:100dvh;display:grid}.topbar{background:var(--surface);border-bottom:1px solid var(--border);grid-area:top;align-items:center;gap:16px;padding:8px 16px;display:flex}.brand{align-items:center;gap:8px;margin:0;font-size:1rem;font-weight:700;display:flex}.brand svg{fill:none;width:24px;height:24px;stroke:var(--primary);stroke-width:1.75px}.doc-name{background:0 0;border-color:#0000;max-width:260px;font-weight:500}.doc-name:hover{border-color:var(--border)}.actions{gap:8px;margin-left:auto;display:flex}.error{color:var(--danger);background:var(--surface);grid-area:err;margin:0;padding:8px 16px}button{border:1px solid var(--primary);background:var(--primary);min-height:40px;color:var(--primary-text);cursor:pointer;border-radius:8px;padding:0 14px;font:600 .9rem system-ui,sans-serif;transition:opacity .15s,background .15s}button:where(:hover:not(:disabled)){background:var(--primary-hover);border-color:var(--primary-hover)}button.ghost{color:var(--text);border-color:var(--border);background:0 0}button.ghost:hover{border-color:var(--primary)}button.danger{color:var(--danger);border-color:var(--danger);background:0 0;width:100%;margin-top:24px}input{border:1px solid var(--border);background:var(--bg);width:100%;min-height:40px;color:var(--text);border-radius:8px;padding:0 10px;font-size:1rem}.palette,.inspector{background:var(--surface);padding:16px;overflow-y:auto}.palette{border-right:1px solid var(--border);flex-direction:column;grid-area:pal;gap:8px;display:flex}.inspector{border-left:1px solid var(--border);grid-area:insp}.hint{color:var(--muted);margin:0 0 8px;font-size:.85rem;line-height:1.45}.palette-item{background:var(--bg);width:100%;min-height:48px;color:var(--text);border:1px solid var(--border);text-align:left;cursor:grab;align-items:center;gap:10px;font-weight:500;display:flex}.palette-item:hover{border-color:var(--primary);opacity:1}.palette-icon{width:28px;height:28px;display:inline-flex}.canvas{grid-area:canvas;position:relative}.empty{pointer-events:none;color:var(--muted);text-align:center;place-items:center;padding:16px;font-size:.95rem;display:grid;position:absolute;inset:0}.device{text-align:center;background:var(--surface);border:1.5px solid var(--border);width:96px;color:var(--text);border-radius:10px;padding:10px 6px 8px;transition:border-color .15s,box-shadow .15s}.device.selected{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--primary) 25%, transparent)}.device-icon{width:36px;height:36px;margin:0 auto 4px}.device-label{word-break:break-word;font-size:12px;font-weight:600;line-height:1.3}.device-ip{color:var(--muted);margin-top:2px;font:11px/1.3 ui-monospace,monospace}.device svg,.palette-icon svg{width:100%;height:100%}.device-router{color:var(--router)}.device-switch{color:var(--switch)}.device-pc{color:var(--pc)}.device-server{color:var(--server)}.device-cloud{color:var(--cloud)}.device .device-label{color:var(--text)}.device .react-flow__handle{background:var(--primary);border:2px solid var(--surface);opacity:0;width:10px;height:9px;transition:opacity .15s}.device:hover .react-flow__handle,.device.selected .react-flow__handle{opacity:1}.inspector label{color:var(--muted);margin:14px 0 4px;font-size:.85rem;display:block}.row{gap:8px;margin-bottom:12px;display:flex}.json{background:var(--bg);border:1px solid var(--border);border-radius:8px;max-height:calc(100dvh - 180px);margin:0;padding:12px;font:12px/1.5 ui-monospace,monospace;overflow:auto}.stats{grid-template-columns:1fr auto;gap:6px;margin:16px 0 0;font-size:.9rem;display:grid}.stats dd{font-variant-numeric:tabular-nums;margin:0;font-weight:600}.visually-hidden{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}@media (width<=900px){.app{grid-template:"top""err""pal""canvas"1fr"insp"/1fr}.palette{border-right:0;border-bottom:1px solid var(--border);flex-flow:wrap}.palette h2,.palette .hint{display:none}.palette-item{width:auto}.inspector{border-left:0;border-top:1px solid var(--border);max-height:40dvh}.actions button{padding:0 10px}.doc-name{display:none}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}:root{--ok:#15803d;--request:#0b6bcb;--reply:#15803d;--warn:#a16207}@media (prefers-color-scheme:dark){:root{--ok:#4ade80;--request:#4ea1f3;--reply:#4ade80;--warn:#facc15}}.app{grid-template-columns:200px 1fr 320px}.inspector{flex-direction:column;padding:0;display:flex}.tabs{border-bottom:1px solid var(--border);background:var(--surface);z-index:1;display:flex;position:sticky;top:0}.tab{min-height:44px;color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;flex:1;justify-content:center;align-items:center;gap:6px;font-weight:600;display:inline-flex}.tab[aria-selected=true]{color:var(--primary);border-bottom-color:var(--primary)}.tab:hover{opacity:1;color:var(--text)}.badge{background:var(--danger);min-width:20px;height:20px;color:var(--surface);border-radius:10px;place-items:center;padding:0 6px;font-size:.75rem;display:inline-grid}.panel{flex:1;padding:16px;overflow-y:auto}h3{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:20px 0 8px;font-size:.8rem}.field{flex:1;min-width:0;margin-bottom:10px}.field label,.inspector label{color:var(--muted);margin:0 0 4px;font-size:.85rem;display:block}.field-row{gap:8px;display:flex}.field-row .field:has(.cidr){flex:0 0 84px}.field-hint,.field-error{margin:4px 0 0;font-size:.78rem}.field-hint{color:var(--muted);font-variant-numeric:tabular-nums}.field-error{color:var(--danger)}input[aria-invalid=true]{border-color:var(--danger)}select{border:1px solid var(--border);background:var(--bg);width:100%;min-height:40px;color:var(--text);border-radius:8px;padding:0 8px;font-size:1rem}fieldset.iface{border:1px solid var(--border);border-radius:8px;margin:0 0 10px;padding:8px 10px 4px}fieldset.iface legend{padding:0 4px;font:600 .85rem ui-monospace,monospace}.muted{color:var(--muted);font-family:system-ui,sans-serif;font-weight:400}button.small{min-height:32px;margin-bottom:6px;font-size:.8rem}.row{flex-wrap:wrap}.ok-text{color:var(--ok);font-size:.9rem}.notice{background:color-mix(in srgb, var(--warn) 15%, transparent);color:var(--text);border-left:3px solid var(--warn);border-radius:4px;margin:0 0 12px;padding:8px 10px;font-size:.85rem}.issues{gap:6px;margin:0 0 12px;padding:0;list-style:none;display:grid}.issue{text-align:left;background:var(--bg);width:100%;color:var(--text);border:1px solid var(--border);border-left-width:3px;min-height:44px;padding:8px 10px;font-size:.85rem;font-weight:400;line-height:1.4}.issue-error{border-left-color:var(--danger)}.issue-warning{border-left-color:var(--warn)}.issue-level{text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;font-weight:700;display:block}.issue-error .issue-level{color:var(--danger)}.issue-warning .issue-level{color:var(--warn)}.empty{flex-direction:column;justify-content:center;align-items:center;gap:4px;display:flex}.empty button{pointer-events:auto}.empty p{margin:0 0 8px}.edge-tag,.port-label{pointer-events:none;white-space:nowrap;font:600 10px/1 ui-monospace,monospace}.label-fo{pointer-events:none;overflow:visible}.label-center{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.edge-tag{background:var(--surface);border:1px solid var(--border);color:var(--switch);border-radius:10px;padding:3px 6px}.port-label{color:var(--muted);background:color-mix(in srgb, var(--bg) 85%, transparent);border-radius:3px;padding:1px 3px}.react-flow__edge-path.cable{stroke:var(--muted);stroke-width:2px}.react-flow__edge-path.cable.trunk{stroke-width:3.5px}.react-flow__edge-path.cable.selected{stroke:var(--primary);stroke-width:3px}.react-flow__edge-path.cable.sim-request{stroke:var(--request);stroke-width:3.5px}.react-flow__edge-path.cable.sim-reply{stroke:var(--reply);stroke-width:3.5px}.packet{stroke:var(--surface);stroke-width:2px}.packet-request{fill:var(--request)}.packet-reply{fill:var(--reply)}.device.sim-hit{border-color:var(--request)}.device.sim-fail{border-color:var(--danger);box-shadow:0 0 0 3px color-mix(in srgb, var(--danger) 30%, transparent)}.device{width:auto;min-width:96px;max-width:150px}.sim-result{margin-top:16px}.sim-verdict{border-radius:6px;margin:0;padding:8px 10px;font-weight:700}.sim-verdict.ok{color:var(--ok);background:color-mix(in srgb, var(--ok) 12%, transparent)}.sim-verdict.fail{color:var(--danger);background:color-mix(in srgb, var(--danger) 12%, transparent)}.phase{align-items:center;gap:6px;display:flex}.phase:before{content:"";border-radius:50%;width:10px;height:10px}.phase-request:before{background:var(--request)}.phase-reply:before{background:var(--reply)}.phase-dns:before{background:var(--warn)}.web-page{border:1px solid var(--border);background:var(--bg);border-radius:6px;padding:8px 10px;font-size:.9rem}.web-page p{margin:0}.web-title{font-weight:700;margin-bottom:4px!important}.sim-log{gap:6px;margin:0;padding-left:20px;font-size:.85rem;line-height:1.45;display:grid}.log-error{color:var(--danger);font-weight:600}.log-ok{color:var(--ok)}@media (width<=900px){.app{grid-template-columns:1fr}.actions{flex-wrap:wrap}}.ext{opacity:.8;font:12px ui-monospace,monospace}#export-format+.hint{margin-top:8px}.export-warnings ul{margin:6px 0 0;padding-left:18px;font-size:.85rem}.export-warnings li+li{margin-top:4px}.export-preview{object-fit:contain;border:1px solid var(--border);background:#f4f6f8;border-radius:8px;width:100%;height:auto;max-height:calc(100dvh - 300px);display:block}.device-model{color:var(--muted);margin-top:1px;font-size:10px}.react-flow__edge-path.cable-cross{stroke-dasharray:7 4}.react-flow__edge-path.cable-fiber{stroke:#ea580c}.react-flow__edge-path.cable-serial{stroke:#dc2626}.react-flow__edge-path.cable-console{stroke:#0891b2;stroke-dasharray:2 4}.react-flow__edge-path.cable.down{stroke-opacity:.55}.link-light{stroke:var(--surface);stroke-width:1.5px}.link-light.on{fill:var(--ok)}.link-light.off{fill:var(--danger)}.link-light.stp{fill:#ea580c}@media (prefers-color-scheme:dark){.react-flow__edge-path.cable-fiber{stroke:#fb923c}.react-flow__edge-path.cable-serial{stroke:#f87171}.react-flow__edge-path.cable-console{stroke:#22d3ee}}.device-hub{color:var(--switch)}.device-printer{color:var(--pc)}.palette-group{flex-direction:column;gap:6px;display:flex}.palette-group>summary{cursor:pointer;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding:6px 0 2px;font-size:.78rem;font-weight:700}.palette-group[open]>summary{margin-bottom:2px}.palette-group .palette-item{gap:8px;min-height:40px;padding:0 10px;font-size:.9rem}.palette-group .palette-icon{width:22px;height:22px}.cable-tools{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.cable-tool{white-space:nowrap;background:var(--bg);min-width:0;min-height:36px;color:var(--text);border:1px solid var(--border);align-items:center;gap:6px;padding:0 6px;font-size:.85rem;font-weight:500;display:flex}.cable-tool[aria-checked=true]{border-color:var(--primary);box-shadow:inset 0 0 0 1px var(--primary);color:var(--primary)}.cable-swatch{border-top:3px solid var(--muted);flex:none;width:18px;height:0}.cable-tool-auto .cable-swatch{border-top-style:double;border-top-width:4px}.cable-tool-cross .cable-swatch{border-top-style:dashed}.cable-tool-fiber .cable-swatch{border-top-color:#ea580c}.cable-tool-serial .cable-swatch{border-top-color:#dc2626}.cable-tool-console .cable-swatch{border-top:3px dotted #0891b2}.cable-status{border-left:3px solid;border-radius:4px;margin:0 0 12px;padding:8px 10px;font-size:.88rem}.cable-status.up{border-color:var(--ok);background:color-mix(in srgb, var(--ok) 12%, transparent)}.cable-status.down{border-color:var(--danger);background:color-mix(in srgb, var(--danger) 12%, transparent)}.ports-list{margin:12px 0;font-size:.85rem}.ports-list summary{cursor:pointer;color:var(--muted)}.ports-list ul{max-height:220px;margin:8px 0 0;padding:0;list-style:none;overflow-y:auto}.ports-list li{padding:2px 0}.media{border:1px solid var(--border);color:var(--muted);border-radius:8px;padding:1px 6px;font-size:.72rem}.media-fiber{color:#ea580c;border-color:currentColor}.media-serial{color:#dc2626;border-color:currentColor}.media-console,.media-rs232{color:#0891b2;border-color:currentColor}@media (width<=900px){.palette{max-height:26dvh;padding:8px 16px;display:block;overflow-y:auto}.palette-group{display:block}.palette-group .palette-item{width:auto;min-height:36px;margin:0 6px 6px 0;display:inline-flex}.cable-tools{flex-wrap:wrap;display:flex}.palette-group .hint{display:none}}.app.wide-inspector{grid-template-columns:200px 1fr minmax(320px,46vw)}.mode-switch{border:1px solid var(--border);border-radius:8px;gap:0;margin:0 0 12px;display:flex;overflow:hidden}.mode-switch button{background:var(--surface);min-height:36px;color:var(--muted);border:0;border-radius:0;flex:1;font-size:.85rem;font-weight:600}.mode-switch button+button{border-left:1px solid var(--border)}.mode-switch button[aria-checked=true]{background:var(--primary);color:var(--primary-text)}.terminal{cursor:text;background:#0b1120;border:1px solid #1e293b;border-radius:8px}.terminal-screen{color:#e2e8f0;white-space:pre-wrap;word-break:break-word;height:calc(100dvh - 270px);min-height:240px;margin:0;padding:10px 12px;font:12.5px/1.45 ui-monospace,Cascadia Mono,Menlo,Consolas,monospace;overflow:auto}.terminal-line{display:flex}.terminal-prompt{color:#4ade80;white-space:pre}.terminal-input{color:#f8fafc;min-width:4ch;font:inherit;caret-color:#4ade80;background:0 0;border:0;border-radius:0;outline:0;flex:1;min-height:0;padding:0}.terminal-input:focus-visible{outline:0}.terminal:focus-within{border-color:var(--primary)}.inspector h2 .muted{font-size:.85rem;font-weight:400}@media (width<=900px){.app.wide-inspector{grid-template-columns:1fr}.terminal-screen{height:32dvh;min-height:180px}}.demo-menu{position:relative}.demo-menu>summary{cursor:pointer;border:1px solid var(--border);min-height:40px;color:var(--text);border-radius:8px;align-items:center;padding:0 14px;font:600 .9rem system-ui,sans-serif;list-style:none;display:inline-flex}.demo-menu>summary::-webkit-details-marker{display:none}.demo-menu>summary:after{content:"▾";color:var(--muted);margin-left:6px;font-size:.75rem}.demo-menu>summary:hover{border-color:var(--primary)}.demo-list{z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:2px;min-width:290px;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 24px #00000026}.demo-list button{color:var(--text);text-align:left;background:0 0;border:0;font-weight:500}.demo-list button:hover,.demo-list button:focus-visible{background:var(--bg);opacity:1}.proto{border:1px solid var(--border);border-radius:8px;margin:0 0 10px;padding:0 12px}.v6{margin:4px 0 8px}.v6>summary{cursor:pointer;color:var(--muted);padding:4px 0;font-size:.85rem;font-weight:600}.v6[open]>summary{color:var(--text)}.proto>summary{cursor:pointer;align-items:center;gap:8px;padding:10px 0;font-weight:600;display:flex}.proto[open]>summary{border-bottom:1px solid var(--border);margin-bottom:8px}.proto[open]{padding-bottom:12px}.badge-on{background:color-mix(in srgb, var(--ok) 18%, transparent);color:var(--ok);border-radius:10px;padding:2px 8px;font-size:.72rem;font-weight:600}.check{align-items:center;gap:6px;color:var(--text)!important;margin:6px 0!important;font-size:.88rem!important;display:flex!important}.check input{width:auto;min-height:0}.checks{flex-wrap:wrap;gap:0 14px;display:flex}.inspector .label{color:var(--muted);margin:14px 0 4px;font-size:.85rem}.rows-item{align-items:flex-end;gap:8px;margin-bottom:6px;display:flex}.rows-item>.field,.rows-item>.neighbor{flex:1;min-width:0}.rows-item .field label{margin-top:4px}.rows-item>button{flex:none;margin-bottom:2px}.neighbor{border-left:2px solid var(--border);padding-left:8px}.iface-name{align-self:center;min-width:3ch;font-size:.85rem}.routing-status{margin:8px 0;font-size:.85rem}.routing-status p{margin:0 0 4px}.icon-group{display:flex}.icon-group .icon:first-child{border-radius:8px 0 0 8px}.icon-group .icon:last-child{border-radius:0 8px 8px 0;margin-left:-1px}button.icon{min-width:40px;padding:0 10px;font-size:1.05rem}button:disabled{opacity:.4;cursor:not-allowed}.search{margin-bottom:4px;position:relative}.search input{min-height:36px;font-size:.9rem}.search-results{z-index:30;background:var(--surface);border:1px solid var(--border);border-radius:8px;margin:0;padding:4px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0;box-shadow:0 8px 24px #00000026}.search-results li.muted{padding:8px;font-size:.85rem}.search-results button{text-align:left;width:100%;color:var(--text);background:0 0;border:0;min-height:36px;font-weight:500}.search-results button:hover,.search-results button:focus-visible{background:var(--bg);opacity:1}.search-results .muted{margin-left:4px;font-size:.8rem;font-weight:400}.help-dialog{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;max-width:min(480px,100vw - 32px);padding:20px 24px}.help-dialog::backdrop{background:#0006}.shortcuts{gap:6px;margin:12px 0;display:grid}.shortcuts div{justify-content:space-between;gap:16px;display:flex}.shortcuts dd{color:var(--muted);margin:0}kbd{border:1px solid var(--border);background:var(--bg);border-bottom-width:2px;border-radius:4px;padding:2px 6px;font:12px ui-monospace,monospace}.trace{margin:0 0 12px;padding:0;font-size:.88rem;list-style:none}.trace li{border-bottom:1px solid var(--border);align-items:baseline;gap:10px;padding:3px 0;display:flex}.trace-ttl{text-align:right;width:2ch;color:var(--muted);font-variant-numeric:tabular-nums}.trace-lost code{color:var(--danger)}.subifs{border-left:2px dashed var(--border);margin-top:8px;padding-left:8px}textarea.rules{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);resize:vertical;border-radius:8px;padding:8px;font:12.5px/1.5 ui-monospace,monospace}textarea.rules[aria-invalid=true]{border-color:var(--danger)}.iface-security{margin-top:6px}.clock{border-right:1px solid var(--border);align-items:center;gap:4px;margin-right:4px;padding-right:8px;display:flex}.clock-time{font-variant-numeric:tabular-nums;color:var(--muted);min-width:9ch;font:600 .85rem ui-monospace,monospace}button.small-btn{min-height:32px;padding:0 8px;font-size:.8rem}@media (width<=900px){.clock{border-right:0}}.share-banner{background:color-mix(in srgb, var(--primary) 10%, var(--surface));border-bottom:1px solid var(--border);flex-wrap:wrap;grid-column:1/-1;align-items:center;gap:8px 16px;padding:6px 16px;font-size:.88rem;display:flex}.share-banner.ro{background:color-mix(in srgb, var(--warn) 14%, var(--surface))}.share-actions{gap:6px;margin-left:auto;display:flex}.ro-fieldset{border:0;min-width:0;margin:0;padding:0}.read-only .palette{opacity:.45}.copy-row{gap:6px;display:flex}.copy-row input{font:12px ui-monospace,monospace}.share-dialog{width:min(560px,100vw - 32px)}.my-shares{margin:0 0 12px;padding:0;font-size:.88rem;list-style:none}.my-shares li{padding:3px 0}.embed .palette,.embed .topbar .actions{display:none}.app.embed{grid-template-columns:1fr 320px;grid-template-areas:"top top""err err""canvas insp"}.notices{grid-area:err}.notices .error{grid-area:auto}.table-block{margin:0 0 18px}.table-title{justify-content:space-between;align-items:center;gap:8px;display:flex}.table-title h3{margin:0 0 6px}.table-scroll{border:1px solid var(--border);border-radius:8px;overflow-x:auto}table.data{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:.8rem}table.data th,table.data td{text-align:left;white-space:nowrap;border-bottom:1px solid var(--border);padding:5px 8px}table.data th{background:var(--bg);color:var(--muted);font-weight:600;position:sticky;top:0}table.data tr:last-child td{border-bottom:0}table.data code{font-size:.78rem}.tabs{scrollbar-width:none;overflow-x:auto}.tab{white-space:nowrap;flex:1 0 auto;gap:4px;padding-left:5px;padding-right:5px;font-size:.8rem}.tab .badge{padding:0 5px}.badge.badge-tp{background:var(--primary)}.tp-instructions{border-left:3px solid var(--primary);margin:0 0 12px;padding:2px 0 2px 10px}.tp-instructions p{margin:0 0 6px}.tp-progress{background:var(--border);border-radius:4px;height:8px;overflow:hidden}.tp-progress span{background:var(--ok);height:100%;transition:width .3s;display:block}@media (prefers-reduced-motion:reduce){.tp-progress span{transition:none}}.tp-objectives{gap:8px;margin:8px 0 0;padding:0;list-style:none;display:grid}.tp-objectives li{border:1px solid var(--border);border-radius:8px;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.tp-objectives li.ok{border-color:var(--ok)}.tp-mark{text-align:center;width:1.2em;color:var(--muted);flex:none;font-weight:700}.tp-objectives li.ok .tp-mark{color:var(--ok)}.tp-objectives li>div{justify-items:start;gap:6px;display:grid}.tp-hint{background:var(--bg);border-radius:6px;margin:0;padding:6px 8px;font-size:.85rem}button.linklike{min-height:0;color:var(--primary);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.react-flow__edge-path.cable.sim-arp{stroke:var(--warn);stroke-width:3.5px}.packet-arp{fill:var(--warn)}.stepper{gap:10px;margin-top:8px;display:grid}.stepper-bar{justify-content:space-between;align-items:center;gap:8px;display:flex}.stepper-count{font-variant-numeric:tabular-nums;font-weight:600}.frame-detail{border:1px solid var(--border);border-radius:8px;gap:6px;padding:8px 10px;display:grid}.frame-summary{margin:0}.frame-notes{margin:0;padding-left:18px;font-size:.85rem}.layer{border-top:1px solid var(--border);padding-top:4px}.layer summary{cursor:pointer;font-size:.85rem;font-weight:600}.layer dl{gap:2px;margin:4px 0 0;display:grid}.layer dl div{grid-template-columns:9em 1fr;gap:8px;font-size:.8rem;display:grid}.layer dt{color:var(--muted)}.layer dd{overflow-wrap:anywhere;margin:0}.frame-list{border:1px solid var(--border);border-radius:8px;max-height:240px;margin:0;padding:0;list-style:none;overflow-y:auto}.frame-row{text-align:left;border:0;border-bottom:1px solid var(--border);width:100%;min-height:34px;color:var(--text);background:0 0;border-radius:0;grid-template-columns:2em 3.6em 1fr;align-items:center;gap:6px;padding:0 8px;font-size:.8rem;font-weight:400;display:grid}.frame-list li:last-child .frame-row{border-bottom:0}.frame-row.current{background:var(--bg);box-shadow:inset 3px 0 0 var(--primary);font-weight:600}.frame-n{color:var(--muted);font-variant-numeric:tabular-nums}.frame-kind{text-align:center;color:var(--surface);background:var(--request);border-radius:4px;padding:1px 4px;font-size:.72rem;font-weight:700}.frame-kind.phase-reply{background:var(--reply)}.frame-kind.kind-arp-request,.frame-kind.kind-arp-reply,.frame-kind.kind-nd-ns,.frame-kind.kind-nd-na{background:var(--warn)}.frame-kind.kind-drop{background:var(--danger)}.frame-kind.kind-done{background:var(--ok)}.frame-route{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.import-dialog{width:min(720px,100vw - 32px)}.import-text{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8rem}.file-btn{border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:center;min-height:36px;padding:0 12px;font-size:.85rem;font-weight:600;display:inline-flex;position:relative}.file-btn:focus-within{outline:2px solid var(--primary);outline-offset:2px}.file-btn input{opacity:0;cursor:pointer;position:absolute;inset:0}.import-ignored{gap:4px;max-height:180px;margin:0 0 12px;padding-left:18px;font-size:.8rem;display:grid;overflow-y:auto}.import-ignored code{overflow-wrap:anywhere}.import-ports{border:1px solid var(--border,#ccc);border-radius:8px;gap:6px;margin:0 0 12px;padding:8px 12px;display:grid}.import-ports legend{padding:0 4px;font-weight:600}.import-ports select{max-width:100%;margin-left:6px}.import-mapping{gap:4px;margin:0 0 4px;padding-left:24px;font-size:.85rem;list-style:none;display:grid}.import-mapping li{align-items:center;gap:6px;display:flex}.import-mapping select{width:auto;margin-left:0}.stp-row{align-items:end}.stp-row .check{min-width:6.5em;margin-bottom:10px!important}.stp-blocked{color:#c2410c;font-weight:600}@media (prefers-color-scheme:dark){.stp-blocked{color:#fb923c}}.welcome{z-index:50;background:color-mix(in srgb, var(--bg) 92%, transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);justify-content:center;align-items:flex-start;padding:32px 16px;display:flex;position:fixed;inset:0;overflow:auto}.welcome-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;gap:20px;width:min(920px,100%);padding:24px;display:grid;box-shadow:0 10px 40px #0000001f}.welcome-head{align-items:center;gap:14px;display:flex}.welcome-head svg{fill:none;width:44px;height:44px;stroke:var(--primary);stroke-width:2px;flex:none}.welcome-head h1{margin:0;font-size:1.5rem}.welcome-head p{margin:2px 0 0}.welcome-close{margin-left:auto}.welcome-actions{flex-wrap:wrap;gap:8px;display:flex}.welcome section h2{margin:0 0 8px;font-size:.95rem}.welcome-examples{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px;display:grid}.example{text-align:left;border:1px solid var(--border);background:var(--bg);color:var(--text);font:inherit;cursor:pointer;border-radius:8px;gap:4px;padding:10px 12px;display:grid}.example:hover{border-color:var(--primary)}.example span{color:var(--muted);font-size:.85rem}.welcome-recents{gap:4px;margin:0;padding:0;list-style:none;display:grid}button.link{color:var(--primary);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.update-banner{background:color-mix(in srgb, var(--primary) 12%, var(--surface));border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:10px;padding:8px 16px;display:flex}.account-dialog{width:min(640px,100vw - 32px)}.account-form{gap:8px;display:grid}.account-form h3,.account h3,.versions h3{margin:8px 0 4px;font-size:.95rem}.account-switch{margin:0;font-size:.9rem}.my-diagrams,.version-list{gap:6px;margin:0;padding:0;list-style:none;display:grid}.my-diagrams li,.version-list li{border:1px solid var(--border);border-radius:6px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;display:flex}.danger-text{color:var(--danger)}.versions{border-top:1px solid var(--border);margin-top:8px;padding-top:8px}.exam-banner{background:color-mix(in srgb, var(--primary) 14%, var(--surface));border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:12px;padding:8px 16px;display:flex}.exam-banner.urgent{background:color-mix(in srgb, var(--danger) 18%, var(--surface))}.exam-clock{font-variant-numeric:tabular-nums;font-size:1.1rem;font-weight:700}.exam-create,.exam-created{border-top:1px solid var(--border);gap:8px;margin-top:12px;padding-top:12px;display:grid}.exam-create h3{margin:0;font-size:.95rem}.exam-start{max-width:520px}.exam-start h1{margin:0}.exam-dashboard{width:min(1000px,100%)}.exam-table{border-collapse:collapse;width:100%;font-size:.9rem}.exam-table th,.exam-table td{text-align:left;border-bottom:1px solid var(--border);padding:6px 8px}.exam-table tr.late td{color:var(--danger)}.device.peer-selected{outline:3px solid var(--peer);outline-offset:3px}.peer-tag{color:#fff;white-space:nowrap;pointer-events:none;border-radius:4px;padding:1px 6px;font-size:.7rem;position:absolute;top:-22px;left:0}.people{align-items:center;gap:4px;display:inline-flex}.person{color:#fff;border-radius:11px;justify-content:center;align-items:center;min-width:22px;height:22px;padding:0 6px;font-size:.75rem;font-weight:600;display:inline-flex}.device{position:relative}.mac-list{gap:4px;margin:4px 0 8px;padding:0;font-size:13px;list-style:none;display:grid}.mac-list li{align-items:center;gap:8px;display:flex}.proto h4{margin:12px 0 4px;font-size:13px}.redist{margin:4px 0}.react-flow__attribution{background:var(--surface)}.react-flow__attribution a{color:var(--muted)}
