:root{--bg: #0a0a0f;--neon-pink: #ff2d7b;--neon-cyan: #00f0ff;--neon-yellow: #ffe156;--text: #ffffff;--surface: #1a1a2e}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background-color:var(--bg);color:var(--text);min-height:100dvh;display:flex;justify-content:center;align-items:center}#app{width:100%;max-width:480px;padding:1rem;text-align:center}h1{font-size:2.5rem;font-weight:900;margin-bottom:2rem;background:linear-gradient(135deg,var(--neon-pink),var(--neon-cyan));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.btn{display:block;width:100%;min-height:44px;padding:.75rem 1.5rem;margin-bottom:1rem;border:none;border-radius:8px;font-size:1.125rem;font-weight:700;cursor:pointer;color:var(--bg);transition:opacity .2s}.btn:active{opacity:.8}.btn--pink{background-color:var(--neon-pink)}.btn--cyan{background-color:var(--neon-cyan)}.screen{display:none}.screen.active{display:block}.input-label{display:block;margin-bottom:.25rem;margin-top:1rem;font-size:.875rem;color:var(--neon-cyan);text-align:left}.input{display:block;width:100%;min-height:44px;padding:.75rem 1rem;margin-bottom:1rem;border:2px solid var(--surface);border-radius:8px;background-color:var(--surface);color:var(--text);font-size:1.125rem;outline:none;transition:border-color .2s}.input:focus{border-color:var(--neon-cyan)}.error-text{color:var(--neon-pink);font-size:.875rem;min-height:1.25rem;margin-bottom:.5rem}.room-code-display{font-size:1.25rem;margin-bottom:.5rem}.room-code-display span{font-weight:900;letter-spacing:.25em;color:var(--neon-yellow)}.player-count{font-size:1rem;color:var(--neon-cyan);margin-bottom:1rem}.player-list{list-style:none;margin-bottom:1.5rem}.player-item{padding:.625rem 1rem;margin-bottom:.375rem;background-color:var(--surface);border-radius:6px;font-size:1rem;text-align:left}.host-badge{font-size:.75rem;font-weight:700;color:var(--neon-yellow);margin-left:.5rem}.waiting-text{color:var(--neon-yellow);font-size:1rem;margin-bottom:1rem}.btn:disabled{opacity:.4;cursor:not-allowed}.role-card{width:200px;height:280px;margin:2rem auto;perspective:600px}.role-card__inner{position:relative;width:100%;height:100%;transition:transform .2s ease-in-out;transform-style:preserve-3d}.role-card__inner.flipped{transform:rotateY(180deg)}.role-card__front,.role-card__back{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:16px;backface-visibility:hidden;-webkit-backface-visibility:hidden}.role-card__front{background-color:var(--surface);border:2px solid var(--neon-cyan)}.role-card__question{font-size:4rem;font-weight:900;color:var(--neon-cyan)}.role-card__back{background-color:var(--surface);border:2px solid var(--role-color, var(--neon-pink));transform:rotateY(180deg)}.role-card__emoji{font-size:4rem;margin-bottom:.75rem}.role-card__name{font-size:1.5rem;font-weight:900;color:var(--role-color, var(--neon-pink))}.role-description{font-size:1rem;color:var(--text);margin-bottom:1.5rem;padding:0 1rem;line-height:1.5;transition:opacity .2s ease-in-out}.ready-status{font-size:.875rem;color:var(--neon-cyan);margin-top:.5rem;min-height:1.25rem}.timer{font-size:3rem;font-weight:900;color:var(--neon-cyan);text-align:center;margin:1rem auto;min-width:80px}.timer--warning{color:var(--neon-pink);animation:timer-pulse .5s ease-in-out infinite alternate}@keyframes timer-pulse{0%{opacity:1;transform:scale(1)}to{opacity:.6;transform:scale(1.1)}}.screen-night h1{font-size:1.375rem;color:var(--neon-cyan);margin-bottom:.5rem;line-height:1.2}.screen-night--mafia h1{color:var(--neon-pink)}.screen-night--host h1{color:var(--neon-cyan)}.screen-night--guest h1{color:var(--neon-yellow)}.night-subtitle{font-size:.9375rem;color:var(--text-muted, #aaa);margin-bottom:.75rem;padding:.5rem .75rem;background-color:var(--surface);border-radius:6px;line-height:1.4}.night-buttons{margin-top:.75rem;margin-bottom:1rem}.night-btn{margin-bottom:.5rem}.night-btn--selected{background-color:var(--neon-yellow);color:var(--bg)}.night-status{font-size:.875rem;color:var(--neon-cyan);min-height:1.25rem;margin-bottom:.5rem}.day-announcement{font-size:1rem;color:var(--neon-yellow);margin-bottom:1rem;padding:.75rem;background-color:var(--surface);border-radius:8px;line-height:1.4}.day-player-list{list-style:none;margin-bottom:1rem}.day-player-item{padding:.5rem 1rem;margin-bottom:.25rem;background-color:var(--surface);border-radius:6px;font-size:.9375rem;text-align:left;display:flex;align-items:center;justify-content:space-between;min-height:44px}.day-player-item--dead{opacity:.4;text-decoration:line-through}.day-player-status{font-size:.75rem;color:var(--neon-pink);margin-left:.5rem}.day-chat__spectator{font-size:.875rem;color:var(--neon-pink);font-style:italic;margin-top:.75rem}.day-player-item--clickable{cursor:pointer;min-height:44px;display:flex;align-items:center;justify-content:space-between;transition:background-color .15s,border-color .15s;border:2px solid transparent}.day-player-item--clickable:active{opacity:.75}.day-player-item--my-suspect{border-color:var(--neon-yellow);background-color:#2a2a10}.day-player-item--has-suspects{background-color:#1e1a2e}.day-player-name{flex:1;text-align:left}.suspect-list{font-size:.75rem;color:var(--neon-pink);margin-left:.5rem;text-align:right;flex-shrink:0;max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vote-buttons{margin-bottom:1rem}.vote-btn{margin-bottom:.5rem}.vote-btn--selected{background-color:var(--neon-yellow);color:var(--bg)}.vote-btn--disabled{opacity:.4;cursor:not-allowed}.vote-status{font-size:.875rem;color:var(--neon-cyan);min-height:1.25rem;margin-bottom:.5rem}.vote-spectator{font-size:.875rem;color:var(--neon-pink);font-style:italic}.vote-result-name{font-size:1.5rem;font-weight:900;color:var(--neon-pink);margin:1.5rem 0 .75rem}.vote-result-role{font-size:1.125rem;margin-bottom:1rem}#dev-banner{position:fixed;top:0;left:0;right:0;z-index:9999;background-color:var(--neon-yellow);color:var(--bg);font-size:.75rem;font-weight:900;text-align:center;padding:.25rem 0;letter-spacing:.1em}.btn--yellow{background-color:var(--neon-yellow)}.stub-badge{font-size:.7rem;font-weight:700;color:var(--neon-yellow);margin-left:.5rem;opacity:.8}.player-reconnecting{font-size:.75rem;font-weight:600;color:var(--neon-yellow, #ffdd00);margin-left:.4rem;font-style:italic;opacity:.85}.game-over__banner{font-size:2.25rem;font-weight:900;letter-spacing:.05em;padding:1rem 1.5rem;border-radius:12px;margin-bottom:1.5rem;text-transform:uppercase}.game-over__banner--mafia{background:var(--neon-pink);color:var(--bg)}.game-over__banner--guests{background:var(--neon-cyan);color:var(--bg)}.game-over__roles-heading{font-size:1.125rem;font-weight:700;color:var(--neon-yellow);margin-bottom:.75rem;text-align:center}.game-over__player-list{list-style:none;margin-bottom:1.5rem}.game-over__player-row{display:flex;align-items:center;justify-content:space-between;padding:.625rem 1rem;margin-bottom:.375rem;background-color:var(--surface);border-radius:6px}.game-over__player-name{font-size:1rem;font-weight:600}.game-over__dead{color:var(--neon-pink);font-weight:900;margin-left:.375rem}.game-over__role-badge{font-size:.875rem;font-weight:700;color:var(--badge-color, var(--neon-cyan));white-space:nowrap;margin-left:.5rem}.game-over__actions{margin-top:.5rem}:root{--role-reveal-duration: 1.5s;--role-reveal-delay: .1s;--role-reveal-ease: cubic-bezier(.34, 1.56, .64, 1);--role-reveal-scale-start: 0;--role-reveal-scale-peak: 1.1;--role-reveal-scale-end: 1;--role-reveal-glow: 0 0 24px}@keyframes role-reveal-pop{0%{transform:scale(var(--role-reveal-scale-start));opacity:0}60%{transform:scale(var(--role-reveal-scale-peak));opacity:1}to{transform:scale(var(--role-reveal-scale-end));opacity:1}}.role-reveal-animate{display:inline-block;transform-origin:center;animation:role-reveal-pop var(--role-reveal-duration) var(--role-reveal-ease) var(--role-reveal-delay) both}.role-reveal-badge{display:inline-block;font-weight:700;text-shadow:var(--role-reveal-glow) var(--reveal-color, #fff)}
