.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{font-weight:600}.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}.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;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 45px;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;margin-bottom:12px;padding:10px 12px 0}.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}@media (width<=700px){.sentence-area{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:#b5cfbb;min-height:16px;margin:0 0 5px;font-size:11px;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}.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:28px 380px;width:116px;top:53%}.online-game .opponent.west{grid-template-columns:44px 56px;grid-template-areas:"name name""hand meld"}.online-game .opponent.east{grid-template-columns:56px 44px;grid-template-areas:"name name""meld hand"}.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}: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:360px;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}.header-actions{align-items:center;gap:15px;display:flex}.local-label{color:#b8cfbd;font-size:11px}.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}@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}}.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-info strong{text-overflow:ellipsis;white-space:nowrap;max-width:120px;overflow:hidden}.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{background:radial-gradient(at top,#315d48,#14251f 75%);place-items:center;min-height:100svh;padding:32px 18px;display:grid}.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-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}.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}}.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}.dev-environment-badge{z-index:1000;color:#c9ddd4;letter-spacing:.04em;pointer-events:none;background:#132c26e6;border:1px solid #ffffff26;border-radius:5px;padding:4px 7px;font:10px/1.3 system-ui,sans-serif;position:fixed;top:5px;left:5px}
