:root{color:#d7ecff;background:#070b12;font-family:Segoe UI,system-ui,sans-serif;line-height:1.4}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at top,#122033,#070b12 55%)}.app{max-width:1100px;margin:0 auto;padding:24px 20px 48px}h1,h2,h3{font-weight:650;margin:0 0 12px}header{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;margin-bottom:20px}.brand h1{margin:0}h1 .home-link{color:inherit;text-decoration:none}.app-version{margin:2px 0 0;font-size:.75rem;font-weight:600;letter-spacing:.04em;color:#8eabc4}.upload{background:#1b4f86;color:#fff;padding:8px 14px;border-radius:8px;cursor:pointer;border:1px solid transparent;text-decoration:none;display:inline-block}.upload.ghost{background:transparent;border-color:#3a5a7a;color:#d7ecff}.upload.ghost:hover,.upload.ghost:focus-visible{border-color:#6ec1ff;color:#9fd4ff}.upload.secondary:disabled{opacity:.55;cursor:default}.placeholder a{color:#9fd4ff}.upload input{display:none}.hint,.placeholder{color:#9bb4cc;margin:0;flex-basis:100%}.error{color:#ffb4b4;background:#3a1515;padding:10px 12px;border-radius:8px}.diagram{position:relative;display:grid;justify-items:center;gap:8px;margin:24px 0}.link-layer{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:3}.link-hit{stroke:transparent;stroke-width:14;pointer-events:stroke;cursor:pointer}.link-stroke{fill:none;stroke-width:2.5;pointer-events:none}.link-stroke.wan,.link-stroke.lan{stroke:#6ec1ff}.link-label{fill:#d7ecff;font-size:17px;pointer-events:none}.link-tooltip{position:absolute;z-index:4;max-width:280px;padding:8px 10px;border-radius:8px;background:#0f1a28;border:1px solid #3a5a7a;font-size:.82rem;pointer-events:none;box-shadow:0 8px 24px #00000073}.link-tooltip-vpns{margin-top:4px;color:#9fd4ff}.edge-cloud,.site-cloud{position:relative;display:grid;place-items:center;text-align:center}.edge-cloud{width:min(340px,78vw)}.edge-cloud img,.site-cloud-art{width:100%;display:block;pointer-events:none}.edge-cloud-title{position:absolute;top:36%;font-size:1.85rem;font-weight:700;letter-spacing:.08em}.edge-cloud-sub{position:absolute;top:58%;font-size:1.05rem;color:#9fd4ff;max-width:80%}.site-cloud{width:min(720px,100%)}.site-cloud-label{position:absolute;top:30%;max-width:72%;font-size:1.65rem;font-weight:700;letter-spacing:.06em;line-height:1.25;text-align:center;z-index:4}.local-as-link{padding:0;border:0;background:transparent;color:inherit;font:inherit;letter-spacing:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.local-as-link:hover,.local-as-link:focus-visible{color:#9fd4ff}.site-routers{position:absolute;top:26%;right:8%;bottom:46%;left:8%;display:flex;justify-content:space-evenly;align-items:center}.vip-block{position:absolute;left:50%;top:55%;bottom:27%;width:max-content;max-width:72%;transform:translate(-50%);display:flex;flex-direction:column;align-items:stretch;z-index:4;min-height:0}.vip-heading{margin:0 0 3px;font-size:1.05rem;font-weight:700;letter-spacing:.06em;text-align:center;flex:none}.vip-prefixes{display:flex;flex-direction:column;align-items:stretch;gap:1px;min-height:0;overflow-y:auto}.vip-prefix{display:block;padding:1px 8px;border-radius:6px;font-size:.68rem;font-weight:700;line-height:1.3;font-variant-numeric:tabular-nums;text-align:left;white-space:nowrap;background:#070b128c}.vip-prefix.ok{color:#7dffb3}.vip-prefix.warning{color:#e0a04e}.vip-prefix.alarm{color:#e04e4e}.router{position:relative;width:28%;max-width:150px;text-align:center}.router img{width:100%;display:block}.router-icon{position:relative}.markers{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;gap:6px;padding:0;border:0;background:transparent;cursor:pointer}.marker{min-width:28px;height:28px;padding:0 6px;border-radius:999px;display:grid;place-items:center;font-size:.95rem;font-weight:800;line-height:1}.router-name{display:block;width:100%;margin-top:-42px;padding:0;border:0;background:transparent;color:inherit;font-size:1.25rem;font-weight:700;line-height:1.1;position:relative;z-index:1;cursor:pointer}.router-name:hover,.router-name:focus-visible{color:#9fd4ff}.router-uptime-popup{position:absolute;left:50%;top:calc(100% + 4px);transform:translate(-50%);z-index:5;min-width:150px;max-width:220px;padding:8px 10px;border-radius:8px;background:#0f1a28;border:1px solid #3a5a7a;font-size:.78rem;font-weight:500;line-height:1.35;color:#d7ecff;box-shadow:0 8px 24px #00000073}.marker.alarm{background:#e04e4e;color:#2a0808}.marker.warning{background:#e0a04e;color:#2a1a08}.finding-detail{margin:8px 0 0;color:#c5d4e4;font-size:.92rem}.tests ul{list-style:none;padding:0;margin:0}.tests li{padding:8px 10px;border-radius:8px;margin-bottom:6px;background:#121a26}.tests li.notification{border-left:4px solid #3d9a63}.tests li.warning{border-left:4px solid #e0a04e}.tests li.alarm{border-left:4px solid #e04e4e}.tests li.empty{color:#9bb4cc}.popup-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:20px;background:#0000008c}.popup{max-width:520px;width:min(520px,100%);padding:20px 22px;border-radius:12px;background:#152233;border:1px solid #3a5a7a}.popup.warning{border-color:#e0a04e}.popup.alarm{border-color:#e04e4e}.popup h3{margin-bottom:4px}.popup-test{margin:0 0 12px;color:#9bb4cc}.popup-items{margin:0 0 12px;padding-left:1.2rem}.popup-hint{margin:0 0 16px;color:#9bb4cc;font-size:.9rem}code{color:#c9e4ff}.csv-guide{display:grid;gap:16px}.csv-guide-lead{margin:0 0 4px;color:#9bb4cc;max-width:46rem}.info-section-title{margin:8px 0 0}.csv-card{display:grid;grid-template-columns:auto 1fr;gap:14px 16px;padding:16px 18px;border-radius:12px;background:#0f1a28c7;border:1px solid #3a5a7a}.csv-card-kicker{width:2rem;height:2rem;border-radius:999px;display:grid;place-items:center;background:#1b4f86;font-weight:700;font-size:.9rem}.csv-card-body{min-width:0}.csv-card h3{margin:0 0 8px;font-size:1.15rem}.csv-card p{margin:0 0 10px;color:#9bb4cc}.csv-note{font-style:italic}.csv-columns{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}.csv-columns span{padding:3px 8px;border-radius:999px;background:#122033;border:1px solid #3a5a7a;font-size:.78rem;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;color:#9fd4ff}.csv-fields{width:100%;border-collapse:collapse;margin:0 0 12px;font-size:.9rem}.csv-fields th,.csv-fields td{text-align:left;padding:6px 8px;border-bottom:1px solid #2a4058;vertical-align:top}.csv-fields thead th{color:#9bb4cc;font-size:.75rem;letter-spacing:.04em;text-transform:uppercase;font-weight:650}.csv-fields tbody th{width:9.5rem;color:#9fd4ff;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:.82rem;font-weight:650}.csv-example-label{margin:0 0 6px;font-size:.75rem;letter-spacing:.04em;text-transform:uppercase;color:#9bb4cc;font-weight:650}.csv-card pre{margin:0;padding:10px 12px;overflow-x:auto;border-radius:8px;background:#070b12;border:1px solid #2a4058}.csv-card code{font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:.82rem;white-space:pre}@media(max-width:640px){.csv-card{grid-template-columns:1fr}.csv-fields tbody th{width:auto}}
