*{box-sizing:border-box;user-select:none}
body{margin:0;background:#075e36;font-family:"Microsoft YaHei";overflow:hidden}
.table{width:100vw;height:100vh;background:radial-gradient(circle,#16834e,#06462a);position:relative;color:white}
.player{position:absolute;text-align:center;transition:.3s}
.avatar{width:65px;height:65px;border-radius:50%;background:#fff;color:#222;display:flex;align-items:center;justify-content:center;font-size:30px;margin:auto;border:3px solid transparent}
.player.active .avatar{border-color:#ffd54a;box-shadow:0 0 16px #ffd54a}
.player.active .name{color:#ffd54a;font-weight:bold}
.name{margin-top:3px}
.count{background:#222;border-radius:10px;padding:3px 10px;margin-top:5px;display:inline-block}
.top{top:20px;left:50%;transform:translateX(-50%)}
.left{left:20px;top:40%;transform:translateY(-50%)}
.right{right:20px;top:40%;transform:translateY(-50%)}
.play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:560px;max-width:94vw;max-height:360px;overflow-y:auto;border:2px dashed #fff;border-radius:15px;display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px;text-align:center;font-size:15px;background:#0003}
/* 中央出牌区：状态行 + 本轮明细 */
.play-status{font-size:16px;line-height:1.5}
.play-status .suit-red{color:#ff6b6b;font-weight:bold}
.play-status .turn-name{color:#ffd54a}
.play-action{font-size:16px;line-height:1.5}
.play-wait{color:#ffe9a8;font-size:15px}
.combo-tag{color:#ffd54a;background:#0008;padding:2px 10px;border-radius:6px;font-size:14px;font-weight:bold}
.pass-tag{display:inline-block;color:#fff;background:linear-gradient(#f57c00,#e65100);padding:4px 16px;border-radius:10px;font-size:16px;font-weight:bold;letter-spacing:2px;box-shadow:0 2px 6px #0007}
/* 本轮出牌列表 */
.trick-list{display:flex;flex-direction:column;gap:9px;width:100%}
.trk-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center;padding:5px 6px;border-radius:8px}
.trk-row.latest{background:#ffd54a22;box-shadow:inset 0 0 0 1px #ffd54a88}
.trk-name{color:#ffd54a;font-weight:bold;font-size:17px;min-width:62px;text-align:right}
.trk-cards{display:inline-flex;gap:3px;flex-wrap:wrap;justify-content:center}
/* 牌片：白底，♠♣黑 / ♥♦红 / 大王红 / 小王黑；万能牌金边 */
.chip{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:46px;padding:0 8px;background:#fff;border-radius:6px;font-size:18px;font-weight:bold;box-shadow:0 2px 5px #0007;line-height:1}
.chip.red{color:#d32f2f}
.chip.black{color:#111}
.chip.wild{box-shadow:0 0 0 2px gold,0 2px 5px #0007}
/* 一局结束名次榜 */
.rank-list{display:flex;flex-direction:column;gap:7px;width:100%;margin-top:4px}
.rank-row{display:flex;align-items:center;gap:12px;justify-content:center;padding:5px 10px;border-radius:8px;background:#fff2}
.rank-row.rank-first{background:#ffd54a33;box-shadow:inset 0 0 0 1px #ffd54a88}
.rank-pos{color:#ffd54a;font-weight:bold;font-size:15px;min-width:72px;text-align:left}
.rank-name{color:#fff;font-size:16px}
.result-tag{display:inline-block;padding:2px 12px;border-radius:8px;font-weight:bold;margin:0 2px}
.result-tag.double{background:#d32f2f;color:#fff}
.result-tag.single{background:#1565c0;color:#fff}
/* 座位名次徽章（已出完手牌者） */
.rank-badge{display:inline-block;padding:3px 10px;border-radius:8px;font-size:12px;font-weight:bold}
.rank-badge.r1{background:#ffd54a;color:#333}
.rank-badge.r2{background:#bdbdbd;color:#222}
.rank-badge.r3{background:#cd7f32;color:#fff}
.rank-badge.r4{background:#555;color:#fff}
.think{display:none;position:absolute;top:42%;left:50%;transform:translateX(-50%);background:#000c;padding:12px 25px;border-radius:20px}
.mine{position:absolute;bottom:0;width:100%;height:215px;background:#0003;text-align:center}
.hand{display:flex;justify-content:center;gap:4px;margin:10px;flex-wrap:wrap}
.card{width:45px;height:70px;background:#fff;color:#111;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:18px;cursor:pointer}
/* 大小王：已通过 kingLabel() 加 emoji 头像（👑大王/🎩小王），无需额外 CSS */
.red{color:red}
button{padding:8px 16px;border:0;border-radius:18px;margin:4px;cursor:pointer;font-size:14px}
.btn-play{background:linear-gradient(#4caf50,#388e3c);color:#fff;font-size:19px;font-weight:bold;padding:14px 36px;border-radius:26px;box-shadow:0 4px 10px #0007;letter-spacing:3px}
.btn-pass{background:linear-gradient(#f57c00,#e65100);color:#fff;font-size:19px;font-weight:bold;padding:14px 36px;border-radius:26px;box-shadow:0 4px 10px #0007;letter-spacing:3px}
.btn-aux{background:linear-gradient(#546e7a,#37474f);color:#fff;font-size:19px;font-weight:bold;padding:14px 36px;border-radius:26px;box-shadow:0 4px 10px #0007;letter-spacing:3px}
.btn-sec{background:#0007;color:#fff}
.btn-next{background:linear-gradient(#42a5f5,#1976d2);color:#fff;font-weight:bold;font-size:15px}
.btn-observe{background:linear-gradient(#ffd54a,#ffb300);color:#333;font-weight:bold;font-size:18px;padding:14px 36px;border-radius:26px;box-shadow:0 4px 10px #0007;letter-spacing:3px;border:0;cursor:pointer;animation:obsPulse 1.2s ease-in-out infinite}
.btn-observe:active{transform:translateY(2px);box-shadow:0 2px 6px #0007}
@keyframes obsPulse{0%,100%{box-shadow:0 4px 10px #0007,0 0 0 0 #ffd54a99}50%{box-shadow:0 4px 14px #0007,0 0 0 8px #ffd54a00}}
/* 观察模式：中央暂停横幅 */
.play-observe{background:#ffd54a22;border:1px solid #ffd54a88;border-radius:10px;padding:14px;margin-top:4px;display:flex;flex-direction:column;gap:6px;align-items:center}
.play-observe .me{color:#ffd54a}
/* 观察模式：右侧三家手牌展示 */
.t-observe{background:#e3f2fd;border:1px solid #90caf9;border-radius:6px;padding:6px 8px;margin:6px 0;font-size:12px}
.t-obs-head{font-weight:bold;color:#1565c0;margin-bottom:4px;font-size:13px}
.t-obs-row{margin:3px 0;line-height:1.7;word-break:break-all}
.btn-play:active,.btn-pass:active,.btn-aux:active{transform:translateY(2px);box-shadow:0 2px 6px #0007}
.tip{position:absolute;right:10px;bottom:225px;background:#fff;color:#222;padding:0;border-radius:10px;width:320px;max-width:calc(100vw - 20px);min-height:80px;max-height:calc(100vh - 100px);overflow:hidden;font-size:13px;line-height:1.5;box-shadow:0 4px 14px #0006;display:flex;flex-direction:column;resize:both;z-index:20}
.tip-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#e3f2fd;border-bottom:1px solid #90caf9;border-radius:10px 10px 0 0;cursor:move;user-select:none;flex-shrink:0;touch-action:none}
.tip-header .th-title{font-weight:bold;color:#1565c0;font-size:13px}
.tip-header .th-toggle{background:#90caf9;color:#fff;border:0;border-radius:4px;padding:2px 8px;font-size:11px;cursor:pointer;white-space:nowrap;flex-shrink:0}
.tip-header .th-toggle:hover{background:#42a5f5}
.tip-body{padding:12px;overflow-y:auto;overflow-x:hidden;flex:1;min-height:0}
.tip.collapsed .tip-body{display:none}
.tip.collapsed{height:40px!important;width:280px!important;resize:none;padding:0}
.tip.collapsed .tip-header{border-radius:10px}
.tip.collapsed .th-toggle{background:#66bb6a}
.t-level{font-size:14px;color:#b8860b;margin-bottom:6px;font-weight:bold}
.t-section{color:#555;font-size:12px;margin:6px 0 2px;font-weight:bold}
.t-trick{font-size:12px;line-height:1.8;word-break:break-all;margin-bottom:2px}
.t-idx{color:#1565c0;background:#e3f2fd;padding:1px 6px;border-radius:6px;margin-right:4px;font-size:11px}
.h-name{color:#222;font-weight:bold}
.h-pass{color:#888;font-style:italic}
.t-arrow{color:#aaa}
.t-turn{margin-top:8px;color:#2e7d32;font-weight:bold;border-top:1px solid #eee;padding-top:6px}
.t-warn{color:#c62828;background:#ffebee;padding:6px 8px;border-radius:6px;margin-bottom:6px;font-size:12px}
.t-empty{color:#aaa;font-size:12px}
/* 选中牌型徽章（双击智能多选时显示当前牌型） */
.t-selected{font-size:13px;color:#333;background:#fff8e1;border:1px solid #ffe082;border-radius:6px;padding:6px 8px;margin-bottom:6px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.combo-badge{display:inline-block;padding:2px 10px;border-radius:10px;font-size:12px;font-weight:bold}
.combo-badge.ok{background:#2e7d32;color:#fff}
.combo-badge.bad{background:#c62828;color:#fff}
/* 右侧提示区：本局进贡/还贡信息块（整局持久展示） */
.t-tribute{background:#fff8e1;border:1px solid #ffe082;border-radius:6px;padding:6px 8px;margin:6px 0;font-size:12px}
.t-trib-head{font-weight:bold;color:#b8860b;margin-bottom:4px;font-size:13px}
.t-trib-line{margin:3px 0;display:flex;align-items:center;gap:4px;flex-wrap:wrap;line-height:1.5}
.t-trib-label{display:inline-block;background:#b8860b;color:#fff;padding:1px 6px;border-radius:4px;font-size:11px;font-weight:bold;min-width:32px;text-align:center}
.t-trib-me{color:#1565c0;font-weight:bold}
.t-trib-ally{color:#2e7d32;font-weight:bold}
.t-trib-enemy{color:#c62828;font-weight:bold}
/* 队伍动作 Toast：对家(绿)/对手(红) 彩色边框，与队伍音效联动 */
.toast.team-ally{background:#2e7d32;color:#fff;border-left:5px solid #66bb6a;box-shadow:0 4px 14px #2e7d3255}
.toast.team-enemy{background:#c62828;color:#fff;border-left:5px solid #ef5350;box-shadow:0 4px 14px #c6282855}
.toast.team-ally .tt-name,.toast.team-enemy .tt-name{font-size:14px;margin-bottom:4px}
.toast.team-ally .tt-cards,.toast.team-enemy .tt-cards{font-size:18px;letter-spacing:1px}
.toast.team-ally .tt-pass,.toast.team-enemy .tt-pass{background:#fff3;color:#fff;padding:1px 8px;border-radius:6px;font-weight:bold}
.setting-btn{position:absolute;top:10px;right:10px;background:#000a;color:#fff;border:0;border-radius:50%;width:36px;height:36px;font-size:18px;cursor:pointer;z-index:5}
/* 弹窗通用 */
.mask{position:fixed;inset:0;background:#000d;display:flex;align-items:center;justify-content:center;z-index:10}
.box{background:#0b5e34;border:2px solid #ffd54a;border-radius:16px;padding:28px 32px;width:380px;color:#fff;text-align:center;max-height:92vh;overflow:auto}
.box h2{margin:0 0 18px}
.box label{display:block;text-align:left;margin:12px 0 6px;font-size:14px;color:#ffe9a8}
.box input,.box select{width:100%;padding:10px;border-radius:8px;border:0;font-size:15px;color:#222;background:#fff;margin-top:2px}
.avatar-list{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:6px}
.avatar-opt{width:48px;height:48px;border-radius:50%;background:#fff;color:#222;display:flex;align-items:center;justify-content:center;font-size:24px;cursor:pointer;border:3px solid transparent}
.avatar-opt.sel{border-color:#ffd54a;box-shadow:0 0 10px #ffd54a}
.box button.go{margin-top:18px;padding:12px 30px;background:#ffd54a;color:#333;font-weight:bold;font-size:16px;border:0;border-radius:24px;cursor:pointer}
.box button.go:hover{background:#ffe066}
/* 模式切换 */
.mode-tabs{display:flex;gap:8px;justify-content:center;margin-bottom:10px}
.mode-tab{flex:1;padding:10px;border-radius:10px;background:#0005;color:#ccc;cursor:pointer;font-size:15px;border:2px solid transparent}
.mode-tab.sel{background:#ffd54a;color:#333;font-weight:bold;border-color:#fff}
.hide{display:none!important}
/* 弹窗提示 Toast */
.toast-wrap{position:fixed;top:16%;left:50%;transform:translateX(-50%);z-index:20;pointer-events:none;display:flex;flex-direction:column;align-items:center;gap:8px}
.toast{padding:14px 28px;border-radius:14px;font-size:16px;font-weight:bold;text-align:center;box-shadow:0 6px 24px #0005;animation:toastIn .3s ease both;white-space:nowrap}
.toast.out{animation:toastOut .3s ease both}
.toast.info{background:#1565c0ee;color:#fff}
.toast.success{background:#2e7d32ee;color:#fff}
.toast.error{background:#c62828ee;color:#fff}
.toast.win{background:linear-gradient(135deg,#ffd54a,#ffb300);color:#333;font-size:22px;padding:18px 36px;text-shadow:0 1px 2px #fff8}
.toast.lose{background:#546e7aee;color:#fff}
.toast.tribute{background:#6a1b9aee;color:#fff}
@keyframes toastIn{from{opacity:0;transform:translateY(-24px) scale(.8)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes toastOut{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-12px) scale(.9)}}
/* 联机大厅 */
.lobby-code{font-size:30px;font-weight:bold;letter-spacing:6px;color:#ffd54a;margin:6px 0 12px;background:#0005;border-radius:10px;padding:8px}
.lobby-seats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}
.lobby-seat{background:#0004;border-radius:8px;padding:8px;font-size:13px;display:flex;align-items:center;gap:8px}
.lobby-seat .ls-av{font-size:24px}
.lobby-seat.host{border:1px solid #ffd54a}
.lobby-hint{font-size:12px;color:#ffe9a8;margin:8px 0}
.row{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
/* 抓牌顺序显示 */
.draw-order{margin-top:6px;font-size:13px;color:#ffe9a8;background:#0004;padding:6px 12px;border-radius:8px}
.draw-role{color:#ffd54a;font-weight:bold}
/* 积分面板 */
.score-panel{margin-top:10px;background:#0004;border-radius:10px;padding:10px;width:100%}
.score-title{font-size:15px;color:#ffd54a;font-weight:bold;margin-bottom:8px;text-align:center}
.score-row{display:grid;grid-template-columns:40px 1fr 80px 80px;gap:8px;padding:4px 8px;font-size:13px;border-bottom:1px solid #fff2}
.score-row:last-child{border-bottom:none}
.score-label{color:#fff8;text-align:center}
.score-name{color:#fff;text-align:left}
.score-val{color:#fff;font-weight:bold;text-align:right}
.score-val.pos{color:#4caf50}
.score-val.neg{color:#ef5350}
.score-total{color:#ffd54a;font-weight:bold;text-align:right}
.score-diff{font-size:13px;color:#fff;margin:2px 0 8px;text-align:center;background:#0003;border-radius:8px;padding:6px}
.score-diff b{color:#ffd54a;font-size:15px}
.score-diff .passa{color:#ffd54a;font-weight:bold}
.score-sub{font-size:13px;color:#fff9;margin:8px 0 4px;border-top:1px dashed #fff3;padding-top:6px}
/* ============ 队伍颜色区分：me=蓝, ally=绿(对家), enemy=红(对手) ============ */
/* 中央出牌区、名次榜、think（深色背景 → 亮色） */
.trk-name.me,.rank-name.me{color:#42a5f5}
.trk-name.ally,.rank-name.ally{color:#66bb6a}
.trk-name.enemy,.rank-name.enemy{color:#ef5350}
.turn-name.me{color:#42a5f5}
.turn-name.ally{color:#66bb6a}
.turn-name.enemy{color:#ef5350}
.think .me{color:#42a5f5}
.think .ally{color:#66bb6a}
.think .enemy{color:#ef5350}
/* 右侧提示框（白底 → 深色） */
.h-name.me{color:#1565c0}
.h-name.ally{color:#2e7d32}
.h-name.enemy{color:#c62828}
.t-turn .me{color:#1565c0}
.t-turn .ally{color:#2e7d32}
.t-turn .enemy{color:#c62828}
/* 座位队伍标识：对家绿框/对手红框，active 金色优先 */
.player.ally .name{color:#66bb6a}
.player.enemy .name{color:#ef5350}
.player.ally .avatar{border-color:#66bb6a88}
.player.enemy .avatar{border-color:#ef535088}
.player.active.ally .name,.player.active.enemy .name{color:#ffd54a}
.player.active.ally .avatar,.player.active.enemy .avatar{border-color:#ffd54a;box-shadow:0 0 16px #ffd54a}
