:root{--ink:#f6efdc;--ink-soft:#c9d6c4;--muted:#9fb5a4;--gold:#f0c35a;--gold-deep:#b98524;--jade:#3f8f68;--red:#b5322a;--card-face:#fffaf0;--card-edge:#d8ccae;--wood:#5b3a1f;--glass:#0818118c;--glass-line:#f0c35a38;--felt-img:none;--card-back-img:none;--radius:18px;--ease:cubic-bezier(.2, .8, .2, 1);--display:"Songti SC", "STSong", "Noto Serif SC", "Source Han Serif SC", "Times New Roman", serif;--sans:"PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", system-ui, sans-serif}*{box-sizing:border-box}html,body{min-height:100%;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;background:#0d2219;margin:0;overflow-x:hidden}body{background-image:radial-gradient(ellipse at 50% -10%, #ffdc8c2e, transparent 55%), radial-gradient(ellipse at 50% 120%, #0000008c, transparent 60%), var(--felt-img);background-position:50%;background-size:auto,auto,cover;background-attachment:fixed;min-height:100vh}#app{justify-content:center;min-height:100vh;padding:clamp(10px,2vw,22px);display:flex}button{font:inherit;color:var(--ink);letter-spacing:.02em;cursor:pointer;touch-action:manipulation;min-height:44px;transition:transform .12s var(--ease), filter .2s, background .2s;background:linear-gradient(#2f5a46,#234536);border:1px solid #ffffff24;border-radius:999px;padding:10px 18px;font-weight:600;box-shadow:0 2px #00000059,inset 0 1px #ffffff14}button:hover:not(:disabled){filter:brightness(1.12)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.38;cursor:not-allowed}button:focus-visible,input:focus-visible{outline:3px solid var(--gold);outline-offset:2px}button.primary,button.gold{color:#3a2305;background:linear-gradient(#ffd779,#e0a53a);border-color:#fff0c899;box-shadow:0 3px #8d5f15,0 8px 18px #00000059}button.primary:hover:not(:disabled),button.gold:hover:not(:disabled){filter:brightness(1.06)saturate(1.05)}button.big{min-height:52px;padding:12px 28px;font-size:17px}button.wide{width:100%}button.small{min-height:32px;padding:4px 12px;font-size:13px}button.ghost{box-shadow:none;background:#00000040}.pill{justify-content:center;align-items:center;display:inline-flex}input{font:inherit;width:100%;color:var(--ink);background:#0000004d;border:1px solid #f0c35a4d;border-radius:12px;margin-top:8px;padding:12px 14px;font-size:16px}input::placeholder{color:#c9d6c473}input:focus{border-color:var(--gold);outline:none;box-shadow:0 0 0 3px #f0c35a40}.field{color:var(--muted);margin-top:16px;font-size:14px;display:block}.dot{vertical-align:middle;background:#d9a441;border-radius:50%;width:8px;height:8px;margin-right:6px;display:inline-block}.dot.ok{background:#6fd39a;box-shadow:0 0 8px #6fd39a}.hint{color:var(--muted);text-align:center;margin:10px 0;font-size:14px;line-height:1.6}.hint-big{font-family:var(--display);color:var(--gold);font-size:26px;display:block}.toast{color:#fff;text-align:center;max-width:min(92vw,420px);animation:rise .25s var(--ease);z-index:20;background:#961e19f2;border-radius:999px;padding:10px 18px;font-size:14px;position:fixed;bottom:22px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #0006}@keyframes rise{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.lobby{flex-direction:column;align-items:center;gap:clamp(16px,3vh,28px);width:min(900px,100%);margin:auto;padding-top:clamp(8px,4vh,40px);display:flex}.brand{text-align:center}.brand-title{justify-content:center;gap:clamp(8px,2vw,18px);display:flex}.brand-title span{font-family:var(--display);color:var(--gold);text-shadow:0 2px #7a4d0e,0 6px 22px #00000080;background:linear-gradient(#ffe9a8,#e0a53a 60%,#b77d1f);-webkit-text-fill-color:transparent;filter:drop-shadow(0 3px #6b4310);-webkit-background-clip:text;background-clip:text;font-size:clamp(56px,11vw,96px);font-weight:700;line-height:1}.brand-sub{color:var(--ink-soft);letter-spacing:.12em;margin:10px 0 0;font-size:clamp(12px,2vw,15px)}.entry{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;width:100%;display:grid}.card-panel{border:1px solid var(--glass-line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:linear-gradient(#0a2117db,#071610eb);border-radius:22px;padding:24px;position:relative;box-shadow:0 20px 50px #00000073,inset 0 1px #ffffff0f}.card-panel h2{font-family:var(--display);color:var(--gold);text-align:center;margin:0 0 4px;font-size:24px}.card-panel.room{width:min(520px,100%)}.conn{color:var(--muted);margin:0;font-size:13px}.ticket{background:#f0c35a0f;border:1px dashed #f0c35a8c;border-radius:14px;flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;margin-bottom:18px;padding:12px 16px;display:flex}.ticket span{color:var(--muted);letter-spacing:.1em;font-size:13px}.ticket b{color:var(--gold);letter-spacing:.05em;word-break:break-all;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:clamp(16px,3.4vw,20px)}.slots{gap:10px;margin:0;padding:0;list-style:none;display:grid}.slot{background:#00000038;border:1px solid #ffffff12;border-radius:14px;align-items:center;gap:12px;padding:10px 14px;display:flex}.slot.empty{color:var(--muted);border-style:dashed}.slot.off{opacity:.55}.slot-name{flex:1;font-weight:600}.avatar{width:40px;height:40px;font-family:var(--display);color:#fff;background:radial-gradient(circle at 30% 25%, hsl(var(--hue,150) 70% 66%), hsl(var(--hue,150) 55% 32%));border-radius:50%;flex:none;place-items:center;font-size:18px;font-weight:700;display:grid;box-shadow:0 0 0 2px #f0c35a80,0 4px 10px #00000059}.avatar.ghost{color:var(--muted);background:#ffffff0d;box-shadow:inset 0 0 0 1px #fff3}.seal{letter-spacing:.06em;white-space:nowrap;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:700;display:inline-block}.seal.land{color:#3a2305;background:linear-gradient(#ffd779,#d89a2e);box-shadow:0 0 0 1px #8d5f15}.seal.farm{color:#f5fff8;background:linear-gradient(#5fae86,#2f7151)}.seal.off{color:#ddd;background:#5a5a5a}.mini-seal{background:#ffffff1f;border-radius:999px;margin-left:4px;padding:1px 6px;font-size:11px;font-style:normal}.stage{flex-direction:column;gap:clamp(8px,1.6vh,14px);width:min(1040px,100%);min-height:calc(100vh - 2*clamp(10px,2vw,22px));display:flex}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.brand-mini{font-family:var(--display);color:var(--gold);letter-spacing:.2em;background:var(--glass);border:1px solid var(--glass-line);border-radius:999px;padding:5px 14px;font-size:18px}.meta-pills{flex-wrap:wrap;flex:1;justify-content:center;gap:8px;display:flex}.pill-ghost{background:var(--glass);border:1px solid var(--glass-line);color:var(--ink-soft);white-space:nowrap;border-radius:999px;align-items:center;padding:6px 12px;font-size:13px;display:inline-flex}.pill-ghost b{color:var(--gold);letter-spacing:.04em;margin-left:4px;font-family:ui-monospace,Menlo,monospace}.banner{background:var(--glass);border:1px solid var(--glass-line);letter-spacing:.04em;color:var(--ink-soft);transition:all .3s var(--ease);border-radius:999px;align-self:center;padding:8px 22px;font-weight:600}.banner.mine{color:#3a2305;background:linear-gradient(#ffd779,#d89a2e);border-color:#0000;animation:1.6s ease-in-out infinite pulse;box-shadow:0 0 0 4px #f0c35a40,0 6px 18px #00000059}@keyframes pulse{50%{box-shadow:0 0 0 9px #f0c35a0f,0 6px 18px #00000059}}.table-oval{background:radial-gradient(ellipse at 50% 35%, #ffffff0f, transparent 60%), var(--felt-img) center / cover, #1f5a3d;box-shadow:inset 0 0 0 1px #ffffff0d, inset 0 0 60px #0000008c, 0 0 0 clamp(8px, 1.4vw, 14px) var(--wood), 0 0 0 calc(clamp(8px, 1.4vw, 14px) + 3px) #2e1c0c, 0 26px 50px #0000008c;border-radius:999px/46%;flex:1;grid-template-rows:1fr auto;gap:10px;min-height:300px;padding:clamp(14px,2.4vw,26px);display:grid;position:relative}.table-oval:before{content:"";border-radius:inherit;pointer-events:none;border:1px dashed #f0c35a38;position:absolute;inset:clamp(10px,1.6vw,16px)}.seats-row{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.seat{background:var(--glass);border:1px solid var(--glass-line);width:clamp(150px,26%,230px);transition:transform .3s var(--ease), box-shadow .3s, opacity .3s;border-radius:16px;flex-direction:column;gap:8px;padding:12px;display:flex;position:relative}.seat.turn{box-shadow:0 0 0 2px var(--gold), 0 0 26px #f0c35a59;transform:translateY(-3px)}.seat-head{align-items:center;gap:10px;min-width:0;display:flex}.seat .who{flex-direction:column;align-items:flex-start;gap:4px;min-width:0;display:flex}.seat .who b{white-space:nowrap;text-overflow:ellipsis;max-width:100%;overflow:hidden}.seat .avatar{width:36px;height:36px;font-size:16px}.stat{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:6px;font-size:13px;display:flex}.stat b{color:var(--ink);font-size:15px}.fan{min-height:34px;padding-left:4px;display:flex}.card.back.mini{border-radius:4px;width:22px;height:32px;margin-left:-10px;box-shadow:0 2px 4px #00000073}.card.back.mini:first-child{margin-left:0}.bubble{color:#3a2a12;animation:pop .35s var(--ease);background:#f4ecd8;border-radius:12px 12px 12px 2px;align-self:flex-start;padding:4px 12px;font-size:13px;font-weight:700;box-shadow:0 4px 10px #0000004d}@keyframes pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.centre{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:170px;display:flex}.centre-empty{opacity:.85;flex-direction:column;align-items:center;gap:4px;display:flex}.pile{flex-direction:column;justify-content:center;align-items:center;gap:8px;min-height:110px;display:flex}.pile-cards{flex-wrap:wrap;justify-content:center;gap:0;max-width:min(520px,90vw);display:flex}.pile-cards .card{animation:deal .4s var(--ease) both;margin:0 -6px}.pile-cards .card:first-child{margin-left:0}.pile-cards .card:last-child{margin-right:0}.pile-cap{background:var(--glass);color:var(--ink-soft);border-radius:999px;padding:3px 12px;font-size:13px}.pile-cap b{color:var(--gold)}.pile-empty{color:#f6efdc80;font-size:14px}@keyframes deal{0%{opacity:0;transform:translateY(-14px)scale(.92)}to{opacity:1;transform:none}}.bottom{color:var(--muted);align-items:center;gap:8px;font-size:13px;display:flex}.bottom>span{letter-spacing:.1em}.card{background:var(--card-face);color:#1d2630;border:1px solid var(--card-edge);width:clamp(46px,6.4vw,66px);height:clamp(66px,9.4vw,96px);font-family:var(--display);-webkit-user-select:none;user-select:none;border-radius:9px;flex-direction:column;flex:none;justify-content:space-between;align-items:stretch;min-height:0;margin:0;padding:0;line-height:1;display:inline-flex;position:relative;box-shadow:0 3px #bfb292,0 8px 14px #00000059}.card.face{padding:5px 6px}.card.red{color:var(--red)}.card .corner{flex-direction:column;align-items:center;gap:1px;font-size:clamp(12px,1.6vw,16px);font-weight:700;display:flex}.card .corner i{font-size:.9em;font-style:normal}.card .corner.br{align-self:flex-end;transform:rotate(180deg)}.card .pip{opacity:.9;pointer-events:none;place-items:center;font-size:clamp(22px,3.4vw,34px);display:grid;position:absolute;inset:0}.card.joker{background:linear-gradient(160deg,#fff7e0,#f3dfa6);justify-content:center;align-items:center}.card.joker .jk{writing-mode:vertical-rl;letter-spacing:.2em;font-size:clamp(12px,1.8vw,16px);font-weight:700}.card.joker.big{color:var(--red)}.card.joker.small{color:#2b3a48}.card.back{background:var(--card-back-img) center / cover no-repeat, #7b1c17;border:2px solid #f0d28a;box-shadow:0 3px #4a0f0c,0 8px 14px #0006}.card.back.mini{width:22px;height:32px}.card.tiny{width:clamp(34px,4.6vw,46px);height:clamp(48px,6.6vw,64px)}.card.tiny .pip{font-size:clamp(16px,2.2vw,22px)}.card.tiny .corner{font-size:clamp(10px,1.3vw,13px)}button.card{cursor:pointer;font:inherit}button.card:hover:not(:disabled){filter:none}.self{border:1px solid var(--glass-line);background:linear-gradient(#081a13b3,#06120deb);border-radius:22px;flex-direction:column;gap:10px;padding:14px 16px 16px;transition:box-shadow .3s;display:flex;box-shadow:0 -10px 40px #0000004d}.self.turn{box-shadow:0 0 0 2px var(--gold), 0 0 34px #f0c35a40}.self-head{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.self-head .who{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.self-head .stat{margin-left:auto;font-size:14px}.hand{flex-wrap:wrap;justify-content:center;align-items:flex-end;min-height:clamp(84px,12vw,116px);padding:18px 6px 4px;display:flex}.hand .card{cursor:pointer;transition:transform .18s var(--ease), box-shadow .18s;margin-left:clamp(-30px,-2.4vw,-18px)}.hand .card:first-child{margin-left:0}.hand .card:hover:not(:disabled){transform:translateY(-8px)}.hand .card.sel{box-shadow:0 0 0 2px var(--gold), 0 0 16px #f0c35ab3, 0 8px 14px #00000059;transform:translateY(-22px)}.preview{text-align:center;color:var(--muted);min-height:1.4em;margin:0;font-size:14px}.preview.ok{color:#9be7b8}.preview.bad{color:#f1a596}.actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.scrim{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:10;animation:fade .3s var(--ease);background:#030c0899;place-items:center;padding:16px;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}to{opacity:1}}.result-card{text-align:center;border:1px solid var(--glass-line);width:min(380px,100%);animation:rise-card .45s var(--ease);background:linear-gradient(#17402e,#0d2619);border-radius:24px;padding:28px 24px 24px;box-shadow:0 30px 80px #0009}@keyframes rise-card{0%{opacity:0;transform:translateY(18px)scale(.96)}to{opacity:1;transform:none}}.result-card .ribbon{letter-spacing:.4em;color:var(--gold);background:#0000004d;border-radius:999px;padding:4px 16px;font-size:13px;display:inline-block}.result-card.lose .ribbon{color:#f1a596}.result-card h2{font-family:var(--display);color:var(--gold);text-shadow:0 3px #6b4310;margin:10px 0 4px;font-size:clamp(34px,7vw,46px)}.result-card.lose h2{color:#f1a596;text-shadow:0 3px #5a1a15}.result-card .sub{color:var(--muted);margin:0 0 14px;font-size:14px}.pts{gap:8px;margin:0 0 18px;padding:0;list-style:none;display:grid}.pts li{background:#00000040;border-radius:12px;justify-content:space-between;align-items:center;padding:9px 14px;display:flex}.pts b{font-variant-numeric:tabular-nums;font-size:18px}.pts .pos{color:#8ff0b6}.pts .neg{color:#f1a596}.play{align-items:stretch;gap:14px;width:min(1040px,100%);display:flex}.play>.stage{flex:1;min-width:0}button.pill.on{color:#3a2305;background:linear-gradient(#ffd779,#d89a2e);border-color:#0000}.chat{border:1px solid var(--glass-line);background:linear-gradient(#081a13eb,#06120df5);border-radius:18px;flex-direction:column;flex:none;align-self:flex-start;gap:10px;width:290px;max-height:calc(100vh - 44px);padding:14px;display:none;position:sticky;top:12px;box-shadow:0 16px 40px #0006}.play.chat-on .chat{display:flex}.chat-head{justify-content:space-between;align-items:center;display:flex}.chat-head b{font-family:var(--display);color:var(--gold);letter-spacing:.1em;font-size:18px}.chat-head .pill{min-height:30px;padding:4px 10px;font-size:12px}.msgs{overscroll-behavior:contain;flex-direction:column;flex:1;gap:10px;min-height:180px;margin:0;padding:4px 2px;list-style:none;display:flex;overflow-y:auto}.msg{flex-direction:column;align-items:flex-start;gap:3px;max-width:88%;display:flex}.msg.mine{align-self:flex-end;align-items:flex-end}.msg .from{color:hsl(var(--hue,150) 70% 76%);font-size:12px}.msg .say{word-break:break-word;animation:pop .3s var(--ease);background:#ffffff17;border-radius:14px 14px 14px 4px;padding:7px 12px;font-size:14px;line-height:1.45}.msg.mine .say{color:#3a2305;background:linear-gradient(#ffd779,#e0a53a);border-radius:14px 14px 4px}.msg-empty{color:var(--muted);text-align:center;margin:auto;font-size:13px}.quick{flex-wrap:wrap;gap:6px;display:flex}button.chip{min-height:0;box-shadow:none;padding:4px 10px;font-size:12px;font-weight:600}.composer{align-items:center;gap:8px;display:flex}.composer input{flex:1;min-width:0;margin-top:0;padding:9px 12px;font-size:15px}.composer button{flex:none;min-height:40px;padding:8px 14px}.chat.inline{align-self:center;width:min(520px,100%);max-height:360px;display:flex;position:static}.chat.inline .msgs{min-height:130px}.lobby-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:18px;width:100%;display:grid}.lobby-grid .card-panel.room{width:100%}.lobby-grid .chat.inline{width:100%;max-height:520px}@media (width<=760px){.lobby-grid,.entry{grid-template-columns:1fr}.meta-pills{justify-content:flex-start}.table-oval{border-radius:36px;grid-template-rows:auto auto;min-height:0;padding:12px}.seats-row{gap:8px}.seat{gap:6px;width:calc(50% - 4px);padding:8px}.seat .avatar{width:30px;height:30px;font-size:14px}.seat .bubble{font-size:12px}.centre{min-height:120px}.card{width:clamp(40px,11vw,52px);height:clamp(58px,16vw,76px)}.card .pip{font-size:20px}.card.tiny{width:34px;height:48px}.hand .card{margin-left:-22px}.self-head .stat{margin-left:0}.card-panel{padding:18px}.play{display:block}.play.chat-on .chat{z-index:15;width:auto;max-height:56vh;display:flex;position:fixed;bottom:8px;left:8px;right:8px;box-shadow:0 -10px 40px #0000008c}.play.chat-on .chat .msgs{min-height:120px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
