/* 狼人杀 · 天黑请闭眼（小SA 小院 /sa/werewolf/，2026-11-05）。
   白天和大厅用小院的 B 信纸（米色纸面 + 酒红、宋体标题、楷体写小SA 的话，色值抄自 home/home.css），
   夜里换成「夜信纸」：同样的横线纸纹，墨紫底 + 金色点缀，红色留给狼。不用 emoji，图形都是代码画的。 */
:root{
  --paper:#f6efe3;--paper-2:#efe5d5;--card:#fffdf8;--line:#e3d7c5;--line-strong:#cdbda3;
  --ink:#43352d;--soft:#8a7462;--dim:#a08c77;--wine:#8a4a45;--wine-deep:#6f3835;--on-wine:#fffdf8;
  --gold:#b0802c;--jade:#3f8a6e;--rose:#b65a78;--sky:#4f78b0;--violet:#7d5bb0;--wolf:#a8423c;
  --pick:#8a4a45;--pick-bg:#f5e6e1;--shadow:0 1px 0 rgba(67,53,45,.05),0 6px 18px -12px rgba(67,53,45,.25);
  --tex:repeating-linear-gradient(0deg,rgba(138,116,98,.035) 0 1px,transparent 1px 4px);
  --safe-t:env(safe-area-inset-top,0px);--safe-r:env(safe-area-inset-right,0px);--safe-b:env(safe-area-inset-bottom,0px);--safe-l:env(safe-area-inset-left,0px);
  --serif:"Songti SC","Noto Serif SC","Noto Serif CJK SC","Source Han Serif SC",serif;
  --hand:"Kaiti SC","STKaiti","KaiTi","Songti SC","Noto Serif SC",serif;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif;
  accent-color:var(--wine);color-scheme:light;
}
body.is-night{
  --paper:#1c1a24;--paper-2:#252130;--card:#2a2533;--line:rgba(236,220,190,.15);--line-strong:rgba(236,220,190,.28);
  --ink:#f2e9d8;--soft:#b8aa94;--dim:#8f8372;--wine:#b5615a;--wine-deep:#93463f;--on-wine:#fff8ee;
  --gold:#d8b26a;--jade:#7cc4a2;--rose:#e08aa6;--sky:#8fb0e0;--violet:#b9a0e6;--wolf:#e07a6e;
  --pick:#d8b26a;--pick-bg:rgba(216,178,106,.16);--shadow:0 1px 0 rgba(0,0,0,.2),0 10px 24px -16px rgba(0,0,0,.6);
  --tex:repeating-linear-gradient(0deg,rgba(236,220,190,.03) 0 1px,transparent 1px 4px);
  color-scheme:dark;
}
@font-face{font-family:"Songti SC";font-weight:400;src:local("Songti SC Regular"),local("STSongti-SC-Regular"),local("Songti SC"),local("Noto Serif CJK SC"),local("Noto Serif SC"),local("Source Han Serif SC"),local("SimSun")}
@font-face{font-family:"Songti SC";font-weight:700;src:local("Songti SC Bold"),local("STSongti-SC-Bold"),local("Noto Serif CJK SC Bold"),local("Noto Serif SC Bold"),local("Source Han Serif SC Bold"),local("SimSun")}
*{box-sizing:border-box}
html{background:#f6efe3;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
body{margin:0;min-height:100dvh;color:var(--ink);font:15px/1.6 var(--sans);overflow-x:hidden;
  background:radial-gradient(70% 36% at 50% -6%,rgba(255,255,255,.55),rgba(255,255,255,0) 70%),var(--tex),var(--paper);
  transition:background-color .8s,color .8s}
body.is-night{background:radial-gradient(120% 55% at 50% -4%,#2f2839 0%,rgba(28,26,36,0) 70%),var(--tex),var(--paper)}
a{color:inherit}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;padding:0}
button:disabled{cursor:not-allowed;opacity:.45}
:focus-visible{outline:2px solid var(--wine);outline-offset:2px}
[hidden]{display:none!important}
svg.ic{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round;flex:none;vertical-align:-.12em}

.wrap{max-width:600px;margin:0 auto;padding:calc(var(--safe-t) + 12px) calc(var(--safe-r) + 14px) calc(var(--safe-b) + 36px) calc(var(--safe-l) + 14px)}
.wrap.is-wide{max-width:1180px}
.loading{text-align:center;color:var(--soft);padding:80px 0;font-family:var(--hand);font-size:17px}

/* 报头 */
.mast{display:flex;align-items:center;gap:10px;padding-bottom:10px;margin-bottom:12px;border-bottom:3px double var(--line-strong)}
.mast .back{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:40px;height:40px;padding:0 10px;border:1px solid var(--line-strong);border-radius:999px;background:var(--card);text-decoration:none;font-size:14px;color:var(--soft)}
.mast .title{flex:1;min-width:0}
.mast .title small{display:block;font-size:10.5px;letter-spacing:.22em;color:var(--dim)}
.mast h1{margin:0;font:700 21px/1.25 var(--serif);letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mast h1 em{font-style:normal;font-weight:400;font-size:13px;color:var(--soft);letter-spacing:0;margin-left:6px}
.mast .tools{display:flex;gap:6px;flex:none}
.chip-btn{display:inline-flex;align-items:center;gap:5px;height:34px;padding:0 12px;border:1px solid var(--line-strong);border-radius:999px;background:var(--card);font-size:13px;white-space:nowrap}
.chip-btn[aria-pressed=true]{border-color:var(--wine);color:var(--wine)}
.avatar{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:50%;overflow:hidden;background:var(--paper-2);border:1.5px solid var(--line-strong);font:700 14px/1 var(--serif);color:var(--wine);flex:none}
.avatar img{width:100%;height:100%;object-fit:cover;display:block}
@media (max-width:420px){.mast h1 em{font-size:12px;margin-left:4px}.chip-btn{padding:0 10px}.mast .back span{display:none}}

/* 卡片 */
.box{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:14px;margin-bottom:12px;box-shadow:var(--shadow)}
.box h3{margin:0 0 8px;font:700 16px/1.4 var(--serif);letter-spacing:.04em;display:flex;align-items:center;gap:8px}
.box h3 .more{margin-left:auto;font:13px var(--sans);color:var(--soft);letter-spacing:0}
.soft{color:var(--soft);font-size:13.5px}
.note{color:var(--soft);font-size:13.5px;margin:6px 0 0}
.row{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.row>*{flex:1 1 auto}
.err{color:var(--wolf);font-size:13.5px;min-height:1em;margin:8px 0 0}

/* 按钮 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:10px 18px;border-radius:999px;background:var(--wine);color:var(--on-wine);font-weight:700;font-size:15.5px;border:1px solid var(--wine);text-align:center}
.btn.line{background:transparent;color:var(--ink);border-color:var(--line-strong);font-weight:600}
.btn.gold{background:var(--gold);border-color:var(--gold);color:#fffdf8}
body.is-night .btn.gold{color:#2a2018}
.btn.danger{background:transparent;color:var(--wolf);border-color:var(--wolf);font-weight:600}
.btn.small{min-height:36px;padding:6px 14px;font-size:14px}
.btn.block{display:flex;width:100%}
.input{width:100%;min-height:44px;padding:9px 12px;border:1px solid var(--line-strong);border-radius:8px;background:var(--paper);font-size:16px}
body.is-night .input{background:rgba(0,0,0,.18)}
select.input{appearance:auto}
label.field{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--soft)}
label.check{display:flex;align-items:center;gap:8px;font-size:14px}
label.check input{width:18px;height:18px}

/* 横幅：第几夜 / 现在是谁 / 倒计时 */
.banner{position:relative;text-align:center;padding:14px 14px 12px;border:1px solid var(--line);border-radius:8px;background:var(--card);box-shadow:var(--shadow);margin-bottom:12px;overflow:hidden}
.banner .phase{display:inline-flex;align-items:center;gap:6px;font-size:12px;letter-spacing:.18em;color:var(--soft)}
.banner .label{font:700 22px/1.35 var(--serif);letter-spacing:.04em;margin:4px 0 2px}
.banner .sub{font-size:13px;color:var(--soft);min-height:1.2em}
.banner .timer{font:700 30px/1.2 ui-monospace,"SF Mono",Menlo,monospace;margin-top:6px;font-variant-numeric:tabular-nums}
.banner .timer.low{color:var(--wolf)}
.banner .timer:empty{display:none}
.banner .bar{height:3px;background:var(--line);border-radius:2px;margin-top:8px;overflow:hidden}
.banner .bar i{display:block;height:100%;background:var(--gold);width:100%;transition:width .25s linear}
.moon{width:14px;height:14px;border-radius:50%;box-shadow:inset -4px -1px 0 0 var(--gold);transform:rotate(-20deg);display:inline-block}
.sun{width:10px;height:10px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 3px rgba(176,128,44,.18);display:inline-block}

/* 小SA 法官（第二步再配音，这一步先不出场；线下法官台的台词框） */
.script{font:16px/1.75 var(--hand);background:var(--paper);border:1px dashed var(--line-strong);border-radius:8px;padding:10px 12px;white-space:pre-wrap}

/* 身份牌：顶上一条，点一下翻开 */
.idcard{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:10px 12px;margin-bottom:12px;border-radius:8px;border:1px solid var(--line-strong);background:var(--card);box-shadow:var(--shadow)}
.idcard .seal{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;flex:none;background:var(--wine);color:var(--on-wine);font:700 15px/1 var(--serif)}
.idcard .t{flex:1;min-width:0}
.idcard .t b{display:block;font:700 15px/1.35 var(--serif)}
.idcard .t span{display:block;font-size:12.5px;color:var(--soft)}
.idcard .go{flex:none;padding:5px 11px;border:1px solid var(--line-strong);border-radius:999px;font-size:13px;color:var(--wine);white-space:nowrap}  /* 做成小按钮，免得和两行说明连成一句读 */
.idcard.open{display:block;border-color:var(--wine)}
.idcard.open .head{display:flex;align-items:center;gap:10px}
.idcard.open .name{font:700 26px/1.3 var(--serif);letter-spacing:.06em}
.idcard .ab{margin:8px 0 0;font-size:14px;line-height:1.7}
.idcard .fx{margin-top:6px;font-size:13.5px;padding:6px 10px;border-radius:6px;background:var(--paper)}
.idcard.dealing{border-width:2px;border-color:var(--gold)}

/* 阵营小标签 */
.tag{display:inline-block;font-size:11.5px;line-height:1.5;padding:0 7px;border-radius:99px;font-weight:600;white-space:nowrap;border:1px solid currentColor}
.t-wolf{color:var(--wolf)}.t-god{color:var(--sky)}.t-villager{color:var(--jade)}.t-third{color:var(--violet)}.t-gold{color:var(--gold)}.t-plain{color:var(--soft)}

/* 行动区 */
.act{border:2px solid var(--gold)}
.act.done{border:1px solid var(--line)}
.act h3{color:var(--ink)}
.result{margin:10px 0 0;padding:8px 12px;border-radius:6px;background:var(--paper);font-weight:600}
.result.is-wolf{color:var(--wolf)}.result.is-good{color:var(--jade)}
.extra{margin-top:12px;padding-top:10px;border-top:1px dashed var(--line-strong)}

/* 座位：名牌 */
.seats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
@media (min-width:520px){.seats{grid-template-columns:repeat(5,minmax(0,1fr))}}
.wrap.is-wide .seats{grid-template-columns:repeat(auto-fill,minmax(112px,1fr))}
.seat{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;padding:8px 4px 6px;border:1px solid var(--line);border-radius:8px;background:var(--paper);text-align:center}
.seat .av{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;overflow:hidden;background:var(--card);border:1.5px solid var(--line-strong);font:700 15px/1 var(--serif);color:var(--wine)}
.seat .av img{width:100%;height:100%;object-fit:cover;display:block}
.seat .n{position:absolute;top:4px;left:6px;font:700 12px/1 ui-monospace,Menlo,monospace;color:var(--soft)}
.seat .nm{max-width:100%;font-size:12.5px;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.seat .tg{display:flex;flex-wrap:wrap;justify-content:center;gap:3px;min-height:0}
.seat .tg .tag{font-size:10.5px;padding:0 5px}
.seat.is-empty .av{border-style:dashed;color:var(--dim);background:transparent}
.seat.is-empty .nm{color:var(--dim)}
.seat.is-me{border-color:var(--wine);box-shadow:inset 0 0 0 1px var(--wine)}
.seat.is-speaking{border-color:var(--gold);box-shadow:0 0 0 3px rgba(176,128,44,.22)}
.seat.is-dead .av,.seat.is-dead .nm{opacity:.45;filter:grayscale(1)}
.seat.is-dead::after{content:"出局";position:absolute;top:18px;left:50%;transform:translateX(-50%) rotate(-14deg);padding:0 6px;border:2px solid var(--wolf);border-radius:4px;color:var(--wolf);font:700 12px/1.5 var(--serif);letter-spacing:.12em;background:color-mix(in srgb,var(--paper) 70%,transparent);pointer-events:none}
.seat.can-pick{cursor:pointer;border-color:var(--line-strong)}
.seat.can-pick:hover{border-color:var(--pick)}
.seat[aria-pressed=true]{border-color:var(--pick);background:var(--pick-bg);box-shadow:inset 0 0 0 1.5px var(--pick)}
.seat .voted{position:absolute;top:5px;right:6px;width:8px;height:8px;border-radius:50%;background:var(--jade)}
.seat .acct{position:absolute;top:4px;right:5px;font-size:9.5px;color:var(--dim)}
.seat:disabled{opacity:1;cursor:default}

/* 公告 */
.log{list-style:none;margin:0;padding:0}
.log li{padding:7px 0;border-bottom:1px dashed var(--line);font-size:14px}
.log li:last-child{border-bottom:0}
.log .d{display:inline-block;min-width:3.6em;color:var(--dim);font-size:12px}
.log .k-death{color:var(--wolf)}
.log .k-phase{font-weight:700}
.log .k-vote{color:var(--ink)}
.ballots{font-size:12.5px;color:var(--soft);margin-top:2px}

/* 发言（系统法官） */
.msgs{list-style:none;margin:8px 0;padding:0;max-height:240px;overflow:auto;overscroll-behavior:contain}
.msgs li{padding:5px 0;font-size:14px;line-height:1.55;border-bottom:1px dashed var(--line)}
.msgs li b{color:var(--wine);margin-right:6px;font-weight:600}
.msgs li.ch-wolf b{color:var(--wolf)}
.tabs{display:flex;gap:6px;margin:4px 0}
.tabs button{height:30px;padding:0 12px;border-radius:999px;border:1px solid var(--line-strong);font-size:13px}
.tabs button[aria-pressed=true]{background:var(--wine);color:var(--on-wine);border-color:var(--wine)}
.send{display:flex;gap:8px;align-items:flex-end}
.send textarea{flex:1;resize:none;min-height:44px;max-height:110px}

/* 法官台 */
.judge .actors{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.judge .actors button{height:34px;padding:0 10px;border-radius:999px;border:1px solid var(--line-strong);font-size:13px}
.judge .actors button.done{color:var(--jade);border-color:var(--jade)}
.judge .actors button[aria-pressed=true]{background:var(--wine);color:var(--on-wine);border-color:var(--wine)}
.masked .secret{filter:blur(7px);user-select:none}
.table{width:100%;border-collapse:collapse;font-size:14px;margin-top:8px}
.table th,.table td{text-align:left;padding:6px 4px;border-bottom:1px dashed var(--line)}
.table tr.is-dead td{opacity:.55;text-decoration:line-through}
details summary{cursor:pointer;color:var(--soft);font-size:13.5px;padding:6px 0}

/* 结算 */
.win{text-align:center}
.win h2{margin:4px 0 10px;font:700 26px/1.3 var(--serif);letter-spacing:.06em}
.win.side-good h2{color:var(--jade)}.win.side-wolf h2{color:var(--wolf)}.win.side-third h2{color:var(--violet)}

/* 宽屏：法官台 / 投屏两栏 */
.wrap.is-wide .cols{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:14px;align-items:start}

/* 首页 */
.modes{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
.mode{display:block;width:100%;text-align:left;padding:12px 14px;border:1px solid var(--line-strong);border-radius:8px;background:var(--paper)}
.mode b{display:block;font:700 16px/1.4 var(--serif);margin-bottom:2px}
.mode span{display:block;font-size:13px;color:var(--soft);line-height:1.6}
.mode[aria-pressed=true]{border-color:var(--wine);box-shadow:inset 0 0 0 1.5px var(--wine);background:var(--pick-bg)}
.presets{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.presets button{height:34px;padding:0 12px;border-radius:999px;border:1px solid var(--line-strong);font-size:13.5px;background:var(--paper)}
.presets button[aria-pressed=true]{background:var(--wine);color:var(--on-wine);border-color:var(--wine)}
.roles{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:6px;margin-top:10px}
.role{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper)}
.role b{flex:1;font-size:14.5px;font-weight:600}
.role small{display:block;font-size:11.5px;color:var(--soft);font-weight:400}
.step{display:flex;align-items:center;gap:4px}
.step button{width:34px;height:34px;border-radius:50%;border:1px solid var(--line-strong);font-size:17px;line-height:1;background:var(--card)}
.step output{min-width:22px;text-align:center;font-weight:700}
.sum{margin:10px 0 0;font-size:14px}.sum b{color:var(--wine);font-size:19px}
.opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px 14px;margin-top:10px}
.code-in{display:flex;gap:8px}
.code-in .input{flex:1;text-transform:uppercase;letter-spacing:.2em;font:700 18px/1 ui-monospace,Menlo,monospace}
.rooms{list-style:none;margin:0;padding:0}
.rooms li{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line)}
.rooms li:last-child{border-bottom:0}
.rooms .k{flex:none;font-size:12px;padding:1px 8px;border-radius:4px;border:1px solid var(--wine);color:var(--wine)}
.rooms .k.judge{border-color:var(--jade);color:var(--jade)}
.rooms .t{flex:1;min-width:0}
.rooms .t b{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rooms .t span{display:block;font-size:12.5px;color:var(--soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.empty{color:var(--soft);font-size:13.5px;padding:6px 0;font-family:var(--hand)}
.rules details{border-top:1px dashed var(--line);padding:4px 0}
.rules summary{font-weight:700;color:var(--ink);font-size:14.5px}
.rules p,.rules li{font-size:14px;line-height:1.75}
.rules .ww-tag{display:inline-block;font-size:11px;padding:0 6px;margin:0 6px;border-radius:99px;border:1px solid currentColor;font-weight:600}
.rules .ww-wolf{color:var(--wolf)}.rules .ww-god{color:var(--sky)}.rules .ww-villager{color:var(--jade)}.rules .ww-third{color:var(--violet)}
.rules .ww-role-list{padding-left:18px}

/* 浮层：确认框、规则、邀请 */
.ov{position:fixed;inset:0;z-index:200;display:flex;align-items:flex-end;justify-content:center;background:rgba(40,30,24,.42);padding:16px;padding-bottom:calc(16px + var(--safe-b))}
@media (min-width:640px){.ov{align-items:center}}
.sheet{width:100%;max-width:460px;max-height:86dvh;overflow:auto;background:var(--card);color:var(--ink);border:1px solid var(--line-strong);border-radius:12px;padding:18px 16px;box-shadow:0 20px 50px -20px rgba(0,0,0,.5)}
.sheet h2{margin:0 0 10px;font:700 19px/1.4 var(--serif)}
.sheet p{margin:0 0 6px;line-height:1.7}
.qr{display:block;width:220px;height:220px;margin:8px auto;border-radius:8px;background:#fff;padding:8px}
.bigcode{text-align:center;font:700 34px/1.2 ui-monospace,Menlo,monospace;letter-spacing:.3em;color:var(--wine);margin:4px 0}
.link{display:flex;align-items:center;gap:8px;font-size:13px;word-break:break-all;background:var(--paper);border-radius:8px;padding:8px 10px;margin-top:8px}
.toast{position:fixed;left:50%;bottom:calc(24px + var(--safe-b));transform:translateX(-50%);z-index:300;max-width:88vw;padding:10px 16px;border-radius:999px;background:#43352d;color:#fffdf8;font-size:14px;box-shadow:0 10px 30px -10px rgba(0,0,0,.5)}

/* 传手机发身份（一台手机，不联网） */
.pass{position:fixed;inset:0;z-index:250;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:24px;text-align:center;overflow:auto;background:var(--tex),#1c1a24;color:#f2e9d8}
.pass p{color:#c9bca6;max-width:420px;line-height:1.7;margin:0}
.pass .big{font:700 46px/1.3 var(--serif);margin:8px 0}
.pass .btn{margin-top:14px;min-width:230px}
.pass .btn.line{color:#f2e9d8;border-color:rgba(236,220,190,.35)}

@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* 首页：电脑上两栏（左：我的房间、正在等人、规则；右：开一桌） */
@media (min-width:980px){.wrap.home{max-width:1080px}.wrap.home .cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;align-items:start}}
/* 小SA 主持：横幅下面的贴纸 + 楷体气泡（线上系统法官局、投屏）；法官台「小SA 建议你这样念」 */
.sa-say{display:flex;align-items:flex-end;gap:8px;margin:-2px 0 12px}
.sa-say img{width:64px;height:64px;flex:none;object-fit:contain;filter:drop-shadow(0 2px 3px rgba(0,0,0,.14))}
.sa-say .bub{position:relative;flex:1;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:12px 12px 12px 4px;padding:7px 12px 8px;box-shadow:var(--shadow)}
.sa-say .bub::before{content:"";position:absolute;left:-6px;bottom:12px;width:10px;height:10px;background:var(--card);border-left:1px solid var(--line);border-bottom:1px solid var(--line);transform:rotate(45deg)}
.sa-say small{display:block;font-size:11px;letter-spacing:.14em;color:var(--dim)}
.sa-say q{quotes:none;font:16.5px/1.6 var(--hand)}
.sa-say.pop .bub{animation:say-pop .35s ease-out}
.sa-say.pop img{animation:say-hop .45s ease-out}
@keyframes say-pop{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes say-hop{0%{transform:translateY(4px) scale(.94)}60%{transform:translateY(-3px)}100%{transform:none}}
@media (prefers-reduced-motion:reduce){.sa-say.pop .bub,.sa-say.pop img{animation:none}}
.script.with-sa{display:flex;gap:10px;align-items:flex-start;white-space:normal}
.script.with-sa .sa{width:48px;height:48px;flex:none;object-fit:contain}
.script.with-sa small{display:block;font:11px/1.4 var(--sans);letter-spacing:.12em;color:var(--dim);margin-bottom:2px}
.script.with-sa span{white-space:pre-wrap}
/* 投屏大字版（N3）：铺满整屏，字号跟着屏幕宽度走，教室后排也看得清。只显示公开信息。 */
.wrap.screen{max-width:none;padding:2vh 3vw 3vh}
.screen .mast{margin-bottom:1.6vh}
.screen .mast h1{font-size:clamp(20px,1.8vw,40px)}
.screen .mast .title small{font-size:clamp(11px,.8vw,16px)}
.screen .banner{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:3vw;text-align:left;padding:2vh 2.4vw}
.screen .banner .phase{grid-column:1;font-size:clamp(14px,1.1vw,24px)}
.screen .banner .label{grid-column:1;font-size:clamp(30px,3.6vw,80px)}
.screen .banner .sub{grid-column:1;font-size:clamp(16px,1.4vw,30px)}
.screen .banner .timer{grid-column:2;grid-row:1/4;margin:0;font-size:clamp(48px,7vw,150px)}
.screen .banner .bar{grid-column:1/3;height:6px}
.screen .sa-say img{width:clamp(72px,7vw,150px);height:clamp(72px,7vw,150px)}
.screen .sa-say q{font-size:clamp(20px,2vw,44px);line-height:1.5}
.screen .sa-say small{font-size:clamp(11px,.8vw,16px)}
.wrap.screen .cols{grid-template-columns:minmax(0,2.1fr) minmax(0,1fr);gap:1.4vw}
.screen .box{padding:1.6vh 1.4vw}
.screen .box h3{font-size:clamp(16px,1.3vw,28px)}
.wrap.screen .seats{grid-template-columns:repeat(auto-fill,minmax(clamp(110px,10.5vw,230px),1fr));gap:1vw}
.screen .seat{padding:1.2vh .6vw 1vh;gap:.5vh}
.screen .seat .av{width:clamp(48px,4.6vw,100px);height:clamp(48px,4.6vw,100px);font-size:clamp(20px,2vw,44px)}
.screen .seat .n{top:.6vh;left:.6vw;font-size:clamp(16px,1.5vw,32px)}
.screen .seat .nm{font-size:clamp(15px,1.35vw,30px)}
.screen .seat .tg .tag{font-size:clamp(11px,.9vw,20px)}
.screen .seat .voted{width:clamp(10px,.9vw,20px);height:clamp(10px,.9vw,20px)}
.screen .seat.is-dead::after{top:28%;border-width:3px;font-size:clamp(14px,1.4vw,30px)}
.screen .log li{font-size:clamp(15px,1.3vw,28px)}
.screen .ballots{font-size:clamp(12px,1vw,22px)}
.order{display:flex;flex-wrap:wrap;gap:.6vw;margin:0;padding:0;list-style:none}
.order li{display:flex;flex-direction:column;align-items:center;min-width:clamp(52px,4.4vw,96px);padding:.6vh .5vw;border:1px solid var(--line);border-radius:8px;background:var(--paper);opacity:.75}
.order li b{font:700 clamp(20px,2vw,44px)/1.15 var(--serif)}
.order li span{max-width:clamp(52px,6vw,130px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:clamp(11px,.9vw,20px);color:var(--soft)}
.order li.now{opacity:1;border-color:var(--gold);background:var(--card);box-shadow:0 0 0 3px rgba(176,128,44,.25)}
.screen .join{text-align:center}
.screen .join .qr{width:min(22vw,44vh);height:auto;aspect-ratio:1;margin:1vh auto;padding:10px}
.screen .join .bigcode{font-size:clamp(40px,5vw,110px)}
.screen .join p{font-size:clamp(14px,1.1vw,24px)}
.screen .win h2{font-size:clamp(30px,3.6vw,72px)}
.screen .table{font-size:clamp(14px,1.2vw,26px)}
/* 我的战绩（首页） */
.stat-top{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;text-align:center;margin-bottom:10px}
.stat-top div{padding:8px 4px;border:1px solid var(--line);border-radius:8px;background:var(--paper)}
.stat-top b{display:block;font:700 24px/1.2 var(--serif);color:var(--wine)}
.stat-top span{font-size:12px;color:var(--soft)}
.stat-roles .chip{display:inline-flex;align-items:center;height:30px;padding:0 10px;border:1px solid var(--line-strong);border-radius:999px;background:var(--card);font-size:12.5px}
.stat-recent{list-style:none;margin:10px 0 0;padding:0}
.stat-recent li{display:flex;align-items:center;gap:10px;padding:7px 0;border-top:1px dashed var(--line);font-size:13.5px}
.stat-recent .d{flex:none;width:72px;color:var(--dim);font-size:12px}
.stat-recent span:nth-child(2){flex:1;min-width:0}
.stat-recent b{flex:none;font-weight:700}
.stat-recent b.w{color:var(--jade)}
.stat-recent b.l{color:var(--soft)}

/* 线上语音（N4）：横条在小SA 气泡下面；座位上蓝圈 = 在语音里，绿圈跳动 = 正在说话 */
.vbar{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin:0 0 12px;padding:8px 10px 8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);font-size:13.5px;color:var(--soft)}
.vbar .vdot{width:9px;height:9px;flex:none;border-radius:50%;background:var(--line-strong)}
.vbar.is-live .vdot{background:var(--sky)}
.vbar.is-mic .vdot{background:var(--jade);box-shadow:0 0 0 3px color-mix(in srgb,var(--jade) 25%,transparent)}
.vbar .vmsg{flex:1;min-width:150px;line-height:1.45}
.vbar.is-live .vmsg{color:var(--ink)}
.vbar .vbtns{display:flex;gap:6px;flex-wrap:wrap}
.vbar .btn.small{min-height:34px;padding:4px 13px;font-size:13.5px}
.seat.in-voice .av{border-color:var(--sky)}
.seat.is-talk .av{border-color:var(--jade);animation:ww-talk 1s ease-in-out infinite}
@keyframes ww-talk{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--jade) 45%,transparent)}50%{box-shadow:0 0 0 5px color-mix(in srgb,var(--jade) 0%,transparent)}}
@media (prefers-reduced-motion:reduce){.seat.is-talk .av{animation:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--jade) 35%,transparent)}}
