:root{--bg:#0b1220;--surface:#131c2e;--surface-2:#1b2740;--border:#26334d;--text:#e7ecf5;--muted:#93a1bd;--accent:#6b93f7;--accent-ink:#08101f;--danger:#f4756a;--ok:#5fd0a0;--warn:#f7c56b;--radius:14px}*{box-sizing:border-box}body,html{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--accent)}h1{font-size:1.25rem;margin:0 0 4px;letter-spacing:-.01em}h2{font-size:1rem;margin:0 0 10px}h3{font-size:.9rem;margin:0 0 8px}p{margin:0 0 12px}.muted{color:var(--muted)}.small{font-size:.86rem}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.page{min-height:100%;display:flex;flex-direction:column}.centre{flex:1 1;display:grid;place-items:center;padding:24px}.stack{display:grid;grid-gap:16px;gap:16px;align-content:start}.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.spread{flex-wrap:wrap}.spread,.topbar{display:flex;gap:16px;align-items:center;justify-content:space-between}.topbar{padding:14px 20px;border-bottom:1px solid var(--border);background:var(--surface)}.topbar nav{display:flex;gap:4px;flex-wrap:wrap}.topbar nav a{color:var(--muted);text-decoration:none;padding:6px 11px;border-radius:8px;font-size:.9rem}.topbar nav a:hover,.topbar nav a[data-active=true]{background:var(--surface-2);color:var(--text)}.content{flex:1 1;width:100%;max-width:940px;margin:0 auto;padding:24px 20px 48px}.narrow{max-width:430px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card>:last-child{margin-bottom:0}.card.accent{border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.grid{display:grid;grid-gap:14px;gap:14px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}.tile{display:flex;flex-direction:column;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;text-decoration:none;color:inherit;transition:border-color .15s ease,transform .15s ease}.tile:hover{border-color:var(--accent);transform:translateY(-1px)}.tile[aria-disabled=true]{opacity:.55;pointer-events:none}.tile .swatch{width:34px;height:34px;border-radius:9px}label{display:block;font-size:.86rem;color:var(--muted);margin-bottom:5px}.field{margin-bottom:14px}input,select,textarea{width:100%;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:9px 12px}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:transparent}input[type=checkbox]{width:auto;margin-right:8px}.otp-input{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.6rem;letter-spacing:.5em;text-align:center;padding-left:.5em}.btn,button{font:inherit;border-radius:10px;padding:9px 15px;cursor:pointer;border:1px solid transparent;text-decoration:none;display:inline-block;transition:filter .15s ease,background .15s ease}button:disabled{opacity:.55;cursor:not-allowed}.btn:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.primary{background:var(--accent);color:var(--accent-ink);font-weight:600}.primary:hover:not(:disabled){filter:brightness(1.08)}.ghost{background:transparent;color:var(--text);border-color:var(--border)}.ghost:hover:not(:disabled){background:var(--surface-2)}.danger{background:transparent;color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--border))}.danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 12%,transparent)}.full{width:100%}.alert{border-radius:10px;padding:11px 14px;font-size:.9rem;margin-bottom:14px}.alert.error{background:color-mix(in srgb,var(--danger) 14%,transparent);color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 34%,transparent)}.alert.ok{background:color-mix(in srgb,var(--ok) 12%,transparent);color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 30%,transparent)}.alert.info{background:var(--surface-2);color:var(--muted);border:1px solid var(--border)}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:.76rem;border:1px solid var(--border);color:var(--muted)}.badge.ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}.badge.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent)}.badge.off{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,transparent)}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius)}table{width:100%;border-collapse:collapse;font-size:.9rem}td,th{text-align:left;padding:11px 14px;border-bottom:1px solid var(--border);white-space:nowrap}th{color:var(--muted);font-weight:500;font-size:.8rem;text-transform:uppercase;letter-spacing:.05em;background:var(--surface-2)}tr:last-child td{border-bottom:none}.codes{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));grid-gap:8px;gap:8px;margin-bottom:14px}.codes span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:8px;text-align:center;font-size:.9rem}@media (prefers-reduced-motion:reduce){*,.tile{transition:none!important}}.entitlement,.member{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:10px 12px}.entitlement-name,.member-id{flex:1 1 200px;min-width:0;overflow-wrap:anywhere}.swatch-sm{width:20px;height:20px;border-radius:6px;flex:none}.toggle{display:flex;align-items:center;gap:6px;color:var(--text);font-size:.9rem;white-space:nowrap;cursor:pointer}.expiry,.toggle,.toggle input{margin:0}.expiry{display:flex;align-items:center;gap:6px;white-space:nowrap}.expiry input{width:150px;padding:6px 9px}.entitlement-msg{flex:1 0 100%;font-size:.85rem}.error-text{color:var(--danger)}.ok-text{color:var(--ok)}.btn.small,button.small{padding:6px 11px;font-size:.85rem}.danger-zone{border:1px solid color-mix(in srgb,var(--danger) 35%,var(--border));border-radius:10px;padding:14px;background:color-mix(in srgb,var(--danger) 7%,transparent)}details>summary{padding:4px 0}details[open]>summary{margin-bottom:4px}