*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
    --navy:#0d1b2a;--navy2:#1b3a5c;--blue:#2e6da4;--accent:#00c4ff;
    --green:#00d68f;--text:#e8edf2;--muted:#7a94ab;--surface:#162435;
    --surface2:#1a2e44;--border:#1f3a55;--hover:#1e3550;--error:#ff4d6d;
}
html,body{height:100%;}
body{background:var(--navy);color:var(--text);font-family:'IBM Plex Sans',sans-serif;display:flex;flex-direction:column;min-height:100vh;}
nav.top-nav{height:54px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 28px;gap:8px;position:sticky;top:0;z-index:100;flex-shrink:0;}
.nav-brand{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;color:var(--text);text-decoration:none;margin-right:12px;}
.nav-brand .tag{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--accent);letter-spacing:.15em;}
.nav-tabs{display:flex;gap:4px;flex:1;}
.nav-tab{padding:6px 14px;border-radius:3px;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;transition:all .15s;}
.nav-tab:hover{background:var(--hover);color:var(--text);}
.nav-tab.active{background:var(--navy2);color:var(--accent);}
.nav-right{display:flex;align-items:center;gap:12px;margin-left:auto;}
.nav-user{font-size:12px;color:var(--muted);font-family:'IBM Plex Mono',monospace;}
.btn-logout{padding:6px 14px;background:transparent;border:1px solid var(--border);border-radius:3px;color:var(--muted);font-size:12px;cursor:pointer;transition:all .15s;font-family:'IBM Plex Sans',sans-serif;}
.btn-logout:hover{border-color:var(--error);color:var(--error);}
main{flex:1;padding:28px;overflow:auto;}
/* Login */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;}
.login-page::before{content:'';position:fixed;inset:0;background-image:linear-gradient(var(--border) 1px,transparent 1px),linear-gradient(90deg,var(--border) 1px,transparent 1px);background-size:40px 40px;opacity:.3;pointer-events:none;}
.login-card{position:relative;width:420px;background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:48px 40px;box-shadow:0 24px 80px rgba(0,0,0,.5);animation:slideUp .4s ease;z-index:1;}
.login-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--blue));border-radius:4px 4px 0 0;}
@keyframes slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:32px;}
.login-brand-icon{width:36px;height:36px;background:linear-gradient(135deg,var(--accent),var(--blue));border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:18px;}
.login-brand-name{font-size:18px;font-weight:700;}
.login-brand-tag{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--accent);letter-spacing:.15em;text-transform:uppercase;}
.login-card h1{font-size:22px;font-weight:600;margin-bottom:6px;}
.login-card .subtitle{font-size:13px;color:var(--muted);margin-bottom:28px;}
.form-field{margin-bottom:18px;}
.form-field label{display:block;font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:7px;}
.form-field input{width:100%;padding:11px 13px;background:var(--navy);border:1px solid var(--border);border-radius:3px;color:var(--text);font-family:'IBM Plex Sans',sans-serif;font-size:14px;outline:none;transition:border-color .2s,box-shadow .2s;}
.form-field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(0,196,255,.12);}
.alert-error{padding:10px 14px;background:rgba(255,77,109,.1);border:1px solid rgba(255,77,109,.3);border-radius:3px;color:var(--error);font-size:13px;margin-bottom:16px;}
.btn-primary{width:100%;padding:12px;background:linear-gradient(90deg,var(--blue),var(--accent));color:#fff;font-family:'IBM Plex Sans',sans-serif;font-size:14px;font-weight:600;border:none;border-radius:3px;cursor:pointer;transition:opacity .2s;margin-top:6px;}
.btn-primary:hover{opacity:.9;}
.login-footer{margin-top:24px;font-size:11px;color:var(--muted);text-align:center;font-family:'IBM Plex Mono',monospace;}
/* Filter */
.filter-bar{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:18px 22px;display:flex;align-items:flex-end;gap:20px;flex-wrap:wrap;margin-bottom:20px;}
.filter-group{display:flex;flex-direction:column;gap:6px;}
.filter-group label{font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);}
.filter-group select,.filter-group input[type="date"]{padding:8px 12px;background:var(--navy);border:1px solid var(--border);border-radius:3px;color:var(--text);font-family:'IBM Plex Sans',sans-serif;font-size:13px;outline:none;transition:border-color .2s;min-width:140px;color-scheme:dark;}
.filter-group select:focus,.filter-group input:focus{border-color:var(--accent);}
.btn-run{padding:9px 22px;background:linear-gradient(90deg,var(--blue),var(--accent));color:#fff;font-family:'IBM Plex Sans',sans-serif;font-size:13px;font-weight:600;border:none;border-radius:3px;cursor:pointer;transition:opacity .2s;}
.btn-run:hover{opacity:.9;}
.btn-export{padding:9px 18px;background:transparent;color:var(--green);font-family:'IBM Plex Sans',sans-serif;font-size:13px;font-weight:600;border:1px solid var(--green);border-radius:3px;cursor:pointer;transition:all .2s;}
.btn-export:hover{background:rgba(0,214,143,.1);}
/* Stats */
.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:20px;}
.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:16px 20px;}
.stat-label{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-bottom:8px;}
.stat-value{font-size:28px;font-weight:700;color:var(--accent);font-family:'IBM Plex Mono',monospace;line-height:1;}
/* Report header */
.report-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:12px;}
.report-title{font-size:16px;font-weight:600;}
.report-meta{font-size:12px;color:var(--muted);font-family:'IBM Plex Mono',monospace;}
/* Table */
.table-wrapper{background:var(--surface);border:1px solid var(--border);border-radius:4px;overflow:auto;}
table{width:100%;border-collapse:collapse;font-size:13px;}
thead th{background:var(--surface2);color:var(--muted);font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;padding:11px 14px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;position:sticky;top:0;}
tbody tr{border-bottom:1px solid rgba(31,58,85,.5);transition:background .1s;}
tbody tr:last-child{border-bottom:none;}
tbody tr:hover{background:var(--hover);}
tbody td{padding:10px 14px;vertical-align:top;}
.cell-ip{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--accent);}
.cell-count{font-family:'IBM Plex Mono',monospace;font-size:14px;font-weight:700;color:var(--green);text-align:center;}
.cell-sessions{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--muted);text-align:center;}
.cell-date{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--muted);white-space:nowrap;}
.player-ids{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--muted);max-width:340px;line-height:1.6;word-break:break-all;}
.expand-btn{color:var(--accent);background:none;border:none;cursor:pointer;font-family:'IBM Plex Mono',monospace;font-size:11px;padding:0;}
.state-box{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:64px 20px;color:var(--muted);gap:12px;font-size:14px;}
.state-box .icon{font-size:36px;opacity:.4;}
@media(max-width:700px){.stat-row{grid-template-columns:1fr 1fr;}.filter-bar{flex-direction:column;align-items:stretch;}}

/* ── Status badges (Reports 3 & 4) ───────────────────────────────────────── */
.status-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 3px;
    font-size: 11px;
    font-weight: 600;
    font-family: 'IBM Plex Mono', monospace;
}
.status-red    { background: rgba(192,57,43,0.15);  color: #e74c3c; border: 1px solid rgba(192,57,43,0.3); }
.status-orange { background: rgba(230,126,34,0.15); color: #e67e22; border: 1px solid rgba(230,126,34,0.3); }
