:root{color-scheme:dark;--u: clamp(.62, calc(.16 + 1.04*min(100vh, 100vw * 1.5)/950px) , 1.58);--fan-r: 340;--fan-per-card: 4;--card-w: calc(46px * var(--u));--card-h: calc(65px * var(--u));--bg: #0a0c0f;--panel: #15191f;--panel-2: #1c2128;--panel-3: #232a33;--line: #2b323c;--text: #f0e9da;--muted: #9aa1ac;--faint: #6b7280;--brass: #d8b66a;--brass-hi: #f1d99a;--brass-lo: #8a6d2f;--brass-glow: rgba(216, 182, 106, .35);--felt-hi: #2a7a47;--felt: #185c34;--felt-lo: #0c3a20;--felt-edge: #06241280;--good: #5ec27a;--bad: #e5675c;--team-ns: #e5675c;--team-ew: #5b8de8;--suit-S: #34548c;--suit-H: #c1322b;--suit-D: #c1842b;--suit-C: #2f7d4f;--red-suit: #c1322b;--black-suit: #14181d;--card-face: linear-gradient(176deg, #fbf8f0 0%, #efe9dc 100%)}*{box-sizing:border-box}:root{--font-sans: "Hanken Grotesk", "Noto Sans SC", system-ui, sans-serif;--font-serif: "Fraunces", "Noto Serif SC", "Times New Roman", serif}html,body{margin:0;padding:0;color:var(--text);font-family:var(--font-sans);font-size:14.5px;line-height:1.45;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;height:100vh;overflow:hidden;background:radial-gradient(1100px 700px at 50% -8%,#1a2620 0%,transparent 60%),radial-gradient(900px 600px at 85% 110%,#1c1810 0%,transparent 55%),linear-gradient(180deg,var(--bg) 0%,#07090c 100%);background-attachment:fixed}::selection{background:var(--brass);color:#1a1407}#app{padding:.7rem 1rem;margin:0 auto;height:100vh}#app:has(.entry),#app:has(.lobby){overflow-y:auto;-webkit-overflow-scrolling:touch}button{background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:.45rem .85rem;cursor:pointer;font:inherit;font-weight:600;letter-spacing:.01em;transition:border-color .14s,transform 90ms,background .14s,box-shadow .14s}button:hover:not(:disabled){border-color:var(--brass-lo);background:linear-gradient(180deg,#2a323c,#20262e)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.3;cursor:not-allowed}.btn-brass{background:linear-gradient(180deg,var(--brass-hi) 0%,var(--brass) 55%,var(--brass-lo) 100%);color:#221802;border-color:#6b521f;box-shadow:0 1px #ffffff40 inset,0 4px 14px -6px var(--brass-glow)}input[type=text]{background:#0e1216;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:.6rem .8rem;font:inherit;width:100%}input[type=text]:focus{outline:none;border-color:var(--brass-lo)}.entry{max-width:560px;margin:4rem auto 0}.entry .title{font-family:var(--font-serif);font-weight:900;font-size:2.8rem;letter-spacing:.14em;background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:.3rem}.entry .sub{color:var(--muted);margin-top:0}.name-avatar-field{position:relative;display:flex;align-items:center;gap:.5rem}.name-avatar-field input[type=text]{flex:1;min-width:0}.avatar-chip{flex-shrink:0;width:2.4rem;height:2.4rem;border-radius:8px;border:1px solid var(--line);background:linear-gradient(180deg,var(--panel-2),var(--panel));font-size:1.4rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:border-color .14s,box-shadow .14s,transform .1s}.avatar-chip:hover{border-color:var(--brass-lo);box-shadow:0 0 0 3px var(--brass-glow)}.avatar-chip:active{transform:scale(.96)}.avatar-popover{position:absolute;top:calc(100% + .4rem);left:0;z-index:30;display:grid;grid-template-columns:repeat(8,2.1rem);gap:.3rem;padding:.5rem;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 28px -8px #0009;max-height:280px;overflow-y:auto}.avatar-option{width:2.1rem;height:2.1rem;border-radius:6px;border:1px solid transparent;background:transparent;font-size:1.25rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background .1s,border-color .1s}.avatar-option:hover{background:#ffffff0d;border-color:var(--brass-lo)}.avatar-option.selected{background:#c4a0502e;border-color:var(--brass)}.entry-form{display:flex;flex-direction:column;gap:.8rem;margin-top:1.5rem}.entry-form label{display:flex;flex-direction:column;gap:.3rem}.entry-form .label-text{color:var(--muted);font-size:.9rem}.entry-buttons{display:flex;gap:.6rem;justify-content:flex-end;margin-top:.4rem}.btn-watch{background:linear-gradient(180deg,#2a3a52,#1a2438);border:1px solid #3a4a66;color:#cfd9ec}.btn-watch:hover{filter:brightness(1.15);box-shadow:0 4px 14px -4px #78a0dc66}.entry-tabs{display:flex;gap:.4rem;margin:1.2rem 0 1rem;border-bottom:1px solid var(--line)}.entry-tab{flex:1;background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;padding:.55rem .6rem;color:var(--muted);font-weight:600;cursor:pointer;transition:color .14s,background .14s,border-color .14s}.entry-tab:hover{color:var(--text);background:#ffffff08}.entry-tab.active{color:var(--brass-hi);background:linear-gradient(180deg,#c4a0501a,#c4a05005);border-color:var(--line);border-bottom:1px solid var(--bg);margin-bottom:-1px}.active-rooms{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:.6rem}.active-rooms-head{display:flex;align-items:center;gap:.6rem}.active-rooms-title{flex:1;font-family:var(--font-serif);font-weight:700;font-size:1.05rem;color:var(--brass-hi);letter-spacing:.03em}.active-rooms-refresh{padding:.25rem .55rem;font-size:.85rem}.active-rooms-error{background:#dc50501f;border:1px solid rgba(220,80,80,.4);color:#f0c0c0;padding:.4rem .6rem;border-radius:6px;font-size:.85rem}.active-rooms-hint{color:var(--muted);font-size:.9rem;font-style:italic}.active-rooms-list{display:flex;flex-direction:column;gap:.35rem;max-height:320px;overflow-y:auto}.active-room-row{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:.6rem;padding:.5rem .75rem;background:var(--panel);border:1px solid var(--line);border-radius:10px}.active-room-row.kind-match{border-left:3px solid var(--brass-hi)}.active-room-code-badge{display:inline-flex;align-items:center;padding:.25rem .7rem;border-radius:999px;border:1px solid rgba(196,160,80,.45);background:#c4a0501f;font-family:ui-monospace,Roboto Mono,Menlo,monospace;font-weight:700;font-size:1rem;color:var(--brass-hi);letter-spacing:.05em;flex-shrink:0}.active-room-code-badge.kind-match{border-left:3px solid var(--brass-hi);padding-left:.55rem}.active-room-code-badge.kind-saved{border-color:#8caac866;background:#8caac81a;color:#b8cce0}.saved-match-row{border-color:#8caac833}.saved-source{background:#ffffff0a;padding:.1rem .4rem;border-radius:4px;font-family:ui-monospace,Roboto Mono,Menlo,monospace}.saved-matches{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:.6rem}.saved-matches-head{display:flex;align-items:center;gap:.6rem}.saved-matches-title{flex:1;font-family:var(--font-serif);font-weight:700;font-size:1.05rem;color:#b8cce0;letter-spacing:.03em}.saved-matches-head-partial{margin-top:1.4rem;padding-top:.8rem;border-top:1px dashed rgba(216,182,106,.18)}.saved-matches-hint{margin:0;font-size:.82rem;color:var(--muted);line-height:1.4}.saved-matches-refresh{padding:.25rem .55rem;font-size:.85rem}.active-room-save{padding:.3rem .7rem;font-size:.85rem;white-space:nowrap}.active-room-meta{display:flex;gap:.5rem;align-items:center;font-size:.8rem;color:var(--muted);flex-shrink:0;white-space:nowrap}.active-room-board{background:#ffffff0d;padding:.1rem .4rem;border-radius:4px}.active-room-mode{padding:.1rem .45rem;border-radius:4px;font-size:.78rem;font-weight:600;letter-spacing:.02em;white-space:nowrap}.active-room-mode.mode-4v4{background:#d8b66a24;border:1px solid rgba(216,182,106,.45);color:#e8c882f2}.active-room-mode.mode-tour{background:#6eaae624;border:1px solid rgba(110,170,230,.5);color:#aad2f5fa}.active-room-mode.mode-single{background:#b4c8dc14;border:1px solid rgba(180,200,220,.28);color:#c8d7ebd9}.tour-sb-totals{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin-bottom:.6rem}.tour-sb-total{display:flex;flex-direction:column;align-items:center;padding:.4rem .5rem;background:#ffffff08;border:1px solid var(--line);border-radius:8px}.tour-sb-total.tour-sb-ns{border-color:#dc505073;background:#dc505014}.tour-sb-total.tour-sb-ew{border-color:#5082dc73;background:#5082dc14}.tour-sb-team{font-size:.75rem;letter-spacing:.05em;color:var(--muted)}.tour-sb-mp{font-family:var(--font-serif);font-weight:700;font-size:1.05rem;color:var(--text);font-variant-numeric:tabular-nums}.tour-sb-mp-cell{font-family:var(--font-serif);font-variant-numeric:tabular-nums}.tour-sb-mp-cell.pending{color:var(--muted);font-style:italic}.tour-sb-mp-ns{color:#ff8282f2;font-weight:700}.tour-sb-mp-ew{color:#82aafff2;font-weight:700}.tour-sb-mp-sep{color:var(--muted);padding:0 .2rem}.tour-sb-detail-btn{padding:.15rem .45rem;font-size:.85rem;background:#ffffff0a;border:1px solid var(--line);border-radius:4px;cursor:pointer}.tour-sb-detail-btn:hover{background:#d8b66a2e;border-color:#d8b66a80}.tour-dist-sheet{width:min(720px,96vw);max-height:90vh;overflow-y:auto;padding:1.4rem 1.6rem}.tour-dist-table{width:100%;border-collapse:collapse;margin-top:1rem;font-size:.92rem}.tour-dist-table th{text-align:left;padding:.4rem .6rem;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);font-weight:700}.tour-dist-table td{padding:.45rem .6rem;border-bottom:1px solid rgba(255,255,255,.04)}.tour-dist-row-human{background:linear-gradient(90deg,#d8b66a2e,#d8b66a0d)}.tour-dist-row-human td{font-weight:700;color:var(--brass)}.tour-dist-table-name{font-family:var(--font-serif)}.tour-dist-tricks,.tour-dist-score,.tour-dist-rank{font-variant-numeric:tabular-nums}.tour-dist-score.positive{color:#96dc96f2}.tour-dist-score.negative{color:#dc9696f2}.tour-dist-footer{margin-top:1.2rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.tour-dist-summary{margin:0;color:var(--muted);font-size:.9rem;flex:1}.tour-dist-replay{text-align:center}.tour-dist-replay-btn{padding:.15rem .55rem;font-size:.95rem;background:#d8b66a1f;border:1px solid rgba(216,182,106,.45);border-radius:5px;color:var(--brass);cursor:pointer}.tour-dist-replay-btn:hover{background:linear-gradient(180deg,#6b5430,#3e3019);color:#f6dca0;border-color:var(--brass)}.tour-contract{font-family:var(--font-serif);display:inline-flex;align-items:center;gap:.45rem}.tour-contract.passed{color:var(--muted);font-style:italic}.tour-contract-body{display:inline-flex;align-items:center}.tour-contract .st-S{color:var(--suit-S);font-size:1.15em}.tour-contract .st-H{color:var(--suit-H);font-size:1.15em}.tour-contract .st-D{color:var(--suit-D);font-size:1.15em}.tour-contract .st-C{color:var(--suit-C);font-size:1.15em}.tour-contract .st-NT{font-size:.85em;color:var(--muted);margin-left:.05em}.tour-contract-decl{display:inline-flex;justify-content:center;align-items:center;min-width:1.3em;padding:0 .3em;border-radius:3px;font-family:var(--font-sans);font-weight:700;font-size:.85em;letter-spacing:.02em;color:#fff}.tour-contract-decl.ns{background:linear-gradient(180deg,#dc5050f2,#b43737f2);border:1px solid rgba(150,40,40,.85)}.tour-contract-decl.ew{background:linear-gradient(180deg,#5082dcf2,#3764b4f2);border:1px solid rgba(40,75,150,.85)}.tour-dist-tricks.positive{color:#96dc96f2;font-weight:700}.tour-dist-tricks.negative{color:#dc9696f2;font-weight:700}.active-room-board.waiting{background:#78c88c14;border:1px solid rgba(120,200,140,.5);color:#a0dcb4f2;padding:0 .35rem}.active-room-board.playing{background:#d99c461f;border:1px solid rgba(217,156,70,.55);color:#f0c882f2;padding:0 .35rem}.active-room-board.completed{background:#9682c81f;border:1px solid rgba(150,130,200,.5);color:#c3afe6f2;padding:0 .35rem}.active-room-seats{display:flex;gap:.25rem}.active-room-seat{width:1.75rem;height:1.75rem;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:1.05rem;line-height:1;background:#ffffff0a;border-radius:6px}.active-room-actions{display:flex;gap:.4rem;flex-shrink:0}.active-room-join,.active-room-close{padding:.3rem .7rem;font-size:.85rem;white-space:nowrap}.active-room-close{border-color:#dc505080;color:#f0c0c0}.active-room-close:hover{background:linear-gradient(180deg,#4a2530,#2a1820);filter:brightness(1.1)}.entry-error{margin:.6rem 0 .4rem;padding:.55rem .8rem;border-radius:8px;background:linear-gradient(180deg,#b43c3c2e,#b43c3c14);border:1px solid rgba(220,100,100,.35);color:#f7c8c8;font-size:.9rem}.entry-double-block{margin-top:.8rem;padding:.9rem 1rem 1rem;background:var(--panel);border:1px solid var(--line);border-radius:12px;display:flex;flex-direction:column;gap:.55rem}.entry-block-label{font-family:var(--font-serif);font-weight:700;font-size:1rem;color:var(--brass-hi)}.entry-block-hint{margin:0;color:var(--muted);font-size:.85rem}.entry-match-code{text-transform:uppercase;letter-spacing:.16em;font-family:monospace}.code-input-row{display:flex;align-items:stretch;gap:.4rem}.code-input-row input{flex:1}.btn-dice{flex:0 0 auto;width:2.4rem;padding:0;font-size:1.1rem;line-height:1;background:var(--panel-2);border:1px solid var(--line);color:var(--text);border-radius:8px;cursor:pointer;transition:border-color .12s,transform 90ms}.btn-dice:hover{border-color:var(--brass-lo)}.btn-dice:active{transform:rotate(-15deg)}.btn-match-create{background:linear-gradient(180deg,#5a3a8a,#3a2360);border:1px solid #4a3070;color:#e0d4f0;font-weight:700;align-self:flex-start}.btn-match-create:hover:not(:disabled){filter:brightness(1.15);box-shadow:0 4px 14px -4px #8c64c866}.entry-boards-row{display:flex;align-items:center;gap:.5rem;margin:.25rem 0}.entry-boards-label{font-size:.85rem;color:var(--text-dim);letter-spacing:.04em;min-width:3.5em}.entry-boards-btn{flex:0 0 auto;padding:.4rem .9rem;border-radius:6px;background:#1f1d1a;border:1px solid #3a352c;color:#aaa;font-size:.9rem;font-weight:600;cursor:pointer;transition:all .12s ease}.entry-boards-btn:hover{border-color:var(--brass-lo);color:var(--brass-hi)}.entry-boards-btn.active{background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));border-color:var(--brass-hi);color:#1a1612;box-shadow:0 2px 8px -2px var(--brass-glow)}.lobby-end-row{margin-top:.75rem;text-align:center}.btn-end-match{background:linear-gradient(180deg,#5a2222,#3a1414);border:1px solid #6a2828;color:#f0c8c8;font-size:.85rem;font-weight:600;padding:.4rem 1rem;letter-spacing:.04em}.btn-end-match:hover{background:linear-gradient(180deg,#7a2a2a,#4a1818);color:#ffd8d8}.lobby{max-width:880px;margin:1.5rem auto 2.5rem;padding:0 1rem;display:flex;flex-direction:column;gap:1rem}.lobby-top{display:flex;align-items:center;gap:.6rem}.lobby-title{flex:1;font-family:var(--font-serif);font-weight:800;font-size:1.4rem;letter-spacing:.04em;color:var(--brass-hi);text-align:center}.lobby-status{padding:.3rem .6rem;border-radius:999px;font-size:.8rem;font-weight:600;background:var(--panel);border:1px solid var(--line)}.lobby-status.status-open{color:#9cd29c;border-color:#78c87866}.lobby-status.status-connecting{color:var(--brass)}.lobby-status.status-closed{color:#e88;border-color:#dc787866}.lobby-hint{color:var(--muted);text-align:center;padding:2rem 0}.lobby-code-row{display:flex;align-items:center;gap:.6rem;justify-content:center;padding:.6rem;background:var(--panel);border:1px solid var(--line);border-radius:10px}.lobby-code-label{color:var(--muted);font-size:.85rem;text-transform:uppercase;letter-spacing:.14em}.lobby-code-box{font-family:monospace;font-size:1.3rem;font-weight:700;letter-spacing:.2em;padding:.3rem .7rem;background:linear-gradient(180deg,#1a2030,#10141c);border:1px solid var(--brass-lo);color:var(--brass-hi);border-radius:8px;cursor:pointer;-webkit-user-select:all;user-select:all}.lobby-code-box.copied{background:linear-gradient(180deg,#1a3a2a,#102018);border-color:#6fcf6f;color:#cfe9cf}.lobby-code-hint{color:var(--muted);font-size:.85rem}.lobby-tables{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.lobby-tables.lobby-tables-single{grid-template-columns:minmax(280px,480px);justify-content:center}@media (max-width: 720px){.lobby-tables,.lobby-tables.lobby-tables-single{grid-template-columns:1fr}.active-room-row{grid-template-columns:auto 1fr auto;grid-template-areas:"badge meta seats" "actions actions actions";row-gap:.5rem}.active-room-row>.active-room-code-badge{grid-area:badge}.active-room-row>.active-room-meta{grid-area:meta}.active-room-row>.active-room-seats{grid-area:seats}.active-room-row>.active-room-actions{grid-area:actions;justify-self:end}}.lobby-waiting{margin-top:1rem;padding:.7rem 1rem;background:linear-gradient(180deg,#08100b73,#040a078c);border:1px solid rgba(216,182,106,.16);border-radius:12px;display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.lobby-waiting-label{font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;color:var(--brass);font-weight:700;white-space:nowrap}.lobby-waiting-list{display:flex;gap:.5rem;flex-wrap:wrap;flex:1}.lobby-waiting-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem .3rem .45rem;background:linear-gradient(180deg,#19201ad9,#0f1612e6);border:1px solid rgba(216,182,106,.22);border-radius:999px;font-size:.88rem;color:var(--text)}.lobby-waiting-chip.you{border-color:var(--brass);box-shadow:0 0 0 1px var(--brass-glow)}.lobby-waiting-emoji{font-size:1.05rem;line-height:1}.lobby-waiting-name{font-family:"Noto Serif SC",Fraunces,serif;font-weight:600}.lobby-table{position:relative;padding:1rem;border-radius:14px;background:radial-gradient(120% 90% at 50% 8%,var(--felt-hi) 0%,var(--felt) 38%,var(--felt-lo) 86%,var(--felt-edge) 100%);box-shadow:inset 0 0 0 1px #ffffff0a,inset 0 2px 28px #0006,inset 0 0 80px #0000004d,0 8px 24px -10px #0000008c;border:4px solid transparent;background-clip:padding-box}.lobby-table:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:18px;pointer-events:none;background:linear-gradient(140deg,#6b521f,#e3c478 18%,#8a6d2f,#f1d99a 62%,#5a4318 82%,#c9a458);z-index:-1}.lobby-seats{display:grid;grid-template-columns:minmax(140px,1fr) minmax(120px,1fr) minmax(140px,1fr);grid-template-rows:auto auto auto;grid-template-areas:".  seatN  ." "seatW  centre  seatE" ".  seatS  .";gap:.55rem;align-items:stretch}.lobby-seat-N{grid-area:seatN}.lobby-seat-W{grid-area:seatW}.lobby-seat-E{grid-area:seatE}.lobby-seat-S{grid-area:seatS}.lobby-table-centre{grid-area:centre;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:.6rem .4rem;color:var(--brass-hi)}.lobby-table-num{font-family:var(--font-serif);font-weight:800;font-size:1.3rem;letter-spacing:.04em;color:var(--brass-hi)}.lobby-table-sub{margin-top:.15rem;font-size:.7rem;letter-spacing:.22em;color:#e5c77a8c}.lobby-table-progress{margin-top:.5rem;padding:.2rem .55rem;border-radius:999px;background:linear-gradient(180deg,#281e0eb3,#140e06d9);border:1px solid rgba(216,182,106,.5);font-family:var(--font-sans);font-size:.82rem;font-weight:600;color:var(--brass-hi);display:inline-flex;align-items:baseline;gap:.18rem}.lobby-table-progress-label{font-size:.7rem;letter-spacing:.05em;color:#e5c77ab3;margin-right:.18rem}.lobby-table-progress b{font-family:var(--font-serif);font-weight:800;font-size:1.05rem}.lobby-table-progress-of{color:#e5c77a8c;font-weight:500}.btn-lobby-enter{margin-top:.8rem;width:100%;padding:.55rem .9rem;font-size:.95rem;font-weight:700;letter-spacing:.04em}.lobby-table-note{margin-top:.8rem;text-align:center;font-size:.82rem;color:var(--muted);letter-spacing:.04em}.lobby-table-legend{margin-top:.55rem;display:flex;flex-direction:column;gap:.15rem;font-size:.72rem;text-align:center}.lobby-legend-row{display:inline-block;padding:.1rem .45rem;border-radius:999px;background:#08120c8c}.lobby-legend-row b{font-family:var(--font-serif);font-weight:700;margin-right:.25rem}.lobby-legend-row.team-a{color:#f4cccc;box-shadow:inset 0 0 0 1px #e5675c59}.lobby-legend-row.team-b{color:#cfdaf0;box-shadow:inset 0 0 0 1px #5b8de859}.lobby-seat{display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:.55rem .6rem;border-radius:10px;background:#08120c8c;border:1px solid rgba(0,0,0,.5);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);min-height:70px;text-align:center}.lobby-seat.team-a{box-shadow:inset 0 0 0 1px #e5675c73}.lobby-seat.team-b{box-shadow:inset 0 0 0 1px #5b8de873}.lobby-seat.seat-draggable{cursor:grab}.lobby-seat.seat-draggable:active{cursor:grabbing}.lobby-seat.dnd-dragging{opacity:.45}.lobby-seat.dnd-legal{outline:2px dashed rgba(240,198,104,.85);outline-offset:-2px;background:#f0c6681a}.lobby-seat.dnd-illegal{opacity:.35;filter:saturate(.4)}.lobby-seat-letter{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;font-weight:700;font-family:var(--font-serif);background:var(--panel-2);color:var(--text)}.lobby-seat-letter.team-a{background:#c4464647;color:#f4cccc}.lobby-seat-letter.team-b{background:#466ec847;color:#cfdaf0}.lobby-seat-name{font-weight:600;word-break:break-word}.lobby-seat-name.you{color:var(--brass-hi);font-style:italic}.lobby-seat-hint{color:var(--muted);font-size:.85rem}.lobby-seat-ctrls{display:flex;gap:.3rem;flex-wrap:wrap}.btn-lobby-mini{font-size:.75rem;padding:.3rem .55rem}.btn-lobby-zero{background:linear-gradient(180deg,#4a3a72,#2e2549);border-color:#6b5ba0;color:#e8e0ff}.btn-lobby-zero:hover{background:linear-gradient(180deg,#5b4a8a,#3a2f5e)}.lobby-start-row{display:flex;align-items:center;gap:.8rem;justify-content:center;padding-top:.5rem}.lobby-fill-row{display:flex;align-items:center;gap:.6rem;justify-content:center;padding-top:.8rem;flex-wrap:wrap}.lobby-fill-label{font-size:.85rem;color:var(--muted);letter-spacing:.02em}.btn-fill-ben,.btn-fill-basic{padding:.42rem .95rem;font-size:.92rem;font-weight:700;letter-spacing:.02em;border-radius:8px;font-family:var(--font-sans)}.btn-fill-basic{background:linear-gradient(180deg,#506e9652,#283c5a6b);border:1px solid #4a5d77;color:#d4e0ed}.btn-fill-basic:hover{background:linear-gradient(180deg,#5b7da5,#355472);color:#fff;border-color:#2a4156}.lobby-ready{font-family:var(--font-serif);font-weight:700;color:var(--muted)}.lobby-ready.ready{color:#9cd29c}.btn-lobby-start{font-size:1.05rem;padding:.7rem 1.4rem}.lobby-team-note{margin:0;text-align:center;color:var(--muted);font-size:.85rem}.lobby-table-tour{border-color:#d8b66a59}.lobby-seat.team-mp .lobby-seat-letter,.lobby-seat-letter.team-mp{background:linear-gradient(180deg,#d8b66a,#a07e30);color:#1a1208;border-color:#c19952}.lobby-seat.team-opp .lobby-seat-letter,.lobby-seat-letter.team-opp{background:linear-gradient(180deg,#5a6470,#393f48);color:#d6dde7;border-color:#353a42}.tour-bot-strip{margin-top:1rem;padding:.8rem 1rem;background:linear-gradient(180deg,#140e0899,#0a0704b3);border:1px solid rgba(216,182,106,.2);border-radius:12px}.tour-bot-strip-label{display:block;font-size:.85rem;letter-spacing:.1em;text-transform:uppercase;color:var(--brass);margin-bottom:.6rem;font-weight:700}.tour-bot-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.5rem}@media (max-width: 600px){.tour-bot-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.tour-bot-chip{display:flex;flex-direction:column;align-items:center;padding:.4rem .6rem;background:#ffffff0a;border:1px solid rgba(216,182,106,.18);border-radius:8px;gap:.2rem}.tour-bot-chip.done{border-color:#96d29680;background:#3c783c2e}.tour-bot-chip-num{font-size:.85rem;font-weight:700;color:var(--text);font-family:var(--font-serif)}.tour-bot-chip-hint{font-size:.72rem;color:var(--muted)}.tour-bot-chip-progress{font-size:.72rem;color:#c8d4e2;font-variant-numeric:tabular-nums}.tour-mp-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .7rem;background:linear-gradient(180deg,#d8b66a2e,#a07e3024);border:1px solid rgba(216,182,106,.4);border-radius:10px;font-family:var(--font-serif);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}.tour-mp-chip-label{font-size:.72rem;letter-spacing:.08em;color:var(--brass);text-transform:uppercase}.tour-mp-chip-value{color:var(--text)}.tour-mp-chip-pct{color:var(--muted);font-size:.85rem}.pending-match-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:250;display:flex;align-items:center;justify-content:center;background:#040806c7;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.pending-match-sheet{width:min(560px,94vw);padding:1.4rem 1.6rem;background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);border:1px solid var(--line);border-radius:14px;box-shadow:0 30px 60px -20px #000000b3}.pm-title{margin:0 0 .4rem;font-family:var(--font-serif);font-weight:700;font-size:1.25rem;color:var(--brass-hi)}.pm-sub{margin:0 0 1.2rem;color:var(--muted);font-size:.9rem}.pm-tables{display:flex;gap:.8rem;flex-wrap:wrap}.pm-code-row{display:flex;align-items:center;gap:.8rem;justify-content:center;margin:.5rem 0 1rem}.pm-table-code.big{font-size:1.6rem;letter-spacing:.25em;padding:.4rem .9rem;background:linear-gradient(180deg,#1a2030,#10141c);border:1px solid var(--brass-lo);color:var(--brass-hi);border-radius:8px;font-family:monospace;font-weight:700}.pm-table-card{flex:1;min-width:200px;display:flex;flex-direction:column;gap:.5rem;padding:.8rem;background:var(--panel);border:1px solid var(--line);border-radius:10px}.pm-table-label{font-family:var(--font-sans);font-weight:700;letter-spacing:.18em;text-transform:uppercase;font-size:.7rem;color:var(--muted)}.pm-table-code{font-family:monospace;font-size:1rem;font-weight:700;color:var(--brass-hi);word-break:break-all}.btn-copy{background:transparent;border:1px solid var(--line);color:var(--muted);font-size:.85rem}.btn-dismiss{margin-top:1rem;background:transparent;border:1px solid var(--line);color:var(--muted);display:block;margin-left:auto}.match-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .7rem;background:linear-gradient(180deg,#2c1f4a,#1a132e);border:1px solid #4a3070;border-radius:999px;font-size:.85rem;margin-right:.5rem}.match-chip .mc-team{display:inline-flex;align-items:baseline;gap:.3rem}.match-chip .mc-team b{font-family:var(--font-serif);font-weight:700}.match-chip .mc-team.a b{color:var(--team-ns)}.match-chip .mc-team.b b{color:var(--team-ew)}.match-chip .mc-score{font-family:var(--font-serif);font-weight:700;font-variant-numeric:tabular-nums;color:var(--brass-hi);font-size:1rem}.match-chip .mc-team{position:relative}.match-chip .mc-delta{position:absolute;left:50%;bottom:100%;font-family:var(--font-serif);font-weight:800;font-size:1rem;font-variant-numeric:tabular-nums;pointer-events:none;white-space:nowrap;animation:mc-delta-float 1.3s cubic-bezier(.2,.7,.2,1) both;text-shadow:0 1px 3px rgba(0,0,0,.55)}.match-chip .mc-delta.team-a{color:var(--team-ns)}.match-chip .mc-delta.team-b{color:var(--team-ew)}@keyframes mc-delta-float{0%{opacity:0;transform:translate(-50%,8px) scale(.6)}18%{opacity:1;transform:translate(-50%,-2px) scale(1.25)}60%{opacity:1;transform:translate(-50%,-18px) scale(1)}to{opacity:0;transform:translate(-50%,-34px) scale(.9)}}.match-chip .mc-sep{color:var(--faint)}.match-chip .mc-progress{margin-left:.4rem;padding-left:.6rem;border-left:1px solid #3a2860;color:var(--muted);font-size:.78rem}.spectator-banner{display:flex!important;align-items:center;gap:.7rem;background:linear-gradient(180deg,#1d2638,#11151f);color:#b8c4dc;font-family:var(--font-serif);letter-spacing:.04em;font-size:.95rem}.spectator-icon{font-size:1.3rem;filter:drop-shadow(0 0 6px rgba(120,160,220,.4))}.spectator-text{color:var(--muted)}.app{display:grid;grid-template-columns:minmax(0,1fr) 256px;grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"header  header" "compass sidebar" "action  action";column-gap:.7rem;row-gap:2px;height:100%}.app.history-page{display:block;height:100vh;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}body.first-mount .app{animation:rise .6s cubic-bezier(.2,.7,.2,1) both}@keyframes rise{0%{opacity:0;transform:translateY(14px)}}.app>.app-header{grid-area:header}.app>.header{grid-area:header}.app>.compass{grid-area:compass}.app>.action{grid-area:action;margin-top:calc(.7rem - 2px)}.app>.sidebar{grid-area:sidebar;align-self:stretch;display:flex;flex-direction:column;gap:.7rem;min-height:0;padding-top:6px}#rotate-prompt{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;flex-direction:column;align-items:center;justify-content:center;gap:1.2rem;padding:2rem;text-align:center;background:radial-gradient(120% 90% at 50% 8%,#1a2620 0%,var(--bg) 60%,#07090c 100%);color:var(--text)}#rotate-prompt .rotate-icon{font-size:4.2rem;color:var(--brass);animation:rotateHint 2.4s ease-in-out infinite;filter:drop-shadow(0 0 18px var(--brass-glow))}@keyframes rotateHint{0%,to{transform:rotate(-15deg)}50%{transform:rotate(75deg)}}#rotate-prompt h1{font-family:var(--font-serif);font-weight:700;font-size:1.4rem;letter-spacing:.06em;margin:0}#rotate-prompt p{margin:0;color:var(--muted);font-size:.95rem;max-width:26ch;line-height:1.5}@media (orientation: portrait) and (max-width: 820px){#rotate-prompt{display:flex}#app{display:none}}@media (max-height: 540px){#app{padding:.25rem .4rem}.app{gap:.3rem;grid-template-columns:minmax(0,1fr) 180px}body.first-mount .app,body.first-mount .seat-N,body.first-mount .seat-S,body.first-mount .seat-W,body.first-mount .seat-E,body.first-mount .center,body.first-mount .auction-log,body.first-mount .scoreboard,body.first-mount .action,body.first-mount .trick-pcard,.seat.on-turn{animation:none!important}.seat.on-turn:after{animation:none!important}.trick-empty.awaiting{animation:none!important}.compass{gap:4px;padding:4px 6px}.header{padding:.2rem .5rem;gap:.3rem}.brand{margin-right:.2rem}.brand .wordmark{font-size:.85rem;letter-spacing:.06em}.brand .wordmark-sub{display:none}.tag{font-size:.65rem;padding:.12rem .4rem}.status{font-size:.55rem;padding:.12rem .35rem}.seat{padding:2px 4px!important;gap:1px!important}.seat-letter{width:18px!important;height:18px!important;font-size:.7rem!important;border-radius:4px}.seat-name{font-size:.7rem!important}.seat-role{font-size:.5rem!important;letter-spacing:.1em}.seat-head{gap:.25rem}.seat-N,.seat-S{min-width:340px!important;min-height:50px!important}.seat-W,.seat-E{min-width:132px!important;min-height:140px!important}.hand-fan{position:static!important;width:auto!important;height:auto!important;transform:none!important;display:flex!important;gap:2px!important;flex-wrap:nowrap}.pcard{position:static!important;transform:none!important;margin:0!important;width:24px!important;height:32px!important;border-radius:3px!important;border:1px solid #cfc7b4!important;box-shadow:none!important;transition:none!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;line-height:1!important;font-family:var(--font-serif)}.pcard .pip,.pcard .idx.br{display:none!important}.pcard.honor:before,.pcard.honor:after{display:none!important}.pcard.trump{border-color:var(--brass)!important}.pcard .idx{position:static!important;transform:none!important;flex-direction:column!important;gap:0!important;align-items:center!important;padding:0!important;margin:0!important}.pcard .idx .r{font-size:11px!important;line-height:1;padding:0!important;letter-spacing:0!important}.pcard .idx .s{font-size:9px!important;line-height:1}.pcard .idx .r-ten{letter-spacing:-.1em!important}.pcard.back{background:#2a3650!important;border-color:#1a1f2c!important}.pcard.disabled{opacity:.32!important;cursor:not-allowed}.pcard.clickable:hover{box-shadow:none!important;transform:none!important}.pcard.clickable:active{transform:scale(.94)!important}.dir-N,.dir-S{flex-wrap:nowrap!important;justify-content:center!important;min-width:336px!important}.dir-W,.dir-E{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:2px!important;width:128px!important;max-width:128px!important;min-height:134px!important}.dir-W .suit-row,.dir-E .suit-row{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important;justify-content:center!important;gap:2px!important;max-width:128px!important}.hand-fan.hidden{position:relative!important;display:flex!important;align-items:center!important;justify-content:center!important;width:24px!important;height:32px!important;transform:none!important;gap:0!important}.hand-fan.hidden .pcard.back{display:none!important}.hand-fan.hidden .pcard.back:first-of-type{display:flex!important;position:static!important;transform:none!important;margin:0!important;width:24px!important;height:32px!important;border-radius:3px!important;box-shadow:none!important;background:repeating-linear-gradient(45deg,transparent 0 3px,rgba(216,182,106,.18) 3px 4px),linear-gradient(160deg,#20283a,#161a2c 60%,#20283a)!important;border:1px solid #1a1f2c!important}.hand-count{display:flex!important;position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;align-items:center!important;justify-content:center!important;color:var(--brass-hi);font-family:var(--font-serif);font-weight:800;font-size:14px;line-height:1;text-shadow:0 0 3px rgba(0,0,0,.9),0 0 1px rgba(0,0,0,.9);pointer-events:none;z-index:50!important}.trick{gap:4px 8px!important}.trick-pcard{width:26px!important;height:34px!important}.trick-empty{width:26px!important;height:34px!important;border-radius:3px}.trick-center .tc-num{font-size:18px!important}.trick-center .tc-lbl,.trick-seat-letter{font-size:.5rem!important}.bid-log .bid-bubble{width:28px!important;height:18px!important;font-size:.7rem!important}.action{padding:.4rem .5rem;gap:.4rem;min-height:36px}.bid-grid{gap:.2rem}.bid-cell{height:28px;font-size:.85rem}.bid-col-head{font-size:.78rem;padding-bottom:.05rem}.bid-col{padding:.16rem;gap:.16rem}.bid-extras .btn-pass,.bid-extras .btn-dbl,.bid-extras .btn-rdbl{padding:.4rem .8rem;font-size:.85rem;min-height:32px}button{min-height:32px!important;padding:.35rem .7rem!important}.auction-log,.scoreboard{padding:.4rem .5rem}.auction-log h3,.scoreboard h3{margin-bottom:.3rem;font-size:.6rem}.auction-grid{font-size:.75rem;gap:.15rem .2rem}.scoreboard-table{font-size:.7rem}.scoreboard-table td{padding:.1rem .18rem}.score-modal .score-selector{display:none!important}.score-bid-trigger{display:inline-flex!important;align-items:center;gap:.18rem;margin:.4rem auto .8rem;padding:.5rem 1.1rem;background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));color:#221802;border:1px solid #6b521f;border-radius:8px;font-family:var(--font-serif);font-weight:700;font-size:1.1rem;min-height:40px}.score-bid-trigger .st{font-size:1.3em}.score-bid-trigger .st-NT{font-size:1em;letter-spacing:.02em}.score-bid-trigger .st.col-S{color:var(--suit-S)}.score-bid-trigger .st.col-H{color:var(--suit-H)}.score-bid-trigger .st.col-D{color:var(--suit-D)}.score-bid-trigger .st.col-C{color:var(--suit-C)}.score-sheet{padding:.7rem .8rem}.score-sheet-head h3{font-size:1rem}.score-card{font-size:.78rem}.bidding-box .bid-grid,.bidding-box .bid-extras,.bidding-box .phase-label{display:none!important}.bidding-box .mobile-bid-bar{display:flex!important;gap:.4rem;padding:.2rem;width:100%;justify-content:center}.mobile-bid-bar button{flex:1;max-width:90px;min-height:36px;font-size:.9rem;font-weight:700;border-radius:7px}.mobile-bid-bar .btn-bid{background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));color:#221802;border-color:#6b521f}.mobile-bid-bar .btn-dbl.mob,.mobile-bid-bar .btn-spec.mob{background:var(--panel);border-color:var(--line);color:var(--text)}.mobile-bid-bar .btn-spec.mob.armed{background:linear-gradient(180deg,#d77a30,#a0531a);color:#fff;border-color:#6b3a0e;font-size:.78rem}.mobile-bid-bar button:disabled{opacity:.35;cursor:not-allowed}}.bid-picker-cell.extras-alert{background:#2a1f10;color:#d77a30;border-color:#6b3a0e}.bid-picker-cell.extras-alert.armed{background:linear-gradient(180deg,#d77a30,#a0531a);color:#fff}.bid-picker-cell.extras-stop{background:#2a1010;color:#c0403a;border-color:#6e201d}.bid-picker-cell.extras-stop.armed{background:linear-gradient(180deg,#c0403a,#8f2a26);color:#fff}.mobile-bid-bar,.hand-count,.score-bid-trigger{display:none}.suit-row{display:contents}.bid-picker-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:250;display:flex;align-items:center;justify-content:center;background:#040806c7;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.bid-picker-sheet{width:min(420px,92vw);padding:1rem 1rem .8rem;background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);border:1px solid var(--line);border-radius:14px;box-shadow:0 20px 50px -10px #000000b3;display:flex;flex-direction:column;gap:.7rem;align-items:center}.bid-picker-head{display:flex;align-items:center;gap:.5rem;width:100%}.bid-picker-back{background:var(--panel);border:1px solid var(--line);color:var(--text);font-size:1.1rem;width:32px;height:32px;min-height:32px;border-radius:7px;padding:0;display:flex;align-items:center;justify-content:center}.bid-picker-title{font-family:var(--font-serif);font-weight:700;font-size:1rem;color:var(--text);flex:1;text-align:center}.bid-picker-row{display:flex;gap:.4rem;width:100%;justify-content:center;flex-wrap:wrap}.bid-picker-cell{flex:1;min-width:44px;min-height:44px;font-family:var(--font-serif);font-weight:700;font-size:1.2rem;background:linear-gradient(180deg,#fbfaf5,#ece7da);color:#14181d;border:1px solid #cfc7b4;border-radius:8px;padding:.4rem}.bid-picker-cell.col-S{color:var(--suit-S)}.bid-picker-cell.col-H{color:var(--suit-H)}.bid-picker-cell.col-D{color:var(--suit-D)}.bid-picker-cell.col-C{color:var(--suit-C)}.bid-picker-cell.col-N{color:#41474f}.bid-picker-cell:disabled{opacity:.3;cursor:not-allowed;background:#d8d0bd}.bid-picker-cell:active:not(:disabled){transform:scale(.95)}.bid-picker-cancel{margin-top:.2rem;background:transparent;border:1px solid var(--line);color:var(--muted);font-size:.85rem;padding:.4rem 1.2rem;min-height:32px;border-radius:7px}@media (hover: none){.bid-cell:hover:not(.spent){transform:none;box-shadow:none}.bid-cell:active:not(.spent){transform:translateY(-1px);box-shadow:0 4px 10px -4px #00000080,0 0 0 2px var(--brass)}.pcard.clickable:hover{box-shadow:0 3px 7px -3px #0000008c,inset 0 0 0 1px #ffffff80}.pcard.clickable:active{box-shadow:0 12px 20px -8px #0009,0 0 0 1px var(--brass),0 0 16px -2px var(--brass-glow);z-index:100!important}}.app>.error-banner{grid-column:1 / -1}.header{display:flex;justify-content:space-between;align-items:center;padding:.7rem 1.1rem;background:linear-gradient(180deg,var(--panel) 0%,#11151a 100%);border:1px solid var(--line);border-radius:12px}.header-left,.header-right{display:flex;gap:.55rem;flex-wrap:wrap;align-items:center}.header-center{display:flex;align-items:center;justify-content:center;flex:1;min-width:0}.brand{display:flex;flex-direction:column;line-height:1;margin-right:.4rem}.brand .wordmark{font-family:var(--font-serif);font-weight:900;font-size:1.45rem;letter-spacing:.14em;background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));-webkit-background-clip:text;background-clip:text;color:transparent}.brand .wordmark-sub{font-size:.66rem;letter-spacing:.42em;text-transform:uppercase;color:var(--faint);margin-top:.25rem}.tag{display:inline-flex;align-items:center;gap:.35rem;padding:.28rem .7rem;background:#0f1318;border:1px solid var(--line);border-radius:999px;font-size:.82rem;color:var(--muted)}.tag b{color:var(--text);font-weight:600}.tag.vul{border-color:#5a2b27;color:#f0a59d;background:#1f0f0d}.status{font-weight:600;display:inline-flex;align-items:center;gap:.45rem;font-size:.85rem}.status:before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor}.status-reconnect{background:linear-gradient(180deg,#4a1f1c,#2a0f0e);color:#f3b4b0;border:1px solid #6e201d;cursor:pointer;font-weight:700;letter-spacing:.04em}.status-reconnect:hover,.status-reconnect:active{background:linear-gradient(180deg,#6e2826,#4a1f1c);color:#fff}.status-reconnect.status-connecting{background:linear-gradient(180deg,#3a3320,#2a2517);color:#f1d99a;border-color:#6b521f;cursor:progress}.status-open{color:var(--good)}.status-connecting{color:var(--brass)}.status-closed{color:var(--bad)}.error-banner{background:linear-gradient(180deg,#3a1714,#2a100e);border:1px solid #6e2a24;color:#ffd9d4;padding:.55rem .9rem;border-radius:8px}.compass{position:relative;display:grid;grid-template-columns:minmax(120px,1fr) minmax(248px,380px) minmax(120px,1fr);grid-template-rows:auto auto auto;grid-template-areas:"seatW seatN  seatE" "seatW center seatE" "seatW seatS  seatE";gap:calc(clamp(4px,2vh,36px) * var(--u)) calc(clamp(10px,3vh,48px) * var(--u));padding:calc(clamp(.4rem,1.5vh,1.4rem) * var(--u)) calc(1.2rem * var(--u));height:100%;min-height:0;align-content:space-between;justify-content:center;border-radius:20px;background:radial-gradient(120% 90% at 50% 8%,var(--felt-hi) 0%,var(--felt) 38%,var(--felt-lo) 86%,var(--felt-edge) 100%);box-shadow:inset 0 0 0 1px #ffffff0a,inset 0 2px 40px #00000073,inset 0 0 120px #00000059;border:6px solid transparent;background-clip:padding-box}.compass:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:14px;pointer-events:none;opacity:.5;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='120' height='120' filter='url(%23n)' opacity='0.5'/></svg>")}.compass:after{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;border-radius:22px;pointer-events:none;background:linear-gradient(140deg,#6b521f,#e3c478 18%,#8a6d2f,#f1d99a 62%,#5a4318 82%,#c9a458);z-index:-1;box-shadow:0 16px 50px -18px #000c}.seat{position:relative;background:linear-gradient(180deg,#08100b8c,#040a079e);border:1px solid rgba(255,255,255,.06);padding:calc(.4rem * var(--u)) calc(.6rem * var(--u));border-radius:12px;display:flex;flex-direction:column;gap:calc(.2rem * var(--u));align-items:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);box-shadow:0 10px 30px -16px #000000b3;transition:box-shadow .2s,border-color .2s,transform .2s}.seat-N,.seat-S,.seat-W,.seat-E{justify-self:center;width:max-content}.seat-N,.seat-S{display:grid;grid-template-columns:auto auto;column-gap:calc(.5rem * var(--u));align-items:center;justify-items:center}.seat-N>.seat-head,.seat-S>.seat-head{grid-row:1 / -1;grid-column:1;width:auto;max-width:calc(78px * var(--u))}.seat-N>*:not(.seat-head),.seat-S>*:not(.seat-head){grid-column:2}.seat-N{grid-area:seatN;align-self:center}.seat-W{grid-area:seatW;align-self:center}.seat-E{grid-area:seatE;align-self:center}.seat-S{grid-area:seatS;align-self:center}body.first-mount .seat-N{animation:rise .6s 80ms both}body.first-mount .seat-W,body.first-mount .seat-E{animation:rise .6s .16s both}body.first-mount .seat-S{animation:rise .6s .24s both}.seat.on-turn{border-color:var(--brass);padding-top:.75rem;box-shadow:0 0 0 1px var(--brass),0 0 24px -2px var(--brass-glow),0 10px 30px -16px #000000b3;animation:turnGlow 1.8s ease-in-out infinite}@keyframes turnGlow{50%{box-shadow:0 0 0 1px var(--brass),0 0 34px 1px var(--brass-glow),0 10px 30px -16px #000000b3}}.seat.on-turn:before{content:"to play";position:absolute;top:-9px;left:14px;z-index:6;display:inline-flex;align-items:center;font-size:.6rem;letter-spacing:.22em;text-transform:uppercase;color:#221802;font-weight:700;background:linear-gradient(180deg,var(--brass-hi),var(--brass));padding:.14rem .6rem .14rem 1.25rem;border-radius:999px}.seat.on-turn:after{content:"";position:absolute;top:-3px;left:23px;z-index:7;width:6px;height:6px;border-radius:50%;background:#1b5e34;box-shadow:0 0 #1b5e34b3;animation:turnDot 1.4s ease-out infinite}.seat.stop-locked{border-color:#c0403a;box-shadow:0 0 0 1px #c0403a,0 0 24px -2px #c0403a66,0 10px 30px -16px #000000b3;animation:none}.seat.stop-locked:before{display:none}.seat.stop-locked:after{display:none}.stop-badge{position:absolute;top:-9px;left:14px;z-index:7;font-size:.6rem;letter-spacing:.22em;text-transform:uppercase;color:#fff;font-weight:700;background:linear-gradient(180deg,#c0403a,#8f2a26);border:1px solid #6e201d;padding:.14rem .7rem;border-radius:999px;box-shadow:0 0 10px -2px #c0403a8c}@keyframes turnDot{0%{box-shadow:0 0 #2a7a47a6}70%{box-shadow:0 0 0 6px #2a7a4700}to{box-shadow:0 0 #2a7a4700}}.seat-head{display:flex;flex-direction:column;align-items:center;gap:calc(.3rem * var(--u));width:100%}.seat-portrait{position:relative;width:calc(72px * var(--u));aspect-ratio:1 / 1.05;border:1px solid rgba(212,168,90,.32);border-radius:6px;overflow:hidden;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 1px #ffdcaa1a,inset 0 -8px 18px #00000080,0 6px 16px #00000073;background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(229,103,92,.35),transparent 70%),linear-gradient(180deg,#120a0cf2,#080406fa)}.seat-portrait.team-ew{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(91,141,232,.35),transparent 70%),linear-gradient(180deg,#0a0e18f2,#04060efa)}.seat-portrait.declarer{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(241,217,154,.45),transparent 70%),linear-gradient(180deg,#2d1e08f2,#140c04fa);border-color:#d8b66aa6}.seat-portrait.dummy{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(140,110,200,.3),transparent 70%),linear-gradient(180deg,#221c32f2,#100c1afa)}.seat-portrait:before,.seat-portrait:after{content:"";position:absolute;width:calc(10px * var(--u));height:calc(10px * var(--u));border:1px solid rgba(216,182,106,.85);pointer-events:none}.seat-portrait:before{top:3px;left:3px;border-right:none;border-bottom:none}.seat-portrait:after{bottom:3px;right:3px;border-left:none;border-top:none}.seat.on-turn .seat-portrait{border-color:var(--brass);box-shadow:inset 0 1px #ffdcaa26,inset 0 -8px 18px #00000080,0 0 0 2px var(--brass),0 0 14px -2px var(--brass-glow)}.seat-portrait-emoji{font-size:calc(2.6rem * var(--u));line-height:1;filter:drop-shadow(0 2px 5px rgba(0,0,0,.55))}.seat-portrait-corner{position:absolute;bottom:calc(4px * var(--u));right:calc(4px * var(--u));z-index:3;min-width:calc(16px * var(--u));padding:calc(1px * var(--u)) calc(5px * var(--u));background:linear-gradient(180deg,#281e0ef2,#0f0a04fa);border:1px solid rgba(216,182,106,.6);border-radius:999px;font-family:"Noto Serif SC",Fraunces,serif;font-weight:700;font-size:calc(.7rem * var(--u));color:var(--brass-hi);text-align:center;letter-spacing:.04em;line-height:1.1}.seat-nameplate{width:100%;padding:calc(2px * var(--u)) calc(8px * var(--u));background:linear-gradient(180deg,#ffffff0d,#0000002e),linear-gradient(90deg,#2d1e08eb,#483210eb);border:1px solid rgba(216,182,106,.35);border-top-color:#f1d99a66;border-radius:4px;text-align:center;color:var(--brass-hi);font-family:"Noto Serif SC",Fraunces,serif;font-weight:600;font-size:calc(.82rem * var(--u));letter-spacing:.02em;box-shadow:inset 0 1px #ffdcaa26,0 2px 6px #00000059;overflow:hidden}.seat-nameplate-text{display:block;white-space:normal;overflow-wrap:anywhere;word-break:break-word;line-height:1.1}.seat-nameplate.team-ns{background:linear-gradient(180deg,#ffffff0d,#0000002e),linear-gradient(90deg,#6e201deb,#a93f37eb);color:#fff}.seat-nameplate.team-ew{background:linear-gradient(180deg,#ffffff0d,#0000002e),linear-gradient(90deg,#1f3d80eb,#2e5cb2eb);color:#fff}.seat-nameplate.you{box-shadow:inset 0 1px #ffdcaa2e,inset 0 0 0 1px #f1d99a80,0 2px 6px #0006}.seat-nameplate.offline{opacity:.55}.seat-nameplate.offline .seat-nameplate-text{text-decoration:line-through}.seat-letter{font-family:var(--font-serif);font-weight:700;font-size:calc(.9rem * var(--u));width:calc(1.6rem * var(--u));height:calc(1.6rem * var(--u));display:inline-flex;align-items:center;justify-content:center;background:#0d1116;border:1px solid var(--line);border-radius:7px;letter-spacing:.04em}.seat-letter.team-ns{background:linear-gradient(180deg,#e5675c,#a93f37);color:#fff;border-color:#6e201d}.seat-letter.team-ew{background:linear-gradient(180deg,#5b8de8,#2e5cb2);color:#fff;border-color:#1f3d80}.seat-letter.declarer{background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));color:#221802;border-color:#6b521f}.seat-letter.dummy{background:linear-gradient(180deg,#3a3550,#28243a);color:#cfc7e8;border-color:#4a4368}.seat.on-turn .seat-letter{background:linear-gradient(180deg,var(--brass-hi),var(--brass-lo));color:#221802;border-color:#6b521f}.seat-name{color:var(--muted);font-size:calc(.92rem * var(--u));font-weight:500}.seat-name.team-ns{color:var(--team-ns)}.seat-name.team-ew{color:var(--team-ew)}.seat-name.you{font-weight:700}.seat-name.offline{text-decoration:line-through;opacity:.5}.seat-role{margin-left:auto;font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--faint)}.seat-role.is-declarer{color:var(--brass)}.seat-fallback{background:#4a3a14;color:#f1d99a;border-color:#6b521f;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;padding:.14rem .45rem}.seat-role.is-dummy{color:#b3a8e0}.dou-seat-degraded,.dou-name-degraded{display:inline-block;background:#4a3a14;color:#f1d99a;border:1px solid #6b521f;border-radius:3px;font-size:.55rem;letter-spacing:.05em;padding:.08rem .32rem;margin-left:.35rem;vertical-align:middle;white-space:nowrap}.dou-name-degraded{font-size:.5rem;padding:.05rem .25rem;margin-left:.25rem}.seat-hcp{position:absolute;top:calc(.3rem * var(--u));right:calc(.4rem * var(--u));z-index:5;padding:.1rem .5rem}.seat-hcp+.seat-role{margin-left:.4rem}.btn-remove-bot{margin-left:auto;width:1.25rem;height:1.25rem;padding:0;border-radius:50%;background:#c0403a26;border:1px solid #6e201d;color:#f3b4b0;font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-weight:700}.btn-remove-bot:hover{background:linear-gradient(180deg,#c0403a,#8f2a26);color:#fff}.seat-hcp+.btn-remove-bot,.seat-role+.btn-remove-bot{margin-left:.3rem}.btn-stand{margin-left:auto;width:1.25rem;height:1.25rem;padding:0;border-radius:50%;background:#b4b4b41f;border:1px solid var(--line);color:var(--muted);font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-weight:700}.btn-stand:hover{background:linear-gradient(180deg,#4a4f56,#2c3038);color:var(--text);border-color:var(--brass-lo)}.seat-hcp+.btn-stand,.seat-role+.btn-stand{margin-left:.3rem}.seat-kick-row{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.3rem;justify-content:center}.btn-kick{padding:.2rem .55rem;border-radius:6px;font-size:.7rem;letter-spacing:.04em;font-weight:600;cursor:pointer;font-family:var(--font-sans);white-space:nowrap;line-height:1.1}.btn-kick-ben{background:linear-gradient(180deg,var(--brass-hi),var(--brass));border:1px solid #6b521f;color:#221802}.btn-kick-ben:hover{background:linear-gradient(180deg,#f4e0a8,var(--brass));border-color:#4d3a16}.btn-kick-basic{background:linear-gradient(180deg,#c8893f38,#784b1e52);border:1px solid #8a5a2f;color:#f1d99a}.btn-kick-basic:hover{background:linear-gradient(180deg,#c0813a,#8a5a2f);color:#fff;border-color:#6e441e}.btn-take-over{margin-top:.3rem;padding:.22rem .65rem;border-radius:6px;background:linear-gradient(180deg,#4f9e6c52,#2a69416b);border:1px solid #3f7a55;color:#d4f0db;font-size:.74rem;letter-spacing:.06em;font-weight:700;cursor:pointer;font-family:var(--font-sans);white-space:nowrap}.btn-take-over:hover{background:linear-gradient(180deg,#4f9e6c,#2a6941);color:#fff;border-color:#2a5a3a}.btn-undo{background:#785a3c2e;border:1px solid rgba(216,182,106,.4);color:var(--brass-hi)}.btn-undo:hover{background:#d8b66a38;border-color:var(--brass)}.seat-ctrls{display:flex;gap:.4rem;margin-top:.4rem}.seat-ctrls button{padding:.3rem .6rem;font-size:.82rem;font-weight:500}.hint{color:var(--muted);font-size:.9rem}.hand-fan{position:relative}.pcard{position:absolute;width:var(--card-w);height:var(--card-h);background:var(--card-face);color:var(--black-suit);border:1px solid #cfc7b4;border-radius:calc(6px * var(--u));font-family:var(--font-serif);font-weight:700;box-shadow:0 3px 7px -3px #0000008c,inset 0 0 0 1px #ffffff80;transition:transform .15s cubic-bezier(.2,.8,.25,1),box-shadow .15s}.pcard.suit-S{color:var(--suit-S)}.pcard.suit-H{color:var(--suit-H)}.pcard.suit-D{color:var(--suit-D)}.pcard.suit-C{color:var(--suit-C)}.pcard .idx{position:absolute;top:calc(2.5px * var(--u));left:calc(3px * var(--u));display:flex;flex-direction:column;align-items:center;line-height:1;gap:calc(1px * var(--u))}.pcard .idx .r{font-size:calc(13px * var(--u))}.pcard .idx .s{font-size:calc(10px * var(--u))}.pcard .idx .r.r-ten{letter-spacing:-.15em;padding-right:.12em}.pcard .idx.br{top:auto;left:auto;bottom:calc(2.5px * var(--u));right:calc(3px * var(--u));transform:rotate(180deg)}.pcard .pip{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:calc(26px * var(--u));line-height:1;opacity:1;pointer-events:none}.dir-N .pip,.dir-W .pip,.dir-E .pip{transform:translate(-50%,-50%) rotate(180deg)}.pcard.back{background:repeating-linear-gradient(45deg,transparent 0 5px,rgba(216,182,106,.12) 5px 6px),repeating-linear-gradient(-45deg,transparent 0 5px,rgba(216,182,106,.12) 5px 6px),linear-gradient(160deg,#20283a,#161a2c 60%,#20283a);border:1px solid #1a1f2c;box-shadow:inset 0 0 0 2px #d8b66a29,0 2px 5px -2px #00000080}.dir-S{width:calc(420px * var(--u));height:calc(100px * var(--u));transform:translateY(calc(-20px * var(--u)))}.dir-S .pcard{left:50%;top:50%;margin:calc(-32.5px * var(--u)) 0 0 calc(-23px * var(--u));transform-origin:center center;transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg))}.dir-S .pcard.clickable{cursor:pointer}.dir-S .pcard.clickable:hover{box-shadow:0 6px 14px -6px #0000008c,0 0 0 1px var(--brass),0 0 14px -4px var(--brass-glow);z-index:50!important}.dir-N{width:calc(420px * var(--u));height:calc(100px * var(--u));transform:translateY(calc(12px * var(--u)))}.dir-N .pcard{left:50%;top:50%;margin:calc(-32.5px * var(--u)) 0 0 calc(-23px * var(--u));transform-origin:center center;transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg))}.dir-N .pcard.clickable{cursor:pointer}.dir-N .pcard.clickable:hover{box-shadow:0 -6px 14px -6px #0000008c,0 0 0 1px var(--brass),0 0 14px -4px var(--brass-glow);z-index:50!important}.dir-W{width:calc(150px * var(--u));height:calc(400px * var(--u))}.dir-W .pcard{left:50%;top:50%;margin:calc(-32.5px * var(--u)) 0 0 calc(-23px * var(--u));transform-origin:center center;transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg))}.dir-E{width:calc(150px * var(--u));height:calc(400px * var(--u))}.dir-E .pcard{left:50%;top:50%;margin:calc(-32.5px * var(--u)) 0 0 calc(-23px * var(--u));transform-origin:center center;transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg))}.pcard.disabled{background:linear-gradient(176deg,#c9c3b3,#b4ad9c);color:#6f6a5d;border-color:#aaa291;box-shadow:0 2px 5px -3px #00000080,inset 0 0 0 1px #ffffff47;cursor:not-allowed}.pcard.disabled.suit-S{color:#6b7589}.pcard.disabled.suit-H{color:#a86f6a}.pcard.disabled.suit-D{color:#a8895f}.pcard.disabled.suit-C{color:#6a8a73}.pcard.selected{z-index:150!important;box-shadow:0 16px 28px -6px #000000b3,0 0 0 2px var(--brass-hi),0 0 28px -2px var(--brass-glow)!important;outline:none}.dir-S .pcard.selected{transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg)) translateY(calc(-14px * var(--u)))!important}.dir-N .pcard.selected{transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg)) translateY(calc(14px * var(--u)))!important}.dir-W .pcard.selected{transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg)) translate(calc(14px * var(--u)))!important}.dir-E .pcard.selected{transform:translate(calc(var(--tx) * var(--u)),calc(var(--ty) * var(--u))) rotate(var(--rot, 0deg)) translate(calc(-14px * var(--u)))!important}.btn-confirm-play{font-size:1rem;font-weight:700;padding:.55rem 1rem;display:inline-flex;align-items:center;gap:.25rem;letter-spacing:.02em}.btn-confirm-play .st-S{color:var(--suit-S);font-size:1.15em;line-height:1}.btn-confirm-play .st-H{color:var(--suit-H);font-size:1.15em;line-height:1}.btn-confirm-play .st-D{color:var(--suit-D);font-size:1.15em;line-height:1}.btn-confirm-play .st-C{color:var(--suit-C);font-size:1.15em;line-height:1}.btn-cancel-play{font-size:.95rem;padding:.5rem .7rem;background:#2a1818;color:#d8a8a8;border:1px solid #4a2828}.btn-cancel-play:hover{background:#3a2020;color:#fcc}.center{grid-area:center;position:relative;min-height:0;border-radius:14px;padding:.9rem;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(70% 60% at 50% 42%,rgba(0,0,0,.36),rgba(0,0,0,.12) 70%,transparent)}body.first-mount .center{animation:rise .6s .32s both}.phase-label{font-family:var(--font-serif);font-weight:600;font-size:1.05rem;margin:0 0 .1rem;letter-spacing:.02em}.phase-hint{color:var(--muted);margin:0 0 .4rem;font-size:.86rem}.center>.phase-label,.last-trick-overlay>.phase-label{font-size:calc(1.5rem * var(--u));margin-bottom:calc(32px * var(--u))}.center>.phase-hint{margin-bottom:calc(20px * var(--u))}.trick{display:grid;grid-template-columns:var(--card-w) var(--card-w) var(--card-w);grid-template-rows:var(--card-h) auto var(--card-h);grid-template-areas:"tW  tN  tE" "tW  tC  tE" "tW  tS  tE";gap:calc(14px * var(--u)) calc(34px * var(--u));margin-bottom:calc(6px * var(--u))}.trick-center{grid-area:tC;align-self:center;justify-self:center;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1;filter:drop-shadow(0 2px 4px rgba(0,0,0,.25));font-family:var(--font-serif)}.trick-center .tc-num{font-weight:700;font-size:calc(46px * var(--u));font-variant-numeric:tabular-nums;letter-spacing:-.02em}.trick-center .tc-lbl{font-family:var(--font-sans);font-weight:700;letter-spacing:.22em;text-transform:uppercase;font-size:calc(.62rem * var(--u));color:var(--muted);margin-top:calc(2px * var(--u))}.trick-center.suit-S{color:#8fa3d0}.trick-center.suit-H{color:#d98b84}.trick-center.suit-D{color:#d9b07a}.trick-center.suit-C{color:#84bd99}.trick-center.nt{color:var(--brass-hi)}.trick-N{grid-area:tN}.trick-E{grid-area:tE;align-self:center}.trick-S{grid-area:tS}.trick-W{grid-area:tW;align-self:center}.trick-slot{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.18rem;overflow:visible}.trick-pcard{position:relative;left:auto;top:auto;margin:0;width:var(--card-w);height:var(--card-h);flex:none}body.first-mount .trick-pcard{animation:deal .28s cubic-bezier(.2,.8,.25,1) both}body.first-mount .trick-N .trick-pcard{animation-delay:0ms}body.first-mount .trick-E .trick-pcard{animation-delay:90ms}body.first-mount .trick-S .trick-pcard{animation-delay:.18s}body.first-mount .trick-W .trick-pcard{animation-delay:.27s}@keyframes deal{0%{opacity:0;transform:translateY(8px) scale(.92) rotate(-3deg)}}.pcard.trump{background:linear-gradient(176deg,#fdf6dc,#f0d99a);border-color:var(--brass);box-shadow:0 3px 7px -3px #0000008c,0 0 0 2px var(--brass),0 0 12px -2px var(--brass-glow)}.pcard.honor:before,.pcard.honor:after{content:"★";position:absolute;font-size:calc(9px * var(--u));line-height:1;color:var(--brass);text-shadow:0 0 4px var(--brass-glow);pointer-events:none}.pcard.honor:before{top:calc(2.5px * var(--u));right:calc(3px * var(--u))}.pcard.honor:after{bottom:calc(2.5px * var(--u));left:calc(3px * var(--u))}.last-trick-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:30;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(ellipse at center,#0d1e14eb,#08120cf7);border-radius:12px;opacity:0;visibility:hidden;transition:opacity .14s ease;pointer-events:none}.last-trick-overlay.active{opacity:1;visibility:visible}.trick-empty{width:var(--card-w);height:var(--card-h);flex:none;border-radius:calc(6px * var(--u));border:1px dashed rgba(255,255,255,.14)}.trick-empty.awaiting{border-color:var(--brass);box-shadow:0 0 14px -2px var(--brass-glow);animation:pulse 1.6s ease-in-out infinite}@keyframes pulse{50%{box-shadow:0 0 22px 1px var(--brass-glow)}}.trick-seat-letter{color:var(--muted);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap}.trick-seat-letter.lead{color:var(--brass)}.tricks-won{display:flex;gap:calc(8px * var(--u));align-items:center;white-space:nowrap}.trick-track-end{color:var(--muted);font-size:calc(.8rem * var(--u));letter-spacing:.06em}.trick-track-end b{color:var(--text);font-family:var(--font-serif);font-size:calc(.95rem * var(--u))}.trick-track-end.ns b{color:var(--team-ns)}.trick-track-end.ew b{color:var(--team-ew)}.trick-bar{display:inline-flex;gap:calc(3px * var(--u))}.trick-bar i{position:relative;width:calc(11px * var(--u));height:calc(14px * var(--u));border-radius:calc(2px * var(--u));background:#ffffff17;border:1px solid rgba(255,255,255,.08)}.trick-bar i.ns{background:linear-gradient(180deg,#e5675c,#a93f37);border-color:#6e201d;box-shadow:0 0 5px -1px #e5675c8c}.trick-bar i.ew{background:linear-gradient(180deg,#5b8de8,#2e5cb2);border-color:#1f3d80;box-shadow:0 0 5px -1px #5b8de88c}.trick-bar i.goal:after{content:"";position:absolute;top:calc(-5px * var(--u));left:50%;transform:translate(-50%);border-left:calc(4px * var(--u)) solid transparent;border-right:calc(4px * var(--u)) solid transparent;border-top:calc(5px * var(--u)) solid var(--brass)}.trick-bar i.goal{border-color:var(--brass);box-shadow:0 0 6px -1px var(--brass-glow)}.result-banner{display:flex;flex-direction:column;align-items:center;gap:.4rem;text-align:center}.result-contract{font-family:var(--font-serif);font-size:2rem;font-weight:700;letter-spacing:.04em}.result-outcome{color:var(--muted);font-size:.92rem}.result-score{font-family:var(--font-serif);font-size:1.7rem;font-weight:700;margin-top:.1rem}.result-score.pos.ns,.result-score.pos.team-a{color:var(--team-ns)}.result-score.pos.ew,.result-score.pos.team-b{color:var(--team-ew)}.btn-summary{margin-top:.6rem;padding:.55rem 1.2rem;background:linear-gradient(180deg,#2a3a52,#1a2438);border:1px solid #3a4a66;color:#cfd9ec;font-weight:700;letter-spacing:.04em;border-radius:9px;cursor:pointer;transition:filter .12s,box-shadow .12s}.btn-summary:hover{filter:brightness(1.15);box-shadow:0 4px 14px -4px #78a0dc66}.ben-warming{color:var(--brass-hi);font-weight:600;animation:ben-warming-pulse 1.6s ease-in-out infinite}@keyframes ben-warming-pulse{0%,to{opacity:.55}50%{opacity:1}}.btn-discard{background:linear-gradient(180deg,#4a2a2a,#2c1818);border:1px solid #6b3a3a;color:#f0c8c8;font-weight:600}.btn-discard:hover{filter:brightness(1.18);box-shadow:0 4px 14px -4px #c4505066}.btn-claim{background:linear-gradient(180deg,#523a16,#2e2010);border:1px solid #6b521f;color:#f0dcaa;font-weight:700}.btn-claim:hover{filter:brightness(1.18);box-shadow:0 4px 14px -4px #c4a05080}.claim-sheet{width:min(440px,92vw)}.claim-body{display:flex;flex-direction:column;gap:.7rem}.claim-context{margin:0;color:var(--muted);font-size:.92rem;text-align:center}.claim-num-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.4rem;margin-top:.4rem}.claim-num{font-family:var(--font-serif);font-weight:700;font-size:1.05rem;padding:.5rem 0}.claim-banner{position:fixed;left:50%;bottom:4.5rem;transform:translate(-50%);z-index:180;display:inline-flex;align-items:center;gap:.7rem;flex-wrap:wrap;padding:.6rem 1rem;background:linear-gradient(180deg,#3a2c10,#1f170a);border:1px solid #6b521f;border-radius:999px;color:#f0dcaa;font-weight:600;box-shadow:0 12px 32px -10px #000000a6}.claim-banner .claim-text{font-family:var(--font-sans)}.claim-banner .claim-result{color:var(--brass-hi);font-family:var(--font-serif);font-weight:800}.claim-banner .claim-waiting{color:var(--muted);font-size:.85rem}.btn-claim-accept{padding:.35rem .9rem;background:linear-gradient(180deg,#2a6a40,#163d24);border:1px solid #4b8c5c;color:#d8f0dd;font-weight:700;border-radius:999px}.btn-claim-accept:hover{filter:brightness(1.18)}.btn-claim-reject{padding:.35rem .9rem;background:linear-gradient(180deg,#6a2a2a,#3d1616);border:1px solid #8c4b4b;color:#f0d8d8;font-weight:700;border-radius:999px}.btn-claim-reject:hover{filter:brightness(1.18)}.board-popup{z-index:220;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;font-family:var(--font-serif);font-weight:700;color:#fff;box-shadow:0 24px 64px -18px #000000d9,0 0 0 1px #ffffff0a;border-radius:18px}.board-popup.bp-team-a{background:linear-gradient(180deg,#d04e46f7,#a03030f7);border:1px solid rgba(255,200,200,.45)}.board-popup.bp-team-b{background:linear-gradient(180deg,#487adcf7,#2854a8f7);border:1px solid rgba(200,220,255,.45)}.board-popup.bp-team-tie{background:linear-gradient(180deg,#323840f7,#222830f7);color:var(--text);border:1px solid var(--line)}.bp-side-cell{display:flex;flex-direction:column;align-items:center;gap:.25rem}.bp-side-label{font-family:var(--font-sans);font-weight:700;font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;opacity:.85}.bp-side-score{font-family:var(--font-serif);font-weight:800;font-variant-numeric:tabular-nums;line-height:1}.bp-side-score.neutral{color:#fff9}.bp-side-score.team-a{color:#5a1010;text-shadow:0 1px 0 rgba(255,220,220,.25)}.bp-side-score.team-b{color:#0e2e6d;text-shadow:0 1px 0 rgba(220,230,255,.25)}.bp-center-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1;padding:0 1rem}.bp-imp-num{font-family:var(--font-serif);font-weight:900;font-variant-numeric:tabular-nums;letter-spacing:.02em;color:#fff;position:relative}.bp-imp-num.tie{color:#ffffffb3}.bp-imp-label{font-family:var(--font-sans);font-weight:800;font-size:1.4rem;letter-spacing:.22em;text-transform:uppercase;opacity:.95;margin-top:.35rem}.bp-imp-gold{background:linear-gradient(180deg,#ffe89a,#f0c44c 45%,#b58220);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 18px rgba(240,196,76,.55)}.bp-imp-shimmer{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(100deg,#fff0 35%,#ffffffe6,#fff0 65%);-webkit-background-clip:text;background-clip:text;color:transparent;pointer-events:none;background-size:220% 100%;animation:bp-shimmer 1.6s ease-in-out infinite}@keyframes bp-shimmer{0%{background-position:180% 0}to{background-position:-80% 0}}.board-popup-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);min-width:460px;padding:1.6rem 2.6rem;gap:1.4rem;animation:bp-center-pop 5s cubic-bezier(.2,.7,.2,1) both}.board-popup-center .bp-side-score{font-size:2rem}.board-popup-center .bp-imp-num{font-size:5.2rem}.board-popup-center .bp-imp-num:not(.bp-imp-gold){text-shadow:0 2px 14px rgba(0,0,0,.35)}@keyframes bp-center-pop{0%{opacity:0;transform:translate(-50%,-50%) scale(.55)}4%{opacity:1;transform:translate(-50%,-50%) scale(1.08)}10%{transform:translate(-50%,-50%) scale(1)}90%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-50%) scale(.95)}}.board-popup-corner{position:fixed;bottom:1.2rem;right:1.2rem;padding:.55rem 1rem;gap:.55rem;border-radius:14px;animation:bp-corner-slide 5s cubic-bezier(.2,.7,.2,1) both}.board-popup-corner .bp-side-score{font-family:Hanken Grotesk,Inter,sans-serif;font-weight:800;font-size:1.4rem}.board-popup-corner .bp-imp-num{font-size:2.1rem}.board-popup-corner .bp-center-cell{padding:0 .55rem}@keyframes bp-corner-slide{0%{opacity:0;transform:translate(140%)}5%{opacity:1;transform:translate(0)}95%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(140%)}}.btn-dd{padding:.55rem 1.2rem;background:linear-gradient(180deg,#4a3a1c,#2e220e);border:1px solid #6b521f;color:#f0dcaa;font-weight:700;letter-spacing:.04em;border-radius:9px;cursor:pointer;transition:filter .12s,box-shadow .12s}.btn-dd:hover{filter:brightness(1.18);box-shadow:0 4px 14px -4px #c4a05080}.result-btn-row{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap;margin-top:.6rem}.result-btn-row .btn-summary{margin-top:0}.dd-sheet{width:min(880px,94vw)}.dd-row{display:flex;gap:1.2rem;align-items:flex-start;flex-wrap:wrap}.dd-row-left{flex:0 1 auto;min-width:0}.dd-row-right{flex:1 1 360px;min-width:280px;padding-left:1rem;border-left:1px solid var(--line)}@media (max-width: 720px){.dd-sheet{width:min(520px,94vw)}.dd-row{flex-direction:column}.dd-row-right{border-left:none;padding-left:0;padding-top:.8rem;border-top:1px solid var(--line)}}.dd-body{display:flex;flex-direction:column;gap:1rem;align-items:center}.dd-grid-wrap{display:flex;flex-direction:column;gap:.7rem;align-items:center}.dd-grid{border-collapse:collapse;font-variant-numeric:tabular-nums;font-family:var(--font-serif)}.dd-grid th,.dd-grid td{padding:.4rem .7rem;text-align:center;border:1px solid var(--line);font-weight:600}.dd-grid .dd-corner{border-color:transparent}.dd-grid .dd-strain{background:var(--panel-2);font-size:1rem}.dd-grid .dd-seat{font-family:var(--font-serif);font-weight:800;font-size:1rem;background:var(--panel-2)}.dd-grid .dd-seat.team-ns{color:var(--team-ns)}.dd-grid .dd-seat.team-ew{color:var(--team-ew)}.dd-grid .dd-cell{background:var(--panel);color:var(--muted);font-size:.95rem}.dd-grid .dd-cell-pos{color:var(--text)}.dd-grid .dd-cell-game{background:linear-gradient(180deg,#c4a0502e,#c4a05014);color:var(--brass-hi)}.dd-grid .dd-cell-slam{background:linear-gradient(180deg,#c4a05059,#c4a0502e);color:#fff;font-weight:800}.dd-par{display:flex;flex-direction:column;gap:.4rem;align-items:center;padding-top:.6rem;border-top:1px dashed var(--line);width:100%;text-align:center}.dd-par-title{font-family:var(--font-sans);font-weight:700;font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.dd-par-score{font-family:var(--font-serif);font-weight:800;font-size:1.1rem;white-space:nowrap}.dd-par-row{white-space:nowrap}.dd-par-score.ns,.dd-par-score.team-a{color:var(--team-ns)}.dd-par-score.ew,.dd-par-score.team-b{color:var(--team-ew)}.dd-par-row .st-S{color:var(--suit-S);font-size:1.05em}.dd-par-row .st-H{color:var(--suit-H);font-size:1.05em}.dd-par-row .st-D{color:var(--suit-D);font-size:1.05em}.dd-par-row .st-C{color:var(--suit-C);font-size:1.05em}.dd-par-row .st-NT{font-size:.9em;margin-left:.05em}.dd-par-row .dbl-mark{font-family:var(--font-serif);font-weight:800;margin:0 .05em 0 .18em}.dd-par-row .dbl-mark.x{color:var(--brass)}.dd-par-row .dbl-mark.xx{color:var(--brass-hi);font-weight:900;letter-spacing:-.05em}.dd-par-row .decl{font-family:var(--font-serif);font-weight:700}.dd-par-row .decl.ns,.dd-par-row .decl.team-a{color:var(--team-ns)}.dd-par-row .decl.ew,.dd-par-row .decl.team-b{color:var(--team-ew)}.dd-par-tricks{width:100%;margin-top:.15rem;color:var(--muted);font-size:.88rem}.dd-compare{display:flex;gap:1.2rem;align-items:flex-start;margin-top:.8rem;flex-wrap:wrap}.dd-compare>.dd-par{flex:1 1 0;min-width:0;margin-top:0}.dd-actual{padding-right:.7rem}.dd-compare>.dd-par.dd-actual+.dd-par{border-left:1px solid var(--line);padding-left:.7rem}.dd-par-list{display:flex;flex-direction:column;gap:.2rem;font-size:.85rem;color:var(--muted)}.dd-par-row .lv{font-family:var(--font-serif);font-weight:700;color:var(--text)}.replay-dd{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:.7rem .9rem .9rem;display:flex;flex-direction:column;gap:.5rem}.replay-dd-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.replay-dd h3{margin:0;font-family:var(--font-serif);font-weight:700;font-size:.95rem;color:var(--brass-hi);letter-spacing:.04em}.replay-dd-expand{background:transparent;border:1px solid var(--line);color:var(--muted);width:1.6rem;height:1.6rem;border-radius:4px;font-size:1rem;line-height:1;cursor:pointer;padding:0;display:inline-flex;align-items:center;justify-content:center}.replay-dd-expand:hover{color:var(--brass-hi);border-color:var(--brass)}.replay-dd .hint{color:var(--muted);font-size:.78rem;margin:0}.replay-dd .btn-dd{align-self:flex-start;padding:.35rem .7rem;font-size:.82rem}.replay-dd .replay-dd-error{color:#f7c8c8;background:#b43c3c2e;border:1px solid rgba(220,100,100,.35);border-radius:8px;padding:.5rem .7rem;font-size:.82rem;margin:0}.replay-dd .dd-grid{font-size:.78rem}.replay-dd .dd-grid th,.replay-dd .dd-grid td{padding:.25rem .45rem}.sayc-sheet{width:min(760px,95vw);max-height:90vh;display:flex;flex-direction:column;padding-bottom:.4rem}.sayc-modal .summary-head{margin-bottom:.6rem}.summary-modal .sayc-sheet-frame{width:98vw;max-width:1800px;height:94vh;max-height:94vh;padding:.8rem .8rem .4rem}.sayc-iframe{flex:1;width:100%;border:1px solid var(--line);border-radius:10px;background:var(--bg);display:block}@media (max-width: 540px){.summary-modal .sayc-sheet-frame{width:98vw;height:94vh;padding:.6rem .5rem .3rem}}.sayc-tabs{display:flex;flex-wrap:wrap;gap:.3rem;padding:.2rem 0 .6rem;border-bottom:1px solid var(--line);margin:0 -.2rem .4rem}.sayc-tab{font-family:var(--font-sans);font-size:.82rem;font-weight:600;padding:.4rem .75rem;border-radius:8px 8px 0 0;background:transparent;color:var(--muted);border:1px solid transparent;border-bottom:none;cursor:pointer;transition:color .12s ease,background .12s ease,border-color .12s ease;position:relative}.sayc-tab:hover{color:var(--text);background:#ffffff0a}.sayc-tab-active{color:var(--brass-hi);background:var(--panel);border-color:var(--line)}.sayc-tab-active:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--panel)}.sayc-body{display:flex;flex-direction:column;gap:0;overflow-y:auto;padding:.2rem .2rem .8rem;flex:1 1 auto;min-height:0}.sayc-page{display:flex;flex-direction:column;gap:.9rem}.sayc-page-title{margin:0;font-family:var(--font-serif);font-weight:700;font-size:1.18rem;letter-spacing:.02em;color:var(--brass-hi)}.sayc-page-intro{margin:0;font-size:.9rem;color:var(--muted);line-height:1.55;padding:.5rem .7rem;background:#ffffff08;border-left:2px solid var(--brass-lo);border-radius:0 6px 6px 0}.sayc-quick{display:flex;flex-direction:column;gap:.3rem}.sayc-quick-label{font-family:var(--font-sans);font-weight:700;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.sayc-block{display:flex;flex-direction:column;gap:.4rem;padding-top:.6rem;border-top:1px dashed var(--line)}.sayc-block-heading{margin:0;font-family:var(--font-serif);font-weight:700;font-size:1rem;letter-spacing:.02em;color:var(--text)}.sayc-para{margin:0;font-size:.9rem;line-height:1.6;color:var(--text)}.sayc-bullet{display:flex;gap:.5rem;align-items:flex-start;font-size:.88rem;line-height:1.55;color:var(--text);padding-left:.4rem}.sayc-bullet-dot{color:var(--brass-hi);font-weight:700;flex:0 0 auto}.sayc-table{width:100%;border-collapse:collapse;font-family:var(--font-sans);font-size:.88rem;background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:hidden}.sayc-block .sayc-table{margin-top:.2rem}.sayc-table tr{border-bottom:1px solid rgba(255,255,255,.05)}.sayc-table tr:last-child{border-bottom:none}.sayc-table td{padding:.45rem .7rem;vertical-align:top;line-height:1.5}.sayc-bid{font-family:var(--font-serif);font-weight:700;color:var(--text);white-space:nowrap;width:1%;background:#ffffff06;border-right:1px solid rgba(255,255,255,.05)}.sayc-bid .st-S{color:var(--suit-S);font-size:1.05em}.sayc-bid .st-H{color:var(--suit-H);font-size:1.05em}.sayc-bid .st-D{color:var(--suit-D);font-size:1.05em}.sayc-bid .st-C{color:var(--suit-C);font-size:1.05em}.sayc-bid .st-NT{font-size:.9em;color:var(--muted)}.sayc-meaning{color:var(--text)}.sayc-meaning .st-S{color:var(--suit-S)}.sayc-meaning .st-H{color:var(--suit-H)}.sayc-meaning .st-D{color:var(--suit-D)}.sayc-meaning .st-C{color:var(--suit-C)}.sayc-para .st-S,.sayc-bullet .st-S{color:var(--suit-S)}.sayc-para .st-H,.sayc-bullet .st-H{color:var(--suit-H)}.sayc-para .st-D,.sayc-bullet .st-D{color:var(--suit-D)}.sayc-para .st-C,.sayc-bullet .st-C{color:var(--suit-C)}@media (max-width: 540px){.sayc-sheet{width:97vw;padding:1rem .8rem .6rem}.sayc-tab{font-size:.74rem;padding:.3rem .55rem}.sayc-page-title{font-size:1.05rem}.sayc-page-intro{font-size:.82rem;padding:.4rem .55rem}.sayc-table{font-size:.8rem}.sayc-table td{padding:.35rem .5rem}.sayc-para,.sayc-bullet{font-size:.82rem}.sayc-block-heading{font-size:.92rem}}.summary-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;background:#040806bd;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);opacity:0;visibility:hidden;transition:opacity .16s ease}.summary-modal.open{opacity:1;visibility:visible}.summary-sheet{width:min(720px,92vw);max-height:86vh;overflow-y:auto;background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);border:1px solid var(--line);border-radius:14px;box-shadow:0 30px 80px -20px #000c;padding:1.2rem 1.6rem 1.4rem}.summary-head{display:flex;align-items:center;gap:.8rem;margin-bottom:.8rem}.summary-head h3{margin:0;flex:1;font-family:var(--font-serif);font-weight:700;font-size:1.15rem;letter-spacing:.02em;color:var(--text)}.summary-close{width:2rem;height:2rem;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:#0d1116;border:1px solid var(--line);color:var(--muted);font-size:1.3rem;line-height:1;cursor:pointer;padding:0}.summary-close:hover{color:var(--text);border-color:var(--brass-lo)}.summary-body{font-family:var(--font-sans);font-size:.96rem;line-height:1.6;color:var(--text)}.summary-body h2,.summary-body h3,.summary-body h4{font-family:var(--font-serif);margin:1rem 0 .4rem;color:var(--brass-hi);letter-spacing:.02em}.summary-body h3{font-size:1.05rem}.summary-body p{margin:.5rem 0}.summary-body ul{padding-left:1.4rem;margin:.4rem 0}.summary-body li{margin:.2rem 0}.summary-body strong{color:var(--brass-hi)}.summary-body code{background:#ffffff0f;padding:0 .3rem;border-radius:4px;font-family:Hanken Grotesk,monospace}.summary-loading{color:var(--muted);font-style:italic}.summary-loading-sub{font-size:.82rem;opacity:.7;margin-top:.3rem}.summary-error{color:var(--bad);font-family:monospace;font-size:.85rem;white-space:pre-wrap}.bid-bubble{display:inline-flex;align-items:center;gap:.15rem;font-family:var(--font-serif);font-weight:700;font-size:1rem;background:linear-gradient(180deg,#fbfaf5,#ece7da);color:#14181d;border:1px solid #cfc7b4;border-radius:8px;padding:.15rem .5rem;box-shadow:0 3px 7px -3px #00000080}.bid-log{position:absolute;display:flex;gap:calc(5px * var(--u));z-index:5}.bid-log .bid-bubble{font-size:calc(.85rem * var(--u));padding:0;white-space:nowrap;width:calc(40px * var(--u));height:calc(26px * var(--u));justify-content:center;align-items:center;gap:calc(1px * var(--u));box-sizing:border-box}.dir-log-S{bottom:100%;right:calc(12px * var(--u));margin-bottom:calc(7px * var(--u));flex-direction:row-reverse}.dir-log-N{top:100%;left:calc(12px * var(--u));margin-top:calc(7px * var(--u));flex-direction:row}.dir-log-N .bid-bubble{transform:rotate(180deg)}.dir-log-W{left:100%;bottom:calc(12px * var(--u));margin-left:calc(-3px * var(--u));flex-direction:column-reverse}.dir-log-W .bid-bubble{transform:rotate(90deg);margin:calc(8px * var(--u)) 0}.dir-log-E{right:100%;top:calc(12px * var(--u));margin-right:calc(-3px * var(--u));flex-direction:column}.dir-log-E .bid-bubble{transform:rotate(-90deg);margin:calc(8px * var(--u)) 0}.bid-bubble.pass{color:var(--faint);background:#1a1f26;border-color:var(--line)}.bid-bubble .st-S{color:var(--suit-S);font-size:1.3em;line-height:1}.bid-bubble .st-H{color:var(--suit-H);font-size:1.3em;line-height:1}.bid-bubble .st-D{color:var(--suit-D);font-size:1.3em;line-height:1}.bid-bubble .st-C{color:var(--suit-C);font-size:1.3em;line-height:1}.bid-bubble .st-NT{font-size:.9em;color:#41474f}.bid-bubble.dbl,.bid-bubble.rdbl{color:#fff;font-weight:800;font-family:var(--font-sans);justify-content:center;letter-spacing:.06em}.bid-bubble.dbl{background:linear-gradient(180deg,#c0403a,#8f2a26);border-color:#6e201d}.bid-bubble.rdbl{background:linear-gradient(180deg,#7c5cc4,#5a3ea0);border-color:#4a3088}.auction-log{background:linear-gradient(180deg,var(--panel) 0%,#11151a 100%);border:1px solid var(--line);padding:.9rem 1rem;border-radius:12px}body.first-mount .auction-log{animation:rise .6s .2s both}.auction-log h3{margin:0 0 .7rem;font-size:.72rem;color:var(--faint);font-weight:700;letter-spacing:.28em;text-transform:uppercase;display:flex;align-items:center;gap:.5rem}.auction-log h3:after{content:"";flex:1;height:1px;background:var(--line)}.auction-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.25rem .3rem;font-family:var(--font-serif);font-size:.93rem;text-align:center}.auction-head{color:var(--faint);font-size:.72rem;font-family:var(--font-sans);letter-spacing:.1em;padding-bottom:.4rem;margin-bottom:.2rem;border-bottom:1px solid var(--line)}.auction-cell{padding:.22rem 0;border-radius:5px;color:var(--text);position:relative}.auction-cell.pass{color:var(--faint)}.auction-cell.bid-S{color:var(--suit-S)}.auction-cell.bid-H{color:var(--suit-H)}.auction-cell.bid-D{color:var(--suit-D)}.auction-cell.bid-C{color:var(--suit-C)}.auction-cell.final{background:#d8b66a24;color:var(--brass-hi);box-shadow:inset 0 0 0 1px var(--brass-lo)}.auction-cell .st{font-size:1.25em;line-height:1;margin-left:.12em}.auction-cell .st.st-NT{font-size:.9em;margin-left:.1em}.auction-cell.has-explain,.bid-bubble.has-explain{cursor:help}.auction-cell.has-explain{text-decoration:underline dotted var(--faint);text-underline-offset:2px}.bid-bubble.has-explain{box-shadow:0 0 0 1px #d4af3759 inset}.auction-explain-popover{position:fixed;z-index:60;max-width:260px;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:.55rem .7rem;box-shadow:0 4px 14px #00000059;font-size:1.05rem;line-height:1.4;color:var(--text);pointer-events:auto;--suit-S: #9bb8e6;--suit-H: #ff7066;--suit-D: #f0b060;--suit-C: #5fc080}.auction-explain-title{font-size:1.1rem}.auction-explain-meta{font-size:.85rem}.auction-explain-title{font-family:var(--font-serif);color:var(--brass-hi);margin-bottom:.3rem}.auction-explain-dist{display:flex;flex-wrap:wrap;gap:.4rem .55rem;margin-bottom:.3rem;align-items:center;line-height:1.4}.dist-chip{display:inline-flex;align-items:center;gap:.2rem;white-space:nowrap;line-height:1}.dist-chip.suit-S{color:var(--suit-S)}.dist-chip.suit-H{color:var(--suit-H)}.dist-chip.suit-D{color:var(--suit-D)}.dist-chip.suit-C{color:var(--suit-C)}.suit-glyph{font-size:1em;line-height:1;display:inline-block}.suit-glyph.suit-S{color:var(--suit-S)}.suit-glyph.suit-H{color:var(--suit-H)}.suit-glyph.suit-D{color:var(--suit-D)}.suit-glyph.suit-C{color:var(--suit-C)}.auction-explain-meta{color:var(--muted)}.btn-review{background:linear-gradient(180deg,#2a3f60,#1c2a40);color:var(--text);border:1px solid #3a567f;padding:.45rem .9rem;border-radius:6px;font-size:.85rem;cursor:pointer}.btn-review:hover{background:linear-gradient(180deg,#324a72,#233454)}.review-sheet{max-width:560px;--suit-S: #9bb8e6;--suit-H: #ff7066;--suit-D: #f0b060;--suit-C: #5fc080}.review-pending{color:var(--brass);font-size:.9rem;margin:0 0 .8rem;padding:.4rem .6rem;background:#d4af3714;border-left:3px solid var(--brass);border-radius:0 4px 4px 0}.review-empty{color:var(--muted);font-style:italic}.review-seat{margin-bottom:1.1rem;padding-bottom:.8rem;border-bottom:1px solid var(--line)}.review-seat:last-child{border-bottom:none;margin-bottom:0}.review-seat-title{font-family:var(--font-serif);font-size:1.05rem;color:var(--brass-hi);margin:0 0 .4rem}.review-summary{margin:0 0 .6rem;font-size:.95rem;color:var(--text)}.review-loss{font-family:var(--font-serif);font-size:1.1rem;color:#ff7066;margin:0 .15rem}.review-mistakes{list-style:none;padding:0;margin:0}.review-mistakes li{padding:.4rem 0;border-bottom:1px dotted rgba(255,255,255,.06);font-size:.9rem;display:flex;flex-wrap:wrap;align-items:center;gap:.2rem}.review-mistakes li:last-child{border-bottom:none}.review-gap{color:#ff7066;font-family:var(--font-serif)}.review-perfect{color:#5fc080;font-size:.9rem;margin:.3rem 0 0}.review-card-chip{display:inline-flex;align-items:center;gap:.1rem;padding:.05rem .3rem;background:#ffffff0d;border-radius:4px;font-weight:600;line-height:1.4}.review-card-chip.suit-S{color:var(--suit-S)}.review-card-chip.suit-H{color:var(--suit-H)}.review-card-chip.suit-D{color:var(--suit-D)}.review-card-chip.suit-C{color:var(--suit-C)}.dd-trajectory-title{margin:0 0 .3rem;font-family:var(--font-serif);color:var(--brass-hi);font-size:1rem}.dd-trajectory-sub{margin:0 0 .7rem;font-size:.78rem;color:var(--muted);line-height:1.4}.dd-trajectory-svg{width:100%;max-width:420px;display:block}.dd-trajectory-band{fill:#ffffff06}.dd-trajectory-hit{fill:transparent;cursor:pointer}.dd-trajectory-hit:hover{fill:#ffffff0f}.rt-mark{display:inline-block;margin-left:.4rem;padding:0 .25rem;font-size:.72rem;font-family:var(--font-sans);font-weight:700;border-radius:3px;cursor:help}.rt-mark.rt-neutral{color:var(--muted);opacity:.55}.rt-mark.rt-good{color:#5fc080;background:#5fc0801f}.rt-mark.rt-bad{color:#ff7066;background:#ff706626}.dd-trajectory-grid{stroke:var(--line);stroke-width:.5;stroke-dasharray:2 3}.dd-trajectory-axis{fill:var(--muted);font-size:9px;font-family:var(--font-sans)}.dd-trajectory-projected{fill:none;stroke:var(--brass);stroke-width:2}.dd-trajectory-dot{fill:var(--brass)}.dd-trajectory-actual{fill:none;stroke:var(--muted);stroke-width:1.5;stroke-dasharray:3 3}.dd-trajectory-legend{display:flex;gap:1.2rem;margin-top:.5rem;font-size:.78rem;color:var(--muted)}.dd-trajectory-legend-item{display:inline-flex;align-items:center;gap:.35rem}.dd-trajectory-swatch{display:inline-block;width:18px;height:2px}.dd-trajectory-swatch.proj{background:var(--brass)}.dd-trajectory-swatch.actual{background:linear-gradient(to right,var(--muted) 50%,transparent 50%);background-size:6px 100%;height:2px}.auction-final b .st{font-size:1.2em;line-height:1;margin-left:.1em}.auction-final b .st.st-NT{font-size:.9em;margin-left:.08em}.auction-final{margin-top:.7rem;padding-top:.7rem;border-top:1px solid var(--line);font-size:.86rem;color:var(--muted)}.auction-final b{font-family:var(--font-serif);color:var(--brass-hi);font-size:1.05rem}.scoreboard{background:linear-gradient(180deg,var(--panel) 0%,#11151a 100%);border:1px solid var(--line);padding:.9rem 1rem;border-radius:12px;min-height:0;overflow-y:auto}.scoreboard h3{margin:0 0 .7rem;font-size:.72rem;color:var(--faint);font-weight:700;letter-spacing:.28em;text-transform:uppercase;display:flex;align-items:center;gap:.5rem}.scoreboard h3:after{content:"";flex:1;height:1px;background:var(--line)}.scoreboard-table{width:100%;border-collapse:collapse;font-family:var(--font-serif);font-size:.88rem}.scoreboard-table td{padding:.18rem .25rem;border-top:1px solid rgba(255,255,255,.04)}.scoreboard-table tr:first-child td{border-top:none}.scoreboard-table tr.empty td{color:var(--faint)}.sb-num{color:var(--muted);font-family:var(--font-sans);font-size:.78rem;text-align:right;width:1.6rem;padding-right:.45rem!important}.sb-contract{text-align:left;white-space:nowrap;color:var(--text)}.sb-contract.passed{color:var(--faint);font-style:italic}.sb-contract .lv{font-weight:700}.sb-contract .st-S{color:var(--suit-S);font-size:1.15em}.sb-contract .st-H{color:var(--suit-H);font-size:1.15em}.sb-contract .st-D{color:var(--suit-D);font-size:1.15em}.sb-contract .st-C{color:var(--suit-C);font-size:1.15em}.sb-contract .st-NT{font-size:.85em;color:var(--muted)}.sb-result{font-family:var(--font-sans);font-size:.82rem;text-align:center;color:var(--muted);width:2rem}.sb-result.made{color:var(--good)}.sb-result.down{color:var(--bad)}.sb-score{font-family:var(--font-serif);font-weight:700;text-align:right;font-variant-numeric:tabular-nums}.sb-score.ns{color:var(--team-ns)}.sb-score.ew{color:var(--team-ew)}.scoreboard-totals{position:sticky;bottom:0;z-index:2;margin:.6rem -1rem -.9rem;padding:.6rem 1rem .9rem;background:linear-gradient(180deg,#11151a 0%,var(--panel) 100%);border-top:1px solid var(--line);text-align:center;font-family:var(--font-serif);font-weight:700;color:var(--muted)}.sb-total.ns{color:var(--team-ns)}.sb-total.ew{color:var(--team-ew)}.history-table-match thead .mh-table{font-family:var(--font-serif);font-weight:700;font-size:.85rem;letter-spacing:.08em;color:var(--brass-hi);border-bottom:2px solid rgba(229,199,122,.4);text-align:center}.history-table-match thead .mh-spacer{border-bottom:none}.history-table-match thead .mh-imp{color:var(--brass-hi);font-weight:700;text-align:center}.history-table-match tr td:nth-child(3),.history-table-match tr td:nth-child(7),.history-table-match tr td:nth-child(11),.history-table-match tr th:nth-child(3),.history-table-match tr th:nth-child(7){border-right:1px solid var(--line)}.history-table-match .hist-empty{color:var(--faint);text-align:center}.history-table-match .hist-imp{text-align:center}.history-table-match td.hist-clickable{cursor:pointer;transition:background .12s}.history-table-match tr:hover td.hist-clickable{background:#c4a0500f}.history-table-match td.hist-clickable:active{background:#c4a0502e}.history-totals-match .history-total-side.team-a{background:linear-gradient(180deg,#e5675c40,#b43c3c2e);box-shadow:inset 0 0 0 1px #e5675c80}.history-totals-match .history-total-side.team-a .history-total-label,.history-totals-match .history-total-side.team-a .history-total-value{color:var(--team-ns)}.history-totals-match .history-total-side.team-b{background:linear-gradient(180deg,#5b8de840,#3c64b42e);box-shadow:inset 0 0 0 1px #5b8de880}.history-totals-match .history-total-side.team-b .history-total-label,.history-totals-match .history-total-side.team-b .history-total-value{color:var(--team-ew)}.imp-pill{display:inline-block;padding:.18rem .6rem;border-radius:999px;font-family:var(--font-serif);font-weight:800;font-size:.92rem;min-width:2.4rem;text-align:center;font-variant-numeric:tabular-nums}.imp-pill.team-a{background:linear-gradient(180deg,#e5675c66,#b43c3c4d);color:#ffd9d4;box-shadow:inset 0 0 0 1px #e5675c99}.imp-pill.team-b{background:linear-gradient(180deg,#5b8de866,#3c64b44d);color:#d9e3f5;box-shadow:inset 0 0 0 1px #5b8de899}.imp-pill.push{background:var(--panel-3);color:var(--muted);box-shadow:inset 0 0 0 1px var(--line)}.history-hint{margin:1rem 0 0;color:var(--muted);font-size:.85rem;text-align:center}.action{background:linear-gradient(180deg,var(--panel) 0%,#11151a 100%);border:1px solid var(--line);padding:.85rem 1.1rem;border-radius:12px;display:flex;align-items:center;flex-wrap:wrap;gap:.8rem;min-height:58px}body.first-mount .action{animation:rise .6s .36s both}.action>.hint{font-size:.98rem}.action .lead-in{font-family:var(--font-serif);font-weight:600;color:var(--text);font-size:1rem}.action-spacer{flex:1}.bidding-box{display:flex;flex-direction:column;align-items:center;gap:calc(.4rem * var(--u));width:100%}.bid-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:calc(.26rem * var(--u));width:100%;max-width:calc(340px * var(--u))}.bid-col{display:flex;flex-direction:column;gap:calc(.2rem * var(--u));border-radius:9px;padding:calc(.24rem * var(--u))}.bid-col.col-S{background:color-mix(in srgb,var(--suit-S) 24%,#0c1118)}.bid-col.col-H{background:color-mix(in srgb,var(--suit-H) 22%,#0c1118)}.bid-col.col-D{background:color-mix(in srgb,var(--suit-D) 22%,#0c1118)}.bid-col.col-C{background:color-mix(in srgb,var(--suit-C) 22%,#0c1118)}.bid-col.col-N{background:#2a2f37}.bid-col-head{display:flex;align-items:center;justify-content:center;gap:.15rem;font-family:var(--font-serif);font-weight:700;font-size:calc(.92rem * var(--u));padding:0 0 .1rem;color:#fff;opacity:.92}.bid-cell{display:flex;align-items:center;justify-content:center;gap:.08rem;height:calc(24px * var(--u));border-radius:5px;background:#ffffffeb;border:1px solid rgba(0,0,0,.15);font-family:var(--font-serif);font-weight:700;font-size:calc(.9rem * var(--u));cursor:pointer;transition:transform 90ms,box-shadow .12s,filter .12s}.bid-cell .lv{color:#14181d}.col-S .bid-cell .st{color:var(--suit-S);font-size:1.25em}.col-H .bid-cell .st{color:var(--suit-H);font-size:1.25em}.col-D .bid-cell .st{color:var(--suit-D);font-size:1.25em}.col-C .bid-cell .st{color:var(--suit-C);font-size:1.25em}.col-N .bid-cell .st{color:#41474f;font-size:.9em}.bid-cell:hover:not(.spent){transform:translateY(-2px);box-shadow:0 6px 14px -6px #0009,0 0 0 2px var(--brass);z-index:2}.bid-cell.spent{opacity:.28;cursor:not-allowed;filter:grayscale(.5)}.bid-cell.last{box-shadow:0 0 0 2px var(--brass),0 0 12px -2px var(--brass-glow)}.bid-extras{display:flex;gap:.45rem;flex-wrap:wrap}.bid-extras .btn-pass{padding:.32rem 1.6rem;font-weight:700;letter-spacing:.06em;background:linear-gradient(180deg,#2a7a47,#1b5a32);border:1px solid #134a29;color:#eafff0}.bid-extras .btn-pass:hover:not(:disabled){background:linear-gradient(180deg,#318a52,#1f6839)}.bid-extras .btn-dbl{padding:.32rem 1rem;font-weight:800;font-family:var(--font-sans);background:linear-gradient(180deg,#c0403a,#8f2a26);border:1px solid #6e201d;color:#fff;letter-spacing:.06em}.bid-extras .btn-dbl:hover:not(:disabled){background:linear-gradient(180deg,#d24a43,#a3322d)}.bid-extras .btn-rdbl{background:linear-gradient(180deg,#7c5cc4,#5a3ea0);border-color:#4a3088}.bid-extras .btn-rdbl:hover:not(:disabled){background:linear-gradient(180deg,#8d6cd6,#6849b4)}.bid-extras .btn-alert,.bid-extras .btn-stop{padding:.32rem .85rem;font-weight:800;font-family:var(--font-sans);letter-spacing:.08em;font-size:.82rem;color:#f3efe4;background:linear-gradient(180deg,#2a2f37,#1c2027);border:1px solid #3a4049}.bid-extras .btn-alert:hover{border-color:#e08a2e;color:#ffd9a8}.bid-extras .btn-stop:hover{border-color:#c0403a;color:#f3b4b0}.bid-extras .btn-alert.armed{background:linear-gradient(180deg,#e8932f,#c8761c);border-color:#9a5a13;color:#1c1206;box-shadow:0 0 12px -2px #e8932fb3}.bid-extras .btn-stop.armed{background:linear-gradient(180deg,#c0403a,#8f2a26);border-color:#6e201d;color:#fff;box-shadow:0 0 12px -2px #c0403a99}.bid-log .bid-bubble{position:relative}.bid-bubble.alerted:after{content:"";position:absolute;top:calc(-3px * var(--u));right:calc(-3px * var(--u));width:calc(8px * var(--u));height:calc(8px * var(--u));border-radius:50%;background:#f0941f;border:1px solid #fff;box-shadow:0 0 5px -1px #f0941fe6}.auction-cell.alerted:after{content:"";display:inline-block;vertical-align:super;width:5px;height:5px;margin-left:2px;border-radius:50%;background:#f0941f;box-shadow:0 0 4px -1px #f0941fe6}.bidding-box{position:relative}.bid-lock{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:calc(8px * var(--u));background:#0a100cc7;border-radius:12px}.bidding-box.locked .bid-grid,.bidding-box.locked .bid-extras{filter:grayscale(.7) brightness(.6);pointer-events:none}.bid-lock-ring{width:calc(46px * var(--u));height:calc(46px * var(--u));border-radius:50%;border:calc(4px * var(--u)) solid rgba(255,255,255,.14);border-top-color:#c0403a;animation:bidLockSpin 1s linear infinite,bidLockCount 10s linear forwards}@keyframes bidLockSpin{to{transform:rotate(360deg)}}@keyframes bidLockCount{0%{border-top-color:#c0403a}to{border-top-color:#ffffff24}}.bid-lock-text{font-family:var(--font-sans);font-weight:800;letter-spacing:.12em;color:#f3b4b0;font-size:calc(.85rem * var(--u))}.history-sheet{max-width:1080px;margin:1rem auto 2rem;padding:1.4rem 1.6rem 1.6rem;background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 36px #00000059,inset 0 1px #ffffff0a}.history-titlebar{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.6rem;margin-bottom:1.2rem}.history-titlebar>h2.history-title{margin:0;text-align:center;font-family:var(--font-serif);font-weight:700;font-size:1.55rem;letter-spacing:.02em;color:var(--text)}.history-empty{margin:2rem 0;text-align:center;color:var(--muted);font-style:italic}.history-totals{display:grid;grid-template-columns:1fr 1fr;gap:.9rem;margin-bottom:1.4rem}.history-total-side{display:flex;flex-direction:column;align-items:center;padding:.7rem 1rem .85rem;background:var(--panel);border:1px solid var(--line);border-radius:11px;position:relative;overflow:hidden}.history-total-side:before{content:"";position:absolute;inset:0 0 auto 0;height:3px}.history-total-side.ns:before{background:var(--team-ns)}.history-total-side.ew:before{background:var(--team-ew)}.history-total-label{font-family:var(--font-sans);font-weight:700;letter-spacing:.18em;font-size:.78rem;color:var(--muted);text-transform:uppercase}.history-total-value{margin-top:.15rem;font-family:var(--font-serif);font-weight:700;font-size:2.1rem;line-height:1;font-variant-numeric:tabular-nums}.history-total-side.ns .history-total-value{color:var(--team-ns)}.history-total-side.ew .history-total-value{color:var(--team-ew)}.history-table{width:100%;border-collapse:separate;border-spacing:0;background:var(--panel);border:1px solid var(--line);border-radius:11px;overflow:hidden;font-family:var(--font-sans)}.history-table thead th{font-weight:700;text-transform:uppercase;letter-spacing:.14em;font-size:.72rem;color:var(--muted);text-align:center;padding:.7rem .4rem .55rem;background:#0000002e;border-bottom:1px solid var(--line)}.history-table tbody td{padding:.55rem .4rem;text-align:center;border-bottom:1px solid rgba(255,255,255,.04);font-size:.95rem;vertical-align:middle}.history-table tbody tr:last-child td{border-bottom:none}.history-table tbody tr.history-row:not(.empty){cursor:pointer;transition:background-color .12s ease}.history-table tbody tr.history-row:not(.empty):hover{background:#d8b66a14}.history-table tbody tr.empty td{color:var(--faint)}.hist-num{font-family:var(--font-serif);font-weight:700;font-size:1.05rem;color:var(--muted);width:3rem}.history-row:not(.empty) .hist-num{color:var(--text)}.hist-dealer{width:4rem}.dealer-letter{display:inline-block;min-width:1.6rem;padding:.12rem .4rem;border-radius:6px;font-family:var(--font-serif);font-weight:700;color:#fff;background:var(--panel-2)}.dealer-letter.team-ns{background:var(--team-ns)}.dealer-letter.team-ew{background:var(--team-ew)}.hist-vuln{width:4.5rem}.vul-tag{display:inline-block;min-width:2.2rem;padding:.1rem .45rem;border-radius:999px;font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.vul-tag.vul-none{color:var(--faint);background:transparent;letter-spacing:0}.vul-tag.vul-ns{color:#fff;background:#c87038}.vul-tag.vul-ew{color:#fff;background:#7f56a8}.vul-tag.vul-both{color:#fff;background:linear-gradient(90deg,#c87038,#c87038 50%,#7f56a8 50%,#7f56a8)}.hist-contract{font-family:var(--font-serif);font-weight:600;font-size:1rem;letter-spacing:.01em}.hist-contract .lv{font-weight:700}.hist-contract .st-S{color:var(--suit-S);font-weight:700}.hist-contract .st-H{color:var(--suit-H);font-weight:700}.hist-contract .st-D{color:var(--suit-D);font-weight:700}.hist-contract .st-C{color:var(--suit-C);font-weight:700}.hist-contract .st-NT{font-weight:700;letter-spacing:.02em}.hist-contract .decl{display:inline-block;min-width:1.3rem;padding:.05rem .35rem;margin-left:.15rem;border-radius:5px;font-family:var(--font-serif);font-weight:700;color:#fff;font-size:.92rem}.hist-contract .decl.team-ns{background:var(--team-ns)}.hist-contract .decl.team-ew{background:var(--team-ew)}.hist-contract .decl.team-a{background:var(--team-ns)}.hist-contract .decl.team-b{background:var(--team-ew)}.hist-contract.passed{color:var(--muted);font-style:italic}.hist-contract.empty{color:var(--faint)}.hist-result{width:4rem;font-family:var(--font-serif);font-weight:700;font-variant-numeric:tabular-nums}.hist-result.made{color:var(--good)}.hist-result.down{color:var(--bad)}.hist-score{width:5.5rem;font-family:var(--font-serif);font-weight:700;font-size:1.05rem;font-variant-numeric:tabular-nums}.hist-score.ns{color:var(--team-ns)}.hist-score.ew{color:var(--team-ew)}.hist-score.team-a{color:var(--team-ns)}.hist-score.team-b{color:var(--team-ew)}.history-row.empty .hist-score,.history-row .hist-score:empty,.hist-score:not(.ns):not(.ew):not(.team-a):not(.team-b){color:var(--faint)}.hist-replay{width:2.2rem;color:var(--brass);font-size:.85rem}.history-row.empty .hist-replay{color:transparent}.replay-app{display:grid;grid-template-columns:minmax(0,1fr) 256px;grid-template-rows:auto auto minmax(0,1fr) auto;grid-template-areas:"header  header" "banner  banner" "compass sidebar" "ctrl    ctrl";gap:.5rem;height:100%}.replay-app>.app-header{grid-area:header}.replay-app>.header{grid-area:header}.replay-app>.replay-banner{grid-area:banner}.replay-app>.compass{grid-area:compass}.replay-app>.sidebar{grid-area:sidebar;align-self:start;display:flex;flex-direction:column;gap:.7rem;min-height:0}.replay-app>.replay-ctrl{grid-area:ctrl}.replay-app>.error-banner{grid-column:1 / -1}.replay-banner{display:flex;align-items:baseline;gap:.55rem;padding:.3rem .95rem;background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);border:1px solid var(--line);border-radius:9px;font-family:var(--font-serif);font-size:.95rem;line-height:1.25}.rb-label{font-family:var(--font-sans);font-weight:700;letter-spacing:.16em;font-size:.72rem;color:var(--muted);text-transform:uppercase}.rb-num{font-weight:700;color:var(--text);font-size:1.05rem;font-variant-numeric:tabular-nums}.rb-sep{color:var(--faint);margin:0 .1rem}.rb-contract{font-weight:700;letter-spacing:.01em;display:inline-flex;align-items:baseline;gap:.05rem}.rb-contract.passed{color:var(--muted);font-style:italic}.rb-contract .st-S{color:var(--suit-S)}.rb-contract .st-H{color:var(--suit-H)}.rb-contract .st-D{color:var(--suit-D)}.rb-contract .st-C{color:var(--suit-C)}.rb-contract .st-NT{letter-spacing:.02em}.rb-contract .decl{display:inline-block;min-width:1.2rem;padding:.02rem .35rem;margin-left:.3rem;border-radius:5px;color:#fff;font-size:.85rem}.rb-contract .decl.team-ns{background:var(--team-ns)}.rb-contract .decl.team-ew{background:var(--team-ew)}.rb-result{font-weight:700;font-variant-numeric:tabular-nums}.rb-result.made{color:var(--good)}.rb-result.down{color:var(--bad)}.rb-score{margin-left:auto;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.04em;font-size:1rem}.rb-score.ns{color:var(--team-ns)}.rb-score.ew{color:var(--team-ew)}.rb-score.flat{color:var(--muted);font-style:italic;font-weight:600}.replay-timeline{background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:.7rem .85rem .5rem;display:flex;flex-direction:column;min-height:0;max-height:360px}.replay-timeline>h3{margin:0 0 .5rem;font-family:var(--font-serif);font-weight:700;font-size:1rem;letter-spacing:.04em;color:var(--text)}.rt-empty{margin:.4rem 0 .2rem;color:var(--muted);font-style:italic;font-size:.86rem}.rt-list{display:flex;flex-direction:column;overflow-y:auto;gap:1px;margin:0 -.4rem;padding:0 .4rem}.rt-list::-webkit-scrollbar{width:6px}.rt-list::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}.rt-row{display:grid;grid-template-columns:1.7rem 1fr;align-items:center;gap:.5rem;padding:.25rem .45rem;border-radius:6px;cursor:pointer;font-family:var(--font-sans);font-size:.86rem;color:var(--text);transition:background-color .1s ease}.rt-row:hover{background:#ffffff0a}.rt-row.active{background:#d8b66a29;box-shadow:inset 2px 0 0 var(--brass)}.rt-row.rt-deal,.rt-row.rt-start{color:var(--muted);font-style:italic}.rt-idx{font-family:var(--font-serif);font-variant-numeric:tabular-nums;font-size:.78rem;color:var(--faint);text-align:right}.rt-row.active .rt-idx{color:var(--brass);font-weight:700}.rt-body{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:.18rem}.rt-seat{display:inline-block;min-width:1.15rem;padding:0 .3rem;border-radius:4px;font-family:var(--font-serif);font-weight:700;color:#fff;font-size:.78rem;text-align:center}.rt-seat.team-ns{background:var(--team-ns)}.rt-seat.team-ew{background:var(--team-ew)}.rt-call{font-family:var(--font-serif);font-weight:700}.rt-call.pass{color:var(--muted);font-weight:600}.rt-call.dbl{color:var(--brass-hi)}.rt-call .st-S{color:var(--suit-S)}.rt-call .st-H{color:var(--suit-H)}.rt-call .st-D{color:var(--suit-D)}.rt-call .st-C{color:var(--suit-C)}.rt-call .st-NT{letter-spacing:.02em}.rt-card{font-family:var(--font-serif);font-weight:700}.rt-card .r-ten{letter-spacing:-.08em}.rt-card.st-S{color:var(--suit-S)}.rt-card.st-H{color:var(--suit-H)}.rt-card.st-D{color:var(--suit-D)}.rt-card.st-C{color:var(--suit-C)}.replay-ctrl{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:.7rem;background:linear-gradient(180deg,var(--panel-3) 0%,var(--panel-2) 100%);border:1px solid var(--line);border-radius:11px;padding:.55rem .85rem;box-shadow:0 6px 18px #00000038}.replay-nav{display:flex;gap:.25rem;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:.18rem}.replay-nav button{padding:.2rem .55rem;background:transparent;border:none;color:var(--text);font-size:.95rem;border-radius:5px;cursor:pointer;font-family:var(--font-sans)}.replay-nav button:hover{background:#d8b66a24;color:var(--brass-hi)}.replay-slider{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;background:var(--panel);border:1px solid var(--line);border-radius:999px;outline:none}.replay-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--brass);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--brass-lo);cursor:pointer}.replay-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--brass);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--brass-lo);cursor:pointer}.replay-step{font-family:var(--font-serif);font-weight:700;font-variant-numeric:tabular-nums;color:var(--muted);letter-spacing:.04em;min-width:4rem;text-align:right}.score-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;background:#040806bd;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);opacity:0;visibility:hidden;transition:opacity .16s ease}.score-modal.open{opacity:1;visibility:visible}.score-sheet{width:min(880px,94vw);max-height:92vh;overflow:auto;background:linear-gradient(180deg,#12281b,#0c1c13);border:1px solid var(--brass-lo);border-radius:16px;box-shadow:0 30px 80px -20px #000c;padding:1.2rem 1.4rem 1.5rem}.score-sheet-head{display:flex;align-items:center;gap:.8rem;margin-bottom:1rem}.score-sheet-head h3{margin:0;font-family:var(--font-serif);font-weight:600;font-size:1.3rem;color:var(--text);letter-spacing:.02em}.score-vul{color:var(--muted);font-size:.82rem;margin-left:.2rem}.score-vul b{color:var(--brass-hi);font-family:var(--font-serif)}.score-close{margin-left:auto;width:2rem;height:2rem;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:#0d1116;border:1px solid var(--line);color:var(--muted);font-size:1.3rem;line-height:1;cursor:pointer;padding:0}.score-close:hover{color:var(--text);border-color:var(--brass-lo)}.score-selector{display:grid;grid-template-columns:repeat(5,1fr);gap:.3rem;margin-bottom:1.1rem}.score-bid-cell{display:inline-flex;align-items:center;justify-content:center;gap:.12rem;padding:.3rem 0;border-radius:7px;cursor:pointer;background:linear-gradient(180deg,#fbfaf5,#ece7da);color:#14181d;border:1px solid #cfc7b4;font-family:var(--font-serif);font-weight:700;font-size:.92rem}.score-bid-cell .st-NT{font-size:.7em;vertical-align:super;color:#41474f}.score-bid-cell.col-S .st{color:var(--suit-S);font-size:1.2em}.score-bid-cell.col-H .st{color:var(--suit-H);font-size:1.2em}.score-bid-cell.col-D .st{color:var(--suit-D);font-size:1.2em}.score-bid-cell.col-C .st{color:var(--suit-C);font-size:1.2em}.score-bid-cell:hover{box-shadow:0 0 0 1px var(--brass)}.score-bid-cell.selected{background:linear-gradient(180deg,var(--brass-hi),var(--brass));border-color:#6b521f;box-shadow:0 0 14px -3px var(--brass-glow)}.score-card{border:1px solid var(--line);border-radius:12px;overflow:hidden}.score-card-head,.score-col-head,.score-row{display:grid;grid-template-columns:1.1fr repeat(6,1fr)}.score-card-head{background:#00000040}.score-side-label{text-align:center;padding:.4rem 0;font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700}.score-side-label.ns{color:var(--brass-hi);border-right:1px solid var(--line);grid-column:2 / 5}.score-side-label.ew{color:#9aa3ad;grid-column:5 / 8}.score-col-head{background:#0000002e;border-top:1px solid var(--line)}.score-col-head>div{padding:.32rem 0;text-align:center;font-size:.74rem;color:var(--muted)}.score-res-head{font-weight:700}.score-sub.ns{color:#d9bd84}.score-sub.ew{color:#9aa3ad}.score-sub.ns:first-of-type{border-left:1px solid var(--line)}.score-row{border-top:1px solid rgba(255,255,255,.05)}.score-row:nth-child(2n){background:#ffffff05}.score-res{text-align:center;padding:.3rem 0;font-weight:700;color:var(--text);font-family:var(--font-serif)}.score-res.made .score-tricks{color:#6fae87}.score-res.down .score-tricks{color:#c98b86}.score-val{text-align:center;padding:.3rem 0;font-size:.86rem;color:var(--muted)}.score-val.ns{color:#cdb988}.score-val.ew{color:#aab2bb}.score-val.ns:first-of-type{border-left:1px solid var(--line)}.app-header{display:grid;grid-template-columns:minmax(0,1fr) 256px;grid-template-rows:auto auto;grid-template-areas:"match  actions" "sub    meta";column-gap:.7rem;row-gap:18px;align-items:end;padding-bottom:0;line-height:1}.app-header>.match-header{grid-area:match;min-width:0}.app-header>.mh-actions{grid-area:actions}.app-header>.app-subheader{grid-area:sub;min-width:0}.app-header>.header-meta{grid-area:meta}.match-header{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;height:52px}.match-header:after{content:"";position:absolute;left:8%;right:8%;bottom:-10px;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(212,168,90,.35) 30%,rgba(245,215,140,.6) 50%,rgba(212,168,90,.35) 70%,transparent 100%)}.mh-team{display:flex;align-items:center;height:100%;padding:0 24px;gap:14px}.mh-team-left{background:linear-gradient(90deg,#d93b3b66,#d93b3b0d);border-left:2px solid #d93b3b;justify-content:flex-end;clip-path:polygon(0 0,100% 0,calc(100% - 16px) 100%,0 100%)}.mh-team-right{background:linear-gradient(270deg,#3b6fd966,#3b6fd90d);border-right:2px solid #3b6fd9;justify-content:flex-start;clip-path:polygon(16px 0,100% 0,100% 100%,0 100%)}.mh-team-name{font-size:1.05rem;font-weight:700;color:var(--text);letter-spacing:.04em}.mh-team-score{font-family:var(--font-serif);font-weight:800;font-size:1.6rem;line-height:1;font-variant-numeric:tabular-nums}.mh-team-left .mh-team-score{color:#ff6e6e}.mh-team-right .mh-team-score{color:#6ea1ff}.mh-center{display:flex;flex-direction:column;align-items:center;padding:0 22px;gap:2px}.mh-board-tag{font-size:.72rem;color:var(--muted);letter-spacing:.18em;text-transform:uppercase}.mh-match-score{font-family:var(--font-serif);font-weight:800;font-size:1.5rem;color:var(--brass-hi);letter-spacing:.04em;line-height:1;font-variant-numeric:tabular-nums}.mh-match-score-mono{font-size:1.1rem;letter-spacing:.15em}.mh-ms-dash{color:var(--brass);margin:0 10px;font-weight:400}.mh-actions{display:flex;align-items:center;justify-content:flex-end;gap:.4rem;flex-wrap:wrap}.mh-icon-btn{background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);color:var(--text);padding:.35rem .7rem;border-radius:6px;cursor:pointer;font-size:.85rem;font-family:var(--font-body, inherit);white-space:nowrap;transition:border-color .14s,color .14s}.mh-icon-btn:hover{border-color:var(--brass-lo);color:var(--brass-hi)}.mh-status{font-size:.8rem;padding:.25rem .55rem;border-radius:999px;background:#ffffff0a;color:var(--muted);border:1px solid var(--line)}.mh-status.mh-status-open{color:#7fd29a;border-color:#7fd29a66}.mh-status.mh-status-connecting{color:var(--brass-hi);border-color:#d8b66a66}.mh-status.mh-status-closed{color:#ff6e6e;border-color:#ff6e6e66;cursor:pointer}.app-subheader{display:flex;justify-content:center;align-items:center;gap:1.6rem}.app-subheader:empty{display:none}.app-subheader .sub-center{display:flex;gap:.6rem;align-items:center}.app-subheader .sub-center:empty{display:none}.header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem;justify-content:flex-end}.header-meta:empty{display:none}.game-tabs{display:flex;gap:.4rem;margin:0 0 1rem;border-bottom:1px solid var(--line)}.game-tab{flex:1;background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;padding:.55rem .6rem;color:var(--muted);font-weight:700;letter-spacing:.05em;cursor:pointer;transition:color .14s,background .14s,border-color .14s}.game-tab:hover{color:var(--text);background:#ffffff08}.game-tab.active{color:var(--brass-hi);background:linear-gradient(180deg,#c4a05024,#c4a0500a);border-color:var(--line);border-bottom:1px solid var(--bg);margin-bottom:-1px}.mahjong-app{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 340px;grid-template-rows:auto minmax(0,1fr);grid-template-areas:"topbar  topbar" "play    sidebar";column-gap:14px;row-gap:12px;min-height:100vh;padding:.9rem 1.2rem 1.2rem;box-sizing:border-box;background:radial-gradient(ellipse 70% 35% at 50% -10%,rgba(245,200,118,.1) 0%,transparent 65%),linear-gradient(180deg,#1a0f0a,#0d0604 65%,#02040a)}.mahjong-app>.mahjong-topbar{grid-area:topbar}.mahjong-app>.mahjong-play-area{grid-area:play}.mahjong-app>.mahjong-sidebar{grid-area:sidebar}.mahjong-topbar{grid-area:topbar}.mahjong-play-area{display:flex;border-radius:12px;overflow:hidden;background:#0d0604;border:1px solid #4a2c1a;min-height:70vh}.mahjong-frame{flex:1;border:0;width:100%;background:#0d0604}.mahjong-sidebar{display:flex;flex-direction:column;gap:.7rem;min-height:0;overflow-y:auto}.mahjong-side-card{background:linear-gradient(180deg,#281810d9,#140c08d9);border:1px solid #4a2c1a;border-radius:10px;padding:.75rem .9rem;display:flex;flex-direction:column;gap:.45rem}.mahjong-side-h3{margin:0 0 .25rem;font-family:ZCOOL XiaoWei,Fraunces,serif;font-weight:700;font-size:.95rem;letter-spacing:.08em;color:#c69749}.mahjong-side-seat{display:flex;align-items:center;gap:.5rem;padding:.3rem .45rem;background:#ffffff08;border-radius:6px;font-size:.9rem}.mahjong-side-seat-wind{width:1.6rem;height:1.6rem;display:inline-flex;align-items:center;justify-content:center;background:#c4a0502e;color:#f1d99a;border-radius:50%;font-weight:700;font-family:"Noto Serif SC",Songti SC,serif}.mahjong-side-seat-name{color:#e8d4a0}.mahjong-side-seat-empty{color:#6b5a3a;font-style:italic}.mahjong-side-row{display:flex;justify-content:space-between;font-size:.85rem}.mahjong-side-k{color:#9a7a4a}.mahjong-side-v{color:#e8d4a0;font-family:ui-monospace,Roboto Mono,monospace}.mahjong-side-note{margin:.3rem 0 0;font-size:.78rem;color:#7a6038;font-style:italic;line-height:1.5}.mahjong-leaderboard{display:flex;flex-direction:column;gap:.28rem}.mahjong-leader-row{display:grid;grid-template-columns:1.4rem 1.6rem 1fr auto;align-items:center;gap:.5rem;padding:.32rem .5rem;background:#ffffff08;border-radius:6px;font-size:.9rem}.mahjong-leader-rank{color:#9a7a4a;font-family:ui-monospace,Roboto Mono,monospace;font-size:.8rem;text-align:center}.mahjong-leader-wind{width:1.6rem;height:1.6rem;display:inline-flex;align-items:center;justify-content:center;background:#c4a0502e;color:#f1d99a;border-radius:50%;font-weight:700;font-family:"Noto Serif SC",Songti SC,serif;font-size:.85rem}.mahjong-leader-name{color:#e8d4a0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mahjong-leader-name.empty{color:#6b5a3a;font-style:italic}.mahjong-leader-score{color:#f1d99a;font-family:ui-monospace,Roboto Mono,monospace;font-weight:700;font-size:.95rem;min-width:2.5rem;text-align:right}.mahjong-leader-score.positive{color:#8de57d}.mahjong-leader-score.negative{color:#e87a7a}.mahjong-score-note{margin-top:.35rem;font-size:.7rem;color:#d4a85a8c;font-style:italic;letter-spacing:.04em}.mahjong-score-table td.num{font-family:ui-monospace,Roboto Mono,monospace}.mahjong-launcher{gap:.6rem;align-items:stretch}.dou-lobby-tables.single{grid-template-columns:minmax(0,1fr)}.dou-lobby-tables.double{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.dou-lobby-tables.double .lobby-seats{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}.dou-match-status-chip{align-self:center;margin:0 0 .8rem;padding:.45rem 1.1rem;border-radius:999px;font-size:.95rem;font-weight:600;letter-spacing:.04em;text-align:center}.dou-match-status-chip.playing{background:#d99c461f;border:1px solid rgba(217,156,70,.55);color:#f0c882fa}.dou-match-status-chip.completed{background:#78c88c1a;border:1px solid rgba(120,200,140,.5);color:#a0dcb4fa}.dou-match-status-chip.liju-break{background:#c1995c2e;border:1px solid rgba(212,168,90,.6);color:#f0d296}.dou-liju-break-banner{position:relative;margin:0 0 1rem;padding:1.5rem 1.8rem 1.6rem;background:radial-gradient(ellipse 80% 55% at 50% 0%,rgba(255,222,130,.08),transparent 70%),linear-gradient(180deg,#261a0cf0,#160e06f5);border:1px solid transparent;border-radius:14px;box-shadow:0 6px 24px #00000073;display:flex;flex-direction:column;align-items:center;gap:.7rem}.dou-liju-break-banner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:18px;pointer-events:none;background:linear-gradient(140deg,#6b521f,#e3c478 18%,#8a6d2f,#f1d99a 62%,#5a4318 82%,#c9a458);z-index:-1}.dou-liju-break-title{font-family:var(--font-serif);font-weight:800;font-size:1.4rem;color:var(--dou-gold-bright);letter-spacing:.04em;text-shadow:0 0 14px rgba(240,198,104,.4)}.dou-liju-break-winner{font-family:var(--font-serif);font-weight:700;font-size:1.15rem;letter-spacing:.03em;display:flex;align-items:baseline;gap:.4rem}.dou-liju-break-winner-name.team-a{color:#ee6c7a}.dou-liju-break-winner-name.team-b{color:#6da8ff}.dou-liju-break-winner-gap{font-variant-numeric:tabular-nums}.dou-liju-break-winner-gap.team-a{color:#ee6c7a}.dou-liju-break-winner-gap.team-b{color:#6da8ff}.dou-liju-break-winner-tag{font-family:var(--dou-font-ui);font-size:.75rem;padding:.15rem .45rem;border-radius:999px;background:#d4a85a26;border:1px solid rgba(212,168,90,.5);color:#e8c890f2;font-weight:500;letter-spacing:.04em;margin-left:.4rem}.dou-liju-break-tally{display:flex;align-items:baseline;gap:.6rem;margin-top:.2rem;flex-wrap:wrap;justify-content:center}.dou-liju-break-tally-cell{font-family:var(--font-serif);font-weight:700;font-size:1.05rem}.dou-liju-break-tally-cell.red{color:#ee6c7a}.dou-liju-break-tally-cell.blue{color:#6da8ff}.dou-liju-break-tally-sep{color:#d4a85a8c}.dou-liju-break-tally-target{font-size:.78rem;color:#b8a070d9;letter-spacing:.08em;margin-left:.5rem}.dou-liju-break-cta{font-size:1.1rem!important;padding:.7rem 1.8rem!important}.dou-liju-break-stats{font-size:.95rem!important;padding:.6rem 1.3rem!important}.dou-liju-break-actions{display:flex;gap:.8rem;align-items:center;margin-top:.5rem;flex-wrap:wrap;justify-content:center}.dou-liju-break-titlerow{display:flex;flex-direction:column;align-items:center;gap:.25rem}.dou-liju-break-subtitle{font-family:var(--font-serif);font-weight:600;font-size:1rem;letter-spacing:.04em;font-variant-numeric:tabular-nums}.dou-liju-break-subtitle.team-a{color:#ee6c7a}.dou-liju-break-subtitle.team-b{color:#6da8ff}.dou-liju-break-series{display:flex;align-items:baseline;gap:1rem;margin-top:.4rem}.dou-liju-break-series-cell{font-family:var(--font-serif);font-weight:800;font-size:2.5rem;font-variant-numeric:tabular-nums;line-height:1}.dou-liju-break-series-cell.red{color:#ee6c7a}.dou-liju-break-series-cell.blue{color:#6da8ff}.dou-liju-break-series-vs{font-family:var(--font-serif);font-weight:700;font-size:2rem;color:var(--dou-ink-mute);letter-spacing:0;line-height:1;transform:translateY(-.25rem)}.dou-liju-break-target{font-size:.78rem;color:#b8a070d9;letter-spacing:.08em;margin-top:-.1rem}.dou-liju-break-table{width:100%;max-width:880px;border-collapse:separate;border-spacing:0;margin-top:.8rem;font-variant-numeric:tabular-nums}.dou-liju-break-table th,.dou-liju-break-table td{padding:.55rem .8rem;text-align:center;border-bottom:1px solid rgba(212,168,90,.15);font-family:var(--font-serif);font-weight:700}.dou-liju-break-table thead tr th{font-weight:500;font-size:.95rem;color:var(--dou-ink-mute);border-bottom:1px solid rgba(212,168,90,.35);padding:.5rem .6rem}.dou-liju-break-table th.just-done{color:var(--dou-gold-bright);font-weight:700}.dou-liju-break-table th.dou-liju-break-team{text-align:left;font-size:1.1rem;padding-right:1rem}.dou-liju-break-team.team-a{color:#ee6c7a}.dou-liju-break-team.team-b{color:#6da8ff}.dou-liju-break-table-cell{font-size:2rem!important;line-height:1;font-weight:800;font-variant-numeric:tabular-nums;min-width:3.2rem}.dou-liju-break-table-cell.winner.team-a{background:linear-gradient(180deg,#d94656,#a82b3a);color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35)}.dou-liju-break-table-cell.winner.team-b{background:linear-gradient(180deg,#4e7fd6,#2c5cad);color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35)}.dou-liju-break-table-cell.loser.team-a{color:#ee6c7ab3}.dou-liju-break-table-cell.loser.team-b{color:#6da8ffb3}.dou-liju-break-table td.empty{color:var(--dou-ink-dim);font-size:1.6rem}.dou-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;z-index:1000;display:flex;align-items:center;justify-content:center;padding:2rem}.dou-modal-card{background:linear-gradient(180deg,#1e160cfa,#120c06fc);border:1px solid rgba(212,168,90,.55);border-radius:.7rem;box-shadow:0 12px 40px #0009;max-width:900px;width:100%;max-height:90vh;overflow-y:auto;padding:1.4rem 1.6rem}.dou-modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;border-bottom:1px solid rgba(212,168,90,.25);padding-bottom:.7rem}.dou-modal-title{font-family:var(--font-serif);font-weight:800;font-size:1.2rem;color:var(--dou-gold-bright)}.dou-modal-close{font-size:1.4rem!important;width:2.2rem;height:2.2rem;padding:0!important;line-height:1}.dou-modal-tabs{display:flex;gap:.4rem;margin-bottom:1rem}.dou-modal-tab{font-size:.92rem!important;padding:.4rem .9rem!important}.dou-modal-tab.active{background:#d4a85a33!important;border-color:#f0c668b3!important;color:var(--dou-gold-bright)!important}.dou-modal-empty{padding:2rem;text-align:center;color:var(--dou-ink-mute);font-style:italic}.dou-modal-liju-bar{display:flex;gap:.4rem;margin-bottom:1rem;flex-wrap:wrap}.dou-modal-liju-pill{font-size:.85rem!important;padding:.3rem .8rem!important}.dou-modal-liju-pill.active{background:#d4a85a2e!important;border-color:#f0c668a6!important;color:var(--dou-gold-bright)!important}.dou-stats-players-table{width:100%;border-collapse:collapse;font-family:var(--font-serif);font-variant-numeric:tabular-nums}.dou-stats-players-table th,.dou-stats-players-table td{padding:.55rem .7rem;text-align:center;border-bottom:1px solid rgba(212,168,90,.18)}.dou-stats-players-table thead tr th,.dou-stats-players-table tr:first-child th{color:var(--dou-ink-mute);font-weight:500;font-size:.85rem;letter-spacing:.06em}.dou-stats-players-table td:first-child,.dou-stats-players-table th:first-child{text-align:left;padding-left:.4rem}.dou-stats-player-name-cell{font-size:1rem;font-weight:700;letter-spacing:.02em}.dou-stats-player-name-cell.team-a{color:#ee6c7a}.dou-stats-player-name-cell.team-b{color:#6da8ff}.dou-stats-player-rate-cell{font-size:1.1rem;font-weight:700;color:var(--dou-ink);line-height:1.15}.dou-stats-player-rate-cell .rate-pct{font-size:1.1rem;font-weight:700}.dou-stats-player-rate-cell .rate-count{font-size:.7rem;font-weight:500;letter-spacing:.05em;color:var(--dou-ink-mute);margin-top:.1rem}.dou-stats-players-table .max-col{background:linear-gradient(180deg,#f0c668bf,#d4a85a8c);color:#fff!important;box-shadow:inset 0 0 0 1px #f0c668b3}.dou-stats-players-table .max-col .rate-pct,.dou-stats-players-table .max-col .rate-count{color:#fff}.dou-stats-player-cell{display:flex;flex-direction:column;gap:.1rem;line-height:1.1}.dou-stats-player-name{font-size:1rem;font-weight:700;color:var(--dou-ink)}.dou-stats-player-pos{font-size:.7rem;letter-spacing:.1em;color:var(--dou-ink-mute)}.dou-stats-player-num{font-size:1.1rem;font-weight:700}.dou-stats-player-num.pos{color:#ee6c7a}.dou-stats-player-num.neg{color:#6da8ff}.dou-stats-player-num.zero{color:var(--dou-ink-mute)}.dou-stats-player-num.neutral{color:var(--dou-ink)}.dou-stats-player-rate{font-size:.95rem;color:var(--dou-ink);letter-spacing:.02em}.dou-stats-table-wrap{overflow-x:auto;margin-bottom:0}.dou-stats-table{table-layout:fixed;border-collapse:collapse;width:100%;min-width:600px;font-variant-numeric:tabular-nums}.dou-stats-table th,.dou-stats-table td{padding:.4rem .45rem;text-align:center;border:1px solid rgba(212,168,90,.2);font-family:var(--font-serif);font-weight:600;font-size:.95rem}.dou-stats-table thead tr th{color:var(--dou-ink-mute);font-weight:500;font-size:.8rem}.dou-stats-table-label{width:80px;box-sizing:border-box;text-align:center;font-size:.9rem!important;white-space:nowrap;letter-spacing:.06em;padding-left:.4rem!important;padding-right:.4rem!important}.dou-stats-table thead tr th:first-child{width:80px;box-sizing:border-box;text-align:center;padding-left:.4rem;padding-right:.4rem}.dou-stats-table-label.table-1,.dou-stats-table-label.table-2,.dou-stats-table-label.net-label{color:var(--dou-gold-bright)}.dou-stats-cell.team-a{color:#ee6c7a}.dou-stats-cell.team-b{color:#6da8ff}.dou-stats-cell.neutral{color:var(--dou-ink-mute)}.dou-stats-cell.passed-out{color:#b8a0708c;font-style:italic}.dou-stats-cell.clickable{cursor:pointer;transition:background .12s ease}.dou-stats-cell.clickable:hover{background:#d4a85a1f}.dou-stats-cell.net-cell{font-weight:800}.dou-stats-cell.net-cell.team-a{background:#ee6c7a2e}.dou-stats-cell.net-cell.team-b{background:#6da8ff2e}.dou-stats-cell.net-cell.tie{color:var(--dou-ink-mute)}.dou-stats-chart-wrap{display:flex;width:100%;min-width:600px;margin-top:0;height:200px}.dou-stats-chart-yaxis{width:80px;box-sizing:border-box;flex-shrink:0;position:relative;border-top:1px solid rgba(212,168,90,.2)}.dou-stats-chart-yaxis-label{position:absolute;right:8px;transform:translateY(-50%);font-family:var(--dou-font-ui);color:#b8a070d9;font-size:11px;font-variant-numeric:tabular-nums}.dou-stats-chart-plot{flex:1;min-width:0}.dou-stats-chart{width:100%;height:100%;display:block}.dou-stats-chart .axis-grid{stroke:#d4a85a2e;stroke-width:1}.dou-stats-chart .axis-mid{stroke:#d4a85a80;stroke-width:1}.dou-stats-chart .axis-label{font-family:var(--dou-font-ui);fill:#b8a070d9;font-size:11px}.dou-stats-chart-red{fill:#ee6c7a59;stroke:none}.dou-stats-chart-blue{fill:#6da8ff59;stroke:none}.dou-stats-chart-line{fill:none;stroke:#f0c66899;stroke-width:2}.dou-stats-cell.net-cell.clickable{cursor:pointer}.dou-stats-cell.net-cell.selected{outline:2px solid var(--dou-gold-bright);outline-offset:-2px;box-shadow:inset 0 0 0 2px #f0c6682e}.dou-stats-hand-detail{margin-top:1rem;padding:.8rem .9rem;background:#d4a85a0d;border:1px solid rgba(212,168,90,.25);border-radius:.45rem}.dou-stats-hand-detail-title{font-family:var(--font-serif);font-weight:600;font-size:.95rem;color:var(--dou-gold-bright);letter-spacing:.05em;margin-bottom:.6rem;text-align:center}.dou-stats-hand-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}.dou-stats-hand-detail-card{background:#00000047;border:1px solid rgba(212,168,90,.22);border-radius:.4rem;padding:.55rem .7rem}.dou-stats-hand-detail-card-head{font-family:var(--dou-font-ui);color:var(--dou-gold-bright);font-weight:600;font-size:.85rem;letter-spacing:.08em;text-align:center;margin-bottom:.4rem;padding-bottom:.3rem;border-bottom:1px solid rgba(212,168,90,.2)}.dou-stats-hand-detail-row{display:flex;justify-content:space-between;align-items:baseline;padding:.18rem 0;font-family:var(--font-serif);font-size:.9rem}.dou-stats-hand-detail-key{color:var(--dou-ink-mute);font-size:.8rem;letter-spacing:.06em}.dou-stats-hand-detail-val{color:var(--dou-ink);font-variant-numeric:tabular-nums;font-weight:600}.dou-stats-hand-detail-seat{display:inline-block;background:#d4a85a2e;color:var(--dou-gold-bright);border:1px solid rgba(212,168,90,.35);border-radius:.25rem;padding:.05rem .4rem;font-size:.8rem;margin-right:.4rem}.dou-stats-hand-detail-seat.team-a{background:#ee6c7a38;color:#ffd6dc;border-color:#ee6c7a8c}.dou-stats-hand-detail-seat.team-b{background:#6da8ff38;color:#d6e8ff;border-color:#6da8ff8c}.dou-stats-hand-detail-name{color:var(--dou-ink);font-weight:600}.dou-stats-hand-detail-score-row{margin-top:.3rem;padding-top:.3rem;border-top:1px dashed rgba(212,168,90,.25)}.dou-stats-hand-detail-score-row.team-a .dou-stats-hand-detail-score{color:#ee6c7a}.dou-stats-hand-detail-score-row.team-b .dou-stats-hand-detail-score{color:#6da8ff}.dou-stats-hand-detail-score{font-weight:800;font-size:1rem}.dou-stats-hand-detail-empty,.dou-stats-hand-detail-passed{color:#b8a070b3;font-style:italic;font-size:.85rem;text-align:center;padding:.6rem 0}.dou-stats-hand-detail-net{margin-top:.6rem;padding:.45rem .7rem;border-radius:.35rem;display:flex;justify-content:space-between;align-items:baseline;font-family:var(--font-serif);font-weight:700}.dou-stats-hand-detail-net.team-a{background:#ee6c7a29;color:#ee6c7a}.dou-stats-hand-detail-net.team-b{background:#6da8ff29;color:#6da8ff}.dou-stats-hand-detail-net.tie{background:#d4a85a14;color:var(--dou-ink-mute)}.dou-stats-hand-detail-net-key{font-size:.85rem;letter-spacing:.06em;opacity:.8}.dou-stats-hand-detail-net-val{font-size:1.05rem;font-variant-numeric:tabular-nums}.dou-stats-fenchayuan-wrap{display:flex;flex-direction:column;gap:1rem;padding:.4rem 0}.dou-stats-fc-section{display:flex;flex-direction:column;gap:.3rem}.dou-stats-fc-section-head{display:flex;justify-content:space-between;align-items:baseline;font-family:var(--font-serif);letter-spacing:.06em;padding-bottom:.25rem;border-bottom:1px solid rgba(212,168,90,.25);margin-bottom:.25rem}.dou-stats-fc-section-title{color:var(--dou-gold-bright);font-size:.95rem;font-weight:700}.dou-stats-fc-section-sub{color:var(--dou-ink-mute);font-size:.8rem;font-variant-numeric:tabular-nums}.dou-stats-fc-row{display:grid;grid-template-columns:38px 1fr 80px 1fr 38px;align-items:stretch;border-radius:.35rem;overflow:hidden;min-height:44px}.dou-stats-fc-badge{display:flex;align-items:center;justify-content:center;font-family:var(--dou-font-ui);font-size:.85rem;font-weight:600;letter-spacing:.05em;background:#0000008c;color:#dcc8a0d9}.dou-stats-fc-badge.team-a{color:#ffd6dc}.dou-stats-fc-badge.team-b{color:#d6e8ff}.dou-stats-fc-block{display:flex;align-items:center;padding:.45rem .7rem;font-family:var(--font-serif);font-weight:600;font-size:.95rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:transparent}.dou-stats-fc-block.left{justify-content:flex-end;text-align:right}.dou-stats-fc-block.right{justify-content:flex-start;text-align:left}.dou-stats-fc-block.team-a{color:#ee6c7a}.dou-stats-fc-block.team-b{color:#6da8ff}.dou-stats-fc-block.team-a.winner{background:linear-gradient(to right,#ee6c7a73,#ee6c7ac7);color:#fff;font-weight:700}.dou-stats-fc-block.right.team-a.winner{background:linear-gradient(to left,#ee6c7a73,#ee6c7ac7)}.dou-stats-fc-block.team-b.winner{background:linear-gradient(to right,#6da8ff73,#6da8ffc7);color:#fff;font-weight:700}.dou-stats-fc-block.right.team-b.winner{background:linear-gradient(to left,#6da8ff73,#6da8ffc7)}.dou-stats-fc-block.faded{opacity:.45}.dou-stats-fc-badge.team-a.winner{background:#ee6c7a80;color:#fff}.dou-stats-fc-badge.team-b.winner{background:#6da8ff80;color:#fff}.dou-stats-fc-center{background:#0009;color:var(--dou-gold-bright);font-family:var(--font-serif);font-weight:800;font-size:1.25rem;font-variant-numeric:tabular-nums;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}.dou-stats-fc-center.faded{color:#b8a07080}.dou-stats-fc-center-sub{font-size:.65rem;font-weight:400;letter-spacing:.06em;color:var(--dou-ink-mute);margin-top:.25rem}.dou-stats-fc-team-row{display:flex;justify-content:space-between;align-items:baseline;padding:.55rem .9rem;border-radius:.35rem;font-family:var(--font-serif);font-weight:600;background:transparent;min-height:38px}.dou-stats-fc-team-row.team-a{color:#ee6c7a}.dou-stats-fc-team-row.team-b{color:#6da8ff}.dou-stats-fc-team-row.team-a.winner{background:linear-gradient(to right,#ee6c7a73,#ee6c7ac7);color:#fff;font-weight:700}.dou-stats-fc-team-row.team-b.winner{background:linear-gradient(to right,#6da8ff73,#6da8ffc7);color:#fff;font-weight:700}.dou-stats-fc-team-row.faded{opacity:.5}.dou-stats-fc-team-row-label{font-size:.9rem;letter-spacing:.05em}.dou-stats-fc-team-row-val{font-size:1.1rem;font-variant-numeric:tabular-nums;font-weight:700}.dou-stats-fc-summary{display:flex;flex-direction:column;gap:.3rem;margin-top:.4rem;padding-top:.5rem;border-top:1px dashed rgba(212,168,90,.25)}.dou-stats-fc-summary-line{display:flex;justify-content:space-between;align-items:baseline;padding:.4rem .7rem;border-radius:.3rem;font-family:var(--font-serif)}.dou-stats-fc-summary-line.team-a{background:#ee6c7a24;color:#ee6c7a}.dou-stats-fc-summary-line.team-b{background:#6da8ff24;color:#6da8ff}.dou-stats-fc-summary-line.tie{background:#d4a85a0f;color:var(--dou-ink-mute)}.dou-stats-fc-summary-key{font-size:.85rem;letter-spacing:.05em;opacity:.85}.dou-stats-fc-summary-val{font-size:1.05rem;font-weight:700;font-variant-numeric:tabular-nums}.dou-lobby-table-footer{margin-top:.8rem;padding:.6rem .8rem;display:flex;align-items:center;justify-content:space-between;gap:.8rem;background:#0a08058c;border-top:1px solid rgba(193,153,92,.25);border-radius:.4rem}.dou-lobby-table-footer.table-1{border-left:3px solid #d94646}.dou-lobby-table-footer.table-2{border-left:3px solid #4682d9}.dou-lobby-table-footer-hand{font-size:.95rem;color:#d8c08a;font-weight:600}.dou-lobby-table-footer-enter{white-space:nowrap}.dou-lobby-tables.single .lobby-table{min-height:460px;padding:1.6rem}.dou-lobby-tables.single .lobby-seats{grid-template-rows:minmax(120px,1fr) minmax(120px,1fr) minmax(120px,1fr);gap:1rem;height:100%}.dou-lobby-tables.single .lobby-seat{justify-content:center;height:100%}.lobby-seat-letter.neutral{background:linear-gradient(180deg,#5a4318,#3a2a10);color:var(--brass-hi);border-color:var(--brass)}.lobby-seat.neutral{border-color:#d4a85a4d}.entry-tab.disabled,.entry-tab[disabled]{opacity:.45;cursor:not-allowed;text-decoration:line-through}.entry-tab.disabled:hover{background:transparent;color:var(--muted)}:root{--dou-bg: #050811;--dou-ink: #f0eee8;--dou-ink-mute: #a3a8b8;--dou-ink-dim: #5a6072;--dou-gold: #d4a85a;--dou-gold-bright: #f0c668;--dou-cyan: #2bb6c0;--dou-cyan-bright: #5dd5dd;--dou-cyan-deep: #134a52;--dou-orange: #e0863a;--dou-orange-bright: #ff9f5e;--dou-orange-deep: #663a18;--dou-blue: var(--dou-cyan);--dou-blue-bright: var(--dou-cyan-bright);--dou-blue-deep: var(--dou-cyan-deep);--dou-red: var(--dou-orange);--dou-red-bright: var(--dou-orange-bright);--dou-red-deep: var(--dou-orange-deep);--dou-landlord: #e63946;--dou-card-face: linear-gradient(176deg, #fbf8f0 0%, #efe9dc 100%);--dou-card-border: #cfc7b4;--dou-card-red: #c1322b;--dou-card-black: #14181d;--dou-font-card: "Bodoni Moda", "Noto Serif SC", Georgia, serif;--dou-font-display: "Cormorant Garamond", "Noto Serif SC", Georgia, serif;--dou-font-num: "Manrope", "Inter", sans-serif;--dou-font-ui: "Inter", "Noto Sans SC", sans-serif;--dou-font-name: "Noto Serif SC", "Cormorant Garamond", serif}.dou-app{--dou-u: 1;position:relative;display:grid;grid-template-columns:minmax(0,1fr) 340px;grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"topbar  topbar" "play    sidebar" "action  action";column-gap:14px;row-gap:14px;height:100vh;max-height:100vh;padding:1rem 1.4rem 1.4rem;box-sizing:border-box;background:radial-gradient(ellipse 70% 35% at 50% -10%,rgba(245,200,118,.1) 0%,transparent 65%),radial-gradient(ellipse 80% 50% at 50% 15%,rgba(60,80,130,.35) 0%,transparent 65%),radial-gradient(ellipse 40% 70% at 0% 50%,rgba(200,130,70,.06) 0%,transparent 50%),radial-gradient(ellipse 40% 70% at 100% 50%,rgba(70,110,200,.06) 0%,transparent 50%),radial-gradient(ellipse 100% 50% at 50% 110%,rgba(0,0,0,.5) 0%,transparent 60%),linear-gradient(180deg,#0a0e1c,#060914 55%,#02040a);color:var(--dou-ink);font-family:var(--dou-font-ui);overflow:hidden}.dou-app:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1;opacity:.05;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.dou-app:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:2;background:linear-gradient(105deg,rgba(255,220,170,.045) 0%,transparent 18%),linear-gradient(255deg,rgba(180,200,255,.045) 0%,transparent 18%)}.dou-app>.dou-topbar{grid-area:topbar;z-index:5}.dou-app>.dou-play-area{grid-area:play;z-index:5}.dou-app>.dou-sidebar{grid-area:sidebar;z-index:5;display:flex;flex-direction:column;gap:.7rem;min-height:0;overflow-y:auto}.dou-app>.dou-action-panel{grid-area:action;z-index:5}.dou-play-area>*{--dou-u: calc(100cqi/1500px) }.dou-topbar{display:grid;grid-template-columns:minmax(0,1fr) 340px;grid-template-rows:auto auto;grid-template-areas:"match    actions" "sub      meta";column-gap:14px;row-gap:14px;align-items:end}.dou-topbar>.dou-match-bar{grid-area:match}.dou-topbar>.dou-top-actions{grid-area:actions}.dou-topbar>.dou-sub-bar{grid-area:sub}.dou-topbar>.dou-meta-bar{grid-area:meta}.dou-match-bar{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;height:52px}.dou-match-bar:after{content:"";position:absolute;left:8%;right:8%;bottom:-14px;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(212,168,90,.35) 30%,rgba(245,215,140,.6) 50%,rgba(212,168,90,.35) 70%,transparent 100%)}.dou-sub-bar{display:flex;align-items:center;justify-content:center;gap:1.4rem;padding-top:14px;min-height:50px}.dou-score-entry{display:inline-flex;align-items:baseline;gap:1.2rem;font-family:var(--dou-font-ui);background:transparent;border:0;padding:0;box-shadow:none}.dou-score-entry .seat{font-family:var(--dou-font-name);font-size:1.05rem;color:var(--dou-ink-mute);letter-spacing:.04em}.dou-score-entry .score{font-family:var(--dou-font-num);font-size:1.25rem;font-weight:800;color:var(--dou-ink);letter-spacing:.01em}.dou-score-entry .score.win{color:var(--dou-gold-bright)}.dou-score-entry .score.lose{color:#dc6464f2}.dou-score-entry.team-a .seat{color:var(--dou-cyan-bright)}.dou-score-entry.team-b .seat{color:var(--dou-orange-bright)}.dou-team-progress{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto minmax(0,1fr) auto auto;align-items:center;gap:.6rem;width:100%;max-width:760px}.dou-team-progress-label{font-family:var(--dou-font-name);font-weight:700;font-size:1rem;letter-spacing:.04em}.dou-team-progress-label.left{color:var(--dou-cyan-bright)}.dou-team-progress-label.right{color:var(--dou-orange-bright)}.dou-team-progress-score{font-family:var(--font-serif);font-weight:800;font-size:1.2rem;font-variant-numeric:tabular-nums}.dou-team-progress-score.left{color:var(--dou-cyan-bright)}.dou-team-progress-score.right{color:var(--dou-orange-bright)}.dou-team-progress-bar{position:relative;height:12px;background:#00000073;border:1px solid rgba(212,168,90,.25);border-radius:999px;overflow:hidden;box-shadow:inset 0 2px 4px #00000080}.dou-team-progress-bar .fill{position:absolute;top:0;bottom:0;border-radius:999px;transition:width .4s cubic-bezier(.2,.7,.2,1)}.dou-team-progress-bar.left .fill{right:0;background:linear-gradient(90deg,rgba(43,182,192,.25),var(--dou-cyan-bright));box-shadow:0 0 8px #5dd5dd73}.dou-team-progress-bar.right .fill{left:0;background:linear-gradient(90deg,var(--dou-orange-bright),rgba(224,134,58,.25));box-shadow:0 0 8px #ff9f5e73}.dou-team-progress-target{font-family:var(--dou-font-num);font-weight:800;font-size:1.1rem;color:var(--dou-gold-bright);text-shadow:0 0 8px rgba(240,198,104,.4);padding:0 .4rem;letter-spacing:.04em}.dou-team-progress.fourv4.minimal{display:flex;align-items:center;justify-content:center;gap:1rem}.dou-team-progress.fourv4 .dou-team-progress-score.left{color:#ee6c7a}.dou-team-progress.fourv4 .dou-team-progress-score.right{color:#6da8ff}.dou-team-progress.fourv4 .dou-team-progress-score.lead{text-shadow:0 0 10px currentColor}.dou-team-progress.fourv4 .dou-team-progress-score.trail{opacity:.55}.dou-team-progress.fourv4 .dou-team-progress-score{font-family:var(--font-serif);font-weight:800;font-size:1.4rem;min-width:2rem;text-align:center;font-variant-numeric:tabular-nums}.dou-score-divider{display:inline-block;width:1px;height:1.3em;background:linear-gradient(to bottom,transparent 0%,rgba(212,168,90,.45) 35%,rgba(245,215,140,.7) 50%,rgba(212,168,90,.45) 65%,transparent 100%);align-self:center}.dou-meta-bar{display:flex;align-items:center;justify-content:flex-end;padding-top:14px;min-height:50px;gap:.5rem}.dou-team-cell{display:flex;align-items:center;height:100%;padding:0 24px;gap:14px}.dou-team-cell.left{background:linear-gradient(90deg,#2bb6c066,#2bb6c00d);border-left:2px solid var(--dou-cyan);justify-content:flex-end;clip-path:polygon(0 0,100% 0,calc(100% - 16px) 100%,0 100%)}.dou-team-cell.right{background:linear-gradient(270deg,#e0863a66,#e0863a0d);border-right:2px solid var(--dou-orange);justify-content:flex-start;clip-path:polygon(16px 0,100% 0,100% 100%,0 100%)}.dou-team-cell.left.neutral{background:linear-gradient(90deg,#d4a85a59,#d4a85a0d);border-left:2px solid var(--dou-gold)}.dou-team-cell.right.neutral{background:linear-gradient(270deg,#d4a85a59,#d4a85a0d);border-right:2px solid var(--dou-gold)}.dou-team-cell.left.fourv4{background:linear-gradient(90deg,#ee6c7a66,#ee6c7a0d);border-left:2px solid #ee6c7a}.dou-team-cell.right.fourv4{background:linear-gradient(270deg,#6da8ff66,#6da8ff0d);border-right:2px solid #6da8ff}.dou-team-name{font-size:1.05rem;font-weight:700;letter-spacing:.04em}.dou-team-score{font-family:var(--dou-font-num);font-weight:800;font-size:1.6rem;line-height:1}.dou-team-cell.left .dou-team-score{color:var(--dou-cyan-bright)}.dou-team-cell.right .dou-team-score{color:var(--dou-orange-bright)}.dou-team-cell.left.fourv4 .dou-team-score{color:#ee6c7a}.dou-team-cell.right.fourv4 .dou-team-score{color:#6da8ff}.dou-team-cell.left.fourv4 .dou-team-name{color:#ee6c7a}.dou-team-cell.right.fourv4 .dou-team-name{color:#6da8ff}.dou-team-stars{display:inline-flex;align-items:center;gap:4px;line-height:1}.dou-team-star{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;filter:drop-shadow(0 1px 1px rgba(0,0,0,.6));transition:filter .4s ease,transform .4s cubic-bezier(.2,.7,.2,1)}.dou-team-star svg{width:100%;height:100%;display:block}.dou-team-star.lit{transform:scale(1.1)}.dou-team-stars.team-a .dou-team-star.lit{filter:drop-shadow(0 0 4px rgba(93,213,221,.75)) drop-shadow(0 0 10px rgba(93,213,221,.55))}.dou-team-stars.team-b .dou-team-star.lit{filter:drop-shadow(0 0 4px rgba(255,159,94,.75)) drop-shadow(0 0 10px rgba(255,159,94,.55))}.dou-center-cell{display:flex;flex-direction:column;align-items:center;padding:0 22px;gap:2px}.dou-board-tag{font-size:.72rem;color:var(--dou-ink-mute);letter-spacing:.18em}.dou-match-score{font-family:var(--dou-font-num);font-weight:800;font-size:1.5rem;color:var(--dou-gold-bright);letter-spacing:.04em;line-height:1}.dou-match-score .dash{color:var(--dou-gold);margin:0 10px;font-weight:400}.dou-match-score .blue{color:var(--dou-blue-bright)}.dou-match-score .red{color:var(--dou-red-bright)}.dou-top-actions{display:flex;gap:.4rem;padding-left:.5rem}.dou-top-actions .dou-tb-btn{background:linear-gradient(180deg,#ffffff0d,#0000001f);border:1px solid rgba(212,168,90,.3);color:var(--dou-ink);padding:6px 12px;border-radius:6px;font-size:.82rem;cursor:pointer;font-family:var(--dou-font-ui)}.dou-top-actions .dou-tb-btn:hover{border-color:var(--dou-gold-bright);color:var(--dou-gold-bright)}.dou-play-area{position:relative;container-type:inline-size;display:grid;grid-template-columns:auto minmax(60px,auto) minmax(0,1fr) minmax(60px,auto) auto;grid-template-rows:auto auto minmax(40px,1fr) auto;grid-template-areas:"tl-frame  tl-hand   dipai     tr-hand   tr-frame" "tl-frame  tl-zone   .         tr-zone   tr-frame" ".         bl-zone   bl-zone   bl-zone   ." "bl-frame  hand-area hand-area hand-area br-frame";column-gap:calc(20px * var(--dou-u));row-gap:calc(14px * var(--dou-u));min-height:0;padding:calc(36px * var(--dou-u)) calc(44px * var(--dou-u));border-radius:20px;border:6px solid transparent;background:radial-gradient(120% 90% at 50% 8%,#2c4a90,#1a2e60 38%,#0c1c40 86%,#07142e) padding-box,linear-gradient(140deg,#6b521f,#e3c478 18%,#8a6d2f,#f1d99a 62%,#5a4318 82%,#c9a458) border-box;box-shadow:inset 0 0 0 1px #ffffff0d,inset 0 2px 40px #00000073,inset 0 0 120px #00000059,0 16px 50px -18px #000c}.dou-play-area:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:14px;pointer-events:none;opacity:.45;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='120' height='120' filter='url(%23n)' opacity='0.5'/></svg>")}.dou-dipai{position:absolute;top:calc(36px * var(--dou-u));left:50%;transform:translate(-50%);align-self:start;display:flex;gap:calc(8px * var(--dou-u));padding:calc(10px * var(--dou-u)) calc(14px * var(--dou-u));z-index:10;background:linear-gradient(180deg,#ffdcaa0f,#0000002e),linear-gradient(180deg,#28324bb3,#0f1220bf);border:1px solid rgba(212,168,90,.45);border-top-color:#ffdcaa8c;border-radius:5px;box-shadow:inset 0 1px #ffdcaa33,inset 0 -1px #00000059,0 6px 18px #00000080}.dou-mini-card{width:calc(60px * var(--dou-u));height:calc(84px * var(--dou-u));background:var(--dou-card-face);border:1px solid var(--dou-card-border);border-radius:4px;font-family:var(--dou-font-card);font-weight:700;font-size:calc(1.85rem * var(--dou-u));color:var(--dou-card-black);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:calc(3px * var(--dou-u));line-height:1;box-shadow:0 3px 7px #00000080,inset 0 0 0 1px #ffffff80;transition:filter .4s ease,opacity .4s ease}.dou-mini-card.red{color:var(--dou-card-red)}.dou-mini-card .s{font-size:calc(1.3rem * var(--dou-u))}.dou-mini-card.played{filter:grayscale(1) brightness(.55);opacity:.7}@keyframes dou-dipai-reveal{0%{opacity:0;transform:translateY(-30px) scale(.85)}60%{opacity:1;transform:translateY(4px) scale(1.02)}to{opacity:1;transform:translateY(0) scale(1)}}.dou-dipai.fresh{animation:dou-dipai-reveal .7s cubic-bezier(.2,.7,.2,1) both}.dou-dipai.fresh .dou-mini-card{animation:dou-mini-pop .6s cubic-bezier(.2,.7,.2,1) both}.dou-dipai.fresh .dou-mini-card:nth-child(1){animation-delay:.1s}.dou-dipai.fresh .dou-mini-card:nth-child(2){animation-delay:.2s}.dou-dipai.fresh .dou-mini-card:nth-child(3){animation-delay:.3s}@keyframes dou-mini-pop{0%{opacity:0;transform:scale(.5) rotate(-8deg)}60%{opacity:1;transform:scale(1.05) rotate(2deg)}to{opacity:1;transform:scale(1) rotate(0)}}.dou-pframe{position:relative;width:calc(124px * var(--dou-u));z-index:6}.dou-pframe.tl{grid-area:tl-frame;justify-self:start;align-self:start;margin-top:6px}.dou-pframe.tr{grid-area:tr-frame;justify-self:end;align-self:start;margin-top:6px}.dou-pframe.bl{grid-area:bl-frame;justify-self:start;align-self:end;margin-left:28px;margin-bottom:6px}.dou-pframe.br{grid-area:br-frame;justify-self:end;align-self:end;width:calc(86px * var(--dou-u));margin-right:28px;margin-bottom:6px}.dou-avatar{width:100%;aspect-ratio:1 / 1.1;background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(43,182,192,.4),transparent 70%),linear-gradient(180deg,#123237f2,#081619fa);border:1px solid rgba(212,168,90,.32);border-radius:4px;position:relative;overflow:hidden;box-shadow:inset 0 1px #ffdcaa1a,inset 0 -10px 24px #00000080,0 10px 28px #0000008c;display:flex;align-items:center;justify-content:center}.dou-avatar.red{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(224,134,58,.35),transparent 70%),linear-gradient(180deg,#3c2612f2,#160e06fa)}.dou-avatar.neutral{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(212,168,90,.3),transparent 70%),linear-gradient(180deg,#2d2618f2,#141008fa)}.dou-avatar:before,.dou-avatar:after{content:"";position:absolute;width:14px;height:14px;border:1px solid rgba(212,168,90,.85);pointer-events:none}.dou-avatar:before{top:3px;left:3px;border-right:none;border-bottom:none}.dou-avatar:after{bottom:3px;right:3px;border-left:none;border-top:none}.dou-initial{font-family:var(--dou-font-card);font-weight:700;font-size:calc(3.6rem * var(--dou-u));color:#6ea1ff52;line-height:1;letter-spacing:-.03em;font-style:italic}.dou-avatar.red .dou-initial{color:#ff6e6e52}.dou-avatar.neutral .dou-initial{color:#f0c66866}.dou-pframe.br .dou-initial{font-size:calc(2.2rem * var(--dou-u))}.dou-avatar-emoji{font-size:calc(4.5rem * var(--dou-u));line-height:1;filter:drop-shadow(0 2px 6px rgba(0,0,0,.5))}.dou-pframe.br .dou-avatar-emoji{font-size:calc(2.6rem * var(--dou-u))}.dou-name{margin-top:6px;padding:calc(6px * var(--dou-u)) calc(10px * var(--dou-u));background:linear-gradient(180deg,#ffffff14,#00000026),linear-gradient(90deg,var(--dou-blue-deep),var(--dou-blue));color:var(--dou-ink);border-radius:4px;border:1px solid rgba(212,168,90,.3);border-top-color:#ffdcaa66;overflow:hidden;display:flex;align-items:center;justify-content:center;gap:.3rem;min-width:0;box-shadow:inset 0 1px #ffdcaa2e,inset 0 -1px #0000004d,0 4px 12px #00000073}.dou-name-text{font-family:var(--dou-font-name);font-weight:600;font-size:calc(.95rem * var(--dou-u));letter-spacing:.03em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:0 1 auto}.dou-seat-corner{position:absolute;bottom:calc(6px * var(--dou-u));right:calc(6px * var(--dou-u));z-index:3;min-width:calc(20px * var(--dou-u));padding:calc(2px * var(--dou-u)) calc(7px * var(--dou-u));background:linear-gradient(180deg,#281e0ee6,#0f0a04f2);border:1px solid rgba(212,168,90,.55);border-radius:999px;font-family:var(--dou-font-name);font-weight:700;font-size:calc(.78rem * var(--dou-u));color:var(--dou-gold-bright);text-align:center;letter-spacing:.03em;line-height:1.1;box-shadow:0 2px 6px #00000080}.dou-name.red{background:linear-gradient(180deg,#ffffff14,#00000026),linear-gradient(90deg,var(--dou-red-deep),var(--dou-red))}.dou-app.fourv4 .dou-avatar{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(238,108,122,.45),transparent 70%),linear-gradient(180deg,#371218f2,#16080cfa)}.dou-app.fourv4 .dou-avatar.red{background:radial-gradient(ellipse 95% 55% at 50% 0%,rgba(109,168,255,.4),transparent 70%),linear-gradient(180deg,#12243cf2,#080e19fa)}.dou-app.fourv4 .dou-avatar .dou-initial{color:#ee6c7a52}.dou-app.fourv4 .dou-avatar.red .dou-initial{color:#6da8ff52}.dou-app.fourv4 .dou-name{background:linear-gradient(180deg,#ffffff14,#00000026),linear-gradient(90deg,#6e2229,#b53643)}.dou-app.fourv4 .dou-name.red{background:linear-gradient(180deg,#ffffff14,#00000026),linear-gradient(90deg,#1e3f72,#4173c5)}.dou-name.neutral{background:linear-gradient(180deg,#ffffff14,#00000026),linear-gradient(90deg,#5a4318,#b88a3a)}.dou-pframe.br .dou-name{padding:calc(4px * var(--dou-u)) calc(6px * var(--dou-u))}.dou-pframe.br .dou-name-text{font-size:calc(.78rem * var(--dou-u));white-space:normal;text-overflow:clip;line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.dou-pframe.br .dou-seat-corner{font-size:calc(.66rem * var(--dou-u));padding:calc(1px * var(--dou-u)) calc(5px * var(--dou-u))}.dou-pframe.spec .dou-avatar{border-style:dashed;opacity:.7}.dou-watch-dot{position:absolute;top:-8px;right:-8px;width:22px;height:22px;background:var(--dou-gold-bright);color:var(--dou-bg);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.78rem;border:2px solid var(--dou-bg);box-shadow:0 2px 6px #00000080;z-index:2}.dou-lord-badge{position:absolute;top:-20px;left:50%;transform:translate(-50%);background:linear-gradient(180deg,var(--dou-landlord),#a02530);color:#fff;padding:6px 18px 6px 36px;border-radius:100px;font-family:var(--dou-font-num);font-weight:800;font-size:1.15rem;letter-spacing:.04em;box-shadow:0 5px 18px #e6394699;z-index:10;border:1px solid var(--dou-gold-bright);white-space:nowrap}.dou-lord-badge:before{content:"";position:absolute;left:5px;top:50%;transform:translateY(-50%);width:26px;height:26px;background:radial-gradient(circle at 30% 30%,#fde68a,#d97706 70%);border-radius:50%;border:1px solid var(--dou-gold-bright)}.dou-lord-badge:after{content:"★";position:absolute;left:5px;top:50%;transform:translateY(-50%);width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-size:1rem;color:#7a3c00;line-height:1}.dou-avatar.turn{box-shadow:0 0 0 2px var(--dou-gold-bright),0 0 24px #f0c6688c,0 6px 18px #00000080;animation:dou-turn-pulse 1.8s ease-in-out infinite}@keyframes dou-turn-pulse{0%,to{box-shadow:0 0 0 2px var(--dou-gold-bright),0 0 18px #f0c66866,0 6px 18px #00000080}50%{box-shadow:0 0 0 2px var(--dou-gold-bright),0 0 30px #f0c668b3,0 6px 18px #00000080}}.dou-pcard{background:var(--dou-card-face);color:var(--dou-card-black);border-radius:5px;border:1px solid var(--dou-card-border);box-shadow:0 4px 10px -2px #0000008c,inset 0 0 0 1px #ffffff80;font-family:var(--dou-font-card);font-weight:700;-webkit-user-select:none;user-select:none;position:relative;flex-shrink:0;display:flex;flex-direction:column;align-items:flex-start;padding:4px 6px}.dou-pcard.red{color:var(--dou-card-red)}.dou-pcard .corner{display:flex;flex-direction:column;align-items:center}.dou-pcard .rk{font-size:1.65rem;line-height:1}.dou-pcard .rk.r10{letter-spacing:-.12em}.dou-pcard .su{font-size:1rem;line-height:1;margin-top:3px}.dou-pcard.last .big-suit{position:absolute;bottom:14px;right:14px;font-size:2.3rem;line-height:1;opacity:.95}.dou-pcard.last .big-suit.joker{font-size:1.9rem}.dou-hand-row{display:flex;z-index:5}.dou-hand-row.opp-tl{grid-area:tl-hand;align-self:start;justify-self:start;margin-top:10px;margin-left:10px}.dou-hand-row.opp-tr{grid-area:tr-hand;align-self:start;justify-self:end;justify-content:flex-end;margin-top:10px;margin-right:10px}.dou-opp-cards .dou-pcard{width:calc(44px * var(--dou-u));height:calc(64px * var(--dou-u));margin-left:calc(-22px * var(--dou-u));padding:3px 4px}.dou-opp-cards .dou-pcard:first-child{margin-left:0}.dou-opp-cards .dou-pcard .rk{font-size:calc(1.15rem * var(--dou-u))}.dou-opp-cards .dou-pcard .su{font-size:calc(.72rem * var(--dou-u));margin-top:2px}.dou-opp-cards .dou-pcard .corner{width:calc(17px * var(--dou-u));margin-left:-2px}.dou-opp-cards .dou-pcard.last .big-suit{font-size:calc(1.7rem * var(--dou-u));bottom:10px;right:10px}.dou-card-back{width:calc(70px * var(--dou-u));height:calc(102px * var(--dou-u));border-radius:6px;background:radial-gradient(ellipse 90% 45% at 50% 0%,rgba(255,220,170,.1) 0%,transparent 65%),linear-gradient(165deg,#2c3a6a,#1a2342);border:1px solid rgba(212,168,90,.5);display:flex;align-items:center;justify-content:center;font-family:var(--dou-font-num);font-weight:800;font-size:calc(2.3rem * var(--dou-u));color:var(--dou-gold-bright);letter-spacing:-.02em;position:relative;box-shadow:inset 0 1px #ffdcaa33,inset 0 -1px #0006,0 5px 14px #0000008c}.dou-card-back:before{content:"";position:absolute;top:4px;right:4px;bottom:4px;left:4px;border:1px solid rgba(212,168,90,.32);border-radius:3px;pointer-events:none}.dou-hand-row.you{justify-content:center}.dou-your-cards .dou-pcard{width:calc(70px * var(--dou-u));height:calc(102px * var(--dou-u));margin-left:calc(-36px * var(--dou-u));cursor:pointer;transition:transform .16s ease,background .12s ease,border-color .12s ease,box-shadow .16s ease;padding:5px 7px}.dou-your-cards .dou-pcard:first-child{margin-left:0}.dou-your-cards .dou-pcard:hover{background:linear-gradient(176deg,#fff6e0,#f4dfb6);border-color:#b8965a}.dou-your-cards .dou-pcard.selected{transform:translateY(calc(-16px * var(--dou-u)));box-shadow:0 10px 22px #d4a85a8c,inset 0 0 0 1px #fff9;border-color:var(--dou-gold-bright)}.dou-your-cards .dou-pcard.bomb-glow{animation:dou-bomb-glow 3s cubic-bezier(.25,.9,.35,1) 1;animation-fill-mode:backwards;position:relative}.dou-your-cards .dou-pcard.bomb-glow:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;z-index:-1;animation:dou-bomb-glow-halo 3s cubic-bezier(.25,.9,.35,1) 1;animation-fill-mode:backwards;animation-delay:inherit}.dou-your-cards .dou-pcard.bomb-glow:has(+.dou-pcard:not(.bomb-glow)):before{clip-path:inset(-200px calc(36px * var(--dou-u)) -200px -200px)}@keyframes dou-bomb-glow{0%{border-color:#d4a85ad9;transform:translateY(0)}18%{border-color:#ffe8a0;transform:translateY(calc(-3px * var(--dou-u)))}50%{border-color:#ffe8a0;transform:translateY(calc(-3px * var(--dou-u)))}85%{border-color:#d4a85af2;transform:translateY(0)}to{border-color:#d4a85ad9;transform:translateY(0)}}@keyframes dou-bomb-glow-halo{0%{box-shadow:0 0 #ffde8200,0 0 #ffc85000}18%{box-shadow:0 0 22px 6px #ffde82d9,0 0 38px 14px #ffb43c8c}50%{box-shadow:0 0 28px 10px #ffde82bf,0 0 50px 18px #ffb43c73}85%{box-shadow:0 0 12px 4px #ffde8266,0 0 24px 10px #ffb43c33}to{box-shadow:0 0 #ffde8200,0 0 #ffb43c00}}.dou-your-cards .dou-pcard .rk{font-size:calc(1.65rem * var(--dou-u))}.dou-your-cards .dou-pcard .su{font-size:calc(1rem * var(--dou-u));margin-top:4px}.dou-your-cards .dou-pcard .corner{width:calc(24px * var(--dou-u));margin-left:-3px}.dou-your-cards .dou-pcard.last .big-suit{font-size:calc(2.55rem * var(--dou-u));bottom:16px;right:16px}.dou-play-zone{display:flex;align-items:center;z-index:6;min-height:70px}.dou-play-zone.boom-bomb,.dou-play-zone.boom-rocket{animation:dou-boom-shake .9s cubic-bezier(.34,1.56,.64,1) 1;animation-fill-mode:backwards;transform-origin:center center;position:relative}.dou-play-zone.boom-bomb:after,.dou-play-zone.boom-rocket:after{content:"";position:absolute;left:50%;top:50%;width:8px;height:8px;border-radius:50%;pointer-events:none;transform:translate(-50%,-50%);z-index:-1;animation:dou-boom-flash .9s cubic-bezier(.2,.8,.2,1) 1;animation-fill-mode:backwards;animation-delay:inherit}.dou-play-zone.boom-bomb:after{background:radial-gradient(circle,rgba(255,200,80,.95) 0%,rgba(255,140,40,.6) 35%,transparent 70%);box-shadow:0 0 #ffb43ce6}.dou-play-zone.boom-rocket:after{background:radial-gradient(circle,rgba(255,230,255,.95) 0%,rgba(255,80,180,.7) 35%,transparent 70%);box-shadow:0 0 #ff64c8e6}@keyframes dou-boom-shake{0%{transform:scale(.6) rotate(-2deg)}18%{transform:scale(1.18) rotate(2deg)}32%{transform:scale(.96) rotate(-1.5deg)}46%{transform:scale(1.06) rotate(1.5deg)}60%{transform:scale(.99) rotate(-1deg)}75%{transform:scale(1.02) rotate(.5deg)}to{transform:scale(1) rotate(0)}}@keyframes dou-boom-flash{0%{width:8px;height:8px;opacity:0}10%{width:80px;height:80px;opacity:1}60%{width:260px;height:260px;opacity:.6}to{width:380px;height:380px;opacity:0}}.dou-play-zone .dou-pcard{width:calc(70px * var(--dou-u));height:calc(102px * var(--dou-u));margin-left:calc(-36px * var(--dou-u));padding:5px 7px}.dou-play-zone .dou-pcard:first-child{margin-left:0}.dou-play-zone .dou-pcard .rk{font-size:calc(1.65rem * var(--dou-u))}.dou-play-zone .dou-pcard .su{font-size:calc(1rem * var(--dou-u));margin-top:4px}.dou-play-zone .dou-pcard .corner{width:calc(24px * var(--dou-u));margin-left:-3px}.dou-play-zone .dou-pcard.last .big-suit{font-size:calc(2.55rem * var(--dou-u));bottom:16px;right:16px}.dou-play-zone .pass{font-family:var(--dou-font-name);font-weight:500;font-size:1.5rem;color:#fff6;letter-spacing:.04em;padding:8px 4px}.dou-play-zone.zone-tl{grid-area:tl-zone;align-self:start;justify-self:start;margin-left:10px}.dou-play-zone.zone-tr{grid-area:tr-zone;align-self:start;justify-self:end;margin-right:10px}.dou-play-zone.zone-bl{grid-area:bl-zone;align-self:end;justify-self:center;margin-bottom:calc(8px * var(--dou-u))}.dou-hand-area{grid-area:hand-area;display:grid;grid-template-rows:calc(52px * var(--dou-u)) 1fr;row-gap:calc(28px * var(--dou-u));align-items:end;justify-items:center;min-width:0}.dou-hand-controls-slot{display:flex;align-items:center;justify-content:center;min-height:calc(52px * var(--dou-u))}.dou-hand-actions{display:flex;gap:14px;align-items:center;justify-content:center}.dou-combo-label{display:inline-block;background:linear-gradient(180deg,#3c6e4673,#1e4628a6);color:#d8f0d4;border:1px solid rgba(160,220,170,.5);border-radius:999px;font-family:var(--dou-font-name, "Fraunces", serif);font-size:.88rem;letter-spacing:.05em;padding:.25rem .75rem;-webkit-user-select:none;user-select:none}.dou-combo-label.invalid{background:linear-gradient(180deg,#6e323280,#461919b3);color:#f3c8c4;border-color:#dc8c8280}.dou-your-cards .dou-pcard{-webkit-user-select:none;user-select:none;touch-action:none}.dou-action-panel{background:linear-gradient(180deg,#141928d9,#0a0e1ceb);border:1px solid rgba(212,168,90,.22);padding:.7rem 1rem;border-radius:12px;display:flex;align-items:center;flex-wrap:wrap;gap:.9rem;min-height:58px}.dou-action-panel .hint{color:var(--dou-ink-mute);font-size:.95rem;font-family:var(--dou-font-ui)}.dou-action-panel .hint.warn{color:#f0a59df2}.dou-action-panel .spacer{flex:1}.dou-spectator-tag{font-family:var(--dou-font-ui);font-size:.95rem;color:var(--dou-cyan-bright, #5dd5dd);letter-spacing:.04em;padding:.15rem .6rem;border:1px solid rgba(93,213,221,.45);border-radius:999px;background:#5dd5dd1a}.dou-spectator-hint{color:var(--dou-ink-mute);font-size:.9rem;font-family:var(--dou-font-ui)}.dou-spectator-sit{border-color:#5dd5dd99!important;color:var(--dou-cyan-bright, #5dd5dd)!important}.dou-bid-bar{display:flex;gap:14px;z-index:9}.dou-bid-btn{position:relative;background:linear-gradient(180deg,#ffffff0d,#ffffff04 45%,#0000001f);color:#f0ebdceb;border:1px solid rgba(212,168,90,.32);border-radius:14px;padding:12px 30px;font-family:var(--dou-font-name);font-size:1.1rem;font-weight:600;letter-spacing:.18em;cursor:pointer;transition:all .25s cubic-bezier(.2,.7,.3,1);backdrop-filter:blur(24px) saturate(125%);-webkit-backdrop-filter:blur(24px) saturate(125%);box-shadow:inset 0 1px #ffdcaa2e,inset 0 -1px #0006,0 6px 18px #00000073;min-width:96px}.dou-bid-btn:before{content:"";position:absolute;top:1px;left:14%;right:14%;height:1px;background:linear-gradient(90deg,transparent,rgba(245,220,170,.5) 50%,transparent);pointer-events:none}.dou-bid-btn:hover:not(:disabled){background:linear-gradient(180deg,#d4a85a38,#d4a85a0f 60%,#00000014);border-color:#f5d78ca6;color:var(--dou-gold-bright);transform:translateY(-1.5px);box-shadow:inset 0 1px #ffe6b466,inset 0 0 0 1px #d4a85a24,inset 0 -1px #0000004d,0 9px 24px #d4a85a4d}.dou-bid-btn:disabled{background:#ffffff03;color:#ffffff24;border-color:#ffffff0d;cursor:not-allowed;box-shadow:inset 0 1px #ffffff05;-webkit-backdrop-filter:none;backdrop-filter:none}.dou-bid-btn:disabled:before{display:none}.dou-bid-result{color:var(--dou-gold-bright);font-family:var(--dou-font-display);font-size:2.6rem;font-weight:600;letter-spacing:.01em;z-index:7;white-space:nowrap;text-shadow:0 1px 0 rgba(0,0,0,.5),0 2px 14px rgba(0,0,0,.65),0 0 28px rgba(240,198,104,.28)}.dou-bid-result.pass{color:#dcd7c88c;font-size:2rem;font-weight:500;text-shadow:0 1px 0 rgba(0,0,0,.5),0 2px 8px rgba(0,0,0,.5)}.dou-bid-result.non-bidder{color:#dcd7c84d;font-size:1.5rem;font-weight:500;letter-spacing:.08em;text-shadow:0 1px 0 rgba(0,0,0,.5)}.dou-bid-result.at-tl{grid-area:tl-zone;align-self:start;justify-self:start;margin-left:10px}.dou-bid-result.at-tr{grid-area:tr-zone;align-self:start;justify-self:end;margin-right:10px}.dou-bid-result.at-bl{grid-area:bl-zone;align-self:end;justify-self:center;margin-bottom:calc(8px * var(--dou-u))}.dou-btn{position:relative;background:linear-gradient(180deg,#f5d690 0%,var(--dou-gold-bright) 35%,var(--dou-gold) 70%,#8a6c2e 100%);color:#1a1407;border:1px solid rgba(245,220,170,.5);padding:11px 28px;border-radius:10px;font-family:var(--dou-font-ui);font-weight:700;font-size:.95rem;cursor:pointer;letter-spacing:.08em;box-shadow:inset 0 1px #fff8dc8c,inset 0 -1px #0000002e,0 6px 18px #d4a85a6b,0 2px 4px #0000004d;transition:all .2s ease}.dou-btn:hover:not(:disabled){transform:translateY(-1.5px);box-shadow:inset 0 1px #fffae6b3,inset 0 -1px #0000002e,0 9px 24px #d4a85a8c,0 2px 4px #0000004d}.dou-btn.ghost{background:linear-gradient(180deg,#ffffff0d,#ffffff03);color:#f0ebdcc7;border:1px solid rgba(212,168,90,.3);backdrop-filter:blur(20px) saturate(120%);-webkit-backdrop-filter:blur(20px) saturate(120%);box-shadow:inset 0 1px #ffdcaa26,inset 0 -1px #0000004d,0 5px 14px #00000059}.dou-btn.ghost:hover:not(:disabled){color:var(--dou-gold-bright);border-color:#f5d78c8c;transform:translateY(-1px)}.dou-btn:disabled{background:#ffffff08;color:var(--dou-ink-dim);cursor:not-allowed;border-color:#ffffff0f;box-shadow:inset 0 1px #ffffff0a}.dou-done-banner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:linear-gradient(180deg,#1c2232f7,#0a0c18fa);border:1px solid rgba(212,168,90,.7);border-radius:16px;padding:2rem 2.5rem;min-width:520px;max-width:90%;text-align:center;z-index:20;box-shadow:0 30px 80px #000000bf,inset 0 1px #ffdcaa2e;display:flex;flex-direction:column;gap:1.3rem}.dou-done-headline{display:flex;flex-direction:column;gap:.4rem;align-items:center}.dou-done-title{font-family:var(--dou-font-card);font-weight:800;font-size:2.4rem;letter-spacing:.1em;line-height:1}.dou-done-title.lord{color:var(--dou-landlord);text-shadow:0 0 24px rgba(230,57,70,.55)}.dou-done-title.farmer{color:var(--dou-gold-bright);text-shadow:0 0 24px rgba(240,198,104,.55)}.dou-done-title.passed-out{color:#b8a070f2;text-shadow:0 0 18px rgba(184,160,112,.35)}.dou-history-table td.passed-out,.dou-history-table td.passed-out.lord,.dou-history-table td.passed-out.score-cell,.dou-history-table td.lord.passed-out,.dou-score-chip.neutral.passed-out{color:#b8a070bf;font-style:italic}.dou-done-sub{font-family:var(--dou-font-name);font-size:1rem;color:var(--dou-ink-mute);letter-spacing:.04em}.dou-done-breakdown{display:flex;align-items:center;justify-content:center;gap:1.5rem}.dou-done-stat{display:flex;flex-direction:column;gap:.25rem;align-items:center}.dou-done-stat .label{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--dou-ink-dim)}.dou-done-stat .value{font-family:var(--dou-font-num);font-weight:800;font-size:2.4rem;color:var(--dou-ink);line-height:1}.dou-done-stat .value.total{color:var(--dou-gold-bright);font-size:3rem;text-shadow:0 0 14px rgba(240,198,104,.4)}.dou-done-stat .value.total.team-a{color:var(--dou-cyan-bright);text-shadow:0 0 14px rgba(93,213,221,.5)}.dou-done-stat .value.total.team-b{color:var(--dou-orange-bright);text-shadow:0 0 14px rgba(255,159,94,.5)}.dou-done-stat .value.total.match-team-a{color:#ee6c7a;text-shadow:0 0 14px rgba(238,108,122,.5)}.dou-done-stat .value.total.match-team-b{color:#6da8ff;text-shadow:0 0 14px rgba(109,168,255,.5)}.dou-done-x{font-family:var(--dou-font-display);font-weight:600;font-size:2rem;color:var(--dou-ink-dim);align-self:end;padding-bottom:.35rem}.dou-done-factors{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap}.dou-done-factor{background:#d4a85a26;border:1px solid rgba(212,168,90,.5);color:var(--dou-gold-bright);font-family:var(--dou-font-ui);font-size:.85rem;font-weight:600;padding:.32rem .8rem;border-radius:999px;letter-spacing:.04em}.dou-done-seats{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:.8rem;margin-top:.4rem}.dou-done-seat{background:#00000059;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:.7rem .6rem;display:flex;flex-direction:column;gap:.4rem;align-items:center}.dou-done-seat .name{font-family:var(--dou-font-name);font-size:.9rem;color:var(--dou-ink-mute);letter-spacing:.03em}.dou-done-seat .delta{font-family:var(--dou-font-num);font-weight:800;font-size:1.4rem;line-height:1}.dou-done-seat .delta.win{color:var(--dou-gold-bright)}.dou-done-seat .delta.lose{color:#dc6464f2}.dou-done-seat .delta.zero{color:var(--dou-ink-dim)}.dou-done-next{align-self:center;font-size:1.1rem!important;padding:.7rem 2.2rem!important}.dou-done-waiting,.dou-action-waiting{align-self:center;margin-top:.4rem;padding:.45rem 1.4rem;border-radius:999px;background:#d4a85a14;border:1px solid rgba(212,168,90,.3);color:#e8c890e6;font-size:.95rem;letter-spacing:.05em;animation:dou-done-waiting-pulse 1.8s ease-in-out infinite}@keyframes dou-done-waiting-pulse{0%,to{opacity:.7}50%{opacity:1}}.dou-done-pair{align-self:stretch;margin-top:.4rem;padding-top:.9rem;border-top:1px solid rgba(212,168,90,.18);display:flex;flex-direction:column;align-items:center;gap:.6rem}.dou-done-pair-heading{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--dou-ink-dim)}.dou-done-pair-pending{font-size:.95rem;letter-spacing:.05em;color:#d4a85ab3;font-style:italic}.dou-done-pair-grid{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:1.8rem;margin-top:.3rem}.dou-done-pair-cell{display:flex;flex-direction:column;align-items:center;gap:.25rem}.dou-done-pair-cell-label{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--dou-ink-dim)}.dou-done-pair-cell-value{font-family:var(--font-serif);font-weight:800;font-size:1.6rem;line-height:1;font-variant-numeric:tabular-nums}.dou-done-pair-cell-value.team-a{color:#ee6c7a}.dou-done-pair-cell-value.team-b{color:#6da8ff}.dou-done-pair-cell-value.neutral{color:var(--dou-ink-mute)}.dou-done-pair-centre{display:flex;flex-direction:column;align-items:center;gap:.25rem;min-width:5rem}.dou-done-pair-centre-label{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--dou-ink-dim)}.dou-done-pair-centre-value{font-family:var(--font-serif);font-weight:800;font-size:3rem;line-height:1;font-variant-numeric:tabular-nums}.dou-done-pair-centre.winner-a .dou-done-pair-centre-value{color:#ee6c7a;text-shadow:0 0 14px rgba(238,108,122,.45)}.dou-done-pair-centre.winner-b .dou-done-pair-centre-value{color:#6da8ff;text-shadow:0 0 14px rgba(109,168,255,.45)}.dou-done-pair-centre.winner-tie .dou-done-pair-centre-value{color:var(--dou-gold-bright);text-shadow:0 0 14px rgba(240,198,104,.4)}.dou-done-pair-centre-tie{font-family:var(--font-serif);font-weight:700;font-size:1.8rem;line-height:1;color:var(--dou-gold-bright);text-shadow:0 0 14px rgba(240,198,104,.4);letter-spacing:.04em}.dou-side-card{background:linear-gradient(180deg,#141928d9,#080a16eb);border:1px solid rgba(212,168,90,.22);border-radius:10px;padding:.8rem .9rem}.dou-history-page,.dou-replay-page{max-width:980px;margin:0 auto;padding:1.5rem 1.5rem 4rem;color:var(--dou-ink);font-family:var(--dou-font-ui);height:100vh;max-height:100vh;overflow-y:auto;box-sizing:border-box}.dou-history-page:has(.dou-history-sheet-match){max-width:1400px}.dou-history-tabs{display:flex;gap:.4rem;margin-bottom:1rem;flex-wrap:wrap;justify-content:center}.dou-history-tab{padding:.4rem 1rem;border:1px solid rgba(212,168,90,.28);background:#00000052;color:var(--dou-ink-mute);font-family:var(--dou-font-ui);font-size:.9rem;letter-spacing:.06em;border-radius:999px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.dou-history-tab:hover{background:#d4a85a1a;color:var(--dou-gold-bright)}.dou-history-tab.active{background:#d4a85a33;border-color:var(--dou-gold-bright);color:var(--dou-gold-bright);font-weight:700}.dou-history-tab.winner-red{border-color:#ee6c7a73}.dou-history-tab.winner-blue{border-color:#6da8ff73}.dou-history-tab.active.winner-red{background:#ee6c7a2e;color:#ee6c7a}.dou-history-tab.active.winner-blue{background:#6da8ff2e;color:#6da8ff}.dou-history-tab-empty{color:var(--dou-ink-mute);font-size:.85rem;padding:.4rem}.dou-score-popup{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;z-index:50;pointer-events:none;background:linear-gradient(180deg,#141928f2,#080c19fa);border:1px solid rgba(212,168,90,.5);border-radius:14px;box-shadow:0 14px 40px #0009;color:var(--dou-ink);font-family:var(--dou-font-ui);white-space:nowrap;max-width:calc(100vw - 2rem);box-sizing:border-box}.dou-play-area{position:relative}.dou-score-popup.center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);min-width:380px;padding:1rem 1.6rem;gap:1rem;animation:dspCenterPop 4.5s cubic-bezier(.2,.7,.2,1) both}.dou-score-popup.corner{position:fixed;bottom:1.2rem;right:1.2rem;padding:.55rem .9rem;gap:.6rem;border-radius:12px;animation:dspCornerSlide 2.5s cubic-bezier(.2,.7,.2,1) both}.dou-score-popup .dsp-side{display:flex;flex-direction:column;align-items:center;gap:.2rem;min-width:3rem}.dou-score-popup .dsp-side-label{font-size:.65rem;letter-spacing:.18em;text-transform:uppercase;color:var(--dou-ink-mute)}.dou-score-popup .dsp-side-label.team-a{color:#ee6c7a}.dou-score-popup .dsp-side-label.team-b{color:#6da8ff}.dou-score-popup .dsp-side-label.neutral{color:var(--dou-ink-mute)}.dou-score-popup .dsp-side-score{font-family:var(--dou-font-num);font-weight:800;line-height:1}.dou-score-popup .dsp-side-score.team-a{color:#ee6c7a}.dou-score-popup .dsp-side-score.team-b{color:#6da8ff}.dou-score-popup .dsp-side-score.neutral{color:var(--dou-ink-mute)}.dou-score-popup.center .dsp-side-score{font-size:1.6rem}.dou-score-popup.corner .dsp-side-score{font-size:1.2rem}.dou-score-popup .dsp-center{display:flex;flex-direction:column;align-items:center;padding:0 .7rem}.dou-score-popup .dsp-num{font-family:var(--dou-font-num);font-weight:800;line-height:1;text-shadow:0 2px 14px rgba(0,0,0,.35)}.dou-score-popup.center .dsp-num{font-size:3.6rem}.dou-score-popup.corner .dsp-num{font-size:1.8rem}.dou-score-popup .dsp-label{font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;color:var(--dou-ink-mute);margin-top:.3rem}.dou-score-popup.dsp-team-a .dsp-num{color:#ee6c7a}.dou-score-popup.dsp-team-b .dsp-num{color:#6da8ff}.dou-score-popup.dsp-team-tie .dsp-num,.dou-score-popup .dsp-num.dsp-tie{color:var(--dou-gold-bright)}@keyframes dspCenterPop{0%{opacity:0;transform:translate(-50%,-50%) scale(.55)}4%{opacity:1;transform:translate(-50%,-50%) scale(1.08)}10%{transform:translate(-50%,-50%) scale(1)}90%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-50%) scale(.95)}}@keyframes dspCornerSlide{0%{opacity:0;transform:translate(140%)}6%{opacity:1;transform:translate(0)}94%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(140%)}}.dou-game-boundary>td{padding:.4rem!important;text-align:center!important;background:#d4a85a0f;border-top:1px solid rgba(212,168,90,.35)!important;border-bottom:1px solid rgba(212,168,90,.35)!important;font-size:.78rem;letter-spacing:.12em;color:var(--dou-ink-mute);font-family:var(--dou-font-ui)}.dou-game-boundary .gb-num{color:var(--dou-gold-bright);font-weight:700}.dou-game-boundary .gb-team.team-red{color:#ee6c7a;font-weight:700}.dou-game-boundary .gb-team.team-blue{color:#6da8ff;font-weight:700}.dou-game-boundary .gb-range{font-family:var(--dou-font-num);color:var(--dou-ink-dim)}.dou-history-titlebar{display:flex;align-items:center;gap:.8rem;margin-bottom:.8rem}.dou-history-title{flex:1;margin:0;text-align:center;font-family:"Noto Serif SC",Fraunces,serif;font-size:1.4rem;color:var(--dou-gold-bright);letter-spacing:.06em}.dou-history-context{margin-bottom:.8rem;text-align:center}.dou-history-context-label{display:inline-block;padding:.25rem .75rem;border:1px solid rgba(212,168,90,.35);border-radius:999px;font-family:var(--dou-font-num);font-size:.85rem;color:var(--dou-ink-mute);letter-spacing:.06em}.dou-history-loading,.dou-history-empty{text-align:center;padding:2rem 0;color:var(--dou-ink-mute);font-size:1rem}.dou-history-totals{display:flex;gap:.8rem;justify-content:center;margin-bottom:1.2rem}.dou-history-total-side{flex:1 1 0;padding:.8rem 1rem;background:linear-gradient(180deg,#141928d9,#080a16eb);border:1px solid rgba(212,168,90,.22);border-radius:10px;text-align:center}.dou-history-total-side.a{border-color:#2bb6c073}.dou-history-total-side.b{border-color:#e0863a73}.dou-history-total-side.a.fourv4{border-color:#ee6c7a8c}.dou-history-total-side.b.fourv4{border-color:#6da8ff8c}.dou-history-total-label{font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--dou-ink-mute)}.dou-history-total-value{font-family:var(--dou-font-num);font-size:1.6rem;font-weight:800;color:var(--dou-gold-bright);margin-top:.2rem}.dou-history-total-value.win{color:var(--dou-gold-bright)}.dou-history-total-value.lose{color:#dc6464d9}.dou-history-total-side.a .dou-history-total-value{color:var(--dou-cyan-bright, #5dd5dd)}.dou-history-total-side.b .dou-history-total-value{color:var(--dou-orange-bright, #ff9f5e)}.dou-history-total-side.a.fourv4 .dou-history-total-value{color:#ee6c7a}.dou-history-total-side.b.fourv4 .dou-history-total-value{color:#6da8ff}.dou-history-total-games{margin-top:.4rem;font-size:.75rem;letter-spacing:.1em;color:var(--dou-ink-mute);font-family:var(--dou-font-num)}.dou-app.fourv4 .dou-score-chip.team-a,.dou-history-page.fourv4 .dou-score-chip.team-a{background:#ee6c7a38;color:#ee6c7a;border-color:#ee6c7a8c}.dou-app.fourv4 .dou-score-chip.team-b,.dou-history-page.fourv4 .dou-score-chip.team-b{background:#6da8ff38;color:#6da8ff;border-color:#6da8ff8c}.dou-history-page.fourv4 .dou-history-table td.lord.lord-cyan{color:#ee6c7a}.dou-history-page.fourv4 .dou-history-table td.lord.lord-orange{color:#6da8ff}.dou-history-table{width:100%;border-collapse:collapse;font-family:var(--dou-font-num);font-size:.95rem}.dou-history-table th,.dou-history-table td{padding:.55rem .4rem;text-align:center;border-bottom:1px solid rgba(255,255,255,.06)}.dou-history-table th{font-size:.7rem;letter-spacing:.14em;color:var(--dou-ink-dim);text-transform:uppercase;font-weight:500}.dou-history-table td.hist-num{color:var(--dou-ink-dim);width:3rem}.dou-history-table td.lord{font-weight:700}.dou-history-table td.lord.lord-gold{color:#f0c870}.dou-history-table td.lord.lord-cyan{color:#5dd5dd}.dou-history-table td.lord.lord-orange{color:#ff9f5e}.dou-history-table td.lord.lord-red{color:#ee6c7a}.dou-history-table td.lord.lord-blue{color:#6da8ff}.dou-history-table td.score-cell.indiv.win{color:var(--dou-gold-bright);font-weight:700}.dou-history-table td.score-cell.indiv.lose{color:#dc6464d9;font-weight:700}.dou-history-table td.hist-time{color:var(--dou-ink-mute);font-size:.85rem;white-space:nowrap}.dou-history-table td.hist-go{color:var(--dou-gold-bright);font-size:.85rem;letter-spacing:.06em;white-space:nowrap}.dou-history-row{cursor:pointer;transition:background .15s ease}.dou-history-row:hover{background:#d4a85a14}.dou-history-sheet-match{width:100%;overflow-x:auto}.dou-history-table-match th.mh-table{font-size:.7rem;letter-spacing:.18em;text-transform:uppercase;color:#d4a85ab3;padding-top:.4rem;padding-bottom:.2rem}.dou-history-table-match th.mh-table-a{border-bottom:2px solid rgba(238,108,122,.4)}.dou-history-table-match th.mh-table-b{border-bottom:2px solid rgba(109,168,255,.4)}.dou-history-table-match td.clickable{cursor:pointer}.dou-history-table-match td.hist-imp{white-space:nowrap}.dou-history-table-match .imp-pill{display:inline-flex;align-items:center;justify-content:center;font-family:var(--dou-font-num);font-weight:800;font-size:.85rem;padding:.18rem .55rem;border-radius:999px;letter-spacing:.02em;border:1px solid transparent}.dou-history-table-match .imp-pill.team-a{background:#ee6c7a38;color:#ee6c7a;border-color:#ee6c7a8c}.dou-history-table-match .imp-pill.team-b{background:#6da8ff38;color:#6da8ff;border-color:#6da8ff8c}.dou-history-table-match .imp-pill.push{background:#d4a85a29;color:var(--dou-gold-bright);border-color:#d4a85a73}.dou-history-hint{margin-top:.8rem;text-align:center;font-size:.8rem;color:var(--dou-ink-dim);letter-spacing:.04em}.dou-replay-meta{display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap;margin:1rem 0}.dou-replay-meta-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .7rem;background:#1419288c;border:1px solid rgba(212,168,90,.22);border-radius:999px}.dou-replay-meta-label{font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dou-ink-mute)}.dou-replay-meta-value{font-family:var(--dou-font-num);font-weight:700;color:var(--dou-gold-bright)}.dou-replay-app>.dou-replay-sidebar{grid-area:sidebar;display:flex;flex-direction:column;gap:.7rem;min-height:0;overflow-y:auto;padding-right:4px}.dou-replay-app>.dou-replay-ctrl{grid-area:action}.dou-replay-topbar .dou-sub-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.6rem}.dou-replay-topbar .dou-sub-bar>.dou-replay-pos-chip{justify-self:center}.dou-replay-sub-score{font-family:var(--font-serif);font-weight:800;font-size:1.6rem;font-variant-numeric:tabular-nums;letter-spacing:.02em}.dou-replay-sub-score.red{color:#ee6c7a;text-shadow:0 0 12px rgba(238,108,122,.4);text-align:right}.dou-replay-sub-score.blue{color:#6da8ff;text-shadow:0 0 12px rgba(109,168,255,.4);text-align:left}.dou-replay-pos-chip{display:inline-block;padding:.18rem .6rem;font-size:.85rem;color:var(--dou-gold-bright);border:1px solid rgba(212,168,90,.35);border-radius:999px;background:#d4a85a14;font-family:var(--dou-font-num)}.dou-replay-bid-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.25rem}.dou-replay-bid-item{display:flex;align-items:center;gap:.5rem;padding:.25rem .45rem;border-radius:6px;background:#0000002e;font-size:.85rem}.dou-replay-bid-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.75rem}.dou-replay-bid-column{display:flex;flex-direction:column;gap:.18rem;min-width:0}.dou-replay-bid-col-title{color:#b8a070d9;font-size:.72rem;font-weight:500;letter-spacing:.06em;padding-bottom:.22rem;border-bottom:1px solid rgba(212,168,90,.2);margin-bottom:.15rem}.dou-replay-bid-col-empty{color:#b8a07066;font-style:italic;font-size:.78rem;text-align:center;padding:.7rem 0}.dou-replay-bid-row{display:flex;justify-content:space-between;align-items:center;padding:.25rem .1rem;font-size:.85rem;border-bottom:1px solid rgba(212,168,90,.08)}.dou-replay-bid-row:last-child{border-bottom:none}.dou-replay-bid-row-name{color:var(--dou-ink);font-family:var(--font-serif);font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dou-replay-bid-row-val{font-variant-numeric:tabular-nums;font-weight:700}.dou-replay-bid-empty{color:#b8a07066}.dou-replay-bid-wait{color:#b8a070b3;font-style:italic;font-weight:500}.dou-replay-pair-grid{display:grid;grid-template-columns:1fr 1fr;gap:.45rem}.dou-replay-pair-box{background:#00000040;border:1px solid rgba(212,168,90,.18);border-radius:.4rem;padding:.4rem .55rem}.dou-replay-pair-head{font-family:var(--dou-font-ui);color:var(--dou-gold-bright);font-size:.75rem;font-weight:600;letter-spacing:.08em;text-align:center;padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:1px solid rgba(212,168,90,.18)}.dou-replay-pair-row{display:flex;justify-content:space-between;align-items:baseline;padding:.14rem 0;font-family:var(--font-serif);font-size:.8rem}.dou-replay-pair-key{color:var(--dou-ink-mute);font-size:.72rem;letter-spacing:.05em}.dou-replay-pair-val{color:var(--dou-ink);font-variant-numeric:tabular-nums;font-weight:600}.dou-replay-pair-seat{display:inline-block;background:#d4a85a2e;color:var(--dou-gold-bright);border:1px solid rgba(212,168,90,.35);border-radius:.22rem;padding:.02rem .32rem;font-size:.7rem;margin-right:.3rem}.dou-replay-pair-seat.team-a{background:#ee6c7a38;color:#ffd6dc;border-color:#ee6c7a8c}.dou-replay-pair-seat.team-b{background:#6da8ff38;color:#d6e8ff;border-color:#6da8ff8c}.dou-replay-pair-name{font-weight:600}.dou-replay-pair-result{margin-top:.25rem;padding-top:.25rem;border-top:1px dashed rgba(212,168,90,.22)}.dou-replay-pair-result.winner-a .dou-replay-pair-val{color:#ee6c7a}.dou-replay-pair-result.winner-b .dou-replay-pair-val{color:#6da8ff}.dou-replay-pair-passed,.dou-replay-pair-empty{color:#b8a0708c;font-style:italic;font-size:.75rem;text-align:center;padding:.5rem 0}.dou-replay-app>.dou-replay-ctrl{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:.7rem;background:linear-gradient(180deg,#141928d9,#0a0e1ceb);border:1px solid rgba(212,168,90,.22);border-radius:11px;padding:.55rem .85rem;box-shadow:0 6px 18px #00000038;min-height:58px}.dou-replay-nav{display:flex;gap:.25rem;background:#00000052;border:1px solid rgba(212,168,90,.18);border-radius:8px;padding:.2rem}.dou-replay-nav button{padding:.25rem .6rem;background:transparent;border:none;color:var(--dou-ink);font-size:1rem;border-radius:5px;cursor:pointer;font-family:var(--dou-font-ui);line-height:1}.dou-replay-nav button:hover{background:#d4a85a2e;color:var(--dou-gold-bright)}.dou-replay-slider{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;background:#00000073;border:1px solid rgba(212,168,90,.22);border-radius:999px;outline:none}.dou-replay-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--dou-gold-bright, #f0c870);border:2px solid rgba(20,25,40,.92);box-shadow:0 0 0 1px #d4a85a99;cursor:pointer}.dou-replay-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--dou-gold-bright, #f0c870);border:2px solid rgba(20,25,40,.92);box-shadow:0 0 0 1px #d4a85a99;cursor:pointer}.dou-replay-slider:disabled{opacity:.4}.dou-replay-step{font-family:var(--dou-font-num);font-weight:700;font-variant-numeric:tabular-nums;color:var(--dou-ink-mute);letter-spacing:.04em;min-width:4.5rem;text-align:right;font-size:.95rem}.dou-replay-hands{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.8rem;margin-bottom:1.2rem}.dou-replay-hand{padding:.7rem .9rem;background:linear-gradient(180deg,#141928d9,#080a16eb);border:1px solid rgba(212,168,90,.22);border-radius:10px}.dou-replay-hand-label{font-size:.8rem;letter-spacing:.12em;color:var(--dou-ink-dim);margin-bottom:.4rem}.dou-replay-hand-label.lord{color:var(--dou-gold-bright);font-weight:700}.dou-replay-hand-row{display:flex;flex-wrap:wrap;gap:.25rem}.dou-replay-hand-empty{color:var(--dou-ink-dim);font-style:italic;font-size:.85rem}.dou-replay-card{display:inline-flex;align-items:center;padding:.15rem .4rem;font-family:var(--dou-font-num);font-size:.95rem;font-weight:600;background:#ffffff0d;border:1px solid rgba(212,168,90,.18);border-radius:4px;color:var(--dou-ink);white-space:nowrap}.dou-replay-log{padding:.9rem 1rem;background:linear-gradient(180deg,#14192899,#080a16bf);border:1px solid rgba(212,168,90,.18);border-radius:10px}.dou-replay-log-title{margin:0 0 .6rem;font-size:.85rem;letter-spacing:.18em;text-transform:uppercase;color:#d4a85ab3}.dou-replay-log-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.3rem;max-height:22rem;overflow-y:auto}.dou-replay-log-item{display:flex;align-items:center;gap:.6rem;padding:.35rem .55rem;border-radius:6px;cursor:pointer;transition:background .12s ease}.dou-replay-log-item:hover{background:#d4a85a14}.dou-replay-log-item.current{background:#d4a85a2e;outline:1px solid rgba(212,168,90,.5)}.dou-replay-log-item.future{opacity:.45}.dou-replay-log-seat{min-width:6rem;color:var(--dou-ink-dim);font-size:.85rem}.dou-replay-log-combo{display:inline-block;padding:.05rem .4rem;font-size:.75rem;color:var(--dou-gold-bright);border:1px solid rgba(212,168,90,.4);border-radius:999px}.dou-replay-log-pass{color:var(--dou-ink-mute);font-style:italic}.dou-replay-log-cards{display:inline-flex;flex-wrap:wrap;gap:.2rem}.dou-side-card h3{margin:0 0 .7rem;font-size:.85rem;letter-spacing:.28em;text-transform:uppercase;color:#d4a85abf;font-weight:600;display:flex;align-items:center;gap:.5rem}.dou-side-card h3:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,rgba(212,168,90,.35),transparent)}.dou-score-table{width:100%;border-collapse:collapse;font-family:var(--dou-font-num);font-size:.95rem;table-layout:fixed}.dou-score-table th,.dou-score-table td{padding:.32rem .25rem;text-align:center;border-bottom:1px solid rgba(255,255,255,.05);overflow:hidden;text-overflow:ellipsis}.dou-score-table th{font-size:.75rem;letter-spacing:.12em;color:var(--dou-ink-dim);text-transform:uppercase;font-weight:500}.dou-score-table td.num{color:var(--dou-ink-dim);font-size:.85rem}.dou-score-table td.lord{color:var(--dou-landlord);font-weight:700}.dou-score-table td.lord.lord-gold{color:#f0c870}.dou-score-table td.lord.lord-cyan{color:#5dd5dd}.dou-score-table td.lord.lord-orange{color:#ff9f5e}.dou-score-table td.lord.lord-red{color:#ee6c7a}.dou-score-table td.lord.lord-blue{color:#6da8ff}.dou-score-table td.win{color:var(--dou-gold-bright)}.dou-score-table td.lose{color:#dc6464d9}.dou-score-table tr.empty td{color:#ffffff1f}.dou-score-table tr:last-child td{border-bottom:none}.dou-score-table tfoot td{border-top:1px solid rgba(212,168,90,.35);border-bottom:none;padding-top:.5rem;font-weight:700;font-size:1.05rem;color:var(--dou-gold-bright)}.dou-score-chip{display:inline-flex;align-items:center;justify-content:center;font-family:var(--dou-font-num);font-weight:800;font-size:.9rem;padding:.18rem .55rem;border-radius:999px;letter-spacing:.02em;border:1px solid transparent}.dou-score-chip.team-a{background:#2bb6c038;color:var(--dou-cyan-bright);border-color:#2bb6c08c}.dou-score-chip.team-b{background:#e0863a38;color:var(--dou-orange-bright);border-color:#e0863a8c}.dou-score-chip.neutral{background:#d4a85a2e;color:var(--dou-gold-bright);border-color:#d4a85a80}.dou-score-table td.score-cell{padding:.22rem .2rem}.dou-score-table.indiv{font-size:.85rem}.dou-score-table.indiv th,.dou-score-table.indiv td{padding:.3rem .18rem}.dou-score-table.indiv th{font-size:.65rem;letter-spacing:.05em;text-transform:none}.dou-score-table td.score-cell.indiv{font-weight:700;font-family:var(--dou-font-num);font-size:.9rem}.dou-score-table td.score-cell.indiv.win{color:var(--dou-gold-bright)}.dou-score-table td.score-cell.indiv.lose{color:#dc6464d9}.minigame-hub{max-width:800px;margin:0 auto;padding:1.5rem}.minigame-hub-top{display:flex;justify-content:flex-start;margin-bottom:.5rem}.mg-card-actions{display:flex;flex-direction:column;gap:.5rem;width:100%;margin-top:.5rem}.mg-card-actions .mg-card-enter{width:100%}.mg-card-join-row{display:flex;gap:.35rem}.mg-card-join-input{flex:1;min-width:0;padding:.4rem .6rem;border-radius:4px;border:1px solid rgba(184,134,11,.35);background:#00000040;color:#f1e5c2;font-family:inherit;font-size:.85rem;text-transform:uppercase;letter-spacing:.05em}.mg-card-join-input:focus{outline:none;border-color:#b8860bbf;background:#00000059}.mg-card-join-btn{flex:0 0 auto}.mg-active-rooms{max-width:800px;margin:1.5rem auto 0;padding:0 1.5rem}.minigame-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin-top:1.5rem}.minigame-card{display:flex;flex-direction:column;align-items:center;text-align:center;padding:1.2rem 1rem;background:linear-gradient(180deg,var(--panel-3),var(--panel-2));border:1px solid var(--line);border-radius:14px;gap:.4rem}.minigame-card.disabled{opacity:.5}.mg-card-emoji{font-size:2.4rem}.mg-card-title{font-family:var(--font-serif);font-weight:700;font-size:1.2rem;color:var(--text)}.mg-card-sub{font-size:.85rem;color:var(--muted)}.mg-card-players{font-size:.78rem;color:var(--brass);letter-spacing:.04em}.mg-card-enter{margin-top:.7rem;padding:.5rem 1.2rem;font-size:1rem}.mg-card-coming{margin-top:.7rem;font-size:.85rem;color:var(--muted);font-style:italic}.q-screen{max-width:760px;margin:0 auto;padding:1rem 1.2rem 2rem;display:flex;flex-direction:column;gap:.8rem}.q-topbar{display:flex;align-items:center;gap:.7rem}.q-title{flex:1;font-family:var(--font-serif);font-weight:700;font-size:1.1rem;color:var(--brass)}.q-status{font-size:.78rem;color:var(--muted);padding:.1rem .5rem;border:1px solid var(--line);border-radius:999px}.q-status.status-open{color:#9cd29c;border-color:#96d29666}.q-roomcode{font-family:monospace;background:#d8b66a29;border:1px solid rgba(216,182,106,.45);padding:.1rem .55rem;border-radius:5px;color:var(--brass);cursor:pointer}.q-error{padding:.5rem .8rem;background:#dc50501f;border:1px solid rgba(220,80,80,.45);border-radius:6px;color:#f0c0c0}.q-hint{color:var(--muted)}.q-lobby-status{text-align:center;color:var(--muted);font-size:.92rem;padding:.3rem 0}.q-compass{display:grid;grid-template-columns:1fr minmax(200px,1.3fr) 1fr;grid-template-rows:auto auto auto;gap:.7rem;align-items:stretch;justify-items:stretch;margin:.8rem auto;max-width:720px}.q-compass-n{grid-row:1;grid-column:2}.q-compass-w{grid-row:2;grid-column:1}.q-compass-centre{grid-row:2;grid-column:2;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:linear-gradient(135deg,#2a3a26,#1a2a18);border:1px solid #444a3a;border-radius:12px;padding:1rem;gap:.25rem}.q-compass-name{font-size:2rem}.q-compass-sub{font-family:Fraunces,serif;font-weight:700;color:var(--brass)}.q-compass-meta{font-size:.8rem;color:var(--muted);letter-spacing:.04em}.q-compass-e{grid-row:2;grid-column:3}.q-compass-s{grid-row:3;grid-column:2}.q-compass-seat{padding:.7rem .8rem;background:var(--panel);border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;gap:.4rem;border-left:4px solid var(--line)}.q-compass-seat.closed{opacity:.55;border-style:dashed;background:#7878780a}.q-compass-seat.q-pawn-S{border-left-color:#d85a4a}.q-compass-seat.q-pawn-N{border-left-color:#4a6fd8}.q-compass-seat.q-pawn-W{border-left-color:#4ad88a}.q-compass-seat.q-pawn-E{border-left-color:#d8c44a}.q-seat-close-btn{padding:.22rem .5rem;font-size:.72rem;background:#8c8c8c14;border:1px dashed rgba(180,180,180,.4);border-radius:5px;color:var(--muted);cursor:pointer}.q-seat-close-btn:hover{color:var(--text);background:#dc50501f;border-color:#dc505073}.q-ready.ready{color:#9cd29c}@media (max-width: 600px){.q-compass{grid-template-columns:1fr;grid-template-rows:repeat(5,auto);max-width:100%}.q-compass-n{grid-row:1;grid-column:1}.q-compass-w{grid-row:2;grid-column:1}.q-compass-centre{grid-row:3;grid-column:1}.q-compass-e{grid-row:4;grid-column:1}.q-compass-s{grid-row:5;grid-column:1}}.q-seat-card{padding:.8rem;background:var(--panel);border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;gap:.4rem;border-left:4px solid var(--line)}.q-seat-card.q-pawn-S{border-left-color:#d85a4a}.q-seat-card.q-pawn-N{border-left-color:#4a6fd8}.q-seat-card.q-pawn-W{border-left-color:#4ad88a}.q-seat-card.q-pawn-E{border-left-color:#d8c44a}.q-seat-label{font-weight:700;font-size:.95rem;color:var(--text)}.q-seat-occupant{color:var(--text);font-size:.9rem}.q-seat-occupant.empty{color:var(--muted);font-style:italic}.q-seat-difficulty{font-size:.78rem;color:var(--muted)}.q-seat-action{align-self:flex-start;padding:.2rem .6rem;font-size:.78rem}.q-seat-ctrls{display:flex;flex-direction:column;gap:.45rem}.q-seat-sit{padding:.35rem .75rem;font-size:.85rem}.q-seat-bot-row{display:flex;gap:.3rem;flex-wrap:wrap}.q-seat-bot-btn{padding:.22rem .5rem;font-size:.72rem;border:1px solid var(--line);background:var(--panel-2);color:var(--text);border-radius:5px;cursor:pointer}.q-seat-bot-btn.q-bot-easy{border-color:#78c87880}.q-seat-bot-btn.q-bot-medium{border-color:#d8b66a80}.q-seat-bot-btn.q-bot-hard{border-color:#dc646480}.q-start-row{display:flex;align-items:center;justify-content:space-between;gap:.7rem;padding-top:.4rem}.q-ready{font-size:.9rem;color:var(--muted)}.q-start-btn{padding:.6rem 1.4rem;font-size:1.05rem}.q-end-btn{align-self:flex-start;padding:.35rem .8rem;font-size:.85rem;background:#dc505014;border:1px solid rgba(220,80,80,.45);color:#f0c0c0;border-radius:6px;cursor:pointer}.q-player-strip{display:flex;gap:.6rem;flex-wrap:wrap}.q-player-tag{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .65rem;background:var(--panel);border:1px solid var(--line);border-radius:999px;font-size:.85rem}.q-player-tag.on-turn{box-shadow:0 0 0 2px #d8b66a8c}.q-player-tag.winner{background:linear-gradient(180deg,#5b4622,#3a2c14);color:#f6dca0}.q-player-dot{display:inline-block;width:.9rem;height:.9rem;border-radius:50%;background:#888}.q-player-tag.q-pawn-S .q-player-dot{background:#d85a4a}.q-player-tag.q-pawn-N .q-player-dot{background:#4a6fd8}.q-player-tag.q-pawn-W .q-player-dot{background:#4ad88a}.q-player-tag.q-pawn-E .q-player-dot{background:#d8c44a}.q-player-walls{color:var(--muted);font-variant-numeric:tabular-nums}.q-turn-banner{padding:.45rem .8rem;border-radius:6px;font-size:.9rem;background:#ffffff0d;color:var(--muted)}.q-turn-banner.you-turn{background:#78c8781f;border:1px solid rgba(120,200,120,.4);color:#9cd29c}.q-winner-banner{padding:.7rem 1rem;border-radius:8px;background:linear-gradient(180deg,#d8b66a38,#a07e302e);border:1px solid var(--brass);color:#f6dca0;font-family:var(--font-serif);font-weight:700;text-align:center}.q-board{--cell: 52px;--gap: 13px;display:grid;grid-template-columns:var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell);grid-template-rows:var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell) var(--gap) var(--cell);background:linear-gradient(135deg,#2a3a26,#1a2a18);padding:.6rem;border-radius:12px;border:1px solid #444a3a;align-self:center;position:relative}@media (max-width: 600px){.q-board{--cell: 36px;--gap: 9px;padding:.4rem}}.q-cell{background:#ffffff0a;border-radius:4px;position:relative;display:flex;align-items:center;justify-content:center}.q-cell.legal{background:#78c87838;cursor:pointer;outline:2px dashed rgba(120,200,120,.5);outline-offset:-3px}.q-cell.legal:hover{background:#78c87873}.q-pawn{width:70%;height:70%;border-radius:50%;border:2px solid rgba(255,255,255,.5);box-shadow:0 2px 4px #00000080;position:relative}.q-pawn.q-pawn-S{background:radial-gradient(circle at 30% 30%,#ff8060,#c0382e)}.q-pawn.q-pawn-N{background:radial-gradient(circle at 30% 30%,#7090ff,#2a4ec0)}.q-pawn.q-pawn-W{background:radial-gradient(circle at 30% 30%,#80f0a0,#2ec060)}.q-pawn.q-pawn-E{background:radial-gradient(circle at 30% 30%,#ffe070,#c0a020)}.q-pawn.mine{box-shadow:0 0 0 3px var(--brass),0 2px 4px #0009}.q-pawn.q-pawn-S:after,.q-pawn.q-pawn-N:after,.q-pawn.q-pawn-W:after,.q-pawn.q-pawn-E:after{content:"";position:absolute;width:0;height:0;filter:drop-shadow(0 1px 1px rgba(0,0,0,.55))}.q-pawn.q-pawn-S:after{top:3px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:7px solid rgba(255,255,255,.92)}.q-pawn.q-pawn-N:after{bottom:3px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:7px solid rgba(255,255,255,.92)}.q-pawn.q-pawn-W:after{right:3px;top:50%;transform:translateY(-50%);border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:7px solid rgba(255,255,255,.92)}.q-pawn.q-pawn-E:after{left:3px;top:50%;transform:translateY(-50%);border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:7px solid rgba(255,255,255,.92)}@media (max-width: 600px){.q-pawn.q-pawn-S:after{border-left-width:4px;border-right-width:4px;border-bottom-width:5px;top:2px}.q-pawn.q-pawn-N:after{border-left-width:4px;border-right-width:4px;border-top-width:5px;bottom:2px}.q-pawn.q-pawn-W:after{border-top-width:4px;border-bottom-width:4px;border-left-width:5px;right:2px}.q-pawn.q-pawn-E:after{border-top-width:4px;border-bottom-width:4px;border-right-width:5px;left:2px}}.q-wallslot{background:#d8b66a1f;border-radius:3px;cursor:pointer;position:relative}.q-wallslot:hover{background:#d8b66a66}.q-wallslot.legal{cursor:pointer}.q-wallslot.legal:hover{background:#d8b66a66}.q-wallslot:hover:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:3px;opacity:.5;pointer-events:none;background:linear-gradient(180deg,#b8b8b8,#707070)}.q-board[data-viewer-seat=S] .q-wallslot:hover:before{background:linear-gradient(180deg,#ff8060,#b03222)}.q-board[data-viewer-seat=N] .q-wallslot:hover:before{background:linear-gradient(180deg,#7090ff,#2240b0)}.q-board[data-viewer-seat=W] .q-wallslot:hover:before{background:linear-gradient(180deg,#80f0a0,#20a050)}.q-board[data-viewer-seat=E] .q-wallslot:hover:before{background:linear-gradient(180deg,#ffe070,#a08020)}.q-wall{background:linear-gradient(180deg,#b8b8b8,#707070);border:1px solid #4a4a4a;border-radius:3px;box-shadow:0 1px 3px #0006;pointer-events:none;z-index:5}.q-wall.q-wall-by-S{background:linear-gradient(180deg,#ff8060,#b03222);border-color:#8a2418}.q-wall.q-wall-by-N{background:linear-gradient(180deg,#7090ff,#2240b0);border-color:#182c8a}.q-wall.q-wall-by-W{background:linear-gradient(180deg,#80f0a0,#20a050);border-color:#186030}.q-wall.q-wall-by-E{background:linear-gradient(180deg,#ffe070,#a08020);border-color:#6a5018}.q-wall-preview{opacity:.45}.q-player-tag.viewer{border-color:var(--brass);box-shadow:inset 0 0 0 1px #d8b66a80}.q-player-walls.zero{opacity:.45;text-decoration:line-through}.q-turn-banner.you-turn{display:flex;flex-direction:column;gap:.15rem}.q-banner-main{font-weight:700;font-size:1rem}.q-banner-walls{font-size:.85rem;opacity:.85}.q-actions{display:flex;gap:.6rem;align-self:center;padding-top:.5rem}
