/* 联机 / 单机客户端外壳样式（theme.css 之外的补充） */
.roomcode{
  font-family:ui-monospace,Consolas,monospace;font-weight:800;letter-spacing:10px;
  font-size:clamp(34px,7vw,58px);line-height:1.2;
  background:linear-gradient(180deg,#fff6dc,#ffd479 58%,#dda338);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 30px rgba(255,212,121,.35));user-select:all;cursor:copy;
}
.hintline{font-size:12.5px;color:var(--muted);line-height:1.9}
.hintline b{color:var(--gold)}
.bigroom{display:flex;flex-direction:column;align-items:center;gap:2px;margin:8px 0 4px}
.share{display:flex;gap:8px;align-items:center;justify-content:center;flex-wrap:wrap;margin-top:6px}
.share .btn{font-size:12.5px;padding:6px 12px}

.lobbygrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:10px;margin:16px 0}
.lsl{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:13px;
  border:1px solid var(--line);background:linear-gradient(180deg,rgba(40,47,88,.9),rgba(20,24,46,.92));text-align:left}
.lsl.empty{opacity:.34;border-style:dashed;justify-content:center;font-size:12px;color:var(--muted)}
.lsl .av{flex:none;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:18px;
  background:linear-gradient(160deg,var(--ac,#4a5aa8),#151a34);box-shadow:0 0 0 2px rgba(255,255,255,.07)}
.lsl .nm{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lsl .sub{font-size:10.5px;color:var(--muted)}
.lsl.me{border-color:rgba(255,212,121,.6);box-shadow:0 0 0 1px rgba(255,212,121,.25)}
.lsl.off{opacity:.45}

.rulebox{display:flex;flex-direction:column;gap:8px;align-items:flex-start;text-align:left;
  margin:4px auto 0;padding:12px 16px;border-radius:14px;max-width:420px;
  background:rgba(0,0,0,.24);border:1px solid var(--line);font-size:13px;color:#c9d2f2}
.rulebox label{display:flex;align-items:center;gap:8px;cursor:pointer}
.rulebox input{width:16px;height:16px;accent-color:#8a6cff;cursor:pointer}
.rulebox b{color:var(--gold)}

.field{display:flex;gap:8px;align-items:center;margin:10px 0}
.field input{
  flex:1;min-width:0;padding:11px 14px;border-radius:12px;font-family:inherit;font-size:15px;text-align:center;
  color:var(--txt);background:rgba(0,0,0,.32);border:1px solid var(--line2);outline:none;letter-spacing:2px;
}
.field input:focus{border-color:rgba(140,160,255,.7);box-shadow:0 0 0 3px rgba(110,130,255,.16)}

#conn{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:70;
  padding:8px 18px;border-radius:999px;font-size:12.5px;display:none;
  background:rgba(255,92,122,.92);color:#fff;box-shadow:0 8px 24px rgba(0,0,0,.5)}
#conn.show{display:block}
.timer{font-variant-numeric:tabular-nums;font-weight:700}
.timer.urgent{color:var(--red);animation:blink .8s infinite alternate}
@keyframes blink{to{opacity:.45}}

/* 身份卡美术 */
.cardwrap{display:flex;justify-content:center;margin:14px 0 6px}
.roleimg{width:min(72vw,268px);max-height:46vh;object-fit:contain;border-radius:14px;
  box-shadow:0 18px 48px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.1);
  animation:cardIn .5s cubic-bezier(.2,1.25,.4,1)}
@keyframes cardIn{from{opacity:0;transform:translateY(18px) scale(.92) rotateX(12deg)}to{opacity:1;transform:none}}
.roletip{font-size:13px;color:#b6c0e2;line-height:1.8;margin:10px auto 0;max-width:420px}
.matebox{margin-top:12px;font-weight:600;font-size:13px;line-height:1.8}
/* 结算里的身份缩略图 */
.pzcard{flex:none;width:34px;height:51px;object-fit:cover;border-radius:5px;
  box-shadow:0 3px 10px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.1)}

/* 狼刀票箱 */
.votebox.wolfbox{border-color:rgba(255,92,122,.4);background:rgba(255,92,122,.08)}
.vtitle{color:#ffb3c2;font-weight:700;font-size:11.5px;margin-bottom:4px}
.seat .vt.wolfvt{background:linear-gradient(135deg,#ff8a3d,#c22b4c);bottom:-22px}

/* 警长徽章 */
.seat .badge{position:absolute;top:-9px;right:-9px;font-size:14px;z-index:3;font-style:normal;
  filter:drop-shadow(0 2px 6px rgba(0,0,0,.6))}
.seat.sheriff{border-color:rgba(255,212,121,.55)}

/* 狼队友标记 */
.seat .mateflag{position:absolute;top:-8px;left:-8px;font-size:13px;z-index:3;font-style:normal;
  filter:drop-shadow(0 2px 6px rgba(0,0,0,.6))}
.seat.mate{border-color:rgba(255,92,122,.85);
  box-shadow:0 0 0 1px rgba(255,92,122,.4),0 0 22px rgba(255,92,122,.35),inset 0 1px 0 rgba(255,255,255,.06)}
.seat.mate .nm{color:#ffb3c2}
.seat.mate .st{color:#ff8fa3 !important}
.seat.offline{opacity:.5}

/* 语音消息 */
#log .vmsg{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:999px;
  background:linear-gradient(135deg,rgba(110,120,255,.35),rgba(80,90,200,.28));
  border:1px solid rgba(150,170,255,.4);color:#dfe6ff;font-size:12.5px}
#log .vmsg:hover{background:rgba(120,140,255,.45)}

/* 票型明细 */
.votebox{margin-top:8px;padding:8px 10px;border-radius:11px;background:rgba(0,0,0,.26);
  border:1px solid var(--line);font-size:12px;line-height:1.9;max-height:132px;overflow-y:auto}
.vrow{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vrow .arrow{color:var(--gold);margin:0 4px}
.vrow .w{color:var(--muted);font-size:11px}
.votebox::-webkit-scrollbar{width:6px}
.votebox::-webkit-scrollbar-thumb{background:rgba(140,160,255,.3);border-radius:3px}

/* ==================== 手机端：座位分列左右，发言栏居中 ==================== */
@media (max-width: 880px){
  html,body{height:100%;overflow:hidden}
  #app{height:100vh;height:100dvh;padding:8px;gap:8px}
  /* 覆盖 theme.css 里旧的移动端规则（它会把棋盘压成 88vw 高、把侧栏堆到下方） */
  #main{display:block;flex-direction:row}
  #board{position:absolute;inset:0;height:auto}
  #side{height:auto}
  #log{height:auto;flex:1}
  #hud{padding:7px 10px;gap:6px;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;
    -webkit-overflow-scrolling:touch;scrollbar-width:none}
  #hud::-webkit-scrollbar{display:none}
  #hud .title{display:none}
  #hud .chip{font-size:11px;padding:4px 8px;flex:none}
  #hud .abil{font-size:11px;padding:3px 8px;flex:none}
  #hud .btn{font-size:11.5px;padding:6px 10px;flex:none}
  #main{flex:1;position:relative;min-height:0}
  #board{border-radius:18px;
    background:radial-gradient(circle at 50% 50%,rgba(96,116,230,.12),rgba(8,11,22,.35) 70%)}
  /* 中间发言栏尽量宽：两侧各留 23%，座位的缩放由 JS 按列宽算 */
  #side{position:absolute;left:23%;right:23%;top:0;bottom:0;width:auto;
    display:flex;flex-direction:column;gap:5px;z-index:5}
  /* 聊天区：更小的头像、更紧的行距，把空间让给内容 */
  #log{flex:1;min-height:0;font-size:12.5px;line-height:1.5;padding:6px 7px}
  #log .line{margin-bottom:4px}
  #log .speech{padding:4px 7px;gap:5px;border-radius:3px 9px 9px 3px}
  #log .speech .mini{width:18px;height:18px;font-size:11px;flex:none}
  #log .speech .who{font-size:11px}
  #log .speech .tx{font-size:12.5px;line-height:1.5}
  #log .sys{font-size:11px}
  #log .sep{font-size:11px;letter-spacing:1px;padding:4px 0;margin:8px 0 6px}
  #panel{padding:8px;min-height:0;max-height:48%;flex:none;overflow-y:auto}
  #prompt{font-size:12px;line-height:1.45}
  #options{gap:5px;max-height:none}
  #options .btn{font-size:11.5px;padding:5px 9px}
  .votebox{font-size:11px;line-height:1.7;padding:6px 8px;max-height:96px}
  .row input[type=text]{padding:7px 10px;font-size:12.5px}
  /* 座位在手机上更紧凑：卡片变窄、头像占比更大，好把宽度让给聊天栏 */
  .seat{width:88px;height:92px;padding:6px 4px;gap:2px;border-radius:14px}
  .seat .av{width:42px;height:42px;font-size:21px}
  .seat .nm{font-size:11px}
  .seat .st{font-size:9px}
  .seat .no{font-size:9px;min-width:15px;height:15px;top:-5px;left:-6px}
  .modal{width:94vw;padding:20px 16px;border-radius:20px;max-height:92vh}
  .modal h1{font-size:22px;letter-spacing:4px}
  .modal .rolecard .em{font-size:46px}
  .modal .rolecard .rn{font-size:19px}
  .lobbygrid{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:7px}
  .lsl{padding:7px 8px;gap:6px}
  .lsl .av{width:28px;height:28px;font-size:15px}
  .lsl .nm{font-size:12px}
  .lsl .sub{font-size:9.5px}
  .banner{font-size:clamp(18px,6vw,30px);letter-spacing:5px;top:34%}
}
