:root{--red:#c8102e;--red-d:#a00d25;--bg:#f5f6f8;--card:#fff;--line:#e4e6ea;--text:#1d2129;--muted:#6b7280;--green:#1f8a4c;--amber:#b7791f;--purple:#6b46c1;--blue:#2b6cb0}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
a{color:var(--red);text-decoration:none}a:hover{text-decoration:underline}
h1{font-size:26px;margin:0 0 2px}h2{font-size:17px;margin:0 0 8px}h3{font-size:14px;margin:18px 0 8px}
.muted{color:var(--muted)}.small{font-size:12px}.right{margin-left:auto}.pad{padding:18px}.pad-s{padding-top:8px}.narrow{max-width:640px}.inline{display:inline}
.top{background:#fff;border-top:3px solid var(--red);border-bottom:1px solid var(--line)}
.top-in{max-width:1480px;margin:0 auto;padding:10px 20px;display:flex;align-items:center;gap:28px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:14px;color:var(--text)!important;text-decoration:none!important}
.brand-mark{font-family:Georgia,"Times New Roman",serif;font-style:italic;font-size:24px;color:var(--red);border-right:1px solid var(--line);padding-right:14px}
.brand-title{font-weight:600;font-size:16px}
.nav{display:flex;gap:26px;flex:1}.nav a{color:var(--muted);padding:6px 0;font-weight:600;border-bottom:2px solid transparent}.nav a.active{color:var(--red);border-color:var(--red)}
.who{display:flex;align-items:center;gap:10px}.who-name{color:var(--muted)}
.pill{background:#e8eaee;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600}
.wrap{max-width:1480px;margin:0 auto;padding:16px 20px 40px}
.foot{text-align:center;color:var(--muted);font-size:12px;padding:18px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:16px}
.card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.section{margin-bottom:16px}.sec-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:10px}.sec-head h2{margin:0;font-size:20px}
.sec-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.hero{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:14px;margin:6px 0 18px}
.search{display:flex;gap:10px;flex-wrap:wrap}.search input[type=search]{width:360px;max-width:100%}.search select{min-width:170px}
input,select,textarea{font:inherit;padding:9px 11px;border:1px solid #cfd3da;border-radius:8px;background:#fff;color:var(--text);width:100%}
.search input,.search select{width:auto}input:focus,select:focus{outline:2px solid #f2b6c0;border-color:var(--red)}
input[readonly]{background:#f3f4f6}input.wide{max-width:420px;margin:6px 0 12px}
label{display:block;font-weight:600;font-size:12px;margin-bottom:12px;color:#374151}label input,label select{margin-top:5px;font-weight:400}label.wide{grid-column:1/-1}
label.check{display:flex;gap:8px;align-items:center;font-weight:400}label.check input{width:auto;margin:0}
.btn{display:inline-block;border:1px solid #cfd3da;background:#fff;color:var(--text);border-radius:8px;padding:8px 14px;font:inherit;font-weight:600;cursor:pointer;text-decoration:none!important}
.btn:hover{background:#f3f4f6}.btn[disabled]{opacity:.5;cursor:not-allowed}.btn-sm{padding:5px 10px;font-size:12px}
.btn-primary{background:var(--red);border-color:var(--red);color:#fff!important}.btn-primary:hover{background:var(--red-d)}
.btn-danger{background:#b42318;border-color:#b42318;color:#fff!important}.btn-outline{background:#fff}.btn-outline-red{border-color:#f2b6c0;color:var(--red)!important;background:#fff}.btn-gray{background:#e8eaee;border-color:#e8eaee}
.btn-block{width:100%;padding:11px}.linkbtn{background:none;border:0;color:var(--red);font:inherit;font-weight:600;cursor:pointer;padding:0}
.link{font-weight:600}.back{display:inline-block;margin:0 0 10px;color:var(--red);font-weight:600}
.badge{display:inline-block;border-radius:999px;padding:2px 9px;font-size:11.5px;font-weight:600;border:1px solid transparent;white-space:nowrap;margin:0 4px 4px 0}
.b-green{background:#e6f4ec;color:#176b3b;border-color:#bfe3cd}.b-amber{background:#fdf1dc;color:#8a5a10;border-color:#f2d9a6}.b-red{background:#fde8ea;color:#a00d25;border-color:#f6c2c8}
.b-purple{background:#efe9fb;color:#553096;border-color:#d8cbf3}.b-blue{background:#e5effa;color:#1f4f87;border-color:#bcd3ee}.b-gray{background:#eceef1;color:#4b5563;border-color:#dde0e5}
.chip-gray{background:#eceef1;border-radius:999px;padding:2px 10px;font-size:12px}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;background:#9ca3af}.d-green{background:#1f8a4c}.d-red{background:#c8102e}.d-gray{background:#7b8190}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:12px;font-weight:600}.flash-ok{background:#e6f4ec;color:#176b3b}.flash-err{background:#fde8ea;color:#a00d25}
.banner{display:flex;gap:10px;align-items:center;padding:10px 16px;border-radius:10px;margin-bottom:10px;background:#e6f4ec;color:#176b3b;border:1px solid #bfe3cd}
.banner strong{flex:0 1 auto}.banner .banner-meta{margin-left:auto;font-size:12px}.banner a{margin-left:14px;font-weight:700}
.banner-loading{background:#eef0f3;color:#4b5563;border-color:#dde0e5}.banner-warn{background:#fdf1dc;color:#8a5a10;border-color:#f2d9a6}.banner-out{background:#fde8ea;color:#a00d25;border-color:#f6c2c8}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.tile{display:flex;flex-direction:column;position:relative;background:#fff;border:1px solid var(--line);border-left:4px solid #1f8a4c;border-radius:10px;padding:12px 28px 12px 14px;color:var(--text);text-decoration:none!important}
.tile:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.tile.sel{outline:2px solid var(--red)}.tile-name{font-weight:700;font-size:15px}.tile-sub{color:var(--muted);font-size:12px;margin-top:2px}
.tile .chev{position:absolute;right:12px;top:14px;color:var(--muted)}.tile-sm{border-left-color:var(--red);min-width:200px}
.cellrow{display:flex;gap:20px;align-items:center;flex-wrap:wrap;padding:14px 18px;margin:12px 0 0}.tiles-cell{flex:1;grid-template-columns:repeat(auto-fill,minmax(200px,230px))}
.activefilter{margin:0 0 12px;padding:8px 14px;background:#fff;border:1px dashed #d0d4db;border-radius:8px}
.grid2{display:grid;grid-template-columns:1.25fr 1fr;gap:16px;align-items:start}.grid2.eq{grid-template-columns:1fr 1fr}
.grid2>.card{margin-bottom:0}.grid2{margin-bottom:16px}
.card .card-head{padding:14px 18px 0}.pad .card-head{padding:0}
.map{height:520px;margin:12px 18px 0;border-radius:10px;overflow:hidden;background:#e9ecef;position:relative}.map-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted)}
.legend-row{display:flex;gap:18px;padding:10px 18px;align-items:center;flex-wrap:wrap}
.tabs{display:flex;gap:8px;padding:10px 18px}.tab{padding:4px 12px;border-radius:999px;background:#eceef1;color:#374151;font-size:12px;font-weight:600}.tab.on{background:#fde8ea;color:var(--red)}.tab:hover{text-decoration:none}
.tabs.mgmt{padding:0 0 12px}.tabs.mgmt .tab{font-size:13px;padding:6px 14px}
.list-scroll{max-height:560px;overflow:auto}.tscroll{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-size:12px;color:var(--muted);font-weight:600;padding:8px 18px;border-bottom:1px solid var(--line);background:#fafbfc;position:sticky;top:0}
.tbl td{padding:9px 18px;border-bottom:1px solid #eff0f3;vertical-align:top}.pad .tbl th,.pad .tbl td{padding-left:10px;padding-right:10px}.clickrow{cursor:pointer}.clickrow:hover{background:#fafbfc}.chev{color:var(--muted)}
.store-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:14px}.store-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.cp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:12px}
.cp{border:1px solid var(--line);border-radius:10px;padding:14px}.cp-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}
.logo-pill{font-size:11px;font-weight:700;color:#4b5563;background:#f1f2f5;border-radius:6px;padding:3px 8px;letter-spacing:.02em}
.badges{margin:6px 0}.k{font-size:11.5px;color:var(--muted);font-weight:600;margin-top:8px}.v{font-weight:600;word-break:break-word;white-space:pre-line}
.ip{font-size:26px;font-weight:700;letter-spacing:-.5px;margin:2px 0}.ip-none{color:#9ca3af}.ipmeta{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-weight:600}
.kvgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 14px;margin:10px 0}.kvgrid.k3{grid-template-columns:repeat(3,1fr)}.kvgrid.k4{grid-template-columns:repeat(4,1fr)}.kvgrid.k5{grid-template-columns:repeat(5,1fr)}.kvgrid.k2{grid-template-columns:repeat(2,1fr)}
.cp .kvgrid{grid-template-columns:repeat(3,1fr)}.cp .kvgrid.k4{grid-template-columns:repeat(4,1fr)}.kv-wide{grid-column:1/-1}.kv .k{margin-top:0}
.bignum{font-size:34px;font-weight:700}.bigms{font-size:56px;font-weight:800;letter-spacing:-2px;margin:8px 0 4px}
.bands{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:22px 0 8px;text-align:left;font-size:12px}.band span{display:block;height:5px;border-radius:3px;margin-bottom:5px}.band.g span{background:#1f8a4c}.band.a span{background:#e5a93d}.band.r span{background:#c8102e}.band small{color:var(--muted)}
.cred{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}.credrow{display:flex;gap:6px;align-items:center}.credrow input{flex:1;min-width:0}
.ports{display:flex;gap:14px;margin:12px 0}.port{border:2px solid #cfd3da;border-radius:6px;padding:14px 22px;font-weight:700;color:#6b7280;background:#f6f7f9}.port.up{border-color:#1f8a4c;background:#e6f4ec;color:#176b3b}
.notes{margin:8px 0;padding-left:18px}.notes li{margin:3px 0}
.updated{margin-top:6px;padding:6px 4px}.upd-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:6px}
.formgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:0 16px}.row3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.actions{display:flex;gap:10px;justify-content:flex-end;align-items:center;margin-top:16px}.actions.sticky{position:sticky;bottom:0;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 18px;box-shadow:0 -2px 10px rgba(0,0,0,.05)}.actions.sticky .muted{margin-right:auto}
.rolebox{background:#f6f7f9;border-radius:8px;padding:10px 14px;margin-top:10px}.rolebox ul{margin:6px 0 0;padding-left:18px}
.filters{display:flex;gap:8px}.filters select{width:auto}
.provgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.provitem{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:10px;padding:10px 14px;color:var(--text)}.provitem.zero{opacity:.6}
.legend dl{display:grid;grid-template-columns:250px 1fr;gap:8px 12px;margin:8px 0}.legend dd{margin:0}
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg)}
.login-card{width:380px;max-width:92vw;background:#fff;border:1px solid var(--line);border-radius:14px;padding:28px;border-top:4px solid var(--red)}
.login-mark{font-family:Georgia,serif;font-style:italic;font-size:30px;color:var(--red)}.login-card h1{margin-top:10px}.pwrow{display:flex;gap:8px;align-items:center}.pwrow input{margin-top:5px}
.login-err{background:#fde8ea;color:#a00d25;border-radius:8px;padding:9px 12px;margin-bottom:12px;font-weight:600}.login-foot{text-align:center;color:var(--muted);font-size:12px;margin:16px 0 0}
details{margin:6px 0}
@media(max-width:1100px){.cp-grid{grid-template-columns:1fr}.grid2,.grid2.eq{grid-template-columns:1fr}.kvgrid.k5{grid-template-columns:repeat(3,1fr)}.formgrid{grid-template-columns:1fr 1fr}.upd-grid{grid-template-columns:1fr 1fr}.map{height:380px}}
@media(max-width:640px){.top-in{gap:12px}.nav{order:3;width:100%;gap:18px}.kvgrid,.kvgrid.k3,.kvgrid.k4,.kvgrid.k5,.cp .kvgrid,.cp .kvgrid.k4,.formgrid,.row3,.cred{grid-template-columns:1fr 1fr}.formgrid,.row3{grid-template-columns:1fr}.cred{grid-template-columns:1fr}.search input[type=search]{width:100%}.hero h1,h1{font-size:22px}.tiles{grid-template-columns:1fr}.legend dl{grid-template-columns:1fr}.who-name{display:none}.bigms{font-size:44px}.ip{font-size:22px}.tbl th,.tbl td{padding:8px 10px}}
/* logos and firewall images */
.brand-img{height:40px;width:auto;display:block;border-right:1px solid var(--line);padding-right:14px;box-sizing:content-box}
.login-img{display:block;height:54px;width:auto;margin:0 0 4px}
.isp-logo{display:block;max-width:100%;object-fit:contain;object-position:left center}
.tile-logo{display:flex;align-items:center;height:42px;margin-bottom:8px}.tile-logo .isp-logo-tile{max-height:42px;max-width:150px;width:auto;height:auto}
.tile-logo-text{font-weight:800;font-size:16px;color:#374151}
.tile-cell-logo,.tile-sm .isp-logo-cell{max-height:30px;max-width:92px;width:auto;height:auto;flex:none}
.tile-sm{flex-direction:row;align-items:center;gap:12px}.tile-sm .tile-txt{display:flex;flex-direction:column}
.provitem{align-items:flex-start}.provlogo{display:flex;align-items:center;height:48px;margin-bottom:6px}.provlogo .isp-logo-prov{max-height:48px;max-width:170px;width:auto;height:auto}
.isp-namecell{display:flex;align-items:center;gap:12px}.isp-logo-row{height:24px;width:70px;object-position:left center}.isp-logo-ph{display:inline-block;width:70px;flex:none}
.isp-card .card-head{align-items:center}.isp-logo-card{max-height:40px;max-width:150px;width:auto;height:auto}
.brand-logo{max-height:22px;max-width:120px;width:auto;height:auto;display:block;flex:none;margin-top:2px}
.fw-views{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:12px 0 8px;align-items:start}.fw-fig{margin:0}.fw-fig .k{margin:0 0 4px}
.fw-fig img{display:block;width:100%;height:auto}.fw-imgwrap{position:relative}
.fw-port{position:absolute;border-radius:4px;border:3px solid;pointer-events:auto;box-sizing:border-box}
.fw-up{border-color:#1f8a4c;background:rgba(31,138,76,.28);box-shadow:0 0 6px rgba(31,138,76,.8)}
.fw-down{border-color:#c8102e;background:rgba(200,16,46,.30);box-shadow:0 0 6px rgba(200,16,46,.8)}
.fw-ready{border-color:#2b6cb0;background:rgba(43,108,176,.25)}
.fw-nc{border-color:#9ca3af;background:rgba(255,255,255,.55);border-style:solid}
.fw-unk{border-color:#9ca3af;border-style:dashed;background:rgba(156,163,175,.25)}
.fw-na{border-color:#cbd0d8;border-style:dashed;background:transparent}
@media(max-width:700px){.fw-views{grid-template-columns:1fr}.brand-img{height:32px}}

@media print{.top,.foot,.actions,.btn{display:none}body{background:#fff}}
