:root{color:#17372f;font-synthesis:none;--paper:#f8f7f2;--table:#123d32;--green:#15513f;--gold:#edbe43;--border:#dedfd8;background:#f8f7f2;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,Noto Sans SC,sans-serif;line-height:1.5}*{box-sizing:border-box}body{min-width:280px;margin:0}button,input,select{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:default;opacity:.5}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline-offset:3px;outline:3px solid #b78316}h1,h2,p{margin:0}h1{letter-spacing:-.025em;font-size:28px;font-weight:750;line-height:1.25}h2{font-size:22px;font-weight:700}.app-shell{min-height:100dvh}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.button{background:0 0;border:1px solid #0000;border-radius:8px;min-height:48px;padding:11px 16px;font-size:17px;font-weight:650;line-height:1.35}.button.primary{color:#fff;background:var(--green)}.button.outline{border-color:var(--green);color:var(--green)}.button.quiet{color:#555;border-color:#aaa}.button.small{padding:10px 13px;font-size:15px}.button.gold{color:#153d32;background:var(--gold)}.button.table-outline{color:#fff;border-color:#c4d8cd}.text-button{text-underline-offset:3px;min-height:44px;color:inherit;background:0 0;border:0;padding:10px 5px;text-decoration:underline}.notice-bar,.error-bar,.reconnect-bar{justify-content:space-between;align-items:center;gap:12px;padding:10px 18px;font-size:15px;display:flex}.notice-bar{background:#e5eee6}.error-bar{color:#89391e;background:#fcece6}.reconnect-bar{color:#674912;background:#fff0c9}.notice-bar .text-button,.reconnect-bar .text-button{flex:none}.connection-status{white-space:nowrap;align-items:center;gap:7px;font-size:14px;display:inline-flex}.connection-status i{background:#ac994f;border-radius:50%;width:9px;height:9px}.connection-status.online i{background:#39c653}.connection-status.offline i,.connection-status.replaced i{background:#c6724f}.login-page{min-height:100dvh;padding:44px 26px;padding-top:max(44px, env(safe-area-inset-top));padding-bottom:max(44px, env(safe-area-inset-bottom));align-items:center;display:grid}.login-content{text-align:center;width:100%;max-width:420px;margin:0 auto}.login-content h1{color:#123d32;margin:0 0 46px;font-size:40px}.login-content form{text-align:left;gap:8px;display:grid}.login-content input:not([type=checkbox]){color:#17372f;background:#fff;border:1px solid #c9ccca;border-radius:8px;width:100%;min-height:58px;padding:14px 16px;font-size:18px}.show-invite{color:#636963;align-items:center;gap:9px;min-height:48px;font-size:14px;display:flex}.show-invite input{width:18px;height:18px;accent-color:var(--green)}.login-content .primary{width:100%;min-height:58px;font-size:20px}.login-caption{color:#626962;margin-top:24px}.login-note{color:#626962;margin-top:9px;font-size:14px;line-height:1.75}.inline-error{color:#89391e;background:#fcece6;border-radius:8px;margin-top:20px;padding:12px}.inline-error .text-button{margin:5px auto 0;display:block}.lobby-page{max-width:760px;padding:30px 20px 24px;padding-top:max(30px, env(safe-area-inset-top));padding-bottom:max(24px, env(safe-area-inset-bottom));margin:auto}.lobby-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;margin-bottom:28px;display:flex}.member-header{align-items:center;gap:18px;font-size:16px;display:flex}.lobby-table{border:1px solid var(--border);border-radius:10px;padding:18px}.section-heading{justify-content:space-between;align-items:center;gap:10px;margin-bottom:18px;display:flex}.section-heading>span{color:#657067;font-size:14px}.seat-list{gap:10px;display:grid}.seat-row{border:1px solid var(--border);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;min-height:74px;padding:10px 13px;display:flex}.seat-name{flex-direction:column;gap:2px;font-size:16px;display:flex}.seat-name>span{color:#777d76;font-size:12px}.seat-state{color:#70776e;flex-wrap:wrap;justify-content:end;align-items:center;gap:8px;font-size:15px;display:flex}.seat-state .ready{color:#137340;font-weight:650}.muted{color:#70776e;font-size:14px}.bot-choice{color:#626962;justify-content:space-between;align-items:center;gap:12px;margin:14px 0 0;font-size:14px;display:flex}.bot-choice select{border:1px solid var(--border);color:#17372f;background:0 0;border-radius:6px;min-height:44px;padding:5px 9px}.lobby-actions{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.lobby-actions .button{flex:1;padding-left:10px;padding-right:10px;font-size:16px}.lobby-status{color:#626962;margin-top:14px;font-size:14px}.waiting-note{color:#777a73;text-align:center;margin:16px 0 26px;font-size:14px}.family-members h2{margin-bottom:7px;font-size:18px}.family-members ul{margin:0;padding:0;list-style:none}.family-members li{border-bottom:1px solid #e8e8e0;justify-content:space-between;gap:12px;padding:10px 0;font-size:15px;display:flex}.family-members li>span:last-child{color:#6a7168}.rules-details{color:#657067;margin-top:20px;font-size:14px;line-height:1.85}.rules-details summary{cursor:pointer;color:#17372f;min-height:44px}.rules-details p{margin-bottom:12px}.lobby-footer{text-align:right;color:#657067;margin-top:18px;font-size:14px}.table-shell{background:var(--table)}.game-table{color:#f7fbf7;background:var(--table);min-height:100dvh;padding:14px 16px 18px;padding-top:max(14px, env(safe-area-inset-top));padding-bottom:max(18px, env(safe-area-inset-bottom));grid-template-rows:auto auto minmax(100px,1fr) auto auto auto;gap:15px;max-width:1200px;margin:auto;display:grid}.table-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.table-header h1{flex:none;font-size:20px}.table-link{color:inherit;background:0 0;border:0;justify-content:center;align-items:center;gap:5px;min-height:44px;padding:8px 0;font-size:14px;display:inline-flex}.table-link svg{stroke:currentColor;fill:none;stroke-width:1.8px;width:17px;height:17px}.table-header-right{align-items:center;gap:12px;display:flex}.table-header .connection-status{font-size:12px}.table-opponents{justify-content:space-between;gap:16px;display:flex}.opponent{flex-direction:column;gap:3px;font-size:16px;display:flex}.opponent:last-child{text-align:right}.opponent>span{color:#d1e2d7;font-size:13px}.table-center{flex-direction:column;justify-content:center;align-items:center;gap:14px;min-height:130px;padding:8px 0;display:flex}.bottom-cards{color:#d0dfd4;justify-content:center;align-items:center;gap:10px;font-size:12px;display:flex}.bottom-cards>div{gap:3px;display:flex}.bottom-cards .playing-card{border-radius:3px;gap:0;width:28px;height:38px;min-height:38px;padding:2px 4px}.bottom-cards .card-rank,.bottom-cards .card-suit{font-size:14px}.last-play p{text-align:center;color:#e1ebe3;margin:0 0 9px;font-size:14px}.played-cards{flex-wrap:wrap;justify-content:center;gap:5px;max-width:480px;display:flex}.playing-card{color:#17221f;text-align:left;background:#fff;border:1px solid #e6e8e7;border-radius:6px;flex-direction:column;justify-content:space-between;align-items:flex-start;width:100%;min-width:0;min-height:72px;padding:5px 7px;line-height:1;display:flex;position:relative;box-shadow:0 2px 2px #06282035}.playing-card.red{color:#b21e26}button.playing-card:disabled{opacity:1;cursor:default}.playing-card.selected{outline:3px solid var(--gold);outline-offset:-1px;transform:translateY(-3px)}.card-rank{letter-spacing:-.045em;font-size:23px;font-weight:650}.card-suit{align-self:center;font-size:26px}.card-check{color:#a07510;font-size:10px;position:absolute;top:4px;right:4px}.playing-card.joker .card-rank{letter-spacing:0;font-size:15px;line-height:1.3}.playing-card.joker:after{content:"王";align-self:center;padding-bottom:3px;font-size:22px}.playing-card.compact{width:46px;height:62px;min-height:62px;padding:4px 5px}.compact .card-rank{font-size:20px}.compact .card-suit{font-size:23px}.turn-status{text-align:center;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;min-height:46px;display:flex}.turn-status p{font-size:18px;font-weight:650}.countdown{color:var(--gold);font-size:25px;line-height:1.2}.countdown small{margin-left:2px;font-size:16px}.countdown.urgent{border-bottom:2px solid var(--gold)}.control-note{color:#d7e4da;flex-basis:100%;font-size:13px;font-weight:400}.own-hand{width:100%}.own-label{color:#d7e4da;justify-content:space-between;padding-bottom:10px;font-size:13px;display:flex}.hand-cards{grid-template-columns:repeat(auto-fit,minmax(48px,1fr));gap:7px;display:grid}.game-controls{width:100%}.selection-feedback{text-align:center;color:#d7e4da;min-height:25px;margin-bottom:8px;font-size:13px}.action-buttons{grid-template-columns:1fr 1fr 1.25fr;gap:10px;display:grid}.bid-controls{flex-wrap:wrap;justify-content:center;gap:9px;display:flex}.bid-controls .button{flex:1;min-width:65px}.clear-selection{overflow-wrap:anywhere;width:100%;padding:8px 0 0;font-size:12px;display:block}.interpretation{justify-content:center;align-items:center;gap:10px;margin-bottom:10px;font-size:14px;display:flex}.interpretation select{color:#153d32;background:#fff;border-radius:5px;max-width:80%;min-height:44px;padding:6px 9px}.disconnected .own-hand{opacity:.6}.settlement{grid-column:1/-1;align-self:start;width:min(100%,460px);margin:5px auto}.settlement h2{text-align:center;margin-bottom:18px}.settlement p{text-align:center;color:#d0dfd4;margin-top:15px;font-size:14px}.score-list{margin-bottom:24px}.score-list>div{border-bottom:1px solid #48705e;justify-content:space-between;align-items:center;gap:16px;padding:14px 0;display:flex}.score-list strong{font-size:24px}.score-list .positive{color:var(--gold)}.settlement .button{width:100%}.modal-backdrop{z-index:20;background:#061d1794;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.dialog{color:#17372f;background:var(--paper);border-radius:12px;width:100%;max-width:420px;padding:24px;box-shadow:0 12px 45px #071a1740}.dialog h2{margin-bottom:14px;font-size:23px}.dialog p{color:#56665b;line-height:1.8}.dialog-actions{gap:10px;margin-top:22px;display:flex}.dialog-actions .button{flex:1}@media (width>=600px){.hand-cards{grid-template-columns:repeat(auto-fit,minmax(52px,1fr))}.playing-card{min-height:85px}.card-rank{font-size:28px}.card-suit{font-size:32px}.game-table{padding:20px 28px}.table-header h1{font-size:24px}.table-header-right{gap:20px}.table-header .connection-status{font-size:14px}}@media (orientation:landscape) and (width>=640px){.game-table{min-height:100dvh;padding:max(6px, env(safe-area-inset-top)) 28px max(6px, env(safe-area-inset-bottom));grid-template-rows:auto minmax(60px,1fr) auto auto auto;gap:5px;position:relative}.table-opponents{pointer-events:none;position:absolute;top:60px;left:28px;right:28px}.opponent{overflow-wrap:anywhere;gap:0;max-width:110px;font-size:15px}.table-center{grid-row:2;gap:4px;width:calc(100% - 220px);min-height:60px;margin:0 auto;padding:0}.bottom-cards{flex-direction:column;gap:2px;position:absolute;top:105px;left:28px}.bottom-cards .playing-card.compact{width:28px;height:38px;min-height:38px;padding:2px 4px}.bottom-cards .card-rank,.bottom-cards .card-suit{font-size:14px}.last-play p{margin-bottom:4px;font-size:12px}.played-cards{gap:4px}.last-play .compact{width:35px;height:44px;min-height:44px;padding:3px 4px}.last-play .card-rank{font-size:17px}.last-play .card-suit{font-size:19px}.turn-status{grid-row:3;gap:8px;min-height:30px}.turn-status p{font-size:16px}.own-hand{grid-row:5}.game-controls{grid-row:4;width:min(100%,660px);margin:0 auto}.hand-cards{grid-template-columns:repeat(auto-fit,minmax(48px,1fr));gap:4px}.own-hand .playing-card{height:48px;min-height:48px;padding:3px 5px}.own-hand .card-rank,.own-hand .card-suit{font-size:20px}.own-hand .playing-card.joker .card-rank{font-size:12px}.own-hand .playing-card.joker:after{padding:0;font-size:18px}.own-label{padding-bottom:4px;font-size:12px}.selection-feedback{min-height:19px;margin-bottom:3px;font-size:12px}.clear-selection{min-height:30px;padding-top:4px}.table-empty{font-size:14px}.settlement{grid-row:3/span 3}}@media (width<=360px){.lobby-page{padding-left:14px;padding-right:14px}.lobby-table{padding:13px}.game-table{padding-left:10px;padding-right:10px}.table-header-right{gap:7px}.table-header .connection-status{font-size:11px}.table-header h1{font-size:18px}.hand-cards{gap:6px}.table-header .table-link{font-size:13px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.saved-rules{color:#52655a;margin-top:14px;font-size:13px;line-height:1.7}.saved-rules p:last-child{display:none}.rule-editor fieldset{border:1px solid #d5ded4;border-radius:8px;margin:12px 0;padding:12px}.rule-editor legend{color:#254537;padding:0 6px;font-weight:650}.rule-editor label{align-items:center;gap:9px;min-height:44px;display:flex}.rule-editor input[type=checkbox]{accent-color:#214f3d;width:22px;height:22px}.rule-editor select{color:#254537;background:#fff;border:1px solid #bccbbb;border-radius:6px;min-height:44px;padding:6px}.rule-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.rule-grid label{justify-content:space-between}.rule-editor fieldset:disabled{opacity:.75}.mahjong-table{background:var(--table);color:#f7fbf7;max-width:1200px;min-height:100dvh;padding:max(12px,env(safe-area-inset-top)) 14px max(14px,env(safe-area-inset-bottom));flex-direction:column;gap:12px;margin:auto;display:flex}.mahjong-table .table-header h1{font-size:19px}.mahjong-table .table-header-right{gap:8px}.mj-opponents{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.mj-player{overflow-wrap:anywhere;border:1px solid #476b59;border-radius:8px;flex-direction:column;gap:4px;padding:8px;font-size:12px;display:flex}.mj-player strong{font-size:14px}.mj-player.has-won{border-color:var(--gold)}.mj-player details summary{cursor:pointer;min-height:32px}.mahjong-tile{color:#a13029;background:#fffdf4;border:1px solid #d4d7ca;border-bottom:4px solid #a8bfab;border-radius:5px;flex-direction:column;justify-content:center;align-items:center;min-width:44px;min-height:60px;padding:3px;display:inline-flex;position:relative;box-shadow:0 2px 3px #08251c40}.mahjong-tile strong{font-size:23px;line-height:1}.mahjong-tile>span{font-size:17px;font-weight:650;line-height:1.2}.mahjong-tile.suit-1{color:#205087}.mahjong-tile.suit-2{color:#215c37}.mahjong-tile.selected{border:3px solid var(--gold);transform:translateY(-3px)}.mahjong-tile small{color:#433b1c;font-size:11px;position:absolute;top:0;right:2px}.mahjong-tile:disabled{opacity:1;cursor:default}.mahjong-tile:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.mahjong-tile.compact{border-bottom-width:2px;flex:none;width:24px;min-width:24px;min-height:34px;padding:2px 1px}.mahjong-tile.compact strong{font-size:15px}.mahjong-tile.compact>span{font-size:12px}.mj-melds{flex-wrap:wrap;gap:5px;display:flex}.mj-melds>div{flex-wrap:wrap;gap:1px;max-width:100%;display:flex}.hidden-kong{background:#264e3d;border-radius:4px;padding:6px;font-size:11px}.mj-small-tiles{flex-wrap:wrap;gap:3px;display:flex}.mj-public{background:#0a2c2380;border-radius:8px;min-height:84px;padding:10px}.mj-public-heading{color:#d4e0d3;justify-content:space-between;gap:8px;margin-bottom:9px;font-size:12px;display:flex}.mj-discard-latest{flex-wrap:wrap;gap:3px;display:flex}.mj-public summary,.mj-rules summary{cursor:pointer;min-height:36px;padding-top:7px;font-size:13px}.mj-public .mj-small-tiles{margin-top:7px}.mj-turn{justify-content:center;align-items:center;gap:9px;min-height:40px;display:flex}.mj-turn p{font-size:17px}.mj-control-note{text-align:center;color:#d5e2d5;font-size:13px}.mj-controls{flex-direction:column;gap:7px;display:flex}.mj-confirm{width:100%}.mj-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.mj-actions .button{flex:1;min-width:65px}.mj-hand{grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;padding-top:3px;display:grid}.mj-own{margin-top:auto}.mj-own .own-label{gap:8px}.own-melds{margin-top:8px}.mj-rules{color:#d2ded3;font-size:12px;line-height:1.7}.mj-rules p{margin:6px 0}.mj-settlement{width:min(100%,600px);margin:auto;font-size:14px;line-height:1.7}.mj-settlement h2{text-align:center}.mj-settlement .button{width:100%}.mj-settlement details{border:1px solid #476b59;border-radius:8px;margin-bottom:14px;padding:12px}.mj-settlement summary{cursor:pointer;min-height:36px}.mj-settlement details p{margin:8px 0}.ledger{padding-left:17px}.ledger li{margin:5px 0}@media (orientation:landscape) and (width>=640px){.mahjong-table{min-height:100dvh;padding:max(6px,env(safe-area-inset-top)) 20px max(6px,env(safe-area-inset-bottom));gap:4px}.mj-player{padding:3px 8px;display:block}.mj-player strong{display:block}.mj-player>span{margin-right:8px;display:inline-block}.mj-player .mj-melds:empty{display:none}.mj-public{min-height:58px;padding:5px 8px}.mj-public-heading{margin-bottom:4px}.mj-turn{min-height:28px}.mj-turn p{font-size:16px}.mj-controls{flex-flow:wrap;justify-content:center;align-items:center;gap:7px}.mj-controls .selection-feedback{margin:0}.mj-confirm{width:auto;min-width:165px}.mj-actions .button{min-width:80px}.mj-hand{grid-template-columns:repeat(auto-fit,minmax(48px,1fr));gap:5px}.mahjong-tile{min-height:48px}.mahjong-tile strong{font-size:21px}.mahjong-tile>span{font-size:15px}.mj-own .own-label{padding-bottom:3px}.mj-rules summary{min-height:28px;padding-top:2px}.mj-melds:empty{display:none}.own-melds{margin-top:3px}}@media (width<=360px){.mj-hand{grid-template-columns:repeat(6,minmax(0,1fr))}.mahjong-table .table-header h1{font-size:16px}.mahjong-table .table-header-right{gap:4px}.mahjong-table .table-link{font-size:12px}.mahjong-table .connection-status{font-size:10px}}
