/* =========================================================
   全局
   ========================================================= */
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}

body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  overflow:hidden;user-select:none;color:#e8f5ee;
  background:radial-gradient(ellipse at 50% 0%, #4a2f1a 0%, #2a180b 45%, #140a04 100%);
  padding:24px;
}

.hidden{display:none !important}

#app{height:100%;display:flex;flex-direction:column}

/* =========================================================
   大厅
   ========================================================= */
.lobby{
  position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(ellipse at 50% 30%, #3a2416 0%, #140a04 100%);
  z-index:200;
}
.lobby-box{
  background:linear-gradient(160deg,#1e4d38,#0e2c1e);
  border:1px solid rgba(255,255,255,.15);
  border-radius:22px;
  padding:36px 40px;min-width:340px;max-width:92vw;
  box-shadow:
    0 30px 80px rgba(0,0,0,.8),
    inset 0 1px 0 rgba(255,255,255,.18),
    0 0 0 7px rgba(0,0,0,.35),
    0 0 0 8px rgba(232,184,75,.32);
  text-align:center;
}
.lobby-box h1{
  font-size:26px;margin-bottom:26px;letter-spacing:2px;
  background:linear-gradient(180deg,#fff0bd,#e0a93b 65%,#b07c18);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.lobby-form{display:flex;flex-direction:column;gap:12px}
.lobby-input{
  width:100%;padding:12px 16px;border-radius:10px;font-size:15px;
  background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.15);
  color:#e8f5ee;outline:none;transition:.15s;font-family:inherit;
}
.lobby-input:focus{
  border-color:#e8b84b;
  box-shadow:0 0 0 3px rgba(232,184,75,.2);
}
.lobby-input::placeholder{color:#6f8a7a}
.lobby-btn{padding:12px 16px;font-size:15px;border-radius:10px}
.lobby-divider{
  display:flex;align-items:center;gap:12px;color:#6f8a7a;font-size:12px;margin:4px 0;
}
.lobby-divider::before,.lobby-divider::after{
  content:'';flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.15),transparent);
}
.lobby-hint{min-height:20px;font-size:13px;color:#ffb38a;margin-top:10px}

/* =========================================================
   顶栏
   ========================================================= */
#topbar{
  display:flex;align-items:center;gap:14px;
  padding:10px 18px;margin-bottom:12px;flex:0 0 auto;
  border-radius:14px;
  background:linear-gradient(180deg, rgba(255,255,255,.10), rgba(255,255,255,.02)),
    linear-gradient(180deg, #2a4a3a, #173024);
  border:1px solid rgba(255,255,255,.12);
  box-shadow:0 8px 24px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.14);
}
.brand{
  font-weight:900;letter-spacing:3px;font-size:16px;white-space:nowrap;
  background:linear-gradient(180deg,#fff4c8,#e0a93b 60%,#b07c18);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
#info{flex:1;font-size:13px;color:#9dc6ae;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.room-tag{
  font-size:12px;padding:5px 12px;border-radius:8px;
  background:rgba(232,184,75,.18);color:#ffd97a;font-weight:700;
  border:1px solid rgba(232,184,75,.35);
  letter-spacing:1px;
}

/* =========================================================
   按钮
   ========================================================= */
.btn{
  border:none;border-radius:9px;padding:8px 16px;font-size:13px;cursor:pointer;
  color:#eaf5ee;font-weight:700;transition:.14s;font-family:inherit;
  background:linear-gradient(180deg, rgba(255,255,255,.22), rgba(255,255,255,.06));
  box-shadow:0 3px 0 rgba(0,0,0,.4), 0 5px 12px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.3);
  text-shadow:0 1px 2px rgba(0,0,0,.5);
}
.btn:hover{filter:brightness(1.18);transform:translateY(-1px)}
.btn:active{transform:translateY(2px);box-shadow:0 1px 0 rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.2)}
.btn.small{padding:6px 12px;font-size:12px}
.btn.primary{background:linear-gradient(180deg,#ffe088,#e0a93b 55%,#b8860b);color:#3a2506;text-shadow:0 1px 0 rgba(255,255,255,.45)}
.btn.hu{background:linear-gradient(180deg,#ff7b74,#c3252b 60%,#8a1418);color:#fff}
.btn.gang{background:linear-gradient(180deg,#a882ff,#6a3fc4 60%,#4a2596);color:#fff}
.btn.peng{background:linear-gradient(180deg,#4cb4f5,#1d6fbd 60%,#0e4c8a);color:#fff}
.btn.pass{background:linear-gradient(180deg,#96a39d,#5a6762 60%,#3d4844);color:#f0f5f2}

/* =========================================================
   牌桌
   ========================================================= */
.board{
  flex:1;display:grid;
  grid-template-columns:176px 1fr 176px;
  grid-template-rows:auto 1fr auto;
  grid-template-areas:"top top top" "left center right" "bottom bottom bottom";
  gap:9px;padding:20px;min-height:0;
  position:relative;border-radius:30px;
  background:radial-gradient(ellipse at 50% 40%, #3d8f66 0%, #2a7452 35%, #1b5a3d 68%, #0d3423 100%);
  box-shadow:
    inset 0 0 140px rgba(0,0,0,.62),
    inset 0 0 40px rgba(0,0,0,.45),
    inset 0 0 0 1px rgba(255,255,255,.09),
    0 0 0 10px #4e3119,
    0 0 0 12px #7a5028,
    0 0 0 14px #a8763c,
    0 0 0 16px #6b4520,
    0 0 0 24px #2e1a0a,
    0 0 0 26px #452a12,
    0 0 0 28px #1a0e05,
    0 34px 70px rgba(0,0,0,.85),
    0 12px 26px rgba(0,0,0,.7);
}
.board::before{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
  opacity:.14;mix-blend-mode:overlay;z-index:0;
}
.board::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(ellipse at 50% 38%, rgba(255,255,255,.10) 0%, rgba(255,255,255,0) 55%);
  z-index:0;
}

#seat2{grid-area:top}
#seat3{grid-area:left}
#seat1{grid-area:right}
#center{grid-area:center}
#seat0{grid-area:bottom}

/* =========================================================
   座位
   ========================================================= */
.seat{
  position:relative;z-index:1;
  border-radius:14px;padding:8px;
  display:flex;flex-direction:column;gap:7px;min-height:0;overflow:hidden;
  background:linear-gradient(180deg, rgba(0,0,0,.30), rgba(0,0,0,.14));
  border:1px solid rgba(255,255,255,.07);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), inset 0 -10px 24px rgba(0,0,0,.30);
}

.seat-head{
  display:flex;justify-content:space-between;align-items:center;
  font-size:12.5px;padding:5px 10px;border-radius:9px;flex:0 0 auto;
  background:linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,.03));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14);
  transition:.25s;letter-spacing:.5px;
}
.seat-head.active{
  background:linear-gradient(180deg,#ffe699,#e0a93b 60%,#b8860b);
  color:#3a2506;font-weight:900;
  box-shadow:0 0 20px rgba(232,184,75,.7), 0 0 40px rgba(232,184,75,.35), inset 0 1px 0 rgba(255,255,255,.6);
}
.seat-head.offline{opacity:.5}
.seat-head .pscore{font-weight:900;color:#ffd97a;font-variant-numeric:tabular-nums;font-size:13.5px}
.seat-head.active .pscore{color:#6b3f00}

.wind{
  display:inline-block;width:16px;height:16px;line-height:16px;
  text-align:center;font-size:11px;border-radius:50%;
  background:rgba(255,255,255,.18);color:#d8ecdf;font-weight:800;margin-right:5px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.25);
}
.seat-head.active .wind{background:rgba(107,63,0,.25);color:#3a2506}

.hand-back{display:flex;flex-wrap:wrap;gap:2px}
.melds{display:flex;flex-wrap:wrap;gap:6px}
.meld{
  display:flex;gap:1px;padding:2px;border-radius:5px;
  background:rgba(0,0,0,.25);box-shadow:inset 0 0 0 1px rgba(255,255,255,.07);
}
.discards{
  display:flex;flex-wrap:wrap;gap:2px;align-content:flex-start;overflow:hidden;
  padding:4px;border-radius:8px;background:rgba(0,0,0,.16);
  box-shadow:inset 0 2px 6px rgba(0,0,0,.4);
}

/* =========================================================
   中央
   ========================================================= */
#center{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;position:relative;z-index:1;
}

.wall-ring{
  position:relative;width:112px;height:112px;
  filter:drop-shadow(0 6px 14px rgba(0,0,0,.55));
}
.wall-ring svg{width:100%;height:100%;display:block}
.wall-ring .ring-track{fill:none;stroke:rgba(0,0,0,.45);stroke-width:9}
.wall-ring .ring-fill{
  fill:none;stroke:url(#wallGrad);stroke-width:9;stroke-linecap:round;
  transition:stroke-dashoffset .5s cubic-bezier(.3,1,.4,1);
}
.wall-center{
  position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:1px;
}
.wall-center .num{
  font-size:26px;font-weight:900;color:#ffe9b0;line-height:1;
  font-variant-numeric:tabular-nums;
  text-shadow:0 0 18px rgba(255,217,122,.65), 0 2px 4px rgba(0,0,0,.7);
}
.wall-center .lbl{font-size:9.5px;color:#9cc9b1;letter-spacing:2px}

.chicken-badge{
  padding:8px 20px;border-radius:24px;font-size:12.5px;color:#ffd97a;
  background:linear-gradient(180deg, rgba(232,184,75,.24), rgba(232,184,75,.06));
  border:1px solid rgba(232,184,75,.5);
  box-shadow:0 0 22px rgba(232,184,75,.28), inset 0 1px 0 rgba(255,255,255,.25);
  white-space:nowrap;font-weight:600;letter-spacing:.5px;
}
.chicken-badge.empty{opacity:.3;box-shadow:none;border-color:rgba(255,255,255,.12)}

.room-status{
  font-size:13px;color:#a8d5bd;font-weight:600;
  padding:6px 16px;border-radius:16px;
  background:rgba(0,0,0,.3);
}

/* =========================================================
   自己
   ========================================================= */
#seat0{background:transparent;border:none;padding:0;gap:6px;box-shadow:none}
.self-melds{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;min-height:0}
.self-hand{
  display:flex;justify-content:center;gap:3px;flex-wrap:wrap;
  padding:6px 0 3px;min-height:76px;
}
.self-info{
  display:flex;justify-content:center;gap:26px;
  font-size:12.5px;color:#9cc9b1;letter-spacing:.5px;
}
.self-info b{color:#ffd97a;font-size:15px;font-variant-numeric:tabular-nums}

/* =========================================================
   麻将牌
   ========================================================= */
.tile{
  --w:34px;--h:48px;
  position:relative;
  width:var(--w);height:var(--h);
  display:flex;align-items:center;justify-content:center;
  border-radius:calc(var(--w) * .14);
  flex:0 0 auto;
  background:linear-gradient(178deg, #ffffff 0%, #fdfbf4 30%, #f7f3e6 62%, #eee8d5 88%, #e3dcc4 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,1),
    inset 0 -2px 4px rgba(120,108,80,.18),
    inset 1px 0 1px rgba(255,255,255,.8),
    inset -1px 0 1px rgba(120,108,80,.14),
    0 1px 0 #eae3cf, 0 2px 0 #ddd5bd, 0 3px 0 #cec5a9,
    0 4px 0 #bfb596, 0 5px 0 #afa483, 0 6px 0 #9d9270,
    0 8px 10px rgba(0,0,0,.45), 0 12px 22px rgba(0,0,0,.30);
  transition:transform .13s ease, box-shadow .13s ease;
}
.tile::before{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(118deg, rgba(255,255,255,.95) 0%, rgba(255,255,255,.35) 18%, rgba(255,255,255,0) 42%, rgba(0,0,0,0) 68%, rgba(90,80,60,.08) 100%);
  mix-blend-mode:screen;z-index:2;
}
.tile::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='60'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='3'/%3E%3C/filter%3E%3Crect width='60' height='60' filter='url(%23g)'/%3E%3C/svg%3E");
  opacity:.045;mix-blend-mode:multiply;z-index:3;
}
.tile > svg{
  width:86%;height:86%;display:block;position:relative;z-index:1;
  filter:drop-shadow(0 1px 0 rgba(255,255,255,.6));
}

.tile.xs{--w:23px;--h:32px}
.tile.sm{--w:31px;--h:43px}
.tile.lg{--w:50px;--h:70px}

.tile.back{
  background:
    radial-gradient(circle at 32% 24%, rgba(255,255,255,.20), rgba(255,255,255,0) 52%),
    linear-gradient(158deg, #55a87f 0%, #338a60 30%, #217048 62%, #14512f 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.35),
    inset 0 -3px 6px rgba(0,0,0,.4),
    0 1px 0 #0e3d28, 0 2px 0 #0a3220, 0 3px 0 #072718,
    0 4px 0 #051e12, 0 6px 8px rgba(0,0,0,.5);
}
.tile.back::before{
  background:radial-gradient(circle at 32% 26%, rgba(255,255,255,.28), rgba(255,255,255,0) 55%),
    linear-gradient(118deg, rgba(255,255,255,.16) 0%, rgba(255,255,255,0) 42%);
  mix-blend-mode:normal;
}
.tile.back::after{
  content:'';position:absolute;inset:13%;border-radius:calc(var(--w) * .1);
  border:1px solid rgba(255,255,255,.18);
  background:radial-gradient(circle at 35% 30%, rgba(255,255,255,.12), rgba(255,255,255,0) 65%),
    repeating-linear-gradient(45deg, rgba(255,255,255,.03) 0 2px, transparent 2px 4px);
  box-shadow:inset 0 0 8px rgba(0,0,0,.35), 0 1px 0 rgba(255,255,255,.12);
}

.tile.clickable{cursor:pointer}
.tile.clickable:hover{
  transform:translateY(-13px);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,1),
    inset 0 -2px 4px rgba(120,108,80,.18),
    0 1px 0 #eae3cf, 0 2px 0 #ddd5bd, 0 3px 0 #cec5a9,
    0 4px 0 #bfb596, 0 5px 0 #afa483, 0 6px 0 #9d9270,
    0 18px 22px rgba(0,0,0,.55), 0 24px 40px rgba(0,0,0,.35);
}
.tile.drawn{
  margin-left:14px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,1),
    inset 0 -2px 4px rgba(120,108,80,.18),
    0 0 0 2px rgba(255,205,90,.95),
    0 0 22px rgba(255,205,90,.7),
    0 1px 0 #eae3cf, 0 2px 0 #ddd5bd, 0 3px 0 #cec5a9,
    0 4px 0 #bfb596, 0 5px 0 #afa483, 0 6px 0 #9d9270,
    0 8px 10px rgba(0,0,0,.45);
  animation:tileDrop .32s cubic-bezier(.2,1.3,.5,1);
}
@keyframes tileDrop{
  0%{transform:translateY(-46px) scale(.9);opacity:0}
  60%{transform:translateY(4px) scale(1.02);opacity:1}
  100%{transform:translateY(0) scale(1);opacity:1}
}
.tile.newest{
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,1),
    inset 0 -2px 4px rgba(120,108,80,.18),
    0 0 0 2px rgba(240,90,80,.9),
    0 0 16px rgba(240,90,80,.6),
    0 1px 0 #eae3cf, 0 2px 0 #ddd5bd, 0 3px 0 #cec5a9,
    0 4px 0 #bfb596, 0 6px 8px rgba(0,0,0,.45);
  animation:discardPulse .45s ease-out;
}
@keyframes discardPulse{
  0%{transform:scale(1.25);filter:brightness(1.5)}
  100%{transform:scale(1);filter:brightness(1)}
}

/* =========================================================
   操作按钮
   ========================================================= */
.actions{
  position:absolute;left:50%;bottom:150px;transform:translateX(-50%);
  display:flex;gap:14px;z-index:40;
}
.actions.hidden{display:none}
.actions .btn{
  padding:13px 30px;font-size:19px;border-radius:52px;letter-spacing:2px;
  box-shadow:0 6px 0 rgba(0,0,0,.45), 0 10px 24px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.35);
  animation:pop .22s cubic-bezier(.2,1.5,.5,1);
}
@keyframes pop{from{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}

/* =========================================================
   Toast
   ========================================================= */
.toast{
  position:fixed;top:66px;left:50%;transform:translateX(-50%) translateY(-18px);
  background:linear-gradient(180deg, rgba(24,48,36,.97), rgba(8,22,15,.97));
  padding:11px 28px;border-radius:26px;font-size:14px;
  opacity:0;pointer-events:none;transition:.3s cubic-bezier(.2,1.2,.4,1);
  z-index:60;white-space:nowrap;
  border:1px solid rgba(232,184,75,.42);
  box-shadow:0 12px 38px rgba(0,0,0,.65), 0 0 30px rgba(232,184,75,.18), inset 0 1px 0 rgba(255,255,255,.12);
  color:#ffe9b0;font-weight:700;letter-spacing:1px;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* =========================================================
   弹窗
   ========================================================= */
.modal{
  position:fixed;inset:0;background:rgba(0,0,0,.80);
  display:flex;align-items:center;justify-content:center;z-index:100;
  backdrop-filter:blur(6px);
}
.modal.hidden{display:none}
.modal-box{
  background:radial-gradient(ellipse at 50% 0%, rgba(90,170,125,.3), transparent 62%),
    linear-gradient(160deg,#1f5240,#0e2c1e);
  border:1px solid rgba(255,255,255,.16);
  border-radius:22px;
  padding:28px 34px;min-width:340px;max-width:92vw;max-height:88vh;overflow-y:auto;
  text-align:center;
  box-shadow:
    0 30px 80px rgba(0,0,0,.85),
    inset 0 1px 0 rgba(255,255,255,.18),
    0 0 0 7px rgba(0,0,0,.35),
    0 0 0 8px rgba(232,184,75,.32);
  animation:modalPop .3s cubic-bezier(.2,1.3,.5,1);
}
@keyframes modalPop{
  from{transform:scale(.86) translateY(16px);opacity:0}
  to{transform:scale(1) translateY(0);opacity:1}
}
.modal-box h2{
  font-size:26px;margin-bottom:18px;letter-spacing:2px;
  background:linear-gradient(180deg,#fff0bd,#e0a93b 65%,#b07c18);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
#modal-body{font-size:14px;line-height:1.95;color:#cfe8dc;margin-bottom:22px;text-align:left}
#modal-body .hl{color:#ffd97a;font-weight:800}
#modal-body .row{display:flex;justify-content:space-between;gap:24px;padding:2px 4px}
#modal-body .tiles{display:flex;gap:3px;justify-content:center;margin:10px 0;flex-wrap:wrap}
#modal-body .divider{height:1px;margin:13px 0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent)}
#modal-body .result-row{
  display:flex;align-items:center;gap:10px;
  padding:6px 8px;border-radius:8px;margin:4px 0;
  background:rgba(0,0,0,.20);
}
#modal-body .result-row.winner{
  background:linear-gradient(180deg, rgba(232,184,75,.22), rgba(232,184,75,.08));
  border:1px solid rgba(232,184,75,.45);
  box-shadow:0 0 16px rgba(232,184,75,.2);
}
#modal-body .result-name{min-width:72px;font-weight:800;font-size:13px;color:#a8d5bd;flex:0 0 auto}
#modal-body .result-row.winner .result-name{color:#ffd97a}
#modal-body .result-hand{display:flex;flex-wrap:wrap;gap:2px;flex:1}
#modal-body .meld-sep{width:6px;height:1px;flex:0 0 auto;align-self:center}
#modal-body .result-delta{
  font-weight:900;font-size:14px;min-width:48px;text-align:right;flex:0 0 auto;
  font-variant-numeric:tabular-nums;
}
#modal-btn{padding:12px 38px;font-size:15px;border-radius:52px;letter-spacing:1px}

/* =========================================================
   响应式
   ========================================================= */
@media(max-width:860px){
  body{padding:14px}
  .board{grid-template-columns:108px 1fr 108px;padding:13px;border-radius:22px;gap:7px}
  .tile.lg{--w:37px;--h:52px}
  .tile.sm{--w:26px;--h:36px}
  .tile.xs{--w:19px;--h:26px}
  .brand{font-size:13px;letter-spacing:1px}
  .self-info{gap:14px;font-size:11px}
  .actions .btn{padding:10px 22px;font-size:16px}
  .wall-ring{width:88px;height:88px}
  .wall-center .num{font-size:21px}
  .modal-box{padding:22px 20px;min-width:0}
  .lobby-box{padding:28px 24px;min-width:0;width:90vw}
}