.game-table{--back-width:24px;--back-height:34px;flex:1;min-height:430px;position:relative}.opponent{z-index:1;position:absolute}.opponent.north{top:4px;left:50%;transform:translate(-50%)}.opponent.west{top:48%;left:24px;transform:translateY(-50%)}.opponent.east{top:48%;right:24px;transform:translateY(-50%)}.opponent[data-player-id].west,.opponent[data-player-id].east{height:418px;transform:translateY(calc(16px - 50%))}@media (width>=701px){.game-table:has(.opponent[data-player-id]){min-height:510px}.opponent[data-player-id].west,.opponent[data-player-id].east{top:40px;transform:none}}.player-info,.self-seat{color:#dcebdd;justify-content:center;align-items:center;gap:9px;display:flex}.player-info{margin-bottom:12px;font-size:12px}.player-info strong,.self-seat strong,.player-name-button{font-weight:600}.player-name-button{min-width:0;max-width:120px;color:inherit;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;border-radius:4px;padding:2px 4px;line-height:1.25;overflow:hidden}@media (hover:hover) and (pointer:fine){.player-name-button:hover{color:#f1f8ee;background:#ffffff0b}}.player-name-dialog{color:#edf6e8;text-align:center;background:#214c3a;border:1px solid #719a7d;border-radius:14px;width:min(420px,100vw - 32px);padding:24px}.player-name-dialog::backdrop{background:#081d16bb}.player-name-dialog small{color:#b7cfbf;margin-bottom:10px;display:block}.player-name-dialog strong{overflow-wrap:anywhere;margin-bottom:20px;font-size:20px;display:block}.player-name-dialog .table-action{margin:0 auto}.player-avatar{color:#d1e5ce;background:#174333;border:1px solid #8db59870;border-radius:8px;place-items:center;width:28px;height:28px;font-size:13px;font-weight:700;display:grid}.hand-count{color:#b5cfbb;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}.seat-total-score{color:#d8e8d7;font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:3px;min-width:0;font-size:11px;display:inline-flex}.seat-total-score strong{color:#eff4da;overflow-wrap:anywhere;white-space:normal;font-size:13px}.turn-dot{background:#70977b;border-radius:50%;width:6px;height:6px}.active .turn-dot{background:#c3f79c;box-shadow:0 0 0 4px #c3f79c20}.active .player-avatar{color:#244e31;background:#c8edb6;border-color:#e1f5c7}.hidden-hand{justify-content:center;gap:3px;display:flex}.hidden-hand>span{width:var(--back-width);height:var(--back-height);background:linear-gradient(120deg,#7daa94,#4e846c);border:1px solid #9fc6b1;border-radius:4px;display:block;box-shadow:inset 0 0 0 3px #5f927b,0 4px #d7dfcf,0 6px #91a58c,1px 8px 5px #15372d55}.west .hidden-hand,.east .hidden-hand{flex-direction:column;align-items:center;gap:3px}.west .hidden-hand>span,.east .hidden-hand>span{width:var(--back-height);height:var(--back-width);border-radius:4px;box-shadow:inset 0 0 0 3px #5f927b,3px 0 #d7dfcf,5px 0 #91a58c,6px 2px 4px #15372d55}.table-center{width:min(650px,100% - 340px);position:absolute;top:58%;left:50%;transform:translate(-50%,-50%)}.round-panel{background:#163d2fcc;border:1px solid #83ad8d50;border-radius:12px 12px 0 0;align-items:center;gap:20px;padding:17px 20px;display:flex}.deck-counter{flex-direction:column;align-items:center;gap:3px;min-width:65px;display:flex}.deck-counter strong{font-variant-numeric:tabular-nums;color:#eaf3df;font-size:36px;font-weight:750;line-height:1}.deck-counter>span{color:#b2c8b8;font-size:10px}.turn-info{flex:1}.turn-badge{color:#ccf1bf;background:#729e6238;border-radius:5px;padding:4px 9px;font-size:12px;font-weight:600;display:inline-block}.turn-badge.ended{color:#f3d8af;background:#ebd2af22}.turn-info p{color:#d0e0d0;margin-top:8px;font-size:12px}.turn-number{color:#8bb99e;font-variant-numeric:tabular-nums;align-self:flex-start;font-size:12px}.discard-pile{background:#1c503aaa;border:1px solid #83ad8d35;border-top:0;border-radius:0 0 12px 12px;padding:13px 16px 15px}.discard-heading{color:#b4cebc;justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.discard-heading h2{font-size:11px;font-weight:500}.discard-heading>span{font-size:10px}.discard-empty{color:#97b59e;border:1px dashed #aac7ad35;border-radius:6px;place-items:center;min-height:112px;font-size:12px;display:grid}.discard-list{overscroll-behavior:contain;scrollbar-color:#8ab496 #25583f;scrollbar-width:thin;scrollbar-gutter:stable;flex-wrap:wrap;align-content:flex-start;gap:7px;height:112px;margin:0;padding:3px 3px 5px;list-style:none;display:flex;overflow-y:auto}.discard-tile{color:#293d35;background:#f1f1e7;border:1px solid #e3e6d6;border-bottom:3px solid #b1bba7;border-radius:4px;flex-direction:column;flex:0 0 34px;justify-content:center;align-items:center;height:45px;display:flex;box-shadow:0 2px 1px #143c2e80}.discard-tile>span{font-size:21px;font-weight:650;line-height:1.15}.discard-tile small{color:#657768;font-size:8px}.discard-tile.latest{background:#e3f4c8;border-color:#c6ed9a;box-shadow:0 0 0 2px #bce88f80}.human-area{background:#153d2b50;border:1px solid #a1c3a62b;border-radius:12px;margin:0 26px;padding:16px 18px 14px}.self-seat{justify-content:flex-start;margin:0 8px 1px;font-size:12px}.hand-tiles{justify-content:center;gap:5px;padding:20px 5px 13px;display:flex}.mahjong-tile{color:#22372d;background:linear-gradient(115deg,#fffef5,#f0f1e7 85%,#e2e6d7);border:1px solid #eeefe4;border-bottom:6px solid #b7c3ae;border-radius:7px;flex:0 68px;min-width:0;height:89px;padding:8px 0;transition:transform .14s,box-shadow .14s;position:relative;box-shadow:0 3px #7c967c,1px 6px 4px #11342060}.mahjong-tile>span{font-family:inherit;font-size:34px;font-weight:650;line-height:1;display:block}.mahjong-tile:disabled{opacity:1;cursor:default}.mahjong-tile small{color:#437250;font-size:9px;position:absolute;top:4px;right:5px}.mahjong-tile.new-tile{border-top:3px solid #b6e399}.mahjong-tile.selected{background:#eefbdc;border-color:#b9e79b;transform:translateY(-11px);box-shadow:0 3px #86ad64,0 0 0 2px #b9e79b,1px 11px 7px #123b2e80}@media (hover:hover){.mahjong-tile:hover:not(:disabled):not(.selected){transform:translateY(-4px)}}.action-bar{justify-content:space-between;align-items:center;gap:12px;padding:8px 6px 0;display:flex}.turn-actions{align-items:center;gap:9px;display:flex}.selection-label{color:#c5d8c5;min-width:112px;font-size:11px}@media (width<=1050px){.table-center{width:calc(100% - 290px)}.opponent.west{left:16px}.opponent.east{right:16px}.player-info{gap:6px}.human-area{margin:0 16px;padding:13px 12px}.mahjong-tile{height:78px}.mahjong-tile>span{font-size:30px}}@media (width<=700px){.game-room:has(.opponent[data-player-id]){min-width:0}.game-room:has(.opponent[data-player-id]) .table-frame{min-width:0}.opponent[data-player-id].west,.opponent[data-player-id].east{height:145px}.table-surface{height:auto;min-height:850px}.game-table{--back-width:14px;--back-height:24px;min-height:470px}.opponent.west,.opponent.east{top:26%}.player-info{flex-wrap:wrap;gap:4px;width:78px}.north .player-info{width:auto}.west .hidden-hand,.east .hidden-hand{flex-flow:wrap;gap:3px;width:78px}.west .hidden-hand>span,.east .hidden-hand>span{width:var(--back-height);height:var(--back-width);box-shadow:0 2px #d7dfcf}.north .hidden-hand>span{width:var(--back-width);height:var(--back-height)}.table-center{width:calc(100% - 28px);top:70%}.round-panel{gap:13px;padding:13px}.deck-counter strong{font-size:28px}.turn-info p{font-size:11px}.hand-tiles{justify-content:flex-start;overflow-x:auto}.mahjong-tile{flex:0 0 52px;width:52px;height:67px}.mahjong-tile>span{font-size:27px}.action-bar{flex-wrap:wrap}.selection-label{min-width:100%}.turn-actions{margin-left:auto}.draw-button,.play-button{min-width:80px;padding:9px 16px}.debug-info{gap:8px;font-size:9px}}.mahjong-tile[draggable=true]{cursor:grab;-webkit-user-select:none;user-select:none}.mahjong-tile[draggable=true]:active{cursor:grabbing}.mahjong-tile.drag-placeholder{opacity:.25;outline-offset:2px;box-shadow:none;outline:2px dashed #d7f7ad}.is-reordering .mahjong-tile{pointer-events:none}.drop-settled .mahjong-tile{transition:none}.human-area{flex-shrink:0}.sentence-area{background:#284b3c80;border:1px solid #a6c69c55;border-radius:9px;min-height:126px;margin-bottom:12px;padding:10px 12px 8px}.sentence-heading{color:#d9ecd0;justify-content:space-between;align-items:center;display:flex}.sentence-heading h2{font-size:13px;font-weight:600}.sentence-heading>span{color:#b5cfbb;font-size:11px}.sentence-empty{color:#afc7b0;place-items:center;min-height:88px;font-size:12px;display:grid}.sentence-area .hand-tiles{min-height:88px;padding-top:17px;padding-bottom:10px}.sentence-area .mahjong-tile{border-bottom-width:4px;flex-basis:48px;height:62px}.sentence-area .mahjong-tile>span{font-size:27px}.hand-panel .hand-tiles{min-height:122px}.hand-empty{text-align:center;color:#b5cfbb;margin:9px 0 -26px;font-size:12px}.action-bar{flex-wrap:wrap;row-gap:12px}.turn-actions{flex-wrap:wrap}.turn-actions .draw-button,.turn-actions .play-button{min-width:78px}.win-button{color:#3c302c;font:inherit;background:#f4c1a6;border:1px solid #f4caa8;border-radius:8px;padding:10px 24px;font-weight:750;box-shadow:0 3px #b58674}.win-button:hover:not(:disabled){background:#f9d0b8}.win-button:disabled{box-shadow:none}.result-modal{text-align:center;color:#263c32;background:#f5f5eb;border:1px solid #d4e1cc;border-radius:22px;width:min(500px,100vw - 40px);max-height:90svh;padding:36px;overflow-y:auto;box-shadow:0 25px 100px #0006}.result-modal::backdrop{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#0c201bba}.result-mark{color:#31513d;background:#e2ebd5;border-radius:8px;place-items:center;width:55px;height:62px;margin:0 auto 16px;font-size:34px;font-weight:750;display:grid;transform:rotate(-8deg);box-shadow:0 5px #b1bda2}.result-modal h2{font-size:29px}.result-sentence{overflow-wrap:anywhere;margin-top:22px;font-size:28px;font-weight:650;line-height:1.7}.result-count{color:#687665;margin-top:10px;font-size:13px}.result-score{color:#32664c;margin:12px 0 24px}.result-score strong{font-variant-numeric:tabular-nums;font-size:50px}.result-modal .win-button{min-width:170px}.room-scores{color:#e7efe0;text-align:left;width:min(680px,100%);margin:16px auto}.result-modal .room-scores{color:#294236}.room-scores h3{color:inherit;text-align:center;margin:0 0 7px;font-size:13px}.room-scores ol{grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;margin:0;padding:0;list-style:none;display:grid}.room-scores li{background:#143e304d;border:1px solid #a7c7ad42;border-radius:8px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 8px;min-width:0;padding:8px 9px;display:grid}.result-modal .room-scores li{background:#dfe9d799;border-color:#55745f35}.room-score-name{overflow-wrap:anywhere;min-width:0;font-size:12px;line-height:1.2}.room-scores li>strong{color:#f3f4dc;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;text-align:right;grid-area:1/2/span 2;max-width:100%;font-size:21px}.result-modal .room-scores li>strong{color:#31513d}.room-scores li>strong small{font-size:11px;font-weight:500}.room-round-score{color:#cbe6b7;font-size:11px}.result-modal .room-round-score{color:#4f745b}@media (width<=700px){.sentence-area{height:auto;padding-inline:7px}.sentence-area .mahjong-tile{flex-basis:42px}.turn-actions{justify-content:flex-end}}.sentence-tools{align-items:center;gap:12px;font-size:11px;display:flex}.sentence-tools .utility-button{padding:5px 10px;font-size:11px}.sentence-separator{color:#bce4b3;background:0 0;border:0;flex:0 0 15px;align-self:center;width:15px;padding:0;font-size:30px;line-height:1.5}.sentence-separator:hover:not(:disabled){color:#f4c1a6}.selection-order{background:#c4e9b0;border-radius:50%;place-items:center;width:17px;height:17px;display:grid}.result-modal{width:min(900px,100vw - 40px)}.result-sentence{white-space:nowrap;overflow-wrap:normal}.result-sentence>span{max-width:none;display:inline-block}.action-bar{grid-template-columns:1fr;gap:4px 12px;display:grid}.turn-actions{justify-content:flex-end}.turn-actions [aria-pressed]{min-width:90px}.action-hint{grid-column:1/-1;min-height:16px;line-height:16px}.hand-tiles{position:relative}.sentence-separator{cursor:grab;-webkit-user-select:none;user-select:none;place-items:center;height:44px;display:grid}.sentence-separator>span{pointer-events:none;background:currentColor;border-radius:1px;width:2px;height:30px}.sentence-separator:active{cursor:grabbing}.sentence-separator.selected{color:#effbdc;background:#b9e79b25;border-radius:5px;outline:2px solid #b9e79b}.tap-sort-actions{flex-wrap:wrap;justify-self:start;gap:8px;display:flex}.tap-sort-actions .table-action{touch-action:manipulation;min-height:44px}@media (width<=700px),(pointer:coarse){.action-bar:has(.tap-sort-actions){grid-template-columns:1fr}.action-bar:has(.tap-sort-actions) .turn-actions{grid-row:1}.action-bar:has(.tap-sort-actions) .tap-sort-actions{grid-row:2}.action-bar:has(.tap-sort-actions) .selection-label{grid-row:3}.human-area:has(.tap-sort-actions) .sentence-separator{touch-action:manipulation;flex-basis:28px;width:28px;min-height:44px}}.separator-drop-preview{pointer-events:none;z-index:2;background:#f4c1a6;width:3px;height:34px;position:absolute;top:30px;transform:translate(-50%);box-shadow:0 0 8px #f4c1a6}@media (width<=700px){.action-bar{grid-template-columns:1fr}}.sentence-validation{color:#dcebd9;background:#102f246b;border-radius:6px;width:fit-content;min-height:24px;margin:3px 4px 0;padding:4px 8px;font-size:12px;line-height:16px}.mahjong-tile .claim-marker{color:#57765e;font-size:9px;top:3px;left:4px;right:auto}.chi-hint{color:#dcebbd}.turn-actions{justify-content:flex-end;gap:8px;margin-left:0}.table-action{color:#e5eddf;white-space:nowrap;background:#224d3c;border:1px solid #a7c7ad65;border-radius:7px;justify-content:center;align-items:center;gap:7px;min-width:82px;height:40px;padding:0 17px;font-size:13px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s;display:inline-flex}.table-action:hover:not(:disabled){background:#315e48;border-color:#b5d5b7}.table-action[aria-pressed=true]{background:#355e49;border-color:#b5d5b7}.table-action:disabled{opacity:1;color:#7b9988;box-shadow:none;background:#234735;border-color:#72977d30}.win-action{display:inline-flex;position:relative}.win-action .table-action[aria-disabled=true]{color:#7b9988;box-shadow:none;background:#234735;border-color:#72977d30}.win-reason{z-index:40;color:#e5eddf;white-space:normal;visibility:hidden;opacity:0;pointer-events:none;background:#102f25f5;border:1px solid #a7c7ad65;border-radius:7px;width:max-content;max-width:min(230px,80vw);padding:8px 10px;font-size:12px;line-height:1.35;transition:opacity .12s;position:absolute;bottom:calc(100% + 8px);right:0;box-shadow:0 6px 18px #071b16a8}.win-action:not([data-suppressed]):hover .win-reason,.win-action:not([data-suppressed]):focus-within .win-reason,.win-action[data-open] .win-reason{visibility:visible;opacity:1}.win-action .table-action[aria-disabled=true]:hover{color:#7b9988;box-shadow:none;background:#234735;border-color:#72977d30}.opportunity-action:not(:disabled){color:#254631;background:#e4efce;border-color:#d6ecb7;box-shadow:0 0 0 2px #c7e8a922,0 2px 8px #112e2440}.opportunity-action:hover:not(:disabled){background:#f0f7e3;border-color:#edf8d9}.opportunity-dot{background:currentColor;border-radius:50%;width:5px;height:5px}.opportunity-action:disabled .opportunity-dot{visibility:hidden}.action-hint{text-align:right}.chi-opportunity{margin-right:12px;animation:.2s ease-out chi-arrive,1.8s ease-in-out .2s infinite chi-glow}@keyframes chi-arrive{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@keyframes chi-glow{0%,to{box-shadow:0 0 0 2px #c7e8a922,0 0 6px #c7e8a918}50%{box-shadow:0 0 0 3px #c7e8a945,0 0 15px #c7e8a950}}@media (prefers-reduced-motion:reduce){.chi-opportunity{animation:none}}.mahjong-tile[data-group-id]{background:#e7efdf;border-top:3px solid #91bba1}.mahjong-tile.meld-start{border-radius:7px 2px 2px 7px}.mahjong-tile.meld-middle{border-radius:2px}.mahjong-tile.meld-end{border-radius:2px 7px 7px 2px}.public-melds{flex-wrap:wrap;gap:8px;max-height:80px;margin-top:10px;display:flex;overflow-y:auto}.public-meld{background:#193f30;border:1px solid #a7c7ad65;border-radius:6px;align-items:center;gap:8px;padding:5px 9px;display:flex}.public-meld small{color:#b5cfbb;font-size:10px}.public-meld>span{letter-spacing:3px;color:#e5eddf;font-size:18px}.lifted-tiles{z-index:1000;pointer-events:none;filter:drop-shadow(0 13px 9px #08261e66);gap:5px;display:flex;position:fixed;transform:translate(-50%,-65%)rotate(-2deg)}.lifted-tile{box-sizing:border-box;color:#22372d;background:#edf4e4;border:1px solid #eff6df;border-top:3px solid #91bba1;border-bottom:4px solid #aabca0;border-radius:6px;flex-shrink:0;place-items:center;font-size:27px;font-weight:650;display:grid;position:relative;box-shadow:0 3px #71937c}.lifted-tile small{color:#57765e;font-size:9px;position:absolute;top:2px;left:4px}.online-game-loading{text-align:center;color:#c8dccb;flex:1;place-content:center;gap:14px;padding:32px;display:grid}.online-game-feedback{text-align:center;color:#efd4b3;min-height:22px;margin:8px 26px}.online-reconnect{text-align:center;padding-bottom:16px}.online-game .game-table{min-height:550px}.online-game .opponent{gap:12px 16px;display:grid}.online-game .opponent .player-info{grid-area:name;height:28px;margin:0}.online-game .opponent .hidden-hand{flex-wrap:nowrap;grid-area:hand;justify-content:flex-start}.online-game .opponent .hidden-hand>span{flex-shrink:0}.online-game .opponent.north{grid-template:"name"28px"hand"40px"meld"76px/1fr;width:min(520px,50%)}.online-game .opponent.north .hidden-hand{justify-content:center}.online-game .opponent.west,.online-game .opponent.east{grid-template-rows:58px 380px;width:160px;top:53%}.online-game .opponent.west{grid-template-columns:44px 100px;grid-template-areas:"name name""hand meld"}.online-game .opponent.east{grid-template-columns:100px 44px;grid-template-areas:"name name""meld hand"}.online-game .opponent.west .player-info,.online-game .opponent.east .player-info{grid-template:"avatar name"26px"avatar count"16px"avatar score"16px/30px minmax(0,1fr);justify-items:start;gap:0 5px;width:100%;height:58px;display:grid}.online-game .opponent.east .player-info{grid-template:"name avatar"26px"count avatar"16px"score avatar"16px/minmax(0,1fr) 30px;justify-items:end}.online-game .opponent.west .player-avatar,.online-game .opponent.east .player-avatar{grid-area:avatar;align-self:center}.online-game .opponent.west .player-name-button,.online-game .opponent.east .player-name-button{overflow-wrap:normal;white-space:nowrap;text-align:start;grid-area:name;align-self:center;max-width:100%;padding-inline:2px;display:block}.online-game .opponent.east .player-name-button{text-align:end}.online-game .opponent.west .hand-count,.online-game .opponent.east .hand-count{grid-area:count;align-self:start}.online-game .opponent.west .seat-total-score,.online-game .opponent.east .seat-total-score{grid-area:score;align-self:start}.online-game .table-center{width:min(570px,100% - 380px);top:62%}.online-game .public-meld-lane{grid-area:meld;justify-content:flex-start;align-items:flex-start;gap:9px;min-width:0;min-height:0;padding:3px 5px 8px;display:flex;overflow:auto}.online-game .public-meld{background:0 0;border:0;border-radius:0;flex:none;gap:4px;padding:0;display:flex}.online-game .public-meld+.public-meld{border-left:2px solid #cbe6bf;padding-left:9px}.online-game .public-meld .mahjong-tile{border-bottom-width:3px;border-radius:4px;flex:0 0 28px;width:28px;height:38px;padding:3px 0}.online-game .public-meld .mahjong-tile>span{font-size:20px}.online-game .opponent.north .public-meld-lane{justify-content:center}.online-game .opponent.west .public-meld-lane,.online-game .opponent.east .public-meld-lane{flex-direction:column;align-items:center}.online-game .opponent.west .public-meld,.online-game .opponent.east .public-meld{flex-direction:column}.online-game .opponent.west .public-meld+.public-meld,.online-game .opponent.east .public-meld+.public-meld{border-top:2px solid #cbe6bf;border-left:0;padding-top:9px;padding-left:0}.online-game .opponent.west .public-meld .mahjong-tile,.online-game .opponent.east .public-meld .mahjong-tile{flex-basis:38px}.online-sentence-hint{color:#adc7b3;text-align:center;pointer-events:none;margin:-26px 0 12px;font-size:11px}.online-game .opponent[data-participant-kind=BOT] .player-info>*{flex-shrink:0}.online-game .opponent[data-participant-kind=BOT].north .player-info{justify-self:center;width:max-content}.pong-status{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.turn-actions>.pong-action{gap:0;width:82px;padding-inline:2px}.mobile-game-menu,.mobile-turn-strip,.mobile-latest-discard,.mobile-discard-trigger,.mobile-compose-entry,.mobile-delete-separator,.hand-size-toggle,.local-seat-melds{display:none}.selection-move-controls{align-items:center;gap:8px;min-width:0;margin:4px 6px 8px;display:flex}.selection-move-controls .table-action{min-width:48px;min-height:44px;padding-inline:13px}.selection-move-controls .group-mode-toggle{min-width:72px}.hand-tiles[data-tap-mode=true]{touch-action:pan-x pinch-zoom;overscroll-behavior-inline:contain}.desktop-action-hidden{display:none}@media (width<=700px){body:has(.game-room){background:#14251f;width:100%;min-width:0;height:100dvh;overflow:hidden}body:has(.game-room) .game-room{background:radial-gradient(at top,#2a4639,#14251f);width:100%;min-width:0;height:100dvh;min-height:0;padding:0;display:block;overflow:hidden}.online-fit-viewport,.online-fit-canvas{min-width:0;display:block;width:100%!important}.game-room .table-frame{width:100%;min-width:0;box-shadow:none;background:0 0;border:0;border-radius:0;padding:0}.game-room .table-surface{min-width:0;height:100dvh;min-height:0;padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left);background:radial-gradient(at 50% 35%,#367b61,#225640 85%);border:0;border-radius:0;overflow:hidden}.game-room .table-header{z-index:30;min-height:70px;padding:15px 18px 7px;position:relative}.game-room .table-header h1{gap:0;font-size:0}.table-header h1 .brand-icon{border-radius:8px;width:39px;height:43px;font-size:27px;box-shadow:0 3px #9fb697}.online-game .table-header h1{gap:9px;min-width:0}.online-game .room-code-copy{min-width:88px;min-height:44px;padding-inline:9px;font-size:12px}.header-actions.desktop-header-actions{display:none}.mobile-game-menu{display:block;position:relative}.mobile-menu-trigger{color:#f0f6e8;width:46px;height:46px;box-shadow:none;background:#174b34;border:1px solid #a8d7bd78;border-radius:11px;place-items:center;padding:0;display:grid;position:relative}.mobile-menu-trigger-icon{stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:25px;height:25px}.connection-warning-dot{background:#f4c1a6;border-radius:50%;width:9px;height:9px;position:absolute;top:6px;right:6px;box-shadow:0 0 0 2px #06452f}.mobile-menu-popover{z-index:60;background:#06452ff2;border:1px solid #83c5a189;border-radius:14px;width:min(222px,100vw - 28px);max-height:min(60dvh,420px);padding:7px;display:grid;position:absolute;top:calc(100% + 9px);right:0;overflow-y:auto;box-shadow:0 16px 38px #04281fc0}.mobile-menu-popover button{color:#eef5e9;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;min-height:50px;padding:0 16px;font-size:14px;font-weight:700;display:flex}.mobile-menu-popover button+button{border-top:1px solid #b8d7bd25}.mobile-menu-popover button:hover:not(:disabled),.mobile-menu-popover button:focus-visible{background:#ffffff10}.mobile-menu-popover button.danger{color:#f5d9c9}.game-table,.online-game .game-table{--back-width:15px;--back-height:25px;flex:none;grid-template:"empty-n north empty-e""west center east"minmax(190px,1fr)/minmax(68px,.75fr) minmax(146px,2fr) minmax(68px,.75fr);gap:7px 5px;min-width:0;min-height:clamp(230px,35.8dvh,302px);margin:0 10px;padding:0 0 6px;display:grid}.opponent,.online-game .opponent,.opponent[data-player-id].west,.opponent[data-player-id].east,.online-game .opponent.west,.online-game .opponent.east,.online-game .opponent.north{width:auto;min-width:0;height:auto;position:relative;inset:auto;transform:none}.opponent.north{grid-area:1/1/auto/4;justify-self:center;max-width:none;left:auto;transform:none;width:min(250px,100vw - 96px)!important}.opponent.west{grid-area:west;justify-self:stretch}.opponent.east{grid-area:east;justify-self:stretch}.opponent .player-info,.online-game .opponent .player-info{flex-wrap:nowrap;justify-content:center;gap:4px;width:100%;min-width:0;height:auto;margin:0 0 6px;font-size:12px}.opponent .player-name-button{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:84px;overflow:hidden}.opponent.west .player-info,.opponent.east .player-info,.online-game .opponent.west .player-info,.online-game .opponent.east .player-info{grid-template:"avatar name"20px"count name"18px"score score"18px/30px minmax(0,1fr);place-items:center start;gap:0 5px;width:100%;height:56px;display:grid}.opponent.east .player-info,.online-game .opponent.east .player-info{grid-template:"name avatar"20px"name count"18px"score score"18px/minmax(0,1fr) 30px;justify-items:end}.opponent.west .player-info .player-avatar,.opponent.east .player-info .player-avatar{grid-area:avatar;justify-self:center}.opponent.west .player-info .player-name-button,.opponent.east .player-info .player-name-button{overflow-wrap:anywhere;white-space:normal;-webkit-line-clamp:2;text-align:start;-webkit-box-orient:vertical;grid-area:name;align-self:center;max-width:100%;padding-inline:1px;line-height:1.05;display:-webkit-box}.opponent.east .player-info .player-name-button{text-align:end}.opponent.west .player-info .player-name-button,.opponent.east .player-info .player-name-button{min-height:44px}.opponent.west .player-info .hand-count,.opponent.east .player-info .hand-count{grid-area:count;align-self:center}.opponent.west .player-info .seat-total-score,.opponent.east .player-info .seat-total-score{grid-area:score;align-self:center}.opponent.west .player-info .seat-total-score{justify-self:start}.opponent.east .player-info .seat-total-score{justify-self:end}.opponent.west .player-info .seat-total-score strong,.opponent.east .player-info .seat-total-score strong{white-space:nowrap}.opponent.west .turn-dot,.opponent.east .turn-dot{position:absolute;top:12px;right:3px}.turn-dot{display:none}.player-avatar{background:#174333;border-radius:8px;flex:0 0 30px;width:30px;height:30px;font-size:13px}.opponent.active .player-avatar{box-shadow:0 0 0 2px #b9f08b24}.north .hidden-hand,.online-game .opponent.north .hidden-hand{flex-flow:row;justify-content:center;gap:2px;min-width:0;display:flex;overflow:hidden}.north .hidden-hand>span{flex:1 1 var(--back-width);min-width:10px;max-width:var(--back-width)}.west .hidden-hand,.east .hidden-hand,.online-game .opponent.west .hidden-hand,.online-game .opponent.east .hidden-hand{flex-flow:column;justify-content:flex-start;align-items:center;gap:0;width:auto;height:178px;display:flex;overflow:hidden}.west .hidden-hand>span,.east .hidden-hand>span,.online-game .opponent.west .hidden-hand>span,.online-game .opponent.east .hidden-hand>span{background:linear-gradient(120deg,#7daa94,#4e846c);flex:0 0 16px;width:28px;height:16px;min-height:16px;margin-top:-4px;box-shadow:inset 0 0 0 2px #5f927b,2px 0 #d7dfcf,4px 0 #91a58c}.west .hidden-hand>span:first-child,.east .hidden-hand>span:first-child,.online-game .opponent.west .hidden-hand>span:first-child,.online-game .opponent.east .hidden-hand>span:first-child{margin-top:0}.local-seat-melds{display:flex}.opponent .public-meld-lane,.online-game .opponent .public-meld-lane{gap:6px;min-width:0;min-height:0;padding:2px;overflow:auto}.online-game .opponent.north{grid-template:"name""hand""meld"minmax(0,auto)/minmax(0,1fr);gap:4px}.online-game .opponent.west,.opponent[data-player-id].west{grid-template:"name name""hand meld"178px/30px minmax(30px,1fr);gap:4px;display:grid}.online-game .opponent.east,.opponent[data-player-id].east{grid-template:"name name""meld hand"178px/minmax(30px,1fr) 30px;gap:4px;display:grid}.opponent[data-player-id] .player-info{grid-area:name}.opponent[data-player-id] .hidden-hand{grid-area:hand}.opponent[data-player-id] .public-meld-lane{grid-area:meld}.online-game .opponent.west .public-meld-lane,.online-game .opponent.east .public-meld-lane,.opponent[data-player-id].west .public-meld-lane,.opponent[data-player-id].east .public-meld-lane{flex-direction:column;align-items:center}.opponent .public-meld{background:0 0;border:0;flex:none;gap:2px;padding:0;display:flex}.opponent.west .public-meld,.opponent.east .public-meld{flex-direction:column}.opponent .public-meld .mahjong-tile,.online-game .opponent .public-meld .mahjong-tile{border-bottom-width:3px;flex:0 0 24px;width:24px;height:34px;padding:2px 0}.opponent .public-meld .mahjong-tile>span,.online-game .opponent .public-meld .mahjong-tile>span{font-size:18px}.opponent.west .public-meld .mahjong-tile,.opponent.east .public-meld .mahjong-tile{flex-basis:34px}.local-public-melds{display:none}.table-center,.online-game .table-center{grid-area:center;align-self:center;width:auto;min-width:0;position:relative;top:auto;left:auto;transform:none}.round-panel{width:126px;min-height:158px;box-shadow:none;background:#163d2fcc;border:1px solid #96c3a44a;border-radius:15px;flex-direction:column;justify-content:center;gap:2px;margin-inline:auto;padding:10px 7px 9px;position:relative}.mobile-discard-trigger{z-index:3;border-radius:inherit;background:0 0;border:0;padding:0;display:block;position:absolute;inset:-1px}.mobile-discard-trigger:focus-visible{outline-offset:-4px}.round-panel .turn-info,.round-panel .turn-number{display:none}.mobile-latest-discard{color:#e8f0de;background:#163d2f80;border:0;border-radius:11px;grid-template-rows:49px 12px;align-content:center;place-items:center;gap:7px;width:112px;min-height:80px;padding:5px;display:grid}.mobile-discard-preview{justify-content:center;align-items:flex-end;gap:3px;width:100%;display:flex}.mobile-discard-preview>span{color:#284033;background:#f1f1e7;border:1px solid #e3e6d6;border-bottom:4px solid #b1bba7;border-radius:5px;place-items:center;width:30px;height:41px;font-size:20px;font-weight:700;display:grid;box-shadow:0 2px #7c967c}.mobile-discard-preview>span.latest{color:#22372d;background:#eefbdc;border-color:#b9e79b;height:47px}.mobile-latest-discard>small{color:#bad0c0;letter-spacing:-2px;white-space:nowrap;align-self:end;font-size:13px;line-height:.65;display:block}.deck-counter{gap:2px;min-width:58px}.deck-counter strong{font-size:32px;line-height:.98}.deck-counter>span{color:#d6e3d6;font-size:10px}.table-center .discard-pile{display:none}.table-center .discard-pile[data-mobile-open=true]{z-index:20;background:#06452ff5;border:1px solid #9cc5a770;border-radius:10px;width:min(310px,100vw - 24px);padding:10px;display:block;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%);box-shadow:0 18px 35px #04281fcc}.table-center .discard-pile .discard-heading{margin-inline:3px}.table-center .discard-pile .discard-list{grid-template-columns:repeat(7,34px);grid-auto-rows:45px;place-content:start center;gap:6px 5px;height:min(180px,32dvh);padding-inline:0;display:grid}.mobile-turn-strip{color:#d7e6d9;width:fit-content;min-width:0;max-width:calc(100% - 44px);min-height:42px;box-shadow:none;background:#163d2fcc;border:1px solid #70b18e3d;border-radius:10px;align-items:center;gap:11px;margin:0 auto 12px;padding:7px 14px;display:flex}.mobile-turn-strip>strong{color:#f5d865;flex:none;align-items:center;gap:7px;font-size:13px;display:flex}.mobile-turn-strip>strong>i{background:#f2d453;border:1px solid #fff2a4;border-radius:50%;width:10px;height:10px;box-shadow:0 0 0 2px #f2d45326,0 0 9px #f2d45358}.mobile-turn-strip>span{background:#a7c5ad48;width:1px;height:22px}.mobile-turn-strip>button{min-width:0;min-height:44px;color:inherit;background:0 0;border:0;align-items:center;gap:4px;margin-block:-7px;padding:0;font-size:12px;display:flex}.mobile-turn-strip>button:focus-visible,.hand-tiles .mahjong-tile:focus-visible,.hand-tiles .sentence-separator:focus-visible{outline-offset:-3px}.mobile-turn-strip b{text-overflow:ellipsis;white-space:nowrap;max-width:92px;font-weight:600;display:inline-block;overflow:hidden}.mobile-turn-strip b.expanded{white-space:normal;overflow-wrap:anywhere;max-width:none}.mobile-turn-strip i{color:#284033;background:#f1f1e7;border-radius:4px;place-items:center;width:25px;height:31px;font-style:normal;font-weight:700;display:grid}.human-area{min-width:0;padding:0 0 calc(5px + env(safe-area-inset-bottom));background:0 0;border:0;border-radius:0;margin:0 10px;position:relative}.sentence-area{min-width:0;height:auto;box-shadow:none;background:#284b3c80;border:1px solid #a6c69c55;border-radius:12px;margin-bottom:7px;padding:9px 9px 2px}.sentence-heading{align-items:flex-start;gap:8px;min-width:0}.sentence-heading h2{min-width:0;font-size:14px;font-weight:750}.sentence-heading h2 small{display:none}.sentence-tools{flex-wrap:wrap;justify-content:flex-end;gap:6px}.sentence-tools>span{display:none}.sentence-tools .utility-button{background:#163e2d55;border-color:#b8d7bd45;border-radius:8px;justify-content:center;align-items:center;min-height:40px;padding:5px 10px;font-size:11px;line-height:1;display:inline-flex}.sentence-tools .mobile-compose-entry{display:none}.mobile-delete-separator{display:inline-flex}.sentence-tools .mobile-hide-when-separator-selected{display:none}.sentence-area .hand-tiles{background:#153d2b50;border:1px solid #a6c69c33;border-radius:9px;justify-content:flex-start;gap:3px;min-height:66px;margin-top:6px;padding:8px 7px 4px;overflow-x:auto}.sentence-area .mahjong-tile{border-bottom-width:4px;flex:0 0 clamp(32px,7.4vw,40px);width:clamp(32px,7.4vw,40px);max-width:40px;height:52px;padding:4px 0}.sentence-area .mahjong-tile>span{font-size:23px}.sentence-separator{flex-basis:28px;width:28px;min-height:44px}.online-sentence-hint,.sentence-validation{display:none}.sentence-empty{color:#9eb8a3;background:#153d2b50;border:1px solid #a6c69c33;border-radius:9px;min-height:66px;margin-top:6px;padding:8px 7px 4px;font-size:11px}.hand-panel{min-width:0;box-shadow:none;background:#153d2b50;border:1px solid #a6c69c55;border-radius:12px;padding:7px 8px 2px}.self-seat{gap:6px;min-width:0;margin:0 2px}.self-seat strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:120px;overflow:hidden}.self-seat .player-avatar{display:none}.self-seat .hand-count{margin-left:auto}.self-seat .seat-total-score{flex:0 auto}.hand-size-toggle{color:#dcebdd;background:#174b34;border:1px solid #a8c8ae50;border-radius:7px;flex:none;justify-content:center;align-items:center;min-height:34px;padding:0 8px;font-size:10px;line-height:1;display:inline-flex}.hand-panel .hand-tiles{justify-content:flex-start;gap:1px;min-height:62px;padding:7px 2px 3px;overflow-x:auto}.hand-panel .mahjong-tile{border-bottom-width:4px;flex:0 0 clamp(32px,7.4vw,40px);width:clamp(32px,7.4vw,40px);max-width:40px;height:52px;padding:4px 0}.hand-panel .mahjong-tile>span{font-size:clamp(18px,6vw,24px)}.hand-enlarged .hand-panel .mahjong-tile{flex:0 0 42px;width:42px;max-width:42px;height:62px}.hand-enlarged .hand-panel .mahjong-tile>span{font-size:27px}.mahjong-tile.selected{transform:translateY(-4px)}.selection-move-controls{z-index:19;background:#174b34f2;border:1px solid #8db59870;border-radius:16px;flex-wrap:nowrap;gap:2px;margin:0;position:absolute;overflow:visible;transform:translate(-50%);box-shadow:0 5px 14px #102d245c}.selection-move-controls:not([data-positioned=true]){visibility:hidden}.selection-move-controls .table-action{width:38px;min-width:38px;height:34px;min-height:34px;box-shadow:none;background:0 0;border:0;border-radius:15px;flex:none;padding:0;font-size:20px}.selection-move-controls .move-arrow{place-items:center;line-height:1;display:grid}.selection-move-controls .move-arrow>span{line-height:1;display:block;transform:translateY(-1px)}.selection-move-controls .group-mode-toggle,.selection-move-controls .delete-separator{width:auto;min-width:56px;padding-inline:8px;font-size:10px}.hand-scrollbar{accent-color:#8db598;touch-action:pan-x pinch-zoom;width:calc(100% - 18px);height:14px;margin:0 auto 2px;display:block}.action-bar{z-index:15;padding:8px 0 calc(16px + env(safe-area-inset-bottom));background:linear-gradient(#153d2b00,#153d2bcc 18px);grid-template-columns:minmax(0,1fr);gap:6px;margin:7px 0 -2px;display:grid;position:sticky;bottom:0}.turn-actions{flex-wrap:nowrap;gap:7px;width:100%;min-width:0;overflow-x:auto}.turn-actions .table-action{min-width:82px;height:50px;box-shadow:none;background:#224d3c;border-color:#a7c7ad65;border-radius:8px;flex:1 0 82px;padding-inline:10px;font-size:14px;font-weight:700}.turn-actions .win-action{flex:1 0 82px;min-width:82px}.turn-actions .win-action .table-action{width:100%;min-width:100%}.turn-actions .mobile-primary-action:not(:disabled){color:#e5eddf;box-shadow:none;background:#315e48;border-color:#b5d5b7}.turn-actions .opportunity-action:not(:disabled){color:#254631;background:#e4efce;border-color:#dbefb6}.turn-actions .mobile-action-hidden:not(.mobile-persistent-action){display:none}.turn-actions .mobile-persistent-action{display:inline-flex}.desktop-compose-entry:not([aria-pressed=true]),.action-hint{display:none}.chi-opportunity{margin-right:0}.game-room .debug-info{display:none}.online-game-feedback{overflow-wrap:anywhere;min-height:20px;margin:6px 14px}.online-reconnect{padding-bottom:calc(14px + env(safe-area-inset-bottom))}.online-win-panel,.online-win-result{width:calc(100% - 20px);max-width:none;margin:4px auto 14px;padding-inline:6px}.online-win-panel h2{font-size:27px}.win-vote-tiles,.win-result-tiles{gap:10px 14px}.win-vote-segment,.win-result-segment{flex-wrap:wrap;max-width:100%}.win-vote-segment .vote-sentence-tile,.win-result-segment .result-tile{flex:0 0 34px;width:34px;height:50px}.win-vote-segment .vote-sentence-tile>span,.win-result-segment .result-tile>span{font-size:22px}.win-result-heading h2{font-size:32px}.win-result-votes li{flex:96px;max-width:150px}.online-game .table-surface:has(.online-win-result){grid-template-rows:auto minmax(0,1fr) auto auto;display:grid}.online-game .table-surface:has(.online-win-result)>.online-win-result{overscroll-behavior:contain;width:calc(100% - 20px);min-height:0;margin:0 auto;padding:2px 6px 6px;overflow-y:auto}.online-game .table-surface:has(.online-win-result)>.online-rematch-panel{min-height:58px;padding:7px 12px calc(7px + env(safe-area-inset-bottom));background:#163d2f99;border-top:1px solid #b8d7bd25;flex-wrap:wrap;justify-content:center;align-items:center;gap:5px 12px;display:flex}.online-game .table-surface:has(.online-win-result)>.online-rematch-panel .table-action{min-height:44px}.online-game .table-surface:has(.online-win-result)>.online-rematch-panel p{font-size:12px}.online-game .table-surface:has(.online-win-result)>.online-game-feedback{min-height:0;margin-block:0}.online-win-result .win-result-heading h2{font-size:27px}.online-win-result .win-result-heading p{margin:2px 0 10px;font-size:12px}.online-win-result .win-result-tiles{gap:6px 8px;margin-bottom:10px}.online-win-result .win-result-segment{gap:2px}.online-win-result .win-result-segment .result-tile{flex-basis:30px;width:30px;height:44px}.online-win-result .win-result-segment .result-tile>span{font-size:20px}.online-win-result .win-result-votes{flex-wrap:nowrap;gap:5px;margin-bottom:8px}.online-win-result .win-result-votes li{flex:82px;gap:1px;width:auto;min-width:0;max-width:110px;padding:5px 3px}.online-win-result .win-result-votes .vote-player{margin-bottom:1px;font-size:10px}.online-win-result .win-result-votes .vote-decision{font-size:19px}.online-win-result .win-result-votes .vote-bonus{font-size:13px}.online-win-result .win-result-score .score-label,.online-win-result .score-detail{font-size:12px}.online-win-result .win-result-score .score-total strong{font-size:48px}.online-win-result .score-detail{margin-top:4px}.room-scores{margin-block:10px}.room-scores ol{grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}.room-scores li{padding:6px 7px}.room-scores li>strong{font-size:18px}.online-rematch-panel{padding-bottom:calc(22px + env(safe-area-inset-bottom))}.result-modal,.online-session-dialog{width:calc(100vw - 24px);max-height:calc(100dvh - 24px);padding:24px 16px}.result-sentence{white-space:normal;overflow-wrap:anywhere}}@media (width<=700px) and (height<=700px){.game-room .table-header{min-height:52px;padding:6px 14px 3px}.table-header h1 .brand-icon{width:34px;height:37px;font-size:23px}.mobile-menu-trigger{width:40px;height:40px;font-size:23px}.game-table,.online-game .game-table{grid-template-rows:auto minmax(140px,1fr);min-height:205px;margin-top:-2px;padding-bottom:2px}.opponent .player-info,.online-game .opponent .player-info{margin-bottom:2px;font-size:10px}.player-avatar{flex-basis:27px;width:27px;height:27px}.west .hidden-hand,.east .hidden-hand,.online-game .opponent.west .hidden-hand,.online-game .opponent.east .hidden-hand{height:132px}.west .hidden-hand>span,.east .hidden-hand>span,.online-game .opponent.west .hidden-hand>span,.online-game .opponent.east .hidden-hand>span{flex-basis:13px;height:13px;min-height:13px}.online-game .opponent.west,.online-game .opponent.east,.opponent[data-player-id].west,.opponent[data-player-id].east{grid-template-rows:auto 132px}.round-panel{width:116px;min-height:124px;padding-block:6px}.mobile-latest-discard{grid-template-rows:37px 10px;gap:5px;min-height:62px}.mobile-discard-preview>span{width:26px;height:34px;font-size:18px}.mobile-discard-preview>span.latest{height:38px}.deck-counter strong{font-size:30px}.mobile-turn-strip{min-height:34px;margin-bottom:5px;padding-block:4px}.mobile-turn-strip>span{height:18px}.sentence-area{margin-bottom:5px;padding:6px 7px 1px}.sentence-heading h2{font-size:12px}.sentence-heading h2 small{display:none}.sentence-tools .utility-button{min-height:32px;padding-inline:8px;font-size:10px}.sentence-empty{min-height:47px;margin-top:4px;padding-block:5px 1px;font-size:10px}.sentence-area .hand-tiles{min-height:47px;margin-top:4px;padding-block:5px 1px}.sentence-area .mahjong-tile{height:45px}.sentence-validation{min-height:10px;font-size:9px;line-height:10px}.hand-panel{padding:4px 6px 1px}.self-seat{font-size:11px}.hand-size-toggle{min-height:28px}.hand-panel .hand-tiles{min-height:49px;padding-block:5px 0}.hand-panel .mahjong-tile{height:45px}.hand-enlarged .hand-panel .mahjong-tile{height:50px}.mahjong-tile.selected{transform:translateY(-2px)}.action-bar{margin-top:3px;padding-top:4px}.turn-actions .table-action{height:46px}.action-hint{font-size:9px;line-height:11px}}@media (width<=700px) and (height<=600px){.game-room .table-header{min-height:48px;padding-top:4px}.game-table,.online-game .game-table{grid-template-rows:auto minmax(0,1fr);min-height:150px;overflow:hidden}.online-game .opponent.west,.online-game .opponent.east,.opponent[data-player-id].west,.opponent[data-player-id].east{grid-template-rows:auto 104px}.west .hidden-hand,.east .hidden-hand,.online-game .opponent.west .hidden-hand,.online-game .opponent.east .hidden-hand{height:104px}.west .hidden-hand>span,.east .hidden-hand>span,.online-game .opponent.west .hidden-hand>span,.online-game .opponent.east .hidden-hand>span{flex-basis:11px;height:11px;min-height:11px}.round-panel{min-height:90px}.mobile-latest-discard{grid-template-rows:29px 8px;gap:3px;min-height:46px}.mobile-discard-preview>span{width:23px;height:29px;font-size:16px}.mobile-discard-preview>span.latest{height:33px}.mobile-turn-strip{margin-bottom:3px}.sentence-empty,.hand-panel .hand-tiles{min-height:45px}.turn-actions .table-action{height:43px}}@media (width<=340px){.game-table,.online-game .game-table{grid-template-columns:minmax(62px,.72fr) minmax(132px,2fr) minmax(62px,.72fr);margin-inline:5px}.human-area{margin-inline:5px}.mobile-turn-strip{margin-inline:8px}.turn-actions{gap:5px}.turn-actions .table-action{flex-basis:78px;min-width:78px;padding-inline:7px}}@media (width<=700px){.turn-actions .table-action{flex:1 1 0;min-width:44px;min-height:44px;padding-inline:2px;font-size:clamp(11px,3.1vw,14px)}.turn-actions .win-action{flex:1 1 0;min-width:44px}.turn-actions:has(.pong-confirm-action) .mobile-persistent-action{display:none}}.rules-guide{color:#edf6e8;background:#214c3a;border:1px solid #87aa91;border-radius:16px;width:min(620px,100vw - 24px);height:min(680px,100dvh - 24px);max-height:calc(100dvh - 24px);padding:0;overflow:hidden;box-shadow:0 24px 70px #071a12aa}.rules-guide[open]{grid-template-rows:auto 220px minmax(0,1fr) auto;display:grid}.rules-guide::backdrop{background:#071a12c8}.rules-guide header,.rules-guide footer{justify-content:space-between;align-items:center;gap:12px;padding:14px 18px;display:flex}.rules-guide header{border-bottom:1px solid #ffffff20;font-weight:750}.rules-guide header button{color:#edf6e8;background:0 0;border:0;width:44px;height:44px;font-size:26px}.rules-guide article{min-height:0;padding:8px 22px 20px;overflow:auto}.rules-guide article small{color:#b9d0bd}.rules-guide article h2{margin:8px 0 12px}.rules-guide article p{line-height:1.75}.rules-guide footer{background:#214c3a;border-top:1px solid #ffffff20;position:sticky;bottom:0}.rules-guide footer button,.claim-guide-hint button,.in-game-guide aside button{color:#eef7e9;background:#285f47;border:1px solid #b8d7bd66;border-radius:8px;min-height:44px;padding:8px 18px}.rules-guide-image{background:#173e2e;border:1px solid #a6c69c33;border-radius:12px;place-items:center;min-height:0;margin:14px 20px 6px;padding:10px;display:grid;overflow:hidden}.rules-guide-image picture{display:contents}.rules-guide-image img{object-fit:contain;border-radius:7px;width:100%;height:100%;display:block}.guide-note{color:#c8ddca;margin-top:12px}.in-game-guide{z-index:900;pointer-events:none;position:fixed;inset:0}.guide-shade{z-index:900;pointer-events:none;width:100%;height:100%;position:fixed;inset:0}.guide-highlight{z-index:901;pointer-events:none;border:3px solid #e8ef8d;border-radius:12px;position:fixed;box-shadow:0 0 20px #e8ef8daa}.in-game-guide aside{z-index:902;pointer-events:auto;background:#214c3a;border:1px solid #b8d7bd77;border-radius:12px;width:min(380px,100vw - 24px);padding:16px;position:fixed;right:18px}.in-game-guide aside p{margin-bottom:12px;line-height:1.6}.in-game-guide aside button+button{margin-left:8px}.claim-guide-hint{color:#fff6c7;background:#4b5429;border:1px solid #d9dd8c88;border-radius:9px;justify-content:space-between;align-items:center;gap:8px;margin:6px 0;padding:8px 12px;line-height:1.45;display:flex}.claim-guide-hint button{background:0 0;flex:0 0 44px;padding:0}@media (width<=800px){.rules-guide{height:min(480px,100dvh - 24px)}.rules-guide[open]{grid-template-rows:auto 130px minmax(0,1fr) auto}.rules-guide article{padding:6px 16px 12px}.rules-guide article h2{margin:5px 0 8px}.rules-guide article p{margin:0;line-height:1.65}.rules-guide-image{margin:8px 12px 2px;padding:6px}.rules-guide-image img{width:auto;max-width:100%;height:auto;max-height:106px}.in-game-guide aside{width:auto;bottom:auto;left:12px;right:12px;top:max(76px,calc(env(safe-area-inset-top) + 64px))!important}.claim-guide-hint{font-size:12px}}:root{color:#ecf4ef;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#14251f;font-family:Inter,Segoe UI,Microsoft YaHei,sans-serif;font-size:14px}*{box-sizing:border-box}body{min-width:320px;margin:0}button{font:inherit;cursor:pointer;touch-action:manipulation}button:disabled{cursor:not-allowed;opacity:.4}button:focus-visible,[tabindex]:focus-visible{outline-offset:4px;outline:3px solid #b9f4bf}h1,h2,p{margin:0}.game-room{background:radial-gradient(at top,#2a4639,#14251f);place-items:center;min-height:100svh;padding:20px;display:grid}.table-frame{background:#1b322a;border:1px solid #496555;border-radius:21px;width:min(100%,1400px);padding:9px;box-shadow:0 22px 65px #09191170,inset 0 1px #ffffff15}.table-surface{background:radial-gradient(at 50% 35%,#367b61,#225640 85%);border:1px solid #57866a50;border-radius:13px;flex-direction:column;min-height:max(910px,100svh - 60px);display:flex;overflow:hidden}.table-header{flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;padding:20px 26px 12px;display:flex}.table-header h1{letter-spacing:.5px;align-items:center;gap:10px;font-size:19px;font-weight:750;display:flex}.brand-icon{color:#294c37;background:#e8f3dc;border-radius:6px;place-items:center;width:32px;height:36px;font-size:22px;display:grid;transform:rotate(-7deg);box-shadow:0 3px #9fb697}.table-header h1 small{color:#b5cbbb;letter-spacing:1.6px;margin-left:6px;font-size:10px;font-weight:500}.room-code-copy{color:#dcebdd;min-width:82px;min-height:32px;box-shadow:none;letter-spacing:1.2px;background:0 0;border:0;border-radius:0;justify-content:center;align-items:center;padding:5px 8px;font-size:11px;font-weight:700;line-height:1;display:inline-flex}.room-code-copy-state{color:#cceeab;letter-spacing:0;width:12px;margin-left:3px;display:inline-block}@media (hover:hover) and (pointer:fine){.room-code-copy:hover{color:#f1f8ee}}.header-actions{align-items:center;gap:15px;margin-left:auto;display:flex}.local-label{color:#b8cfbd;font-size:11px}.language-settings{z-index:80;position:relative}.mode-choice>.language-settings{position:absolute;inset:18px 18px auto auto}.language-settings-panel{z-index:90;text-align:left;background:#17352a;border:1px solid #769984;border-radius:10px;gap:12px;width:min(300px,100vw - 32px);padding:16px;display:grid;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 14px 35px #071a1177}.language-settings-panel label{color:#dce9df;gap:6px;display:grid}.language-settings-panel select{min-height:42px;color:inherit;background:#102b21;border:1px solid #769984;border-radius:7px;padding:7px 10px}.language-settings-panel .language-settings-toggle{align-items:center;gap:9px;min-height:42px;display:flex}.language-settings-panel small{color:#b8cfbd;line-height:1.45}.mobile-game-menu{z-index:80;display:block;position:relative}.mobile-menu-trigger{color:#f0f6e8;background:#174b34;border:1px solid #a8d7bd78;border-radius:10px;place-items:center;width:42px;height:42px;padding:0;display:grid;position:relative}.mobile-menu-trigger-icon{stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:23px;height:23px}.connection-warning-dot{background:#f4c1a6;border-radius:50%;width:8px;height:8px;position:absolute;top:5px;right:5px}.mobile-menu-popover{z-index:90;background:linear-gradient(145deg,#123f2ff8,#0a3427fa);border:1px solid #93c3a480;border-radius:14px;gap:4px;width:min(300px,100vw - 28px);max-height:min(76dvh,560px);padding:10px;display:grid;position:absolute;top:calc(100% + 8px);right:0;overflow-y:auto;box-shadow:0 18px 42px #031b14c9,inset 0 1px #ffffff12}.mobile-menu-popover>button{color:#eef5e9;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;min-height:50px;padding:0 16px;font-weight:700;display:flex}.mobile-menu-popover>button+button{border-top:1px solid #b8d7bd25;border-radius:0}.mobile-menu-popover>button:hover:not(:disabled),.mobile-menu-popover>button:focus-visible{background:#ffffff0c}.mobile-menu-popover>button.danger{color:#f3d4c5}.language-settings-embedded{text-align:left;border-bottom:1px solid #b8d7bd26;grid-template-columns:1fr;gap:8px;margin-bottom:2px;padding:4px 5px 12px;display:grid}.language-settings-embedded header{color:#f0f6e8;align-items:center;min-height:38px;padding:0 11px;font-size:13px;display:flex}.language-settings-embedded label{color:#edf6e9;font-size:12px}.language-settings-embedded .language-settings-language,.language-settings-embedded .language-settings-toggle{background:#143b2e9c;border:1px solid #a4c6ad28;border-radius:9px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;min-height:48px;padding:6px 9px 6px 11px;display:grid}.language-settings-embedded select{color:#edf6e9;background:#0e3025;border:1px solid #91bda16b;border-radius:7px;width:130px;min-height:32px;padding:4px 28px 4px 9px;font-size:12px}.language-settings-embedded .language-settings-toggle input{appearance:none;background:#17382c;border:1px solid #88aa9366;border-radius:999px;width:40px;height:23px;margin:0;transition:background .15s,border-color .15s;position:relative}.language-settings-embedded .language-settings-toggle input:after{content:"";background:#aac0af;border-radius:50%;width:15px;height:15px;transition:transform .15s,background .15s;position:absolute;top:3px;left:3px;box-shadow:0 1px 2px #061d16aa}.language-settings-embedded .language-settings-toggle input:checked{background:#75a75d;border-color:#cfe7a6}.language-settings-embedded .language-settings-toggle input:checked:after{background:#f0f5df;transform:translate(17px)}.language-settings-embedded small{color:#adc4b3;padding:0 11px 4px;font-size:10px;line-height:1.4}.mahjong-tile-definition-target{flex:0 68px;width:68px;min-width:0;display:inline-flex;position:relative}.mahjong-tile-definition-target>.mahjong-tile{flex:1 0 100%;width:100%;min-width:0}.sentence-area .mahjong-tile-definition-target{flex-basis:48px;width:48px}.public-meld .mahjong-tile-definition-target{flex:0 0 28px;width:28px}.opponent.west .public-meld .mahjong-tile-definition-target,.opponent.east .public-meld .mahjong-tile-definition-target{flex-basis:38px;width:38px}.tile-definition-tooltip{z-index:70;color:#edf6e9;opacity:0;visibility:hidden;pointer-events:none;text-align:left;white-space:normal;background:#102c21;border:1px solid #8cad95;border-radius:8px;width:max-content;max-width:min(280px,100vw - 28px);padding:9px 11px;transition:opacity .12s .25s,transform .12s .25s,visibility 0s .37s;position:absolute;bottom:calc(100% + 9px);left:50%;transform:translate(-50%,4px);box-shadow:0 9px 25px #081a1266}.tile-definition-tooltip>span{color:#edf6e9;font-size:15px;font-weight:650;line-height:1.35;display:block}.tile-definition-tooltip>span b{color:#c9ddcd;font-weight:500}.mahjong-tile.selected+.tile-definition-tooltip,.discard-tile:focus>.tile-definition-tooltip{opacity:1;visibility:visible;transform:translate(-50%)}@media (hover:hover) and (pointer:fine){.hand-tiles:has(.mahjong-tile-definition-target:hover) .mahjong-tile-definition-target:not(:hover)>.mahjong-tile.selected+.tile-definition-tooltip{opacity:0;visibility:hidden;transition-delay:0s;transform:translate(-50%,4px)}.mahjong-tile-definition-target:hover>.tile-definition-tooltip,.discard-tile:hover>.tile-definition-tooltip{opacity:1;visibility:visible;transition-delay:.25s;transform:translate(-50%)}}.discard-tile{position:relative}.discard-tile>.tile-definition-tooltip{bottom:calc(100% + 8px);left:50%}.selected-definition-tooltip{z-index:120;opacity:1;visibility:visible;transition:none;display:none;position:fixed;bottom:auto;transform:translate(-50%,-100%)}@media (hover:none),(pointer:coarse){.mahjong-tile.selected+.tile-definition-tooltip{opacity:0;visibility:hidden}.selected-definition-tooltip{display:block}}@media (width<=700px){.language-settings-panel{top:max(12px, env(safe-area-inset-top));position:fixed;right:12px}.hand-panel .mahjong-tile-definition-target,.sentence-area .mahjong-tile-definition-target{flex:0 0 clamp(38px,8vw,44px);width:clamp(38px,8vw,44px)}.public-meld .mahjong-tile-definition-target{flex-basis:24px;width:24px}.opponent.west .public-meld .mahjong-tile-definition-target,.opponent.east .public-meld .mahjong-tile-definition-target{flex-basis:34px;width:34px}}.utility-button,.draw-button,.play-button{border:1px solid #b8d7bd45;border-radius:7px;padding:10px 18px;font-size:13px;font-weight:600}.utility-button{color:#e0eddf;background:#163e2d55}.utility-button:hover:not(:disabled){background:#174b34;border-color:#b8d7bd90}.draw-button{color:#234932;background:#e4f1d4;border-color:#edf5e6;min-width:105px;box-shadow:0 3px #a3ba92}.play-button{color:#1e4933;background:#b4e5c6;border-color:#c8f0d5;min-width:105px;box-shadow:0 3px #6eaf8c}.draw-button:hover:not(:disabled),.play-button:hover:not(:disabled){filter:brightness(1.08)}.draw-button:disabled,.play-button:disabled{box-shadow:none}.debug-info{color:#acc5b2;justify-content:center;gap:18px;padding:10px 15px 13px;font-family:ui-monospace,Microsoft YaHei,monospace;font-size:10px;display:flex}.debug-info[hidden]{display:none!important}@media (width<=800px){.game-room{padding:6px}.table-frame{padding:5px}.table-header{padding:16px 16px 10px}.table-header h1 small,.local-label{display:none}.table-header h1{font-size:16px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important}}.deck-library,.deck-editor{background:#19362b;border:1px solid #547461;border-radius:18px;width:min(1120px,100% - 24px);margin:20px auto;padding:24px;box-shadow:0 20px 60px #07150d80}.deck-toolbar,.deck-actions,.deck-summary,.deck-group-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.deck-toolbar small,.deck-kind{color:#b7d0bd;letter-spacing:.08em;font-size:11px}.deck-toolbar h1,.deck-toolbar h2{margin-top:4px}.deck-export{position:relative}.deck-export>summary{cursor:pointer;list-style:none}.deck-export>summary::-webkit-details-marker{display:none}.deck-export>summary:after{content:" ▾"}.deck-export-options{z-index:5;background:#19362b;border:1px solid #63836e;border-radius:9px;gap:6px;min-width:125px;padding:8px;display:grid;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 8px 20px #07150d80}.deck-export-options>button{white-space:nowrap;text-align:left;min-height:44px}.deck-library-help{color:#c8d8cd;margin:16px 0}.deck-mobile-note{display:none}.deck-card-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.deck-card{background:#224b3b;border:1px solid #63836e80;border-radius:12px;flex-direction:column;justify-content:space-between;gap:20px;min-width:0;padding:18px;display:flex}.deck-card .deck-actions{justify-content:flex-start}.deck-card .deck-actions .lobby-danger{margin-left:auto}.deck-card h2{text-overflow:ellipsis;white-space:nowrap;margin:6px 0;overflow:hidden}.deck-card p{color:#d3e1d5;-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:2.8em;display:-webkit-box;overflow:hidden}.deck-card small{color:#b7cbbb;margin-top:10px;display:block}.deck-meta-grid{grid-template-columns:minmax(180px,1fr) minmax(260px,2fr);gap:14px;margin:20px 0;display:grid}.deck-meta-grid label{color:#c9dbce;align-self:start;gap:7px;display:grid}.deck-field-heading{justify-content:space-between;align-items:baseline;gap:12px;min-height:22px;display:flex}.deck-meta-grid input,.deck-meta-grid textarea,.deck-group-heading input,.deck-tile-editor input{color:#eff7f1;width:100%;min-height:44px;font:inherit;background:#10281f;border:1px solid #809b88;border-radius:7px;padding:9px}.deck-meta-grid textarea{resize:vertical;min-height:78px}.deck-summary{background:#10291f;border-radius:8px;justify-content:flex-start;margin:16px 0;padding:12px}.deck-requirements{flex-wrap:wrap;gap:8px;display:flex}.deck-requirements span,.deck-playable,.deck-draft,.deck-warning{border:1px solid;border-radius:999px;align-items:center;gap:6px;min-height:32px;padding:5px 10px;display:inline-flex}.deck-requirements .pass,.deck-playable{color:#dff5e4;background:#24583a;border-color:#69ad7b}.deck-requirements .fail,.deck-draft{color:#ffe0dc;background:#642f2b;border-color:#d27a70}.deck-warning{color:#ffe5ab;background:#5a461e;border-color:#d5a94f}.deck-requirements b,.deck-warning b{font-size:16px;line-height:1}.deck-warning,.deck-issues,.deck-message{color:#ffd99e}.deck-issues{max-height:150px;overflow:auto}.deck-drag-help{color:#c8d8cd;flex-wrap:wrap;justify-content:space-between;gap:8px 18px;margin:18px 0 10px;display:flex}.deck-validation-key{flex-wrap:wrap;align-items:center;gap:5px;display:inline-flex}.deck-validation-key i{border:2px solid;border-radius:3px;width:10px;height:10px;margin-left:7px}.deck-validation-key i.duplicate{border-color:#e9bd68}.deck-validation-key i.invalid{border-color:#ff786f}.deck-edit-groups{grid-template-columns:1fr;gap:18px;display:grid}.deck-edit-group{border:1px solid #557363;border-radius:11px;min-width:0;padding:15px;transition:border-color .15s,background .15s}.deck-edit-group.drop-target{background:#28513e;border-color:#efca7a}.deck-group-heading{justify-content:space-between;align-items:end;gap:12px;display:flex}.deck-group-heading label{color:#b7cbbb;flex:1;gap:5px;font-size:12px;display:grid}.deck-group-heading input{max-width:260px}.deck-group-heading span{color:#aec5b4;flex:none;font-size:12px}.deck-tile-grid{flex-wrap:wrap;align-items:flex-end;gap:7px;margin:12px 0 0;display:flex}.deck-tile-editor{width:46px;height:58px}.deck-tile-editor input,.deck-tile-face,.deck-add-tile{color:#17382b;text-align:center;background:linear-gradient(#fffef2,#e9e6c7);border:1px solid #c9c7a9;border-radius:7px;width:46px;height:58px;min-height:58px;font-size:25px;font-weight:700;box-shadow:inset 0 -4px #d5d1ad,0 3px #071a12}.deck-tile-editor input{min-width:0;padding:4px}.deck-tile-face{cursor:grab;touch-action:none}.deck-tile-face:active{cursor:grabbing}.deck-tile-editor.duplicate{border-radius:7px;outline:2px solid #e9bd68}.deck-tile-editor.invalid{border-radius:7px;outline:2px solid #ff786f}.deck-tile-editor.invalid input,.deck-tile-editor.invalid .deck-tile-face{color:#802b27;background:linear-gradient(#fff1ed,#efc1b9)}.deck-add-tile{box-shadow:none;color:#dcecdf;cursor:pointer;background:#24493a;border-style:dashed}.deck-message{margin-top:15px}@media (width<=700px){.lobby-page:has(.deck-library){place-items:start center;overflow-y:auto}.deck-library,.deck-editor{width:calc(100% - 12px);margin:6px;padding:15px}.deck-mobile-note{color:#f0dfb1;background:#5a461e80;border-left:3px solid #d9bc74;border-radius:6px;margin:-6px 0 16px;padding:10px 12px;line-height:1.55;display:block}.deck-card-grid,.deck-meta-grid{grid-template-columns:1fr}.deck-actions{justify-content:flex-start}.deck-card .deck-actions .lobby-danger{margin-left:auto}.deck-toolbar{align-items:flex-start}.deck-card .lobby-deck-details{width:100%;padding-top:4px}}.online-fit-viewport,.online-fit-canvas{display:contents}.game-room:has(.online-fit-viewport[data-desktop=true]){grid-template:minmax(0,1fr)/minmax(0,1fr);height:100dvh;min-height:0;padding:12px}.online-fit-viewport[data-desktop=true]{place-items:safe center;width:100%;min-width:0;height:100%;min-height:0;display:grid;overflow:auto}.online-fit-viewport[data-desktop=true]>.online-fit-canvas{zoom:var(--board-scale,1);display:block}.online-fit-viewport[data-desktop=true] .table-frame{width:100%;padding:9px;box-shadow:inset 0 1px #ffffff15}.online-fit-viewport[data-desktop=true] .table-surface{min-height:0}.online-fit-viewport[data-desktop=true] .game-table{flex:none}.online-fit-viewport[data-desktop=true] .table-header{padding:20px 26px 12px}.online-fit-viewport[data-desktop=true] .table-header h1{font-size:19px}.online-fit-viewport[data-desktop=true] .table-header h1 small,.online-fit-viewport[data-desktop=true] .local-label{display:inline}.online-fit-viewport[data-desktop=true] .player-info{gap:9px}.online-fit-viewport[data-desktop=true] .opponent.west{left:24px}.online-fit-viewport[data-desktop=true] .opponent.east{right:24px}.online-fit-viewport[data-desktop=true] .human-area{margin:0 26px;padding:16px 18px 14px}.online-fit-viewport[data-desktop=true] .hand-panel .mahjong-tile{height:89px}.online-fit-viewport[data-desktop=true] .hand-panel .mahjong-tile>span{font-size:34px}.online-fit-viewport[data-desktop=true] .game-table{min-height:472px}.online-fit-viewport[data-desktop=true] .opponent.west,.online-fit-viewport[data-desktop=true] .opponent.east{top:40px;transform:none}.online-fit-viewport[data-desktop=true] .table-header{padding-block:14px 8px}.online-fit-viewport[data-desktop=true] .human-area{padding:10px 18px 8px}.online-fit-viewport[data-desktop=true] .player-info,.online-fit-viewport[data-desktop=true] .self-seat,.online-fit-viewport[data-desktop=true] .player-avatar{font-size:16px}.online-fit-viewport[data-desktop=true] .hand-count{font-size:14px}.online-fit-viewport[data-desktop=true] .player-name-button{max-width:120px}.online-fit-viewport[data-desktop=true] .deck-counter strong{font-size:42px}.online-fit-viewport[data-desktop=true] .deck-counter>span,.online-fit-viewport[data-desktop=true] .turn-number{font-size:14px}.online-fit-viewport[data-desktop=true] .turn-badge,.online-fit-viewport[data-desktop=true] .turn-info p{font-size:16px}.online-fit-viewport[data-desktop=true] .round-panel{padding:12px 18px}.online-fit-viewport[data-desktop=true] .discard-heading h2,.online-fit-viewport[data-desktop=true] .discard-heading>span,.online-fit-viewport[data-desktop=true] .discard-empty{font-size:14px}.online-fit-viewport[data-desktop=true] .discard-pile{padding-block:9px 10px}.online-fit-viewport[data-desktop=true] .sentence-area{margin-bottom:8px;padding-top:8px}.online-fit-viewport[data-desktop=true] .sentence-heading h2{font-size:16px}.online-fit-viewport[data-desktop=true] .sentence-tools,.online-fit-viewport[data-desktop=true] .sentence-tools .utility-button,.online-fit-viewport[data-desktop=true] .sentence-empty,.online-fit-viewport[data-desktop=true] .online-sentence-hint,.online-fit-viewport[data-desktop=true] .sentence-validation{font-size:14px}.online-fit-viewport[data-desktop=true] .sentence-empty{min-height:72px}.online-fit-viewport[data-desktop=true] .hand-tiles{padding-block:16px 8px}.online-fit-viewport[data-desktop=true] .sentence-area .hand-tiles{padding-block:14px 8px}.online-fit-viewport[data-desktop=true] .table-action,.online-fit-viewport[data-desktop=true] .utility-button{font-size:16px}.online-fit-viewport[data-desktop=true] .local-label,.online-fit-viewport[data-desktop=true] .selection-label{font-size:14px}.online-fit-viewport[data-desktop=true] .debug-info{padding-block:7px;font-size:13px}.online-fit-viewport[data-desktop=true] .online-game-feedback:empty{min-height:0;margin-block:4px}.online-fit-viewport[data-desktop=true] .vote-choice{font-size:24px}.online-game .online-fit-viewport[data-desktop=true] .game-table{min-height:550px}.online-win-panel{color:#f1f4df;text-align:center;max-width:1080px;margin:12px auto 24px;padding:16px 24px}.online-win-panel h2{letter-spacing:.08em;margin:0 0 8px;font-size:32px}.win-vote-applicant{color:#c2d6c8;overflow-wrap:anywhere;margin:0 0 22px;font-size:14px}.win-vote-tiles{flex-wrap:wrap;justify-content:center;gap:18px 28px;display:flex}.win-vote-segment{justify-content:center;gap:5px;max-width:100%;display:flex}.win-vote-segment .vote-sentence-tile{flex:0 58px;place-content:center;width:58px;height:78px;display:grid}.win-vote-segment .vote-sentence-tile>span{font-size:32px}.win-vote-meta{color:#b7cfbf;margin:14px 0 18px;font-size:12px}.win-vote-progress{justify-items:center;gap:7px;margin-bottom:20px;display:grid}.win-vote-progress>span{font-variant-numeric:tabular-nums;background:#143e3060;border:1px solid #c9dfb92b;border-radius:20px;padding:6px 16px;font-size:13px}.win-vote-progress small,.online-vote-controls small{color:#b7cfbf;font-size:11px}.online-vote-controls .vote-choice{background:#16473470;border:1px solid #b9d2ae60;border-radius:12px;width:116px;min-height:64px;font-size:24px}.online-vote-controls .vote-choice[aria-pressed=true]{color:#183b30;background:#d4edba;box-shadow:0 4px #123c3050}.win-vote-bonus .table-action{min-width:66px}.online-vote-controls .win-vote-submit{color:#183b30;background:#d4edba;min-width:242px;font-weight:700}.online-vote-controls .win-vote-submit:disabled{color:#bacdbf;opacity:.55;box-shadow:none;cursor:not-allowed;background:#487460}.win-vote-waiting{gap:9px;padding:16px;display:grid}.win-vote-waiting strong{color:#d4edba;font-size:18px}.win-vote-waiting span,.win-vote-waiting p{color:#b7cfbf;margin:0;font-size:13px}@media (width<=800px){.win-vote-segment{gap:3px}.win-vote-segment .vote-sentence-tile{flex-basis:clamp(18px,5vw,45px);width:clamp(18px,5vw,45px);height:58px}.win-vote-segment .vote-sentence-tile>span{font-size:clamp(15px,4vw,26px)}}.online-win-sentence{white-space:pre-wrap;overflow-wrap:anywhere;font-size:clamp(20px,3vw,34px)}.online-vote-controls{justify-items:center;gap:14px;display:grid}.online-vote-controls>div{gap:10px;display:flex}.online-vote-controls [aria-pressed=true]{color:#183b30;background:#d4edba;outline:2px solid #f2f4dc}.online-vote-breakdown{padding:0;line-height:1.9;list-style:none}.online-win-score strong{font-size:26px}@media (width<=800px){.online-win-panel{margin:12px;padding:18px 12px}}.online-win-result{color:#f6f5df;text-align:center;width:calc(100% - 48px);max-width:1180px;margin:12px auto 28px;padding:12px 0}.win-result-heading h2{letter-spacing:.08em;margin:0;font-size:44px;line-height:1.25}.win-result-heading p{color:#b7cfbf;margin:10px 0 26px;font-size:13px}.win-result-tiles{flex-wrap:wrap;justify-content:center;gap:20px 28px;display:flex}.win-result-segment{justify-content:center;gap:6px;max-width:100%;display:flex}.win-result-segment .result-tile{flex:0 64px;place-content:center;width:64px;height:84px;display:grid}.win-result-segment .result-tile>span{font-size:34px}.win-result-count{color:#b7cfbf;margin:16px 0 20px;font-size:12px}.win-result-votes{flex-wrap:wrap;justify-content:center;gap:12px;margin:0 auto 22px;display:flex}.win-result-votes li{background:#143e302e;border:1px solid #d8e7c727;border-radius:12px;justify-items:center;gap:4px;width:142px;padding:12px;display:grid}.win-result-votes .vote-player{overflow-wrap:anywhere;color:#c5d8cb;max-width:100%;margin:0 0 4px;font-size:12px}.vote-decision{font-size:20px;line-height:1.3}.vote-yes .vote-decision{color:#d0edb5}.vote-no .vote-decision{color:#d9bdb0}.vote-bonus{color:#c5d8cb;font-size:16px}.win-result-score{margin:0 auto}.win-result-score .score-label{color:#c5d8cb;letter-spacing:.12em;margin:0;font-size:12px}.win-result-score .score-total{margin:0;line-height:1.1}.win-result-score .score-total strong{letter-spacing:-.04em;font-size:76px;font-weight:750}.score-total>span{color:#c5d8cb;font-size:16px}.score-detail{color:#b7cfbf;margin:10px 0 0;font-size:13px}.score-detail>span{color:#85a58f;padding:0 10px}.online-game .table-surface:has(.online-win-result) .header-actions .utility-button{color:#b7cfbf;box-shadow:none;background:0 0;border-color:#b3d4ba20}.online-game .table-surface:has(.online-win-result) .header-actions .utility-button:hover{color:#f6f5df;background:#ffffff0c}@media (width<=800px){.online-win-result{width:calc(100% - 24px);margin:16px auto 24px}.win-result-heading h2{font-size:34px}.win-result-segment{gap:3px}.win-result-segment .result-tile{border-bottom-width:4px;flex-basis:clamp(20px,5.5vw,45px);width:clamp(20px,5.5vw,45px);height:58px}.win-result-segment .result-tile>span{font-size:clamp(16px,4vw,26px)}.win-result-votes{gap:8px}.win-result-votes li{width:98px;padding:10px 6px}.win-result-score .score-total strong{font-size:64px}}.win-result-heading p{margin-bottom:22px;font-size:16px}.win-result-tiles{margin-bottom:24px}.win-result-votes .vote-player{font-size:15px}.win-result-votes .vote-decision{font-size:26px}.win-result-votes .vote-bonus{font-size:18px}.win-result-score .score-label,.score-detail{font-size:15px}.online-rematch-panel{text-align:center;justify-items:center;gap:12px;padding:18px 12px 22px;display:grid}.online-rematch-panel p{color:#c5d8cb;margin:0;font-size:15px}.online-win-result{margin-bottom:0}.failed-result-message{margin:0 0 20px;font-size:16px}.failed-result-return{justify-items:center;gap:12px;margin-top:24px;display:grid}.failed-result-return p{color:#b5d4c4;margin:0;font-size:15px}.lobby-page{min-height:100dvh;padding:32px 18px;padding:calc(32px + env(safe-area-inset-top)) calc(18px + env(safe-area-inset-right)) calc(32px + env(safe-area-inset-bottom)) calc(18px + env(safe-area-inset-left));scroll-padding-block:calc(16px + env(safe-area-inset-top)) calc(16px + env(safe-area-inset-bottom));background:radial-gradient(at top,#315d48,#14251f 75%);place-items:safe center;display:grid;overflow-y:auto}.lobby-card{background:#1c3d2fe8;border:1px solid #81a68b50;border-radius:18px;width:min(100%,620px);padding:32px;box-shadow:0 20px 70px #071a1440}.lobby-heading,.room-code,.lobby-controls{justify-content:space-between;align-items:center;gap:12px;display:flex}.lobby-heading{margin-bottom:24px}.lobby-heading small,.mode-choice>small{color:#9fbfa9;letter-spacing:1px;font-size:11px}.lobby-heading h1{margin-top:5px;font-size:27px}.lobby-intro,.lobby-note,.lobby-setup p,.lobby-started p{color:#b9cdbb;line-height:1.8}.lobby-nickname-form{gap:12px;display:grid}.lobby-nickname-form .lobby-intro{margin:0}.lobby-nickname-form .lobby-field{margin-block:0}.lobby-form-actions{gap:8px;display:grid}.lobby-field{color:#dbe8d5;gap:8px;margin:22px 0 12px;display:grid}.lobby-field input{color:#f0f5e8;width:100%;font:inherit;background:#153226;border:1px solid #80a58b70;border-radius:8px;padding:13px;scroll-margin-block:16px;font-size:16px}.lobby-field input:focus{outline-offset:2px;outline:2px solid #b9d49e}.lobby-wide{width:100%}.lobby-divider{text-align:center;color:#9ab6a2;border-top:1px solid #8bab9035;margin-top:25px;padding-top:22px;font-size:12px}.room-code{border-block:1px solid #8bab9035;padding:14px 0}.room-code strong{letter-spacing:3px;color:#e1efcb;margin-left:8px;font-size:26px}.lobby-seats{gap:10px;margin:22px 0;padding:0;list-style:none;display:grid}.lobby-seats li{color:#93ae9a;border:1px dashed #6c907754;border-radius:9px;align-items:center;gap:13px;min-height:76px;padding:12px;display:flex}.lobby-seats .occupied{color:#e1ebdb;background:#244835;border-style:solid}.seat-number{color:#254632;background:#cee1bb;border-radius:5px;flex-shrink:0;place-items:center;width:34px;height:38px;font-weight:700;display:grid}.lobby-seats li>div{gap:5px;min-width:0;display:grid}.lobby-seats strong{overflow-wrap:anywhere}.lobby-seats small{color:#9cbaa5;font-size:10px}.lobby-seats .seat-state{text-align:right;flex-shrink:0;margin-left:auto;font-size:11px}.seat-state .ready{color:#cceaa8}.lobby-controls{flex-wrap:wrap;justify-content:flex-end}.lobby-note{margin-top:15px;font-size:11px}.lobby-feedback{color:#efd4b3;min-height:22px;margin-top:14px;font-size:13px}.lobby-started{margin-top:24px}.lobby-started h2{color:#e1efcb}.lobby-setup{gap:18px;display:grid}.mode-choice{text-align:center;gap:17px;max-width:480px;display:grid}.mode-choice .brand-icon{margin:0 auto}.mode-choice h1{font-size:36px}.mode-choice p{color:#b9cdbb;margin-bottom:12px}@media (width<=600px){.lobby-card{padding:22px 16px}.room-code,.header-actions{flex-wrap:wrap}}@media (width<=700px){html:has(.lobby-page){width:100%;height:100%;overflow:hidden}body:has(.lobby-page){width:100%;height:100%;overflow:hidden}body:has(.lobby-page) #root{width:100%;height:100%;overflow:hidden}.lobby-page{width:100%;height:100dvh;min-height:0;padding:calc(8px + env(safe-area-inset-top)) calc(8px + env(safe-area-inset-right)) calc(8px + env(safe-area-inset-bottom)) calc(8px + env(safe-area-inset-left));overflow:hidden}.lobby-page:has(.lobby-nickname-form){padding-top:max(calc(56px + env(safe-area-inset-top)), 12dvh);place-items:start center}.lobby-card{border-radius:14px;max-height:100%;padding:14px;overflow:hidden}.lobby-page:has(.lobby-nickname-form) .lobby-card{padding:18px}.lobby-heading{min-height:42px;margin-bottom:8px}.lobby-heading h1{margin-top:2px;font-size:22px}.lobby-intro{line-height:1.45}.lobby-nickname-form{gap:10px}.lobby-form-actions:has(>:nth-child(2)){grid-template-columns:repeat(2,minmax(0,1fr))}.lobby-form-actions .table-action{min-height:44px}.lobby-field{gap:5px;margin:10px 0 8px}.lobby-field input{padding:10px 12px}.nickname-profile{margin:9px 0;padding-bottom:9px}.nickname-profile strong{font-size:17px}.lobby-divider{margin-top:10px;padding-top:9px}.room-code{padding:7px 0}.room-code strong{font-size:21px}.lobby-seats{gap:4px;margin:8px 0}.lobby-seats li{gap:8px;min-height:49px;padding:6px 8px}.seat-number{width:29px;height:33px}.lobby-controls{gap:6px}.lobby-controls .table-action{min-width:78px;padding-inline:10px}.lobby-note{display:none}.lobby-feedback{min-height:16px;margin-top:4px;font-size:11px}.lobby-feedback:not(:empty){background:#102c235c;border-radius:7px;padding:6px 8px;line-height:1.35}.lobby-reconnect{min-height:44px;margin-top:6px}.session-resume-banner{margin-bottom:8px;padding:9px}.lobby-page:has(.lobby-field input:focus){place-items:start center;overflow-y:auto}.lobby-page:has(.lobby-field input:focus) .lobby-card{max-height:none;overflow:visible}}.online-session-dialog{color:#edf6e8;background:#214c3a;border:1px solid #719a7d;border-radius:14px;width:min(480px,100vw - 40px);padding:26px}.online-session-dialog::backdrop{background:#081d16bb}.online-session-dialog h2{margin-bottom:14px;font-size:20px}.online-session-dialog p,.session-resume-banner p{color:#c3d9c4;font-size:13px;line-height:1.7}.online-session-dialog .lobby-controls{margin:18px 0}.session-resume-banner{border:1px solid #719a7d;border-radius:8px;margin-bottom:18px;padding:14px}.nickname-profile{border-bottom:1px solid #bdd7c433;justify-content:space-between;align-items:center;gap:16px;margin:20px 0;padding-bottom:18px;display:flex}.nickname-profile>div{gap:6px;min-width:0;display:grid}.nickname-profile small{color:#b7cfbf}.nickname-profile strong{overflow-wrap:anywhere;font-size:20px}.public-lobby-page{place-items:start center;overflow-y:auto}.public-lobby-card{max-height:none;overflow:visible}.directory-card{width:min(100%,1000px)}.public-lobby-page .lobby-heading{flex-wrap:wrap;align-items:flex-start}.public-lobby-page .lobby-controls{justify-content:flex-start}.public-lobby-page .table-action.opportunity-action:not(:disabled){color:#24412b;background:#cee1bb;border-color:#cee1bb}.public-lobby-page .table-action.opportunity-action:disabled{color:#9ca6a0;box-shadow:none;background:#363c39;border-color:#59625d}.public-lobby-page .lobby-heading .table-action,.lobby-name-button,.lobby-directory-heading .table-action{background:0 0;border-color:#0000}.lobby-directory-actions,.lobby-directory-heading,.lobby-management{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.lobby-directory-actions{margin:24px 0 30px}.lobby-directory-heading{margin-bottom:12px}.lobby-directory-heading h2{font-size:20px}.lobby-name-button{overflow-wrap:anywhere;text-align:left}.public-room-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.public-room-card{color:#edf6e8;text-align:left;font:inherit;cursor:pointer;background:#244835;border:1px solid #719a7d80;border-radius:12px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px 12px;min-width:0;padding:18px;display:grid}.public-room-card:hover:not(:disabled),.public-room-card:active:not(:disabled){background:#31583f;border-color:#cee1bb}.public-room-card:focus-visible{outline-offset:3px;outline:2px solid #cee1bb}.public-room-card:disabled{cursor:not-allowed;opacity:.5}.public-room-card[aria-busy=true]{opacity:1;cursor:wait}.public-room-name{overflow-wrap:anywhere;grid-column:1/-1;font-weight:500}.public-room-count{white-space:nowrap;color:#b9cdbb;font-variant-numeric:tabular-nums;font-size:13px}.public-room-count strong{color:#edf6e8;font-size:21px;font-weight:500}.public-room-arrow{color:#b9cdbb;justify-self:end;font-size:24px}.lobby-directory-message{color:#c3d9c4;margin:28px 0}.lobby-load-more{margin:22px auto 0;display:block}.lobby-visibility{border:0;flex-wrap:wrap;gap:12px;padding:0;display:flex}.lobby-visibility legend{margin-bottom:14px}.lobby-visibility label{cursor:pointer;border:1px solid #719a7d;border-radius:8px;align-items:center;gap:8px;min-height:48px;padding:10px 14px;display:flex}.lobby-visibility label:has(:checked){background:#31583f}.lobby-entry-form{gap:18px;display:grid}.lobby-start-hint{color:#b9cdbb;margin:12px 0;font-size:13px;line-height:1.6}.lobby-management{border-top:1px solid #719a7d60;margin-top:24px;padding-top:16px}.lobby-danger{color:#f2b9a9}.lobby-player-name{flex:1}.public-lobby-page .lobby-seats small{font-size:12px}.public-lobby-page .lobby-seats li{flex-wrap:wrap;min-height:68px}.lobby-code-button{min-height:44px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;align-items:center;gap:8px;display:flex}.lobby-code-button strong{margin-left:0}@media (width<=700px){:is(.public-lobby-page,.public-lobby-page:has(.lobby-nickname-form)){padding-top:calc(8px + env(safe-area-inset-top));place-items:start center;overflow-y:auto}.public-lobby-card{max-height:none;padding:18px 14px;overflow:visible}.public-lobby-page:has(.lobby-nickname-form) .lobby-card{max-height:none;padding:18px 14px;overflow:visible}.public-room-grid{grid-template-columns:1fr}.public-room-card{grid-template-columns:minmax(0,1fr) auto auto;gap:10px;min-height:70px;padding:14px}.public-room-name{grid-column:auto}.public-lobby-page .table-action{min-height:44px}.lobby-directory-actions{margin:18px 0 24px}.public-lobby-page .lobby-feedback{font-size:13px}}.lobby-deck-summary{background:#17372b;border:1px solid #547461;border-radius:10px;margin:14px 0;padding:14px}.lobby-deck-summary>div:first-child{display:inline-block}.lobby-deck-summary>.lobby-controls{float:right}.lobby-deck-details{clear:both;padding-top:14px}.lobby-deck-details>p{color:#cbdccf;white-space:pre-wrap;margin-bottom:12px}.lobby-deck-details section{margin-top:10px}.lobby-deck-details h3{color:#bdd1c1;font-size:13px}.lobby-deck-tiles{flex-wrap:wrap;gap:5px;margin-top:5px;display:flex}.lobby-deck-tiles span{color:#23452f;background:#e9f1dd;border-radius:4px;place-items:center;width:30px;height:34px;display:grid}@media (width<=600px){.lobby-deck-summary>.lobby-controls{float:none;justify-content:flex-start;margin-top:10px}}.dev-environment-badge{z-index:1000;color:#c9ddd4;letter-spacing:.04em;background:#132c26e6;border:1px solid #ffffff26;border-radius:5px;align-items:center;gap:6px;padding:4px 7px;font:10px/1.3 system-ui,sans-serif;display:flex;position:fixed;top:5px;left:5px}.dev-environment-badge button{color:#edf6e8;min-height:24px;font:inherit;background:#285f47;border:1px solid #ffffff35;border-radius:4px;padding:2px 7px}
