:root{color:#fff8e8;font-synthesis:none;--red-950:#3b0a0a;--red-900:#5f1011;--red-800:#86191a;--red-700:#ac2824;--gold:#f5c861;--gold-light:#ffe6a7;--ink:#31180d;--green:#126047;--green-dark:#073d30;background:#2d0b0b;font-family:Microsoft YaHei,PingFang SC,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{width:100%;min-width:320px;min-height:100%;margin:0}body{min-height:100dvh;overflow-x:hidden}button,input{font:inherit}button{color:inherit;border:0}button:disabled{cursor:not-allowed;opacity:.42}.landing{background:radial-gradient(circle at 21% 28%,#f6c14c33,#0000 25%),linear-gradient(135deg,#8f1a1c 0%,#671012 48%,#3c090b 100%);grid-template-columns:minmax(0,1fr) minmax(350px,440px);align-items:center;gap:clamp(48px,8vw,130px);min-height:100dvh;padding:72px max(6vw,48px);display:grid;position:relative;overflow:hidden}.landing:before,.landing:after{content:"";aspect-ratio:1;pointer-events:none;border:1px solid #ffdc901c;border-radius:50%;width:54vw;position:absolute}.landing:before{bottom:-39vw;left:-25vw;box-shadow:0 0 0 65px #ffffff06,0 0 0 130px #ffffff05}.landing:after{width:35vw;top:-24vw;right:-17vw;box-shadow:0 0 0 50px #ffffff05}.landing-sun{pointer-events:none;background:radial-gradient(circle,#f6bc482b,#f6bc4806 62%,#0000 63%);border-radius:50%;width:480px;height:480px;position:absolute;top:50%;left:10vw;transform:translateY(-50%)}.cloud{opacity:.06;border-top:2px solid #ffe5ad;border-radius:50%;width:240px;height:50px;position:absolute}.cloud:before,.cloud:after{content:"";border-top:2px solid #ffe5ad;border-radius:50%;position:absolute}.cloud:before{width:80px;height:45px;top:-23px;left:34px}.cloud:after{width:110px;height:58px;top:-35px;right:25px}.cloud-one{top:14%;left:3%}.cloud-two{bottom:10%;right:2%;transform:scale(.7)}.hero-copy{z-index:2;max-width:690px;position:relative}.brand-pill{color:#f8d88c;letter-spacing:.08em;background:#4308093d;border:1px solid #ffdf9a45;border-radius:99px;align-items:center;gap:9px;width:fit-content;margin-bottom:28px;padding:8px 14px;font-size:12px;display:flex}.brand-pill span{font-size:16px}.hero-copy h1{letter-spacing:-.08em;text-shadow:0 8px 28px #2b020354;margin:0;font-size:clamp(66px,7vw,112px);font-weight:900;line-height:.98}.hero-copy h1 span{color:var(--gold);letter-spacing:.4em;font-size:.43em;font-weight:700;display:block;transform:translate(.2em)}.hero-copy>p{color:#fff0d5b8;max-width:570px;margin:28px 0 38px;font-size:clamp(15px,1.4vw,19px);line-height:1.8}.feature-row{border-top:1px solid #ffffff1f;gap:0;display:flex}.feature-row div{min-width:142px;padding:20px 34px 0 0}.feature-row div+div{border-left:1px solid #ffffff1a;padding-left:34px}.feature-row strong,.feature-row span{display:block}.feature-row strong{color:#ffe1a1;font-size:13px}.feature-row span{color:#ffffff75;margin-top:6px;font-size:10px}.entry-card{z-index:3;color:#3e2319;background:linear-gradient(145deg,#fffaf0,#f3e8d2);border:1px solid #fff9;border-radius:28px;width:100%;position:relative;overflow:visible;box-shadow:0 35px 85px #2500026b,inset 0 1px #fff}.entry-card:after{content:"";z-index:-1;border:1px solid #7e452214;border-radius:21px;position:absolute;inset:8px}.entry-card-decor{position:absolute;top:-50px;right:28px;transform:rotate(8deg)}.entry-card-decor .p-card{width:63px;margin-left:-35px;box-shadow:0 8px 20px #2c0c0533}.entry-card-decor .p-card:first-child{transform:rotate(-13deg)translateY(5px)}.entry-card>header{border-bottom:1px solid #552d181a;justify-content:space-between;align-items:center;padding:32px 34px 23px;display:flex}.entry-card>header span{font-size:22px;font-weight:800}.entry-card>header small{color:#9a281e;background:#9a281e0f;border:1px solid #9a281e2e;border-radius:99px;padding:5px 9px;font-size:10px}.entry-card form{gap:17px;padding:26px 34px 27px;display:grid}.entry-card label>span{color:#795d4e;margin-bottom:8px;font-size:11px;font-weight:600;display:block}.entry-card input{color:#3b251c;background:#ffffffad;border:1px solid #4e2d1c29;border-radius:11px;outline:0;width:100%;height:48px;padding:0 15px;transition:all .2s}.entry-card input:focus{border-color:#b73b2d;box-shadow:0 0 0 3px #b73b2d1a}.entry-card input::placeholder{color:#b4a293}.entry-card .code-input{text-transform:uppercase;letter-spacing:.24em;font-size:18px;font-weight:800}.primary-button,.secondary-button{cursor:pointer;border-radius:11px;height:49px;font-size:14px;font-weight:800;transition:transform .18s,filter .18s}.primary-button{color:#fff8e8;background:linear-gradient(135deg,#b82820,#861814);box-shadow:0 9px 19px #80191433}.secondary-button{color:#79231c;background:#9d372a0b;border:1px solid #8b271d33}.primary-button:hover:not(:disabled),.secondary-button:hover:not(:disabled){filter:brightness(1.06);transform:translateY(-1px)}.primary-button.compact{border-radius:9px;width:auto;height:40px;padding:0 26px;font-size:12px}.or{text-align:center;background:#492c1c1a;height:1px;margin:4px 0;position:relative}.or span{color:#aa9687;background:#f8efdf;padding:0 9px;font-size:9px;position:relative;top:-10px}.form-error{color:#b42e24;margin:-6px 0 -4px;font-size:11px}.entry-card>footer{color:#947f70;text-align:center;border-top:1px solid #552d1814;padding:15px 34px 18px;font-size:10px}.online-dot,.offline-dot{background:#3bbf78;border-radius:50%;width:7px;height:7px;margin-right:7px;display:inline-block;box-shadow:0 0 9px #3bbf7899}.offline-dot{box-shadow:none;background:#c8524b}.landing-note{z-index:2;color:#ffffff4d;letter-spacing:.1em;font-size:9px;position:absolute;bottom:18px;left:50%;transform:translate(-50%)}.p-card{aspect-ratio:.7;color:#191814;-webkit-user-select:none;user-select:none;background:linear-gradient(145deg,#fffef9,#eeeade);border:1px solid #3f24162e;border-radius:8px;flex:none;width:clamp(50px,5.1vw,72px);padding:0;display:inline-flex;position:relative;overflow:hidden;box-shadow:0 8px 16px #14060240,inset 0 0 0 2px #ffffffb3}button.p-card{cursor:pointer;transition:transform .16s,filter .16s}.p-card:after{content:"";pointer-events:none;border:1px solid #3722140e;border-radius:5px;position:absolute;inset:3px}.card-red{color:#bd2d27}.card-corner{flex-direction:column;align-items:center;font-family:Georgia,serif;line-height:1;display:flex;position:absolute;top:6px;left:7px}.card-corner strong{font-size:clamp(15px,1.6vw,21px)}.card-corner em{margin-top:3px;font-size:clamp(11px,1.2vw,17px);font-style:normal}.card-center{margin:auto;font-family:Georgia,serif;font-size:clamp(24px,2.6vw,37px);transform:translate(4px,9px)}.card-joker .card-center{flex-direction:column;align-items:center;gap:6px;display:flex;transform:translate(5px,4px)}.card-joker .card-center b{color:#fff8e6;background:currentColor;border-radius:50%;place-items:center;width:24px;height:24px;font-size:0;display:grid}.card-joker .card-center b:after{content:"王";color:#fff;font-size:11px}.card-joker .card-center i{letter-spacing:.12em;writing-mode:vertical-rl;font-size:6px;font-style:normal}.card-selected{box-shadow:0 13px 21px #14060261, 0 0 0 3px var(--gold);transform:translateY(-18px)!important}.card-small{border-radius:5px;width:38px;box-shadow:0 4px 9px #0a030240}.card-small .card-corner{top:4px;left:4px}.card-small .card-corner strong{font-size:11px}.card-small .card-corner em{margin-top:1px;font-size:8px}.card-small .card-center{font-size:17px}.card-small.card-joker .card-center{display:none}.card-back{color:#f8df9c;background:repeating-linear-gradient(45deg,#a6201c 0 4px,#7f1514 4px 8px);border:2px solid #f1dba1;justify-content:center;align-items:center;box-shadow:0 5px 11px #1802024d,inset 0 0 0 3px #a82420,inset 0 0 0 4px #ffe095bf}.card-back:after{border-color:#ffe29e8c;inset:5px}.card-back i,.card-back b{z-index:1;font-style:normal;position:absolute}.card-back i{letter-spacing:.12em;font-size:8px;transform:translateY(-6px)}.card-back b{font-family:Georgia,serif;font-size:10px;transform:translateY(7px)}.game-shell{background:#260809;flex-direction:column;height:100dvh;min-height:650px;display:flex;overflow:hidden}.game-header{z-index:40;background:linear-gradient(90deg,#531011,#731516 48%,#531011);border-bottom:1px solid #ffffff14;flex:none;grid-template-columns:1fr auto 1fr;align-items:center;height:64px;padding:0 22px;display:grid;position:relative;box-shadow:0 8px 24px #1a000140}.table-brand{align-items:center;gap:10px;display:flex}.table-brand>span{color:#631112;background:linear-gradient(145deg,#ffe6a7,#d9a23c);border-radius:10px;place-items:center;width:34px;height:34px;display:grid;box-shadow:0 5px 14px #1f010133}.table-brand strong,.table-brand small{display:block}.table-brand strong{letter-spacing:.04em;font-size:14px}.table-brand small{color:#ffefd078;margin-top:2px;font-size:8px}.room-code{cursor:pointer;background:#2a030438;border:1px solid #ffdf9d33;border-radius:10px;align-items:center;gap:12px;height:41px;padding:0 15px;display:flex}.room-code small{color:#ffffff73;font-size:9px}.room-code strong{color:#ffe09a;letter-spacing:.18em;font-size:17px}.room-code span{color:#ffffff7a;border-left:1px solid #ffffff1f;padding-left:11px;font-size:9px}.header-actions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.header-actions>button{color:#fff3da9e;cursor:pointer;background:#ffffff09;border:1px solid #ffffff1a;border-radius:7px;padding:7px 10px;font-size:10px}.online-state{color:#fff3da8c;margin-right:6px;font-size:10px}.game-body{flex:1;grid-template-columns:minmax(0,1fr) 270px;min-height:0;display:grid}.arena{background:radial-gradient(circle at 50% 30%,#6f1718,#36090a 72%);min-width:0;min-height:0;padding:18px}.felt{background:radial-gradient(#16765a 0%,#0e5e47 48%,#084633 100%);border:10px solid #401c10;border-radius:36px;height:100%;min-height:550px;position:relative;overflow:hidden;box-shadow:inset 0 0 0 2px #facf6f59,inset 0 0 65px #00000054,0 18px 35px #0000004d,0 0 0 3px #180a07}.felt:after{content:"";pointer-events:none;border:1px dashed #ffebb033;border-radius:24px;position:absolute;inset:15px}.felt-pattern{opacity:.07;border:1px solid #fff0c0;border-radius:50%;width:440px;height:440px;position:absolute;top:43%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 38px #0000,0 0 0 39px #fff0c0,0 0 0 75px #0000,0 0 0 76px #fff0c0}.felt-pattern:after{content:"夏威夷策略";white-space:nowrap;letter-spacing:.18em;font-size:30px;font-weight:900;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)rotate(-9deg)}.opponent{z-index:6;width:230px;position:absolute;top:56px}.opponent-left{left:45px}.opponent-right{right:45px}.opponent-main{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#031f17c7;border:1px solid #ffffff21;border-radius:32px 12px 12px 32px;align-items:center;gap:10px;width:168px;padding:7px 11px 7px 7px;display:flex;box-shadow:0 9px 21px #00000040}.opponent-right .opponent-main{text-align:right;border-radius:12px 32px 32px 12px;flex-direction:row-reverse;margin-left:auto;padding:7px 7px 7px 11px}.avatar-wrap{flex:none;width:47px;height:47px;position:relative}.avatar{color:#fff2ca;background:linear-gradient(145deg, hsl(var(--avatar-hue), 48%, 46%), hsl(var(--avatar-hue), 50%, 25%));border:2px solid #ffe19aad;border-radius:50%;place-items:center;width:100%;height:100%;font-size:17px;font-weight:800;display:grid;box-shadow:0 4px 11px #00000045}.avatar-turn .avatar{border-color:#ffe082;box-shadow:0 0 0 4px #f7c7582e,0 0 18px #f7c75859}.avatar-offline{filter:grayscale();opacity:.58}.landlord-crown,.host-badge{color:#6a1a13;background:linear-gradient(145deg,#ffe498,#dca63e);border:1px solid #fff0b6;border-radius:50%;place-items:center;width:20px;height:20px;font-size:9px;font-weight:900;display:grid;position:absolute;top:-6px;right:-4px;box-shadow:0 3px 8px #00000040}.host-badge{color:#e7f8ef;background:#1f7256;border-color:#80bea4;width:16px;height:16px;font-size:7px;inset:auto auto -2px -2px}.player-copy{min-width:0}.player-copy strong,.player-copy span{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}.player-copy strong{color:#fff8e8;font-size:12px}.player-copy span{color:#e7f6ed91;margin-top:4px;font-size:9px}.opponent-hand{align-items:center;height:39px;display:flex;position:absolute;top:60px;left:15px}.opponent-right .opponent-hand{left:auto;right:15px}.opponent-hand .p-card{border-width:1px;border-radius:3px;width:27px;margin-left:-19px}.opponent-hand .p-card:first-child{margin-left:0}.opponent-hand b{color:#ffe09b;background:#031d15cc;border:1px solid #ffde9147;border-radius:50%;place-items:center;min-width:25px;height:25px;margin-left:7px;font-size:10px;display:grid}.opponent-right .opponent-hand{flex-direction:row-reverse}.opponent-right .opponent-hand b{margin:0 7px 0 0}.offline-label{color:#d7d2c8;background:#141414b3;border-radius:4px;padding:2px 6px;font-size:7px;position:absolute;top:42px;left:90px}.opponent-right .offline-label{left:auto;right:90px}.empty-seat{color:#ffffff59;flex-direction:column;align-items:center;gap:6px;font-size:9px;display:flex}.empty-seat.opponent-right{align-items:center}.empty-avatar{background:#0000001a;border:1px dashed #ffffff4d;border-radius:50%;place-items:center;width:52px;height:52px;font-size:22px;font-weight:200;display:grid}.played-cards{z-index:8;align-items:center;display:flex;position:absolute;top:119px;left:75px}.opponent-right .played-cards{flex-direction:row-reverse;left:auto;right:75px}.played-cards .p-card{margin-left:-24px}.played-cards .p-card:first-child{margin-left:0}.opponent-right .played-cards .p-card{margin-left:0;margin-right:-24px}.opponent-right .played-cards .p-card:first-child{margin-right:0}.combo-tag{color:#563010;white-space:nowrap;background:#f2cf79;border-radius:99px;margin-left:7px;padding:3px 7px;font-size:7px;box-shadow:0 3px 7px #0003}.opponent-right .combo-tag{margin:0 7px 0 0}.action-bubble{color:#6b241b;text-align:center;background:linear-gradient(#ffe6a3,#efc568);border:1px solid #ffe6a5cc;border-radius:13px 13px 13px 3px;min-width:45px;padding:6px 9px;font-size:10px;font-weight:800;position:absolute;top:115px;left:80px;box-shadow:0 5px 11px #0003}.opponent-right .action-bubble{border-radius:13px 13px 3px;left:auto;right:80px}.action-muted{color:#ffffff9e;background:#04251cc7;border-color:#ffffff29}.bottom-cards{z-index:5;align-items:center;gap:4px;display:flex;position:absolute;top:27px;left:50%;transform:translate(-50%)}.bottom-cards>span{color:#eff7ef7a;letter-spacing:.15em;writing-mode:vertical-rl;margin-right:5px;font-size:8px}.bottom-cards .p-card{width:34px}.round-info{z-index:4;color:#ecf8ef8c;align-items:center;gap:10px;font-size:8px;display:flex;position:absolute;top:102px;left:50%;transform:translate(-50%)}.round-info strong{color:#f7d98d;background:#01261b73;border:1px solid #f7d98d33;border-radius:99px;padding:4px 9px;font-size:9px}.lobby-panel,.bid-status,.result-panel{z-index:12;text-align:center;width:min(390px,72%);position:absolute;top:42%;left:50%;transform:translate(-50%,-50%)}.lobby-panel{-webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px);background:#032d20d4;border:1px solid #ffe9ab33;border-radius:20px;padding:29px 28px 25px;box-shadow:0 18px 40px #0000003d}.panel-kicker{color:#e8c770;letter-spacing:.18em;font-size:8px}.lobby-panel h2{color:#fff5d8;margin:8px 0 6px;font-size:20px}.lobby-panel p{color:#e8f7ee80;margin:0;font-size:9px}.lobby-panel small{color:#ffffff80;margin-top:17px;font-size:9px;display:block}.seat-dots{justify-content:center;align-items:center;gap:7px;margin:18px 0;display:flex}.seat-dots i{background:#ffffff1a;border-radius:99px;width:23px;height:6px}.seat-dots i.filled{background:linear-gradient(90deg,#e7b74e,#ffe296);box-shadow:0 0 10px #edc15b40}.seat-dots span{color:#f0cf7c;margin-left:4px;font-size:9px}.bid-status strong,.bid-status span,.bid-status small{display:block}.bid-status span{color:#eef8f180;letter-spacing:.14em;font-size:9px}.bid-status strong{color:#ffe19a;text-shadow:0 3px 12px #00000040;margin:6px 0 4px;font-size:27px}.bid-status small{color:#ffffff8c;font-size:9px}.last-combo{z-index:4;text-align:center;position:absolute;top:40%;left:50%;transform:translate(-50%,-50%)}.last-combo span,.last-combo strong{display:block}.last-combo span{color:#ffffff59;letter-spacing:.12em;font-size:8px}.last-combo strong{color:#ffe8abb8;margin-top:4px;font-size:13px}.result-panel{color:#3c2214;background:linear-gradient(145deg,#fffaf0,#f3e4c8);border:1px solid #ffffffb8;border-radius:22px;padding:24px 28px 22px;top:41%;box-shadow:0 24px 55px #0006}.result-ribbon{color:#a1261e;letter-spacing:.16em;font-size:8px;font-weight:700;display:inline-block}.result-icon{color:#7a2019;background:linear-gradient(145deg,#ffe39a,#e4b650);border:1px solid #e5bc5a;border-radius:50%;place-items:center;width:38px;height:38px;margin:9px auto 5px;font-size:14px;font-weight:900;display:grid}.result-panel h2{margin:7px 0 3px;font-size:19px}.result-panel>p{color:#8f725d;margin:0;font-size:9px}.result-panel>small{color:#8c7768;margin-top:13px;font-size:9px;display:block}.showdown-list{border-top:1px solid #4a281517;max-height:225px;margin:14px 0 16px;overflow-y:auto}.showdown-entry{border-bottom:1px solid #4a281512;padding:7px 5px 8px}.showdown-entry-head{justify-content:space-between;align-items:center;gap:8px;font-size:10px;display:flex}.showdown-entry-head>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.showdown-cards{gap:5px;margin-top:6px;display:flex}.showdown-cards .p-card{border-radius:5px;width:34px}.opponent-hand-revealed{gap:2px}.opponent-hand-revealed .p-card{width:30px;margin-left:0}.score-up{color:#ad2d23}.score-down{color:#24745a}.self-area{z-index:15;width:min(900px,100% - 40px);position:absolute;bottom:11px;left:50%;transform:translate(-50%)}.self-summary{z-index:6;background:#021f17e6;border:1px solid #ffffff24;border-radius:30px 12px 12px 30px;align-items:center;gap:9px;width:190px;margin:0 auto -8px;padding:5px 48px 5px 5px;display:flex;position:relative;box-shadow:0 8px 21px #00000042}.self-summary .avatar-wrap{width:42px;height:42px}.self-summary>div:nth-child(2){min-width:0}.self-summary strong,.self-summary span{white-space:nowrap;display:block}.self-summary strong{text-overflow:ellipsis;font-size:11px;overflow:hidden}.self-summary strong em{color:#5a1b16;background:#e8bf62;border-radius:3px;margin-left:4px;padding:1px 4px;font-size:6px;font-style:normal}.self-summary>div:nth-child(2)>span{color:#ecf7ef85;margin-top:3px;font-size:8px}.turn-timer{background:conic-gradient(#f1c663 var(--timer), #ffffff14 0);border-radius:50%;place-items:center;width:34px;height:34px;display:grid;position:absolute;top:9px;right:7px}.turn-timer:after{content:"";background:#0a3a2c;border-radius:50%;position:absolute;inset:3px}.turn-timer span{z-index:1;color:#ffe19a;font-size:9px;font-weight:700;position:relative}.my-hand{z-index:4;filter:drop-shadow(0 9px 10px #0000002e);justify-content:center;align-items:flex-end;min-height:107px;padding-top:22px;display:flex;position:relative}.my-hand .p-card{margin-left:clamp(-41px,-2.8vw,-28px)}.my-hand .p-card:hover{filter:brightness(1.03);transform:translateY(-7px)}.my-hand .p-card.card-selected:hover{transform:translateY(-18px)}.action-bar{justify-content:center;align-items:center;gap:8px;min-height:45px;margin-top:2px;display:flex}.action-bar button{cursor:pointer;border-radius:9px;min-width:78px;height:37px;padding:0 15px;font-size:11px;font-weight:800;transition:all .16s}.action-bar button:hover:not(:disabled){filter:brightness(1.1);transform:translateY(-1px)}.ghost-action{color:#e6efe9;background:#03231ae0;border:1px solid #ffffff26}.gold-action{color:#572015;background:linear-gradient(145deg,#ffe295,#e9b84e);border:1px solid #ffeca9;box-shadow:0 5px 12px #0003}.play-action{min-width:116px!important}.action-tip{color:#ffffff8c;margin-right:7px;font-size:9px}.waiting-action{color:#ffffff8c;background:#02221985;border:1px solid #ffffff14;border-radius:99px;padding:9px 17px;font-size:9px}.log-panel{background:linear-gradient(#1e0a09,#140605);border-left:1px solid #ffffff12;flex-direction:column;min-height:0;display:flex}.log-panel>header{border-bottom:1px solid #ffffff12;flex:none;justify-content:space-between;align-items:center;height:58px;padding:0 17px;display:flex}.log-panel>header strong,.log-panel>header small{display:block}.log-panel>header strong{font-size:12px}.log-panel>header small{color:#ffffff52;letter-spacing:.12em;margin-top:3px;font-size:7px}.log-panel>header button{color:#ffffff80;cursor:pointer;background:0 0;font-size:22px;display:none}.log-list{scrollbar-width:thin;scrollbar-color:#5e2b25 transparent;flex:1;min-height:0;padding:8px 16px;overflow:auto}.log-item{border-bottom:1px solid #ffffff0b;gap:9px;padding:10px 2px;display:flex}.log-item>i{background:#75443d;border-radius:50%;flex:none;width:5px;height:5px;margin-top:6px}.log-item p{color:#fff5e494;margin:0;font-size:9px;line-height:1.5}.log-item time{color:#fff3;font-size:7px}.log-win>i{background:var(--gold);box-shadow:0 0 7px #f5c86180}.log-win p{color:#e9cb86}.log-system>i{background:#3b9874}.log-panel>footer{color:#ffffff40;border-top:1px solid #ffffff0f;justify-content:space-between;padding:14px 16px;font-size:7px;display:flex}.toast{z-index:100;color:#3b2116;text-align:center;background:linear-gradient(#fff3cf,#edcc7d);border:1px solid #ffffffb3;border-radius:10px;min-width:220px;max-width:70vw;padding:11px 17px;font-size:10px;font-weight:600;animation:.2s ease-out toast-in;position:fixed;top:79px;left:50%;transform:translate(-50%);box-shadow:0 12px 28px #0000004d}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,-8px)}}@media (width<=1100px){.game-body{grid-template-columns:1fr}.log-panel{z-index:80;width:280px;transition:transform .2s;position:fixed;top:64px;bottom:0;right:0;transform:translate(105%);box-shadow:-15px 0 35px #00000059}.log-panel.log-open{transform:translate(0)}.log-panel>header button{display:block}}@media (width<=820px){.landing{grid-template-columns:1fr;gap:48px;padding:60px 24px 52px}.hero-copy{text-align:center;margin:0 auto}.brand-pill{margin-inline:auto}.hero-copy h1{font-size:clamp(64px,15vw,96px)}.hero-copy>p{margin-inline:auto}.feature-row{justify-content:center}.entry-card{max-width:440px;margin:0 auto}.landing-sun{top:18%;left:50%;transform:translate(-50%,-50%)}.game-shell{min-height:620px}.game-header{grid-template-columns:1fr auto;height:56px;padding:0 11px}.table-brand small,.online-state,.room-code small,.room-code span{display:none}.table-brand>span{width:30px;height:30px}.table-brand strong{font-size:12px}.room-code{grid-area:1/2;height:34px;padding:0 9px}.room-code strong{font-size:14px}.header-actions{display:none}.arena{padding:8px}.felt{border-width:6px;border-radius:24px;min-height:550px}.felt:after{border-radius:15px;inset:9px}.opponent{width:150px;top:51px}.opponent-left{left:19px}.opponent-right{right:19px}.opponent-main{gap:6px;width:130px;padding:5px 7px 5px 5px}.opponent-right .opponent-main{padding:5px 5px 5px 7px}.avatar-wrap{width:39px;height:39px}.avatar{font-size:13px}.player-copy strong{font-size:10px}.player-copy span{font-size:7px}.opponent-hand{top:51px;left:7px}.opponent-right .opponent-hand{right:7px}.played-cards{top:103px;left:35px}.opponent-right .played-cards{right:35px}.action-bubble{top:97px;left:45px}.opponent-right .action-bubble{right:45px}.round-info{top:91px}.bottom-cards{top:17px}.lobby-panel,.bid-status,.result-panel{top:39%}.self-area{width:calc(100% - 14px);bottom:8px}.my-hand{min-height:93px;overflow:visible}.my-hand .p-card{width:clamp(46px,10vw,61px);margin-left:clamp(-34px,-4.8vw,-22px)}.card-corner strong{font-size:15px}.card-corner em{font-size:12px}.card-center{font-size:24px}.action-bar{gap:5px}.action-bar button{min-width:67px;height:35px;padding:0 10px;font-size:10px}.action-tip{display:none}.log-panel{top:56px}}@media (width<=540px){.landing{padding:50px 15px 48px}.hero-copy h1{font-size:62px}.hero-copy>p{font-size:14px}.feature-row div{flex:1;min-width:0;padding-right:10px}.feature-row div+div{padding-left:10px}.feature-row strong{font-size:11px}.feature-row span{font-size:8px}.entry-card>header,.entry-card form{padding-inline:24px}.entry-card-decor{right:20px}.table-brand div{display:none}.table-brand>span{font-size:14px}.game-header{grid-template-columns:40px 1fr}.room-code{grid-column:2;justify-self:center;transform:translate(-20px)}.felt-pattern{width:300px;height:300px}.felt-pattern:after{font-size:20px}.opponent{width:125px;top:53px}.opponent-left{left:13px}.opponent-right{right:13px}.opponent-main{width:115px}.player-copy span{display:none}.opponent-hand b{margin-left:4px}.opponent-right .opponent-hand b{margin-right:4px}.played-cards{left:28px}.opponent-right .played-cards{right:28px}.played-cards .p-card{width:31px;margin-left:-21px}.opponent-right .played-cards .p-card{margin-right:-21px}.combo-tag,.bottom-cards>span{display:none}.round-info{gap:5px}.round-info span{font-size:7px}.lobby-panel{width:calc(100% - 48px);padding-inline:18px}.lobby-panel h2{font-size:17px}.result-panel{width:calc(100% - 44px);padding:18px 20px}.result-panel h2{font-size:16px}.self-summary{width:172px}.my-hand{min-height:84px;padding-inline:2px}.my-hand .p-card{width:49px;margin-left:-31px}.card-selected{transform:translateY(-13px)!important}.action-bar button{min-width:62px}.play-action{min-width:96px!important}}@media (height<=720px) and (width>=821px){.game-shell{min-height:600px}.arena{padding:10px}.felt{min-height:520px}.opponent{top:42px}.bottom-cards{top:15px}.round-info{top:88px}.self-area{bottom:5px}.my-hand{min-height:90px}.my-hand .p-card{width:59px}.lobby-panel,.bid-status,.result-panel{top:40%}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.hero-logo{aspect-ratio:1;z-index:1;object-fit:contain;filter:drop-shadow(0 18px 30px #0514245c);width:clamp(118px,14vw,220px);position:absolute;top:clamp(20px,5vh,62px);left:clamp(24px,4vw,70px)}.game-shell{color:#fff8e8;background:#020815;min-height:360px}.game-header{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:linear-gradient(#030d1ef7,#030f20d6);border-bottom-color:#d8b4662e;flex:0 0 54px;height:54px;padding:0 clamp(10px,2vw,24px);box-shadow:0 8px 26px #00000059}.table-brand img{object-fit:contain;filter:drop-shadow(0 4px 7px #00000059);width:38px;height:38px}.table-brand strong{color:#f6d48a}.table-brand small{color:#dceaf97a}.room-code{color:#f8dea1;background:#0a1e34c2;border-color:#e3be7047;min-height:38px}.room-code span{align-items:center;gap:4px;display:flex}.header-actions{gap:6px}.header-actions>button{color:#e0ebf8a1;background:#ffffff09;border-color:#ffffff1a;border-radius:10px;place-items:center;width:34px;height:34px;padding:0;display:grid}.header-actions>button:hover,.header-actions>button.hud-active{color:#f8d78d;background:#ecbe601a;border-color:#f4cf7e57}.online-state{align-items:center;gap:5px;display:flex}.game-body{grid-template-columns:minmax(0,1fr) 270px}.arena{background:#030b17 url(/assets/hawaii-table-bg.png) 50%/cover no-repeat;padding:0;position:relative;overflow:hidden}.felt{background:linear-gradient(#020a160f,#02091408 55%,#01050c61);border:0;border-radius:0;min-height:0;box-shadow:inset 0 -40px 80px #00000038}.felt:after{display:none}.felt-pattern{aspect-ratio:1;opacity:.13;width:min(28vw,360px);height:auto;box-shadow:none;filter:saturate(.65);background:url(/assets/hawaii-strategy-logo.png) 50%/contain no-repeat;border:0;border-radius:0;top:52%}.felt-pattern:after{display:none}.dealer{z-index:3;pointer-events:none;filter:drop-shadow(0 18px 22px #0000006b);height:min(62vh,580px);position:absolute;bottom:25%;left:50%;transform:translate(-50%)}.dealer>img{object-fit:contain;object-position:center bottom;width:auto;height:100%;display:block}.dealer-caption{color:#eaf4ff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#041427db;border:1px solid #e1c27f52;border-radius:5px 14px 14px;width:clamp(158px,18vw,230px);padding:10px 13px;position:absolute;top:33%;left:calc(100% - 26px);box-shadow:0 12px 28px #00000047}.dealer-caption:before{content:"";border-top:0 solid #0000;border-bottom:10px solid #0000;border-left:0 solid #0000;border-right:9px solid #e1c27f52;position:absolute;top:-1px;left:-9px}.dealer-caption span{color:#d9b970;letter-spacing:.08em;font-size:8px;display:block}.dealer-caption p{margin:5px 0 0;font-size:10px;line-height:1.45}.dealer-deal>img{animation:.48s ease-out both dealer-deal}.dealer-win>img{animation:.62s ease-out both dealer-win}@keyframes dealer-deal{0%{opacity:.35;transform:translate(-7px,7px)scale(.98)}65%{opacity:1;transform:translate(3px,-2px)scale(1.015)}to{transform:none}}@keyframes dealer-win{0%{opacity:.35;transform:translateY(9px)}60%{opacity:1;transform:translateY(-5px)}to{transform:none}}.opponent{top:54px}.opponent-main,.self-summary{background:#031324d1;border-color:#cfe0f52e}.turn-timer:after{background:#071b32}.bottom-cards{z-index:8;top:18px}.round-info{z-index:8;top:92px}.last-combo{z-index:7}.lobby-panel{background:#03182ddb}.bid-status{z-index:9}.ghost-action{background:#04172ae6}.waiting-action{background:#031426b3}.log-panel{background:linear-gradient(#061326,#030916);border-left-color:#dabb7924}.portrait-lock{display:none}@media (width<=1100px){.game-body{grid-template-columns:1fr}.log-panel{top:54px}}@media (orientation:landscape) and (height<=600px){.game-shell{min-height:0}.game-header{flex-basis:44px;grid-template-columns:minmax(105px,1fr) auto minmax(260px,1fr);height:44px;padding:0 8px}.table-brand{gap:6px}.table-brand img{width:32px;height:32px}.table-brand strong{font-size:11px}.table-brand small{display:none}.room-code{height:32px;min-height:32px;padding:0 9px}.room-code small,.room-code span{display:none}.room-code strong{font-size:13px}.header-actions{display:flex}.header-actions>button{border-radius:8px;width:29px;height:29px}.online-state{margin-right:2px;font-size:8px}.log-panel{top:44px}.felt{min-height:0}.dealer{height:58vh;bottom:25%}.dealer-caption{width:168px;padding:7px 9px;top:32%}.dealer-caption p{margin-top:3px;font-size:8px}.opponent{width:175px;top:42px}.opponent-left{left:16px}.opponent-right{right:16px}.opponent-main{width:142px;padding:5px}.avatar-wrap{width:39px;height:39px}.player-copy strong{font-size:10px}.player-copy span{font-size:7px}.opponent-hand{top:48px}.played-cards{top:95px}.action-bubble{top:91px}.bottom-cards{top:7px}.bottom-cards .p-card{width:29px}.round-info{top:68px}.round-info strong{padding:3px 7px}.lobby-panel,.bid-status,.result-panel{top:48%}.lobby-panel{width:310px;padding:15px 20px}.lobby-panel h2{margin:5px 0 3px;font-size:15px}.lobby-panel p{font-size:8px}.seat-dots{margin:10px 0}.self-area{width:calc(100% - 12px);bottom:2px}.self-summary{z-index:18;width:164px;margin:0;padding-right:42px;position:absolute;bottom:2px;left:4px}.self-summary .avatar-wrap{width:36px;height:36px}.my-hand{align-items:flex-end;min-height:106px;padding:8px 190px 34px 170px;overflow:visible}.my-hand .p-card{width:clamp(43px,6.2vw,54px);margin-left:clamp(-35px,-3.9vw,-25px)}.card-corner strong{font-size:14px}.card-corner em{font-size:10px}.card-center{font-size:21px}.action-bar{z-index:18;min-height:38px;margin:0;position:absolute;bottom:1px;right:3px}.action-bar button{min-width:59px;height:32px;padding:0 9px;font-size:9px}.play-action{min-width:84px!important}.waiting-action{text-overflow:ellipsis;white-space:nowrap;max-width:150px;padding:7px 11px;overflow:hidden}.result-panel{width:300px;padding:13px 20px}.result-icon{width:30px;height:30px;margin:4px auto 2px}.result-panel h2{margin:3px 0;font-size:15px}.score-board{margin:7px 0 8px}.score-board div{padding:4px}}@media (orientation:landscape) and (width>=761px) and (height<=600px){.bottom-cards{left:calc(50% - 205px)}.round-info{top:72px;left:calc(50% + 190px)}}@media (orientation:landscape) and (height<=430px) and (width<=760px){.game-header{grid-template-columns:44px auto 1fr}.table-brand div{display:none}.header-actions{gap:3px}.header-actions>button{width:27px;height:27px}.online-state{display:none}.dealer{height:55vh;bottom:27%}.dealer-caption{display:none}.opponent{top:38px}.opponent-left{left:8px}.opponent-right{right:8px}.opponent-main{width:125px}.my-hand{padding-left:150px;padding-right:178px}.self-summary{width:148px}}@media (orientation:portrait) and (width<=900px){.portrait-lock{z-index:500;color:#f8dfa4;background:radial-gradient(circle at 50% 35%,#0e3256,#020814 70%);flex-direction:column;justify-content:center;align-items:center;gap:9px;display:flex;position:fixed;inset:0}.portrait-lock img{object-fit:contain;width:116px;height:116px}.portrait-lock strong{font-size:20px}.portrait-lock span{color:#e0edfb94;font-size:12px}}.community-board{z-index:8;pointer-events:none;width:100%;height:150px;position:absolute;top:12px;left:0}.pot-label{color:#f9dc94;letter-spacing:.04em;background:#031426ad;border:1px solid #f8d89233;border-radius:999px;padding:5px 12px;font-size:10px;font-weight:700;position:absolute;top:0;left:50%;transform:translate(-50%)}.community-cards{align-items:center;gap:4px;display:flex;position:absolute;top:30px;left:calc(50% - 205px)}.community-placeholder{color:#e5effa66;border:1px dashed #e0c27e3d;border-radius:8px;place-items:center;width:118px;padding:10px 0;font-size:9px;display:grid}.community-board .round-info{white-space:nowrap;top:35px;left:calc(50% + 190px);transform:none}.opponent-slot{z-index:10;width:170px;position:absolute;top:52px}.seat-position-0{left:3%}.seat-position-1{top:42px;left:20%}.seat-position-2{top:42px;left:38%}.seat-position-3{right:3%}.seat-position-4{top:42px;right:20%}.seat-position-5{top:42px;right:38%}.seat-position-6{top:18px;left:28%}.seat-position-7{top:18px;right:28%}.opponent-slot .opponent-main{width:155px}.opponent-slot .opponent-hand{top:53px;left:17px}.opponent-slot .opponent-hand .p-card{width:27px}.opponent-slot .action-bubble{top:102px;left:65px}.opponent-slot.seat-folded{opacity:.45;filter:grayscale(.85)}.dealer-button{color:#3b2413;background:linear-gradient(145deg,#fff0b2,#d8a63c);border:1px solid #fff0b6;border-radius:50%;place-items:center;width:19px;height:19px;font-size:8px;font-weight:900;display:grid;position:absolute;top:-4px;right:-4px;box-shadow:0 3px 8px #00000047}.my-hand{min-height:94px}.my-hand .p-card{width:clamp(62px,7vw,78px);margin-left:-24px}.my-hand .p-card:first-child{margin-left:0}.raise-control{align-items:center;gap:7px;display:flex}.raise-control input{accent-color:#f4cb75;width:clamp(84px,13vw,145px)}.raise-control .gold-action{min-width:96px}@media (orientation:landscape) and (height<=600px){.community-board{top:7px}.community-cards{top:29px;left:calc(50% - 205px)}.community-board .round-info{top:34px;left:calc(50% + 190px)}.opponent-slot{top:42px}.seat-position-1,.seat-position-2,.seat-position-4,.seat-position-5{top:38px}.seat-position-6,.seat-position-7{top:28px}.opponent-slot .opponent-main{width:142px}.opponent-slot .opponent-hand{top:48px}.opponent-slot .action-bubble{top:91px}.my-hand{min-height:104px;padding:8px 190px 34px 170px}.my-hand .p-card{width:clamp(54px,6.8vw,64px);margin-left:-22px}.raise-control input{width:74px}.raise-control .gold-action{min-width:78px;padding:0 7px}}@media (width<=820px){.opponent-slot{width:140px}.opponent-slot .opponent-main{width:126px}.opponent-slot .opponent-hand{left:7px}.seat-position-1,.seat-position-2,.seat-position-4,.seat-position-5{display:none}.community-cards{left:calc(50% - 160px)}.community-board .round-info{left:calc(50% + 130px)}}.dealer{height:min(56vh,520px);bottom:26%;left:72%;transform:translate(-50%)scale(.92)}.dealer-caption{border-radius:14px 5px 14px 14px;top:30%;left:auto;right:calc(100% - 14px)}.dealer-caption:before{border-width:10px 0 0 9px;border-color:#0000 #0000 #0000 #e1c27f52;left:auto;right:-9px}.community-board{z-index:22;top:clamp(68px,13%,124px)}.community-cards{background:#0312226b;border:1px solid #e2c27d47;border-radius:14px;gap:7px;padding:7px 10px;top:34px;left:50%;transform:translate(-50%);box-shadow:0 10px 22px #0003,inset 0 1px #ffffff14}.community-cards .p-card{width:clamp(38px,4vw,52px)}.community-placeholder{width:150px}.community-board .round-info{top:112px;left:50%;transform:translate(-50%)}@media (orientation:landscape) and (height<=600px){.community-board{top:54px}.community-cards{gap:5px;padding:5px 8px;top:28px}.community-cards .p-card{width:clamp(34px,4.4vw,44px)}.community-board .round-info{top:91px}.dealer{height:56vh;bottom:25%;left:72%;transform:translate(-50%)scale(.9)}}@media (orientation:landscape) and (height<=430px) and (width<=760px){.community-board{top:45px}.community-cards{top:25px}.community-board .round-info{top:82px}.dealer{height:52vh;bottom:27%;left:70%}}.dealer{z-index:24;height:min(56vh,520px);bottom:4%;left:auto;right:10px;transform:none}.dealer-caption{width:clamp(150px,17vw,218px);top:27%;right:calc(100% - 10px)}.community-board{z-index:20;height:156px;top:50%;transform:translateY(-50%)}.community-cards{top:34px;left:50%}.community-board .round-info{top:112px;left:50%}.community-cards .p-card{flex:none}.opponent-hand-revealed{white-space:nowrap;align-items:center;gap:3px;display:flex}.opponent-hand-revealed .p-card{margin-left:0}.my-hand{z-index:26;position:relative}.player-copy strong,.player-copy span,.action-bubble,.round-info,.dealer-caption,.log-panel,.lobby-panel,.result-panel{text-rendering:optimizelegibility;font-family:Noto Sans SC,PingFang SC,Microsoft YaHei,system-ui,sans-serif}.player-copy strong,.player-copy span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lobby-panel,.result-panel{z-index:30}@media (orientation:landscape) and (height<=600px){.dealer{height:min(57vh,390px);bottom:3%;right:7px}.dealer-caption{width:158px;padding:7px 9px;top:24%}.community-board{height:132px;top:50%}.community-cards{top:28px}.community-board .round-info{top:91px}}@media (orientation:landscape) and (height<=430px) and (width<=760px){.dealer{height:min(53vh,260px);bottom:2%;right:3px}.dealer-caption{display:none}.community-board{height:118px;top:48%}.community-cards{top:24px}.community-board .round-info{top:80px}}
