*{box-sizing:border-box;margin:0;padding:0;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}:root{--bg: #06110f;--bg-deep: #020605;--felt: #063b2d;--felt-dark: #01251d;--felt-light: #0b6048;--rail: #2b1d12;--rail-light: #8f6a36;--gold: #f0b35a;--gold-deep: #b36a1e;--green: #56d98b;--red: #d8524a;--blue-black: #111a20;--panel: rgba(6, 14, 13, .82);--panel-soft: rgba(255, 255, 255, .08);--panel-border: rgba(236, 201, 135, .26);--card-bg: #fffaf0;--card-red: #a82f2b;--card-black: #111820;--text: #f8ead1;--text-muted: rgba(248, 234, 209, .68);--text-faint: rgba(248, 234, 209, .42);--shadow: 0 22px 60px rgba(0, 0, 0, .42);--radius: 8px;--gold-light: #ffe0a3;--green-light: #9ff0b9;--red-light: #ffaaa5;--green-glass: rgba(86, 217, 139, .12);--gold-glass: rgba(240, 179, 90, .12);--red-glass: rgba(216, 82, 74, .14);--panel-gradient: linear-gradient( 180deg, rgba(255, 255, 255, .09), rgba(255, 255, 255, .035) );--transition-interactive: .12s ease;--card-border: 1px solid rgba(0, 0, 0, .2);color-scheme:dark;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px)}html,body{height:100vh}@supports (height: 100dvh){html,body{height:100dvh}}html{touch-action:manipulation}body{background:linear-gradient(180deg,rgba(255,255,255,.035),transparent 24%),linear-gradient(180deg,#071511,#020504);color:var(--text);overflow:hidden}#app{width:100%;height:100%;overflow:hidden}.page-transition-blocker{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;cursor:wait}.app-layout{display:grid;grid-template-rows:1fr auto;height:100%}.full-size{width:100%;height:100%}.clickable{cursor:pointer}.legal-tip{display:flex;align-items:center;justify-content:center;min-height:40px;flex-shrink:0;padding-left:var(--safe-left);padding-right:var(--safe-right);color:var(--text-faint);font-size:10px;line-height:1;cursor:pointer;transition:color .15s ease;text-align:center}.legal-tip:hover{color:var(--text-muted)}button,input{font:inherit}.btn{min-height:44px;border:1px solid transparent;border-radius:var(--radius);padding:12px 22px;color:var(--text);font-size:16px;font-weight:750;letter-spacing:0;cursor:pointer;transition:transform .12s ease,border-color .12s ease,background .12s ease,box-shadow .12s ease,opacity .12s ease}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn:disabled{cursor:not-allowed;opacity:1;transform:none}.btn-primary{background:linear-gradient(180deg,#f4bf6b,#b66c22);border-color:#ffe29c85;color:#211508;box-shadow:0 10px 24px #b4691847,inset 0 1px #ffffff57}.btn-primary:hover{background:linear-gradient(180deg,#ffd281,#c97827)}#btn-continue{width:100%}.btn-secondary{background:#ffffff17;border-color:#ffffff38;color:var(--text)}.btn-back,.btn-pass{background:#10181beb;border-color:#ffffff2e;color:var(--text)}.btn-play{min-width:112px;background:linear-gradient(180deg,#f4bf6b,#a85d18);border-color:#ffe5ab8c;color:#201407;box-shadow:0 12px 26px #c3711861}.btn-switch{background:#56d98b26;border:1px solid rgba(86,217,139,.35);color:#86d98b;font-weight:700}.btn-switch:hover{background:#56d98b40;border-color:#56d98b8c;box-shadow:0 0 18px #56d98b2e}.btn-switch:active{background:#56d98b59;transform:scale(.97);box-shadow:0 0 8px var(--green-glass)}.btn-switch:focus-visible{outline:2px solid rgba(86,217,139,.6);outline-offset:2px}.btn-play,.btn-pass{padding:0}.btn-play:disabled{background:linear-gradient(180deg,#7d6a47,#4d412f);border-color:#ffe5ab47;color:#201407;box-shadow:inset 0 1px #ffffff1f}.room-joining,.room-error,.room-join{min-height:100%;display:flex;align-items:center;justify-content:center;padding:28px}.room-join{color:var(--text);max-width:560px;width:100%;margin:0 auto}.room-panel{width:100%;border:1px solid var(--panel-border);border-radius:18px;background:var(--panel-gradient),#05100edb;box-shadow:var(--shadow),inset 0 1px #ffffff14;padding:32px;text-align:center}.room-panel h2{margin-bottom:18px}.room-brand-mark{margin-bottom:28px;text-align:center}.room-title{color:var(--gold-light);font-size:clamp(48px,8vw,76px);font-weight:900;line-height:1;text-shadow:0 6px 24px rgba(208,136,43,.22)}.room-subtitle,.room-hint{color:var(--text-muted)}.reconnect-hint{color:var(--text-muted);font-size:13px;padding:20px 0}.room-subtitle{margin-top:8px;font-size:18px;display:flex;align-items:center;justify-content:center;flex-wrap:wrap}.room-version{margin-top:4px;color:var(--text-faint);font-size:10px;text-align:center}.room-card-preview{display:flex;justify-content:center}.room-card-preview span{width:58px;height:78px;display:grid;place-items:center;margin-left:-10px;border:1px solid rgba(20,20,20,.28);border-radius:7px;background:var(--card-bg);color:var(--card-black);font-size:24px;font-weight:850;box-shadow:0 12px 22px #0000004d}.room-card-preview span:first-child{margin-left:0;transform:rotate(-8deg)}.room-card-preview span:nth-child(2){color:var(--card-red);transform:rotate(8deg)}.room-actions{display:flex;gap:12px;justify-content:center;margin-top:18px}.room-input{width:100%;height:58px;border:1px solid rgba(255,255,255,.22);border-radius:10px;background:#00000047;color:var(--text);font-size:24px;font-weight:800;text-align:center;letter-spacing:7px;outline:none}.room-input:focus{border-color:#f0b35ad1;box-shadow:0 0 0 4px #f0b35a24}.waiting-room-id{justify-self:center;display:flex;align-items:center}.waiting-room-id-num{color:var(--gold-light);font-size:clamp(22px,3vw,32px);font-weight:900;letter-spacing:8px;font-variant-numeric:tabular-nums}.waiting-surface,.home-surface{display:flex;align-items:center;justify-content:center;overflow:hidden}.waiting-content{display:flex;flex-direction:column;align-items:center;gap:10px;width:min(92vw,460px);max-height:100%;overflow:hidden auto}.waiting-room-header{display:flex;flex-direction:column;align-items:center;gap:10px;min-height:215px;justify-content:center}.waiting-content .qr-container{flex:0 0 auto}.waiting-content .room-hint,.roominfo-panel .room-hint{margin:0;text-align:center;font-size:14px}.waiting-content .player-list{width:100%;max-width:380px;flex:0 0 auto}.waiting-content .btn{flex:0 0 auto}.waiting-actions{display:flex;gap:12px;align-items:center}.waiting-actions .btn{white-space:nowrap}.qr-container{display:grid;place-items:center;border-radius:14px;overflow:hidden;background:#fff;box-shadow:0 18px 34px #00000059}.player-list{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:24px 0}.player-slot{min-height:58px;display:flex;align-items:center;gap:6px;padding:10px 12px;border:1px solid rgba(255,255,255,.12);border-radius:12px;background:#ffffff0f;color:var(--text);font-size:14px;font-weight:750}.player-slot.filled{border-color:#56d98b5c;background:var(--green-glass)}.player-slot.empty{color:var(--text-faint)}.player-slot-avatar{width:34px;height:34px;display:grid;place-items:center;flex:0 0 auto;border-radius:50%;background:#00000052;color:var(--gold-light);font-size:18px}.player-slot-team{margin-left:auto;color:var(--green);font-size:12px}.player-slot-left{display:flex;align-items:center;gap:6px;flex:0 0 auto}.player-slot-me{background:var(--gold-light);color:#1a472a;padding:1px 6px;border-radius:4px;font-size:10px;font-weight:800;flex:0 0 auto}.player-slot.is-me{border-color:var(--gold-light);border-width:2px;background:#56d98b2e}.room-error-card{text-align:center}.room-error-text{margin-bottom:8px;color:var(--gold-light);font-size:20px;font-weight:850}.room-error-hint{margin-bottom:24px;color:var(--text-muted);font-size:14px}.home-table{grid-template-rows:auto minmax(0,1fr) auto}.home-table .table-header{grid-template-columns:auto 1fr auto}.home-content{display:flex;flex-direction:column;align-items:center;gap:18px;width:min(92vw,460px)}.home-buttons{display:flex;flex-direction:column;gap:12px;width:100%}.home-buttons .btn{width:100%}.home-button-row{display:flex;gap:12px;width:100%}.home-button-row .btn{flex:1}.nearby-rooms{width:100%;padding:14px 16px;border:1px solid rgba(236,201,135,.18);border-radius:12px;background:#ffffff0a}.nearby-rooms-title{margin-bottom:10px;color:var(--text-muted);font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:2px}.nearby-room-card{width:100%;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border:1px solid rgba(255,255,255,.1);border-radius:var(--radius);background:#ffffff08;color:var(--text);font-size:15px;font-weight:750;cursor:pointer;transition:border-color .12s ease,background .12s ease}.nearby-room-card+.nearby-room-card{margin-top:6px}.nearby-room-card:hover{border-color:#f0b35a99;background:#f0b35a14}.nearby-room-id{font-variant-numeric:tabular-nums;letter-spacing:3px}.nearby-room-count{color:var(--green);font-size:13px}.table{min-width:0;height:100%;min-height:0;overflow:visible;display:grid;grid-template-rows:auto minmax(0,1fr) auto;color:var(--text)}.table-header{min-height:calc(var(--safe-top) + 48px);display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;padding-top:calc(var(--safe-top) + 4px);padding-right:max(clamp(10px,2vw,22px),var(--safe-right));padding-bottom:4px;padding-left:max(clamp(10px,2vw,22px),var(--safe-left));border-bottom:1px solid rgba(236,201,135,.18);background:#020808db;box-shadow:0 12px 28px #00000047}.table-brand{display:flex;flex-direction:column;gap:2px;position:relative;top:1px}.brand-title{color:var(--gold-light);font-size:18px;font-weight:900;line-height:1}.brand-subtitle{color:var(--text-muted);font-size:10px}.btn-refresh{justify-self:end;min-width:64px;min-height:33px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:4px 8px;background:#ffffff12;border-color:#ffffff2e;color:var(--text);font-size:12px}.btn-locale{justify-self:end;min-width:64px;min-height:33px;display:inline-flex;align-items:center;justify-content:center;margin-right:8px;padding:4px 8px;background:#ffffff12;border:1px solid rgba(255,255,255,.18);color:var(--text);font-size:12px;font-family:inherit;cursor:pointer}.header-actions{display:flex;align-items:center;justify-self:end;gap:0;grid-column:3}.online-indicator{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;margin-right:8px;flex-shrink:0}.online-indicator svg{width:20px;height:20px}.online-indicator .globe{fill:none;stroke:var(--green);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.online-indicator .globe-meridian{fill:none;stroke:var(--green);stroke-width:1.5;stroke-linecap:round}.online-indicator .globe-lat{fill:none;stroke:var(--green);stroke-width:1;stroke-linecap:round;opacity:.65}.online-indicator.offline .globe,.online-indicator.offline .globe-meridian,.online-indicator.offline .globe-lat{stroke:var(--text-muted)}.online-indicator .slash{stroke:var(--red);stroke-width:2;stroke-linecap:round}.refresh-icon{color:var(--gold);font-size:16px;line-height:1}.score-strip{justify-self:center;display:flex;align-items:center;gap:8px}.team-score{position:relative;min-width:78px;min-height:33px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:4px 10px;border-radius:var(--radius);font-size:14px;font-weight:850;line-height:1}.team-score>span{position:relative;top:1px}.team-score strong{align-self:center;font-size:22px}.team-label{display:flex;align-items:baseline;gap:5px;line-height:1.2}.team-label-row{font-size:16px}.team-name-row{font-size:13px;font-weight:650;opacity:.78}.team-score.ally{border:1px solid rgba(86,217,139,.38);background:#56d98b1a;color:#86f2ad}.team-score.rival{border:1px solid rgba(216,82,74,.42);background:#d8524a1a;color:#ff9c96}.team-score.is-leading:after{content:"";position:absolute;left:50%;bottom:-9px;width:0;height:0;transform:translate(-50%);border-right:7px solid transparent;border-left:7px solid transparent;border-bottom:7px solid var(--gold);filter:drop-shadow(0 0 8px rgba(240,179,90,.62))}.score-versus{color:var(--gold);font-size:22px;font-style:italic;font-weight:950;text-shadow:0 4px 16px rgba(240,179,90,.35)}.table-surface{min-height:0;padding-top:clamp(10px,1.8vw,20px);padding-right:max(clamp(10px,1.8vw,20px),var(--safe-right));padding-bottom:clamp(10px,1.8vw,20px);padding-left:max(clamp(10px,1.8vw,20px),var(--safe-left));max-width:1000px;width:100%;margin:0 auto}.table-felt{position:relative;height:100%;min-height:0;overflow:visible;border:10px solid var(--rail);border-radius:42px;background:linear-gradient(180deg,#ffffff14,#0000002e),repeating-linear-gradient(45deg,rgba(255,255,255,.025) 0 1px,transparent 1px 6px),linear-gradient(45deg,var(--felt-light),var(--felt) 50%,var(--felt-dark));box-shadow:inset 0 0 0 2px #f0b35a47,inset 0 0 70px #00000075,0 24px 70px #0000006b;will-change:transform}.table-seats{position:relative;z-index:1;height:100%;min-height:0}.seat{position:absolute;z-index:2;min-width:94px;display:flex;align-items:center;justify-content:center}.seat.empty{display:none}.seat-info{--seat-offset-x: 0px;position:relative;display:flex;align-items:center;height:38px;padding:0 10px 0 24px;border:1px solid rgba(236,201,135,.24);border-radius:var(--radius);background:#030a0ac7;box-shadow:0 2px 6px #0000004d;transform:translate(var(--seat-offset-x));transition:border-color .2s ease,box-shadow .2s ease}.seat-info.is-turn{border-color:#f0b35ae0;box-shadow:0 0 0 2px #f0b35a29,0 0 34px #f0b35a57;animation:turn-seat-flash 1.5s ease-in-out infinite;will-change:background-color}.seat-avatar{position:absolute;left:0;top:50%;transform:translate(-50%,-50%);width:38px;height:38px;display:grid;place-items:center;border:2px solid rgba(240,179,90,.54);border-radius:50%;background:linear-gradient(180deg,#ffffff14,#0003),#1c2422;color:var(--text);box-shadow:inset 0 0 0 1px #00000080}.seat-info.is-turn .seat-avatar{border-color:#ffd17b;animation:pulse-glow 1.5s ease-in-out infinite;will-change:box-shadow}.seat-avatar-emoji{font-size:20px;line-height:1}.card-fly-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1}.card-fly-overlay .seat{pointer-events:none}.card-fly-overlay .card-fly-source{display:flex;justify-content:center;gap:0}.card-fly-overlay .board-card{opacity:0!important;width:34px;height:44px;font-size:15px;margin-left:-8px}.card-fly-overlay .board-card:first-child{margin-left:0}.card-fly-overlay .board-card-suit{font-size:13px}.offline-icon,.bot-icon{position:absolute;right:-4px;bottom:-4px;width:18px;height:18px;display:grid;place-items:center;border:2px solid var(--felt-dark);border-radius:50%;line-height:1;font-weight:900;text-align:center}.offline-icon{background:var(--red);color:#fff;font-size:11px}.bot-icon{background:#f59e0b;color:#000;font-size:10px}.seat-copy{display:flex;align-items:center;gap:7px;min-width:0}.seat-name{max-width:70px;overflow:hidden;color:var(--text);font-size:14px;font-weight:850;line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.seat-badge{display:inline-flex;align-items:center;margin-top:1px;padding:2px 6px;border:1px solid rgba(86,217,139,.34);border-radius:6px;background:var(--green-glass);color:var(--green-light);font-size:11px;font-weight:800;white-space:nowrap}.seat-badge.rival{border-color:#d8524a6b;background:#d8524a29;color:var(--red-light)}.seat.top-left{top:50%;left:30px;transform:translateY(-50%)}.seat.top-right{top:18px;left:50%;right:auto;transform:translate(-50%)}.seat.bottom-right{right:11px;top:50%;bottom:auto;transform:translateY(-50%)}.seat.bottom-left{left:50%;bottom:18px;transform:translate(-50%)}.card-count{width:28px;height:36px;display:grid;place-items:center;flex-shrink:0;margin-left:6px;border:1px solid rgba(236,201,135,.5);border-radius:4px;background:#141e1ce6;color:#ecb84c;font-size:16px;font-weight:900;box-shadow:0 2px 6px #0000004d}@keyframes pulse-glow{0%,to{box-shadow:0 0 0 2px #f0b35a2e,0 0 16px #f0b35a47}50%{box-shadow:0 0 0 3px #f0b35a47,0 0 30px #f0b35a85}}@keyframes turn-seat-flash{0%,to{background:#030a0ac7}50%{background:#804e16b8}}@keyframes card-pulse{0%,to{box-shadow:0 0 10px #f0b35a00,0 0 20px #f0b35a00}50%{box-shadow:0 0 20px #f0b35a73,0 0 40px #f0b35a59}}.is-latest .zone-cards{animation:card-pulse 1.5s ease-in-out .6s infinite;border-radius:5px;will-change:box-shadow}.board-card{position:relative;width:34px;height:44px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;padding:2px 4px;border:var(--card-border);border-radius:5px;background:var(--card-bg);color:var(--card-black);font-size:15px;font-weight:900;line-height:1;box-shadow:0 6px 10px #0000003d;will-change:transform}.board-card.is-level:after{content:"";position:absolute;left:10%;bottom:5%;width:6px;height:6px;border-radius:50%;background:var(--gold);box-shadow:0 0 10px #f0b35ab3}.board-card-suit{font-size:13px}.play-zones{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;padding:40px 0}.play-zone{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;contain:layout style;transition:opacity .5s ease,filter .5s ease}.play-zone.cross-zone{pointer-events:auto;cursor:pointer}.zone-bottom{bottom:15%;left:50%;transform:translate(-50%);width:50%;height:28%}.zone-top{top:15%;left:50%;transform:translate(-50%);width:50%;height:28%}.zone-left{left:12%;top:50%;transform:translateY(-50%);width:40%;height:44%}.zone-right{right:12%;top:50%;transform:translateY(-50%);width:40%;height:44%}.zone-cards{display:flex;justify-content:center;align-items:center;gap:0;flex-wrap:nowrap;box-shadow:0 2px 6px #0000004d}.play-zone .board-card{width:42px;height:55px;padding:3px 5px;font-size:20px;margin-left:-9px}.play-zone .board-card:first-child{margin-left:0}.zone-cards.compact .board-card{margin-left:-20px}.play-zone .board-card-suit{font-size:16px}.zone-label{margin-top:4px;padding:2px 7px;border:1px solid rgba(240,179,90,.34);border-radius:5px;color:var(--gold);font-size:11px;font-weight:800}.zone-left .zone-label,.zone-right .zone-label{margin-bottom:-25px}.zone-pass{color:var(--text-muted);font-size:16px;font-weight:750}.zone-countdown{color:var(--gold);font-size:16px;font-weight:750}.zone-finished{color:var(--green-light);font-size:16px;font-weight:750}.play-zone.is-previous{opacity:.4;filter:brightness(.7);will-change:opacity}.room-tag{position:absolute;top:50%;left:50%;z-index:3;transform:translate(-50%,-50%);padding:2px 7px;border:1px solid rgba(255,255,255,.15);border-radius:5px;color:var(--text-muted);font-size:11px;font-weight:800;pointer-events:auto;cursor:pointer;transition:border-color .15s,color .15s}.room-tag:hover{border-color:#ffffff59;color:var(--text)}.room-tag--solo{cursor:default}.room-tag--solo:hover{border-color:#ffffff26;color:var(--text-muted)}.table-hand{min-width:0;max-width:100vw;overflow:visible;padding-top:6px;padding-right:max(clamp(12px,4vw,40px),var(--safe-right));padding-bottom:max(16px,10px);padding-left:max(clamp(12px,4vw,40px),var(--safe-left));border-top:1px solid rgba(236,201,135,.16);background:transparent;box-shadow:0 -16px 40px #0000003d}.hand-topbar{width:min(100%,700px);min-height:38px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,1fr);align-items:stretch;gap:8px;margin:0 auto 6px}.hand-validation{width:100%;min-height:48px;display:flex;align-items:center;justify-content:center;margin:0;padding:4px 10px;border:1px solid transparent;border-radius:var(--radius);font-size:13px;font-weight:850;position:relative;text-align:center;overflow:hidden}.hand-validation:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--pbar-color, transparent);transform-origin:left center;transform:scaleX(var(--pbar-progress, 0));transition:transform var(--pbar-transition, 1s) linear;border-radius:0;z-index:-1;pointer-events:none}.hand-validation.valid{border-color:#56d98b61;color:var(--green-light);--pbar-color: var(--green-glass)}.hand-validation.cant-beat{border-color:#f0b35a61;color:#ffd17b;--pbar-color: var(--gold-glass)}.hand-validation.invalid{border-color:#d8524a6b;color:var(--red-light);--pbar-color: var(--red-glass)}.hand-validation.waiting,.hand-validation.hint{border-color:#ffffff2e;color:var(--text-muted);--pbar-color: #10181beb}.hint-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%) translateZ(0);width:24px;height:24px;border-radius:50%;border:1px solid rgba(255,255,255,.22);background:#ffffff0f;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:var(--text-muted);font-size:13px;font-weight:700;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:border-color .2s,color .2s,background .2s,backdrop-filter .2s}.hint-btn:hover{border-color:#ffffff73;color:#fff;background:#ffffff24;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.hand-cards{width:100%;min-width:0;display:flex;justify-content:center;gap:0;max-width:100%;min-height:92px;overflow:visible;padding:14px 4px 2px;touch-action:none}.hand-card{position:relative;width:clamp(45px,4.1vw,60px);height:clamp(63px,5.8vw,83px);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;flex:0 0 auto;margin-left:clamp(-7px,-.7vw,-4px);padding:.6%;border:var(--card-border);border-radius:var(--radius);background:linear-gradient(145deg,rgba(255,255,255,.78),transparent 40%),var(--card-bg);color:var(--card-black);box-shadow:0 12px 20px #00000052;cursor:pointer;-webkit-user-select:none;user-select:none;transition:box-shadow .3s ease}.hand-card:first-child{margin-left:0}.hand-card[data-red]{color:var(--card-red)}.hand-card.selected{border-color:#f0b35af2;box-shadow:0 0 0 3px #f0b35a2e,0 16px 32px #0000006b;transform:translateY(-10px)!important}.hand-card.is-level:after{content:"";position:absolute;left:10%;bottom:5%;width:7px;height:7px;border-radius:50%;background:var(--gold);box-shadow:0 0 12px #f0b35acc}.card-rank{font-size:clamp(21px,2.1vw,31px);font-weight:950;line-height:.9}.card-suit{margin-top:3px;font-size:clamp(15px,1.5vw,22px);line-height:1}.hand-finished{display:flex;align-items:center;justify-content:center;min-height:clamp(63px,5.8vw,83px);color:var(--green-light);font-size:22px;font-weight:900;text-align:center}.hand-action-slot{min-width:0;display:flex;align-items:stretch}.hand-action-slot .btn{width:100%;min-width:0;min-height:48px;font-size:13px;line-height:1;white-space:nowrap}.score-overlay,.disclaimer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:16px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);will-change:opacity}.score-overlay{z-index:200;background:#000000b8}.disclaimer-overlay{z-index:100;background:#000000c7}.score-panel{width:min(92vw,420px);max-height:calc(100dvh - 48px);overflow-y:auto;border:1px solid var(--panel-border);border-radius:18px;background:var(--panel-gradient),#06110f;box-shadow:var(--shadow);padding:16px;text-align:center;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent}.score-panel::-webkit-scrollbar{width:5px}.score-panel::-webkit-scrollbar-track{background:transparent}.score-panel::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:10px}.score-panel::-webkit-scrollbar-thumb:hover{background:#ffffff40}.score-kicker{margin-bottom:8px;color:var(--gold);font-size:12px;font-weight:900;text-transform:uppercase}.score-panel h2{margin-bottom:16px;color:var(--gold-light);font-size:32px}.score-rankings{display:flex;flex-direction:column;gap:8px;margin:18px 0}.score-rank{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:10px;padding:11px 13px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#ffffff0f;overflow:hidden}.score-rank.is-me{border-color:#f0b35a57;background:var(--gold-glass)}.score-hand-cards{display:flex;flex-wrap:wrap;flex:1 1 0;min-width:0;gap:2px 0;padding:2px 0;margin-left:10px}.score-hand-cards .hand-card{width:24px;height:32px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;flex:0 0 auto;margin-left:-10px;padding:2px 3px;border:var(--card-border);border-radius:4px;background:linear-gradient(145deg,rgba(255,255,255,.15),transparent 30%),var(--card-bg);box-shadow:0 3px 6px #0000003d;cursor:default}.score-hand-cards .hand-card:first-child{margin-left:-10px}.score-hand-cards .hand-card[data-red]{color:var(--card-red)}.score-hand-cards .card-rank{font-size:11px;line-height:1;font-weight:900}.score-hand-cards .card-suit{font-size:8px;line-height:1;margin-top:0}.rank-avatar{font-size:28px;line-height:1;flex:0 0 auto}.rank-name-group{display:flex;flex-direction:column;align-items:center;gap:2px;flex:0 1 auto;justify-content:center}.rank-name{text-align:left;font-weight:750}.rank-team-badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:6px;font-size:11px;font-weight:800;white-space:nowrap}.rank-team-badge.teamA{border:1px solid rgba(86,217,139,.34);background:var(--green-glass);color:var(--green-light)}.rank-team-badge.teamB{border:1px solid rgba(216,82,74,.42);background:#d8524a29;color:var(--red-light)}.rank-badge{color:var(--gold);font-weight:950;flex:0 0 auto;margin-left:auto}.score-advance{display:flex;align-items:baseline;justify-content:center;gap:8px;margin:18px 0;color:var(--green-light);font-size:18px;font-weight:850}.score-advance span{font-size:26px;font-weight:950}.score-panel-game-end{width:min(92vw,500px)}.game-end-subtitle{margin-bottom:8px;color:var(--text-muted);font-size:16px}.level-trend-chart{width:100%;margin:0 0 14px}.level-trend-chart .trend-svg{width:100%;height:100%;display:block}.ge-teams-row{display:flex;gap:12px;margin:0 0 20px}.ge-team-panel{flex:1;padding:12px 10px;border:1px solid rgba(255,255,255,.12);border-radius:12px;background:#ffffff0d}.ge-team-panel.is-winner{border-color:#f0b35a70;background:#f0b35a1a}.ge-team-header{display:flex;align-items:center;justify-content:center;margin-bottom:8px}.ge-team-name-wrap{position:relative;display:inline-flex;align-items:center}.ge-team-crown{position:absolute;right:100%;top:50%;transform:translateY(-50%);margin-right:8px;font-size:18px;line-height:1}.ge-team-name{color:var(--gold-light);font-size:16px;font-weight:900}.ge-team-members{display:flex;flex-direction:column;align-items:center;gap:6px}.ge-team-member{display:flex;align-items:center;gap:6px}.ge-avatar-wrap{position:relative;display:inline-flex;align-items:center}.ge-team-avatar{font-size:22px;line-height:1}.ge-team-member-name{font-weight:750;font-size:14px}.ge-team-member.is-me .ge-team-member-name{color:var(--gold-light)}.ge-me-tag{position:absolute;right:100%;top:50%;transform:translateY(-50%);margin-right:4px;padding:1px 4px;border:1px solid rgba(240,179,90,.5);border-radius:4px;background:#f0b35a2e;color:var(--gold);font-size:11px;font-weight:800;white-space:nowrap}#btn-new-game{width:100%}.zone-countdown.urgent{color:#ff6b6b;animation:countdown-pulse .6s ease-in-out infinite}@keyframes countdown-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}@media (max-width: 800px),(max-height: 560px){.seat-info{min-width:82px;height:32px;padding:0 8px 0 20px}.seat-avatar{width:32px;height:32px}.seat-avatar-emoji{font-size:18px;line-height:1}.seat-name{max-width:60px;text-align:left;font-size:13px}.seat.top-left{top:16px;left:30px;transform:none}.seat.top-right{top:16px;right:30px;left:auto;transform:none;flex-direction:row-reverse}.seat.bottom-right{right:30px;bottom:16px;top:auto;transform:none;flex-direction:row-reverse}.seat.bottom-left{left:30px;bottom:16px;transform:none}.seat.top-right .seat-info,.seat.bottom-right .seat-info{padding-right:20px;padding-left:8px}.seat.top-right .seat-avatar,.seat.bottom-right .seat-avatar{right:0;left:auto;transform:translate(50%,-50%)}.play-zones{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;grid-template-areas:"zone-left  zone-top" "zone-bottom zone-right";grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.play-zone{position:static;width:auto;height:auto;padding:4px}.zone-bottom{grid-area:zone-bottom;transform:none}.zone-top{grid-area:zone-top;transform:none}.zone-left{grid-area:zone-left;transform:none}.zone-right{grid-area:zone-right;transform:none}.zone-left .zone-label,.zone-right .zone-label{margin-bottom:0}.zone-cards .board-card-suit{font-size:14px}.zone-cards .board-card:first-child{margin-left:0}.card-count{width:24px;height:30px;font-size:13px}.seat.top-right .card-count,.seat.bottom-right .card-count{margin-left:0;margin-right:6px}}@media (max-width: 800px){.table-header{grid-template-columns:auto 1fr auto;gap:6px;padding-top:calc(var(--safe-top) + 4px);padding-right:max(8px,var(--safe-right));padding-bottom:4px;padding-left:max(8px,var(--safe-left))}.table-brand{grid-column:1}.btn-refresh{grid-column:3;grid-row:1;min-width:52px;min-height:33px;padding:4px 7px}.score-strip{grid-column:2;grid-row:1;justify-self:center;justify-content:center;gap:7px}.brand-title{font-size:18px}.brand-subtitle{font-size:10px}.team-score{min-width:55px;min-height:33px;gap:5px;padding:4px 8px;font-size:13px}.team-score strong{font-size:20px}.team-label{line-height:1.15}.table-surface{padding-top:8px;padding-right:max(8px,var(--safe-right));padding-bottom:8px;padding-left:max(8px,var(--safe-left))}.table-felt{min-height:0;border-width:6px;border-radius:28px}.seat-badge{display:inline-flex;margin-top:1px;padding:2px 5px;border-radius:5px;font-size:10px;line-height:1}.board-card{width:28px;height:38px;font-size:13px}.zone-cards .board-card{width:38px;height:50px;padding:3px 5px;font-size:18px;margin-left:-9px}.hand-topbar{min-height:38px;grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,1fr);gap:7px}.hand-cards{min-height:84px}.hand-card{width:clamp(50px,7.5vw,60px);height:clamp(72px,10.5vw,83px);margin-left:clamp(-10px,-1.8vw,-5px);padding:6px}.hand-finished{min-height:clamp(72px,10.5vw,83px)}.card-rank{font-size:clamp(22px,3.9vw,31px)}.card-suit{font-size:clamp(16px,2.8vw,22px)}.player-list{grid-template-columns:repeat(2,minmax(0,1fr))}.legal-tip{min-height:calc(var(--safe-bottom) + 40px);padding-bottom:var(--safe-bottom)}}@media (max-width: 560px){.room-join,.room-joining,.room-error{padding:14px}.room-panel{padding:18px}.room-actions{flex-direction:column}.table-header{min-height:calc(var(--safe-top) + 48px);padding-right:8px}.score-strip{gap:5px}.score-versus{font-size:18px}.team-label-row,.team-name-row{font-size:10px}.team-label{flex-direction:column;gap:0}.table-seats{padding:8px}.seat.top-left{top:18px;left:25px}.seat.top-right{top:18px;right:25px;flex-direction:row-reverse}.seat.bottom-right{right:25px;bottom:18px;flex-direction:row-reverse}.seat.bottom-left{left:25px;bottom:18px}.seat-info{min-width:76px;height:30px;padding-left:19px}.seat-avatar{width:30px;height:30px}.seat-name{max-width:42px;font-size:12px}.play-zone{padding:2px}.zone-cards .board-card{width:38px;height:50px;padding:3px 5px;font-size:18px;margin-left:-15px}.zone-label{font-size:10px;padding:1px 4px}.home-content{width:92vw;gap:14px}.nearby-rooms{padding:10px 12px}.card-count{width:22px;height:28px;font-size:12px;border-radius:3px}.btn-play,.btn-pass{min-width:0;min-height:42px}.hand-action-slot .btn{min-height:42px}.table-hand{padding-top:6px;padding-right:max(12px,var(--safe-right));padding-bottom:max(16px,10px);padding-left:max(12px,var(--safe-left))}.hand-topbar{min-height:38px;grid-template-columns:minmax(0,2fr) minmax(0,3fr) minmax(0,2fr);gap:6px;margin-bottom:5px}.hand-validation{min-height:42px;font-size:12px}.hand-cards{min-height:0;padding:8px 0 0}.hand-finished{min-height:clamp(58px,15.6vw,72px)}.hand-card{width:clamp(40px,10.8vw,50px);height:clamp(58px,15.6vw,72px);margin-left:clamp(-10px,-2.8vw,-3px);padding:5px 4px;border-radius:6px}.hand-card.selected{transform:translateY(-6px)!important}.card-rank{font-size:min(6vw,26px)}.card-suit{margin-top:2px;font-size:min(4.6vw,20px)}}@media (max-height: 560px){.table-surface{padding-top:2px;padding-right:2px;padding-bottom:2px;padding-left:max(2px,var(--safe-left))}.table-felt{min-height:0;border-width:2px;border-radius:28px}.seat-badge{padding:2px 5px;border-radius:5px;font-size:10px;line-height:1}.play-zones{padding:0 20%}.zone-cards .board-card{margin-left:-9px;width:38px;height:50px;font-size:18px}.zone-cards .board-card-suit{font-size:14px}.btn-play,.btn-pass{min-height:38px}.hand-action-slot{flex-direction:row}.hand-action-slot .btn{min-height:38px}.hand-topbar{width:30%;min-width:80px;min-height:34px;height:100%;display:grid;grid-template-rows:auto auto;grid-template-columns:1fr 1fr;gap:6px;margin:0;align-self:center}.hand-validation{grid-row:2;grid-column:1 / -1;min-height:38px;padding:3px 8px;font-size:11px}.hand-cards{flex:1;align-items:flex-end;padding:0}.hand-finished{min-height:clamp(44px,8.8vw,60px)}.hand-card{width:clamp(30px,6vw,42px);height:clamp(44px,8.8vw,60px);margin-left:clamp(-14px,-3.2vw,-6px);padding:6px 4px}.hand-card.selected{transform:translateY(-5px)!important}.card-rank{font-size:20px}.card-suit{margin-top:2px;font-size:16px}.home-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;gap:12px 16px;align-items:start;justify-items:center;width:100%;max-width:none}.room-brand-mark{grid-row:1;grid-column:1;margin-bottom:0}.room-card-preview{grid-row:2;grid-column:1;margin:0}.nearby-rooms{grid-row:1;grid-column:2;width:100%;max-width:280px}.home-buttons{grid-row:2;grid-column:2;width:100%;max-width:300px}.home-content:not(:has(.nearby-rooms)) .home-buttons{grid-row:1 / 3;align-self:center}.share-url-row{grid-row:3;grid-column:1 / -1;margin:0}.waiting-content{display:grid;grid-template-columns:1fr 1.2fr;gap:8px 14px;align-items:start;width:94vw;max-width:none;max-height:none;overflow:visible;padding:12px 0}.waiting-room-header{grid-column:1;grid-row:1;justify-self:center;align-self:start}.waiting-content .player-list{grid-column:2;grid-row:1;margin:0;width:100%;max-width:none}.waiting-actions{grid-column:2;grid-row:2;justify-content:center}.waiting-bottom-hint{grid-column:2}.reconnect-hint{grid-column:1 / -1;justify-self:center}.table-hand{display:flex;flex-direction:row;align-items:stretch;gap:8px;padding-top:4px;padding-right:10px;padding-bottom:max(16px,6px);padding-left:max(10px,var(--safe-left))}.hand-play-slot{grid-row:1;grid-column:2;min-height:38px}.hand-pass-slot{grid-row:1;grid-column:1}.hand-pass-slot[data-empty]{display:none}.hand-play-slot[data-fullwidth]{grid-column:1 / -1}.score-overlay{padding:8px}.score-panel{padding:16px;width:min(94vw,580px);max-height:calc(100dvh - 16px);overflow-y:auto}.score-kicker{margin-bottom:4px;font-size:10px}.score-panel h2{font-size:22px;margin-bottom:8px}.score-rankings{flex-direction:row;flex-wrap:wrap;gap:6px;margin:10px 0}.score-rank{flex:0 0 calc(50% - 3px);padding:8px 10px}.rank-avatar{font-size:22px}.rank-name,.rank-badge{font-size:13px}.score-hand-cards{padding:1px 0}.score-hand-cards .hand-card{width:20px;height:27px;margin-left:-8px;padding:1px 2px;border-radius:3px;box-shadow:0 2px 4px #0000002e;background:linear-gradient(145deg,rgba(255,255,255,.12),transparent 30%),var(--card-bg)}.score-hand-cards .card-rank{font-size:9px}.score-hand-cards .card-suit{font-size:7px}.score-advance{margin:10px 0;font-size:15px}.score-advance span{font-size:20px}.score-panel .btn{padding:8px 16px;font-size:14px;min-height:36px}.score-panel-game-end{padding:16px;width:min(94vw,580px)}.game-end-subtitle{margin-bottom:6px;font-size:14px}.level-trend-chart{height:240px;margin:0 0 10px}.ge-teams-row{gap:10px;margin:0 0 14px}.ge-team-panel{padding:10px 8px}.ge-team-name{font-size:14px}.ge-team-avatar{font-size:18px}.ge-team-member-name{font-size:12px}.app-layout{grid-template-rows:1fr;grid-template-columns:1fr auto}.app-layout>:first-child{grid-row:1;grid-column:1}.legal-tip{grid-row:1;grid-column:2;height:100%;min-width:max(30px,var(--safe-right));min-height:0;padding:8px 0;writing-mode:vertical-rl;justify-content:center}}@media (max-width: 560px) and (orientation: portrait){.legal-tip{min-height:calc(var(--safe-bottom) + 80px);padding-bottom:var(--safe-bottom)}.table:not(.home-table) .brand-title{font-size:14px}}.disclaimer-card{width:min(92vw,420px);max-height:min(92dvh,700px);overflow-y:auto;border:1px solid var(--panel-border);border-radius:16px;background:var(--panel-gradient),#05100e;box-shadow:var(--shadow),inset 0 1px #ffffff14;padding:16px}.disclaimer-title{margin:0 0 4px;color:var(--gold);font-size:18px;font-weight:900}.disclaimer-kicker{margin:0 0 16px;color:var(--text-muted);font-size:12px}.disclaimer-text{text-align:left;padding:16px;border:1px solid var(--panel-soft);border-radius:10px;background:#ffffff0a;margin-bottom:16px;color:var(--text);font-size:13px;line-height:1.4;font-weight:700}.disclaimer-section-title{text-align:center;font-weight:900;font-size:15px;color:var(--gold);margin:12px 0 8px}.disclaimer-section-title:first-child{margin-top:0}.disclaimer-warn{color:var(--red);font-weight:850}.disclaimer-footer{margin:0 0 16px;color:var(--text-faint);font-size:11px;text-align:left;line-height:1.4}.disclaimer-footer p{margin:0}.room-by{margin-left:8px;color:var(--text-faint);font-size:13px;font-weight:400;display:inline-flex;align-items:center;position:relative;top:2px}.room-by a,.room-by a:visited{color:inherit;text-decoration:none}.room-by a:hover{opacity:1;color:var(--gold-light);text-decoration:underline;text-underline-offset:4px;text-decoration-color:#d0882b59}.github-icon{flex-shrink:0;width:14px;height:14px;margin:0 4px;vertical-align:middle}.disclaimer-actions{display:flex;gap:12px}.disclaimer-actions:has(.disclaimer-btn:only-child){justify-content:center}.disclaimer-actions:has(.disclaimer-btn:only-child) .disclaimer-btn{flex:0 1 auto;min-width:120px}.disclaimer-btn{flex:1;min-height:44px;border-radius:var(--radius);padding:12px 16px;font-size:14px;font-weight:750;cursor:pointer;transition:transform .12s ease,background .12s ease,border-color .12s ease}.disclaimer-btn:hover{transform:translateY(-1px)}.disclaimer-btn:active{transform:translateY(0)}.disclaimer-btn.agree{border:1px solid rgba(240,179,90,.4);background:var(--gold-glass);color:var(--gold)}.disclaimer-btn.agree:hover{background:#f0b35a2e}.disclaimer-btn.disagree{border:1px solid rgba(255,255,255,.15);background:#ffffff0a;color:var(--text-muted)}.disclaimer-btn.disagree:hover{background:var(--panel-soft);color:var(--text)}.disclaimer-failed-text{color:var(--text);font-size:16px;font-weight:850;text-align:center}.offline-prompt-text{margin:16px 0 24px;color:var(--text);font-size:15px;line-height:1.8}.btn-secondary.btn-disabled{opacity:.4;cursor:not-allowed;transform:none}.btn-secondary.btn-disabled:hover{transform:none;background:#ffffff0a;color:var(--text-muted)}.roominfo-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:24px;background:#000000b8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);will-change:opacity}.roominfo-panel{position:relative;display:flex;flex-direction:column;align-items:center;gap:16px;width:min(92vw,380px);padding:36px 24px 28px;border-radius:18px;background:var(--panel);border:1px solid var(--panel-border);box-shadow:var(--shadow)}.roominfo-close{position:absolute;top:10px;right:14px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:var(--panel-soft);color:var(--text-muted);font-size:16px;cursor:pointer;transition:background .15s,color .15s}.roominfo-close:hover{background:#ffffff26;color:#fff}.share-btn,.share-btn-small{cursor:pointer;color:var(--text-muted);background:none;border:none;display:inline-flex;align-items:center;transition:color .18s}.share-btn{font-size:14px;padding:6px 14px;gap:6px}.share-btn-small{padding:0;position:relative;top:3px}.share-btn:hover,.share-btn-small:hover{color:var(--gold-light)}.share-url-row{display:flex;align-items:center;justify-content:center;gap:6px;margin:10px 0 30px}.home-url{color:var(--text-muted);font-size:18px;cursor:pointer;transition:color .18s;background:none;border:none;padding:0;font-family:inherit}.home-url:hover{color:var(--gold-light);text-decoration:underline;text-underline-offset:4px;text-decoration-color:#d0882b59}.toast-container{position:fixed;top:50%;left:50%;z-index:300;background:var(--card-bg);color:var(--card-black);font-weight:850;border-radius:var(--radius);padding:10px 22px;font-size:14px;white-space:nowrap;pointer-events:none;box-shadow:0 4px 24px #0000002e}.error-boundary-fallback{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:var(--bg-deep);padding:24px}.error-boundary-card{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:40px 32px;max-width:420px;width:100%;text-align:center;box-shadow:var(--shadow)}.error-boundary-icon{color:var(--gold);opacity:.6;margin-bottom:16px}.error-boundary-title{color:var(--text);font-size:20px;font-weight:700;margin-bottom:8px}.error-boundary-message{color:var(--text-muted);font-size:14px;line-height:1.5;margin-bottom:24px;word-break:break-word}.error-boundary-actions{display:flex;gap:10px;justify-content:center;margin-bottom:12px}.error-boundary-btn{min-width:110px}
