:root{--accent:#f97316;--accent-soft:#ffb86b;--action-danger-bg:linear-gradient(135deg, #fb7185, #f43f5e);--action-danger-border:#fb71856b;--action-danger-fg:#fff1f2;--action-danger-soft-bg:#fb718521;--action-primary-bg:linear-gradient(135deg, var(--accent), #fbbf24);--action-primary-fg:#111827;--action-secondary-bg:#ffffff0f;--action-secondary-border:#ffffff29;--action-secondary-fg:var(--text-heading);--bg:#090b12;--border:#ffffff1f;--control-height-md:50px;--control-height-sm:44px;--control-radius-md:14px;--control-radius-sm:12px;--control-radius-pill:999px;--focus:#fbbf24;--image-bg:#151927;--motion-fast:.16s ease;--shadow:0 16px 44px #00000047;--shadow-strong:0 28px 80px #0000006b;--surface:#141825eb;--surface-raised:#1f2537f5;--text:#b8c1d4;--text-heading:#f8fafc;--text-strong:#edf2ff;--sans:"Avenir Next", Avenir, "Trebuchet MS", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:var(--text);font:16px/1.5 var(--sans);font-synthesis:none;letter-spacing:0;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{width:100%;max-width:100%;min-height:100dvh;overflow-x:hidden}body{background:linear-gradient(180deg, #101827f2, #090b12fa), linear-gradient(90deg, #f9731614, #22d3ee0f), var(--bg);width:100%;min-width:0;max-width:100%;margin:0;overflow-x:hidden}*{box-sizing:border-box}html{max-width:100%;overflow-x:hidden}h1{color:var(--text-heading);overflow-wrap:anywhere;margin:0 0 14px;font-size:42px;line-height:1}h2{color:var(--text-heading);overflow-wrap:anywhere;margin:0 0 16px;font-size:28px;line-height:1.1}@media (width>=720px){h1{font-size:60px}h2{font-size:34px}}@media (width>=1040px){h1{font-size:70px}}.app-shell{width:100%;max-width:1180px;min-height:100dvh;margin:0 auto;padding:20px 16px 36px;overflow-x:hidden}.app-shell--narrow{max-width:680px}.home-header,.room-header{padding:18px 0 22px}.app-topbar{z-index:10;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:0 0 14px;display:flex;position:relative}.app-brand{color:var(--accent-soft);cursor:pointer;overflow-wrap:anywhere;text-align:left;background:0 0;border:0;min-width:0;padding:8px 0;font-size:18px;font-weight:950;line-height:1.1}.app-menu-button{flex:none}.app-menu{background:linear-gradient(180deg, var(--surface), var(--surface-raised));border:1px solid var(--border);box-shadow:var(--shadow-strong);border-radius:16px;gap:4px;width:min(292px,100vw - 32px);min-width:230px;max-width:calc(100vw - 32px);padding:8px;display:grid;position:absolute;top:calc(100% - 6px);right:0}.app-menu__item{border-radius:var(--control-radius-sm);color:var(--text-heading);min-height:var(--control-height-sm);text-align:left;background:0 0;border-color:#0000;justify-content:flex-start;width:100%;padding:0 12px}.app-menu__item[aria-current=page]{background:#f9731626;border-color:#f9731661}.app-menu__item--danger{color:#fecdd3}.app-menu__icon{color:var(--accent-soft);flex:none;justify-content:center;align-items:center;width:22px;display:inline-flex}.btn{border-radius:var(--control-radius-md);cursor:pointer;font:inherit;min-height:var(--control-height-md);overflow-wrap:anywhere;text-align:center;touch-action:manipulation;min-width:0;transition:background-color var(--motion-fast), border-color var(--motion-fast), box-shadow var(--motion-fast), transform var(--motion-fast);white-space:normal;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:0 18px;font-size:16px;font-weight:900;text-decoration:none;display:inline-flex}.btn--primary{background:var(--action-primary-bg);color:var(--action-primary-fg)}.btn--secondary{background:var(--action-secondary-bg);border-color:var(--action-secondary-border);color:var(--action-secondary-fg)}.btn--danger{background:var(--action-danger-bg);border-color:var(--action-danger-border);color:var(--action-danger-fg)}.btn--ghost{border-color:var(--border);color:var(--text-heading);background:#ffffff0a}.btn--icon{border-radius:var(--control-radius-pill);width:48px;height:48px;min-height:48px;padding:0}.btn--block{width:100%}.btn--choice{border-color:var(--border);border-radius:var(--control-radius-sm);color:var(--text-heading);min-height:var(--control-height-sm);text-align:left;background:#ffffff12;justify-content:flex-start;width:100%;padding:0 14px}.btn--stepper{border-color:var(--border);border-radius:var(--control-radius-pill);color:var(--text-heading);min-height:var(--control-height-sm);background:#ffffff14;width:44px;padding:0;font-size:18px}.btn:disabled{cursor:not-allowed;opacity:.52;transform:none}.btn:active:not(:disabled){transform:scale(.98)}.site-label,.section-label{color:var(--accent);overflow-wrap:anywhere;margin:0 0 10px;font-size:13px;font-weight:850;line-height:1.2}.home-lead{color:var(--text);max-width:680px;margin:0;font-size:17px;line-height:1.55}.home-lead span{color:var(--text-heading);overflow-wrap:anywhere;font-weight:800}.auth-grid,.play-layout{gap:14px;min-width:0;display:grid}.auth-card,.players-card,.role-card,.rules-card,.state-card{background:linear-gradient(180deg, var(--surface), var(--surface-raised));border:1px solid var(--border);box-shadow:var(--shadow);border-radius:18px;min-width:0;padding:18px}.auth-card{gap:14px;display:grid}.auth-card h2,.players-card h2,.role-card h2,.rules-card h1,.state-card h1,.state-card h2{margin-bottom:8px}.auth-card label{color:var(--text-heading);gap:8px;font-size:14px;font-weight:800;display:grid}.auth-card input{border:1px solid var(--border);border-radius:var(--control-radius-sm);color:var(--text-heading);font:inherit;min-height:var(--control-height-md);background:#ffffff0f;padding:0 14px}.auth-card input:focus,.admin-section input:focus,.admin-section select:focus,.app-brand:focus-visible,.btn:focus-visible,.game-tile:focus-visible,input:focus,select:focus{outline:3px solid var(--focus);outline-offset:3px}.game-tile:disabled{cursor:not-allowed;opacity:.52}.form-error{color:#fecdd3;background:#fb718524;border:1px solid #fb718547;border-radius:12px;margin:0;padding:10px 12px;font-size:14px;line-height:1.4}.form-success{color:#bbf7d0;background:#22c55e21;border:1px solid #22c55e47;border-radius:12px;margin:0 0 14px;padding:10px 12px;font-size:14px;line-height:1.4}.game-preview-section{padding-top:28px}.game-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.game-tile{background:linear-gradient(180deg, var(--surface), var(--surface-raised));border:1px solid var(--border);box-shadow:var(--shadow);color:var(--text-strong);text-align:left;touch-action:manipulation;border-radius:14px;flex-direction:column;min-height:100%;padding:0;text-decoration:none;transition:border-color .18s,box-shadow .18s,transform .18s;display:flex;overflow:hidden}.game-tile--button{cursor:pointer;font:inherit}.game-tile--static{cursor:default}.game-tile:active{transform:scale(.98)}.game-tile__image{aspect-ratio:1;background:var(--image-bg);object-fit:cover;width:100%;height:auto;display:block}.game-tile__body{gap:7px;padding:12px;display:grid}.game-tile__title{color:var(--text-heading);-webkit-hyphens:auto;hyphens:auto;overflow-wrap:normal;font-size:18px;font-weight:850;line-height:1.12}.game-tile__description{color:var(--text);font-size:13px;line-height:1.3}.game-tile__meta{color:var(--accent-soft);align-self:end;font-size:12px;font-weight:750;line-height:1.2}.room-title{color:var(--text-heading);margin-bottom:10px;font-size:30px;line-height:1.1}.room-share-label{color:var(--text-heading);margin:0;font-size:17px;font-weight:900;line-height:1.4}.room-share{align-items:stretch;gap:10px;min-width:0;max-width:680px;margin-top:12px;display:grid}.room-link{border:1px solid var(--border);border-radius:var(--control-radius-sm);color:var(--text-heading);min-height:var(--control-height-md);overflow-wrap:anywhere;background:#ffffff0d;align-items:center;padding:10px 12px;font-size:14px;font-style:italic;font-weight:450;display:flex}.room-share-actions{grid-template-columns:var(--control-height-md) minmax(0, 1fr);gap:10px;min-width:0;display:grid}.icon-button{min-width:var(--control-height-md);justify-content:center;padding:0}.room-copy-button{justify-content:center}.qr-modal-backdrop{z-index:20;background:#030712b8;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}.qr-modal{background:linear-gradient(180deg, var(--surface), var(--surface-raised));border:1px solid var(--border);box-shadow:var(--shadow-strong);border-radius:18px;gap:12px;width:min(100%,380px);max-width:380px;padding:18px;display:grid;position:relative}.qr-modal__close{position:absolute;top:14px;right:14px}.qr-modal__image,.qr-modal__placeholder{color:#111827;background:#fff;border-radius:14px;justify-self:center;max-width:100%;display:block}.qr-modal__placeholder{aspect-ratio:1;text-align:center;justify-content:center;align-items:center;width:min(100%,320px);padding:18px;font-weight:800;display:flex}.qr-modal__link{color:var(--text);overflow-wrap:anywhere;margin:0;font-size:13px;font-style:italic;font-weight:450;line-height:1.35}.players-card{margin-bottom:16px}.room-management{gap:10px;margin:-4px 0 18px;display:grid}.room-management .btn{justify-content:center;width:100%}.players-card ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.players-card li{border:1px solid var(--border);background:#ffffff0d;border-radius:12px;justify-content:space-between;align-items:center;gap:12px;min-width:0;min-height:44px;padding:10px 12px;display:flex}.player-name{color:var(--text-heading);overflow-wrap:anywhere;align-items:center;gap:8px;min-width:0;font-weight:850;display:flex}.host-crown{color:var(--accent-soft);flex:none;font-size:18px;line-height:1}.player-badges{color:var(--accent-soft);text-align:right;font-size:12px;font-weight:800}.role-card{margin-bottom:16px}.role-card h2{font-size:40px}.role-card p,.rules-card p,.state-card p,.muted-note{color:var(--text);margin:0;font-size:16px;line-height:1.55}.role-card--spy{border-color:#fb71856b}.role-card--spy h2{color:#fecdd3}.rules-card{gap:16px;margin-top:22px;display:grid}.state-card{margin-bottom:16px}.mafia-setup,.ekivoki-setup{gap:14px;display:grid}.role-distribution,.alive-list,.mafia-allies,.target-score-control{border:1px solid var(--border);color:var(--text-heading);background:#ffffff0d;border-radius:12px;gap:6px;padding:12px;line-height:1.4;display:grid}.role-distribution span,.alive-list span,.mafia-allies span,.target-score-control span{color:var(--text)}.role-config-list,.choice-list,.score-list,.summary-list{gap:10px;display:grid}.score-card{gap:12px;display:grid}.score-row{border:1px solid var(--border);color:var(--text);background:#ffffff0d;border-radius:12px;justify-content:space-between;align-items:center;min-height:44px;padding:10px 12px;display:flex}.score-row--active{color:var(--text-heading);border-color:#fbbf247a}.score-row strong{color:var(--accent-soft);font-size:20px}.role-config-row{border:1px solid var(--border);background:#ffffff0d;border-radius:12px;align-items:center;gap:12px;padding:12px;display:grid}.role-config-row h3{color:var(--text-heading);margin:0 0 6px;font-size:17px;line-height:1.2}.role-config-row p{color:var(--text);margin:0 0 8px;font-size:14px;line-height:1.4}.role-config-row span{color:var(--accent-soft);font-size:12px;font-weight:850}.role-stepper{grid-template-columns:44px minmax(32px,1fr) 44px;align-items:center;gap:10px;display:grid}.role-stepper strong{color:var(--text-heading);text-align:center;font-size:20px}.mafia-action-row{gap:10px;display:grid}.mafia-action-row .btn{justify-content:center}.phase-card{gap:14px;display:grid}.phase-card .btn--primary,.phase-card .btn--danger{width:100%}.dice-button{font-size:18px}.ekivoki-roll-stage{border:1px solid var(--border);text-align:center;background:#ffffff0d;border-radius:14px;place-items:center;gap:12px;min-width:0;padding:16px;display:grid}.ekivoki-roll-stage p{max-width:440px}.ekivoki-task-head{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;min-width:0;display:grid}.ekivoki-task-head h2{margin-bottom:6px}.ekivoki-die{aspect-ratio:1;background:radial-gradient(circle at 26% 22%,#ffffffe6,#0000 26%),linear-gradient(145deg,#fff8df 0%,#ffd978 58%,#f97316 100%);border:1px solid #ffffffa3;border-radius:20px;flex:none;grid-template-columns:repeat(3,1fr);gap:5px;width:112px;padding:16px;display:grid;position:relative;transform:rotate(-5deg);box-shadow:0 18px 40px #00000057,inset -10px -12px 20px #7c2d1238,inset 8px 8px 18px #fff9}.ekivoki-die--compact{border-radius:14px;gap:3px;width:68px;padding:10px}.ekivoki-die--rolling{will-change:transform;animation:.52s cubic-bezier(.2,.8,.2,1) ekivoki-die-roll}.ekivoki-die--waiting:after{color:#111827b8;content:"?";font-size:44px;font-weight:950;line-height:1;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.ekivoki-die__pip{opacity:0;background:#111827db;border-radius:999px;place-self:center;width:72%;box-shadow:inset 0 1px 2px #ffffff59}.ekivoki-die__pip:before{content:"";padding-top:100%;display:block}.ekivoki-die__pip--visible{opacity:1}.ekivoki-die--waiting .ekivoki-die__pip--visible{opacity:.16}.turn-handoff-note{color:var(--text-heading);background:#fbbf241f;border:1px solid #fbbf2447;border-radius:12px;padding:12px;font-weight:800}@keyframes ekivoki-die-roll{0%{transform:rotate(-5deg)scale(1)}35%{transform:translateY(-12px)rotate(138deg)scale(1.06)}70%{transform:translateY(2px)rotate(292deg)scale(.98)}to{transform:rotate(355deg)scale(1)}}@media (prefers-reduced-motion:reduce){.ekivoki-die--rolling{animation:none}}.ekivoki-card-list{gap:14px;width:100%;display:grid}.ekivoki-card-choice{cursor:pointer;touch-action:manipulation;background:0 0;border:0;width:100%;padding:0;display:block}.ekivoki-card-choice img,.ekivoki-selected-card{border:1px solid var(--border);box-shadow:var(--shadow);background:#fff7c7;border-radius:14px;width:100%;height:auto;display:block}.timer-pill{color:var(--text-heading);text-align:center;background:#fbbf2424;border:1px solid #fbbf2452;border-radius:999px;padding:14px 18px;font-size:34px;font-weight:900;line-height:1}.result-actions{gap:10px;display:grid}.private-result{color:var(--text-heading);background:#fbbf241f;border:1px solid #fbbf2447;border-radius:12px;padding:12px;font-weight:850}.summary-list p,.mafia-status{border:1px solid var(--border);background:#ffffff0d;border-radius:12px;padding:10px 12px}.admin-shell{max-width:1120px}.admin-login{margin-top:18px}.admin-header{align-items:flex-start;gap:10px;display:grid}.admin-layout,.admin-section,.admin-list,.admin-role-table,.admin-role-grid,.admin-upload,.admin-deck-summary,.admin-set-list,.admin-set-card,.admin-card-grid{gap:12px;min-width:0;display:grid}.admin-section h2{margin-bottom:2px}.admin-toolbar,.admin-row,.admin-number-grid{gap:10px;min-width:0;display:grid}.admin-toolbar{align-items:center}.admin-toolbar strong,.admin-set-card strong,.admin-set-card span,.admin-total{overflow-wrap:anywhere}.admin-section label{color:var(--text-heading);gap:7px;min-width:0;font-size:13px;font-weight:850;display:grid}.admin-section input,.admin-section select{appearance:none;border:1px solid var(--border);border-radius:var(--control-radius-sm);color:var(--text-heading);font:inherit;min-height:var(--control-height-md);background:#ffffff0f;width:100%;min-width:0;padding:0 12px}.admin-section input[type=file]{min-height:auto;padding:12px}.admin-row{grid-template-columns:minmax(0,1fr)}.admin-row .btn--danger,.admin-set-card .btn--danger,.admin-card-preview .btn--danger{justify-content:center;width:100%}.admin-role-card,.admin-set-card,.admin-card-preview{border:1px solid var(--border);background:#ffffff0d;border-radius:12px;min-width:0;padding:12px}.admin-role-card h3,.admin-set-list h3{color:var(--text-heading);margin:0;font-size:18px;line-height:1.2}.admin-total{color:#bbf7d0;margin:0;font-size:13px;font-weight:850}.admin-total--warn{color:#fed7aa}.admin-role-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.admin-role-grid input{text-align:center}.admin-upload{align-items:end}.admin-set-card>div:first-child{gap:4px;display:grid}.admin-set-card span{color:var(--text);font-size:13px;line-height:1.35}.admin-card-preview{gap:10px}.admin-card-preview img{background:#fff7c7;border-radius:10px;width:100%;height:auto;display:block}@media (hover:hover) and (pointer:fine){.btn:not(:disabled):hover{border-color:#fbbf2461;transform:translateY(-1px);box-shadow:0 12px 30px #00000038}.btn--danger:not(:disabled):hover{border-color:#fb718594}.game-tile--button:hover{border-color:var(--accent);box-shadow:var(--shadow-strong);transform:translateY(-3px)}}@media (width<=360px){.game-grid{grid-template-columns:1fr}}@media (width>=720px){.app-shell{padding:34px 28px 56px}.home-header,.room-header{padding-bottom:28px}.auth-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.game-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.game-tile__body{padding:16px}.game-tile__title{font-size:20px}.play-layout{grid-template-columns:minmax(0,1fr) 360px}.play-layout .btn--danger{grid-column:1/-1}.room-title{font-size:42px}.room-share{grid-template-columns:minmax(0,1fr) auto;align-items:center}.room-share-actions{grid-template-columns:var(--control-height-md) auto}.room-management{justify-content:flex-end;align-items:center;display:flex}.room-management .btn{width:auto}.role-config-row{grid-template-columns:minmax(0,1fr) 148px}.mafia-action-row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.admin-header{grid-template-columns:auto minmax(0,1fr) auto;align-items:end}.admin-header h1,.admin-header .site-label{grid-column:2}.admin-toolbar,.admin-row,.admin-number-grid,.admin-upload{grid-template-columns:minmax(0,1fr) auto}.admin-number-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.admin-role-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.admin-deck-summary,.admin-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=1040px){.game-grid--preview{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (prefers-reduced-motion:reduce){.btn,.game-tile{transition:none}.btn:hover,.btn:active,.game-tile:hover,.game-tile:active{transform:none}}
