:root{
  --bg:#0b0e14; --panel:#121826; --panel2:#0f1420; --line:#1f2a3d;
  --text:#e8edf5; --muted:#8b98ad; --accent:#4f8cff; --accent2:#7c5cff;
  --ok:#22c07a; --warn:#f5a524; --bad:#ef4d5e; --chip:#1a2336;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  font-size:14px;min-height:100vh}
a{color:var(--accent);text-decoration:none}
.topbar{display:flex;align-items:center;gap:14px;padding:14px 22px;
  background:linear-gradient(90deg,#101626,#0d1220);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:5}
.logo{font-size:17px;font-weight:800;letter-spacing:.4px;
  background:linear-gradient(90deg,var(--accent),var(--accent2));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.topbar .spacer{flex:1}
.botstate{font-size:12px;color:var(--muted)}
.botstate .dot{display:inline-block;width:8px;height:8px;border-radius:50%;
  margin-right:5px;vertical-align:middle}
.dot.on{background:var(--ok)} .dot.off{background:var(--bad)}
.wrap{max-width:1500px;margin:0 auto;padding:20px 22px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:12px;margin-bottom:18px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:14px 16px}
.stat .n{font-size:24px;font-weight:800}
.stat .l{color:var(--muted);font-size:12px;margin-top:3px;text-transform:uppercase;
  letter-spacing:.6px}
.stat.warn .n{color:var(--warn)} .stat.ok .n{color:var(--ok)}
.stat.bad .n{color:var(--bad)}
.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:16px}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);
  background:var(--panel);color:var(--text);padding:9px 14px;border-radius:9px;
  cursor:pointer;font-size:13px;font-weight:600}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:linear-gradient(90deg,var(--accent),var(--accent2));
  border:none;color:#fff}
.btn.small{padding:5px 9px;font-size:12px;border-radius:7px}
.btn.danger{color:var(--bad)}
.btn.ghost{background:transparent}
input[type=file]{display:none}
.search{background:var(--panel);border:1px solid var(--line);color:var(--text);
  padding:9px 12px;border-radius:9px;min-width:220px;font-size:13px}
.flash{padding:11px 14px;border-radius:9px;margin-bottom:14px;font-size:13px}
.flash.ok{background:rgba(34,192,122,.12);border:1px solid rgba(34,192,122,.4)}
.flash.error{background:rgba(239,77,94,.12);border:1px solid rgba(239,77,94,.4)}
.tablewrap{overflow-x:auto;background:var(--panel);border:1px solid var(--line);
  border-radius:12px}
table{width:100%;border-collapse:collapse;min-width:1100px}
th{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);
  text-align:left;padding:11px 12px;border-bottom:1px solid var(--line);
  background:var(--panel2);position:sticky;top:0}
td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top;
  font-size:13px}
tr:last-child td{border-bottom:none}
tr:hover td{background:rgba(79,140,255,.04)}
.badge{display:inline-block;padding:3px 9px;border-radius:20px;font-size:11px;
  font-weight:700}
.badge.Joined{background:rgba(34,192,122,.15);color:var(--ok)}
.badge.Partial{background:rgba(245,165,36,.15);color:var(--warn)}
.badge.Pending{background:var(--chip);color:var(--muted)}
.badge.LinkSent{background:rgba(79,140,255,.15);color:var(--accent)}
.badge.Left{background:rgba(245,165,36,.15);color:var(--warn)}
.badge.Removed,.badge.Expired{background:rgba(239,77,94,.15);color:var(--bad)}
.muted{color:var(--muted);font-size:12px}
.linkline{display:flex;align-items:center;gap:6px;margin:2px 0;font-size:12px}
.linkline .ch{color:var(--muted);min-width:64px;font-size:11px;
  text-transform:uppercase;letter-spacing:.4px}
.linkline code{background:var(--chip);padding:2px 7px;border-radius:6px;
  max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  display:inline-block;vertical-align:middle;font-size:11px}
.copybtn{border:none;background:var(--chip);color:var(--accent);cursor:pointer;
  border-radius:6px;padding:2px 8px;font-size:11px;font-weight:700}
.copybtn:hover{background:var(--accent);color:#fff}
.j{color:var(--ok);font-size:11px;font-weight:700}
.expform{display:flex;gap:5px;align-items:center}
.expform input[type=date]{background:var(--panel2);border:1px solid var(--line);
  color:var(--text);border-radius:7px;padding:4px 6px;font-size:12px;
  color-scheme:dark}
.rowactions{display:flex;flex-direction:column;gap:4px}
.login-box{max-width:360px;margin:12vh auto;background:var(--panel);
  border:1px solid var(--line);border-radius:14px;padding:30px}
.login-box h1{font-size:20px;margin-bottom:6px}
.login-box p{color:var(--muted);font-size:13px;margin-bottom:18px}
.login-box input{width:100%;background:var(--panel2);border:1px solid var(--line);
  color:var(--text);padding:11px 12px;border-radius:9px;margin-bottom:12px;
  font-size:14px}
.login-box button{width:100%}
.scaninfo{font-size:12px;color:var(--muted);margin-left:auto}
@media (max-width:700px){.wrap{padding:14px 10px}}
