:root{color-scheme:dark;--bg:#111a25;--panel:#182431;--ink:#ede4cf;--muted:#a6afbb;--gold:#d2b276;--line:#514b3e;--blue:#8cb6ea;--red:#ee989c;--green:#a4ceb4;--serif:'Noto Serif SC','Songti SC','SimSun',serif}*{box-sizing:border-box}body{margin:0;min-width:320px;background:radial-gradient(ellipse at 50% 0,#26364b 0,transparent 65%),var(--bg);color:var(--ink);font:15px/1.6 system-ui,'Microsoft YaHei',sans-serif}button,input,select,textarea{font:inherit}button,a,input,textarea{touch-action:manipulation}button{cursor:pointer;border:1px solid var(--line);border-radius:9px;background:#233142;color:var(--ink);padding:10px 16px;min-height:44px}button:hover:enabled{border-color:var(--gold);background:#2a3d50}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--gold);outline-offset:3px}a{color:var(--gold);text-underline-offset:3px}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:var(--serif)}h1{font-size:44px;line-height:1.25;letter-spacing:5px}h2{font-size:23px;letter-spacing:2px}h3{font-size:17px;letter-spacing:1px}small,.muted{color:var(--muted);font-size:13px}.site-header{max-width:1180px;margin:auto;display:flex;justify-content:space-between;align-items:center;padding:23px 30px;border-bottom:1px solid #d2b27626;gap:12px}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink);font:24px var(--serif);letter-spacing:4px}.brand-mark{color:var(--gold);font-size:40px}.brand small{display:block;font:9px/2 system-ui;letter-spacing:2px;color:var(--gold)}.header-actions{display:flex;align-items:center;gap:16px}.network-state{font-size:12px;color:var(--muted)}.icon-button{width:40px;height:40px;min-height:40px;padding:0;border-radius:50%;font:20px var(--serif)}main{max-width:1180px;margin:auto;padding:30px}.loading{padding:80px;text-align:center}.hero{display:grid;grid-template-columns:1fr 210px;align-items:center;gap:32px;max-width:850px;margin:10px auto 30px}.eyebrow{font-size:11px;letter-spacing:3px;color:var(--gold);margin-bottom:14px}.hero h1{margin-bottom:14px}.hero p{color:#bec7d1;max-width:500px}.hero-art{width:175px;max-height:260px;object-fit:contain;border:1px solid #a98550;box-shadow:0 20px 70px #0008,0 0 35px #d2b27616;border-radius:13px;transform:rotate(5deg);justify-self:end}.home-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:22px;max-width:1000px;margin:auto}.panel{background:linear-gradient(150deg,#1d2a3aee,#16212eee);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:0 12px 45px #0002}.panel p:last-child{margin-bottom:0}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.mode-label,.badge{display:inline-block;border:1px solid #ad8b5259;border-radius:30px;padding:3px 9px;font-size:11px;line-height:1.5;color:var(--gold);background:#d2b2760a}.badge.good{border-color:#8cb6ea80;color:var(--blue)}.badge.evil{border-color:#ee989c80;color:var(--red)}label{display:block;font-size:13px;color:#c6c9cd;margin-bottom:6px}input,textarea{width:100%;border:1px solid #5d6570;background:#101b27;color:var(--ink);padding:12px;border-radius:9px;min-height:46px}input::placeholder,textarea::placeholder{color:#77879a}.form-row{display:flex;gap:10px}.form-row input{min-width:0;flex:1}.form-row button{flex-shrink:0}.field{margin-bottom:18px}.avatars{display:flex;flex-wrap:wrap;gap:7px}.avatar-choice{font-size:23px;min-width:44px;padding:5px 7px}.avatar-choice.active{border-color:var(--gold);background:#826c3d3b}.primary{background:linear-gradient(#cbb17c,#a4874f);border-color:#d1b77e;color:#171a20;font-weight:700}.primary:hover:enabled{background:#dfc28b;color:#111}.danger{color:var(--red);border-color:#a35e616e}.full{width:100%}.actions-row{display:flex;gap:10px;flex-wrap:wrap}.actions-row>*{flex:1}.divider{height:1px;background:#ccb48725;margin:24px 0}.notice{padding:12px 15px;border:1px solid #a88e4c65;border-radius:9px;background:#d2b27609;font-size:13px;color:#d4c6a8;margin-bottom:18px}.notice.blue{border-color:#6b94ba70;color:#b6cce2;background:#406b8b15}.resume-box{max-width:1000px;margin:0 auto 20px}.room-top{display:flex;gap:15px;align-items:flex-start;justify-content:space-between;margin-bottom:18px}.room-top h1{font-size:28px;margin:5px 0}.room-tools{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.room-code{font-family:ui-monospace,monospace;font-size:18px;letter-spacing:3px;color:var(--gold)}.room-columns{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:22px;align-items:start}.roster{display:grid;gap:9px}.roster-item{display:flex;align-items:center;gap:12px;border:1px solid #5965784d;border-radius:10px;padding:10px 12px;background:#101a262e}.roster-icon{font-size:27px}.roster-name{flex:1;min-width:0;overflow-wrap:anywhere}.roster-name small{display:block;font-size:11px}.ready{color:var(--green);font-size:12px}.offline{color:#b09594;font-size:12px}.roster-item>button{min-height:32px;padding:3px 8px;font-size:12px}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}.setting{display:flex;gap:8px;align-items:center;border:1px solid #6570834d;padding:9px;border-radius:8px;margin:0;color:var(--ink)}.setting input{width:18px;min-height:18px;height:18px;accent-color:var(--gold)}.role-list{font-size:13px;margin:12px 0;color:var(--muted)}.lobby-bottom{margin-top:20px;display:flex;gap:10px}.lobby-bottom>*{flex:1}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:22px;align-items:start}.quest-track{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:16px}.quest-slot{border:1px solid #6f6b5b;border-radius:10px;text-align:center;padding:9px 3px;background:#192535;font-size:12px;position:relative}.quest-slot b{display:block;font-family:var(--serif);font-size:22px;color:var(--gold)}.quest-slot.current{border-color:var(--gold);box-shadow:0 0 0 2px #d2b27622}.quest-slot.success{border-color:#669c7b;background:#1d382e}.quest-slot.fail{border-color:#a86569;background:#3a252e}.quest-slot small{font-size:10px}.phase-heading{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px}.phase-heading h2{margin:0;font-size:22px}.rejection-track{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--muted)}.pip{width:8px;height:8px;border-radius:50%;border:1px solid #8b795d}.pip.on{background:#d9926c;border-color:#d9926c}.round-table{position:relative;height:430px;max-width:700px;margin:0 auto 18px;border-radius:46%;background:radial-gradient(ellipse,#273c4a77 0,#192b3370 47%,#8b714529 48%,#20323b70 49%,transparent 50%),radial-gradient(ellipse,#2b3c4444,transparent 70%)}.table-centre{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;color:var(--gold);pointer-events:none;font-size:13px}.table-centre span{display:block;font-size:48px;font-family:var(--serif);line-height:1.5}.seat{position:absolute;transform:translate(-50%,-50%);width:100px;text-align:center}.seat-button{position:relative;width:100%;padding:7px 3px;border:1px solid #5e6d7b;border-radius:12px;background:#192635;min-height:88px}.seat-button:disabled{opacity:1}.seat-button.self{box-shadow:0 0 0 2px #8cb6ea39}.seat-button.selected{border-color:#e4bf6b;box-shadow:0 0 16px #d2b2762e;background:#3f3b30}.seat-icon{font-size:26px;line-height:1.3;display:block}.seat-name{display:block;font-size:12px;line-height:1.5;min-height:18px;overflow-wrap:anywhere}.seat-number{position:absolute;left:4px;top:3px;color:#9cabbc;font-size:10px}.seat-flags{display:block;min-height:18px;color:var(--gold);font-size:11px;line-height:1.5}.seat-away{opacity:.55}.action-panel{border:1px solid #bda16c70;background:#1d2c3d;border-radius:13px;padding:20px;margin-bottom:18px}.action-panel h3{margin:0 0 8px}.action-panel p{font-size:13px;color:#bac5d2}.action-panel .actions-row{margin-top:14px}.action-panel .result{font:28px var(--serif);color:var(--gold)}.history{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#16212c}.history summary{padding:15px;cursor:pointer;color:var(--gold);font-size:14px}.history-body{padding:0 15px 14px;max-height:550px;overflow:auto}.history-item{border-top:1px solid #ffffff14;padding-top:12px;margin-top:12px;font-size:12px}.history-item p{margin-bottom:6px}.vote-grid{display:flex;gap:6px;flex-wrap:wrap}.vote-tag{border:1px solid #66738955;border-radius:5px;padding:2px 6px;font-size:11px}.vote-tag.yes{color:var(--green)}.vote-tag.no{color:var(--red)}.side-panel{display:grid;gap:15px}.role-secret{display:flex;gap:10px;align-items:center;justify-content:center;width:100%;padding:18px;background:linear-gradient(135deg,#253a51,#182839);border:1px solid #8f7b5466}.role-secret .sigil{font-size:28px;color:var(--gold)}.role-secret small{display:block;font-size:11px}.side-info{padding:16px;font-size:13px}.end-panel{text-align:center;padding:32px}.end-panel h2{font-size:32px;color:var(--gold)}.end-roles{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin:22px 0}.end-role{border:1px solid #77705e66;border-radius:9px;padding:10px;background:#111b26}.end-role img{height:130px;max-width:100%;object-fit:contain;display:block;margin:0 auto 7px}.end-role p{font-size:13px;margin:0}.end-role small{font-size:12px}.site-footer{max-width:1180px;margin:10px auto 0;padding:20px 30px 26px;border-top:1px solid #d2b27622;display:flex;justify-content:center;gap:8px 18px;flex-wrap:wrap;font-size:10px;color:#929b9f}.site-footer a{color:#a5aaa9}dialog{max-width:min(560px,calc(100vw - 24px));width:560px;max-height:90dvh;padding:28px;border:1px solid #b99b60;border-radius:17px;background:#192635;color:var(--ink);box-shadow:0 20px 100px #000a;overflow:auto}dialog::backdrop{background:#060c16ce;backdrop-filter:blur(5px)}.dialog-close{position:absolute;right:11px;top:11px;font-size:24px;line-height:1;padding:2px;width:34px;height:34px;min-height:34px;border-radius:50%;background:#1b2939}.dialog-title{padding-right:28px;color:var(--gold);margin-bottom:15px}.dialog-body{font-size:14px}.guide-roles{display:grid;gap:12px;margin:20px 0}.guide-role{border-left:2px solid var(--gold);padding:8px 13px;background:#ffffff04}.guide-role h3{margin-bottom:5px}.guide-role p{font-size:13px;color:var(--muted);margin:0}.role-cover{border:1px solid var(--gold);border-radius:12px;background:repeating-linear-gradient(45deg,#26364a 0 10px,#1e2c3e 10px 20px);color:var(--gold);height:290px;width:195px;display:flex;flex-direction:column;align-items:center;justify-content:center;margin:12px auto;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;position:relative;overflow:hidden}.role-cover .cover-mark{font-size:60px;line-height:1.5}.role-cover .cover-text{font-size:12px;padding:0 8px}.role-cover img{display:none;position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#111a25}.is-peeking .role-cover img{display:block}.private-role{display:none}.is-peeking .private-role{display:block}.role-name{font-size:25px;color:var(--gold);margin-bottom:6px}.role-desc{font-size:13px;color:#bac5d2}.intel{border:1px solid #7591b66e;background:#2a446629;border-radius:10px;padding:12px;font-size:13px;margin:12px 0}.intel strong{color:var(--blue)}.pair-qr{width:min(100%,320px);height:auto;display:block;background:white;border-radius:10px;margin:16px auto}.pair-text{font:11px/1.6 ui-monospace,monospace;min-height:80px;word-break:break-all}.scan-video{width:100%;max-height:300px;object-fit:cover;background:#071019;border-radius:10px;margin-bottom:12px}.pair-actions{display:grid;gap:10px}.pair-step{font-size:12px;color:var(--gold);margin-bottom:5px}.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));transform:translateX(-50%);max-width:calc(100vw - 32px);width:max-content;border:1px solid #ba9b67;background:#29384d;color:#f1e8d7;padding:12px 18px;border-radius:10px;box-shadow:0 5px 35px #0007;z-index:20;font-size:14px}.toast[hidden]{display:none}.private-reminder{font-size:11px;color:var(--muted);text-align:center}.qr-note{color:var(--muted);font-size:12px}.home-link{font-size:12px}.spacer{height:12px}
@media(max-width:900px){.room-columns,.game-layout{grid-template-columns:1fr}.side-panel{grid-template-columns:1fr 1fr}.history{grid-column:1/-1}.side-info{margin-bottom:0}.hero{max-width:700px}.round-table{max-width:600px}.room-tools{max-width:340px}}
@media(max-width:600px){.site-header{padding:15px 18px}.brand{font-size:20px;gap:7px;letter-spacing:3px}.brand-mark{font-size:32px}.brand small{font-size:8px}.header-actions{gap:9px}.network-state{max-width:95px;font-size:10px;text-align:right}.icon-button{width:34px;height:34px;min-height:34px}main{padding:20px 15px}.hero{grid-template-columns:1fr 95px;gap:15px;margin:0 auto 22px}.hero h1{font-size:32px;letter-spacing:3px}.hero p{font-size:13px;margin-bottom:0}.hero-art{width:90px;max-height:160px}.eyebrow{font-size:9px;letter-spacing:2px;margin-bottom:8px}.home-grid{grid-template-columns:1fr;gap:15px}.panel{padding:19px;border-radius:13px}.room-top{flex-direction:column;gap:10px}.room-top h1{font-size:25px}.room-tools{max-width:none;justify-content:flex-start}.room-tools button{font-size:12px;min-height:38px;padding:6px 10px}.room-code{font-size:16px}.room-columns,.game-layout{gap:15px}.phase-heading h2{font-size:19px}.quest-track{gap:5px}.quest-slot{padding:7px 2px;font-size:10px}.quest-slot b{font-size:20px}.round-table{height:410px;margin-bottom:12px}.seat{width:82px}.seat-button{min-height:78px;padding:6px 2px}.seat-icon{font-size:24px}.seat-name{font-size:11px}.seat-flags{font-size:9px}.table-centre{font-size:11px}.table-centre span{font-size:39px}.action-panel{padding:16px}.side-panel{grid-template-columns:1fr}.role-secret{padding:14px}.site-footer{padding:18px 16px calc(20px + env(safe-area-inset-bottom));font-size:9px;gap:6px 12px}dialog{padding:24px 18px}.end-panel{padding:22px 16px}.end-roles{grid-template-columns:repeat(2,1fr)}.end-role img{height:145px}.form-row{flex-wrap:wrap}.form-row button{flex:1}.loading{padding:60px 10px}.role-cover{height:260px;width:176px}.dialog-title{font-size:21px}}
/* Extra seats need a taller oval and narrower cards on small screens. */
.round-table[data-count="9"],.round-table[data-count="10"]{height:540px}
.round-table[data-count="9"] .seat,.round-table[data-count="10"] .seat{width:clamp(64px,12%,90px)}
@media(max-width:600px){.round-table[data-count="9"],.round-table[data-count="10"]{height:620px}.round-table[data-count="9"] .seat,.round-table[data-count="10"] .seat{width:clamp(56px,18vw,72px)}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

.round-table[data-count="5"] .seat:nth-of-type(2){left:50.000%;top:12.000%;}
.round-table[data-count="5"] .seat:nth-of-type(3){left:84.238%;top:38.257%;}
.round-table[data-count="5"] .seat:nth-of-type(4){left:71.160%;top:80.743%;}
.round-table[data-count="5"] .seat:nth-of-type(5){left:28.840%;top:80.743%;}
.round-table[data-count="5"] .seat:nth-of-type(6){left:15.762%;top:38.257%;}
.round-table[data-count="6"] .seat:nth-of-type(2){left:50.000%;top:12.000%;}
.round-table[data-count="6"] .seat:nth-of-type(3){left:81.177%;top:31.000%;}
.round-table[data-count="6"] .seat:nth-of-type(4){left:81.177%;top:69.000%;}
.round-table[data-count="6"] .seat:nth-of-type(5){left:50.000%;top:88.000%;}
.round-table[data-count="6"] .seat:nth-of-type(6){left:18.823%;top:69.000%;}
.round-table[data-count="6"] .seat:nth-of-type(7){left:18.823%;top:31.000%;}
.round-table[data-count="7"] .seat:nth-of-type(2){left:50.000%;top:12.000%;}
.round-table[data-count="7"] .seat:nth-of-type(3){left:78.146%;top:26.307%;}
.round-table[data-count="7"] .seat:nth-of-type(4){left:85.097%;top:58.456%;}
.round-table[data-count="7"] .seat:nth-of-type(5){left:65.620%;top:84.237%;}
.round-table[data-count="7"] .seat:nth-of-type(6){left:34.380%;top:84.237%;}
.round-table[data-count="7"] .seat:nth-of-type(7){left:14.903%;top:58.456%;}
.round-table[data-count="7"] .seat:nth-of-type(8){left:21.854%;top:26.307%;}
.round-table[data-count="8"] .seat:nth-of-type(2){left:50.000%;top:12.000%;}
.round-table[data-count="8"] .seat:nth-of-type(3){left:75.456%;top:23.130%;}
.round-table[data-count="8"] .seat:nth-of-type(4){left:86.000%;top:50.000%;}
.round-table[data-count="8"] .seat:nth-of-type(5){left:75.456%;top:76.870%;}
.round-table[data-count="8"] .seat:nth-of-type(6){left:50.000%;top:88.000%;}
.round-table[data-count="8"] .seat:nth-of-type(7){left:24.544%;top:76.870%;}
.round-table[data-count="8"] .seat:nth-of-type(8){left:14.000%;top:50.000%;}
.round-table[data-count="8"] .seat:nth-of-type(9){left:24.544%;top:23.130%;}
.round-table[data-count="9"] .seat:nth-of-type(2){left:50.000%;top:12.000%;}
.round-table[data-count="9"] .seat:nth-of-type(3){left:73.140%;top:20.890%;}
.round-table[data-count="9"] .seat:nth-of-type(4){left:85.453%;top:43.401%;}
.round-table[data-count="9"] .seat:nth-of-type(5){left:81.177%;top:69.000%;}
.round-table[data-count="9"] .seat:nth-of-type(6){left:62.313%;top:85.708%;}
.round-table[data-count="9"] .seat:nth-of-type(7){left:37.687%;top:85.708%;}
.round-table[data-count="9"] .seat:nth-of-type(8){left:18.823%;top:69.000%;}
.round-table[data-count="9"] .seat:nth-of-type(9){left:14.547%;top:43.401%;}
.round-table[data-count="9"] .seat:nth-of-type(10){left:26.860%;top:20.890%;}
.round-table[data-count="10"] .seat:nth-of-type(2){left:50.000%;top:12.000%;}
.round-table[data-count="10"] .seat:nth-of-type(3){left:71.160%;top:19.257%;}
.round-table[data-count="10"] .seat:nth-of-type(4){left:84.238%;top:38.257%;}
.round-table[data-count="10"] .seat:nth-of-type(5){left:84.238%;top:61.743%;}
.round-table[data-count="10"] .seat:nth-of-type(6){left:71.160%;top:80.743%;}
.round-table[data-count="10"] .seat:nth-of-type(7){left:50.000%;top:88.000%;}
.round-table[data-count="10"] .seat:nth-of-type(8){left:28.840%;top:80.743%;}
.round-table[data-count="10"] .seat:nth-of-type(9){left:15.762%;top:61.743%;}
.round-table[data-count="10"] .seat:nth-of-type(10){left:15.762%;top:38.257%;}
.round-table[data-count="10"] .seat:nth-of-type(11){left:28.840%;top:19.257%;}