:root{color:#e7dfc7;font-synthesis:none;--night:#080c14;--indigo:#101525;--slate:#1b2433;--slate-2:#273044;--gold:#d1a85a;--gold-light:#efd18a;--blue:#4c84c6;--blue-deep:#1e4e8b;--red:#b94545;--red-deep:#6d2228;--parchment:#e7dfc7;--muted:#9da6b3;--line:#d1a85a57;--panel:linear-gradient(145deg, #18212ef7, #090f18fa);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#080c14;font-family:Microsoft YaHei,PingFang SC,system-ui,sans-serif}*{box-sizing:border-box}html{background:var(--night);min-width:320px}body{min-width:320px;min-height:100svh;margin:0;overflow-x:hidden}button,input,select{font:inherit}button{color:inherit}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,input:focus-visible,select:focus-visible{outline-offset:3px;outline:2px solid #69a6f3}button:disabled{cursor:not-allowed;opacity:.48}h1,h2,h3,p{margin-top:0}h1,h2,h3{letter-spacing:.08em;font-family:Noto Serif SC,serif}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.eyebrow{color:var(--gold);letter-spacing:.22em;text-transform:uppercase;font-size:.75rem;font-weight:700}.page-shell{background:radial-gradient(circle at 50% -10%, #1c2b40 0, transparent 38%), repeating-linear-gradient(113deg, #ffffff04 0 1px, transparent 1px 7px), var(--night);min-height:100svh}.stone-panel{border:1px solid var(--line);background:var(--panel);position:relative;box-shadow:inset 0 0 0 3px #ffffff05,0 18px 50px #0006}.stone-panel:before,.stone-panel:after{content:"";pointer-events:none;width:16px;height:16px;position:absolute}.stone-panel:before{border-top:1px solid var(--gold);border-left:1px solid var(--gold);inset:7px auto auto 7px}.stone-panel:after{border-right:1px solid var(--gold);border-bottom:1px solid var(--gold);inset:auto 7px 7px auto}.primary-button,.secondary-button,.danger-button{letter-spacing:.08em;cursor:pointer;border:1px solid;min-height:48px;padding:.65rem 1.3rem;font-family:Noto Serif SC,serif;font-size:1rem;font-weight:700;box-shadow:inset 0 0 0 2px #0000004d,0 3px 10px #0000004d}.primary-button{color:#fff;background:linear-gradient(#326cad,#173e77);border-color:#7eb2ed}.primary-button:hover:not(:disabled){background:linear-gradient(#3f7dc2,#1c4b8c)}.secondary-button{border-color:var(--gold);color:var(--gold-light);background:linear-gradient(#273548,#141d2a)}.danger-button{color:#fff0e8;background:linear-gradient(#a63c3c,#67252a);border-color:#dc7872}.text-danger-button{color:#e57770;cursor:pointer;text-underline-offset:4px;background:0 0;border:0;min-height:44px;text-decoration:underline}.field{text-align:left;gap:.5rem;display:grid;position:relative}.field>span{color:var(--parchment);font-weight:600}.field input,.field select{color:#f5f0e2;background:#03080fb3;border:1px solid #485568;border-radius:3px;width:100%;min-height:52px;padding:.75rem .9rem}.field input:focus,.field select:focus{border-color:var(--blue);box-shadow:0 0 0 2px #4c84c63d}.password-field input{padding-right:3.5rem}.field-icon{color:#b9ad91;cursor:pointer;background:0 0;border:0;width:44px;height:44px;position:absolute;bottom:.25rem;right:.35rem}.form-error{color:#ff746c;min-height:1.45em;margin:.35rem 0;font-size:.9rem}.form-error.centered{text-align:center}.auth-page{background:radial-gradient(circle at 24% 44%,#3d557359,#0000 35%),linear-gradient(90deg,#050a1033,#050a10eb),repeating-linear-gradient(100deg,#ffffff03 0 1px,#0000 1px 6px),#090e16;grid-template-columns:minmax(0,1fr) minmax(460px,650px);gap:clamp(1rem,3vw,4rem);min-height:100svh;padding:clamp(1rem,3vw,3rem);display:grid}.auth-art{background:radial-gradient(circle at 46% 40%,#375d8b3d,#0000 27%),linear-gradient(#0000 38%,#05090ef2);border:1px solid #d1a85a3d;flex-direction:column;justify-content:space-between;min-height:680px;padding:clamp(1.5rem,5vw,5rem);display:flex}.auth-art:before{aspect-ratio:3/4;content:"";opacity:.72;filter:drop-shadow(0 20px 25px #000);background:url(/assets/roles/loyal-servant-card.webp) 50%/contain no-repeat;align-self:center;width:min(420px,80%)}.auth-art h1{color:var(--gold-light);margin-bottom:.45rem;font-size:clamp(2.2rem,5vw,4.4rem)}.auth-art>div:last-child>p:last-child{color:#b7c1cd}.auth-crest{color:var(--gold);font-size:2rem;position:absolute}.auth-panel{align-self:center;width:100%;padding:clamp(1.4rem,4vw,3.4rem)}.auth-panel>h1{color:var(--gold-light);text-align:center;margin-bottom:.6rem;font-size:clamp(1.75rem,3vw,2.6rem)}.crest-mark{text-align:center;color:var(--gold);font-size:2.3rem}.ornament{width:70%;color:var(--gold);align-items:center;margin:.5rem auto 2rem;display:flex}.ornament:before,.ornament:after{content:"";background:linear-gradient(90deg, transparent, var(--gold));flex:1;height:1px}.ornament:after{transform:scaleX(-1)}.ornament span{border:1px solid var(--gold);width:8px;height:8px;margin:0 .7rem;transform:rotate(45deg)}.auth-panel form{gap:1rem;display:grid}.auth-switch{color:var(--muted);text-align:center;margin:1.25rem 0 0}.auth-switch button{color:#62a8ef;cursor:pointer;background:0 0;border:0;min-height:44px}.app-header{z-index:20;border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#0a1019f5;align-items:center;min-height:68px;padding:0 clamp(.75rem,3vw,2rem);display:flex;position:sticky;top:0;box-shadow:0 8px 30px #00000059}.brand{min-height:48px;color:var(--gold-light);cursor:pointer;background:0 0;border:0;align-items:center;gap:.65rem;display:flex}.brand span{color:var(--gold)}.brand strong{letter-spacing:.13em;font-family:Noto Serif SC,serif;font-size:clamp(1.5rem,3vw,2.2rem)}.header-subtitle{border-left:1px solid var(--line);color:var(--muted);margin:0 0 0 2rem;padding-left:2rem}.app-header nav{align-items:center;gap:.5rem;margin-left:auto;display:flex}.app-header nav button{min-height:44px;color:var(--gold-light);cursor:pointer;background:0 0;border:1px solid #0000;padding:0 .8rem}.app-header nav button:hover{border-color:var(--line);background:#ffffff0a}.user-chip{border:1px solid var(--line);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;max-width:160px;padding:.5rem .85rem;overflow:hidden}.home-page{width:min(1100px,100% - 2rem);margin:0 auto;padding:clamp(3rem,8vw,7rem) 0}.home-hero{max-width:720px;margin-bottom:3rem}.home-hero h1{color:var(--gold-light);margin-bottom:.65rem;font-size:clamp(2.5rem,7vw,5.5rem)}.home-hero>p:last-child{color:var(--muted);font-size:1.1rem}.home-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;display:grid}.home-card{align-content:center;gap:1rem;min-height:340px;padding:clamp(1.4rem,4vw,2.6rem);display:grid}.inline-setting{min-height:48px;color:var(--parchment);justify-content:space-between;align-items:center;gap:1rem;display:flex}.inline-setting span{display:grid}.inline-setting small{color:var(--muted);font-size:.7rem}.inline-setting input{width:22px;height:22px;accent-color:var(--gold)}.home-card h2{color:var(--gold-light);margin:0;font-size:1.75rem}.card-rune{color:var(--gold);font-size:2.4rem}.compact-field{max-width:360px}.mobile-tabs{display:none}.room-page{background:var(--line);grid-template-columns:minmax(300px,400px) minmax(0,1fr);gap:1px;min-height:calc(100svh - 68px);display:grid}.room-code-bar{border-bottom:1px solid var(--line);background:#0b121c;grid-column:1/-1;justify-content:center;align-items:center;gap:1rem;min-height:58px;padding:.55rem 1rem;display:flex}.room-code-bar>span{color:var(--muted)}.room-code-bar strong{color:var(--gold-light);letter-spacing:.22em;font-family:ui-monospace,Cascadia Mono,monospace;font-size:1.45rem}.room-code-bar button{border:1px solid var(--gold);min-width:70px;min-height:38px;color:var(--gold-light);cursor:pointer;background:#182536}.member-panel,.settings-panel{border:0;padding:clamp(1rem,2.4vw,2rem)}.panel-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;margin-bottom:1rem;padding-bottom:.8rem;display:flex}.panel-heading h1{color:var(--gold-light);margin:0;font-size:1.45rem}.panel-heading span{color:var(--muted)}.member-list{gap:.5rem;margin:0 0 1rem;padding:0;list-style:none;display:grid}.member-list li{background:#0003;border:1px solid #344154;grid-template-columns:30px 46px minmax(0,1fr) auto auto;align-items:center;gap:.6rem;min-height:62px;padding:.45rem .65rem;display:grid}.member-list li.is-me{border-color:var(--gold);background:#2c425e73}.seat-number{color:var(--gold);text-align:center}.avatar-placeholder{border:1px solid var(--line);width:42px;height:42px;color:var(--gold-light);background:#182638;border-radius:50%;place-items:center;display:grid}.owner-badge{border:1px solid var(--gold);color:var(--gold-light);padding:.15rem .4rem;font-size:.72rem}.ready-state{color:#a8aeb6;font-size:.8rem}.ready-state.is-ready{color:#72cf85}.member-panel>button{width:100%}.lobby-chat{border-top:1px solid var(--line);grid-template-rows:auto minmax(130px,1fr) auto;max-height:330px;margin-top:1rem;padding-top:1rem;display:grid}.lobby-chat h2{color:var(--gold-light);margin:0 0 .5rem;font-size:1rem}.lobby-chat-log{background:#0003;border:1px solid #344154;padding:.45rem .65rem;overflow-y:auto}.lobby-chat-log p{border-bottom:1px solid #27313d;grid-template-columns:minmax(64px,auto) 1fr;gap:.5rem;margin:0;padding:.4rem 0;font-size:.82rem;display:grid}.lobby-chat-log strong{color:#65a9ea}.lobby-chat-log span{overflow-wrap:anywhere}.lobby-chat form{grid-template-columns:minmax(0,1fr) auto;gap:.4rem;margin-top:.45rem;display:grid}.lobby-chat input{color:#fff;background:#070c13;border:1px solid #485568;min-width:0;padding:.6rem}.lobby-chat .secondary-button{min-height:42px;padding:.4rem .7rem}.preset-tabs,.chat-tabs{border:1px solid #3a4657;grid-template-columns:repeat(3,1fr);display:grid}.preset-tabs button,.chat-tabs button,.mobile-tabs button{min-height:48px;color:var(--muted);cursor:pointer;background:#00000038;border:0;border-right:1px solid #3a4657}.preset-tabs button:last-child,.chat-tabs button:last-child{border-right:0}.preset-tabs button[aria-pressed=true],.chat-tabs button[aria-selected=true],.mobile-tabs button[aria-selected=true]{color:#fff;background:linear-gradient(#284f80,#172e51);box-shadow:inset 0 0 0 1px #538ac6}.role-mini-grid{grid-template-columns:repeat(4,minmax(100px,1fr));gap:.75rem;margin:1.4rem 0;display:grid}.role-mini-grid div{border:1px solid var(--line);min-height:110px;color:var(--parchment);text-align:center;background:radial-gradient(circle,#22344c,#0f1722);place-items:center;padding:.5rem;display:grid}.role-mini-grid span{color:var(--gold);font-size:1.5rem;display:block}.game-settings{border:0;border-top:1px solid var(--line);gap:.6rem;margin-top:1.2rem;padding:1rem 0;display:grid}.game-settings legend{color:var(--gold-light);padding-right:1rem;font-family:Noto Serif SC,serif;font-weight:700}.game-settings label{justify-content:space-between;align-items:center;gap:1rem;min-height:50px;display:flex}.game-settings small{color:var(--muted);margin-top:.15rem;display:block}.game-settings input{width:22px;height:22px;accent-color:var(--blue)}.start-button{width:min(460px,100%);margin-top:1.5rem}.start-hint,.owner-note{color:var(--muted);margin-top:.6rem}.game-page{grid-template-columns:minmax(0,1fr) minmax(320px,420px);height:calc(100svh - 68px);display:grid;overflow:hidden}.board-panel{background:radial-gradient(circle,#242f3ba6 0 36%,#0000 36.5%),radial-gradient(circle,#0000 0 42%,#d1a85a21 42.2% 42.5%,#0000 42.8%),repeating-radial-gradient(circle,#151b24 0 2px,#0e141c 3px 7px);min-height:700px;padding:1.2rem;position:relative;overflow:auto}.mission-track{z-index:2;justify-content:center;gap:clamp(.35rem,1vw,.9rem);display:flex;position:relative}.mission-token{aspect-ratio:1;color:#89909a;text-align:center;background:#161c25;border:3px solid #48505a;border-radius:50%;place-content:center;width:clamp(52px,6vw,76px);display:grid;box-shadow:inset 0 0 0 3px #0a0d12,0 4px 10px #0008}.mission-token span{font-family:Noto Serif SC,serif;font-size:1.2rem;font-weight:800}.mission-token small{font-size:.65rem}.mission-token.active{border-color:var(--gold);color:var(--gold-light);box-shadow:0 0 20px #d1a85a40}.mission-token.success{color:#fff;background:#173e72;border-color:#5aa1ed}.mission-token.failure{color:#fff;background:#6b2429;border-color:#d05d57}.rejection-track{z-index:2;color:var(--muted);text-align:center;justify-content:center;gap:.35rem;margin-top:.75rem;font-size:.75rem;display:grid;position:relative}.rejection-track div{gap:.5rem;display:flex}.rejection-track i{border:1px solid var(--gold);width:18px;height:18px;display:block;transform:rotate(45deg)}.rejection-track i.filled{background:var(--red);box-shadow:0 0 8px #b94545}.player-circle{z-index:2;grid-template-columns:repeat(5,minmax(82px,118px));justify-content:space-between;gap:.8rem;max-width:1050px;min-height:420px;margin:1.2rem auto 0;display:grid;position:relative}.player-seat{cursor:pointer;background:linear-gradient(#1c2735,#0b1018);border:1px solid #505867;align-content:center;align-self:start;justify-items:center;min-height:132px;padding:.5rem;display:grid;position:relative;box-shadow:0 8px 18px #0008}.player-seat:nth-child(n+6){align-self:end}.player-seat.selected{border-color:#67a8ec;box-shadow:0 0 0 2px #2a6aaf,0 10px 24px #000}.player-seat.leader{border-color:var(--gold)}.player-seat.offline{filter:saturate(.55);opacity:.68;border-style:dashed}.player-seat.offline small{color:#e38a82}.round-avatar{border:2px solid var(--gold);width:58px;height:58px;color:var(--gold-light);background:radial-gradient(circle at 40% 35%,#405471,#111b28 62%);border-radius:50%;place-items:center;font-family:Noto Serif SC,serif;font-size:1.2rem;display:grid}.player-seat strong{text-overflow:ellipsis;white-space:nowrap;width:100%;margin-top:.35rem;overflow:hidden}.player-seat small{color:var(--muted)}.crown{color:var(--gold-light);filter:drop-shadow(0 2px 2px #000);font-size:1.8rem;position:absolute;top:-21px}.central-action{z-index:4;width:min(530px,46%);position:absolute;top:48%;left:50%;transform:translate(-50%,-50%)}.action-panel{border:1px solid var(--gold);text-align:center;background:linear-gradient(150deg,#0c131cfa,#060a10fa);padding:clamp(1rem,2vw,1.8rem);box-shadow:0 14px 40px #000c,inset 0 0 0 3px #d1a85a14}.action-panel h2{color:var(--gold-light);margin-bottom:.5rem}.action-panel p:not(.eyebrow){color:#c3c7cb}.action-panel .primary-button{min-width:200px}.vote-count{font-size:1.1rem}.pending-voters{color:#ff7a70!important}.vote-actions{grid-template-columns:repeat(2,1fr);gap:.8rem;display:grid}.submitted-note{margin:.8rem 0 0;color:#7ac28a!important}.end-vote-panel{background:linear-gradient(145deg,#211817,#10151d);border:1px solid #744a39;padding:1rem}.end-vote-panel h3{color:#f0c876;margin:0 0 .6rem}.revealed-votes{z-index:4;border:1px solid var(--line);background:#080d14f0;width:min(250px,100% - 2rem);padding:.7rem;position:absolute;bottom:1rem;left:1rem}.revealed-votes h3{color:var(--gold-light);margin:0 0 .45rem;font-size:.9rem}.revealed-votes ul{gap:.25rem;margin:0;padding:0;list-style:none;display:grid}.revealed-votes li{justify-content:space-between;font-size:.78rem;display:flex}.revealed-votes .approved strong{color:#72afea}.revealed-votes .rejected strong{color:#e36c65}.assassination-targets{flex-wrap:wrap;justify-content:center;gap:.5rem;display:flex}.revealed-role-list{text-align:left;gap:.35rem;margin:1rem 0;padding:0;list-style:none;display:grid}.revealed-role-list li{border-bottom:1px solid #333d49;justify-content:space-between;padding:.35rem;display:flex}.role-concealed,.role-revealed{z-index:5;border:1px solid var(--line);background:#080d14f5;width:min(360px,100% - 2rem);min-height:78px;position:absolute;bottom:1rem;right:1rem}.role-concealed{min-height:70px;color:var(--parchment);cursor:pointer;text-align:left;grid-template-columns:52px 1fr;align-items:center;padding:.6rem .9rem;display:grid}.role-concealed strong,.role-concealed small{grid-column:2}.role-concealed small{color:var(--muted)}.role-sigil{color:var(--gold);grid-row:1/3;font-size:2rem}.role-card-back{filter:drop-shadow(0 3px 5px #000);background:url(/assets/ui/role-card-back.png) 50%/contain no-repeat;width:48px;height:56px}.faction-sigil{filter:drop-shadow(0 5px 10px #000);background-position:50%;background-repeat:no-repeat;background-size:contain;width:78px;height:78px;margin:0 auto .65rem;display:block}.faction-sigil.good{background-image:url(/assets/ui/good-emblem.png)}.faction-sigil.evil{background-image:url(/assets/ui/evil-emblem.png)}.role-revealed{grid-template-columns:105px 1fr;gap:.8rem;max-height:230px;padding:.7rem;display:grid;overflow:hidden}.role-revealed img{border:1px solid var(--gold);object-fit:cover;object-position:top;width:105px;height:140px}.role-revealed h2{color:var(--gold-light);margin:0 0 .3rem}.role-revealed p{margin-bottom:.5rem;font-size:.8rem}.role-revealed .secondary-button{min-height:38px;padding:.35rem .8rem}.board-error{position:absolute;bottom:.25rem;left:1rem}.chat-panel{border-width:0 0 0 1px;grid-template-rows:auto minmax(0,1fr) auto auto;height:100%;display:grid}.chat-tabs{grid-template-columns:repeat(2,1fr)}.message-list{padding:1rem;overflow-y:auto}.message-list p{border-bottom:1px solid #27313d;grid-template-columns:minmax(70px,auto) 1fr;gap:.55rem;margin:0;padding:.7rem 0;display:grid}.message-list strong{color:#65a9ea}.message-list span{color:#d7d9db;overflow-wrap:anywhere}.empty-chat{color:var(--muted)}.chat-form{border-top:1px solid #334052;grid-template-columns:1fr auto;gap:.5rem;padding:.7rem;display:grid}.chat-form input{color:#fff;background:#070c13;border:1px solid #485568;min-width:0;padding:.65rem}.chat-form button{min-width:72px}.chat-readonly-note{color:var(--muted);text-align:center;border-top:1px solid #334052;margin:0;padding:.8rem}.chat-panel>.text-danger-button{border-top:1px solid #27313d}.history-page{width:min(1180px,100% - 2rem);margin:auto;padding:clamp(2rem,5vw,4rem) 0}.history-heading h1{color:var(--gold-light);font-size:clamp(2.2rem,5vw,3.7rem)}.stats-grid{grid-template-columns:repeat(4,1fr);gap:.75rem;margin:1.5rem 0;display:grid}.stats-grid article{border:1px solid var(--line);background:var(--panel);align-content:center;min-height:120px;padding:1.1rem;display:grid}.stats-grid span{color:var(--muted)}.stats-grid strong{color:var(--gold-light);font-family:Noto Serif SC,serif;font-size:2rem}.good-stat strong{color:#69a9ec}.evil-stat strong{color:#e06a64}.history-list-panel{padding:clamp(1rem,3vw,2rem)}.history-list-panel h2{color:var(--gold-light)}.history-toolbar{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.history-toolbar h2{margin:0}.history-toolbar>div{border:1px solid #3a4657;display:flex}.history-toolbar button{min-height:42px;color:var(--muted);cursor:pointer;background:#0b121c;border:0;border-right:1px solid #3a4657;padding:.45rem .8rem}.history-toolbar button:last-child{border-right:0}.history-toolbar button[aria-pressed=true]{color:#fff;background:#234b7a}.role-stats{margin:1.5rem 0}.role-stats h2{color:var(--gold-light)}.role-stats>div{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.65rem;display:grid}.role-stats article{border:1px solid var(--line);background:#101925;padding:.8rem;display:grid}.role-stats span{color:var(--parchment)}.role-stats strong{color:var(--gold-light);font-size:1.35rem}.role-stats small{color:var(--muted)}.history-pagination{justify-content:center;align-items:center;gap:1rem;margin-top:1.2rem;display:flex}.history-pagination .secondary-button{min-height:42px}.history-list{gap:.6rem;margin:0;padding:0;list-style:none;display:grid}.history-list li{border-left:4px solid var(--muted);background:#0003;grid-template-columns:1.1fr 1.2fr 1fr auto;align-items:center;gap:.8rem;padding:.9rem 1rem;display:grid}.history-list li.won{border-left-color:var(--blue)}.history-list li.lost{border-left-color:var(--red)}.history-list li.incomplete{opacity:.72}.history-list li>div{display:grid}.history-list small{color:var(--muted)}.history-result strong{font-family:Noto Serif SC,serif;font-size:1.1rem}.history-list .secondary-button{min-height:42px}.replay-locked{color:var(--muted)}.empty-state{color:var(--muted);padding:2rem 0}.account-page{width:min(980px,100% - 2rem);margin:auto;padding:clamp(2rem,5vw,4rem) 0}.account-heading{margin-bottom:1.5rem}.account-heading h1{color:var(--gold-light);margin:.2rem 0;font-size:clamp(2.2rem,5vw,3.6rem)}.account-heading>p:last-child{color:var(--muted)}.account-grid{grid-template-columns:repeat(2,1fr);gap:1rem;display:grid}.account-card{align-content:start;gap:.85rem;padding:clamp(1rem,3vw,1.8rem);display:grid}.account-card h2{color:var(--gold-light);margin:0}.account-card>small{color:var(--muted)}.form-success{color:#72c88a;text-align:center;min-height:1.5rem}.member-actions{gap:.3rem;display:flex}.member-actions button{min-height:34px;color:var(--parchment);cursor:pointer;background:#111925;border:1px solid #4c5869}.member-actions .danger-link{color:#ef8c85;border-color:#673d3d}.custom-role-picker{gap:.75rem;display:grid}.custom-role-picker .role-mini-grid article{background:#080e16;border:1px solid #364153;align-content:end;min-height:170px;padding:.55rem;display:grid;position:relative;overflow:hidden}.custom-role-picker .role-mini-grid article:after{content:"";background:linear-gradient(#0000,#03070bf5);position:absolute;inset:45% 0 0}.custom-role-picker .role-mini-grid article.is-selected{border-color:var(--gold);box-shadow:inset 0 0 0 1px #8f713f}.custom-role-picker article img{object-fit:cover;object-position:top;opacity:.55;width:100%;height:100%;position:absolute;inset:0}.custom-role-picker article strong,.custom-role-picker article button,.custom-role-picker .role-count{z-index:1;position:relative}.custom-role-picker article strong{color:var(--gold-light);font-size:.85rem}.role-toggle,.role-count button{color:#fff;cursor:pointer;background:#111a25;border:1px solid #59677a;min-height:34px}.role-count{text-align:center;grid-template-columns:34px 1fr 34px;align-items:center;gap:.3rem;display:grid}.role-validation{border-left:3px solid var(--red);color:#ef9993;background:#1e1315;padding:.6rem .8rem;display:grid}.role-validation.is-valid{color:#88d49f;background:#101c17;border-color:#58a572}.role-validation span{font-size:.78rem}.preset-preview{min-height:auto;color:var(--muted);border:1px solid #344052;padding:1rem;display:block}.replay-page{background:var(--line);grid-template-columns:290px minmax(0,1fr) 340px;gap:1px;height:calc(100svh - 68px);display:grid;overflow:hidden}.replay-timeline,.replay-stage,.replay-side>section{border:0;padding:1.2rem}.replay-timeline h1,.replay-stage h2,.replay-side h2{color:var(--gold-light)}.replay-timeline ol{gap:.35rem;max-height:calc(100svh - 150px);margin:0;padding:0;list-style:none;display:grid;overflow-y:auto}.replay-timeline button{width:100%;min-height:48px;color:var(--muted);text-align:left;cursor:pointer;background:#0b121c;border:1px solid #344052;grid-template-columns:32px 1fr;align-items:center;display:grid}.replay-timeline button.active{border-color:var(--gold);color:#fff;background:#253247}.replay-timeline button span{color:var(--gold);text-align:center}.replay-stage{text-align:center;align-content:center;display:grid}.replay-event-card{background:radial-gradient(circle,#192537,#060b11 70%);border:1px solid #354052;place-content:center;width:min(680px,100%);min-height:240px;margin:1rem auto;padding:2rem;display:grid}.replay-event-card>span{color:var(--gold);font-size:2.8rem}.replay-event-card p{color:#b9c3cd;font-size:1.05rem}.replay-event-card small{color:var(--muted)}.replay-event-card.good{border-color:#386994;box-shadow:inset 0 0 40px #2567a029}.replay-event-card.evil{border-color:#783e42;box-shadow:inset 0 0 40px #9b31382e}.replay-controls{justify-content:center;gap:.8rem;display:flex}.replay-side{background:var(--line);grid-template-rows:1fr 1fr;gap:1px;display:grid;overflow:hidden}.replay-roles ul{gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.replay-roles li{border-bottom:1px solid #333d48;justify-content:space-between;padding:.5rem 0;display:flex}.replay-roles strong.good{color:#72afea}.replay-roles strong.evil{color:#e36c65}.replay-chat>div{max-height:35svh;overflow-y:auto}.replay-chat p{border-bottom:1px solid #d1a85a29;grid-template-columns:minmax(0,1fr);gap:.2rem;padding-bottom:.65rem;font-size:.85rem;display:grid}.replay-chat p strong,.replay-chat p span{overflow-wrap:anywhere;min-width:0}.replay-chat p.evil strong{color:#e36c65}.replay-chat p.public strong{color:#72afea}.loading-screen{min-height:100svh;color:var(--muted);text-align:center;background:radial-gradient(circle,#1c2a3d,#070b12 60%);place-content:center;display:grid}.loading-rune{color:var(--gold);font-size:3rem;animation:1.5s ease-in-out infinite rune-pulse}@keyframes rune-pulse{50%{opacity:.45;transform:scale(.9)}}@media (width<=1023px){.auth-page{grid-template-columns:minmax(0,1fr) minmax(400px,530px);gap:1rem}.auth-art{padding:2rem}.room-page{grid-template-columns:320px minmax(0,1fr)}.role-mini-grid{grid-template-columns:repeat(2,1fr)}.game-page{grid-template-columns:minmax(0,1fr) 340px}.player-circle{grid-template-columns:repeat(5,minmax(72px,1fr))}.player-seat{min-height:115px}.central-action{width:min(460px,54%)}.replay-page{grid-template-columns:240px minmax(0,1fr)}.replay-side{grid-column:1/-1;grid-template-rows:280px;grid-template-columns:1fr 1fr;display:grid}}@media (width<=767px){.auth-page{min-height:100svh;padding:.65rem;display:block}.auth-art{display:none}.auth-panel{align-content:center;min-height:calc(100svh - 1.3rem);padding:1.2rem}.auth-panel>h1{font-size:1.8rem}.app-header{min-height:60px;padding:0 .7rem}.brand strong{font-size:1.35rem}.header-subtitle,.user-chip{display:none}.app-header nav{gap:0}.app-header nav button{padding:0 .55rem}.home-page{width:min(100% - 1rem,560px);padding:2.5rem 0}.home-hero h1{font-size:2.7rem}.home-grid{grid-template-columns:1fr}.home-card{min-height:260px}.mobile-tabs{z-index:10;background:#0c131d;grid-column:1/-1;grid-template-columns:repeat(2,1fr);display:grid;position:sticky;top:60px}.replay-page>.mobile-tabs{grid-template-columns:repeat(3,1fr)}.room-page{background:var(--night);grid-template-columns:1fr;min-height:calc(100svh - 60px);display:grid}.room-code-bar{justify-content:space-between;min-height:54px;padding:.45rem .8rem}.room-code-bar strong{font-size:1.2rem}.member-panel,.settings-panel{border:0;min-height:calc(100svh - 108px);display:none}.member-panel.mobile-active,.settings-panel.mobile-active{display:block}.role-mini-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.member-list li{grid-template-columns:28px 42px minmax(0,1fr) auto}.owner-badge{display:none}.game-page{height:auto;display:block;overflow:visible}.board-panel{background:radial-gradient(circle at 50% 30%,#1a2431,#080d14 60%);flex-direction:column;min-height:0;padding:.75rem;display:flex;overflow:visible}.mission-track{order:1}.mission-token{width:min(17vw,66px)}.rejection-track{order:2}.player-circle{order:3;grid-template-columns:repeat(2,minmax(0,1fr));min-height:0;margin:1rem 0}.player-seat,.player-seat:nth-child(n+6){text-align:left;grid-template-columns:48px minmax(0,1fr) auto;align-self:auto;justify-items:start;min-height:68px}.round-avatar{grid-row:1/3;width:44px;height:44px}.player-seat strong{margin:0}.player-seat small{grid-column:2}.crown{font-size:1.2rem;top:-8px;left:35px}.central-action{order:4;width:100%;position:static;transform:none}.role-concealed,.role-revealed{order:5;width:100%;margin-top:.75rem;position:static}.role-revealed{max-height:none}.board-error{order:6;position:static}.revealed-votes{order:5;width:100%;margin-top:.75rem;position:static}.chat-panel{border-width:1px 0 0;height:min(540px,75svh)}.history-page{width:calc(100% - 1rem);padding:1.5rem 0}.stats-grid{grid-template-columns:repeat(2,1fr)}.history-list li{grid-template-columns:1fr 1fr}.history-toolbar{flex-direction:column;align-items:stretch}.history-toolbar>div{grid-template-columns:repeat(3,1fr);display:grid}.history-list li>:nth-child(3){display:none}.history-list .secondary-button,.replay-locked{justify-self:end}.account-grid{grid-template-columns:1fr}.member-actions{grid-column:3/-1;justify-self:end}.replay-page{background:var(--night);grid-template-columns:1fr;height:auto;min-height:calc(100svh - 60px);display:grid;overflow:visible}.replay-timeline,.replay-side>section{display:none}.replay-timeline.mobile-active{display:block}.replay-stage{grid-row:3;min-height:420px}.replay-side{display:contents}.replay-side>section.mobile-active{min-height:420px;display:block}}@media (width<=420px){.auth-panel{padding:1rem}.field input{min-height:50px}.primary-button,.secondary-button,.danger-button{min-height:46px}.member-panel,.settings-panel{padding:.75rem}.role-mini-grid div{min-height:92px;font-size:.8rem}.custom-role-picker .role-mini-grid article{min-height:145px}.player-circle,.vote-actions{grid-template-columns:1fr}.stats-grid article{min-height:100px}.history-list li{grid-template-columns:1fr}.history-pagination{flex-wrap:wrap}.history-list .secondary-button,.replay-locked{text-align:center;justify-self:stretch}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}html,body,#root{width:100%;height:100%;overflow:hidden}.page-shell{grid-template-rows:auto minmax(0,1fr);height:100dvh;display:grid;overflow:hidden}.header-back{min-height:40px;color:var(--parchment);cursor:pointer;background:#111a26;border:1px solid #435067;padding:0 .8rem}.home-page{background:linear-gradient(90deg,#05090f61,#05090fc7 42% 58%,#05090f61),linear-gradient(#0000 28%,#05090fe0),url(/assets/avalon-duel-hero.webp) 50%/cover no-repeat;width:100%;height:100%;margin:0;padding:clamp(2rem,5vh,4rem) max(1rem,50% - 590px);position:relative;overflow:auto}.home-hero{text-align:center;text-shadow:0 3px 16px #000;max-width:680px;margin:0 auto clamp(1.2rem,3vh,2.4rem)}.home-hero h1{margin-top:.2rem}.home-grid{max-width:980px;margin:auto}.home-card{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:linear-gradient(145deg,#0c141ff5,#04080deb);min-height:300px}.room-page{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(280px,330px) minmax(520px,1fr) minmax(320px,390px);height:100%;min-height:0;overflow:hidden}.member-panel,.settings-panel,.lobby-chat-panel{min-height:0;overflow:auto}.lobby-chat-panel{border:0;padding:1rem}.lobby-chat-panel .lobby-chat{border:0;grid-template-rows:auto minmax(0,1fr) auto;height:100%;max-height:none;margin:0;padding:0}.member-list strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.custom-role-picker .role-mini-grid{grid-template-columns:repeat(4,minmax(125px,1fr));gap:.65rem}.custom-role-picker .role-mini-grid article{aspect-ratio:3/4;min-height:0;padding:.5rem}.custom-role-picker article img{object-fit:contain;object-position:center;opacity:.82}.custom-role-picker .role-mini-grid article:after{inset:58% 0 0}.game-mobile-tabs{display:none}.game-page{grid-template-columns:minmax(0,1fr) minmax(360px,32vw);height:100%;min-height:0}.board-panel{min-height:0}.mission-token{font:inherit;cursor:pointer}.mission-token:hover,.mission-token:focus-visible{border-color:var(--gold-light);transform:translateY(-2px)}.desktop-role-reveal>.role-concealed,.desktop-role-reveal>.role-revealed{bottom:1rem;right:1rem}.role-revealed img{object-fit:contain;object-position:center;background:#05080d}.mobile-role-panel{display:none}.battle-history-drawer{z-index:50;justify-items:end;display:grid;position:fixed;inset:0}.drawer-scrim{cursor:pointer;background:#00000094;border:0;width:100%;position:absolute;inset:0}.drawer-content{border-width:0 0 0 1px;width:min(520px,92vw);height:100%;padding:1rem;position:relative;box-shadow:-18px 0 50px #0009}.drawer-content>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;display:flex}.drawer-content h2{color:var(--gold-light);margin:.2rem 0 1rem}.drawer-content>header>button{color:#fff;cursor:pointer;background:#121b28;border:1px solid #465269;width:44px;height:44px;font-size:1.5rem}.drawer-scroll{height:calc(100% - 82px);padding:.8rem 0;overflow-y:auto}.vote-record,.mission-record{background:#0a111a;border:1px solid #344052;margin-bottom:.8rem;padding:.85rem}.vote-record h3,.mission-record h3{color:var(--gold-light);margin-top:0}.vote-record ul{grid-template-columns:repeat(2,1fr);gap:.35rem;margin:.7rem 0 0;padding:0;list-style:none;display:grid}.vote-record li{border-bottom:1px solid #27313d;justify-content:space-between;padding:.35rem;display:flex}.vote-record .approve,.mission-record.success h3{color:#73ca8c}.vote-record .reject,.mission-record.failure h3{color:#ed827b}.history-page,.account-page{height:100%;overflow-y:auto}.replay-page-v2{grid-template-rows:auto minmax(0,1fr) auto;gap:.65rem;min-height:0;padding:.8rem;display:grid;overflow:hidden}.replay-toolbar{justify-content:space-between;align-items:center;gap:1rem;display:flex}.replay-toolbar h1{color:var(--gold-light);margin:0;font-size:clamp(1.35rem,3vw,2.1rem)}.replay-toolbar p{margin:0}.replay-export-sheet{grid-template-columns:minmax(0,1fr) minmax(310px,360px);gap:.65rem;min-height:0;display:grid;overflow:hidden}.replay-flow{min-height:0;padding:1rem;overflow-y:auto}.replay-flow h2{color:var(--gold-light);margin-top:0}.replay-flow ol{margin:0;padding:0 0 1rem;list-style:none}.replay-flow li{grid-template-columns:42px minmax(0,1fr);gap:.75rem;padding-bottom:.85rem;display:grid;position:relative}.replay-flow li:before{content:"";background:#4b5260;width:1px;position:absolute;top:37px;bottom:-4px;left:20px}.replay-flow li:last-child:before{display:none}.timeline-sequence{border:1px solid var(--gold);width:42px;height:42px;color:var(--gold-light);background:#111a26;border-radius:50%;place-items:center;display:grid}.replay-flow article{background:#0a111a;border:1px solid #344052;padding:.75rem .9rem}.replay-flow li.good article{border-left:3px solid #4b8fc9}.replay-flow li.evil article{border-left:3px solid #b55057}.replay-flow article header{justify-content:space-between;gap:1rem;display:flex}.replay-flow article time,.replay-chat time{color:var(--muted);font-size:.72rem}.replay-flow article p{color:#bdc5cd;margin-bottom:0}.replay-archive-side{grid-template-rows:minmax(180px,auto) minmax(0,1fr);gap:.65rem;min-height:0;display:grid}.replay-archive-side>section{min-height:0;padding:1rem;overflow:auto}.replay-chat>div{max-height:none}.replay-chat p{grid-template-columns:1fr auto}.replay-chat p span{grid-column:1/-1}.replay-mobile-tabs{display:none}.replay-export-sheet.is-exporting{align-items:start;width:1200px;overflow:visible}.replay-export-sheet.is-exporting .replay-flow,.replay-export-sheet.is-exporting .replay-archive-side>section{overflow:visible}@media (width<=1199px) and (width>=768px){.room-page{grid-template-columns:280px minmax(430px,1fr) 330px}.custom-role-picker .role-mini-grid{grid-template-columns:repeat(2,minmax(130px,1fr))}}@media (width<=767px){.app-header{min-height:58px}.header-back{order:2;margin-left:auto}.app-header .brand{flex:none}.app-header nav{margin-left:0}.home-page{background-position:48%;width:100%;height:100%;padding:1rem}.home-hero{margin-bottom:.8rem}.home-hero h1{font-size:clamp(2rem,10vw,3rem)}.home-grid{grid-template-columns:1fr}.home-card{min-height:0;padding:1rem}.room-page{grid-template-rows:auto auto minmax(0,1fr);grid-template-columns:1fr;height:100%;min-height:0}.room-page>.mobile-tabs{grid-template-columns:repeat(3,1fr);position:static}.member-panel,.settings-panel,.lobby-chat-panel{height:100%;min-height:0;display:none;overflow-y:auto}.member-panel.mobile-active,.settings-panel.mobile-active,.lobby-chat-panel.mobile-active{display:block}.lobby-chat-panel.mobile-active{padding:.75rem}.custom-role-picker .role-mini-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.custom-role-picker .role-mini-grid article{aspect-ratio:3/4;min-height:0}.game-page{grid-template-rows:auto minmax(0,1fr);grid-template-columns:1fr;height:100%;display:grid;overflow:hidden}.game-mobile-tabs{background:#0c131d;grid-template-columns:repeat(3,1fr);display:grid}.game-mobile-tabs button{min-height:44px;color:var(--muted);background:#0c131d;border:0;border-right:1px solid #344052}.game-mobile-tabs button[aria-selected=true]{color:#fff;background:#1d3c63}.board-panel,.chat-panel,.mobile-role-panel{height:100%;min-height:0;display:none;overflow-y:auto}.board-panel.mobile-active{display:flex}.chat-panel.mobile-active{border:0;display:grid}.mobile-role-panel.mobile-active{background:radial-gradient(circle,#182638,#070b12 72%);place-items:center;padding:.75rem;display:grid}.mobile-role-panel .role-concealed,.mobile-role-panel .role-revealed{width:min(100%,430px);position:static}.mobile-role-panel .role-revealed{grid-template-columns:minmax(130px,42%) 1fr;max-height:min(70dvh,560px)}.mobile-role-panel .role-revealed img{aspect-ratio:3/4;width:100%;height:auto}.desktop-role-reveal{display:none}.chat-panel{height:100%}.drawer-content{border-width:1px 0 0;align-self:end;width:100%;height:min(82dvh,680px)}.battle-history-drawer{align-items:end}.history-page,.account-page{width:100%;padding:1rem}.replay-page-v2{grid-template-rows:auto auto minmax(0,1fr) auto;padding:.55rem}.replay-toolbar .eyebrow{display:none}.replay-toolbar .secondary-button{min-height:40px;padding:.45rem .6rem}.replay-mobile-tabs{grid-template-columns:repeat(3,1fr);display:grid;position:static}.replay-export-sheet{height:100%;min-height:0;display:block;overflow:hidden}.replay-flow,.replay-archive-side>section{height:100%;display:none}.replay-flow.mobile-active,.replay-archive-side>section.mobile-active{display:block}.replay-archive-side{display:contents}.replay-export-sheet.is-exporting{grid-template-columns:820px 360px;width:1200px;height:auto;display:grid;overflow:visible}.replay-export-sheet.is-exporting .replay-flow,.replay-export-sheet.is-exporting .replay-archive-side,.replay-export-sheet.is-exporting .replay-archive-side>section{height:auto;display:block}}
