/* 斗地主 Web 全局样式（v1.35 自 index.html 内联 <style> 拆出，内容未改动） */
  :root{
    /* 经典斗地主配色 */
    --bg:#0d1b2e; --panel:rgba(20,36,60,.94); --panel2:#16263f;
    --accent:#e8b64c; --accent2:#c99a35;
    --red:#ff5b5b; --green:#3ddc84; --text:#eef3fb; --muted:#93a7c7; --gold:#ffd24a;
    --orange:#ff9f43;
    --wood:#5a3518; --wood2:#3e2410; --felt:#1e6b3c; --felt2:#15532d;
  }
  *{box-sizing:border-box;}
  body{margin:0;font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;
    /* 蓝色幕布：深蓝渐变 + 帷幕褶皱 */
    background:
      radial-gradient(ellipse at 50% -10%, rgba(80,130,210,.30), transparent 58%),
      repeating-linear-gradient(90deg, rgba(255,255,255,.022) 0 2px, transparent 2px 96px),
      linear-gradient(172deg,#173158 0%,#0d1b2e 46%,#091425 100%);
    color:var(--text);min-height:100vh;}
  /* 进入对局：切换为木质桌面 */
  body.in-game{
    background:
      radial-gradient(ellipse at 50% 12%, rgba(255,210,120,.10), transparent 55%),
      repeating-linear-gradient(96deg, rgba(0,0,0,.10) 0 7px, transparent 7px 52px),
      linear-gradient(160deg,#7a4a26 0%,#5a3518 42%,#3e2410 100%);}
  .wrap{max-width:980px;margin:0 auto;padding:16px;}
  h1{font-size:24px;margin:0 0 8px;letter-spacing:2px;}
  h2{font-size:16px;margin:0 0 10px;color:var(--gold);}
  .card{background:var(--panel);border-radius:16px;padding:14px 16px;margin-bottom:14px;
    border:1px solid rgba(120,150,200,.18);
    box-shadow:0 10px 30px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.05);}
  /* 聊天窗口卡片：与普通卡片做颜色区分（淡蓝调边框+略深底色，柔和不突兀） */
  .card.chat-card{background:linear-gradient(180deg,rgba(22,46,82,.96),rgba(14,28,52,.97));
    border-color:rgba(86,156,255,.4);
    box-shadow:0 10px 30px rgba(0,0,0,.35), inset 0 1px 0 rgba(140,190,255,.09);}
  .card.chat-card h2{color:#8ec5ff;}
  .card.chat-card .room-log{background:rgba(8,18,36,.5);border:1px solid rgba(86,156,255,.16);
    border-radius:10px;padding:8px 10px;}
  .row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}
  input,button{font-size:14px;border-radius:10px;border:none;padding:10px 14px;outline:none;}
  input{background:var(--panel2);color:var(--text);border:1px solid #2b3a57;min-width:160px;}
  input:focus{border-color:var(--accent);}
  /* 下拉框深色样式（与输入框同系，避免浏览器默认白底突元） */
  select{background:var(--panel2);color:var(--text);border:1px solid #2b3a57;border-radius:10px;
    padding:9px 12px;font-size:14px;outline:none;}
  select:focus{border-color:var(--accent);}
  select option{background:#131c30;color:var(--text);}
  button{background:linear-gradient(180deg,var(--accent),var(--accent2));color:#241a05;
    cursor:pointer;font-weight:700;transition:.15s;box-shadow:0 3px 10px rgba(0,0,0,.3);}
  button:hover{filter:brightness(1.12);transform:translateY(-1px);}
  button:active{transform:translateY(0);}
  button:disabled{opacity:.4;cursor:not-allowed;transform:none;}
  button.ghost{background:rgba(22,38,63,.85);color:var(--text);border:1px solid #31466b;}
  button.green{background:linear-gradient(180deg,#3ddc84,#28a45f);color:#05230f;}
  button.orange{background:linear-gradient(180deg,#ff9f43,#e07e1f);color:#241200;}
  button.danger{background:linear-gradient(180deg,#ff5b5b,#d03434);color:#fff;}
  button.auto{background:linear-gradient(180deg,#7b6cff,#5a45e0);color:#fff;
    box-shadow:0 3px 10px rgba(90,69,224,.35);}
  button.auto.active{background:linear-gradient(180deg,#ffd24a,#e8b400);color:#241a05;
    box-shadow:0 0 0 2px rgba(255,210,74,.4),0 4px 14px rgba(255,210,74,.3);}
  .muted{color:var(--muted);font-size:13px;}
  .small{font-size:12px;}
  .center{text-align:center;}
  /* 登录（幕布上浮出卡片） */
  .auth-box{max-width:400px;margin:70px auto 0;}
  .auth-box h1{color:var(--gold);text-shadow:0 0 24px rgba(255,210,74,.35);font-size:28px;}
  .auth-box .card{padding:28px 30px;border-radius:18px;
    background:linear-gradient(180deg,rgba(30,50,85,.95),rgba(15,27,49,.96));
    border:1px solid rgba(232,182,76,.30);
    box-shadow:0 26px 60px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.08);}
  .auth-box input{width:100%;margin-bottom:12px;}
  .auth-tip{font-size:12px;color:var(--muted);margin-top:14px;text-align:center;line-height:1.7;}
  /* 大厅：幕布 + 金色标题 */
  #lobbyView h1{color:var(--gold);text-shadow:0 0 20px rgba(255,210,74,.3);}
  #lobbyView .row > .muted{opacity:.9;}
  .room-item{display:flex;align-items:center;gap:12px;padding:13px 16px;
    background:linear-gradient(180deg,rgba(26,42,70,.92),rgba(18,31,52,.95));
    border-radius:13px;margin-bottom:10px;flex-wrap:wrap;cursor:pointer;
    border:1px solid rgba(120,150,200,.16);transition:.15s;}
  .room-item:hover{border-color:var(--accent);transform:translateY(-2px);
    box-shadow:0 8px 22px rgba(0,0,0,.4);}
  .room-item .info{flex:1;min-width:220px;pointer-events:none;}
  .room-item .nm{font-weight:700;font-size:15px;color:#fff;}
  .room-item .nm .tag{margin-left:6px;}
  .room-item button{pointer-events:auto;}
  .tag{display:inline-block;border-radius:6px;padding:1px 8px;font-size:12px;margin-left:6px;white-space:nowrap;}
  .tag.wait{background:#22334f;color:#8fb8ff;}
  .tag.play{background:#3a2f22;color:#ffb86b;}
  .tag.full{background:#4a2424;color:#ff8a8a;}
  .tag.close{background:#3a2a10;color:#ffb020;font-weight:700;}
  .tag.owner{background:var(--gold);color:#111;}
  .tag.bot{background:#3a4d70;color:#cfe;}
  .tag.ready{background:var(--green);color:#0b1220;}
  .tag.notready{background:#3a3f52;color:#aab;}
  .tag.admin{background:#b06bff;color:#fff;}
  .tag.banned{background:#4a2424;color:#ff8a8a;}
  .empty{color:var(--muted);text-align:center;padding:22px 0;}
  /* 座位 / 等待区（绿呢） */
  #waitArea{border:1px solid rgba(255,255,255,.10);
    background:
      radial-gradient(ellipse at 50% 0%, rgba(255,255,255,.06), transparent 60%),
      linear-gradient(180deg,#1c5f38,#14502c);
    box-shadow:inset 0 0 40px rgba(0,0,0,.35);}
  .seatrow{display:flex;gap:10px;flex-wrap:wrap;}
  .seat{flex:1;min-width:220px;background:rgba(8,20,12,.72);border-radius:14px;padding:16px;
    border:1px solid rgba(255,255,255,.14);position:relative;}
  .seat.empty{border-style:dashed;opacity:.65;color:var(--muted);}
  .seat.empty .seat-top{justify-content:center;}
  .seat .nm{font-weight:700;font-size:15px;margin-bottom:6px;color:#fff;}
  .seat .st{margin-top:8px;font-size:13px;}
  .waitbar{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px;align-items:center;}
  .countdown{color:var(--orange);font-weight:700;font-size:14px;}
  /* 游戏桌面（木框 + 绿呢） */
  body.in-game #gameView > .card{
    background:linear-gradient(180deg,rgba(94,58,30,.94),rgba(64,39,17,.96));
    border:1px solid rgba(255,210,140,.20);}
  #gameArea{
    background:
      radial-gradient(ellipse at 50% 26%, rgba(255,255,255,.05), transparent 60%),
      radial-gradient(ellipse at 50% 55%, #1e6b3c 0%, #14522c 72%);
    border:14px solid #3e2410;
    border-radius:26px;
    padding:14px;
    box-shadow:0 20px 55px rgba(0,0,0,.6), inset 0 0 70px rgba(0,0,0,.30);
  }
  #gameArea .card{background:rgba(9,24,15,.55);border:1px solid rgba(255,255,255,.10);
    box-shadow:none;backdrop-filter:blur(3px);}
  #gameArea .card h2,#gameArea .card .muted small{color:var(--gold);}
  /* 牌 */
  .hand{display:flex;margin-top:6px;min-height:100px;padding:12px 2px 8px;}
  .hand .pcard{margin-left:-26px;box-shadow:0 4px 10px rgba(0,0,0,.50);}
  .hand .pcard:first-child{margin-left:0;}
  .hand .pcard:hover{transform:translateY(-14px);z-index:6;filter:brightness(1.08);
    box-shadow:0 8px 20px rgba(0,0,0,.55);}
  .pcard{width:60px;height:86px;border-radius:10px;
    background:linear-gradient(180deg,#fff 0%,#f0f3f8 100%);
    color:#111;position:relative;display:flex;flex-direction:column;justify-content:space-between;
    padding:6px;cursor:pointer;user-select:none;font-weight:700;
    border:1.5px solid #c8cdd6;transition:transform .15s,box-shadow .15s;
    box-shadow:0 3px 8px rgba(0,0,0,.40);}
  .pcard.sel{transform:translateY(-20px);
    box-shadow:0 0 0 3px var(--gold),0 0 16px rgba(255,210,74,.55),0 10px 18px rgba(0,0,0,.5);
    z-index:7;}
  .pcard.red{color:var(--red);}
  .pcard .top{font-size:18px;line-height:1;}
  .pcard .mid{font-size:26px;text-align:center;}
  .pcard .bot{font-size:18px;line-height:1;transform:rotate(180deg);text-align:right;}
  /* 对手（绿呢上的玩家卡） */
  .opp{display:flex;gap:12px;justify-content:space-between;flex-wrap:wrap;}
  .opp .p{flex:1;min-width:200px;background:linear-gradient(180deg,#23401f,#172e14);
    border:1px solid rgba(255,255,255,.14);border-radius:12px;padding:10px;position:relative;}
  .opp .p .name{font-weight:700;color:#fff;}
  .badge{display:inline-block;background:var(--gold);color:#111;border-radius:6px;padding:1px 6px;
    font-size:12px;margin-left:6px;}
  .count{color:#b9cfc0;font-size:13px;}
  /* 当前出牌人：金色高亮 + 标签；下一家：青色虚线提醒 */
  .turn{outline:2px solid var(--gold);outline-offset:2px;
    background:linear-gradient(135deg,#3a3320,#2b2418) !important;}
  .turn .name{color:var(--gold) !important;}
  .turn::after{content:"● 出牌中";position:absolute;top:8px;right:10px;color:var(--gold);
    font-size:11px;font-weight:700;}
  .next{outline:2px dashed var(--accent);outline-offset:2px;}
  .next .name{color:#8fb8ff !important;}
  .next::after{content:"▼ 下一位";position:absolute;top:8px;right:10px;color:#8fb8ff;
    font-size:11px;font-weight:700;}
  .myseat-turn .hand{outline:2px solid var(--gold);outline-offset:4px;border-radius:10px;}
  .pile{display:flex;gap:4px;flex-wrap:wrap;min-height:68px;align-items:center;}
  .pile .pcard{width:48px;height:68px;cursor:default;}
  .pile .pcard .mid{font-size:18px;}
  /* v1.44：当前回合的出牌金色高亮 */
  .pile .pcard.fresh{box-shadow:0 0 0 2px var(--gold),0 0 14px rgba(255,210,74,.6);}
  .log{max-height:260px;overflow:auto;font-size:13px;color:var(--muted);}
  .log div{padding:2px 0;border-bottom:1px solid #20304a;}
  /* 房间记录（合并：系统对战信息 + 用户聊天） */
  .room-log{max-height:260px;overflow:auto;font-size:13px;}
  .log-msg{padding:4px 2px;border-bottom:1px solid rgba(32,48,74,.7);line-height:1.5;}
  .log-msg.system{background:rgba(255,210,74,.07);}
  .log-msg.system .who{color:var(--gold);font-weight:600;margin-right:6px;}
  .log-msg.system .action{color:var(--gold);font-weight:600;}
  .log-msg.play .who{color:var(--gold);font-weight:600;margin-right:6px;}
  .log-msg.play .action{color:var(--gold);}
  .log-msg.play .cards{display:inline-flex;gap:2px;margin-left:6px;vertical-align:middle;}
  .log-msg.play .cards .pcard{width:28px;height:40px;margin-left:0;box-shadow:none;}
  .log-msg.play .cards .pcard .mid{font-size:11px;}
  .log-msg.play .cards .pcard .top{font-size:10px;}
  .log-msg.play .cards .pcard .bot{font-size:10px;}
  .log-msg.chat{font-size:13px;color:var(--text);}
  .log-msg.chat .who{color:var(--accent);font-weight:600;margin-right:6px;}
  .log-msg.chat .txt{color:var(--text);}
  /* 时间戳（北京时间 24 小时制）：系统/出牌/聊天消息通用，右浮弱化显示 */
  .log-msg .ts{float:right;opacity:.45;font-size:11px;margin-left:8px;}
  /* 统一消息格式：系统通知[时间]：… / 【管理员】名字[时间]：内容 */
  .log-msg .sys-prefix{color:var(--gold);font-weight:600;}
  .log-msg .sep{opacity:.6;margin:0 2px;}
  .log-msg .ts-inline{opacity:.5;font-size:11px;margin:0 3px;}
  .log-msg.chat .tag.admin{font-size:10px;padding:1px 5px;border-radius:8px;margin-right:4px;vertical-align:middle;}
  /* 全站广播消息：📢 图标 + 金色高亮，与普通聊天区分（合并展示在大厅/房间单一聊天窗口内） */
  .log-msg.broadcast{background:rgba(255,200,60,.10);border:1px solid rgba(255,200,60,.35);border-radius:6px;}
  .log-msg.broadcast .txt{color:var(--gold);font-weight:600;}
  .log-msg.broadcast .bc-icon{margin-right:4px;}
  .chat-input-row{display:flex;gap:8px;margin-top:8px;}
  .chat-input-row input{flex:1;min-width:0;}
  /* emoji 表情包面板（微信风格）：紧凑气泡弹窗 + 底部小箭头指向 😀 按钮，大厅/房间聊天共用 */
  .chat-card{position:relative;}
  .chat-input-row .emoji-btn{min-width:0;padding:8px 12px;font-size:16px;line-height:1;}
  .emoji-panel{position:absolute;left:10px;bottom:58px;z-index:30;width:min(432px,calc(100% - 20px));
    background:rgba(16,30,54,.98);border:1px solid rgba(86,156,255,.4);border-radius:12px;
    box-shadow:0 8px 24px rgba(0,0,0,.45);padding:10px 10px 6px;}
  .emoji-panel::after{content:'';position:absolute;left:22px;bottom:-7px;width:12px;height:12px;
    background:rgba(16,30,54,.98);transform:rotate(45deg);
    border-right:1px solid rgba(86,156,255,.4);border-bottom:1px solid rgba(86,156,255,.4);}
  /* 表情网格：一排 10 个、悬停放大预览（微信同款交互） */
  .emoji-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px;max-height:216px;overflow:auto;}
  .emoji-grid button{background:none;box-shadow:none;padding:5px 0;font-size:24px;line-height:1;border-radius:8px;transition:transform .1s;}
  .emoji-grid button:hover{background:rgba(86,156,255,.18);filter:none;transform:scale(1.25);}
  .emoji-grid .empty{grid-column:1/-1;text-align:center;color:var(--muted);font-size:12px;padding:18px 0;}
  /* 底部分类图标栏（微信同款）：一排小图标，首位「最近使用」 */
  .emoji-tabs{display:flex;gap:2px;margin-top:6px;padding-top:6px;border-top:1px solid rgba(86,156,255,.2);}
  .emoji-tabs button{min-width:0;padding:4px 8px;font-size:16px;line-height:1;border-radius:8px;box-shadow:none;
    background:none;filter:none;opacity:.7;}
  .emoji-tabs button:hover{opacity:1;transform:none;background:rgba(86,156,255,.15);}
  .emoji-tabs button.active{opacity:1;background:rgba(86,156,255,.25);box-shadow:inset 0 0 0 1px rgba(86,156,255,.5);}
  /* 操作按钮区 */
  #actions button{padding:12px 22px;font-size:15px;border-radius:12px;}
  #playBtn{background:linear-gradient(180deg,#3ddc84,#28a45f);color:#05230f;}
  #passBtn{background:rgba(22,38,63,.9);}
  /* 管理员面板 / 战绩表格 */
  table.admin-tbl{width:100%;border-collapse:collapse;font-size:13px;}
  table.admin-tbl th,table.admin-tbl td{padding:6px 8px;border-bottom:1px solid #20304a;text-align:left;vertical-align:middle;}
  table.admin-tbl th{color:var(--muted);font-weight:600;white-space:nowrap;}
  table.admin-tbl tbody tr:hover{background:rgba(176,107,255,.06);}
  /* 用户管理表格（v1.34）：时间列不换行、UID 等宽字体、操作按钮 flex 对齐 */
  .um-time{white-space:nowrap;font-size:12px;color:var(--muted);}
  .um-uid{font-family:Consolas,Menlo,monospace;font-size:12px;color:var(--muted);white-space:nowrap;}
  .um-ops{display:flex;flex-wrap:wrap;gap:4px;align-items:center;min-width:230px;max-width:300px;}
  .um-ops button{padding:5px 9px;font-size:12px;border-radius:8px;}
  .um-ops select{padding:5px 6px;font-size:12px;}
  .modal-mask{position:fixed;inset:0;background:rgba(5,10,20,.65);z-index:50;
    display:flex;align-items:center;justify-content:center;backdrop-filter:blur(2px);}
  .modal{max-width:640px;width:94%;max-height:80vh;overflow:auto;}
  .admin-ops{display:flex;gap:8px;flex-wrap:wrap;}
  .inline-form{display:flex;gap:8px 14px;flex-wrap:wrap;align-items:center;margin-top:8px;}
  /* 表单字段组：标签+控件水平对齐，标签不换行 */
  .inline-form .fld{display:flex;align-items:center;gap:6px;}
  .inline-form .fld > span{color:var(--muted);font-size:12px;white-space:nowrap;}
  .inline-form input,.inline-form select{min-width:0;}
  /* v1.39：聊天审计筛选单行化——datetime 输入框紧凑化，保证与用户/游戏/频道/排序同行排布 */
  .inline-form input[type="datetime-local"]{width:150px;padding:6px 6px;font-size:12px;}
  .audit-form{gap:8px 10px;}
  .audit-form select{font-size:12px;}
  /* 管理员面板：紫调背景与页面/普通卡片明显区分（管理=紫色，与管理员徽章同色系） */
  #adminPanel{background:linear-gradient(180deg,rgba(40,32,64,.96),rgba(26,21,44,.97));
    border-color:rgba(176,107,255,.35);
    box-shadow:0 10px 30px rgba(0,0,0,.4), inset 0 1px 0 rgba(200,160,255,.08);}
  #adminPanel h2{color:#c9a0ff;}
  /* 面板内分组：每个功能模块独立圆角小节，标题紫色、说明弱化 */
  .admin-section{background:rgba(10,8,20,.35);border:1px solid rgba(176,107,255,.16);
    border-radius:12px;padding:12px 14px;margin-top:12px;}
  .admin-section .sec-title{font-size:13px;font-weight:700;color:#c9a0ff;}
  .admin-section .sec-desc{font-size:12px;color:var(--muted);margin:4px 0 8px;line-height:1.6;}
  /* 邀请注册码列表（v1.34）：每码一行，码/时间与状态居左、操作按钮固定靠右，整行对齐 */
  .invite-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;margin-top:8px;
    background:rgba(6,8,18,.35);border:1px solid rgba(176,107,255,.16);border-radius:10px;}
  .invite-row .code{font-family:Consolas,Menlo,monospace;font-size:14px;font-weight:700;color:var(--gold);
    cursor:pointer;letter-spacing:1px;}
  .invite-row .code:hover{text-decoration:underline;}
  .invite-row .meta{flex:1;min-width:180px;color:var(--muted);line-height:1.6;}
  .invite-row .ops{display:flex;gap:6px;flex:none;}
  /* 聊天审计记录列表（v1.37 重构）：每条记录双行展示——首行时间/频道/角色/发言人/归属房间，次行消息正文，避免单行基线对齐的参差感 */
  .audit-list{border:1px solid rgba(176,107,255,.16);border-radius:10px;overflow:hidden;background:rgba(6,8,18,.25);}
  .audit-row{padding:8px 12px;font-size:13px;border-bottom:1px solid rgba(32,48,74,.7);}
  .audit-row:last-child{border-bottom:none;}
  .audit-row:hover{background:rgba(176,107,255,.07);}
  .audit-row .a-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .audit-row .a-time{color:var(--muted);font-size:12px;white-space:nowrap;}
  .audit-row .a-tags{display:inline-flex;gap:4px;}
  .audit-row .a-tags .tag{margin-left:0;}
  .audit-row .a-who{font-weight:600;color:var(--accent);max-width:180px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .audit-row .a-room{margin-left:auto;color:var(--muted);font-size:12px;white-space:nowrap;}
  .audit-row .a-text{margin-top:4px;word-break:break-word;color:var(--text);line-height:1.55;}
  .audit-row.broadcast{background:rgba(255,200,60,.08);}
  .audit-row.broadcast .a-text{color:var(--gold);font-weight:600;}
  /* ---------------- v1.37：分页栏（聊天审计等：居中排列） ---------------- */
  .pager-bar{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:10px;}
  /* 对战查询记录列表（v1.38 重构）：网格布局保证各列纵向对齐，出牌明细按钮固定右对齐（原 float:right 随换行歪斜） */
  .rec-list{border:1px solid rgba(176,107,255,.16);border-radius:10px;overflow:hidden;background:rgba(6,8,18,.25);}
  .rec-row{display:grid;grid-template-columns:auto auto minmax(90px,1fr) minmax(150px,1.25fr) minmax(110px,1fr) auto auto;
    gap:10px;align-items:center;padding:8px 12px;font-size:13px;border-bottom:1px solid rgba(32,48,74,.7);}
  .rec-row:last-child{border-bottom:none;}
  .rec-row:hover{background:rgba(176,107,255,.07);}
  .rec-row .r-id{color:var(--gold);font-weight:700;}
  .rec-row .tag{margin-left:0;}
  .rec-row .r-room,.rec-row .r-time,.rec-row .r-win{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .rec-row .r-time{color:var(--muted);}
  .rec-row button{justify-self:end;flex:none;}
  @media (max-width:760px){
    .rec-row{display:flex;flex-wrap:wrap;}
    .rec-row button{margin-left:auto;}
  }
  /* 管理面板模块分页签（注册与功能 / 用户管理 / 对战查询 / 聊天审计） */
  .admin-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0 4px;border-bottom:1px solid rgba(176,107,255,.25);padding-bottom:8px;}
  .admin-tab{background:transparent;border:1px solid rgba(176,107,255,.25);color:var(--muted);
    border-radius:8px;padding:6px 12px;cursor:pointer;font-size:13px;}
  .admin-tab:hover{color:var(--text);border-color:var(--muted);}
  .admin-tab.active{color:#c9a0ff;border-color:#b06bff;background:rgba(176,107,255,.10);}
  /* 系统开关（v1.32）：每行一个，右侧胶囊开关按钮（绿=开 / 红=关），左侧功能名+小字说明 */
  .switch-list{display:flex;flex-direction:column;gap:10px;}
  .switch-row{display:flex;align-items:center;justify-content:space-between;gap:14px;
    background:rgba(6,8,18,.35);border:1px solid rgba(176,107,255,.14);border-radius:10px;padding:10px 14px;}
  .switch-info{min-width:0;}
  .switch-name{font-size:13px;font-weight:700;color:var(--text);}
  .switch-desc{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.55;}
  .switch-btn{flex:none;min-width:72px;padding:8px 16px;border-radius:999px;border:1px solid transparent;
    font-size:12px;font-weight:700;cursor:pointer;transition:all .15s;}
  .switch-btn.on{color:#08240f;background:var(--green);border-color:var(--green);
    box-shadow:0 0 12px rgba(61,220,132,.35);}
  .switch-btn.off{color:#fff;background:var(--red);border-color:var(--red);
    box-shadow:0 0 12px rgba(255,91,91,.3);}
  .switch-btn:hover{filter:brightness(1.12);}
  /* 账户设置弹窗（v1.32）：中性深色小节分组，注销小节红色调 */
  .acct-info{background:rgba(10,14,26,.5);border:1px solid #223050;border-radius:10px;
    padding:10px 14px;margin-top:10px;font-size:13px;line-height:1.9;}
  .acct-info b{color:var(--gold);}
  /* 账户信息分行展示（v1.34）：登录名/昵称/ID 每项一行，标签定宽左右对齐 */
  .acct-line{display:flex;align-items:baseline;gap:8px;padding:6px 2px;line-height:1.6;
    border-bottom:1px dashed rgba(34,48,80,.7);}
  .acct-line:last-child{border-bottom:none;}
  .acct-line .k{flex:0 0 64px;color:var(--muted);}
  .acct-line b{color:var(--gold);word-break:break-all;}
  .acct-line .note{color:var(--muted);font-size:12px;}
  .acct-section{background:rgba(10,14,26,.45);border:1px solid #223050;border-radius:12px;
    padding:12px 14px;margin-top:12px;}
  .acct-section .sec-title{font-size:13px;font-weight:700;color:var(--accent);}
  .acct-section .sec-desc{font-size:12px;color:var(--muted);margin:4px 0 10px;line-height:1.6;}
  .acct-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
  .acct-row input{flex:1;min-width:150px;}
  .acct-section.danger{border-color:rgba(255,91,91,.35);}
  .acct-section.danger .sec-title{color:var(--red);}
  .bottom-cards{display:flex;gap:4px;}
  .bottom-cards .pcard{width:44px;height:62px;cursor:default;}
  .win{font-size:20px;font-weight:800;color:var(--gold);}
  .toast{position:fixed;left:50%;top:20px;transform:translateX(-50%);background:#23314d;
    padding:10px 18px;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.4);opacity:0;
    transition:.25s;pointer-events:none;z-index:99;border:1px solid rgba(255,255,255,.12);}
  .toast.show{opacity:1;}
  /* 滚动条 */
  ::-webkit-scrollbar{width:8px;height:8px;}
  ::-webkit-scrollbar-thumb{background:#31466b;border-radius:4px;}
  ::-webkit-scrollbar-track{background:transparent;}
  /* 游戏选择页 */
  #gameSelectView h1{color:var(--gold);text-shadow:0 0 20px rgba(255,210,74,.3);}
  .game-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin-top:12px;}
  .game-card{background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.15);
    border-radius:12px;padding:24px 20px;text-align:center;cursor:pointer;
    transition:transform .15s,box-shadow .15s,border-color .15s;}
  .game-card:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(0,0,0,0.35);
    border-color:var(--accent);}
  .game-card-icon{font-size:48px;margin-bottom:8px;}
  .game-card-title{font-size:1.2rem;font-weight:700;color:var(--gold);margin-bottom:4px;}
  .game-card-desc{font-size:0.85rem;color:rgba(255,255,255,0.55);margin:6px 0 14px;}
  .game-card-disabled{opacity:0.45;cursor:default;}
  .game-card-disabled:hover{transform:none;box-shadow:none;border-color:rgba(255,255,255,0.15);}
  /* ---------------- v1.35：在线用户数徽章（大厅头部） ---------------- */
  .online-badge{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;
    border-radius:999px;font-size:13px;font-weight:600;color:#8ef0b6;
    background:rgba(22,60,42,.6);border:1px solid rgba(61,220,132,.35);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.05);white-space:nowrap;}
  .online-badge .dot{width:8px;height:8px;border-radius:50%;background:var(--green);
    box-shadow:0 0 8px rgba(61,220,132,.8);animation:onlinePulse 2s infinite;}
  @keyframes onlinePulse{0%,100%{opacity:1}50%{opacity:.45}}
  /* ---------------- v1.35：用户头像（圆形，大厅右上角 / 账户弹窗） ---------------- */
  .avatar-img{width:34px;height:34px;border-radius:50%;object-fit:cover;cursor:pointer;
    border:2px solid rgba(232,182,76,.55);background:#141e33;flex:none;
    box-shadow:0 2px 8px rgba(0,0,0,.4);transition:.15s;}
  .avatar-img:hover{border-color:var(--gold);transform:scale(1.08);}
  .avatar-img.avatar-lg{width:56px;height:56px;border-width:2px;}
  /* ---------------- v1.35：新创建房间高亮（创建 5 分钟内） ---------------- */
  .room-item.room-new{background:linear-gradient(180deg,rgba(58,46,16,.95),rgba(38,30,10,.96));
    border:1px solid rgba(255,210,74,.55);
    box-shadow:0 0 0 1px rgba(255,210,74,.18),0 8px 22px rgba(0,0,0,.4);}
  .room-item.room-new:hover{border-color:var(--gold);}
  .tag.new{background:linear-gradient(180deg,#ffd24a,#e8b400);color:#241a05;font-weight:800;
    animation:newTagPulse 1.6s infinite;}
  @keyframes newTagPulse{0%,100%{box-shadow:0 0 0 0 rgba(255,210,74,.55)}
    50%{box-shadow:0 0 0 6px rgba(255,210,74,0)}}
  /* ---------------- v1.35：创建房间卡片独立配色（绿呢调，与房间列表/背景区分） ---------------- */
  .card.create-card{background:linear-gradient(180deg,rgba(20,62,40,.92),rgba(12,42,28,.95));
    border-color:rgba(61,220,132,.4);
    box-shadow:0 10px 30px rgba(0,0,0,.35), inset 0 1px 0 rgba(120,255,180,.08);}
  .card.create-card h2{color:#7ee6a8;}
  /* ---------------- v1.35：管理员面板悬浮弹窗（参考账户设置弹窗模式） ---------------- */
  #adminPanel.modal{max-width:1080px;width:96%;max-height:84vh;overflow:auto;}
  /* ---------------- v1.35：用户信息变更记录表（管理面板页签） ---------------- */
  .uc-val{word-break:break-all;font-family:Consolas,Menlo,monospace;font-size:12px;}
  /* ---------------- v1.37：统一页头（游戏中心/大厅/房间三页同构：左返回+标题，右用户栏+头像菜单） ---------------- */
  .page-head{justify-content:space-between;align-items:center;}
  .page-head h1{margin:0;}
  .head-userbar{margin-left:auto;flex:none;gap:12px;}
  .lobby-footer{display:flex;justify-content:center;padding:4px 0 2px;}
  /* ---------------- v1.37：头像下拉菜单（我的战绩/账户设置/管理员面板/退出登录集成） ---------------- */
  .avatar-menu{position:relative;}
  .avatar-dropdown{position:absolute;right:0;top:calc(100% + 8px);z-index:45;min-width:176px;
    background:rgba(14,26,48,.98);border:1px solid rgba(86,156,255,.4);border-radius:12px;
    box-shadow:0 12px 30px rgba(0,0,0,.5);padding:6px;display:flex;flex-direction:column;gap:2px;}
  .avatar-dropdown::before{content:'';position:absolute;right:14px;top:-6px;width:10px;height:10px;
    background:rgba(14,26,48,.98);transform:rotate(45deg);
    border-left:1px solid rgba(86,156,255,.4);border-top:1px solid rgba(86,156,255,.4);}
  .avatar-dropdown .dd-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;
    background:transparent;color:var(--text);border:none;border-radius:8px;padding:8px 12px;
    font-size:13px;font-weight:600;box-shadow:none;min-width:0;}
  .avatar-dropdown .dd-item:hover{background:rgba(86,156,255,.18);filter:none;transform:none;}
  .avatar-dropdown .dd-item.dd-danger{color:#ff9b9b;}
  .avatar-dropdown .dd-item.dd-danger:hover{background:rgba(255,91,91,.16);}
  .avatar-dropdown .dd-sep{height:1px;background:rgba(86,156,255,.22);margin:4px 8px;}
  /* ---------------- v1.36：房间列表/创建房间模块排版 ---------------- */
  .list-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;}
  .list-head h2{margin:0 0 8px;}
  .room-meta{margin-top:2px;}
  .create-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
  .create-row h2{margin:0;flex:none;}
  .create-row input{flex:1;min-width:160px;}
  .create-row button{flex:none;}
  .create-tip{margin-top:8px;opacity:.85;}
  /* ---------------- v1.36：房间页头（与大厅同构） ---------------- */
  .game-head h1{font-size:20px;margin:0;color:var(--gold);text-shadow:0 0 20px rgba(255,210,74,.3);}
  body.in-game .game-head{background:linear-gradient(180deg,rgba(94,58,30,.94),rgba(64,39,17,.96));
    border:1px solid rgba(255,210,140,.20);}
  button.danger-ghost{border-color:rgba(255,91,91,.5);color:#ff9b9b;}
  /* ---------------- v1.36：座位区放大 + 头像展示 ---------------- */
  .seat-top{display:flex;gap:12px;align-items:center;}
  .seat-avatar{width:52px;height:52px;border-radius:50%;object-fit:cover;flex:none;
    border:2px solid rgba(255,210,74,.55);background:#141e33;box-shadow:0 2px 8px rgba(0,0,0,.4);}
  .seat-avatar.bot{display:flex;align-items:center;justify-content:center;font-size:26px;
    background:#22304a;border-color:#3a4d70;}
  .seat-avatar.empty-av{border-style:dashed;border-color:rgba(255,255,255,.35);background:transparent;
    display:flex;align-items:center;justify-content:center;font-size:22px;opacity:.7;}
  .seat-info{min-width:0;flex:1;}
  .seat .nm{margin-bottom:2px;}
  /* ---------------- v1.36：UID 列省略号（用户管理表） ---------------- */
  td.um-uid{max-width:150px;overflow:hidden;text-overflow:ellipsis;}

/* ---------------- v1.40：会话恢复闪屏（已登录刷新时替代登录页，避免登录页闪现） ---------------- */
/* html.restoring 由 index.html head 内联脚本在外部脚本加载前标记 */
html.restoring #authView{display:none!important;}
.restore-tip{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:10px;color:var(--muted);font-size:15px;z-index:5;}
.restore-tip .restore-spin{font-size:30px;animation:restoreSpin 1.2s linear infinite;}
@keyframes restoreSpin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}

/* ---------------- v1.41：麻将玩法标签（大厅房间列表 / 房间页头） ---------------- */
.tag.variant{background:#45252b;color:#ff9c9c;border:1px solid rgba(255,120,120,.35);}

/* ---------------- v1.42：麻将绒面牌桌（参考经典麻将桌布局） ---------------- */
/* 牌桌：青绿绒面 + 木质边框；中央罗盘倒计时，四向牌河环绕 */
.mj-board{position:relative;margin-top:10px;min-height:560px;border-radius:18px;overflow:hidden;
  padding:10px;border:10px solid #5a3518;
  border-color:#7a4a26 #5a3518 #46280f #5a3518;
  background:
    repeating-radial-gradient(circle at 50% 46%, rgba(255,255,255,.045) 0 2px, transparent 2px 30px),
    radial-gradient(ellipse at 50% 46%, #2a8f86 0%, #17766d 42%, #0e5c55 72%, #0a4a44 100%);
  box-shadow:inset 0 0 70px rgba(0,0,0,.5), 0 10px 26px rgba(0,0,0,.55);}
/* 中央罗盘：菱形黑盘 + 四向风位 + 数字倒计时（每局倒计时挪到桌子中间） */
.mj-compass{position:absolute;left:50%;top:50%;width:188px;height:188px;z-index:3;
  transform:translate(-50%,-50%) rotate(45deg);border-radius:20px;
  background:linear-gradient(135deg,#232833,#101318 70%);border:3px solid #000;
  box-shadow:0 0 0 3px rgba(255,210,74,.28), 0 10px 26px rgba(0,0,0,.65), inset 0 0 26px rgba(0,0,0,.7);}
.mj-compass .wind{position:absolute;font-size:19px;font-weight:700;color:#cfd8e3;
  font-family:"Kaiti SC","STKaiti","KaiTi",serif;transform:rotate(-45deg);}
.mj-compass .wind.w-b{left:50%;bottom:10px;transform:translateX(-50%) rotate(-45deg);color:var(--gold);}
.mj-compass .wind.w-t{left:50%;top:10px;transform:translateX(-50%) rotate(-45deg);}
.mj-compass .wind.w-l{left:12px;top:50%;transform:translateY(-50%) rotate(-45deg);}
.mj-compass .wind.w-r{right:12px;top:50%;transform:translateY(-50%) rotate(-45deg);}
.mj-timer{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:2px;transform:rotate(-45deg);}
.mj-timer .num{font:700 46px/1 Consolas,"Courier New",monospace;color:#35e0ff;
  text-shadow:0 0 14px rgba(53,224,255,.85);letter-spacing:2px;}
.mj-timer .num.low{color:var(--red);text-shadow:0 0 14px rgba(255,91,91,.9);}
.mj-timer .num.off{color:#5c6b80;text-shadow:none;font-size:30px;}
.mj-timer .kind{font-size:12px;color:#9fb0c5;}
/* 罗盘下方信息条：玩法 / 牌墙 / 庄家 / 状态提示 */
.mj-info{position:absolute;left:50%;top:calc(50% + 108px);transform:translateX(-50%);z-index:3;
  display:flex;flex-direction:column;align-items:center;gap:3px;pointer-events:none;
  color:#dff3ef;font-size:12px;text-shadow:0 1px 2px rgba(0,0,0,.6);white-space:nowrap;}
.mj-info b{color:var(--gold);}
/* 四向牌河：自家在下，对家在上，左右两家窄列 */
.mj-river{position:absolute;z-index:2;display:flex;flex-wrap:wrap;gap:3px;justify-content:center;align-content:flex-start;}
.mj-river.r-b{left:50%;top:calc(50% + 150px);transform:translateX(-50%);width:252px;min-height:40px;}
.mj-river.r-t{left:50%;bottom:calc(50% + 150px);transform:translateX(-50%);width:252px;min-height:40px;}
.mj-river.r-l{right:calc(50% + 128px);top:50%;transform:translateY(-50%);width:118px;}
.mj-river.r-r{left:calc(50% + 128px);top:50%;transform:translateY(-50%);width:118px;}
/* 三家对手区：名牌 + 牌背墙 + 副露 */
.mj-opp{position:absolute;z-index:2;display:flex;align-items:center;gap:8px;}
.mj-opp.o-t{left:50%;top:8px;transform:translateX(-50%);flex-direction:column;gap:4px;}
.mj-opp.o-l{left:8px;top:50%;transform:translateY(-50%);flex-direction:column;gap:4px;}
.mj-opp.o-r{right:8px;top:50%;transform:translateY(-50%);flex-direction:column;gap:4px;}
.mj-plate{display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:9px;
  background:rgba(0,0,0,.5);border:1px solid rgba(255,255,255,.28);color:#fff;font-size:12px;
  box-shadow:0 3px 8px rgba(0,0,0,.45);}
.mj-plate .sc{font-weight:800;color:var(--gold);}
.mj-plate .sc.minus{color:#ff8a8a;}
.mj-opp.turn .mj-plate{border-color:var(--gold);box-shadow:0 0 12px rgba(255,210,74,.55);}
/* v1.44：下回合行动人（下家）青色虚线提醒 */
.mj-opp.next .mj-plate{border:2px dashed var(--accent);}
/* v1.45：响应窗口候选行动人（可吃/碰/杠/胡）紫色虚线提醒 */
.mj-opp.candidate .mj-plate{border:2px dashed #c98bff;}
.mj-wall{display:flex;gap:2px;flex-wrap:wrap;justify-content:center;max-width:340px;}
.mj-opp.o-l .mj-wall,.mj-opp.o-r .mj-wall{flex-direction:column;max-width:none;max-height:340px;}
/* 牌背（对手手牌）：绿色立牌 */
.mback{width:20px;height:30px;border-radius:4px;flex:none;
  background:linear-gradient(180deg,#8ed455 0%,#4aa022 55%,#2e7a10 100%);
  border:1px solid #1d5c07;box-shadow:0 2px 3px rgba(0,0,0,.5), inset 0 2px 0 rgba(255,255,255,.4);}
.mj-opp.o-l .mback,.mj-opp.o-r .mback{width:30px;height:20px;}
/* 麻将牌（SVG 牌面 + 白面绿底立体感）；鬼牌金色高亮 */
.mtile{display:inline-flex;align-items:center;justify-content:center;flex:none;
  width:50px;height:70px;border-radius:7px;cursor:pointer;user-select:none;
  background:linear-gradient(180deg,#ffffff 0%,#f4f1e4 68%,#e8e2cd 100%);
  border:1px solid #b9b19a;
  box-shadow:0 4px 0 #d8ddc9, 0 7px 0 #6d9a44, 0 10px 12px rgba(0,0,0,.5), inset 0 1px 0 #fff;
  transition:transform .12s ease;}
.mtile svg{width:88%;height:92%;display:block;}
.mtile:hover{transform:translateY(-6px);filter:brightness(1.05);}
.mtile.sel{transform:translateY(-12px);
  box-shadow:0 4px 0 #d8ddc9, 0 7px 0 #6d9a44, 0 12px 16px rgba(0,0,0,.55), 0 0 0 2px var(--gold);}
.mtile.wild{border-color:var(--gold);background:linear-gradient(180deg,#fff6d8,#ffe9a8);
  box-shadow:0 4px 0 #e5c96b, 0 7px 0 #b98f1e, 0 10px 12px rgba(0,0,0,.5), 0 0 8px rgba(255,210,74,.7);}
.mtile.small{width:26px;height:36px;border-radius:4px;cursor:default;
  box-shadow:0 2px 0 #6d9a44, 0 4px 5px rgba(0,0,0,.45);}
.mtile.small:hover{transform:none;filter:none;}
.mtile.small.sel{transform:none;box-shadow:0 2px 0 #6d9a44, 0 4px 5px rgba(0,0,0,.45), 0 0 0 2px var(--gold);}
/* 最后一张打出的牌高亮 */
.mtile.last{box-shadow:0 2px 0 #6d9a44, 0 4px 5px rgba(0,0,0,.45), 0 0 0 2px var(--orange);}
/* 手牌区 / 副露 */
.mj-hand{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;min-height:80px;padding:12px 2px 6px;}
.mj-melds{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px;min-height:0;}
.mj-meld{display:inline-flex;align-items:flex-end;gap:2px;padding:4px 6px;border-radius:8px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);}
.mj-meld-tag{font-size:11px;color:var(--gold);margin-left:3px;align-self:center;}
.myseat-turn .mj-hand{outline:2px solid var(--gold);outline-offset:4px;border-radius:10px;}
.myseat-next .mj-hand{outline:2px dashed var(--accent);outline-offset:4px;border-radius:10px;}
.myseat-candidate .mj-hand{outline:2px dashed #c98bff;outline-offset:4px;border-radius:10px;}
/* 动作按钮：书法艺术字风格（胡/碰/杠/吃/过） */
.mj-act{font-family:"Kaiti SC","STKaiti","KaiTi",serif;font-size:24px;font-weight:900;
  letter-spacing:2px;padding:10px 20px;border-radius:14px;border:none;cursor:pointer;
  background:linear-gradient(180deg,#fff2c0,#ffcf4d 45%,#e08a1e);color:#7a2000;
  text-shadow:0 1px 0 #fff;box-shadow:0 4px 10px rgba(0,0,0,.5), inset 0 1px 0 #fff;}
.mj-act.hu{font-size:30px;color:#fff;background:linear-gradient(180deg,#ffd77a,#ff9c2e 40%,#d3401a);
  text-shadow:0 2px 5px #7a1000;box-shadow:0 5px 14px rgba(211,64,26,.55), inset 0 1px 0 #ffe9b0;}
.mj-act.pass{background:linear-gradient(180deg,#eef3f9,#b9c6d6 50%,#8fa2b8);color:#22303f;text-shadow:0 1px 0 #fff;}
.mj-act:disabled{filter:grayscale(.85) brightness(.65);cursor:not-allowed;box-shadow:none;}
.mj-act:not(:disabled):hover{filter:brightness(1.08);transform:translateY(-2px);}
/* 胡牌/流局结算横幅（牌桌顶部覆盖） */
.mj-result{position:absolute;left:50%;top:14px;transform:translateX(-50%);z-index:5;max-width:92%;
  background:rgba(20,16,4,.88);border:1px solid rgba(255,210,74,.55);border-radius:12px;
  padding:10px 18px;line-height:1.7;font-size:14px;color:#ffe9b0;text-align:center;
  box-shadow:0 10px 26px rgba(0,0,0,.6);}
.mj-result b{color:var(--gold);}

/* ---------------- v1.42：斗地主桌面同款风格（绒面 + 中央倒计时圆盘） ---------------- */
.ddz-felt{background:
    repeating-radial-gradient(circle at 50% 30%, rgba(255,255,255,.035) 0 2px, transparent 2px 30px),
    radial-gradient(ellipse at 50% 30%, #2a8f86 0%, #17766d 45%, #0e5c55 80%, #0a4a44 100%);
  border:6px solid #5a3518;border-radius:16px;
  box-shadow:inset 0 0 50px rgba(0,0,0,.45);}
.ddz-center{width:158px;height:158px;border-radius:50%;margin:4px auto 12px;
  background:radial-gradient(circle at 50% 32%, #232833, #101318 72%);
  border:3px solid rgba(255,210,74,.35);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:2px;
  box-shadow:0 8px 20px rgba(0,0,0,.55), inset 0 0 26px rgba(0,0,0,.65);}
.ddz-center .num{font:700 42px/1 Consolas,"Courier New",monospace;color:#35e0ff;
  text-shadow:0 0 12px rgba(53,224,255,.8);}
.ddz-center .num.low{color:var(--red);text-shadow:0 0 12px rgba(255,91,91,.9);}
.ddz-center .num.off{color:#5c6b80;text-shadow:none;font-size:26px;}
.ddz-center .kind{font-size:12px;color:#9fb0c5;}
.ddz-center .who{font-size:12px;color:var(--gold);max-width:140px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;}
