:root{color:#f3eee1;font-synthesis:none;--gold:#e7ca83;--muted:#a9bcb1;--line:#d7c38b33;background:#102c28;font-family:Microsoft YaHei,PingFang SC,system-ui,sans-serif}*{box-sizing:border-box}body{min-width:320px;margin:0}button,input{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:not-allowed;opacity:.38;box-shadow:none}button,summary{touch-action:manipulation}button:focus-visible,summary:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.app-shell{--canvas-width:100dvw;--canvas-height:100dvh;min-height:var(--canvas-height);padding:env(safe-area-inset-top) max(20px, env(safe-area-inset-right)) max(12px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left));background:radial-gradient(at 50% 36%,#25504455,#0000 65%),repeating-linear-gradient(112deg,#ffffff01 0 1px,#0000 1px 4px),#102e28}.topbar{border-bottom:1px solid var(--line);z-index:10;flex:none;justify-content:space-between;align-items:center;gap:12px;width:100%;max-width:1600px;height:72px;margin:auto;display:flex;position:relative}.brand{align-items:center;gap:12px;min-width:0;display:flex}.brand-icon{color:var(--gold);font-family:Georgia,serif;font-size:42px;line-height:1}.brand b{color:var(--gold);letter-spacing:.1em;white-space:nowrap;font-size:26px;font-weight:600;display:block}.brand small{color:var(--muted);margin-top:3px;font-size:10px;display:block}.top-actions{align-items:center;gap:12px;display:flex}.connection{color:#e2a68f;white-space:nowrap;font-size:12px}.connection:before{content:"";background:#e2a68f;border-radius:50%;width:7px;height:7px;margin-right:7px;display:inline-block}.connection.online{color:#b3c9bc}.connection.online:before{background:#6dd4a0;box-shadow:0 0 9px #67c69955}.ui-icon{flex:none;width:22px;height:22px}.text-button{color:var(--muted);background:0 0;border:0;padding:10px}.primary,.secondary{white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:9px;min-height:44px;padding:10px 22px;font-weight:500;transition:background .15s,border-color .15s,transform .15s;display:inline-flex}.primary{color:#332b16;background:linear-gradient(135deg,#edcf88,#d7b66b);border:1px solid #f8e0a1;box-shadow:inset 0 1px #fff6,0 5px 18px #0002}.secondary{color:#eee9d8;background:#d0d9be05;border:1px solid #d3c39177}.compact{min-height:36px;padding:5px 12px;font-size:12px}.immersive-button{color:#c5cbb8;background:0 0;border:0;padding:8px}.immersive-button .ui-icon{width:20px;height:20px}.virtual-direction{width:34px;height:34px;padding:4px;font-size:22px}.game-menu{position:relative}.game-menu summary{color:#c5cbb8;cursor:pointer;border-radius:50%;place-items:center;width:40px;height:40px;list-style:none;display:grid}.game-menu summary::-webkit-details-marker{display:none}.game-menu[open] summary{background:#ffffff0c}.menu-popover{background:#18392f;border:1px solid #bda97066;border-radius:14px;width:172px;padding:7px;position:absolute;top:46px;right:0;box-shadow:0 12px 35px #0005}.menu-popover button{color:#e5dfc9;text-align:left;background:0 0;border:0;border-radius:8px;width:100%;padding:12px;font-size:13px}.header-room{border-left:1px solid var(--line);letter-spacing:.03em;white-space:nowrap;margin-left:10px;padding:5px 0 5px 20px;font-size:14px}.scoreboard{white-space:nowrap;align-items:center;gap:24px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.score{align-items:baseline;gap:10px;display:flex}.score span{color:#e2dcc9;font-size:15px}.score b{color:var(--gold);font-variant-numeric:tabular-nums;font-size:27px;font-weight:600}.score.theirs b{color:#a0c8dc}.round-number{color:#bdc2ad;font-size:13px}.entry-panel{grid-template-columns:1.1fr .9fr;align-items:center;gap:70px;max-width:1050px;min-height:calc(100dvh - 90px);margin:auto;display:grid}.entry-hero>span{color:var(--gold);letter-spacing:.2em;font-size:14px}.entry-hero h1{letter-spacing:-.035em;margin:20px 0;font-size:clamp(42px,6vw,76px);font-weight:600;line-height:1.2}.entry-hero p{color:var(--muted);max-width:390px;font-size:14px;line-height:1.8}.entry-form{color:#1a342c;background:#f3efe5;border:1px solid #fff8;border-radius:22px;gap:15px;padding:32px;display:grid;box-shadow:0 20px 65px #071b2440}.entry-form label{gap:8px;font-size:12px;font-weight:600;display:grid}.entry-form input{color:#19362d;background:#fffefa;border:1px solid #d6d8cd;border-radius:10px;outline:none;width:100%;height:48px;padding:0 14px}.entry-form input::placeholder{color:#98a399;font-size:12px}.entry-form input:focus{border-color:#6b9980;box-shadow:0 0 0 3px #6b998021}.entry-form .primary,.entry-form .secondary{border-radius:10px}.entry-form .secondary{color:#f3efe1;background:#22463c;border-color:#22463c}.divider{text-align:center;color:#9ba397;margin:3px;font-size:11px}.field-error{color:#ad3934;margin:-6px 0 0;font-size:12px;line-height:1.5}.entry-form input[aria-invalid=true]{border-color:#b84d45}.room-page{width:100%;max-width:1600px;margin:0 auto}.room-strip{align-items:center;gap:18px;max-width:1600px;min-height:40px;margin:14px auto;display:flex}.room-strip>div{align-items:baseline;gap:9px;display:flex}.room-strip small,.room-strip>span{color:var(--muted);font-size:12px}.room-strip b{color:var(--gold);letter-spacing:.14em;font-size:18px;font-weight:500}.room-strip .phase-pill{border:1px solid var(--line);border-radius:99px;margin-left:auto;padding:6px 12px}.lobby-panel{grid-template-columns:minmax(0,1fr);gap:24px;max-width:1050px;margin:55px auto;display:grid}.lobby-panel:has(.result-card){grid-template-columns:minmax(0,1fr) minmax(300px,.8fr)}.lobby-main,.result-card{border:1px solid var(--line);background:#21423777;border-radius:22px;padding:30px}.lobby-main h2{margin:0 0 10px;font-size:28px;font-weight:500}.lobby-main p{color:var(--muted);margin:0 0 26px;font-size:13px;line-height:1.7}.lobby-seats{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.lobby-seat{background:#0e2c2566;border:1px solid #d7c38b25;border-radius:14px;align-items:center;gap:16px;min-height:92px;padding:16px;display:flex}.seat-number{color:#cdb275;font-size:24px;font-weight:400}.lobby-seat b,.lobby-seat small{display:block}.lobby-seat b{font-weight:500}.lobby-seat small{color:var(--muted);margin-top:8px;font-size:11px}.team-mark{color:#cdbb86;white-space:nowrap;margin-left:auto;font-size:11px}.lobby-buttons{flex-wrap:wrap;gap:12px;margin-top:26px;display:flex}.result-card h3{margin:0 0 18px;font-weight:500}.result-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.result-grid>div{background:#102e2877;border-radius:12px;padding:16px}.result-grid b,.result-grid small{display:block}.result-grid b{color:var(--gold);margin:8px 0;font-size:28px;font-weight:500}.result-grid small,.result-card>small{color:var(--muted);font-size:11px}.score-lines{max-height:300px;margin:18px 0;overflow:auto}.score-lines>div{border-bottom:1px solid var(--line);justify-content:space-between;gap:12px;padding:8px 0;font-size:12px;display:flex}.app-shell.game-mode{height:var(--canvas-height);min-height:0;padding-bottom:max(8px, env(safe-area-inset-bottom));flex-direction:column;display:flex;overflow:hidden}.game-mode .topbar{height:clamp(40px, calc(var(--canvas-height) * .08), 68px)}.game-mode .brand small{display:none}.game-mode .brand-icon{font-size:clamp(25px, calc(var(--canvas-height) * .05), 38px)}.game-mode .brand b{font-size:clamp(18px, calc(var(--canvas-height) * .035), 27px)}.game-mode .immersive-button span{display:none}.table-wrap{flex-direction:column;flex:1;width:100%;max-width:1600px;min-height:0;margin:0 auto;display:flex}.table{flex:1;min-height:0;position:relative}.opponent{align-items:center;gap:clamp(7px, calc(var(--canvas-height) * .017), 16px);z-index:2;max-width:26%;display:flex;position:absolute}.opponent.position-2{top:clamp(8px, calc(var(--canvas-height) * .025), 24px);left:50%;transform:translate(-50%)}.opponent.position-1{top:58%;right:12px;transform:translateY(-50%)}.opponent.position-3{top:58%;left:12px;transform:translateY(-50%)}.avatar{color:#cfc18f;width:clamp(34px, calc(var(--canvas-height) * .09), 76px);aspect-ratio:1;background:#183930;border:1.5px solid #d8be7a;border-radius:50%;flex:none;place-items:center;display:grid;overflow:hidden;box-shadow:inset 0 0 0 3px #172f2a}.avatar svg{stroke-width:1px;width:100%;height:100%}.avatar-0{color:#d4d6bf}.avatar-1{color:#b8c9c2}.avatar-2{color:#cfbe8e}.avatar-3{color:#ceb982}.avatar-active{border-color:#f5d991;box-shadow:0 0 0 3px #e1c77a19,0 0 20px #e1c77a19}.opponent-info{min-width:0}.player-name{align-items:center;gap:8px;display:flex}.player-name b{font-size:clamp(12px, calc(var(--canvas-height) * .028), 22px);white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.team-badge{color:#c4dac5;font-size:clamp(9px, calc(var(--canvas-height) * .018), 14px);white-space:nowrap;background:#83aa8924;border:1px solid #83aa8970;border-radius:99px;padding:2px 7px;display:inline-block}.player-count{font-size:clamp(10px, calc(var(--canvas-height) * .022), 17px);color:#b8c4ae;margin-top:5px;line-height:1.4;display:block}.opponent.active .player-name b{color:var(--gold)}.reveal-trigger{color:#e1d1a5;white-space:nowrap;background:#153c31;border:1px solid #d8bf7a70;border-radius:99px;padding:5px 10px;font-size:11px;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%)}.table-center{text-align:center;align-items:center;gap:clamp(6px, calc(var(--canvas-height) * .016), 14px);flex-direction:column;display:flex;position:absolute;inset:31% 26% 0}.table-status{color:#cbd2b9;flex:none;justify-content:center;align-items:center;gap:12px;display:flex}.turn-label{font-size:clamp(13px, calc(var(--canvas-height) * .028), 22px);white-space:nowrap;background:#284b3c33;border:1px solid #d5c28d50;border-radius:99px;padding:6px 22px}.your-turn .turn-label{color:#f4d994;border-color:#e7ca83;box-shadow:0 0 15px #ead08019,inset 0 0 10px #ead08008}.turn-clock{width:clamp(33px, calc(var(--canvas-height) * .068), 58px);aspect-ratio:1;background:conic-gradient(var(--gold) var(--clock-progress), #d5c28d1c 0);color:var(--gold);font-size:clamp(13px, calc(var(--canvas-height) * .029), 23px);border-radius:50%;justify-content:center;align-items:center;gap:1px;display:flex;position:relative}.turn-clock:before{content:"";background:#17392f;border-radius:50%;position:absolute;inset:3px}.turn-clock b,.turn-clock small{font-variant-numeric:tabular-nums;font-weight:500;position:relative}.turn-clock small{font-size:.65em}.turn-clock.urgent{color:#f5b49a;background:conic-gradient(#efac89 var(--clock-progress), #d5c28d1c 0)}.deal-progress{color:var(--gold);white-space:nowrap;font-size:13px}.trick-area{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;width:100%;min-height:0;display:flex}.trick-label{color:#c0c9b8;font-size:clamp(11px, calc(var(--canvas-height) * .022), 17px)}.trick-cards{scrollbar-width:thin;justify-content:safe center;max-width:100%;padding:3px 4px 8px;display:flex;overflow:auto hidden}.trick-cards .playing-card+.playing-card{margin-left:-8px}.trick-cards .playing-card:nth-last-child(n+5),.trick-cards .playing-card:nth-last-child(n+5)~.playing-card{margin-left:-20px}.trick-cards .playing-card:first-child{margin-left:0}.empty-trick{color:#89a797;letter-spacing:.12em;padding:10px;font-size:13px}.table-center>small{color:var(--muted);font-size:11px}.bottom-zone{--group-headroom:0px;grid-template-areas:"actions actions""self hand";grid-template-columns:clamp(86px, calc(var(--canvas-width) * .14), 200px) minmax(0, 1fr);width:100%;height:calc(clamp(143px, calc(var(--canvas-height) * .41), 345px) + var(--group-headroom));flex:none;grid-template-rows:auto minmax(0,1fr);padding-bottom:6px;display:grid}.bottom-zone:has(.hand-group){--group-headroom:clamp(0px, calc(500px - var(--canvas-height)), 32px)}.virtual-landscape .bottom-zone:has(.hand-group){--group-headroom:40px}.toolbar{min-height:clamp(54px, calc(var(--canvas-height) * .11), 88px);flex-direction:column;grid-area:actions;justify-content:center;align-items:center;gap:7px;padding:3px 0;display:flex}.turn-actions{justify-content:center;align-items:center;gap:clamp(6px, calc(var(--canvas-width) * .011), 18px);display:flex}.turn-actions button{height:clamp(34px, calc(var(--canvas-height) * .073), 60px);min-height:0;min-width:clamp(64px, calc(var(--canvas-width) * .11), 180px);font-size:clamp(12px, calc(var(--canvas-height) * .026), 21px);padding:5px 18px}.turn-actions .play-button{min-width:clamp(96px, calc(var(--canvas-width) * .145), 235px);font-size:clamp(16px, calc(var(--canvas-height) * .035), 28px);letter-spacing:.07em;font-weight:600}.selection-label{color:#b5c4ae;font-size:clamp(10px, calc(var(--canvas-height) * .021), 16px);min-height:1.4em}.invalid-selection{color:#e8ad8d}.self-info{flex-direction:column;grid-area:self;justify-content:center;align-self:center;align-items:flex-start;gap:14px;min-width:0;padding-right:12px;display:flex}.self-player{align-items:center;gap:10px;min-width:0;max-width:100%;display:flex}.self-player>div:last-child{min-width:0}.self-player b{font-size:clamp(12px, calc(var(--canvas-height) * .026), 20px);white-space:nowrap;text-overflow:ellipsis;margin-bottom:5px;font-weight:500;display:block;overflow:hidden}.self-you{color:#a9cddd}.self-player small{color:#b7c1ab;font-size:clamp(10px, calc(var(--canvas-height) * .019), 15px);white-space:nowrap;margin-top:5px;display:block}.self-meta{color:#8fa795;margin-top:5px;font-size:11px;display:block}.sort-button{color:var(--gold);min-height:35px;font-size:clamp(11px, calc(var(--canvas-height) * .022), 17px);padding:6px 16px}.hand{scrollbar-width:thin;scrollbar-color:#bba36766 transparent;grid-area:hand;justify-content:safe center;align-items:flex-end;gap:8px;width:100%;min-width:0;height:100%;padding:25px 6px 5px;display:flex;overflow:auto hidden;container-type:inline-size}.hand-stack{--hand-card-width:clamp(46px, min(11cqw, calc(var(--canvas-height) * .145)), 124px);--hand-overlap:clamp(calc(var(--hand-card-width) * -.46), calc((100cqw - 12px - var(--hand-count) * var(--hand-card-width) - var(--group-count) * 20px) / var(--hand-gaps)), 0px);flex:none;align-items:flex-end;height:100%;display:flex;position:relative}.playing-card{color:#212821;text-align:left;-webkit-user-select:none;user-select:none;background:linear-gradient(145deg,#fffdf6,#e8e4dc);border:1px solid #d8d2c3;border-radius:9px;flex-direction:column;flex:none;justify-content:flex-start;align-items:flex-start;width:88px;height:128px;padding:7px;transition:transform .14s,box-shadow .14s;display:flex;position:relative;box-shadow:inset 0 1px #fff,0 5px 12px #0003}.playing-card span{z-index:1;font:600 30px/.96 Georgia,Times New Roman,serif;display:block;position:relative}.playing-card span b{margin-top:3px;font-size:.78em;font-weight:400;display:block}.playing-card strong{place-items:center;font:60px/1 Georgia,serif;display:grid;position:absolute;inset:33% 5% 5% 25%}.playing-card.red{color:#b33b39}.hand .playing-card{width:var(--hand-card-width);height:clamp(65px, calc(var(--canvas-height) * .215), 186px);padding:clamp(4px,1cqw,9px)}.hand .playing-card+.playing-card{margin-left:var(--hand-overlap)}.hand .playing-card span{font-size:clamp(19px,3.7cqw,40px)}.hand .playing-card strong{font-size:clamp(29px,6.6cqw,78px)}.hand .playing-card.selected{border-color:#f8dc91;transform:translateY(-18px);box-shadow:0 0 0 2px #edcf84,0 0 15px #edcf8433,0 8px 16px #0003}.hand .playing-card{touch-action:none;-webkit-user-select:none;-webkit-touch-callout:none}.hand.swipe-selecting .playing-card{transition:none}.playing-card.small{width:clamp(38px, calc(var(--canvas-height) * .11), 96px);height:clamp(55px, calc(var(--canvas-height) * .156), 136px);cursor:default;border-radius:6px;padding:5px}.playing-card.small span{font-size:clamp(16px, calc(var(--canvas-height) * .038), 32px)}.playing-card.small strong{font-size:clamp(25px, calc(var(--canvas-height) * .075), 62px)}.app-shell.game-mode .hand.has-groups{padding-bottom:30px}.hand-group{height:auto}.hand-group:after{content:"";pointer-events:none;background:#d8c07b66;height:1px;position:absolute;bottom:-15px;left:3px;right:32px}.group-remove{z-index:4;color:#c9bd98;touch-action:manipulation;background:0 0;border:0;border-radius:3px;place-items:center;width:28px;height:28px;padding:0;font-size:19px;line-height:1;display:grid;position:absolute;bottom:-28px;right:0}.group-remove:focus-visible{outline-offset:-2px;outline:1px solid #e6ce94}.group-remove:active{color:#fff1c9}.toast{left:50%;bottom:calc(20px + env(safe-area-inset-bottom));z-index:20;color:#3d3826;background:#f4edda;border:1px solid #d8bd7c;border-radius:12px;max-width:min(90vw,600px);padding:12px 20px;font-size:13px;position:fixed;transform:translate(-50%);box-shadow:0 10px 30px #0004}.rotate-note{color:#c8bc98;z-index:6;pointer-events:none;font-size:10px;position:fixed;bottom:10px;right:14px}.modal-backdrop{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);z-index:30;background:#071c19bb;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.modal{color:#263d31;background:#f3eee1;border-radius:20px;max-width:620px;max-height:90dvh;padding:28px;position:relative;overflow:auto;box-shadow:0 20px 80px #0006}.modal h2{margin-top:0;font-weight:500}.modal p{font-size:14px;line-height:1.8}.modal small{color:#7b8878;font-size:11px}.close{color:#455344;background:0 0;border:0;font-size:28px;position:absolute;top:8px;right:12px}.exposed-modal{width:min(780px,96vw)}.exposed-modal h2{padding-right:25px}.revealed-hand-grid{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.revealed-hand-grid .playing-card{cursor:default;width:56px;height:82px}.revealed-hand-grid .playing-card span{font-size:21px}.revealed-hand-grid .playing-card strong{font-size:34px}@media (hover:hover){.group-remove:hover{color:#fff1c9;background:#dfc5830b}.primary:hover:not(:disabled){background:linear-gradient(135deg,#f7d996,#e5c67d)}.secondary:hover:not(:disabled),.menu-popover button:hover{background:#dae7bd0c;border-color:#dfd2a9}.text-button:hover{color:#f1dfb0}.hand .playing-card:not(.selected):hover{transform:translateY(-5px)}}@keyframes deal-in{0%{opacity:0;transform:translateY(-60px)scale(.65)}to{opacity:1;transform:translateY(0)scale(1)}}.dealing-hand .playing-card{animation:.3s cubic-bezier(.2,.8,.2,1) deal-in}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.personal-total{color:var(--gold,#e4c878);align-items:baseline;gap:8px;margin:14px 0;display:flex}.personal-total strong{font-size:36px}.round-settlement{border-block:1px solid var(--line);text-align:left;margin:12px 0}.round-settlement summary{cursor:pointer;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px 16px;padding:12px 0;display:flex}.round-settlement summary b{color:var(--gold)}.round-settlement summary small{color:var(--muted);font-size:12px}.round-settlement>p{font-size:12px}.round-settlement .score-lines{overscroll-behavior:contain;max-height:180px;margin:10px 0}.live-total{white-space:nowrap;color:#e4c878;border:1px solid #e4c87840;border-radius:999px;flex:none;margin-left:auto;padding:5px 10px;font-size:13px}.live-total b{font-size:18px}.sound-button{padding:6px 9px;font-size:22px}.finish-match{white-space:nowrap;font-size:12px}.performance-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0 24px;display:grid}.performance-grid>div{background:#ffffff06;border:1px solid #e4c87820;border-radius:12px;gap:7px;padding:12px;display:grid}.performance-grid small,.match-players small{color:#afc1b9}.performance-grid b{color:#e4c878;font-size:18px}.match-players{gap:8px;margin:14px 0 24px;display:grid}.match-players>div{border-bottom:1px solid #ffffff14;grid-template-columns:minmax(0,1fr) auto;gap:6px;padding:10px 0;display:grid}.match-players small{grid-column:1/-1}.match-players strong{color:#e4c878}.round-record{border-top:1px solid #e4c87820;margin-top:8px}.round-record summary{cursor:pointer;padding:12px 0}.round-record summary span{float:right;color:#e4c878}.round-player-deltas{flex-wrap:wrap;gap:8px;margin-bottom:10px;display:flex}.audio-settings>label{border-bottom:1px solid #e4c87820;justify-content:space-between;align-items:center;padding:16px 0;display:flex}.audio-settings label small{color:#afc1b9;margin-top:5px;display:block}.audio-settings input[type=checkbox]{accent-color:#e4c878;width:22px;height:22px}.audio-settings .volume-setting{gap:14px;display:grid}.audio-settings input[type=range]{accent-color:#e4c878;width:100%}@media (width<=900px){.top-actions{gap:6px}.header-room{margin-left:3px;padding-left:12px;font-size:11px}.scoreboard{gap:14px}.score span{font-size:12px}.score b{font-size:22px}.round-number{font-size:11px}.self-player .avatar,.self-meta{display:none}.opponent-info .player-name{gap:5px}.player-count{margin-top:3px}.reveal-trigger{padding:4px 7px;font-size:9px}}@media (width<=720px){.app-shell{padding-left:max(12px, env(safe-area-inset-left));padding-right:max(12px, env(safe-area-inset-right))}.header-room{display:none}.entry-panel{grid-template-columns:1fr;gap:24px;max-width:460px;min-height:0;padding:40px 0}.entry-hero h1{margin:16px 0;font-size:43px}.entry-hero p{font-size:13px}.entry-form{padding:24px}:is(.lobby-panel,.lobby-panel:has(.result-card)){grid-template-columns:1fr;margin:20px auto}.lobby-main,.result-card{padding:20px}.lobby-seat{gap:10px;min-height:82px;padding:12px}.lobby-seat small{font-size:10px;line-height:1.6}.lobby-seat .team-mark{display:none}.room-strip{flex-wrap:wrap;gap:10px}.room-strip .phase-pill{font-size:11px}.connection{font-size:10px}.game-mode .connection{font-size:0}.game-mode .connection:before{width:6px;height:6px;margin:0}.game-mode .brand{gap:7px}.scoreboard{gap:10px}.score{gap:5px}.score span{font-size:11px}.score b{font-size:19px}.round-number{font-size:10px}.turn-actions button{padding:4px 12px}.turn-actions .ui-icon{width:16px;height:16px}.opponent.position-1{right:0}.opponent.position-3{left:0}.self-info{gap:8px;padding-right:5px}.sort-button{gap:4px;min-height:32px;padding:5px 10px}.sort-button .ui-icon{width:17px;height:17px}.hand{padding-top:24px}}@media (height<=500px) and (orientation:landscape){.topbar{height:42px}.brand b{font-size:20px}.brand-icon{font-size:28px}.brand small{display:none}.entry-panel{grid-template-columns:1fr 1fr;gap:30px;max-width:960px;min-height:calc(100dvh - 54px);padding:12px 0}.entry-hero h1{margin:12px 0;font-size:36px}.entry-hero p{font-size:12px}.entry-form{border-radius:16px;gap:7px;padding:14px 20px}.entry-form label{gap:4px}.entry-form input{height:36px}.entry-form .primary,.entry-form .secondary{min-height:34px;padding:5px 12px}.lobby-panel{margin:10px auto}.lobby-main{padding:16px}.lobby-main h2{font-size:20px}.lobby-main p{margin-bottom:10px;font-size:11px}.lobby-seats{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.lobby-seat{gap:7px;min-height:68px;padding:10px}.lobby-seat b{font-size:12px}.seat-number{font-size:18px}.team-mark{display:none}.lobby-buttons{margin-top:12px}.game-mode .top-actions{gap:5px}.game-mode .immersive-button,.game-mode .game-menu summary{width:36px;height:36px;min-height:36px;padding:6px}.game-mode .table-center{gap:5px;top:34%}.game-mode .opponent.position-2{top:6px}.game-mode .opponent.position-1,.game-mode .opponent.position-3{top:58%}.game-mode .opponent{max-width:26%}.game-mode .avatar{width:32px}.game-mode .player-name b{font-size:12px}.game-mode .player-count{font-size:10px}.game-mode .team-badge{padding:1px 5px;font-size:9px}.game-mode .turn-label{padding:4px 14px}.game-mode .table-status{gap:7px}.game-mode .trick-area{gap:3px}.game-mode .trick-cards{padding-bottom:3px}.game-mode .table-center>small,.game-mode .self-player .avatar,.game-mode .self-meta{display:none}.game-mode .self-player b{margin-bottom:3px}.game-mode .self-player small{margin-top:3px}.game-mode .bottom-zone{padding-bottom:0}.game-mode .toolbar{gap:4px}.game-mode .turn-actions button{min-height:34px}.game-mode .selection-label{font-size:10px}.game-mode .sort-button{min-height:32px}.exposed-modal{max-height:calc(100dvh - 16px);padding:16px}.exposed-modal h2{margin-bottom:10px;font-size:18px}.revealed-hand-grid .playing-card{width:44px;height:64px}.revealed-hand-grid .playing-card span{font-size:17px}.revealed-hand-grid .playing-card strong{font-size:27px}}@media (width<=600px) and (height<=380px) and (orientation:landscape){.game-mode .bottom-zone{height:calc(clamp(138px, calc(150px - env(safe-area-inset-bottom) - env(safe-area-inset-top)), 150px) + var(--group-headroom))}.game-mode .bottom-zone:has(.hand-group){--group-headroom:22px}.game-mode .hand{padding-bottom:3px}.game-mode .hand .playing-card{height:calc(69px - min(10px, env(safe-area-inset-bottom)))}.game-mode .toolbar{gap:2px;min-height:54px;padding:2px 0}.game-mode .opponent.position-2{top:4px}.game-mode .avatar{width:28px}.game-mode .turn-actions{gap:6px}.game-mode .turn-actions button{min-width:61px;padding:4px 10px}.game-mode .turn-actions .play-button{min-width:89px}.game-mode .turn-actions .ui-icon,.game-mode .self-info .team-badge{display:none}.game-mode .reveal-trigger{padding:3px 5px;font-size:8px}.game-mode .turn-label{font-size:12px}.game-mode .table-center{gap:3px;top:33px;left:27%;right:27%}.game-mode .table-status{gap:5px}.game-mode .turn-clock{width:29px}.game-mode .playing-card.small{width:30px;height:40px;padding:3px}.game-mode .playing-card.small span{font-size:14px}.game-mode .playing-card.small strong{font-size:22px}}@media (orientation:portrait){.game-mode:not(.virtual-landscape) .topbar{align-items:flex-start;height:92px;padding-top:12px}.game-mode:not(.virtual-landscape) .scoreboard{top:57px}.game-mode:not(.virtual-landscape) .scoreboard .score b{font-size:22px}.game-mode:not(.virtual-landscape) .brand-icon{font-size:29px}.game-mode:not(.virtual-landscape) .brand b{font-size:21px}.game-mode:not(.virtual-landscape) .bottom-zone{height:calc(265px + var(--group-headroom));grid-template:"actions"74px"self"38px"hand"minmax(0,1fr)/minmax(0,1fr);padding-bottom:8px}.game-mode:not(.virtual-landscape) .bottom-zone:has(.hand-group){--group-headroom:20px}.game-mode:not(.virtual-landscape) .self-info{flex-direction:row;justify-content:space-between;align-items:center;padding:0 6px}.game-mode:not(.virtual-landscape) .self-player>div:last-child{align-items:center;gap:7px;display:flex}.game-mode:not(.virtual-landscape) .self-player b{margin:0;font-size:12px}.game-mode:not(.virtual-landscape) .self-player small{margin:0;font-size:10px}.game-mode:not(.virtual-landscape) .self-player .team-badge,.game-mode:not(.virtual-landscape) .self-player .avatar{display:none}.game-mode:not(.virtual-landscape) .table-center{top:31%;left:26%;right:26%}.game-mode:not(.virtual-landscape) .table-status{flex-direction:column;gap:6px}.game-mode:not(.virtual-landscape) .turn-label{padding:5px 13px;font-size:13px}.game-mode:not(.virtual-landscape) .turn-clock{width:34px;font-size:16px}.game-mode:not(.virtual-landscape) .opponent{text-align:center;flex-direction:column;gap:6px;max-width:26%}.game-mode:not(.virtual-landscape) .opponent.position-2{flex-direction:row;max-width:80%}.game-mode:not(.virtual-landscape) .avatar{width:42px}.game-mode:not(.virtual-landscape) .player-name{flex-direction:column;gap:4px}.game-mode:not(.virtual-landscape) .opponent.position-2 .player-name{flex-direction:row}.game-mode:not(.virtual-landscape) .player-name b{font-size:13px}.game-mode:not(.virtual-landscape) .player-count{font-size:10px}.game-mode:not(.virtual-landscape) .playing-card.small{width:50px;height:72px}.game-mode:not(.virtual-landscape) .playing-card.small span{font-size:20px}.game-mode:not(.virtual-landscape) .playing-card.small strong{font-size:32px}.game-mode:not(.virtual-landscape) .turn-actions{gap:6px}.game-mode:not(.virtual-landscape) .turn-actions button{gap:5px;min-width:59px;height:41px;padding:5px 10px;font-size:12px}.game-mode:not(.virtual-landscape) .turn-actions .play-button{min-width:85px;font-size:17px}.game-mode:not(.virtual-landscape) .selection-label{font-size:11px}.game-mode:not(.virtual-landscape) .hand .playing-card{height:114px}.game-mode:not(.virtual-landscape) .table-center>small{display:none}.app-shell.virtual-landscape{--canvas-width:100dvh;--canvas-height:100dvw;z-index:50;width:var(--canvas-width);height:var(--canvas-height);transform-origin:0 0;min-height:0;padding:0 12px 6px;position:fixed;top:0;left:100dvw;overflow:auto;transform:rotate(90deg)}.app-shell.virtual-landscape.direction-right{top:100dvh;left:0;transform:rotate(-90deg)}.app-shell.virtual-landscape.game-mode{overflow:hidden}.app-shell.virtual-landscape:has(.room-page){flex-direction:column;display:flex;overflow:hidden}.virtual-landscape .room-page{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding-bottom:12px;overflow:auto}.virtual-landscape .topbar{height:40px}.virtual-landscape .brand small{display:none}.virtual-landscape .brand b{font-size:20px}.virtual-landscape .brand-icon{font-size:28px}.virtual-landscape .entry-panel{grid-template-columns:1fr 1fr;gap:24px;max-width:none;min-height:calc(100dvw - 46px);padding:8px 0}.virtual-landscape .entry-hero h1{margin:10px 0;font-size:34px}.virtual-landscape .entry-hero p{font-size:12px}.virtual-landscape .entry-form{border-radius:16px;gap:6px;padding:12px 16px}.virtual-landscape .entry-form label{gap:3px}.virtual-landscape .entry-form input{height:34px}.virtual-landscape .entry-form .primary,.virtual-landscape .entry-form .secondary{min-height:32px;padding:4px 12px}:is(.virtual-landscape .lobby-panel,.virtual-landscape .lobby-panel:has(.result-card)){max-width:none;margin:6px auto;display:block}.virtual-landscape .lobby-main,.virtual-landscape .result-card{padding:12px}.virtual-landscape .lobby-main h2{margin-bottom:4px;font-size:20px}.virtual-landscape .lobby-main p{margin-bottom:8px;font-size:11px}.virtual-landscape .lobby-seats{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.virtual-landscape .lobby-seat{gap:5px;min-height:64px;padding:8px}.virtual-landscape .lobby-seat b{font-size:12px}.virtual-landscape .lobby-seat small{font-size:9px}.virtual-landscape .seat-number{font-size:17px}.virtual-landscape .lobby-buttons{margin-top:8px}.virtual-landscape .result-card{margin-top:10px}.virtual-landscape .header-room{display:none}.virtual-landscape .room-strip{flex-wrap:nowrap;margin:4px auto}.virtual-landscape .room-strip b{font-size:15px}.virtual-landscape .room-strip small{display:none}.virtual-landscape .table-center{gap:5px;top:34%}.virtual-landscape .opponent.position-2{top:6px}.virtual-landscape .opponent{max-width:26%}.virtual-landscape .avatar{width:32px}.virtual-landscape .player-name b{font-size:12px}.virtual-landscape .player-count{font-size:10px}.virtual-landscape .team-badge{font-size:9px}.virtual-landscape .turn-label{padding:4px 14px}.virtual-landscape .trick-area{gap:3px}.virtual-landscape .trick-cards{padding-bottom:3px}.virtual-landscape .table-center>small,.virtual-landscape .self-player .avatar,.virtual-landscape .self-meta{display:none}.virtual-landscape .toolbar{gap:4px}.virtual-landscape .turn-actions button{min-width:64px;height:36px;padding:4px 12px;font-size:12px}.virtual-landscape .turn-actions .play-button{min-width:96px;font-size:17px}.virtual-landscape .selection-label{font-size:10px}.virtual-landscape .self-info{gap:8px}.virtual-landscape .modal{max-height:calc(100dvw - 24px);padding:16px}.virtual-landscape .exposed-modal{max-height:calc(100dvw - 16px);padding:14px}.virtual-landscape .exposed-modal h2{margin-bottom:10px;font-size:18px}.virtual-landscape .revealed-hand-grid .playing-card{width:44px;height:64px}}.virtual-landscape .lobby-panel:has(.match-results){grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);align-items:start;gap:12px;display:grid}.virtual-landscape .lobby-panel .match-results{margin-top:0}.virtual-landscape .performance-grid>div{padding:9px}.virtual-landscape .performance-grid b{font-size:14px}.virtual-landscape .lobby-panel:has(.match-results) .lobby-seats{grid-template-columns:repeat(2,minmax(0,1fr))}.virtual-landscape .live-total{padding:3px 8px;font-size:10px}.virtual-landscape .live-total b{font-size:13px}@media (width<=600px){.game-mode:not(.virtual-landscape) .finish-match{min-height:28px;padding:5px 7px;font-size:10px}.game-mode:not(.virtual-landscape) .top-actions{gap:4px}.game-mode:not(.virtual-landscape) .sound-button{padding:5px}.live-total{padding:3px 7px;font-size:10px}.live-total b{font-size:14px}.lobby-buttons{flex-wrap:wrap}}@media (orientation:landscape) and (height<=600px){.lobby-panel:has(.match-results){grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);align-items:start;gap:12px;display:grid}.lobby-main,.result-card{padding:16px}.lobby-panel:has(.match-results) .lobby-seats{grid-template-columns:repeat(2,minmax(0,1fr))}.personal-total strong{font-size:28px}}.app-shell.game-mode,.app-shell.virtual-landscape.game-mode{overflow:clip}@media (height<=500px) and (orientation:landscape){.app-shell.game-mode .self-info{align-self:start;gap:6px;padding-top:4px}.app-shell.game-mode .self-player .team-badge{display:none}.app-shell.game-mode .self-player b{margin-bottom:2px;font-size:12px}.app-shell.game-mode .self-player small{margin-top:2px;font-size:10px}.app-shell.game-mode .sort-button{min-height:28px;padding:3px 9px;font-size:11px}}@media (height<=350px) and (orientation:landscape){.app-shell.game-mode .self-player small{display:none}.app-shell.game-mode .self-info{gap:4px}}@media (orientation:portrait){.app-shell.virtual-landscape .self-info{align-self:start;gap:6px;padding-top:4px}.virtual-landscape .self-player .team-badge{display:none}.virtual-landscape .self-player b{margin-bottom:2px;font-size:12px}.virtual-landscape .self-player small{margin-top:2px;font-size:10px}.virtual-landscape .sort-button{min-height:28px;padding:3px 9px;font-size:11px}}@media (height<=500px) and (orientation:landscape){.app-shell.game-mode .live-total{padding:2px 7px;font-size:10px;line-height:1.2}.app-shell.game-mode .live-total b{font-size:14px}}@media (orientation:portrait){.app-shell.game-mode:not(.virtual-landscape) .toolbar{height:74px;min-height:0}.app-shell.virtual-landscape .live-total{padding:2px 7px;font-size:10px;line-height:1.2}.app-shell.virtual-landscape .live-total b{font-size:14px}}.player-name{min-width:0}.player-meta{flex-wrap:wrap;flex-shrink:0;align-items:baseline;gap:4px;display:flex}.player-meta .player-count{margin-top:0}.player-points{color:#e4d09a;font-size:clamp(10px, calc(var(--canvas-height) * .014), 13px);white-space:nowrap;flex:none;align-items:baseline;gap:4px;line-height:1.4;display:inline-flex}.player-points strong{color:#f1d692;font-variant-numeric:tabular-nums;font-size:1.15em;font-weight:600;line-height:1}@media (height>=501px) and (orientation:landscape){.app-shell.game-mode .opponent.position-2 .player-meta{flex-direction:column;align-items:flex-start;gap:0}}@media (height<=500px) and (orientation:landscape){.app-shell.game-mode .opponent.position-2:has(.revealed-preview) .player-count{display:none}.app-shell.game-mode .opponent.position-2 .player-meta{justify-content:center}}@media (orientation:portrait){.app-shell.game-mode:not(.virtual-landscape) .player-meta{flex-direction:row;gap:4px}.app-shell.game-mode:not(.virtual-landscape) .opponent .player-points{font-size:10px}.app-shell.game-mode:not(.virtual-landscape) .opponent-identity .opponent-info{text-align:left}.app-shell.virtual-landscape .opponent.position-2:has(.revealed-preview) .player-count{display:none}.app-shell.virtual-landscape .opponent.position-2 .player-meta{justify-content:center}}.opponent{--fan-width:clamp(38px, calc(var(--canvas-height) * .061), 54px);--fan-height:clamp(52px, calc(var(--canvas-height) * .085), 76px);--fan-step:clamp(27px, calc(var(--canvas-height) * .04), 36px);--fan-index:clamp(18px, calc(var(--canvas-height) * .027), 25px);--fan-columns:8;--fan-tail:calc(var(--fan-width) - var(--fan-step))}.app-shell.game-mode .opponent{grid-template-columns:minmax(0,1fr);align-items:start;gap:10px;width:25%;max-width:25%;display:grid}.app-shell.game-mode .opponent.position-1,.app-shell.game-mode .opponent.position-3{scrollbar-width:thin;align-content:safe center;top:0;bottom:0;overflow:hidden auto;transform:none}.opponent-identity{align-items:center;gap:10px;min-width:0;display:flex}.app-shell.game-mode .opponent.position-2{--fan-columns:13;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:7px 20px;width:max-content;max-width:70%;display:grid}.opponent.position-2 .opponent-identity{grid-area:1/1/span 2}.opponent.position-2 .revealed-preview{grid-area:1/2}.opponent.position-2 .past-slot{grid-area:2/2}.revealed-preview{width:calc(var(--fan-count) * var(--fan-step) + var(--fan-tail));flex-direction:column;gap:5px;min-width:0;max-width:100%;display:flex}.past-slot{border-top:1px solid #d8bf7a26;min-width:0;padding-top:8px}.opponent.position-2 .past-slot{padding-top:4px}.seat-past{text-align:left;background:0 0;border:0;flex-direction:column;gap:5px;width:100%;min-width:0;min-height:0;padding:0;display:flex}.past-label,.reveal-label{flex-wrap:wrap;align-items:center;gap:7px;font-size:11px;line-height:1.2;display:flex}.reveal-label{color:#ddc788}.past-label{color:#9db3a6}.pass-mark{color:#bdc9bf}.card-fan{grid-template-columns:repeat(auto-fit, var(--fan-step));width:min(100%, calc(var(--fan-count) * var(--fan-step) + var(--fan-tail)), calc(var(--fan-columns) * var(--fan-step) + var(--fan-tail)));padding-right:var(--fan-tail);text-align:left;row-gap:6px;display:grid}.table-card{width:var(--fan-width);height:var(--fan-height);color:#212821;-webkit-user-select:none;user-select:none;background:linear-gradient(145deg,#fffdf6,#e8e4dc);border:1px solid #d8d2c3;border-radius:5px;padding:4px;font-family:Georgia,Times New Roman,serif;position:relative;box-shadow:-1px 0 3px #0002,0 3px 5px #0002}.table-card.red{color:#b33b39}.card-index{z-index:1;flex-direction:column;align-items:flex-start;gap:2px;display:flex;position:relative}.card-index>b{font-size:var(--fan-index);font-weight:600;line-height:.95}.card-index>span{font-size:calc(var(--fan-index) * .78);line-height:1}.table-card>strong{font-size:calc(var(--fan-height) * .4);text-align:center;font-weight:400;line-height:1;position:absolute;bottom:8%;left:35%;right:5%}.fan-past{--fan-width:clamp(28px, calc(var(--canvas-height) * .038), 36px);--fan-height:clamp(37px, calc(var(--canvas-height) * .055), 50px);--fan-step:clamp(22px, calc(var(--canvas-height) * .027), 25px);--fan-index:clamp(14px, calc(var(--canvas-height) * .018), 16px);--fan-columns:13;--fan-tail:calc(var(--fan-width) - var(--fan-step))}.fan-past .table-card{color:#2d4438;background:#b3c1b6;border-color:#8fa99c;padding:2px;box-shadow:-1px 0 2px #0001}.fan-past .table-card.red{color:#85514b}.fan-past .table-card>strong{opacity:.5}.seat-past:hover .table-card,.seat-past:focus-visible .table-card{filter:brightness(1.08)}.app-shell.game-mode .table-center{gap:8px;inset:25% 28% 12px}.app-shell.game-mode .trick-area{flex:none;gap:7px}.current-target{color:#b4c5b9;font-size:12px;line-height:1.25}.trick-cards{justify-content:center;width:100%;max-width:100%;padding:3px 0 5px;display:flex;overflow:visible}.fan-current{--fan-width:clamp(38px, calc(var(--canvas-height) * .11), 96px);--fan-height:clamp(55px, calc(var(--canvas-height) * .156), 136px);--fan-step:calc(var(--fan-width) * .6);--fan-index:clamp(16px, calc(var(--canvas-height) * .038), 32px);--fan-columns:13;--fan-tail:calc(var(--fan-width) - var(--fan-step))}.fan-current .table-card{border-radius:7px;padding:6px}.fan-current .table-card>strong{font-size:calc(var(--fan-height) * .5)}.bottom-zone{position:relative}.self-trick{width:clamp(86px, calc(var(--canvas-width) * .14), 200px);max-width:25%;position:absolute;top:3px;left:0}.self-trick .seat-past{gap:5px}.trick-detail{border-top:1px solid #8fa79550;margin-top:16px;padding-top:8px}.trick-detail h3{font-size:13px;font-weight:500}.fan-past,.fan-current{animation:.16s ease-out cards-appear}@keyframes cards-appear{0%{opacity:.65;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.card-fan{animation:none}}@media (height<=500px) and (orientation:landscape){.opponent{--fan-width:36px;--fan-height:48px;--fan-step:24px;--fan-index:16px;--fan-columns:8}.app-shell.game-mode .opponent{gap:5px;width:25.5%;max-width:25.5%}.opponent-identity{gap:6px}.app-shell.game-mode .opponent.position-2{gap:4px 10px;max-width:46%}.revealed-preview{gap:3px}.past-slot{padding-top:5px}.past-label,.reveal-label{font-size:9px}.fan-past{--fan-width:28px;--fan-height:35px;--fan-step:22px;--fan-index:14px;row-gap:4px}.table-card{padding:3px}.card-fan{row-gap:4px}.app-shell.game-mode .table-center{flex-direction:row;justify-content:center;align-items:flex-start;gap:8px;top:max(43%,88px);bottom:0}.table-status{flex-direction:column;gap:4px}.turn-label{padding:4px 10px;font-size:12px}.turn-clock{width:29px}.app-shell.game-mode .trick-area{gap:3px;width:calc(100% - 82px);min-width:0;max-width:none}.current-target{font-size:10px}.fan-current{--fan-width:38px;--fan-height:53px;--fan-step:27px;--fan-index:18px}.app-shell.game-mode .table-center:has(.fan-current.long){top:65px}.fan-current.long{--fan-width:34px;--fan-height:46px;--fan-step:25px;--fan-index:16px}.app-shell.game-mode .table:has(.position-2 .fan-revealed.full-hand) .table-center{top:120px}.table:has(.position-2 .fan-revealed.full-hand) .fan-current{--fan-width:34px;--fan-height:44px;--fan-step:25px;--fan-index:16px}.fan-current .table-card{border-radius:5px;padding:3px}.table-center>small{display:none}}@media (height<=350px) and (orientation:landscape){.opponent{--fan-width:30px;--fan-height:39px;--fan-step:22px;--fan-index:15px}.app-shell.game-mode .opponent{gap:3px}.app-shell.game-mode .opponent.position-2{column-gap:6px;max-width:46%}.app-shell.game-mode .opponent .avatar{width:25px}.fan-past{--fan-width:26px;--fan-height:31px;--fan-step:20px;--fan-index:13px}.app-shell.game-mode .table-center{gap:5px;top:72px}.turn-label{padding:3px 6px;font-size:10px}.fan-current{--fan-width:32px;--fan-height:44px;--fan-step:24px;--fan-index:16px}.app-shell.game-mode .table-center:has(.fan-current.long){top:50px}.fan-current.long{--fan-width:28px;--fan-height:31px;--fan-step:21px;--fan-index:14px}}@media (orientation:portrait),(height<=350px){.app-shell.game-mode:not(.virtual-landscape) .table{scrollbar-width:thin;grid-template-columns:repeat(3,minmax(0,1fr));align-content:start;align-items:start;gap:16px 7px;padding:12px 0;display:grid;overflow:hidden auto}.app-shell.game-mode:not(.virtual-landscape) .opponent{--fan-width:36px;--fan-height:50px;--fan-step:25px;--fan-index:17px;--fan-columns:5;grid-template-columns:minmax(0,1fr);gap:6px;width:100%;max-width:100%;display:grid;position:static;transform:none}.app-shell.game-mode:not(.virtual-landscape) .position-3{grid-area:1/1}.app-shell.game-mode:not(.virtual-landscape) .position-2{grid-area:1/2}.app-shell.game-mode:not(.virtual-landscape) .position-1{grid-area:1/3}.app-shell.game-mode:not(.virtual-landscape) .opponent-identity{text-align:left;flex-direction:row;grid-area:auto/1;gap:5px}.app-shell.game-mode:not(.virtual-landscape) .opponent .avatar{width:28px}.app-shell.game-mode:not(.virtual-landscape) .player-name{display:block}.app-shell.game-mode:not(.virtual-landscape) .player-name b{max-width:100%;font-size:12px;display:block}.app-shell.game-mode:not(.virtual-landscape) .opponent .team-badge{display:none}.app-shell.game-mode:not(.virtual-landscape) .player-count{margin-top:2px;font-size:10px}.app-shell.game-mode:not(.virtual-landscape) .revealed-preview,.app-shell.game-mode:not(.virtual-landscape) .past-slot{grid-area:auto/1}.app-shell.game-mode:not(.virtual-landscape) .revealed-preview{gap:3px;width:100%}.app-shell.game-mode:not(.virtual-landscape) .reveal-label,.app-shell.game-mode:not(.virtual-landscape) .past-label{font-size:9px}.app-shell.game-mode:not(.virtual-landscape) .table-card{padding:2px}.app-shell.game-mode:not(.virtual-landscape) .card-fan{row-gap:4px}.app-shell.game-mode:not(.virtual-landscape) .fan-past{--fan-width:27px;--fan-height:34px;--fan-step:20px;--fan-index:13px}.app-shell.game-mode:not(.virtual-landscape) .table-center{grid-area:2/1/auto/-1;gap:7px;width:100%;padding:0 16px 12px;position:static}.app-shell.game-mode:not(.virtual-landscape) .table-status{flex-direction:row}.app-shell.game-mode:not(.virtual-landscape) .fan-current{--fan-width:48px;--fan-height:66px;--fan-step:34px;--fan-index:22px;--fan-columns:3}.app-shell.game-mode:not(.virtual-landscape) .fan-current.long{--fan-columns:6;--fan-height:58px}.app-shell.game-mode:not(.virtual-landscape) .fan-current .table-card{padding:4px}.app-shell.game-mode:not(.virtual-landscape) .self-trick{width:100%;max-width:100%;top:-32px;left:0}.app-shell.game-mode:not(.virtual-landscape) .self-trick .seat-past{flex-direction:row;justify-content:center;align-items:center;gap:8px}.app-shell.game-mode:not(.virtual-landscape) .self-trick .fan-past{--fan-columns:13}.app-shell.virtual-landscape .opponent{--fan-width:36px;--fan-height:48px;--fan-step:24px;--fan-index:16px;--fan-columns:8;gap:5px;width:25.5%;max-width:25.5%}.app-shell.virtual-landscape .opponent.position-2{--fan-columns:13;gap:4px 10px;max-width:46%}.virtual-landscape .opponent-identity{gap:6px}.virtual-landscape .revealed-preview{gap:3px}.virtual-landscape .past-slot{padding-top:5px}.virtual-landscape .past-label,.virtual-landscape .reveal-label{font-size:9px}.virtual-landscape .card-fan{row-gap:4px}.virtual-landscape .table-card{padding:3px}.virtual-landscape .fan-past{--fan-width:28px;--fan-height:35px;--fan-step:22px;--fan-index:14px}.app-shell.virtual-landscape .table-center{flex-direction:row;justify-content:center;align-items:flex-start;gap:8px;top:max(43%,88px);bottom:0}.virtual-landscape .table-status{flex-direction:column;gap:4px}.virtual-landscape .turn-label{padding:4px 10px;font-size:12px}.virtual-landscape .turn-clock{width:29px}.app-shell.virtual-landscape .trick-area{gap:3px;width:calc(100% - 82px);min-width:0;max-width:none}.virtual-landscape .current-target{font-size:10px}.virtual-landscape .fan-current{--fan-width:38px;--fan-height:53px;--fan-step:27px;--fan-index:18px}.app-shell.virtual-landscape .table-center:has(.fan-current.long){top:65px}.virtual-landscape .fan-current.long{--fan-width:34px;--fan-height:46px;--fan-step:25px;--fan-index:16px}.app-shell.virtual-landscape .table:has(.position-2 .fan-revealed.full-hand) .table-center{top:120px}.virtual-landscape .table:has(.position-2 .fan-revealed.full-hand) .fan-current{--fan-width:34px;--fan-height:44px;--fan-step:25px;--fan-index:16px}.virtual-landscape .fan-current .table-card{border-radius:5px;padding:3px}}@media (height<=350px) and (orientation:landscape){.app-shell.game-mode:not(.virtual-landscape) .table{padding:0;display:block;overflow:visible}.app-shell.game-mode:not(.virtual-landscape) .opponent{--fan-width:28px;--fan-height:38px;--fan-step:20px;--fan-index:14px;--fan-columns:8;width:28%;max-width:28%;position:absolute}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-1{inset:0 0 0 auto}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-3{inset:0 auto 0 0}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2{grid-template-columns:auto minmax(0,1fr);gap:3px 6px;width:max-content;max-width:46%;max-height:64px;top:4px;bottom:auto;left:50%;overflow:hidden auto;transform:translate(-50%)}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2 .opponent-identity{grid-area:1/1/span 2}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2 .revealed-preview{width:calc(var(--fan-count) * var(--fan-step) + var(--fan-tail));grid-area:1/2}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2 .past-slot{grid-area:2/2}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2 .player-count{display:none}.app-shell.game-mode:not(.virtual-landscape) .opponent .avatar{width:25px}.app-shell.game-mode:not(.virtual-landscape) .opponent .player-name b{font-size:10px}.app-shell.game-mode:not(.virtual-landscape) .table-center{flex-direction:row;justify-content:center;align-items:flex-start;gap:5px;width:auto;padding:0;position:absolute;inset:65px 29% 0}.app-shell.game-mode:not(.virtual-landscape) .table-status{flex-direction:column;gap:3px}.app-shell.game-mode:not(.virtual-landscape) .table-status .turn-label{padding:3px 5px;font-size:10px}.app-shell.game-mode:not(.virtual-landscape) .table-status .turn-clock{width:24px;font-size:12px}.app-shell.game-mode:not(.virtual-landscape) .trick-area{width:calc(100% - 63px)}.app-shell.game-mode:not(.virtual-landscape) .current-target{font-size:9px}.app-shell.game-mode:not(.virtual-landscape) .trick-cards{padding:0}.app-shell.game-mode:not(.virtual-landscape) .fan-current{--fan-width:34px;--fan-height:45px;--fan-step:25px;--fan-index:16px;--fan-columns:8}.app-shell.game-mode:not(.virtual-landscape) .fan-current .table-card{padding:3px}}@media (orientation:portrait) and (width<=350px){.app-shell.virtual-landscape .opponent{--fan-width:30px;--fan-height:39px;--fan-step:22px;--fan-index:15px;gap:3px}.app-shell.virtual-landscape .opponent.position-2{column-gap:6px}.app-shell.virtual-landscape .opponent .avatar{width:25px}.virtual-landscape .fan-past{--fan-width:26px;--fan-height:31px;--fan-step:20px;--fan-index:13px}.app-shell.virtual-landscape .table-center{gap:5px;top:72px}.virtual-landscape .turn-label{padding:3px 6px;font-size:10px}.virtual-landscape .fan-current{--fan-width:32px;--fan-height:44px;--fan-step:24px;--fan-index:16px}.app-shell.virtual-landscape .table-center:has(.fan-current.long){top:50px}.virtual-landscape .fan-current.long{--fan-width:28px;--fan-height:31px;--fan-step:21px;--fan-index:14px}}@media (orientation:landscape){.app-shell.game-mode:not(.virtual-landscape) .table{grid-template-rows:auto minmax(0,1fr);grid-template-columns:25% minmax(0,1fr) 25%;padding:8px 0;display:grid;overflow:hidden}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-1,.app-shell.game-mode:not(.virtual-landscape) .opponent.position-3{grid-row:1/span 2;width:100%;max-width:100%;position:static;transform:none}.app-shell.game-mode:not(.virtual-landscape) .position-1{grid-column:3}.app-shell.game-mode:not(.virtual-landscape) .position-3{grid-column:1}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2{grid-area:1/2;justify-self:center;max-width:100%;max-height:none;position:static;overflow:visible;transform:none}.app-shell.game-mode:not(.virtual-landscape) .table-center{scrollbar-width:thin;grid-area:2/2;width:100%;min-height:0;padding:12px 8px 0;position:static;overflow:auto}}.app-shell.virtual-landscape .table{grid-template-rows:auto minmax(0,1fr);grid-template-columns:25% minmax(0,1fr) 25%;padding:8px 0;display:grid;overflow:hidden}.app-shell.virtual-landscape .opponent.position-1,.app-shell.virtual-landscape .opponent.position-3{grid-row:1/span 2;width:100%;max-width:100%;position:static;transform:none}.app-shell.virtual-landscape .position-1{grid-column:3}.app-shell.virtual-landscape .position-3{grid-column:1}.app-shell.virtual-landscape .opponent.position-2{grid-area:1/2;justify-self:center;max-width:100%;max-height:none;position:static;overflow:visible;transform:none}.app-shell.virtual-landscape .table-center{scrollbar-width:thin;grid-area:2/2;width:100%;min-height:0;padding:6px 8px 0;position:static;overflow:auto}.app-shell.game-mode .opponent.position-2:has(.past-slot){grid-template-columns:auto minmax(0,1fr) auto}.app-shell.game-mode .opponent.position-2 .past-slot{border-top:0;border-left:1px solid #d8bf7a26;grid-area:1/3;padding:0 0 0 8px}.opponent.position-2 .fan-past{width:calc(var(--fan-count) * var(--fan-step) + var(--fan-tail));max-width:100%}.opponent-info,.opponent-identity>div{min-width:0}.bottom-zone:has(.self-trick .seat-past){grid-template-areas:"actions actions actions""self past hand";grid-template-columns:clamp(86px, calc(var(--canvas-width) * .14), 200px) max-content minmax(0, 1fr)}.self-trick{grid-area:past;align-self:center;width:auto;max-width:none;margin-right:12px;position:static}.self-trick:has(.seat-past){padding-left:8px}.self-trick .fan-past{width:calc(var(--fan-count) * var(--fan-step) + var(--fan-tail))}.self-trick:not(:has(.seat-past)){display:none}@media (height<=500px) and (orientation:landscape){.app-shell.game-mode:not(.virtual-landscape) .table{padding:6px 0 0}.app-shell.game-mode:not(.virtual-landscape) .table-center{padding-top:6px}.app-shell.game-mode .opponent.position-2 .opponent-identity{text-align:center;flex-direction:column;gap:2px;width:54px}.app-shell.game-mode .opponent.position-2 .team-badge{display:none}.app-shell.game-mode .opponent.position-2 .player-name b{max-width:54px;font-size:11px}.app-shell.game-mode .opponent.position-2{column-gap:6px}.opponent{--fan-height:44px}.app-shell.game-mode .opponent{--fan-step:23px}.fan-current.long{--fan-width:32px;--fan-step:24px}.app-shell.game-mode .table:has(.position-2 .fan-revealed.full-hand) .fan-current.long{--fan-width:32px;--fan-step:24px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot){--fan-height:38px;gap:3px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .avatar{width:26px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .fan-past{--fan-height:30px;--fan-index:13px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .player-count{margin-top:0;font-size:9px;line-height:1.1}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .past-slot{padding-top:2px}.self-trick{margin-right:8px}.self-trick .fan-past{--fan-width:26px;--fan-height:34px;--fan-step:20px;--fan-index:13px}.app-shell.game-mode .table-status{width:74px;max-width:74px}.app-shell.game-mode .turn-label{text-overflow:ellipsis;max-width:100%;overflow:hidden}.opponent .fan-past.long{--fan-width:24px;--fan-height:30px;--fan-step:17px;--fan-index:11px}}@media (orientation:portrait){.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2:has(.past-slot){grid-template-columns:minmax(0,1fr)}.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2 .past-slot{border-top:1px solid #d8bf7a26;border-left:0;grid-area:auto/1;padding:5px 0 0}.app-shell.game-mode:not(.virtual-landscape) .bottom-zone:has(.self-trick .seat-past){height:calc(305px + var(--group-headroom));grid-template:"past"40px"actions"74px"self"38px"hand"minmax(0,1fr)/minmax(0,1fr)}.app-shell.game-mode:not(.virtual-landscape) .self-trick{width:100%;margin:0;padding:0;position:static}.app-shell.game-mode:not(.virtual-landscape) .fan-revealed.full-hand{--fan-width:32px;--fan-height:44px;--fan-step:21px;--fan-index:15px}.app-shell.virtual-landscape .opponent.position-2 .opponent-identity{text-align:center;flex-direction:column;gap:2px;width:54px}.app-shell.virtual-landscape .opponent.position-2 .team-badge{display:none}.app-shell.virtual-landscape .opponent.position-2 .player-name b{max-width:54px;font-size:11px}.app-shell.virtual-landscape .opponent.position-2{column-gap:6px}.virtual-landscape .opponent{--fan-height:44px}.app-shell.virtual-landscape .opponent{--fan-step:23px}.virtual-landscape .fan-current.long{--fan-width:32px;--fan-step:24px}.app-shell.virtual-landscape .table:has(.position-2 .fan-revealed.full-hand) .fan-current.long{--fan-width:32px;--fan-step:24px}.app-shell.virtual-landscape .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot){--fan-height:38px;gap:3px}.app-shell.virtual-landscape .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .avatar{width:26px}.app-shell.virtual-landscape .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .fan-past{--fan-height:30px;--fan-index:13px}.app-shell.virtual-landscape .opponent:not(.position-2):has(.fan-revealed .table-card:nth-child(9)):has(.past-slot) .past-slot{padding-top:2px}.virtual-landscape .self-trick .fan-past{--fan-width:26px;--fan-height:34px;--fan-step:20px;--fan-index:13px}.app-shell.virtual-landscape .table{padding-bottom:0}.app-shell.virtual-landscape .table-status{width:74px;max-width:74px}.app-shell.virtual-landscape .turn-label{text-overflow:ellipsis;max-width:100%;overflow:hidden}.virtual-landscape .opponent .fan-past.long{--fan-width:24px;--fan-height:30px;--fan-step:17px;--fan-index:11px}}@media (height<=350px) and (orientation:landscape){.app-shell.game-mode:not(.virtual-landscape) .opponent.position-2{max-height:42px;overflow:hidden auto}}@media (orientation:portrait) and (width<=350px){.app-shell.virtual-landscape .opponent.position-2{max-height:42px;overflow:hidden auto}.app-shell.virtual-landscape .scoreboard{gap:6px;left:37%}.app-shell.virtual-landscape .score{gap:3px}.app-shell.virtual-landscape .score b{font-size:18px}.app-shell.virtual-landscape .score span,.app-shell.virtual-landscape .round-number{font-size:9px}}@media (orientation:landscape) and (width<=720px) and (height<=500px){.app-shell.game-mode .opponent.position-2:has(.past-slot){--fan-width:32px;--fan-height:40px;--fan-step:20px;--fan-index:13px}.app-shell.game-mode .opponent.position-2:has(.past-slot){column-gap:4px}.app-shell.game-mode .opponent.position-2 .past-slot{padding-left:6px}.app-shell.game-mode .opponent.position-2:has(.past-slot) .opponent-identity{width:34px;max-width:34px}.app-shell.game-mode .opponent.position-2:has(.past-slot) .player-name b{width:34px;max-width:34px}.app-shell.game-mode .opponent.position-2:has(.past-slot) .avatar{width:24px}.app-shell.game-mode .opponent.position-2 .fan-past{--fan-width:26px;--fan-height:30px;--fan-step:18px;--fan-index:12px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed.long):has(.past-slot){--fan-height:35px;--fan-index:14px;gap:3px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed.long):has(.past-slot) .avatar{width:24px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed.long):has(.past-slot) .fan-past{--fan-height:28px;--fan-index:12px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed.long):has(.past-slot) .player-count{margin-top:0;font-size:9px;line-height:1.1}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed.long):has(.past-slot) .past-slot{padding-top:3px}.app-shell.game-mode .opponent:not(.position-2):has(.fan-revealed.long):has(.past-slot) .opponent-info{align-items:center;gap:4px;display:flex}}.app-shell.game-mode .round-indicator{gap:0;left:50%}.app-shell.game-mode .table.seat-play-table{--played-width:clamp(30px, calc(var(--canvas-height) * .058), 52px);--played-height:clamp(35px, calc(var(--canvas-height) * .078), 70px);--played-step:clamp(22px, calc(var(--canvas-height) * .038), 34px);grid-template-rows:max-content minmax(32px,1fr) max-content;grid-template-columns:25% minmax(0,1fr) 25%;gap:0 8px;padding:8px 0 4px;display:grid;overflow:hidden}.app-shell.game-mode .table.seat-play-table .opponent{gap:7px;width:100%;min-width:0;max-width:100%;min-height:0;position:static;overflow:visible;transform:none}.app-shell.game-mode .table.seat-play-table .opponent.position-1,.app-shell.game-mode .table.seat-play-table .opponent.position-3{grid-row:1/4;align-content:center;padding:0 6px}.app-shell.game-mode .table.seat-play-table .opponent.position-3{grid-column:1}.app-shell.game-mode .table.seat-play-table .opponent.position-1{grid-column:3}.app-shell.game-mode .table.seat-play-table .opponent.position-2{grid-area:1/2;grid-template-columns:auto minmax(0,1fr);justify-self:center;gap:5px 12px;width:100%;max-width:100%;max-height:none}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .opponent-identity{grid-area:1/1/span 2}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .revealed-preview{grid-area:1/2}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .past-slot{border-top:1px solid #a2b4a740;border-left:0;grid-area:2/2;padding:5px 0 0}.app-shell.game-mode .table.seat-play-table .past-slot{border-color:#a2b4a740}.app-shell.game-mode .table.seat-play-table .revealed-preview{width:min(100%, max(104px, calc(var(--fan-count) * var(--fan-step) + var(--fan-tail))))}.app-shell.game-mode .table.seat-play-table .reveal-label{white-space:nowrap;flex-wrap:nowrap}.app-shell.game-mode .table.seat-play-table .fan-revealed{--fan-tail:calc(var(--fan-width) - var(--fan-step))}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .fan-revealed{--fan-columns:13}.app-shell.game-mode .table.seat-play-table .seat-past{box-shadow:none;border:0;border-radius:0;gap:4px}.app-shell.game-mode .table.seat-play-table .seat-passed{flex-direction:row;align-items:center}.app-shell.game-mode .table.seat-play-table .pass-mark{white-space:nowrap;flex:none}.app-shell.game-mode .table.seat-play-table .seat-past .card-fan{min-width:0}.app-shell.game-mode .table.seat-play-table .opponent:not(.position-2) .seat-passed{display:block}.app-shell.game-mode .table.seat-play-table .opponent:not(.position-2) .seat-passed>.pass-mark{display:none}.seat-decline{color:#bdc9bf;white-space:nowrap;flex:none;font-size:11px}.app-shell.game-mode .table.seat-play-table .opponent:not(.position-2) .player-name{flex-wrap:nowrap;gap:4px;line-height:1.2;display:flex}.app-shell.game-mode .table.seat-play-table .opponent:not(.position-2) .player-name b{min-width:0}.app-shell.game-mode .table.seat-play-table .fan-current,.app-shell.game-mode .table.seat-play-table .fan-past{row-gap:4px;max-width:100%;--fan-width:var(--played-width)!important;--fan-height:var(--played-height)!important;--fan-step:var(--played-step)!important;--fan-index:var(--played-index,clamp(16px, calc(var(--canvas-height) * .024), 23px))!important;--fan-columns:13!important;--fan-tail:calc(var(--played-width) - var(--played-step))!important}.app-shell.game-mode .table.seat-play-table .table-card{border-radius:5px;padding:3px}.app-shell.game-mode .table.seat-play-table .fan-current .table-card{border-color:#d8d2c3}.app-shell.game-mode .table.seat-play-table .table-center{flex-direction:column;grid-area:2/2;justify-content:center;align-items:center;gap:4px;width:100%;min-height:0;padding:5px 0;position:static;overflow:visible;transform:none}.app-shell.game-mode .table.seat-play-table .table-status{flex-direction:row;gap:8px;width:auto;max-width:100%}.app-shell.game-mode .table.seat-play-table .turn-label{max-width:none}.table-self-play{grid-area:3/2;justify-content:center;align-items:center;gap:8px;min-width:0;display:flex}.table-self-play .self-play-name{color:#b7c7bc;white-space:nowrap;font-size:11px}.table-self-play .seat-past{width:calc(var(--play-count) * var(--played-step) + var(--played-width) - var(--played-step));flex-shrink:1;max-width:100%}.table-self-play .seat-passed{width:calc(var(--play-count) * var(--played-step) + var(--played-width) - var(--played-step) + 36px)}.table-self-play .seat-past:not(:has(.card-fan)){flex:none;width:auto}.table-self-play:has(.long) .self-play-name{display:none}@media (height<=500px),(orientation:portrait){.app-shell.game-mode .table.seat-play-table{gap:0 5px;padding:4px 0 2px}.app-shell.game-mode .table.seat-play-table .opponent{--fan-width:32px;--fan-height:35px;--fan-step:22px;--fan-index:15px;gap:4px}.app-shell.game-mode .table.seat-play-table .opponent.position-1,.app-shell.game-mode .table.seat-play-table .opponent.position-3{gap:2px!important}.app-shell.game-mode .table.seat-play-table .opponent:not(.position-2):has(.seat-passed) .opponent-info{display:block!important}.app-shell.game-mode .table.seat-play-table .opponent.position-2{gap:3px 7px}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .opponent-identity{width:54px}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .past-slot{padding:3px 0 0}.app-shell.game-mode .table.seat-play-table .revealed-preview{gap:3px}.app-shell.game-mode .table.seat-play-table .reveal-label,.app-shell.game-mode .table.seat-play-table .pass-mark{font-size:11px}.app-shell.game-mode .table.seat-play-table .past-slot{padding-top:4px}.app-shell.game-mode .table.seat-play-table .table-center{padding:2px 0}.app-shell.game-mode .table.seat-play-table .table-status .turn-label{padding:3px 9px;font-size:11px}.app-shell.game-mode .table.seat-play-table .turn-clock{width:26px;font-size:12px}}@media (orientation:landscape) and (height<=500px){.app-shell.game-mode .bottom-zone:has(.hand-group){--group-headroom:0px}.app-shell.game-mode .hand.has-groups{padding-bottom:25px}.app-shell.game-mode .hand.has-groups .playing-card{height:calc(clamp(65px, calc(var(--canvas-height) * .215), 186px) - 20px)}.app-shell.game-mode .hand.has-groups .group-remove{width:24px;height:24px;bottom:-24px}}@media (orientation:landscape) and (height<=350px){.app-shell.game-mode .bottom-zone{height:calc(136px + var(--group-headroom))}.app-shell.game-mode .hand{padding-top:18px}.app-shell.game-mode .hand .playing-card{height:60px}.app-shell.game-mode .hand.has-groups .playing-card{height:40px;padding:4px}.app-shell.game-mode .hand.has-groups .playing-card span{font-size:16px}.app-shell.game-mode .hand.has-groups .playing-card strong{font-size:25px}.app-shell.game-mode .table.seat-play-table{--played-width:26px;--played-height:26px;--played-step:16px;--played-index:12px;grid-template-rows:max-content minmax(28px,1fr) max-content;padding:0}.app-shell.game-mode .table.seat-play-table .opponent{--fan-width:26px;--fan-height:26px;--fan-step:16px;--fan-index:12px}.app-shell.game-mode .table.seat-play-table .opponent.position-1,.app-shell.game-mode .table.seat-play-table .opponent.position-3{gap:2px}.app-shell.game-mode .table.seat-play-table .past-slot{padding-top:2px}.app-shell.game-mode .table.seat-play-table .opponent.position-2 .opponent-identity{width:34px}.app-shell.game-mode .table.seat-play-table .opponent .fan-revealed{--fan-width:26px;--fan-height:26px;--fan-step:16px;--fan-index:12px}.app-shell.game-mode .table.seat-play-table .opponent:not(.position-2):has(.revealed-preview) .player-count{display:none}.app-shell.game-mode .table.seat-play-table .fan-current,.app-shell.game-mode .table.seat-play-table .fan-past{--fan-index:12px}.app-shell.game-mode .table.seat-play-table .table-card{padding:1px}.app-shell.game-mode .table.seat-play-table .card-index{gap:0}.app-shell.game-mode .table.seat-play-table .turn-clock{width:24px}.app-shell.game-mode .table.seat-play-table .turn-label{padding:2px 7px;font-size:10px}.app-shell.game-mode .table.seat-play-table .table-self-play:has(.full-hand) .self-play-name{display:none}}@media (orientation:landscape) and (width<=720px) and (height>=351px){.app-shell.game-mode .table.seat-play-table .opponent.position-2 .fan-revealed{--fan-width:30px;--fan-height:35px;--fan-step:18px;--fan-index:15px}}.settlement-teams{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:6px 0 14px;display:grid}.settlement-teams>div{border:1px solid var(--line);background:#102e283d;border-radius:10px;min-width:0;padding:10px 12px}.settlement-teams>.is-self-team{background:#e4c87808;border-color:#e4c87850}.settlement-teams>div>div{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 8px;font-size:12px;display:flex}.settlement-teams strong{color:var(--gold);white-space:nowrap;font-size:20px}.settlement-teams small{color:var(--muted);font-size:10px;font-weight:400}.settlement-teams p{overflow-wrap:anywhere;margin:6px 0;font-size:11px;line-height:1.5}.score-events-heading{justify-content:space-between;align-items:baseline;gap:8px;font-size:11px;display:flex}.score-events-heading small{color:var(--muted);font-size:10px}.score-breakdown .compact-score-lines,.round-settlement .score-breakdown .compact-score-lines{max-height:none;margin:6px 0 10px;overflow:visible}.compact-score-lines>div{align-items:baseline;padding:7px 0}.score-event-label{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:5px 8px;min-width:0;display:flex}.score-team-chip{color:var(--muted);background:#ffffff08;border-radius:4px;flex:none;padding:2px 5px;font-size:10px}.score-team-chip.is-self-team{color:var(--gold);background:#e4c87812}.score-event-label em{color:var(--muted);white-space:nowrap;font-size:10px;font-style:normal}.compact-score-lines b{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-weight:500}.score-plus{color:var(--gold)}.score-minus{color:#d5b9b0}.round-score-main{align-items:baseline;gap:10px;display:flex}.round-score-main b{font-size:22px;font-weight:500}.round-score-overview{flex:1;min-width:0}.round-score-overview .round-highlights{margin:7px 0 0}.round-highlights{flex-wrap:wrap;gap:5px 8px;margin:0 0 10px;display:flex}.round-highlights>span{color:var(--muted);overflow-wrap:anywhere;border:1px solid #e4c87830;border-radius:6px;padding:3px 7px;font-size:11px}.round-highlights>.drag-highlight{color:var(--gold);background:#e4c87808}.round-highlights>.stifled-highlight{color:#d5b9b0;border-color:#d5b9b030}@media (width<=400px){.settlement-teams>div{padding:8px}.settlement-teams strong{font-size:18px}.score-events-heading{flex-wrap:wrap;gap:3px 8px}}.app-shell.match-mode{height:var(--canvas-height);flex-direction:column;min-height:0;display:flex;overflow:hidden}.app-shell.match-mode .room-page{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.match-mode .room-strip{flex:none;width:100%;margin:10px auto}.match-results{border:1px solid var(--line);background:#21423777;border-radius:22px;flex-direction:column;flex:1;width:100%;max-width:1100px;min-height:0;margin:14px auto 0;display:flex;overflow:hidden}.match-heading{flex:none;align-items:center;gap:24px;padding:24px 28px 18px;display:flex}.match-heading h2{margin:0;font-size:26px;font-weight:500}.match-heading p{color:var(--muted);margin:6px 0 0;font-size:12px}.match-total{color:var(--gold);white-space:nowrap;align-items:baseline;gap:12px;margin-left:auto;display:flex}.match-total small{font-size:12px}.match-total strong{font-size:36px;font-weight:600}.match-total strong span{font-size:14px;font-weight:400}.match-tabs{border-bottom:1px solid var(--line);flex:none;gap:24px;padding:0 28px;display:flex}.match-tabs button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;padding:12px 0;font-size:14px}.match-tabs button[aria-selected=true]{color:var(--gold);border-bottom-color:var(--gold)}.match-content{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#c9b37866 transparent;-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:24px 28px;overflow:auto}.match-overview{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;display:grid}.match-content h3{margin:0 0 16px;font-size:17px;font-weight:500}.match-content p{color:var(--muted);font-size:12px}.match-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.match-metrics>div{border:1px solid var(--line);background:#ffffff04;border-radius:12px;gap:8px;padding:14px;display:grid}.match-metrics small,.match-player-grid small{color:var(--muted);font-size:12px}.match-metrics b{color:var(--gold);font-size:20px;font-weight:500}.match-player-grid{gap:10px;display:grid}.match-player-grid>div{border:1px solid var(--line);background:#102e2855;border-radius:10px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid}.match-player-grid b{overflow-wrap:anywhere;font-weight:500}.match-player-grid strong{color:var(--gold);white-space:nowrap}.match-player-grid small{line-height:1.5}.match-player-grid .is-self-player{background:#e4c87808;border-color:#e4c87850}.match-rank{color:var(--muted);font-variant-numeric:tabular-nums;font-size:13px}.match-player-name{min-width:0}.match-player-name small{margin-top:3px;font-size:10px;display:block}.match-player-name em{color:var(--gold);vertical-align:middle;border:1px solid #e4c87840;border-radius:3px;margin-left:5px;padding:0 3px;font-size:9px;font-style:normal;display:inline-block}.match-specials{color:var(--gold);flex-wrap:wrap;gap:6px 12px;margin-top:12px;font-size:11px;display:flex}.match-metric-details{border-top:1px solid var(--line);margin-top:12px}.match-metric-details summary{cursor:pointer;color:var(--muted);padding:10px 0;font-size:11px}.match-metric-details dl{margin:0}.match-metric-details dl>div{border-bottom:1px solid #ffffff08;justify-content:space-between;align-items:baseline;gap:8px;padding:7px 0;font-size:12px;display:flex}.match-metric-details dt{color:var(--muted)}.match-metric-details dd{font-variant-numeric:tabular-nums;margin:0}.match-rounds .round-record:first-child{border-top:0;margin-top:0}.match-rounds .score-lines{max-height:none;overflow:visible}.match-rounds .round-record>summary{justify-content:space-between;align-items:center;gap:12px;padding:14px 0;font-size:13px;display:flex}.match-rounds .round-record>summary span{float:none}.round-record-title{align-items:baseline;gap:10px;display:flex}.round-record-title small{color:var(--muted);font-size:10px}.round-record-score{white-space:nowrap;align-items:baseline;gap:12px;font-weight:500;display:flex}.round-record-score i{color:var(--muted);font-size:13px;font-style:normal}.round-record[open] .round-record-score i{transform:rotate(180deg)}.match-content .round-list-note{margin:0 0 4px;font-size:10px}@media (width>=601px) and (height<=800px){.match-mode .topbar{height:52px}.match-mode .room-strip{min-height:36px;margin:6px auto}.match-heading{padding:16px 20px 12px}.match-heading h2{font-size:22px}.match-total strong{font-size:30px}.match-tabs{padding:0 20px}.match-content{padding:18px 20px}.match-metrics>div{gap:6px;padding:10px}.match-metrics b{font-size:18px}.match-player-grid>div{gap:8px;padding:12px}}@media (width<=600px) and (orientation:portrait){.match-mode .topbar{height:52px}.match-mode .brand b{font-size:20px}.match-mode .brand-icon{font-size:30px}.match-mode .brand small,.match-mode .immersive-button span{display:none}.match-mode .room-strip{gap:8px;min-height:36px;margin:6px auto}.match-mode .room-strip small,.match-mode .room-strip>span:not(.phase-pill){display:none}.match-mode .room-strip b{font-size:14px}.match-mode .invite-button{min-height:30px;padding:4px 8px;font-size:10px}.match-mode .room-strip .phase-pill{padding:5px 8px;font-size:10px}.match-results{border-radius:16px;margin-top:4px}.match-heading{flex-wrap:wrap;gap:10px;padding:16px}.match-heading h2{font-size:20px}.match-total{gap:6px}.match-total small{font-size:10px}.match-total strong{font-size:28px}.match-heading>button{min-height:30px;margin-left:auto;padding:4px 9px;font-size:11px}.match-tabs{padding:0 16px}.match-content{padding:16px}.match-overview{grid-template-columns:1fr;gap:20px}.match-content h3{margin-bottom:10px;font-size:15px}.match-metrics{gap:8px}.match-metrics>div{gap:5px;padding:10px}.match-metrics b{font-size:17px}.match-metrics small,.match-player-grid small{font-size:10px}.match-player-grid{grid-template-columns:1fr;gap:6px}.match-player-grid>div{gap:6px;padding:8px 10px;font-size:12px}}@media (orientation:landscape) and (height<=600px){.match-mode .topbar{height:38px}.match-mode .room-strip{min-height:30px;margin:3px auto}.match-results{border-radius:14px;margin-top:2px}.match-heading{gap:16px;padding:10px 16px 6px}.match-heading h2{font-size:19px}.match-heading p{display:none}.match-total strong{font-size:25px}.match-heading>button{min-height:30px}.match-tabs{padding:0 16px}.match-tabs button{padding:7px 0;font-size:12px}.match-content{padding:8px 16px}.match-overview{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px}.match-content h3{margin-bottom:8px;font-size:14px}.match-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.match-metrics>div{border-radius:8px;gap:4px;padding:6px}.match-metrics small,.match-player-grid small{font-size:10px}.match-metrics b{font-size:15px}.match-player-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.match-player-grid>div{gap:6px;padding:9px;font-size:12px}}.match-mode.virtual-landscape .topbar{height:38px}.match-mode.virtual-landscape .room-strip{min-height:30px;margin:3px auto}.match-mode.virtual-landscape .match-results{border-radius:14px;margin-top:2px}.match-mode.virtual-landscape .match-heading{flex-wrap:nowrap;gap:16px;padding:10px 16px 6px}.match-mode.virtual-landscape .match-heading h2{font-size:19px}.match-mode.virtual-landscape .match-heading p{display:none}.match-mode.virtual-landscape .match-total strong{font-size:25px}.match-mode.virtual-landscape .match-heading>button{min-height:30px;margin-left:0}.match-mode.virtual-landscape .match-tabs{padding:0 16px}.match-mode.virtual-landscape .match-tabs button{padding:7px 0;font-size:12px}.match-mode.virtual-landscape .match-content{padding:8px 16px}.match-mode.virtual-landscape .match-overview{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px}.match-mode.virtual-landscape .match-content h3{margin-bottom:8px;font-size:14px}.match-mode.virtual-landscape .match-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.match-mode.virtual-landscape .match-metrics>div{border-radius:8px;gap:4px;padding:6px}.match-mode.virtual-landscape .match-metrics b{font-size:15px}.match-mode.virtual-landscape .match-player-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.match-mode.virtual-landscape .match-player-grid>div{gap:6px;padding:9px;font-size:12px}.room-voice-button{border-radius:50%;place-items:center;width:34px;height:34px;padding:6px;display:grid;position:relative}.room-voice-button svg,.voice-controls svg{flex:none;width:20px;height:20px}.room-voice-button small{color:var(--gold);background:#254b3c;border-radius:8px;padding:1px 4px;font-size:9px;position:absolute;top:-2px;right:-1px}.room-voice-button.voice-joined{color:var(--gold);background:#e4c87812}.room-voice-button.voice-speaking{box-shadow:0 0 0 2px #75d8a866}.room-voice-panel{--muted:#687b6e;--line:#24423328;--gold:#8d6424;text-align:left;width:min(420px,94vw)}.room-voice-panel h2{margin-bottom:8px}.room-voice-panel .voice-status{margin:0 0 16px;font-size:12px}.voice-roster{gap:5px;margin:16px 0;display:grid}.voice-roster>div{border:1px solid var(--line);border-radius:9px;align-items:center;gap:8px;min-width:0;padding:10px;display:flex}.voice-roster b{overflow-wrap:anywhere;min-width:0;font-size:13px;font-weight:500}.voice-roster small{color:var(--muted);font-size:10px}.voice-roster>div>small{flex:none;margin-left:auto}.voice-roster .is-speaking{background:#75d8a808;border-color:#75d8a877}.voice-dot{background:#ffffff30;border-radius:50%;flex:none;width:7px;height:7px}.voice-dot.is-joined{background:#8caf92}.is-speaking .voice-dot{background:#75d8a8;box-shadow:0 0 8px #75d8a866}.voice-controls{flex-wrap:wrap;gap:8px;display:flex}.voice-controls button{min-height:38px;padding:8px 12px;font-size:12px}.room-voice-panel .secondary{color:#335443;border-color:#34574560}.voice-volume{color:var(--muted);flex-wrap:wrap;gap:10px;margin:18px 0 8px;font-size:12px;display:flex}.voice-volume span{margin-left:auto}.voice-volume input{width:100%;accent-color:var(--gold)}.voice-leave{color:#93534a;margin:8px auto;font-size:12px;display:block}.voice-join{width:100%}.voice-help{color:var(--muted);margin-top:14px;font-size:10px;line-height:1.6;display:block}.voice-notice{color:#93534a;font-size:12px;line-height:1.6}@media (orientation:landscape) and (height<=500px){.room-voice-panel{padding:16px}.voice-roster{grid-template-columns:repeat(2,minmax(0,1fr));margin:8px 0}.voice-roster>div{flex-wrap:wrap;gap:5px;padding:7px}.voice-roster>div>small{width:100%;margin-left:12px}.voice-volume{margin:10px 0 0}}.virtual-landscape .room-voice-panel{max-height:calc(var(--canvas-height) - 20px);overflow:auto}.virtual-landscape .voice-roster{grid-template-columns:repeat(2,minmax(0,1fr));margin:8px 0}.virtual-landscape .voice-roster>div{flex-wrap:wrap;gap:5px;padding:7px}.virtual-landscape .voice-roster>div>small{width:100%;margin-left:12px}
