:root{--font-ui: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", sans-serif;--font-ink: "Songti SC", "STSong", "Noto Serif SC", "Source Han Serif SC", serif;--gold: #d8b878;--gold-soft: #f0d9a8;--ivory: #f7f1e1;--ink: #e9dfc8;--muted: #90a79a;--jade-900: #0a1b15;--jade-800: #0f3126;--jade-700: #14503c}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:#07100d;color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;overflow-x:hidden}.app{min-height:100%;display:flex;flex-direction:column;background:radial-gradient(1200px 620px at 50% -8%,rgba(46,88,70,.35),transparent 65%),radial-gradient(900px 500px at 85% 110%,rgba(96,60,30,.18),transparent 60%),linear-gradient(180deg,#0c1512,#070d0b 55%,#050907)}.topbar{height:64px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:0 28px;border-bottom:1px solid rgba(216,184,120,.14);background:#060e0b8c;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:relative;z-index:10}.brand{display:flex;align-items:center;gap:12px}.brand-seal{width:34px;height:34px;display:grid;place-items:center;border-radius:7px;font-family:var(--font-ink);font-size:19px;color:#f8e9cd;background:linear-gradient(160deg,#b04534,#7a2319 62%,#611a12);box-shadow:inset 0 1px #ffdcbe73,0 4px 12px #00000073}.brand-copy h1{margin:0;font-family:var(--font-ink);font-size:18px;font-weight:600;letter-spacing:.24em;color:#f0e2c4}.brand-copy p{margin:3px 0 0;font-size:10px;letter-spacing:.18em;color:#7f938a}.topbar-meta{display:flex;align-items:center;gap:9px}.meta-chip{font-size:11.5px;letter-spacing:.08em;color:#c2d2c7;background:#0c1c1699;border:1px solid rgba(216,184,120,.16);padding:6px 11px;border-radius:999px;white-space:nowrap}.meta-chip b{color:var(--gold);font-weight:600;font-variant-numeric:tabular-nums}.meta-chip--muted{color:#7f938a}.meta-chip--me{display:none}.stage{flex:1 1 auto;display:flex;align-items:center;justify-content:center;padding:18px 26px 26px;min-height:0}.table{container-type:size;position:relative;width:min(1420px,100%,calc((100vh - 118px)*1.62));aspect-ratio:1.62 / 1;padding:14px;border-radius:28px;background:repeating-linear-gradient(92deg,#ffd6a009 0,#ffd6a009 2px,#0000000d 2px,#0000000d 7px),linear-gradient(150deg,#6e4a2c,#45291a 34%,#2b1a11 62%,#5c3a23);box-shadow:0 40px 90px #0009,0 12px 30px #00000073,inset 0 1px #ffd6a04d,inset 0 -1px #00000080}.table:before{content:"";position:absolute;top:8px;right:8px;bottom:8px;left:8px;border-radius:21px;border:1px solid rgba(232,203,148,.5);box-shadow:0 0 0 2px #00000047;pointer-events:none;z-index:2}.felt{--tw: clamp(28px, 4.9cqw, 64px);--rw: calc(var(--tw) * .62);position:relative;height:100%;width:100%;border-radius:18px;padding:2.1% 2.4% 1.4%;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr) auto auto auto;gap:.6%;overflow:hidden;background:radial-gradient(115% 100% at 50% 0%,rgba(255,255,255,.07),transparent 50%),radial-gradient(70% 55% at 50% 46%,rgba(24,108,82,.34),transparent 70%),linear-gradient(172deg,#185742,#114431 46%,#0a2f22);box-shadow:inset 0 0 110px #0009,inset 0 2px 6px #0006}.felt:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.022) 0 1px,transparent 1px 5px),radial-gradient(circle at 50% 50%,transparent 52%,rgba(0,0,0,.28) 100%);opacity:.9}.felt:after{content:"";position:absolute;left:50%;top:50%;width:min(70cqw,860px);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(216,184,120,.11);box-shadow:0 0 0 26px #d8b87808,0 0 0 1px #d8b8780d;pointer-events:none}.row{display:flex;justify-content:center;align-items:center;min-height:0;position:relative;z-index:1}.row--top{align-items:flex-start}.opp{display:flex;flex-direction:column;align-items:center;gap:5px;z-index:1}.opp-plate{display:flex;align-items:center;gap:7px;padding:3px 10px 3px 4px;border-radius:999px;background:#05140f94;border:1px solid rgba(216,184,120,.28);font-size:10.5px;letter-spacing:.08em;color:#d8e5da;box-shadow:0 4px 12px #00000047;white-space:nowrap;transition:box-shadow .3s ease,background .3s ease}.opp.is-active .opp-plate{background:#163e30cc;box-shadow:0 0 0 1px #f0d9a8bf,0 0 22px #f0d9a838;animation:seatPulse 2.4s ease-in-out infinite}@keyframes seatPulse{0%,to{box-shadow:0 0 0 1px #f0d9a8b3,0 0 16px #f0d9a829}50%{box-shadow:0 0 0 1px #f0d9a8f2,0 0 26px #f0d9a84d}}.opp-badge{width:19px;height:19px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-ink);font-size:10.5px;color:var(--gold-soft);background:#d8b87824;border:1px solid rgba(216,184,120,.45)}.opp-score{color:var(--gold);font-variant-numeric:tabular-nums;font-size:10.5px;letter-spacing:.02em}.opp-hand{display:flex;align-items:center}.opp-hand--top{flex-direction:row;gap:1px}.opp-hand--side{flex-direction:column;gap:0;padding-top:4px;border-radius:3px;overflow:hidden;filter:drop-shadow(0 8px 12px rgba(0,0,0,.32))}.opp-melds{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;max-width:100%}.opp--left .opp-melds,.opp--right .opp-melds{max-width:calc(var(--tw) * 3.6)}.opp--left .opp-plate,.opp--right .opp-plate{flex-direction:row;border-radius:999px;padding:3px 8px 3px 3px}.opp--left .opp-score,.opp--right .opp-score{font-size:10px}.tile{position:relative;flex:0 0 auto;border-radius:calc(var(--tw) * .11);background:linear-gradient(180deg,#fffef7,#f8f1df 52%,#ece1c8);box-shadow:0 2px #c8b795,0 5px 9px #00000057,inset 0 1px #ffffffe6;transition:transform .16s ease,box-shadow .16s ease,opacity .16s ease;-webkit-user-select:none;user-select:none}.tile-body{display:block;width:100%;height:100%;border-radius:inherit;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff8c}.tile-face{display:block;width:100%;height:100%}.tile.is-clickable{cursor:pointer}.tile--hand{width:var(--tw);height:calc(var(--tw) * 1.38)}.tile--hand.is-clickable:hover{transform:translateY(-7px);box-shadow:0 2px #c8b795,0 12px 18px #0000006b}.tile.is-selected{transform:translateY(-16px);z-index:3;box-shadow:0 2px #c8b795,0 0 0 2px #f0d9a8f2,0 14px 24px #00000073}.tile.is-dim{opacity:.72}.tile--river{width:var(--rw);height:calc(var(--rw) * 1.4);border-radius:3px;box-shadow:0 1px #bfae8c,0 2px 5px #00000047}.tile--river.is-latest{box-shadow:0 0 0 1.5px #f0d9a8e6,0 0 12px #f0d9a866}.tile--back-top{width:calc(var(--tw) * .66);height:calc(var(--tw) * .86);border-radius:3px}.tile--back-side{width:calc(var(--tw) * .6);height:calc(var(--tw) * .235);border-radius:2px;box-shadow:inset 0 1px #ffffffb3,inset 0 -1px #78644647}.tile-back-face{display:grid;place-items:center;width:100%;height:100%;background:linear-gradient(180deg,#f7f0de,#e9ddc3);box-shadow:inset 0 0 0 1px #96805c47}.tile-back-mark{width:38%;aspect-ratio:1;transform:rotate(45deg);border:1px solid rgba(24,82,62,.32);background:#18523e1a;border-radius:1px}.tile--back-side .tile-back-mark{width:18%;transform:rotate(0);border:none;border-left:1px solid rgba(24,82,62,.3);background:transparent;border-radius:0;height:40%;aspect-ratio:auto}.tile--meld{width:calc(var(--tw) * .64);height:calc(var(--tw) * .88);border-radius:calc(var(--tw) * .08)}.tile--meld-sm{width:calc(var(--tw) * .46);height:calc(var(--tw) * .64);border-radius:3px}.tile--meld-xs{width:calc(var(--tw) * .44);height:calc(var(--tw) * .6);border-radius:3px;box-shadow:0 1px #bfae8c,0 2px 5px #00000047}.tile--modal{width:clamp(28px,2.5vw,36px);height:clamp(38px,3.5vw,50px)}.tile--modal-meld{width:clamp(24px,2.1vw,31px);height:clamp(33px,2.9vw,43px)}.tile.is-winning{box-shadow:0 2px #c8b795,0 0 0 2px #f0d9a8f2,0 0 18px #f0d9a873}.meld{display:flex;align-items:flex-end;gap:1px}.dock-melds .meld+.meld{margin-left:7px}.river{--river-cols: 9;display:grid;grid-template-columns:repeat(var(--river-cols),max-content);gap:2px;align-content:flex-start;justify-content:center}.river--wide{--river-cols: 9}.river--side{--river-cols: 6}.river-slot{width:100%;display:flex;justify-content:center}.mid{display:grid;grid-template-columns:minmax(84px,.72fr) minmax(0,1fr) auto minmax(0,1fr) minmax(84px,.72fr);grid-template-rows:minmax(0,1fr);align-items:center;justify-items:center;gap:1.2%;min-height:0;position:relative;z-index:1}.hub-wrap{display:flex;flex-direction:column;align-items:center;gap:7px}.hub{width:min(18cqw,24.5cqh);aspect-ratio:1;filter:drop-shadow(0 18px 26px rgba(0,0,0,.45))}.hub-svg{width:100%;height:100%;display:block}.hub-meta{display:none;align-items:baseline;gap:5px;font-size:10px;letter-spacing:.16em;color:#e8e3d08c}.hub-meta b{color:var(--gold-soft);font-size:13px;letter-spacing:.02em;font-variant-numeric:tabular-nums}.score-panel{position:absolute;top:2.4%;left:2.4%;z-index:3;width:clamp(148px,13.6cqw,198px);padding:11px 13px 8px;border-radius:11px;background:linear-gradient(180deg,#071812c7,#05110da3);border:1px solid rgba(216,184,120,.26);-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);box-shadow:0 10px 26px #00000052}.score-panel__head{display:flex;align-items:center;justify-content:space-between;padding-bottom:7px;margin-bottom:3px;border-bottom:1px solid rgba(216,184,120,.14);font-size:9.5px;letter-spacing:.24em;color:#d8b878cc}.score-panel__rule{width:12px;height:1px;background:#d8b87880}.score-list{list-style:none;margin:0;padding:0}.score-row{display:grid;grid-template-columns:19px 1fr auto;align-items:center;gap:7px;padding:5px 0;font-size:11px;letter-spacing:.05em;color:#b9ccc0;transition:color .2s ease}.score-badge{width:19px;height:19px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-ink);font-size:10px;color:#e8d9b9bf;border:1px solid rgba(216,184,120,.3);background:#d8b8780f}.score-value{color:#e6d4a8;font-variant-numeric:tabular-nums;font-size:11px}.score-row.is-active{color:#f4e6c6}.score-row.is-active .score-badge{color:#22180c;background:linear-gradient(180deg,#ecd49f,#c6a263);border-color:#f0d9a8e6;box-shadow:0 0 12px #f0d9a84d}.score-row.is-me .score-name{color:#f0dfba}.status-line{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;min-height:38px;padding:0 4px;font-size:11px;letter-spacing:.1em;color:#e2ece5a8;position:relative;z-index:2}.status-copy{display:flex;align-items:center;gap:12px;min-width:0}.status-message{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-hint{color:var(--gold-soft);padding-left:12px;border-left:1px solid rgba(216,184,120,.28);white-space:nowrap}.dock{display:flex;align-items:flex-end;justify-content:center;gap:clamp(10px,2cqw,26px);min-width:0;padding:2px 0 0;position:relative;z-index:3}.hand{display:flex;align-items:flex-end;padding-top:18px}.hand .tile+.tile{margin-left:calc(var(--tw) * -.12)}.hand .hand-first{margin-left:0}.hand .hand-drawn{margin-left:calc(var(--tw) * .16)}.dock-melds{display:flex;align-items:flex-end;flex-wrap:wrap;gap:2px;padding-bottom:3px}.actionbar{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:0 0 auto;flex-wrap:nowrap;min-width:0}.btn{font-family:var(--font-ui);font-size:12.5px;letter-spacing:.12em;padding:10px 18px;border-radius:8px;border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:transform .16s ease,background .16s ease,box-shadow .16s ease,opacity .16s ease}.btn--sm{padding:7px 13px;font-size:11.5px}.btn--gold{background:linear-gradient(180deg,#ecd49f,#cba663 55%,#b58c4a);color:#241a0c;border-color:#f8e8be99;box-shadow:0 4px 12px #0000005c,inset 0 1px #ffffff80;font-weight:600}.btn--gold:hover{transform:translateY(-1px);filter:brightness(1.05)}.btn--ghost{background:#0716118c;border-color:#d8b87857;color:#e6d7b2}.btn--ghost:hover{background:#183e30b3;border-color:#d8b87899}.btn--hu{background:linear-gradient(180deg,#cf5c46,#a23425 60%,#8a281b);color:#fff3e4;border-color:#ffc8aa80;box-shadow:0 6px 18px #781a1073,inset 0 1px #ffdcc866;font-weight:600}.btn--hu:hover{transform:translateY(-1px);filter:brightness(1.06)}.btn--pass{background:transparent;border-color:#b4c8bc3d;color:#a9bdb1}.btn--pass:hover{border-color:#b4c8bc80;color:#dfe9e2}.btn:disabled{opacity:.36;cursor:not-allowed;transform:none;filter:none}.modal-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:grid;place-items:center;padding:20px;background:#030907b8;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);animation:fadeIn .22s ease}.modal{width:min(620px,92vw);max-height:90vh;overflow-y:auto;padding:28px 30px 24px;border-radius:18px;background:radial-gradient(120% 90% at 50% 0%,rgba(38,84,66,.28),transparent 60%),linear-gradient(180deg,#11241d,#0a1713);border:1px solid rgba(216,184,120,.4);box-shadow:0 34px 90px #000000a6,inset 0 1px #ffffff0f;color:#efe4cb;animation:riseIn .26s cubic-bezier(.2,.8,.3,1)}.modal h2{margin:0;font-family:var(--font-ink);font-size:24px;font-weight:600;letter-spacing:.12em;color:#f4e3bb}.modal--rules .rule-list{display:flex;flex-direction:column;gap:13px;margin:18px 0 22px}.rule-list>div{display:grid;grid-template-columns:26px 1fr;gap:10px;align-items:flex-start}.rule-index{font-size:10px;letter-spacing:.1em;color:#d8b878a6;padding-top:4px;font-variant-numeric:tabular-nums}.rule-list p{margin:0;font-size:12.5px;line-height:1.75;color:#c6d6cc}.result-kicker{margin:0 0 6px;font-size:10.5px;letter-spacing:.24em;color:#d8b878bf}.result-title{margin:0;font-family:var(--font-ink);font-size:clamp(30px,4.4vw,46px);font-weight:600;letter-spacing:.08em;color:#f7e7c0;line-height:1.15}.result-badges{display:flex;flex-wrap:wrap;gap:7px;margin:14px 0 4px}.fan-badge{font-size:11px;letter-spacing:.1em;padding:4px 10px;border-radius:999px;border:1px solid rgba(216,184,120,.38);background:#d8b87814;color:#e8d7b0}.fan-badge--points{border-color:#f0d9a899;color:#2a1d0d;background:linear-gradient(180deg,#ecd49f,#c9a462)}.result-hand{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:center;gap:4px;padding:16px 0 10px}.result-hand .meld{margin-right:10px}.result-sub{margin:6px 0 0;font-size:12px;line-height:1.7;color:#a9bfb2;letter-spacing:.04em}.result-scores{display:grid;grid-template-columns:1fr 1fr;gap:6px 18px;margin:18px 0 4px;padding:14px 0;border-top:1px solid rgba(216,184,120,.16);border-bottom:1px solid rgba(216,184,120,.16)}.result-score{display:grid;grid-template-columns:18px 1fr auto;gap:8px;align-items:center;font-size:11.5px;color:#b7cabf;letter-spacing:.05em}.result-score__badge{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-ink);font-size:9.5px;border:1px solid rgba(216,184,120,.3);color:#e8d9b9b3}.result-score__value{font-variant-numeric:tabular-nums;color:#e6d4a8}.result-score.is-winner{color:#f5e6c4}.result-score.is-winner .result-score__badge{color:#22180c;background:linear-gradient(180deg,#ecd49f,#c6a263);border-color:#f0d9a8e6}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes riseIn{0%{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}@media (max-width: 1080px){.topbar{padding:0 18px}.stage{padding:12px 14px 16px}.table{width:min(100%,calc((100vh - 110px)*1.62))}.felt{--tw: clamp(20px, 3.2cqw, 40px)}.meta-chip--muted{display:none}}@media (max-width: 880px){.topbar{height:56px;padding:0 12px}.brand{gap:9px}.brand-seal{width:28px;height:28px;font-size:15px}.brand-copy h1{font-size:14px;letter-spacing:.18em}.brand-copy p{display:none}.topbar-meta{gap:6px}.meta-chip{font-size:10px;padding:5px 8px}.stage{padding:8px 8px 12px;align-items:stretch}.table{width:100%;height:calc(100dvh - 84px);aspect-ratio:auto;padding:7px;border-radius:18px}.table:before{top:4px;right:4px;bottom:4px;left:4px;border-radius:15px}.felt{--tw: clamp(30px, 9.1cqw, 36px);--rw: calc(var(--tw) * .58);padding:10px 8px 8px;gap:4px;border-radius:13px;grid-template-rows:auto auto minmax(0,1fr) auto auto auto}.score-panel{display:none}.opp-plate{font-size:9px;gap:4px;padding:2px 6px 2px 3px}.opp-badge{width:15px;height:15px;font-size:8.5px}.opp-score{font-size:9px}.opp--left .opp-plate,.opp--right .opp-plate{padding:4px 5px}.mask{display:none}.mid{grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto auto;grid-template-areas:"seat-l hub seat-r" "river-l hub river-r";align-content:center;gap:5px 6px}.opp--left{grid-area:seat-l}.opp--right{grid-area:seat-r}.river-slot--left{grid-area:river-l}.river-slot--right{grid-area:river-r}.hub-wrap{grid-area:hub}.hub{width:clamp(148px,44cqw,184px)}.hub-meta{display:flex}.river{gap:1px}.river--wide{--river-cols: 8}.river--side{--river-cols: 4}.status-line{flex-wrap:wrap;font-size:9.5px;letter-spacing:.04em;gap:6px;min-height:34px;padding:0 2px}.status-copy{flex:0 1 auto;gap:0;max-width:45%;overflow:hidden}.status-line:has(.actionbar) .status-copy{display:none}.status-hint{display:none}.dock{flex-direction:column;align-items:center;gap:3px;padding-bottom:0}.hand{padding-top:16px}.hand .tile+.tile{margin-left:calc(var(--tw) * -.3)}.hand .hand-drawn{margin-left:calc(var(--tw) * .09)}.dock-melds{padding-bottom:0;justify-content:center}.actionbar{flex:1 1 auto;width:100%;gap:4px;flex-wrap:wrap}.btn{padding:7px 10px;font-size:10.5px;letter-spacing:.04em}.modal{padding:22px 20px 18px}.result-scores{grid-template-columns:1fr;gap:5px}}@media (max-width: 420px){.felt{--tw: clamp(30px, 9.1cqw, 36px)}.hand .tile+.tile{margin-left:calc(var(--tw) * -.3)}.status-line{font-size:9px}.meta-chip--me{display:inline-flex}.meta-chip--wall{display:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
