:root{--ink:#12131c;--panel:#1b1d2b;--panel-2:#232538;--hair:#ffffff17;--text:#eceef7;--muted:#8d90ab;--night:#b8443c;--night-dim:#5a2a29;--day:#e0a83c;--day-dim:#5c4a24;--good:#5fa872;--radius:16px;--radius-sm:9px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:radial-gradient(circle at 20% 0%, #b8443c1a, transparent 55%), radial-gradient(circle at 85% 100%, #e0a83c12, transparent 50%), var(--ink);color:var(--text);-webkit-font-smoothing:antialiased;min-height:100vh;font-family:Inter,system-ui,sans-serif}#root{flex-direction:column;max-width:440px;min-height:100vh;margin:0 auto;padding:28px 20px 40px;display:flex}.brand{letter-spacing:.02em;color:var(--muted);justify-content:space-between;align-items:center;gap:8px;margin-bottom:22px;font-family:Fraunces,serif;font-size:15px;font-weight:600;display:flex}.brand-left{align-items:center;gap:8px;display:flex}.brand .dot{background:var(--night);border-radius:50%;width:7px;height:7px}.rules-link{border:1px solid var(--hair);width:auto;color:var(--muted);letter-spacing:normal;cursor:pointer;background:0 0;border-radius:20px;padding:5px 12px;font-family:Inter,sans-serif;font-size:12px;font-weight:600}.rules-link:hover{color:var(--text);border-color:#ffffff40}.stop-link{width:auto;color:var(--night);cursor:pointer;background:0 0;border:none;margin:-8px 0 16px auto;padding:0;font-size:12.5px;font-weight:500;text-decoration:underline;display:block}h1.title{color:var(--text);margin:0 0 10px;font-family:Fraunces,serif;font-size:38px;font-weight:600;line-height:1.08}.sub{color:var(--muted);margin:0 0 28px;font-size:15px;line-height:1.5}.card{background:var(--panel);border:1px solid var(--hair);border-radius:var(--radius);margin-bottom:16px;padding:24px}label{color:var(--muted);margin-bottom:7px;font-size:13px;display:block}input[type=text]{background:var(--panel-2);border:1px solid var(--hair);width:100%;color:var(--text);border-radius:var(--radius-sm);outline:none;margin-bottom:16px;padding:13px 14px;font-family:Inter,sans-serif;font-size:17px}input[type=text]:focus-visible{border-color:var(--day)}input.code-input{text-transform:uppercase;letter-spacing:.14em;text-align:center;font-family:Fraunces,serif;font-size:22px;font-weight:600}button{border-radius:var(--radius-sm);cursor:pointer;border:none;width:100%;padding:14px 18px;font-family:Inter,sans-serif;font-size:15.5px;font-weight:600;transition:transform 80ms,opacity .15s}button:active{transform:scale(.98)}button:focus-visible{outline:2px solid var(--day);outline-offset:2px}button.primary{background:var(--night);color:#fff}button.gold{background:var(--day);color:#241a05}button.ghost{color:var(--text);border:1px solid var(--hair);background:0 0}button.ghost:hover{border-color:#fff3}button:disabled{opacity:.4;cursor:not-allowed}button+button{margin-top:10px}.row-gap{flex-direction:column;gap:10px;display:flex}.error{color:var(--night);margin:-6px 0 14px;font-size:14px}.banner{color:var(--day);border-radius:var(--radius-sm);text-align:center;background:#e0a83c1a;border:1px solid #e0a83c4d;margin:-6px 0 14px;padding:10px 14px;font-size:13.5px}.players{margin:0 0 4px;padding:0;list-style:none}.players li{border-bottom:1px solid var(--hair);justify-content:space-between;align-items:center;padding:11px 4px;font-size:15.5px;display:flex}.players li:last-child{border-bottom:none}.players li.dead{color:var(--muted);text-decoration:line-through}.players li .name-wrap{align-items:center;gap:7px;display:flex}.tag{color:var(--muted);background:var(--panel-2);border-radius:20px;padding:3px 8px;font-size:11.5px}.tag.offline{color:var(--night)}.code-display{letter-spacing:.08em;text-align:center;color:var(--day);margin:6px 0 4px;font-family:Fraunces,serif;font-size:44px;font-weight:700}.code-hint{text-align:center;color:var(--muted);margin-bottom:18px;font-size:13px}.phase-tag{color:var(--muted);align-items:center;gap:7px;margin-bottom:14px;font-size:13px;display:inline-flex}.phase-tag .pip{border-radius:50%;width:8px;height:8px}.role-card{background:linear-gradient(160deg, var(--panel-2), var(--panel));border:1px solid var(--hair);border-radius:var(--radius);text-align:center;margin-bottom:16px;padding:36px 24px}.role-name{margin:6px 0 10px;font-family:Fraunces,serif;font-size:32px;font-weight:700}.role-desc{color:var(--muted);margin:0 0 6px;font-size:14.5px;line-height:1.55}.teammates{color:var(--day);margin-top:14px;font-size:14px}.target-grid{flex-direction:column;gap:9px;margin:4px 0 6px;display:flex}.target-btn{background:var(--panel-2);border:1px solid var(--hair);color:var(--text);text-align:left;border-radius:var(--radius-sm);cursor:pointer;width:100%;padding:14px 16px;font-size:16px;font-weight:500}.target-btn:hover{border-color:#ffffff38}.target-btn.chosen{border-color:var(--day);background:#e0a83c1a}.mafia-votes{flex-direction:column;gap:6px;margin:10px 0 6px;padding:0;font-size:14px;list-style:none;display:flex}.mafia-votes li{color:var(--muted);justify-content:space-between;display:flex}.mafia-votes li .pick{color:var(--day)}.mafia-votes li .pick.pending{font-style:italic}.waiting-block{text-align:center;padding:38px 10px}.moon{margin-bottom:14px;font-size:38px}.waiting-text{color:var(--muted);font-size:15px;line-height:1.6}.timer{text-align:center;color:var(--day);margin:8px 0 4px;font-family:Fraunces,serif;font-size:46px;font-weight:600}.result-name{margin:10px 0 4px;font-family:Fraunces,serif;font-size:26px;font-weight:600}.center{text-align:center}.muted{color:var(--muted)}.footer-note{color:var(--muted);text-align:center;margin-top:auto;padding-top:26px;font-size:12.5px;line-height:1.5}.winner-band{text-align:center;margin:8px 0 18px;font-family:Fraunces,serif;font-size:30px;font-weight:700}.reveal-list li{border-bottom:1px solid var(--hair);justify-content:space-between;padding:10px 4px;font-size:15px;display:flex}.reveal-list li:last-child{border-bottom:none}.roletag-mafia{color:var(--night)}.roletag-detective{color:var(--day)}.roletag-doctor{color:var(--good)}.roletag-villager{color:var(--muted)}.skip-btn{border:1px dashed var(--hair);color:var(--muted);text-align:center;border-radius:var(--radius-sm);cursor:pointer;background:0 0;width:100%;margin:14px 0 6px;padding:12px 16px;font-size:14px;font-weight:500}.skip-btn:hover{color:var(--text);border-color:#ffffff4d}.skip-btn.chosen{border-color:var(--day);color:var(--day);background:#e0a83c14;border-style:solid}.roster-card{padding:16px 20px}.roster-label{color:var(--muted);text-align:center;margin:0 0 8px;font-size:12.5px}.players.compact li{padding:8px 4px;font-size:14.5px}.turn-order{flex-direction:column;gap:6px;margin:16px 0;padding:0;list-style:none;display:flex}.turn-order li{border-radius:var(--radius-sm);background:var(--panel-2);border:1px solid var(--hair);color:var(--muted);padding:10px 14px;font-size:15px}.turn-order li.current{border-color:var(--day);color:var(--day);background:#e0a83c1a;font-weight:600}.shuffle-card{padding:44px 24px}.shuffle-text{color:var(--day);animation:.18s infinite shufflePulse}.shuffle-dots{justify-content:center;gap:6px;margin-top:14px;display:flex}.shuffle-dots span{background:var(--muted);opacity:.35;border-radius:50%;width:6px;height:6px;animation:1s infinite shuffleDot}.shuffle-dots span:nth-child(2){animation-delay:.15s}.shuffle-dots span:nth-child(3){animation-delay:.3s}@keyframes shufflePulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes shuffleDot{0%,to{opacity:.3;transform:translateY(0)}50%{opacity:1;transform:translateY(-4px)}}.phase-body{animation:.25s fadeInUp}@keyframes fadeInUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.stepper{justify-content:center;align-items:center;gap:18px;margin:2px 0 16px;display:flex}.stepper button{background:var(--panel-2);border:1px solid var(--hair);width:44px;height:44px;color:var(--text);border-radius:50%;padding:0;font-size:20px}.stepper-value{text-align:center;min-width:34px;font-family:Fraunces,serif;font-size:26px;font-weight:700}.stepper-label{text-align:center;color:var(--muted);margin-bottom:2px;font-size:13px}.mode-toggle{justify-content:center;gap:8px;margin:2px 0 4px;display:flex}.mode-toggle button{border-radius:var(--radius-sm);background:var(--panel-2);border:1px solid var(--hair);color:var(--muted);flex:1;padding:10px 12px;font-size:14px}.mode-toggle button.active{border-color:var(--day);color:var(--day);background:#e0a83c1a}.prompt-banner{border:1px solid var(--day);border-radius:var(--radius-sm);text-align:center;color:var(--text);background:#e0a83c14;margin:4px 0 18px;padding:14px 16px;font-size:15.5px;line-height:1.5}.instructions h2{color:var(--text);margin:20px 0 8px;font-family:Fraunces,serif;font-size:17px;font-weight:600}.instructions h2:first-child{margin-top:0}.instructions p{color:var(--muted);margin:0 0 4px;font-size:14.5px;line-height:1.6}.instructions .role-line{align-items:baseline;gap:8px;margin-bottom:6px;display:flex}.instructions .role-line b{flex-shrink:0;min-width:78px}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
