:root{--g-edge:#94600a;--g-path:#2b6cb0;--g-ops:#8b3d8f}:root[data-theme=dark]{--g-edge:#e3a94b;--g-path:#7fb2ef;--g-ops:#d391d6}[data-group=edge]{--accent:var(--g-edge)}[data-group=path]{--accent:var(--g-path)}[data-group=ops]{--accent:var(--g-ops)}.ns-slider{flex-direction:column;gap:4px;margin-bottom:4px;display:flex}.ns-slider .label{font:500 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);justify-content:space-between;gap:10px;display:flex}.ns-slider .label strong{font:600 13px var(--mono);color:var(--ink);letter-spacing:0}.ns-toggle{cursor:pointer;align-items:flex-start;gap:10px;padding:3px 0;font-size:14px;line-height:1.4;display:flex}.ns-toggle input{width:16px;height:16px;accent-color:var(--accent);flex:none;margin-top:2px}.ns-verdict{border-left:4px solid var(--rule-strong);background:var(--sheet);margin:16px 0 0;padding:12px 14px;font-size:15px;line-height:1.5}.ns-verdict.ok{border-left-color:var(--ok);background:color-mix(in srgb, var(--ok) 10%, var(--sheet))}.ns-verdict.bad{border-left-color:var(--bad);background:var(--bad-tint)}.ns-mark{place-items:center;width:1.3em;height:1.3em;font-weight:700;display:inline-grid}.ns-mark.ok{color:var(--ok)}.ns-mark.bad{color:var(--bad)}.ns-note{max-width:72ch;color:var(--ink-2);margin:0 0 16px;font-size:15px}.ns-row{margin-top:16px}.ns-gap{margin-top:20px}.ns-code{font:13px/1.6 var(--mono);word-break:break-all;color:var(--ink);background:var(--paper);border:1px dashed var(--rule);padding:10px 12px;display:block}.ns-code.leak{color:var(--bad);border-color:var(--bad);background:var(--bad-tint)}.ns-xlink{font:500 13px var(--sans);color:var(--accent);border-bottom:1px solid;text-decoration:none}.ns-scroll{overflow-x:auto}.grid-2.ns-wide-left{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);align-items:start;gap:24px}.grid-2.ns-wide-right{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);align-items:start;gap:24px}.grid-2.ns-gap{margin-top:20px}@media (width<=900px){.grid-2.ns-wide-left,.grid-2.ns-wide-right{grid-template-columns:minmax(0,1fr)}}.ns-figure{margin:0}.ns-map{width:100%;min-width:520px;height:auto;display:block}.ns-map .ns-node rect{fill:var(--sheet);stroke:var(--rule-strong);stroke-width:1.5px}.ns-map .ns-node text{fill:var(--ink);font:600 12px var(--mono);text-anchor:middle}.ns-map .ns-node.jewel rect{fill:var(--accent-tint);stroke:var(--accent);stroke-width:2.5px}.ns-map .ns-node.start rect{stroke:var(--bad);stroke-dasharray:4 3}.ns-map .ns-node.hot rect{stroke:var(--bad);stroke-width:2.5px}.ns-map .ns-edge path{fill:none;stroke:var(--rule-strong);stroke-width:1.5px}.ns-map .ns-edge text{fill:var(--ink-3);font:500 9px var(--mono);text-anchor:middle}.ns-map .ns-edge.hot path{stroke:var(--bad);stroke-width:2.5px}.ns-map .ns-edge.hot text{fill:var(--bad)}.ns-map .ns-edge.cut path{stroke:var(--ok);stroke-dasharray:3 4;opacity:.6}.ns-map .ns-edge.cut text{fill:var(--ok);text-decoration:line-through}.ns-arrowhead{fill:var(--rule-strong);stroke:none}.ns-arrowhead.hot{fill:var(--bad)}.ns-paths{flex-direction:column;gap:6px;margin:16px 0 0;padding:0;list-style:none;display:flex}.ns-paths li{background:var(--bad-tint);border-left:3px solid var(--bad);overflow-wrap:anywhere;padding:8px 12px;font-size:14px}.ns-paths small{color:var(--ink-3);font:11px var(--mono)}.ns-fields td:first-child{width:36px}.ns-fields code,.ns-tests code,.ns-scan code{font:12px var(--mono);word-break:break-all}.ns-fields tr.leak td,.ns-tests tr.leak td{background:var(--bad-tint)}.ns-fields tr.safe td{color:var(--ink-3)}.ns-route{justify-content:space-between;gap:8px;padding:28px 8px 12px;display:flex;position:relative}.ns-hop{font:600 12px var(--mono);text-align:center;background:var(--sheet);border:1px solid var(--rule-strong);flex:1;padding:10px}.ns-hop.evil{border-color:var(--bad);color:var(--bad)}.ns-hop.evil.flooded{background:var(--bad-tint)}.ns-packet{background:var(--accent);border-radius:3px;width:16px;height:16px;transition:left .6s;position:absolute;top:6px;left:8%}.ns-packet.sealed{background:var(--ok)}.ns-packet.touched{background:var(--bad)}.ns-route.flying .ns-packet,.ns-route.done .ns-packet{left:88%}.ns-capture{font:12px/1.5 var(--mono);flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.ns-capture li{background:var(--paper);border-left:3px solid var(--rule);overflow-wrap:anywhere;gap:8px;padding:5px 8px;display:flex}.ns-capture li.leak{background:var(--bad-tint);border-left-color:var(--bad);color:var(--bad)}.ns-capture code{word-break:break-all}.ns-proto{width:42px;color:var(--ink-3);flex:none;font-weight:600}.ns-capture li.leak .ns-proto{color:var(--bad)}.ns-rules{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.ns-rules li{border:1px solid var(--rule);background:var(--paper);border-left-width:4px;padding:10px}.ns-rules li.allow{border-left-color:var(--ok)}.ns-rules li.deny{border-left-color:var(--bad)}.ns-rules li.shadowed{opacity:.75;background:repeating-linear-gradient(-45deg, var(--sheet) 0 6px, var(--paper) 6px 12px)}.ns-rule-head{align-items:center;gap:6px;margin-bottom:8px;display:flex}.ns-rule-no{font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);flex:1}.ns-rule-fields{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;display:grid}.ns-rule-fields select{padding:6px 4px;font-size:13px}.ns-warn{color:var(--bad);margin:8px 0 0;font-size:12px}.btn.small{padding:5px 9px;font-size:11px}.ns-tests th{text-align:left;font:500 10px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);padding:0 10px 8px 0}.ns-tests td{border-top:1px solid var(--rule);vertical-align:top;padding:8px 10px 8px 0;font-size:13px}.ns-flows{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.ns-flows li{border:1px solid var(--rule);background:var(--paper);grid-template-columns:70px minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px 10px;display:grid}.ns-flows li.todo{opacity:.4}.ns-flows li.pass{border-left:3px solid var(--ok)}.ns-flows li.drop{border-left:3px solid var(--bad)}.ns-flows li.unsolicited.pass{background:var(--bad-tint)}.ns-dir{font:600 10px var(--mono);text-transform:uppercase;color:var(--ink-3)}.ns-flow-main{min-width:0}.ns-flow-main b{font:500 13px var(--sans);display:block}.ns-flow-main code{font:11px var(--mono);color:var(--ink-3);word-break:break-all}.ns-flow-verdict{font:600 11px var(--mono);white-space:nowrap}.ns-flows li.pass .ns-flow-verdict{color:var(--ok)}.ns-flows li.drop .ns-flow-verdict{color:var(--bad)}.ns-conntrack{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.ns-conntrack li{font:12px var(--mono);background:var(--paper);border:1px solid var(--rule);align-items:center;gap:10px;padding:8px 10px;display:flex}.ns-conntrack code{word-break:break-all;flex:1}.ns-conntrack .tag.closed{color:var(--ink-3);border-color:var(--ink-3);background:0 0}.ns-internet{font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--bad);grid-column:1/-1;padding:6px 12px}.ns-zones{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.ns-zone{border:2px dashed var(--rule-strong);background:var(--sheet);min-height:120px;padding:12px}.ns-zone.target{border-color:var(--accent);background:var(--accent-tint)}.ns-zone[data-zone=dmz]{border-color:var(--g-edge)}.ns-zone[data-zone=data]{border-color:var(--accent)}.ns-zone header{flex-direction:column;gap:2px;margin-bottom:10px;display:flex}.ns-zone header strong{font:500 15px var(--mono)}.ns-zone header small{color:var(--ink-3);font-size:12px;line-height:1.3}.ns-chips{flex-wrap:wrap;gap:6px;display:flex}.ns-chip{font:500 13px var(--sans);color:var(--ink);background:var(--paper);border:1px solid var(--rule-strong);cursor:grab;padding:7px 11px}.ns-chip.picked{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.ns-chip.breached{background:var(--bad);border-color:var(--bad);color:#fff}.ns-chip.reached{background:var(--bad-tint);border-color:var(--bad);color:var(--bad)}.ns-checks{flex-direction:column;gap:0;margin:0;padding:0;list-style:none;display:flex}.ns-checks li{border-top:1px solid var(--rule);align-items:baseline;gap:10px;padding:9px 0;font-size:14px;display:flex}.ns-checks li:first-child{border-top:0}.ns-matrix{border-collapse:collapse;font-size:12px}.ns-matrix th{font:500 10px var(--mono);color:var(--ink-3);text-align:center;white-space:nowrap;padding:4px 6px}.ns-matrix th:first-child{text-align:left}.ns-matrix td{text-align:center;border:1px solid var(--rule);width:28px;height:28px;color:var(--ink-3)}.ns-matrix td.yes{color:var(--accent);font-weight:700}.ns-matrix tr.breached th{color:var(--bad)}@media (width<=560px){.ns-zones{grid-template-columns:minmax(0,1fr)}}.ns-services{flex-direction:column;gap:8px;margin:0 0 14px;padding:0;list-style:none;display:flex}.ns-services li{border:1px solid var(--rule);background:var(--paper);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;padding:8px 10px;display:grid}.ns-services li.off{opacity:.5}.ns-svc-name b{font:500 14px var(--sans)}.ns-svc-name code{font:12px var(--mono);color:var(--ink-3)}.ns-services .ns-toggle{font-size:12px}.ns-services select{width:auto;padding:5px 6px;font-size:12px}.ns-scan{flex-direction:column;gap:2px;margin:12px 0 0;padding:0;list-style:none;display:flex}.ns-scan li{font:12px var(--mono);border-left:3px solid var(--rule);grid-template-columns:70px 72px minmax(0,1fr);align-items:baseline;gap:10px;padding:6px 8px;display:grid}.ns-scan li.open{border-left-color:var(--bad);background:var(--bad-tint)}.ns-scan li.closed{border-left-color:var(--ink-3)}.ns-scan li.filtered{border-left-color:var(--ok)}.ns-state{text-transform:uppercase;letter-spacing:.04em;font-weight:600}.ns-scan li.open .ns-state{color:var(--bad)}.ns-scan li.filtered .ns-state{color:var(--ok)}.ns-scan small{color:var(--ink-3);word-break:break-all}.ns-hops{gap:0;min-width:520px;margin:0 0 16px;padding:0;list-style:none;display:flex}.ns-hops li{font:500 12px var(--sans);text-align:center;background:var(--sheet);border:1px solid var(--rule);flex:1;padding:12px 10px;position:relative}.ns-hops li+li{border-left:0}.ns-hops li.here{background:var(--accent-tint);border-color:var(--accent);font-weight:600}.ns-hops li.net{color:var(--ink-3);font-style:italic}.ns-layers{gap:3px;min-width:520px;display:flex}.ns-layer{border:1px solid var(--rule-strong);background:var(--sheet);flex-direction:column;gap:2px;min-width:0;padding:10px 8px;display:flex;overflow:hidden}.ns-layer b{font:500 11px var(--mono);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ns-layer small{font:10px var(--mono);color:var(--ink-3)}.ns-layer.enc{background:color-mix(in srgb, var(--ok) 12%, var(--sheet));border-color:var(--ok)}.ns-layer.outer{background:var(--accent-tint);border-color:var(--accent)}.ns-layer.udp,.ns-layer.wg{background:var(--paper)}.ns-layer.tag{background:color-mix(in srgb, var(--ok) 20%, var(--sheet))}.ns-stage-text{margin:14px 0;font-size:15px;line-height:1.5}.ns-bars{flex-direction:column;gap:10px;margin-top:8px;display:flex}.ns-bar-row{flex-direction:column;gap:4px;display:flex}.ns-bar-label{font:500 11px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);justify-content:space-between;display:flex}.ns-bar-label b{color:var(--ink);letter-spacing:0}.ns-bar{background:var(--rule);height:10px}.ns-bar i{background:var(--accent);height:100%;transition:width .3s;display:block}.ns-bar i.over{background:var(--bad)}.ns-bar i.ok{background:var(--ok)}.ns-chain{flex-direction:column-reverse;gap:0;margin:0;padding:0;list-style:none;display:flex}.ns-cert{background:var(--sheet);border:1px solid var(--rule-strong);border-top-width:4px;margin:0 0 24px;padding:12px 14px;position:relative}.ns-cert:first-child{margin-bottom:0}.ns-cert:before{content:attr(data-signs);font:10px var(--mono);color:var(--ink-3);position:absolute;bottom:-20px;left:50%;transform:translate(-50%)}.ns-cert:first-child:before{content:none}.ns-cert.leaf{border-top-color:var(--accent)}.ns-cert.intermediate{border-top-color:var(--ink-3)}.ns-cert.root{border-top-color:var(--ok)}.ns-cert.root.bad{border-top-color:var(--bad)}.ns-cert.missing{border-style:dashed;border-top-color:var(--bad);background:0 0}.ns-cert-role{font:600 10px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.ns-cert b{font:500 15px var(--mono);word-break:break-all;margin:4px 0;display:block}.ns-cert code{font:11px var(--mono);color:var(--ink-3);word-break:break-all}.ns-cert .ns-warn{margin-top:4px;display:block}.ns-kv{grid-template-columns:auto minmax(0,1fr);gap:8px 14px;margin:0 0 14px;display:grid}.ns-kv dt{font:500 10px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.ns-kv dd{font:13px var(--mono);overflow-wrap:anywhere;margin:0}.ns-kv dd.bad{color:var(--bad)}.ns-kv dd small{color:var(--ink-3)}.ns-timeline{gap:10px;min-width:620px;margin:0;padding:0 0 6px;list-style:none;display:flex}.ns-timeline li{border:1px solid var(--rule-strong);background:var(--sheet);border-top-width:4px;flex-direction:column;flex:1;gap:4px;padding:14px 12px;display:flex}.ns-timeline li.worst{border-top-color:var(--bad)}.ns-timeline li.best{border-top-color:var(--ok)}.ns-era-year{font:600 11px var(--mono);color:var(--ink-3)}.ns-timeline b{font:500 17px var(--mono)}.ns-timeline small{color:var(--ink-2);font-size:12px;line-height:1.35}.ns-events{font:12px var(--mono);flex-direction:column;gap:2px;max-height:460px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.ns-events li{border-left:3px solid #0000;align-items:baseline;gap:8px;padding:5px 8px;display:flex}.ns-events li.malicious{border-left-color:var(--bad)}.ns-events li.alert{background:var(--mark)}.ns-events code{word-break:break-all}.ns-ev-t{width:42px;color:var(--ink-3);flex:none}.ns-events .tag{flex:none;margin-left:auto}.ns-requests{flex-direction:column;gap:6px;margin:16px 0 0;padding:0;list-style:none;display:flex}.ns-requests li{border:1px solid var(--rule);background:var(--paper);border-left-width:4px;align-items:baseline;gap:12px;padding:10px 12px;display:flex}.ns-requests li.attack{border-left-color:var(--bad)}.ns-requests li.legit{border-left-color:var(--ok)}.ns-req-verdict{width:120px;font:600 11px var(--mono);text-transform:uppercase;letter-spacing:.04em;flex:none}.ns-req-verdict.ok{color:var(--ok)}.ns-req-verdict.bad{color:var(--bad)}.ns-req-text{font-size:14px}.ns-log{flex-direction:column;gap:2px;min-width:560px;margin:0;padding:0;list-style:none;display:flex}.ns-log-line{width:100%;font:12px var(--mono);text-align:left;color:var(--ink);background:var(--paper);border:1px solid var(--rule);cursor:pointer;grid-template-columns:48px 56px minmax(0,1fr) auto;align-items:baseline;gap:10px;padding:7px 10px;display:grid}.ns-log-line:hover{border-color:var(--accent)}.ns-log-line.hit{border-color:var(--bad);background:var(--bad-tint)}.ns-log-line.miss{border-color:var(--ink-3);opacity:.7;text-decoration:line-through}.ns-log-line code{word-break:break-all}.ns-log-t{color:var(--ink-3)}.ns-log-src{color:var(--accent);text-transform:uppercase;font-weight:600}.ns-log-mark{color:var(--bad);font-weight:700}.ns-actions{flex-direction:column;gap:6px;display:flex}.ns-actions .btn{text-align:left;white-space:normal;text-transform:none;letter-spacing:0;font-family:var(--sans);justify-content:flex-start;font-size:14px}.ns-taken{color:var(--ink-2);margin:0 0 8px;padding-left:20px;font-size:13px}.ns-taken li{padding:2px 0}@media (pointer:coarse){.ns-log-line,.ns-chip,.ns-rule-fields select,.ns-services select{min-height:44px}}@media (width<=720px){.ns-rule-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.ns-req-verdict{width:90px}.ns-flows li{grid-template-columns:1fr auto}.ns-dir{grid-column:1/-1}}.ns-row .btn{white-space:normal;text-align:left;max-width:100%;line-height:1.3}.field .ns-toggle{font:400 14px/1.4 var(--sans);letter-spacing:0;text-transform:none;color:var(--ink)}.ns-stack{flex-direction:column;gap:20px;display:flex}.ns-learn-controls{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:16px 24px;display:grid}@media (width<=900px){.ns-learn-controls{grid-template-columns:minmax(0,1fr)}}
