*{margin:0;padding:0;box-sizing:border-box}:root{--bg:#0d1117;--bg2:#161b22;--bg3:#21262d;--border:#30363d;--text:#e6edf3;--muted:#8b949e;--accent:#2f81f7;--green:#3fb950;--red:#f85149;--orange:#d29922;--purple:#bc8cff}body{background:var(--bg);color:var(--text);font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px}a{color:var(--accent);text-decoration:none}.nav{display:flex;gap:4px;align-items:center;padding:10px 20px;background:var(--bg2);border-bottom:1px solid var(--border);flex-wrap:wrap}.nav .brand{font-weight:700;margin-right:16px;color:var(--text)}.nav a.link{padding:6px 12px;border-radius:6px;color:var(--muted)}.nav a.link.active,.nav a.link:hover{background:var(--bg3);color:var(--text)}.nav a.link.active{font-weight:600}.container{max-width:1400px;margin:0 auto;padding:20px}h1{font-size:20px;margin-bottom:16px}h2{font-size:16px;margin:16px 0 8px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));grid-gap:12px;gap:12px;margin-bottom:20px}.card{background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:14px}.card .num{font-size:26px;font-weight:700}.card .lbl{color:var(--muted);font-size:12px;margin-top:4px}.card.green .num{color:var(--green)}.card.red .num{color:var(--red)}.card.orange .num{color:var(--orange)}.card.purple .num{color:var(--purple)}table{width:100%;border-collapse:collapse;background:var(--bg2);border:1px solid var(--border);border-radius:8px;overflow:hidden}td,th{padding:8px 12px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}th{background:var(--bg3);color:var(--muted);font-size:12px;text-transform:uppercase;position:-webkit-sticky;position:sticky;top:0}tr:hover td{background:hsla(0,0%,100%,.02)}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600}.badge.available{background:rgba(63,185,80,.15);color:var(--green)}.badge.registered{background:hsla(212,9%,58%,.15);color:var(--muted)}.badge.pending_delete{background:rgba(248,81,73,.15);color:var(--red)}.badge.expiring,.badge.redemption{background:rgba(210,153,34,.15);color:var(--orange)}.badge.unchecked{background:hsla(212,9%,58%,.1);color:var(--muted)}.badge.error{background:rgba(248,81,73,.1);color:var(--red)}.badge.unsupported{background:rgba(188,140,255,.15);color:var(--purple)}.badge.platform{background:hsla(212,9%,58%,.1);color:var(--muted)}.badge.purchased{background:rgba(188,140,255,.15);color:var(--purple)}.badge.taken{background:rgba(248,81,73,.12);color:#ff9b93}.btn,button{background:var(--accent);color:#fff;border:0;padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px;font-weight:600}button:hover{opacity:.9}button:disabled{opacity:.5;cursor:not-allowed}button.secondary{background:var(--bg3);border:1px solid var(--border)}button.danger{background:var(--red)}button.success{background:var(--green);color:#04260f}input,select{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:8px 10px;border-radius:6px;font-size:14px}input:focus,select:focus{outline:none;border-color:var(--accent)}.toolbar{gap:8px;align-items:center}.tabs,.toolbar{display:flex;margin-bottom:12px;flex-wrap:wrap}.tabs{gap:4px}.tabs button{background:var(--bg2);border:1px solid var(--border);color:var(--muted);padding:6px 14px;font-weight:500}.tabs button.active{background:var(--bg3);color:var(--text);border-color:var(--accent);font-weight:700}.progress-wrap{background:var(--bg3);border-radius:6px;height:10px;overflow:hidden;margin:8px 0}.progress-bar{background:var(--accent);height:100%;transition:width .5s}.muted{color:var(--muted)}.tablewrap{overflow-x:auto;max-height:70vh;overflow-y:auto;border-radius:8px}.pager{display:flex;gap:8px;align-items:center;margin-top:12px}.login-box{max-width:360px;margin:15vh auto;background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:28px}.login-box input{width:100%;margin:12px 0}.login-box button{width:100%}.dropzone{border:2px dashed var(--border);border-radius:10px;padding:40px;text-align:center;color:var(--muted);cursor:pointer}.dropzone.drag{border-color:var(--accent);color:var(--text)}.formrow{display:flex;gap:10px;margin-bottom:12px;flex-wrap:wrap}