:root {
  --felt: #103f35;
  --felt-light: #176051;
  --gold: #e7ba62;
  --cream: #fff9ea;
  --ink: #17211e;
  --red: #c83737;
  --muted: #afc9c1;
  --shadow: 0 14px 34px rgba(0,0,0,.25);
  --body-edge:#082a24;--player-bg:rgba(5,34,28,.58);--control-bg:rgba(7,42,35,.88);--primary-top:#f2ca78;--primary-bottom:#dba847;
}
:root[data-theme="midnight"]{--felt:#12243d;--felt-light:#20517a;--gold:#82d4ff;--cream:#f1f8ff;--ink:#101d2d;--red:#ff6b78;--muted:#b2ccdf;--body-edge:#091425;--player-bg:rgba(10,24,45,.7);--control-bg:rgba(13,34,60,.92);--primary-top:#9de2ff;--primary-bottom:#55aeda;}
:root[data-theme="festival"]{--felt:#681b22;--felt-light:#a33535;--gold:#ffd071;--cream:#fff5df;--ink:#321315;--red:#ff5252;--muted:#e8b9ae;--body-edge:#350b10;--player-bg:rgba(58,8,14,.66);--control-bg:rgba(74,13,19,.92);--primary-top:#ffe08c;--primary-bottom:#e8aa3c;}
* { box-sizing: border-box; }
.hidden { display:none !important; }
body {
  margin: 0; min-height: 100vh; color: var(--cream);
  font-family: system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
  background: radial-gradient(circle at 50% 36%, var(--felt-light), var(--felt) 58%, var(--body-edge));transition:background .3s ease,color .3s ease;
}
button { font: inherit; cursor: pointer; }
button[data-icon],a[data-icon] { display:inline-flex;align-items:center;justify-content:center;gap:.42em; }
button[data-icon]::before,a[data-icon]::before { content:attr(data-icon);display:inline-block;flex:0 0 auto;font-size:1.05em;line-height:1;filter:drop-shadow(0 1px 1px rgba(0,0,0,.2)); }
.app { width: min(1180px, 100%); min-height: 100vh; margin: auto; padding: 22px 28px 28px; }
header { display: flex; align-items: center; justify-content: space-between; }
h1 { margin: -6px 0 0; font-family: Georgia, "STKaiti", serif; font-size: 44px; letter-spacing: .15em; color: var(--gold); }
.eyebrow { margin: 0; color: var(--muted); font-size: 12px; letter-spacing: .2em; }
.header-actions { display: flex; gap: 10px; }
.sound-toggle { min-width:42px;padding:9px 11px;font-size:17px;line-height:1; }
button { border: 0; border-radius: 9px; padding: 10px 18px; transition: .18s ease; }
button:hover:not(:disabled) { transform: translateY(-1px); filter: brightness(1.08); }
button:disabled { cursor: not-allowed; opacity: .42; }
.ghost { color: var(--cream); border: 1px solid rgba(255,255,255,.25); background: rgba(255,255,255,.08); }
.link-button { display: inline-block; padding: 10px 18px; border-radius: 9px; text-decoration: none; }
.scorebar { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 1px; margin: 18px auto 0; max-width: 720px; overflow: hidden; border: 1px solid rgba(231,186,98,.35); border-radius: 12px; background: rgba(0,0,0,.14); }
.scorebar div { padding: 9px 18px; text-align: center; }
.scorebar span { display: block; color: var(--muted); font-size: 11px; }
.scorebar strong { color: var(--gold); font-size: 14px; }
.scorebar .level-heart { display:inline;color:#d3323b;text-shadow:0 1px 3px rgba(211,50,59,.32); }
.scorebar .level strong { white-space:nowrap; }
.scorebar .level { border-inline: 1px solid rgba(231,186,98,.2); }
.table { position: relative; height: 650px; margin-top: 12px; border: 1px solid rgba(255,255,255,.08); border-radius: 48% / 20%; box-shadow: inset 0 0 70px rgba(0,0,0,.18); background: radial-gradient(ellipse, rgba(255,255,255,.045), transparent 65%); }
.player { position: absolute; min-width: 130px; padding: 10px 13px; border: 1px solid rgba(255,255,255,.12); border-radius: 12px; color: var(--muted); background: var(--player-bg); box-shadow: 0 7px 20px rgba(0,0,0,.16); }
.player.active { color:var(--cream);border-color:var(--gold);box-shadow:0 0 0 2px rgba(231,186,98,.18); }
.player.active:not(.finished):not(.disconnected) { animation:active-seat-pulse 1.25s ease-in-out infinite; }
.header-actions .your-turn,.user-presence.your-turn { border-color:var(--gold);animation:active-user-pulse 1s ease-in-out infinite; }
@keyframes active-seat-pulse { 0%,100%{box-shadow:0 0 0 2px rgba(231,186,98,.14),0 7px 20px rgba(0,0,0,.16)}50%{box-shadow:0 0 0 6px rgba(231,186,98,.3),0 0 22px rgba(231,186,98,.3)} }
@keyframes active-user-pulse { 0%,100%{box-shadow:0 0 0 1px rgba(231,186,98,.2)}50%{box-shadow:0 0 0 5px rgba(231,186,98,.32),0 0 18px rgba(231,186,98,.28)} }
.player.finished { opacity: .55; }
.player .avatar { position:relative;display:inline-grid;width:33px;height:33px;margin-right:8px;place-items:center;border-radius:50%;color:#17362f;background:var(--gold);font-weight:800; }
.turn-countdown,.play-countdown{display:inline-grid;place-items:center;border:2px solid #fff2c9;border-radius:50%;color:#fff;background:#28755f;box-shadow:0 2px 8px rgba(0,0,0,.4);font-variant-numeric:tabular-nums;font-weight:900;line-height:1}
.turn-countdown{position:absolute;z-index:8;top:-10px;right:-11px;width:25px;height:25px;font-size:11px}.play-countdown{width:27px;height:27px;margin-left:.1em;font-size:12px}.turn-countdown.urgent,.play-countdown.urgent{border-color:#ffd4ce;background:#d9433c;animation:count-badge-pulse .8s ease-in-out infinite}
.player strong { display: inline-block; vertical-align: middle; font-size: 14px; }
.player small { display: block; margin-left: 45px; margin-top: -8px; font-size: 11px; }
.player small.card-count-alert { margin-top:-4px;color:#ffd45f;font-size:20px;font-weight:900;line-height:1.1;letter-spacing:.02em;text-shadow:0 2px 8px rgba(255,190,40,.42); }
.player small.card-count-critical { color:#ff766b;font-size:25px;text-shadow:0 2px 10px rgba(255,70,55,.62);animation:card-count-pulse 1.15s ease-in-out infinite; }
.player.low-cards { border-color:rgba(255,210,80,.7); }
.player.critical-cards { border-color:rgba(255,100,85,.88);box-shadow:0 0 0 2px rgba(255,90,70,.13),0 7px 20px rgba(0,0,0,.2); }
.player.own-seat-hidden { opacity:0;pointer-events:none; }
button.hand-count::after { content:attr(data-count);display:inline-grid;min-width:24px;height:24px;margin-left:.15em;padding:0 5px;place-items:center;border:1px solid rgba(43,34,16,.25);border-radius:99px;color:#2b2210;background:rgba(255,255,255,.55);font-size:12px;font-weight:900;line-height:1; }
button.hand-count.low-count::after { color:#382600;background:#ffd45f;box-shadow:0 0 9px rgba(255,190,40,.45); }
button.hand-count.critical-count::after { color:#fff;background:#d9433c;border-color:#ff9187;animation:count-badge-pulse 1.15s ease-in-out infinite; }
@keyframes count-badge-pulse { 0%,100%{box-shadow:0 0 0 0 rgba(255,90,70,.25)}50%{box-shadow:0 0 0 5px rgba(255,90,70,.12)} }
@keyframes card-count-pulse { 0%,100%{transform:scale(1)} 50%{transform:scale(1.1)} }
@media (prefers-reduced-motion:reduce){.player small.card-count-critical,button.hand-count.critical-count::after,.player.active,.header-actions .your-turn,.user-presence.your-turn,.turn-countdown.urgent,.play-countdown.urgent{animation:none}}
.north { top: 14px; left: 50%; transform: translateX(-50%); }
.west { top: 34%; left: 18px; transform: translateY(-50%); }
.east { top: 34%; right: 18px; transform: translateY(-50%); }
.south { bottom: 72px; left: 50%; z-index: 5; transform: translateX(-50%); min-width: 170px; }
.center { position:absolute;top:40%;left:50%;width:min(580px,62%);min-height:120px;transform:translate(-50%,-50%);text-align:center; }
.table-hand-dock { position:absolute;z-index:4;right:24px;bottom:10px;left:24px;min-width:0;padding:7px 8px 3px;border:1px solid rgba(255,255,255,.1);border-radius:18px;background:rgba(0,28,23,.27);box-shadow:inset 0 8px 24px rgba(0,0,0,.1); }
.table-hand-dock .arrange-tip { margin:0 0 -17px; }
.table-hand-dock .hand { min-height:120px; }
.table-hand-dock .hand.stacked { height:220px;min-height:220px;align-items:flex-end;padding-top:5px; }
.table-hand-dock .hand.stacked .rank-group .card + .card { margin-top:-47px; }
.table-hand-dock .hand.stacked .rank-group:has(.card.selected) .card + .card { margin-top:-40px; }
.table-status { display:flex;width:100%;min-width:0;margin-top:2px;align-items:center;border:1px solid rgba(255,255,255,.2);border-radius:11px;color:#fff4d2;background:rgba(0,18,15,.7);box-shadow:0 4px 13px rgba(0,0,0,.3);overflow:hidden;text-shadow:0 2px 3px rgba(0,0,0,.8); }
.table-status.your-turn { border-color:rgba(231,186,98,.72);box-shadow:0 0 0 2px rgba(231,186,98,.12),0 5px 16px rgba(0,0,0,.32); }
.turn-badge { flex:0 0 auto;padding:8px 13px;border-right:1px solid rgba(0,0,0,.18);color:#17362f;background:var(--gold);font-size:12px;font-weight:800;white-space:nowrap; }
.last-play { display:flex;min-height:132px;align-items:center;justify-content:center;padding-top:9px; }
.seat-play-zone { position:absolute;z-index:6;display:flex;min-width:48px;min-height:70px;align-items:center;justify-content:center;pointer-events:none; }
.play-north { top:90px;left:50%;transform:translateX(-50%); }.play-south { bottom:250px;left:50%;transform:translateX(-50%); }.play-west { top:34%;left:200px;transform:translateY(-50%); }.play-east { top:34%;right:200px;transform:translateY(-50%); }
.seat-play-zone .card { width:44px;height:64px;flex-basis:44px;padding:4px;border-radius:6px;box-shadow:0 3px 8px rgba(0,0,0,.3); }
.seat-play-zone .card + .card { margin-left:-25px; }.seat-play-zone .more-cards{position:relative;z-index:10;margin-left:3px;padding:3px 5px;border-radius:99px;color:#2a2417;background:var(--gold);font-size:10px}.play-west{flex-direction:column}.play-east{flex-direction:column-reverse}.play-west .card{flex-basis:64px;transform:rotate(90deg)}.play-east .card{flex-basis:64px;transform:rotate(-90deg)}.play-west .card + .card{margin-top:-45px;margin-left:0}.play-east .card + .card{margin:0 0 -45px}.play-west .more-cards{margin:3px 0 0}.play-east .more-cards{margin:0 0 3px}.seat-play-zone .card .rank{font-size:15px}.seat-play-zone .card .suit{font-size:13px}.seat-play-zone .card .big-suit{right:5px;bottom:4px;font-size:20px}.seat-play-zone .card.joker{font-size:10px}.seat-play-zone.current-winning{filter:drop-shadow(0 0 7px rgba(255,210,80,.72))}.seat-play-zone.superseded{opacity:.55}
.trick-piles { display:flex;min-height:90px;align-items:center;justify-content:center;gap:5px;padding-top:16px; }
.trick-pile {
  --pile-rotation:0deg;
  position:relative;width:49px;height:67px;padding:0;overflow:visible;
  border:2px solid #eee7d5;border-radius:7px;
  background-color:#173f73;
  background-image:
    radial-gradient(circle,rgba(238,231,213,.18) 0 1px,transparent 1.2px),
    repeating-linear-gradient(45deg,transparent 0 3px,rgba(111,145,184,.42) 3px 4px,transparent 4px 7px),
    repeating-linear-gradient(-45deg,transparent 0 3px,rgba(232,225,207,.2) 3px 4px,transparent 4px 7px),
    linear-gradient(145deg,#24558d,#102f5c);
  background-size:6px 6px,auto,auto,auto;
  box-shadow:2px 2px 0 #e9e0cc,4px 4px 0 rgba(26,52,81,.82),0 9px 16px rgba(0,0,0,.34),inset 0 0 8px rgba(0,0,0,.24);
  transform:rotate(var(--pile-rotation));transition:transform .16s ease,filter .16s ease;
}
.trick-pile:nth-child(3n+1){--pile-rotation:-.8deg}.trick-pile:nth-child(3n+2){--pile-rotation:.65deg}
.trick-pile::before{content:"";position:absolute;z-index:1;inset:3px;border:1px solid rgba(238,231,213,.72);border-radius:4px;box-shadow:inset 0 0 0 1px rgba(12,37,72,.78),inset 0 0 0 3px rgba(238,231,213,.12);pointer-events:none}
.trick-pile::after{content:"掼";position:absolute;z-index:2;top:50%;left:50%;display:grid;width:22px;height:28px;place-items:center;border:1px solid rgba(220,185,105,.45);border-radius:50%;color:rgba(236,207,132,.65);background:rgba(10,40,76,.38);box-shadow:0 0 0 2px rgba(238,231,213,.1),inset 0 0 5px rgba(0,0,0,.3);font-family:Georgia,"Songti SC",serif;font-size:14px;font-weight:800;transform:translate(-50%,-50%);text-shadow:0 1px 1px rgba(0,0,0,.45);pointer-events:none}
.trick-pile span{position:absolute;z-index:3;right:-5px;bottom:-14px;left:-5px;color:#fff1c8;font-size:9px;font-weight:800;text-shadow:0 1px 3px #000;white-space:nowrap}
.trick-pile:hover{filter:brightness(1.08);transform:translateY(-3px) rotate(var(--pile-rotation))}.trick-pile:focus-visible{outline:2px solid #f3cb70;outline-offset:5px}
.collecting-card { position:fixed!important;z-index:125!important;margin:0!important;pointer-events:none;will-change:transform,opacity;backface-visibility:hidden; }
.message { display:block;flex:1 1 auto;min-width:0;min-height:0;margin:0;padding:7px 13px;overflow:hidden;color:#fff4d2;background:transparent;border:0;box-shadow:none;font-size:16px;font-weight:800;line-height:1.25;text-align:left;text-overflow:ellipsis;white-space:nowrap; }
.message .message-player { color:#7ee5cf; }.message .message-combo { color:#ffd15c;font-weight:900; }
.message.pass-info { color:#dce5e1; }.message.important-info { color:#ffb0a3; }.message.error-info { color:#ffb0a3; }
.card { position: relative; width: 61px; height: 88px; flex: 0 0 61px; padding: 6px; border: 1px solid #d9d3c8; border-radius: 8px; color: var(--ink); background: linear-gradient(145deg,#fff,#f1ecdf); box-shadow: 0 5px 11px rgba(0,0,0,.25); user-select: none; }
.card.red,.card.suit-heart { color:#d3323b; }
.card.suit-spade { color:#20252a; }
.card.suit-club { color:#16864a; }
.card.suit-diamond { color:#2875cf; }
.card .rank { display: block; text-align: left; font-family: Georgia, serif; font-size: 20px; font-weight: 700; line-height: 1; }
.card .suit { display: block; margin-top: 1px; text-align: left; font-size: 18px; line-height: 1; }
.card .big-suit { position: absolute; right: 8px; bottom: 6px; font-size: 30px; opacity: .88; }
.card.joker { display: grid; place-items: center; font-size: 15px; font-weight: 800; writing-mode: vertical-rl; letter-spacing: .12em; }
.card.level-card { border-color: #e3ad3f; box-shadow: 0 0 0 1px #e3ad3f, 0 5px 11px rgba(0,0,0,.25); }
.card i { position: absolute; top: 5px; right: 5px; display: grid; width: 18px; height: 18px; place-items: center; border-radius: 50%; color: #fff; background: #a9812e; font-size: 10px; font-style: normal; font-weight: 800; }
.card.wild i { background: var(--red); }
.last-play .card + .card { margin-left: -25px; }
.flying-card { position:fixed!important;z-index:120!important;margin:0!important;pointer-events:none;box-shadow:0 10px 25px rgba(0,0,0,.45)!important; }
.flying-pass { position:fixed;z-index:125;padding:7px 13px;border:1px solid rgba(255,255,255,.35);border-radius:99px;color:#fff;background:rgba(20,35,32,.92);box-shadow:0 7px 18px rgba(0,0,0,.35);font-size:16px;font-weight:900;pointer-events:none; }
.last-play.animating-play { opacity:.16;transition:opacity .14s; }
.player.play-source-flash,.hand.play-source-flash { animation:source-play-flash .9s ease-out; }.player.pass-source-flash,.hand.pass-source-flash{animation:source-pass-flash .8s ease-out}
.table.bomb-impact { animation:table-bomb-impact .72s ease-out; }.table.straight-flush-impact{animation:table-gold-impact .78s ease-out}
@keyframes source-play-flash{0%{box-shadow:0 0 0 0 rgba(255,211,92,.95)}45%{box-shadow:0 0 0 8px rgba(255,211,92,.38)}100%{box-shadow:0 0 0 14px rgba(255,211,92,0)}}
@keyframes source-pass-flash{0%{box-shadow:0 0 0 0 rgba(180,200,194,.7)}100%{box-shadow:0 0 0 12px rgba(180,200,194,0)}}
@keyframes table-bomb-impact{0%,100%{filter:none}24%{filter:brightness(1.38) saturate(1.3);box-shadow:inset 0 0 55px rgba(255,64,45,.5)}42%{filter:brightness(.88)}62%{filter:brightness(1.2);box-shadow:inset 0 0 38px rgba(255,70,45,.3)}}
@keyframes table-gold-impact{0%,100%{filter:none}40%{filter:brightness(1.3);box-shadow:inset 0 0 52px rgba(255,211,92,.5)}}
@media (prefers-reduced-motion:reduce){.flying-card,.flying-pass{display:none!important}.player.play-source-flash,.player.pass-source-flash,.hand.play-source-flash,.hand.pass-source-flash,.table.bomb-impact,.table.straight-flush-impact{animation:none!important}}
.play-history { position:relative;z-index:3;width:min(680px,calc(100% - 24px));margin:8px auto 14px;border:1px solid rgba(255,255,255,.13);border-radius:10px;color:var(--muted);background:rgba(4,30,25,.72); }
.play-history summary { padding:9px 13px;color:var(--gold);font-size:12px;font-weight:800;cursor:pointer; }
.history-list { display:grid;gap:5px;max-height:180px;padding:0 12px 11px;overflow-y:auto; }
.history-trick { display:grid;gap:4px; }.history-trick h4 { position:sticky;top:0;z-index:1;margin:3px 0 1px;padding:3px 7px;border-radius:5px;color:var(--gold);background:var(--control-bg);font-size:11px; }
.history-entry { display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;background:rgba(255,255,255,.055);font-size:12px; }
.history-entry strong { min-width:64px;color:var(--cream); }.history-entry .history-combo{color:var(--gold);font-weight:800}.history-entry .history-cards{color:#fff;word-break:break-word}.history-empty{padding:8px;text-align:center;font-size:12px}
.controls { position:relative;margin-top:10px; }
.pace-control { position:relative;z-index:4;display:flex;align-items:center;justify-content:center;gap:8px;margin:0 auto 8px;color:var(--muted);font-size:12px; }
.pace-control select { padding:5px 8px;border:1px solid rgba(255,255,255,.2);border-radius:7px;color:var(--cream);background:#17493f;font:inherit; }.pace-control small{font-size:10px}
.action-row { position: relative; z-index: 4; display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-bottom: 8px; }
.primary { min-width: 104px; color: #2b2210; background: linear-gradient(var(--primary-top),var(--primary-bottom)); font-weight: 800; box-shadow: 0 5px 13px rgba(0,0,0,.2); }
.secondary { min-width: 78px; color: var(--cream); border: 1px solid rgba(255,255,255,.2); background: var(--control-bg); }
.arrange-tip { position:relative; z-index:3; margin:-9px 0 -18px; text-align:center; color:var(--muted); font-size:11px; pointer-events:none; }
.hand { display: flex; justify-content: center; min-height: 116px; padding: 26px 31px 4px 4px; overflow-x: auto; overflow-y: hidden; }
.hand .card { margin-right: -31px; transition: transform .15s, margin .15s, left .15s, opacity .15s, filter .15s, border-color .15s, box-shadow .15s; cursor: grab; }
.hand.stacked { min-height:180px;align-items:flex-start;padding-top:30px;overflow-y:visible; }
.hand.stacked .rank-group { position:relative;display:flex;flex:0 0 56px;flex-direction:column;width:56px;padding-top:0; }
.hand.stacked .card { width:55px;height:79.35px;padding:5px; }
.hand.stacked .rank-group .card { flex:0 0 79.35px; }
.hand.stacked .straight-flush-group .card { flex:0 0 55px; }
.hand.stacked .card .rank { font-size:18px; }.hand.stacked .card .suit { font-size:16px; }.hand.stacked .card .big-suit { right:7px;bottom:5px;font-size:27px; }.hand.stacked .card.joker { font-size:14px; }
.hand.stacked .rank-group .card { margin-right:0; }
.hand.stacked .rank-group .card + .card { margin-top:-39px; }
.hand.stacked .rank-group:has(.card.selected) .card + .card { margin-top:-31px; }
.hand.stacked .rank-group .card:nth-child(1) { z-index:1; }
.hand.stacked .rank-group .card:nth-child(2) { z-index:2; }
.hand.stacked .rank-group .card:nth-child(3) { z-index:3; }
.hand.stacked .rank-group .card:nth-child(4) { z-index:4; }
.hand.stacked .rank-group .card:nth-child(5) { z-index:5; }
.hand.stacked .rank-group .card:nth-child(6) { z-index:6; }
.hand.stacked .rank-group .card:nth-child(7) { z-index:7; }
.hand.stacked .rank-group .card:nth-child(8),.hand.stacked .rank-group .card:nth-child(9),.hand.stacked .rank-group .card:nth-child(10) { z-index:8; }
.hand.stacked .straight-flush-group { position:relative;display:flex;flex:0 0 auto;align-items:flex-start;margin:0 12px;padding-top:0; }
.hand.stacked .straight-flush-group .card { margin-right:0; }
.hand.stacked .straight-flush-group .card + .card { margin-left:-21px; }
.hand .card:active { cursor: grabbing; }
.hand .card.dragging { z-index:8; opacity:.42; transform:translateY(-13px) scale(.96); }
.hand .card.drop-target { z-index:7; transform:translateY(-9px); border-color:#59d5b7; box-shadow:0 0 0 3px rgba(89,213,183,.25),0 8px 18px rgba(0,0,0,.3); }
.hand .card:hover { transform: translateY(-8px); }
.hand .card.selected { z-index:20;transform:translateY(-20px);border:2px solid #ffd45f;background:linear-gradient(145deg,#fffef2,#ffe9a8);box-shadow:0 0 0 3px rgba(255,212,95,.38),0 0 20px rgba(255,196,45,.58),0 10px 20px rgba(0,0,0,.42);filter:brightness(1.08) saturate(1.15); }
.hand .card.selected::after { content:"✓";position:absolute;z-index:2;top:-11px;left:-10px;display:grid;width:22px;height:22px;place-items:center;border:2px solid #fff7d7;border-radius:50%;color:#17362f;background:#ffd45f;box-shadow:0 2px 7px rgba(0,0,0,.38);font:900 14px/1 system-ui,sans-serif; }
.hand.stacked .card.selected { z-index:20;transform:translate(8px,-5px); }
dialog { width: min(520px, calc(100% - 32px)); padding: 28px 32px; border: 1px solid #d8bd82; border-radius: 16px; color: #26302d; background: #fffaf0; box-shadow: var(--shadow); }
dialog::backdrop { background: rgba(0,20,16,.7); backdrop-filter: blur(3px); }
dialog h2 { margin-top: 0; color: #1b5549; } dialog li { margin: 7px 0; }
.dialog-close { position: absolute; top: 9px; right: 10px; padding: 3px 10px; background: transparent; font-size: 24px; }
.settings-dialog { width:min(390px,calc(100% - 28px));text-align:center; }
.settings-actions { display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:18px 0; }.settings-actions .secondary{color:#28554a;background:#eee7da;border-color:#ccc2b1}.settings-actions .sound-setting{grid-column:1/-1}
.setting-row { display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 0;border-top:1px solid #ded6c8;color:#46514d;font-size:14px;font-weight:700; }
.setting-row select { min-width:120px;padding:7px 9px;border:1px solid #c9c0b1;border-radius:7px;color:#29443d;background:#fff;font:inherit; }
.settings-dialog > small { display:block;color:#756d61;font-size:11px; }
.note { padding: 10px 12px; border-radius: 8px; color: #59615f; background: #eee8da; font-size: 13px; }
.login-dialog { width: min(410px, calc(100% - 32px)); text-align: center; }
.login-dialog h2 { margin: 10px 0 4px; }
.login-dialog > p { margin-top: 0; color: #69736f; }
.login-mark { display: grid; width: 58px; height: 58px; margin: 0 auto; place-items: center; border-radius: 50%; color: #fff8e8; background: #195347; font-family: Georgia, "STKaiti", serif; font-size: 31px; box-shadow: 0 7px 18px rgba(25,83,71,.25); }
.login-dialog form { display: grid; gap: 7px; margin-top: 22px; text-align: left; }
.login-dialog label { color: #46514d; font-size: 13px; font-weight: 700; }
.login-dialog input { width: 100%; padding: 11px 12px; border: 1px solid #cfc8b8; border-radius: 8px; outline: none; background: #fff; font: inherit; }
.login-dialog input:focus { border-color: #25806d; box-shadow: 0 0 0 3px rgba(37,128,109,.13); }
.login-submit { width: 100%; margin-top: 8px; }
.logout-btn { display: none; width: 100%; color: #9b3434; background: transparent; }
.login-error { min-height: 18px; margin: 0 !important; color: #bd3737 !important; font-size: 12px; }
.local-note { margin: 15px 0 0 !important; font-size: 11px; }
.toast { position:fixed;z-index:130;left:50%;bottom:35px;max-width:min(560px,calc(100% - 28px));padding:11px 18px;border:1px solid rgba(255,255,255,.22);border-radius:9px;color:#17362f;background:var(--gold);box-shadow:var(--shadow);font-size:14px;font-weight:800;text-align:center;transform:translateX(-50%); }
.toast.error-info { color:#fff0ed;background:#9a302c;border-color:#ff8c81; }.toast.important-info { color:#fff4dc;background:#8a5621; }
.toast .message-player { font-weight:900; }.toast .message-combo { font-weight:900; }
.trick-dialog { width:min(620px,calc(100% - 24px)); }.trick-dialog h2{margin:0 30px 16px;color:#28554a}.trick-dialog-body{display:grid;gap:7px;max-height:65vh;overflow-y:auto}.trick-detail-entry{display:grid;grid-template-columns:minmax(70px,110px) minmax(55px,90px) 1fr;gap:8px;padding:8px 10px;border-radius:8px;background:#eee8dc;color:#34443f;font-size:13px}.trick-detail-entry strong{color:#24594d}.trick-detail-entry .history-combo{color:#966b19;font-weight:800}.trick-winner{margin:8px 0 0;padding:9px;border-radius:8px;color:#24594d;background:#dcebe5;text-align:center;font-weight:800}
.result { position: fixed; z-index: 20; inset: 0; display: grid; place-items: center; background: rgba(0,20,16,.75); backdrop-filter: blur(5px); }
.result.hidden { display: none; }
.result-card { width: min(390px, calc(100% - 36px)); padding: 36px; border: 1px solid var(--gold); border-radius: 20px; text-align: center; color: var(--ink); background: var(--cream); box-shadow: var(--shadow); }
.result-icon { font-size: 55px; } .result-card h2 { margin: 8px 0; color: #195347; } .result-card p { color: #65706c; }
@media (max-width: 700px) {
  .app { padding: 14px 12px; } h1 { font-size: 34px; }
  .scorebar { margin-top: 10px; } .scorebar div { padding: 7px 5px; }
  .table { height:570px;border-radius:34% / 12%; }
  .west { left:4px; }.east { right:4px; }.south { bottom:52px; }.player { min-width:102px;padding:7px; }
  .center { width:78%;top:40%; }.controls { margin-top:8px; }
  .table-hand-dock { right:5px;bottom:5px;left:5px;padding:5px 2px 1px;border-radius:13px; }
  .play-north{top:82px}.play-south{bottom:235px}.play-west{top:34%;left:116px}.play-east{top:34%;right:116px}.seat-play-zone .card{width:38px;height:56px;flex-basis:38px}.seat-play-zone .card + .card{margin-left:-23px}.play-west .card,.play-east .card{flex-basis:56px}.play-west .card + .card{margin-top:-41px;margin-left:0}.play-east .card + .card{margin:0 0 -41px}.seat-play-zone .card .rank{font-size:13px}.seat-play-zone .card .suit{font-size:12px}.seat-play-zone .card .big-suit{font-size:17px}.trick-piles{gap:2px}.trick-pile{width:41px;height:58px}.trick-detail-entry{grid-template-columns:70px 58px 1fr;font-size:11px;padding:7px}
  .table-hand-dock .hand.stacked { height:205px;min-height:205px; }
  .table-hand-dock .hand.stacked .rank-group .card + .card { margin-top:-45px; }
  .table-hand-dock .hand.stacked .rank-group:has(.card.selected) .card + .card { margin-top:-38px; }
  .table-status { border-radius:9px; }.turn-badge { max-width:42%;padding:7px 9px;overflow:hidden;font-size:10px;text-overflow:ellipsis; }.message { padding:6px 9px;font-size:13px;line-height:1.2; }.last-play{padding-top:7px; }
  .hand { width:100%;justify-content:flex-start;padding-left:16px;padding-right:42px;scroll-padding-left:16px;-webkit-overflow-scrolling:touch; }
  .card { width: 53px; height: 78px; flex-basis: 53px; } .hand .card { margin-right: -28px; }
  .hand.stacked { min-height:165px; }.hand.stacked .rank-group { width:49px;flex-basis:49px;padding-top:0; }.hand.stacked .card { width:48px;height:70.64px; }.hand.stacked .rank-group .card { flex-basis:70.64px; }.hand.stacked .straight-flush-group .card { flex-basis:48px; }.hand.stacked .rank-group .card + .card { margin-top:-35px; }.hand.stacked .rank-group:has(.card.selected) .card + .card { margin-top:-27px; }.hand.stacked .card .rank { font-size:17px; }.hand.stacked .card .suit { font-size:15px; }.hand.stacked .card .big-suit { font-size:24px; }
  .hand.stacked .straight-flush-group { margin:0 8px;padding-top:0; }.hand.stacked .straight-flush-group .card + .card { margin-left:-19px; }
  .controls .action-row { position:sticky;z-index:40;bottom:8px;width:max-content;max-width:calc(100% - 16px);margin:0 auto 12px;padding:7px;border:1px solid rgba(255,255,255,.16);border-radius:12px;background:rgba(6,38,32,.94);box-shadow:0 7px 22px rgba(0,0,0,.35);backdrop-filter:blur(6px); }
  .controls .action-row button { min-width:70px;padding:10px 13px; }
}
