:root{--bg-0:#0a0e14;--bg-1:#0d1117;--bg-2:#161b22;--bg-3:#21262d;--border:#30363d;--border-accent:#00d4aa33;--text-primary:#e6edf3;--text-secondary:#8b949e;--text-muted:#484f58;--accent:#00d4aa;--accent-dim:#00d4aa66;--accent-glow:0 0 12px #00d4aa44;--danger:#f85149;--warn:#d29922;--success:#3fb950;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--header-h:56px;--sidebar-w:260px;--map-h:60vh;--font-display:"Exo 2", system-ui, sans-serif;--font-body:"Inter", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--pico-background-color:var(--bg-0);--pico-color:var(--text-primary);--pico-primary:var(--accent);--pico-card-background-color:var(--bg-1)}[data-theme=light]{--bg-0:#f6f8fa;--bg-1:#fff;--bg-2:#eaeef2;--bg-3:#d0d7de;--border:#d0d7de;--border-accent:#00b89644;--text-primary:#1f2328;--text-secondary:#656d76;--text-muted:#9198a1;--accent:#00856d;--accent-dim:#00856d66;--accent-glow:0 0 12px #00856d33}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;font-size:14px}body{background:var(--bg-0);color:var(--text-primary);font-family:var(--font-body);margin:0;font-size:1rem;line-height:1.5}#app-layout{flex-direction:column;height:100dvh;display:flex;overflow:hidden}#app-header{height:var(--header-h);background:var(--bg-1);border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:1rem;padding:0 1.25rem;display:flex}.header-left{align-items:center;gap:1rem;display:flex}.header-right{flex:1;justify-content:flex-end;display:flex}.app-title{font-family:var(--font-display);color:var(--accent);letter-spacing:.02em;text-shadow:var(--accent-glow);margin:0;font-size:1.25rem;font-weight:700}#main-content{flex:1;display:flex;overflow:hidden}#content-area{flex-direction:column;flex:1;gap:.75rem;padding:.75rem;display:flex;overflow:auto}#filter-panel{width:var(--sidebar-w);background:var(--bg-1);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;gap:.75rem;padding:1rem;display:flex;overflow-y:auto}.panel-title{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);margin:0 0 .25rem;font-size:.875rem;font-weight:700}.filter-group{flex-direction:column;gap:.25rem;display:flex}.filter-group label{color:var(--text-secondary);font-size:.8125rem;font-weight:500}.filter-group input[type=text],.filter-group input[type=datetime-local],.filter-group select{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-body);outline:none;width:100%;padding:.35rem .5rem;font-size:.875rem;transition:border-color .15s}.filter-group input[type=text]:focus,.filter-group input[type=datetime-local]:focus,.filter-group select:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-dim)}.filter-group input[type=range]{-webkit-appearance:none;background:var(--bg-3);cursor:pointer;border-radius:2px;outline:none;width:100%;height:4px}.filter-group input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent);cursor:pointer;width:14px;height:14px;box-shadow:var(--accent-glow);border-radius:50%}.filter-group--check label{cursor:pointer;flex-direction:row;align-items:center;gap:.4rem;display:flex}.filter-value{font-family:var(--font-mono);color:var(--accent)}.filter-actions{flex-direction:column;gap:.4rem;margin-top:.5rem;display:flex}.btn{border-radius:var(--radius-sm);border:1px solid var(--border);font-family:var(--font-body);cursor:pointer;text-align:center;padding:.45rem .75rem;font-size:.875rem;font-weight:500;transition:background .15s,border-color .15s}.btn--primary{background:var(--accent);border-color:var(--accent);color:#000}.btn--primary:hover{background:#00b899;border-color:#00b899}.btn--secondary{background:var(--bg-2);color:var(--text-primary)}.btn--secondary:hover{background:var(--bg-3)}.btn--live{background:var(--bg-2);color:var(--text-secondary);border-color:var(--border)}.btn--live-on{color:var(--success);border-color:var(--success);background:#1a2e22;box-shadow:0 0 8px #3fb95033}#stats-bar{flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.8125rem;display:flex}.stat-item{align-items:baseline;gap:.3rem;display:flex}.stat-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem}.stat-value{color:var(--text-primary);font-weight:600}.stat-sep{color:var(--border)}.stat-loading{color:var(--text-muted);font-style:italic}#map-container{border-radius:var(--radius-md);border:1px solid var(--border-accent);box-shadow:var(--accent-glow);flex-shrink:0;overflow:hidden}#map{height:var(--map-h);background:var(--bg-2);width:100%}.grid-label{font-family:var(--font-mono);color:var(--accent);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;background:#0a0e148c;border-radius:2px;padding:1px 3px;font-size:.625rem;font-weight:600;display:inline-block;transform:translate(-50%,-50%)}[data-theme=light] .grid-label{color:var(--accent);background:#f6f8faa6}.grid-cluster{background:var(--cluster-color,var(--accent));color:#000;width:28px;height:28px;font-family:var(--font-mono);cursor:pointer;opacity:.9;border:2px solid #ffffffbf;border-radius:50%;justify-content:center;align-items:center;font-size:.6875rem;font-weight:700;transition:transform .1s,opacity .1s;display:flex;box-shadow:0 2px 8px #00000073}.grid-cluster:hover{opacity:1;transform:scale(1.15)}.leaflet-popup-content-wrapper{background:var(--bg-1)!important;color:var(--text-primary)!important;border:1px solid var(--border)!important;border-radius:var(--radius-md)!important;font-family:var(--font-body)!important;font-size:.8125rem!important;box-shadow:0 4px 20px #00000080!important}.leaflet-popup-tip{background:var(--bg-1)!important}.leaflet-popup-content{margin:.6rem .75rem!important}.popup-callsign{font-family:var(--font-display);color:var(--accent);margin-bottom:.3rem;font-size:1rem;font-weight:700}.popup-grid{font-family:var(--font-mono);color:var(--text-secondary);font-size:.8125rem}.popup-row{color:var(--text-secondary);justify-content:space-between;gap:.75rem;font-size:.8125rem;display:flex}.popup-row span:last-child{font-family:var(--font-mono);color:var(--text-primary)}#spot-table-container{border:1px solid var(--border);border-radius:var(--radius-md);flex:1;overflow:auto}#spot-table{border-collapse:collapse;width:100%;font-size:.8125rem}#spot-table thead tr{background:var(--bg-2);z-index:1;position:sticky;top:0}#spot-table th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);border-bottom:1px solid var(--border);white-space:nowrap;padding:.5rem .75rem;font-size:.75rem;font-weight:600}#spot-table td{border-bottom:1px solid var(--border);white-space:nowrap;color:var(--text-primary);padding:.375rem .75rem}#spot-table tbody tr{cursor:pointer;transition:background .1s}#spot-table tbody tr:hover{background:var(--bg-2)}#spot-table tbody tr:last-child td{border-bottom:none}#spot-table .row-selected td{background:var(--bg-3);color:var(--accent)}.mono{font-family:var(--font-mono)}.callsign{font-weight:600;font-family:var(--font-mono);color:var(--accent)}.snr-weak{color:var(--danger)!important}.snr-moderate{color:var(--warn)!important}.snr-strong{color:var(--success)!important}.live-badge{border:1px solid var(--border);background:var(--bg-2);color:var(--text-muted);border-radius:100px;align-items:center;gap:.35rem;padding:.25rem .6rem;font-size:.75rem;font-weight:500;display:flex}.live-badge--connected{border-color:var(--success);color:var(--success);background:#1a2e22}.live-badge--connected .live-dot{background:var(--success);box-shadow:0 0 6px var(--success);animation:1.5s ease-in-out infinite pulse}.live-badge--connecting{border-color:var(--warn);color:var(--warn)}.live-badge--connecting .live-dot{background:var(--warn)}.live-badge--error{border-color:var(--danger);color:var(--danger)}.live-badge--error .live-dot{background:var(--danger)}.live-dot{background:var(--text-muted);border-radius:50%;flex-shrink:0;width:8px;height:8px}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.loading{color:var(--text-muted);text-align:center;padding:1rem;font-style:italic}.error{color:var(--danger);padding:1rem;font-size:.875rem}.empty-state{color:var(--text-muted);text-align:center;padding:2rem;font-style:italic}@media (width<=768px){#main-content{flex-direction:column}#filter-panel{border-right:none;border-bottom:1px solid var(--border);width:100%;max-height:50vh}#map{height:40vh}}