:root{--bg:#0f1020;--bg2:#1a1b33;--panel:#21223f;--panel2:#2a2c50;--border:#3a3c66;--text:#e8e8f5;--muted:#9a9ac2;--accent:#c084fc;--accent2:#7c3aed;--danger:#ef4444;--good:#22c55e;--moon:#ffe9a8}*{box-sizing:border-box}body,html{margin:0;padding:0;background:radial-gradient(1200px 600px at 50% -10%,#2a2350 0,var(--bg) 60%);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;min-height:100vh}.wrap{max-width:760px;margin:0 auto;padding:24px 16px 60px}.center{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:24px}h1{font-size:2.2rem;margin:0;letter-spacing:.5px}.moon{font-size:3rem;filter:drop-shadow(0 0 18px var(--moon))}.card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:20px;width:100%;max-width:420px}.card.wide{max-width:100%}label{display:block;font-size:.85rem;color:var(--muted);margin-bottom:6px}input{width:100%;padding:12px 14px;border-radius:10px;border:1px solid var(--border);background:var(--bg2);color:var(--text);font-size:1rem;margin-bottom:14px}input:focus{outline:none;border-color:var(--accent)}button{cursor:pointer;border:none;border-radius:10px;padding:12px 16px;font-size:1rem;font-weight:600;background:var(--accent2);color:#fff;transition:transform .05s ease,background .15s ease;width:100%}button:hover:not(:disabled){background:var(--accent)}button:active:not(:disabled){transform:scale(.98)}button:disabled{opacity:.5;cursor:not-allowed}button.ghost{background:transparent;border:1px solid var(--border);color:var(--text)}button.ghost:hover:not(:disabled){background:var(--panel2)}button.danger{background:var(--danger)}.row{display:flex;gap:10px}.muted{color:var(--muted)}.err,.muted{font-size:.9rem}.err{color:var(--danger);margin-top:6px;min-height:1.2em}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:.8rem;background:var(--panel2);border:1px solid var(--border)}.code-pill{font-family:monospace;font-size:1.6rem;letter-spacing:6px;background:var(--bg2);border:1px dashed var(--accent);padding:8px 18px;border-radius:12px;color:var(--moon)}.players{list-style:none;padding:0;margin:14px 0;display:flex;flex-direction:column;gap:8px}.players li{display:flex;align-items:center;justify-content:space-between;background:var(--bg2);padding:10px 14px;border-radius:10px;border:1px solid var(--border)}.dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:8px}.dot.on{background:var(--good)}.dot.off{background:var(--muted)}.role-card{text-align:center;padding:28px;border-radius:16px;border:2px solid var(--accent);background:linear-gradient(160deg,var(--panel2),var(--panel))}.role-name{font-size:2rem;font-weight:800;margin:8px 0}.role-werewolf{color:#ff6b6b}.role-minion{color:#fb923c}.role-mason{color:#c4b5fd}.role-seer{color:#7dd3fc}.role-robber{color:#fca5a5}.role-troublemaker{color:#f0abfc}.role-drunk{color:#fcd34d}.role-insomniac{color:#67e8f9}.role-hunter{color:#fdba74}.role-tanner{color:#a3a3a3}.role-villager{color:#86efac}.timer{font-size:2.6rem;font-family:monospace;text-align:center;color:var(--moon)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));grid-gap:10px;gap:10px}.selectable{background:var(--bg2);border:2px solid var(--border);border-radius:12px;padding:14px;text-align:center;cursor:pointer;transition:border-color .1s}.selectable.picked,.selectable:hover{border-color:var(--accent)}.selectable.picked{background:var(--panel2)}.chat{height:220px;overflow-y:auto;background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.chat .msg{font-size:.92rem;line-height:1.35}.chat .who{font-weight:700;color:var(--accent)}.section-title{font-size:1.4rem;margin:0 0 4px}.banner{text-align:center;padding:18px;border-radius:14px;font-size:1.4rem;font-weight:800;margin-bottom:16px}.banner.village{background:rgba(34,197,94,.15);border:1px solid var(--good);color:#86efac}.banner.werewolf{background:rgba(239,68,68,.15);border:1px solid var(--danger);color:#fca5a5}.banner.none{background:var(--panel2);border:1px solid var(--border)}.stack{display:flex;flex-direction:column;gap:12px}.modal-overlay{position:fixed;inset:0;background:rgba(5,6,16,.75);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:20px;z-index:1000;animation:fadeIn .15s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-card{position:relative;background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--border);border-top:5px solid;border-radius:18px;padding:28px 24px 24px;width:100%;max-width:360px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.5);animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.modal-emoji{font-size:4.5rem;line-height:1;margin-bottom:8px;filter:drop-shadow(0 0 14px rgba(255,255,255,.15))}.modal-card .role-name{font-size:1.8rem;margin:4px 0 10px}.modal-ability{color:var(--text);font-size:1rem;line-height:1.5;margin:14px 0 6px}.modal-close{position:absolute;top:10px;right:10px;width:34px;height:34px;padding:0;border-radius:50%;background:var(--bg2);border:1px solid var(--border);color:var(--muted);font-size:1rem}.modal-close:hover{background:var(--panel2);color:var(--text)}.wake-row{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 10px}.wake-chip{gap:5px;padding:6px 11px;border-radius:999px;background:var(--bg2);border:1px solid var(--border);font-size:.85rem;cursor:pointer;white-space:nowrap}.wake-chip,.wake-chip b{display:inline-flex;align-items:center}.wake-chip b{background:var(--panel2);color:var(--muted);border-radius:50%;width:18px;height:18px;justify-content:center;font-size:.72rem}.wake-chip.active{border-color:var(--accent);background:var(--panel2);box-shadow:0 0 12px rgba(192,132,252,.4)}.wake-chip.active b{background:var(--accent2);color:#fff}.team-werewolf{background:rgba(239,68,68,.18);border-color:#ef4444;color:#fca5a5}.team-village{background:rgba(34,197,94,.15);border-color:#22c55e;color:#86efac}.team-tanner{background:hsla(0,0%,64%,.18);border-color:#a3a3a3;color:#d4d4d4}