:root{
  --bg:#050905;
  --panel:#101810;
  --panel2:#162116;
  --panel3:#0b120b;
  --line:#334133;
  --line2:#4a5d4a;
  --text:#ecfdf5;
  --muted:#9cae9c;
  --green:#84ff84;
  --cyan:#7dd3fc;
  --amber:#ffbf5f;
  --red:#ff6b6b;
  --blue:#60a5fa;
  --shadow:0 18px 50px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
html,body{
  margin:0;
  min-height:100%;
  background:
    radial-gradient(circle at top left,rgba(132,255,132,.12),transparent 30%),
    radial-gradient(circle at top right,rgba(125,211,252,.10),transparent 30%),
    var(--bg);
  color:var(--text);
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
body::after{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:999;
  background:
    linear-gradient(rgba(125,211,252,.025) 1px,transparent 1px),
    linear-gradient(90deg,rgba(125,211,252,.018) 1px,transparent 1px);
  background-size:42px 42px;
  mask-image:radial-gradient(circle at center,black 0%,transparent 82%);
  opacity:.55;
}
a{color:inherit}
button,.btn,a.btn,select,input{border-radius:0!important}
button,.btn,a.btn{
  color:var(--text);
  background:#172117;
  border:1px solid #435443;
  padding:9px 12px;
  text-decoration:none;
  font-weight:850;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  min-height:38px;
  position:relative;
  overflow:hidden;
  isolation:isolate;
  transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease,color .14s ease,background .14s ease;
}
button::before,.btn::before,a.btn::before{
  content:"";
  position:absolute;
  top:0;
  left:-130%;
  width:85%;
  height:100%;
  background:linear-gradient(90deg,transparent,rgba(125,211,252,.30),rgba(132,255,132,.18),transparent);
  transform:skewX(-22deg);
  z-index:-1;
  transition:left .34s ease;
}
button::after,.btn::after,a.btn::after{
  content:"";
  position:absolute;
  inset:3px;
  border:1px solid transparent;
  pointer-events:none;
  transition:border-color .14s ease,box-shadow .14s ease;
}
button:hover,.btn:hover,a.btn:hover{
  transform:translateY(-1px);
  border-color:rgba(125,211,252,.92);
  color:#ecfeff;
  box-shadow:
    0 0 0 1px rgba(125,211,252,.22) inset,
    0 0 18px rgba(125,211,252,.24),
    0 0 34px rgba(132,255,132,.12);
}
button:hover::before,.btn:hover::before,a.btn:hover::before{left:130%}
button:hover::after,.btn:hover::after,a.btn:hover::after{
  border-color:rgba(132,255,132,.38);
  box-shadow:0 0 10px rgba(132,255,132,.12) inset;
}
button:active,.btn:active,a.btn:active{transform:translateY(0) scale(.985)}
button:focus-visible,.btn:focus-visible,a.btn:focus-visible,input:focus-visible,select:focus-visible{
  outline:2px solid var(--green);
  outline-offset:3px;
}
input,select{
  background:#091109;
  color:var(--text);
  border:1px solid #3a4b3a;
  padding:9px 10px;
  min-height:38px;
}
input::placeholder{color:#728272}
.npn-boot{
  position:fixed;
  inset:0;
  z-index:999999;
  display:grid;
  place-items:center;
  background:
    radial-gradient(circle at 50% 40%,rgba(125,211,252,.16),transparent 30%),
    radial-gradient(circle at 30% 65%,rgba(132,255,132,.10),transparent 32%),
    linear-gradient(180deg,rgba(2,6,23,.98),rgba(5,9,5,.98));
  color:#ecfdf5;
  font-family:"Courier New",Consolas,monospace;
  overflow:hidden;
  opacity:1;
  transition:opacity .45s ease,visibility .45s ease;
}
.npn-boot.loaded{opacity:0;visibility:hidden;pointer-events:none}
.npn-boot::before{
  content:"";
  position:absolute;
  inset:0;
  background-image:
    linear-gradient(rgba(125,211,252,.07) 1px,transparent 1px),
    linear-gradient(90deg,rgba(125,211,252,.07) 1px,transparent 1px);
  background-size:34px 34px;
  animation:gridDrift 4s linear infinite;
  mask-image:radial-gradient(circle at center,black 20%,transparent 78%);
}
.npn-boot::after{
  content:"";
  position:absolute;
  inset:-40%;
  background:linear-gradient(115deg,transparent 35%,rgba(125,211,252,.10) 48%,rgba(132,255,132,.10) 52%,transparent 65%);
  animation:scanSweep 1.45s ease-in-out infinite;
}
.boot-card{
  position:relative;
  width:min(620px,calc(100vw - 34px));
  border:1px solid rgba(125,211,252,.65);
  background:linear-gradient(180deg,rgba(15,23,42,.92),rgba(5,9,5,.92));
  box-shadow:
    0 0 0 1px rgba(132,255,132,.18) inset,
    0 0 28px rgba(125,211,252,.28),
    0 0 80px rgba(132,255,132,.10);
  padding:24px;
  clip-path:polygon(0 0,calc(100% - 22px) 0,100% 22px,100% 100%,22px 100%,0 calc(100% - 22px));
}
.boot-title{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  font-weight:950;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--green);
  text-shadow:0 0 12px rgba(132,255,132,.35);
  margin-bottom:14px;
}
.boot-sub{
  color:#bae6fd;
  font-size:12px;
  letter-spacing:.10em;
  text-transform:uppercase;
  margin-bottom:18px;
}
.boot-lines{
  color:#cbd5e1;
  font-size:12px;
  line-height:1.7;
  margin-bottom:18px;
}
.boot-lines span{color:var(--amber)}
.boot-bar{
  height:12px;
  border:1px solid rgba(125,211,252,.55);
  background:rgba(2,6,23,.82);
  overflow:hidden;
  position:relative;
}
.boot-bar::before{
  content:"";
  position:absolute;
  inset:0;
  width:45%;
  background:linear-gradient(90deg,transparent,rgba(125,211,252,.95),rgba(132,255,132,.95),transparent);
  animation:loaderBar 1.15s ease-in-out infinite;
}
.boot-footer{
  margin-top:12px;
  color:#94a3b8;
  font-size:11px;
  display:flex;
  justify-content:space-between;
  gap:10px;
}
.page{min-height:100vh}
.topbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  flex-wrap:wrap;
  padding:14px;
  background:rgba(5,9,5,.84);
  border-bottom:1px solid var(--line);
  backdrop-filter:blur(10px);
}
.brand{display:flex;align-items:center;gap:14px}
.logo{
  width:72px;
  height:72px;
  display:grid;
  place-items:center;
  background:linear-gradient(135deg,#9fff89,#ffd166);
  color:#071007;
  font-weight:950;
  box-shadow:0 0 24px rgba(255,209,102,.25);
}
.logo img{
  display:block;
  width:100%;
  height:100%;
  object-fit:contain;
}
.title{font-size:26px;font-weight:950;line-height:1.05}
.subtitle{color:var(--muted);font-size:12px;margin-top:3px}
.actions{display:flex;gap:8px;flex-wrap:wrap}
.panel{
  background:linear-gradient(180deg,var(--panel2),var(--panel));
  border:1px solid var(--line);
  box-shadow:var(--shadow);
}
.panel-head{
  padding:12px 14px;
  background:#101810;
  border-bottom:1px solid var(--line);
  font-weight:950;
  text-transform:uppercase;
  letter-spacing:.1em;
  font-size:12px;
}
.panel-body{padding:12px 14px}
.card{
  background:linear-gradient(180deg,var(--panel2),var(--panel));
  border:1px solid var(--line);
  box-shadow:var(--shadow);
  padding:14px;
}
.label{
  color:var(--muted);
  font-size:11px;
  text-transform:uppercase;
  letter-spacing:.11em;
  font-weight:900;
  margin-bottom:8px;
}
.value{
  font-family:"Courier New",monospace;
  color:var(--amber);
  font-weight:950;
  font-size:30px;
  line-height:1;
}
.pill{
  display:inline-block;
  padding:4px 7px;
  border-radius:0!important;
  border:1px solid #465a46;
  background:#162116;
  font-weight:900;
  font-size:10px;
  margin:1px 2px 1px 0;
  white-space:nowrap;
}
.yes{color:#041204;background:var(--green);border-color:#b7ffb7}
.no{color:#fff;background:#401616;border-color:#813636}
.warn{color:#2a1500;background:var(--amber);border-color:#ffe0a0}
.info{color:#001720;background:var(--cyan);border-color:#b7edff}
code{color:#c9f0ff;word-break:break-all;font-size:11px}
table{width:100%;border-collapse:collapse}
th,td{
  border-bottom:1px solid rgba(148,163,184,.15);
  padding:8px 7px;
  text-align:left;
  vertical-align:top;
}
th{
  color:#cbd5cb;
  text-transform:uppercase;
  letter-spacing:.08em;
  font-size:10px;
}
details summary{cursor:pointer;color:#d9f99d;font-weight:900}
pre{
  white-space:pre-wrap;
  word-break:break-word;
  max-height:240px;
  overflow:auto;
  background:#060a06;
  border:1px solid #263126;
  padding:10px;
  color:#dbeafe;
  font-size:11px;
}
.small{color:var(--muted);font-size:12px;line-height:1.5}
@keyframes loaderBar{0%{left:-55%}100%{left:115%}}
@keyframes gridDrift{from{transform:translate3d(0,0,0) scale(1.02)}to{transform:translate3d(34px,34px,0) scale(1.02)}}
@keyframes scanSweep{0%{transform:translateX(-30%) translateY(-10%);opacity:.2}50%{opacity:.65}100%{transform:translateX(30%) translateY(10%);opacity:.2}}
.map-layout{
  display:grid;
  grid-template-columns:320px 1fr 320px;
  height:calc(100vh - 77px);
}
.sidebar{
  overflow:auto;
  border-right:1px solid var(--line);
  background:rgba(5,9,5,.88);
  padding:12px;
}
.sidebar.right{border-right:none;border-left:1px solid var(--line)}
#map{
  width:100%;
  height:100%;
  min-height:500px;
  background:#050905;
}
.form-row{display:grid;gap:6px;margin-bottom:10px}
.form-row label{
  color:var(--muted);
  font-size:11px;
  text-transform:uppercase;
  letter-spacing:.09em;
  font-weight:900;
}
.check-row{
  display:flex;
  align-items:center;
  gap:8px;
  margin:8px 0;
  color:var(--text);
  font-size:13px;
}
.stat-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin-bottom:12px;
}
.stat{
  background:#0b120b;
  border:1px solid var(--line);
  padding:10px;
}
.stat .num{
  color:var(--amber);
  font-family:"Courier New",monospace;
  font-size:22px;
  font-weight:950;
}
.stat .txt{
  color:var(--muted);
  font-size:10px;
  text-transform:uppercase;
  letter-spacing:.08em;
}
.node-list{display:grid;gap:8px}
.node-item{
  border:1px solid var(--line);
  background:#0b120b;
  padding:9px;
}
.node-name{font-weight:950}
.node-meta{color:var(--muted);font-size:11px;margin-top:3px}
.leaflet-popup-content-wrapper,.leaflet-popup-tip{
  border-radius:0!important;
  background:#0b120b!important;
  color:var(--text)!important;
  border:1px solid var(--line);
}
.leaflet-control a,.leaflet-control button{border-radius:0!important}
.marker-pin{
  width:26px;
  height:26px;
  display:grid;
  place-items:center;
  color:#061006;
  font-weight:950;
  border:2px solid rgba(255,255,255,.8);
  box-shadow:0 0 16px rgba(125,211,252,.45);
  clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);
}
.marker-client{background:var(--cyan)}
.marker-repeater{background:var(--green)}
.marker-room{background:var(--amber)}
.marker-anchor{background:#f97316}
.marker-unknown{background:#cbd5e1}
.score-page{padding:18px}
.board-shell{
  background:linear-gradient(180deg,#1b241b 0%,#0d130d 100%);
  border:8px solid #384538;
  box-shadow:0 0 0 3px #161f16 inset,0 25px 70px rgba(0,0,0,.45);
  padding:20px;
  margin-bottom:18px;
}
.stadium-head{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  margin-bottom:14px;
  flex-wrap:wrap;
}
.stadium-title{
  font-size:22px;
  font-weight:950;
  letter-spacing:.06em;
  color:#f1f6f1;
  text-transform:uppercase;
}
.scoreboard-table-wrap{
  overflow-x:auto;
  border:3px solid #566756;
  background:#090d09;
}
.linescore{min-width:960px}
.linescore th,.linescore td{
  border:1px solid #405040;
  text-align:center;
  padding:10px 8px;
}
.linescore thead th{background:#111811;color:#dbe7db}
.team-col{
  text-align:left!important;
  min-width:210px;
  padding-left:14px!important;
  font-weight:950;
  color:#f8fff8;
  background:#101710;
}
.team-meta{
  display:block;
  color:var(--muted);
  font-size:11px;
  font-weight:600;
  margin-top:3px;
  letter-spacing:.05em;
}
.digit{
  font-family:"Courier New",Consolas,monospace;
  font-size:26px;
  font-weight:950;
  color:#ffd27a;
  text-shadow:0 0 6px rgba(255,179,71,.25),0 0 12px rgba(255,179,71,.15);
  background:#060806;
}
.summary-grid{
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:14px;
  margin-top:16px;
}
.two-col{
  display:grid;
  grid-template-columns:1.15fr .85fr;
  gap:18px;
}
.diag-page{padding:18px}
.diag-grid{
  display:grid;
  grid-template-columns:repeat(7,1fr);
  gap:12px;
  margin-bottom:14px;
}
@media (max-width:1250px){
  .map-layout{grid-template-columns:280px 1fr}
  .sidebar.right{display:none}
  .summary-grid,.diag-grid{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:850px){
  .map-layout{display:block;height:auto}
  .sidebar{border-right:none;border-bottom:1px solid var(--line)}
  #map{height:70vh}
  .two-col{grid-template-columns:1fr}
  .summary-grid,.diag-grid,.stat-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:620px){
  .score-page,.diag-page{padding:10px}
  .summary-grid,.diag-grid{grid-template-columns:1fr}
  .title{font-size:18px}
}
@media (prefers-reduced-motion:reduce){
  .npn-boot::before,.npn-boot::after,.boot-bar::before,button::before,.btn::before,a.btn::before{
    animation:none!important;
    transition:none!important;
  }
}
