:root{color-scheme:dark;--bg:#101116;--panel:#181a22;--panel2:#1e202a;--line:#30323e;--text:#f2eee6;--muted:#a6a7b2;--gold:#e1c49b;--red:#bd4e5b;--accent:#cf7882;--green:#9dc4ab;--shadow:0 18px 50px #0003;--radius:14px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:"Segoe UI","Microsoft JhengHei",system-ui,sans-serif;font-size:16px;line-height:1.65}body.light{color-scheme:light;--bg:#f2f3f6;--panel:#fff;--panel2:#f6f6fa;--line:#d8d9e1;--text:#242530;--muted:#666875;--gold:#80572e;--red:#a53546;--accent:#a53546;--green:#3d7652;--shadow:0 18px 50px #16213e0b}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid var(--gold);outline-offset:3px}button{color:inherit}input,select,textarea{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:8px;color:var(--text);padding:11px 13px;min-height:46px}textarea{resize:vertical;min-height:100px}label{display:block;font-size:14px;color:var(--muted);margin-bottom:7px}h1,h2,h3,p{margin:0}h1{font-size:clamp(28px,4vw,44px);line-height:1.28;letter-spacing:.04em}h2{font-size:22px;font-weight:600}h3{font-size:17px}small{font-size:13px;color:var(--muted)}.topbar{height:85px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 max(24px,calc((100vw - 1420px)/2));gap:16px}.brand{display:flex;align-items:center;gap:10px;font-size:22px;font-weight:600;letter-spacing:.1em}.brand-symbol{font-size:37px;color:var(--gold);line-height:1}.brand-sub{font-size:13px;margin-left:10px;font-weight:400;letter-spacing:.08em;color:var(--muted)}.topbar nav{display:flex;align-items:center;gap:24px;font-size:14px}.topbar a:hover,footer a:hover{color:var(--gold)}.icon-button{min-width:44px;min-height:44px;border:1px solid var(--line);background:transparent;border-radius:50%;font-size:21px}.identity{color:var(--muted);display:flex;gap:12px;align-items:center}.text-button{border:0;background:transparent;min-height:44px;color:var(--muted);padding:0 4px}.text-button:hover{color:var(--text)}main{min-height:calc(100vh - 156px);max-width:1420px;margin:auto;padding:32px 24px 44px}footer{padding:19px 24px;color:var(--muted);border-top:1px solid var(--line);font-size:13px;display:flex;justify-content:space-between;gap:20px}footer nav{display:flex;gap:20px}.eyebrow{font-size:13px;letter-spacing:.18em;color:var(--gold);text-transform:uppercase;margin-bottom:15px}.subtext{color:var(--muted);margin-top:12px}.button{display:inline-flex;justify-content:center;align-items:center;gap:8px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:11px 20px;min-height:46px;font-size:15px;font-weight:600}.button:hover{border-color:var(--gold);background:var(--panel)}.button.primary{background:var(--gold);border-color:var(--gold);color:#221b12}.button.primary:hover{filter:brightness(1.08)}.button.danger{background:#ac394a;border-color:#ac394a;color:#fff}.button-row{display:flex;gap:10px;flex-wrap:wrap}.button.block{width:100%}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.panel-head{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:20px 22px;border-bottom:1px solid var(--line)}.panel-body{padding:22px}.badge{display:inline-flex;gap:6px;align-items:center;border:1px solid var(--line);padding:3px 9px;border-radius:5px;font-size:12px;white-space:nowrap;color:var(--muted)}.badge.gold{color:var(--gold);border-color:#e1c49b44}.badge.red{color:var(--accent);border-color:#bd4e5b66}.badge.green{color:var(--green);border-color:#9dc4ab44}.login-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:70px;max-width:1050px;margin:7vh auto 40px;align-items:center}.welcome{padding:20px 0}.welcome h1{font-size:clamp(38px,5vw,58px)}.welcome p{max-width:460px;margin-top:20px;color:var(--muted);font-size:17px}.role-strip{display:flex;gap:12px;margin-top:36px;flex-wrap:wrap}.role-token{border:1px solid var(--line);padding:10px 14px;border-radius:8px;color:var(--gold);font-size:14px}.login-panel{padding:32px}.login-panel h2{margin-bottom:6px}.login-panel form{margin-top:26px}.login-panel .button{margin-top:14px}.privacy-hint{margin-top:16px;color:var(--muted);font-size:13px;line-height:1.75}.section-intro{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:28px}.lobby-layout{display:grid;grid-template-columns:1.55fr 1fr;gap:26px}.create-panel{padding:28px}.choice-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:24px 0}.mode-choice{background:var(--bg);border:1px solid var(--line);padding:20px;border-radius:10px;text-align:left;min-height:170px}.mode-choice.active{border:2px solid var(--gold);padding:19px;background:linear-gradient(130deg,#e1c49b0a,transparent)}.mode-choice .choice-icon{display:block;font-size:26px;color:var(--gold);margin-bottom:10px}.mode-choice strong{display:block;font-size:17px}.mode-choice p{font-size:14px;color:var(--muted);margin-top:5px}.fields{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:22px 0}.stack{display:grid;gap:24px}.join-form{display:grid;gap:14px}.check-label{display:flex;align-items:center;gap:10px;font-size:14px}.check-label input{width:18px;min-height:18px}.mini-room{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line);gap:15px}.mini-room:last-child{border:0}.mini-room .text-button{color:var(--gold)}.notice{background:var(--panel2);border-left:3px solid var(--gold);padding:12px 16px;font-size:14px;color:var(--muted);line-height:1.65}.notice.error{border-color:var(--red);color:var(--accent)}.room-heading{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-bottom:24px}.room-heading h1{font-size:28px}.invite{display:flex;align-items:center;gap:10px}.invite code{font-size:15px;letter-spacing:.06em;color:var(--gold);background:var(--panel);padding:10px 14px;border:1px solid var(--line);border-radius:8px}.room-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:24px}.seats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.seat-card{padding:18px;background:var(--panel);border:1px solid var(--line);border-radius:12px;min-width:0;position:relative}.seat-card.self{border-color:var(--gold)}.seat-card.open{border-style:dashed;background:transparent}.seat-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}.seat-number{width:33px;height:33px;border:1px solid var(--line);border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:Georgia,serif;color:var(--gold)}.seat-name{font-size:17px;font-weight:600;overflow-wrap:anywhere}.seat-meta{color:var(--muted);font-size:13px;margin:5px 0 10px}.seat-controls{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:14px}.seat-controls input{grid-column:1/-1}.seat-controls input,.seat-controls select{padding:7px;font-size:13px;min-height:44px}.room-sidebar{display:grid;gap:18px;align-content:start}.room-sidebar .panel-body{display:grid;gap:16px}.rule-list{padding-left:18px;font-size:14px;color:var(--muted);margin:0}.rule-list li+li{margin-top:8px}.stage-head{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;background:var(--panel);border:1px solid var(--line);border-radius:12px;margin-bottom:20px;gap:12px}.stage-title{display:flex;align-items:center;gap:16px}.stage-symbol{font-size:30px;color:var(--gold)}.stage-head h2{font-size:21px}.stage-head p{color:var(--muted);font-size:14px}.game-layout{display:grid;grid-template-columns:240px minmax(0,1fr) 285px;gap:20px;align-items:start}.players-list{padding:10px}.player-row{display:flex;align-items:center;padding:11px 9px;gap:11px;border-radius:9px;margin:3px 0;border:1px solid transparent}.player-row.active{background:var(--panel2);border-color:var(--gold)}.player-row.self{background:var(--panel2)}.player-row.dead{opacity:.52}.player-row .player-name{font-size:15px;font-weight:500;overflow-wrap:anywhere}.player-row .player-info{font-size:12px;color:var(--muted)}.player-row .seat-number{flex-shrink:0}.player-role{font-size:13px;color:var(--gold);margin-left:auto;white-space:nowrap}.player-role.wolf{color:var(--accent)}.feed{height:min(64vh,760px);min-height:380px;overflow:auto;padding:22px;scroll-behavior:smooth}.event{margin-bottom:20px}.event.system{font-size:14px;color:var(--muted);padding:10px 15px;border-left:2px solid var(--line);background:var(--panel2);border-radius:0 7px 7px 0}.event.speech .speaker{display:flex;gap:9px;align-items:center;color:var(--gold);font-size:14px;font-weight:600;margin-bottom:7px}.event .time{font-size:12px;font-weight:400;color:var(--muted)}.event .speech-body{background:var(--panel2);border:1px solid var(--line);border-radius:0 12px 12px 12px;padding:13px 16px;font-size:15px;line-height:1.85;overflow-wrap:anywhere;white-space:pre-wrap}.event.private{border-color:var(--red);color:var(--accent)}.vote-table{display:grid;grid-template-columns:repeat(2,1fr);gap:5px;font-size:13px;margin-top:10px}.game-sidebar{display:grid;gap:16px}.role-detail{display:flex;align-items:center;gap:15px;margin-bottom:15px}.role-mark{height:54px;width:54px;border-radius:12px;background:var(--panel2);border:1px solid var(--line);color:var(--gold);font-size:30px;display:flex;align-items:center;justify-content:center}.role-detail h3{font-size:22px;color:var(--gold)}.role-description{color:var(--muted);font-size:14px}.action-form{display:grid;gap:13px;margin-top:16px}.targets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.target{background:var(--bg);border:1px solid var(--line);border-radius:7px;min-height:52px;padding:5px;font-size:14px}.target.active{border-color:var(--gold);background:var(--panel2);color:var(--gold)}.target span{display:block;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.wait{padding:25px 8px;text-align:center;color:var(--muted);font-size:14px}.wait .stage-symbol{display:block;margin-bottom:8px}.timer{font-variant-numeric:tabular-nums;color:var(--gold);font-size:16px}.spectator-role-table{width:100%;font-size:14px;border-collapse:collapse}.spectator-role-table td{padding:8px 3px;border-bottom:1px solid var(--line)}.spectator-role-table td:last-child{text-align:right;color:var(--gold)}.result-banner{text-align:center;padding:26px;background:linear-gradient(120deg,#e1c49b15,transparent);border:1px solid var(--gold);border-radius:12px;margin-bottom:20px}.result-banner h2{font-size:30px;color:var(--gold)}.result-banner p{color:var(--muted);margin-top:5px}.result-banner .button-row{justify-content:center;margin-top:16px}.mobile-players{display:none}.profile-form{display:flex;gap:10px}.profile-form input{min-width:0}.loading{text-align:center;margin-top:18vh;color:var(--muted)}.spinner{display:inline-block;width:28px;height:28px;border:2px solid var(--line);border-top-color:var(--gold);border-radius:50%;animation:spin 1s linear infinite}#toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);max-width:calc(100vw - 32px);padding:12px 20px;border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow);border-radius:8px;z-index:50;opacity:0;pointer-events:none;font-size:14px}#toast.show{opacity:1}dialog{max-width:440px;width:calc(100vw - 40px);background:var(--panel);border:1px solid var(--line);border-radius:14px;color:var(--text);padding:28px}dialog::backdrop{background:#0009}dialog p{color:var(--muted);margin:14px 0 24px}.article{max-width:780px;padding:50px 24px}.article .brand{margin-bottom:40px}.article p{margin-top:24px}.article .button{margin-top:35px}.offline-strip{margin-bottom:16px}.replay-controls{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:14px 20px;border-top:1px solid var(--line)}.replay-controls input{flex:1;min-width:120px;padding:0}.muted{color:var(--muted)}.divider{height:1px;background:var(--line);margin:18px 0}.count{font-size:13px;color:var(--muted);text-align:right}.mono{font-family:ui-monospace,monospace}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:1150px){.game-layout{grid-template-columns:200px minmax(0,1fr)}.game-sidebar{grid-column:1/-1;grid-template-columns:1fr 1fr}.game-sidebar>.panel:last-child{grid-column:1/-1}.feed{height:58vh}.room-layout{grid-template-columns:minmax(0,1fr) 270px}.login-layout{gap:35px}.lobby-layout{grid-template-columns:1.25fr 1fr}}
@media(max-width:800px){.topbar{height:72px;padding:0 16px}.topbar nav{gap:13px}.brand{font-size:19px}.brand-sub{display:none}main{padding:24px 16px 32px}.login-layout{grid-template-columns:1fr;margin:20px auto 30px;gap:22px;max-width:540px}.welcome{padding:0}.welcome h1{font-size:38px}.welcome p{font-size:15px;margin-top:12px}.role-strip{margin-top:20px}.login-panel{padding:24px}.lobby-layout,.room-layout{grid-template-columns:1fr}.room-sidebar{grid-template-columns:1fr 1fr}.room-heading{align-items:flex-start;flex-direction:column}.seats-grid{gap:10px}.seat-card{padding:13px}.game-layout{grid-template-columns:1fr}.players-panel{display:none}.players-panel.mobile-open{display:block}.game-sidebar{grid-template-columns:1fr 1fr;grid-column:auto}.mobile-players{display:inline-flex}.stage-head{padding:16px}.stage-title{gap:10px}.stage-head h2{font-size:18px}.feed{height:50vh;min-height:320px}.section-intro h1{font-size:29px}.create-panel{padding:22px}.identity{gap:6px;font-size:13px}.identity .text-button{font-size:13px}footer{font-size:12px;flex-direction:column;gap:10px}.role-token{padding:7px 9px}.choice-grid{margin:20px 0}.panel-body{padding:18px}}
@media(max-width:520px){.topbar nav{gap:8px}.topbar nav>a{font-size:13px}.icon-button{font-size:18px;min-width:38px;min-height:44px}.topbar .identity>span{max-width:65px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fields{grid-template-columns:1fr;gap:14px}.choice-grid{gap:9px}.mode-choice{padding:14px;min-height:180px}.mode-choice.active{padding:13px}.mode-choice strong{font-size:16px}.mode-choice p{font-size:13px}.seats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.room-sidebar{grid-template-columns:1fr}.room-heading h1{font-size:25px}.invite{gap:7px;flex-wrap:wrap}.invite code{font-size:14px;padding:10px}.invite .button{padding:10px 12px}.game-sidebar{grid-template-columns:1fr}.game-sidebar>.panel:last-child{grid-column:auto}.stage-head{align-items:flex-start}.stage-head .button{padding:8px 10px}.stage-head h2{font-size:17px}.stage-symbol{font-size:24px}.feed{padding:16px;height:47vh;min-height:300px}.action-panel{position:sticky;bottom:8px;z-index:5;box-shadow:0 0 30px var(--bg)}.section-intro{align-items:flex-start}.section-intro .button{padding:10px}.vote-table{grid-template-columns:1fr}.button{font-size:14px}.login-panel{padding:20px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

.ai-status{padding:16px 22px;border-bottom:1px solid var(--line);background:var(--panel2)}.ai-status[hidden]{display:none}.ai-status-heading{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:14px;color:var(--gold)}.ai-status p{margin-top:7px;font-size:13px;color:var(--muted);line-height:1.7}.ai-status .timer{font-size:13px;margin-left:auto}.status-spinner{display:none;width:17px;height:17px;flex-shrink:0}.thinking .status-spinner{display:inline-block}.status-paused .ai-status-heading{color:var(--accent)}
