*,*:before,*:after{box-sizing:border-box}:root{--felt0: #06100e;--felt1: #0d2a26;--felt2: #16443d;--ink: #f3efe6;--muted: #93b5ac;--amber: #ffb84a;--up: #3fe0b5;--down: #ff7f6e;--danger: #ff6b5b;--card: #f6f1e7;--card-ink: #14201e;--glass: rgba(255, 255, 255, .06);--glass-line: rgba(255, 255, 255, .12);--font-ui: "Sora", system-ui, sans-serif;--font-num: "Bricolage Grotesque", "Sora", sans-serif}body{margin:0;min-height:100vh;color:var(--ink);font-family:var(--font-ui);background:radial-gradient(ellipse 70% 60% at 50% 38%,var(--felt2) 0%,var(--felt1) 52%,var(--felt0) 100%) fixed,var(--felt0)}body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.5;background-image:radial-gradient(rgba(255,255,255,.045) 1px,transparent 1.4px);background-size:7px 7px}#root{position:relative}button,input,select{font:inherit;color:inherit}.muted{color:var(--muted)}.num{font-family:var(--font-num);font-variant-numeric:tabular-nums}.glass{background:var(--glass);border:1px solid var(--glass-line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:48px;padding:0 24px;border-radius:14px;border:0;font-weight:700;font-size:.95rem;color:#2a1a00;background:linear-gradient(180deg,#ffc766,#ffb84a);box-shadow:0 8px 24px #ffb84a47;cursor:pointer;transition:transform .15s,box-shadow .15s,opacity .15s}.btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 12px 30px #ffb84a73}.btn:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}.btn.secondary{color:var(--ink);background:var(--glass);border:1px solid rgba(255,255,255,.18);box-shadow:none}.btn.secondary:hover:not(:disabled){background:#ffffff1f;box-shadow:none}.form-group{margin-bottom:18px}.form-group label:not(.switch){display:block;margin-bottom:8px;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.form-group input[type=text]{width:100%;height:48px;padding:0 16px;border-radius:12px;border:1px solid rgba(255,255,255,.16);background:#00000047}.form-group input[type=text]:focus-visible,.btn:focus-visible,.segmented button:focus-visible,.switch input:focus-visible+.switch-track,.pile-tool:focus-visible,.notif-toggle:focus-visible,.card:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.segmented{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.segmented button{height:44px;border-radius:12px;border:1px solid rgba(255,255,255,.14);background:#ffffff0a;font-weight:600;cursor:pointer;transition:all .15s}.segmented button:hover{border-color:#fff6}.segmented button.on{background:var(--amber);color:#2a1a00;border-color:transparent;box-shadow:0 0 22px #ffb84a66}.switch{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-radius:12px;background:#0003;border:1px solid rgba(255,255,255,.1);font-size:.9rem;cursor:pointer}.switch input{position:absolute;opacity:0;pointer-events:none}.switch-track{position:relative;width:44px;height:26px;border-radius:999px;background:#ffffff2e;transition:background .2s,box-shadow .2s}.switch-track:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--ink);transition:transform .2s,background .2s}.switch input:checked+.switch-track{background:var(--amber);box-shadow:0 0 16px #ffb84a59}.switch input:checked+.switch-track:after{transform:translate(18px);background:#2a1a00}.divider{display:flex;align-items:center;gap:12px;margin:22px 0;font-size:.75rem;color:var(--muted)}.divider:before,.divider:after{content:"";flex:1;height:1px;background:#ffffff24}.error-msg{margin:12px 0 0;color:var(--danger);font-size:.9rem}.error-banner{padding:10px 14px;border-radius:12px;background:#d6382b40;border:1px solid rgba(255,107,91,.5);font-size:.85rem}.lobby,.waiting-room{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 16px;overflow:hidden}.lobby-card,.waiting-card,.winner-box{position:relative;z-index:1;width:min(440px,100%);padding:36px;border-radius:28px;background:#ffffff12;border:1px solid rgba(255,255,255,.14);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 30px 70px #0000008c}.waiting-card,.winner-box{text-align:center}.lobby-card .btn,.waiting-card .btn{width:100%}.brand{display:flex;align-items:center;gap:12px}.brand-name{font-family:var(--font-num);font-weight:700;letter-spacing:-.02em;font-size:1.7rem}.lobby-card .brand-name,.waiting-card .brand-name{font-size:2.3rem}.subtitle{margin:6px 0 26px;font-size:.9rem;color:var(--muted)}.share-link{margin:16px 0 8px;padding:12px 14px;border-radius:12px;background:#00000040;font-size:.8rem;color:var(--muted);word-break:break-all}.share-link strong{color:var(--ink);letter-spacing:.06em}.player-list{list-style:none;margin:12px 0 20px;padding:0;text-align:left}.player-list li{display:flex;align-items:center;gap:10px;padding:10px 14px;margin-bottom:6px;border-radius:12px;background:#0003}.connection-dot{width:8px;height:8px;border-radius:50%;flex:none}.connection-dot.connected{background:var(--up);box-shadow:0 0 8px var(--up)}.connection-dot.disconnected{background:var(--muted);opacity:.6}.winner-overlay{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:16px;background:#030807c7;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.winner-box{animation:pop-in .4s cubic-bezier(.2,1.2,.4,1)}.winner-box h1{margin:0 0 8px;font-family:var(--font-num);font-size:2.2rem}.winner-box p{margin:0 0 24px;color:var(--muted)}.winner-box .btn{width:auto}.float-card{position:absolute;width:150px;height:210px;border-radius:18px;display:flex;align-items:center;justify-content:center;font-family:var(--font-num);font-size:5.2rem;font-weight:700;letter-spacing:-.03em;background:linear-gradient(160deg,#17302c,#0b1b18);border:2px solid rgba(255,255,255,.1);box-shadow:0 20px 40px #00000080;opacity:.75;animation:bob 7s ease-in-out infinite}.float-card.up{border-color:#3fe0b566}.float-card.down{border-color:#ff7f6e66}.game-shell{min-height:100vh;display:flex;justify-content:center;padding:0 clamp(14px,4vw,56px) 22px}.game-board{width:min(1168px,100%);display:flex;flex-direction:column;gap:14px}.game-header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:72px;flex-wrap:wrap}.opponents{display:flex;gap:12px;flex-wrap:wrap}.header-tools{display:flex;align-items:center;gap:10px}.room-chip{padding:8px 14px;border-radius:999px;font-size:.75rem;color:var(--muted)}.room-chip b{color:var(--ink);letter-spacing:.06em}.opponent-area{display:inline-flex;align-items:center;gap:10px;padding:6px 14px 6px 6px;border-radius:999px;background:var(--glass);border:1px solid var(--glass-line);transition:border-color .2s,box-shadow .2s}.opponent-area.active{border-color:var(--amber);box-shadow:0 0 20px #ffb84a4d}.avatar{position:relative;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:700;color:#0a1714}.avatar .connection-dot{position:absolute;right:-2px;bottom:-2px;border:2px solid var(--felt1);width:11px;height:11px}.opponent-name{font-size:.85rem;font-weight:600}.opponent-count{font-size:.75rem;color:var(--muted)}.turn-tag{font-size:.7rem;font-weight:600;color:var(--amber)}.notif-toggle{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--glass);border:1px solid var(--glass-line);color:var(--muted);cursor:pointer}.notif-toggle--on{color:var(--amber);border-color:var(--amber)}.table-rail{border-radius:36px;border:1px solid rgba(255,255,255,.09);background:linear-gradient(180deg,#00000042,#0000001f);box-shadow:inset 0 2px 30px #00000073,0 1px #ffffff0d;padding:22px 24px 20px}.piles-row{display:grid;grid-template-columns:repeat(4,176px);justify-content:center;align-items:start;gap:28px}.pile-wrap{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;width:176px}.pile-label{font-size:.66rem;font-weight:600;letter-spacing:.14em}.pile-label.up{color:var(--up)}.pile-label.down{color:var(--down)}.pile-stack{position:relative;padding:12px 0 0 12px}.pile-under{position:absolute;left:0;top:0;width:140px;height:196px;border-radius:16px;background:#0f2723;border:1px solid rgba(255,255,255,.1);padding:7px 0 0 10px;font-family:var(--font-num);font-size:.82rem;font-weight:700;color:var(--muted)}.pile-slot{position:relative;width:140px;height:196px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:linear-gradient(160deg,#17302c,#0b1b18);border:2px solid rgba(255,255,255,.12);box-shadow:0 3px #08140f,0 6px #060e0b,0 16px 26px #0000008c;transition:transform .2s,filter .2s,opacity .2s}.pile-slot.up{border-color:#3fe0b573}.pile-slot.down{border-color:#ff7f6e73}.pile-top{font-family:var(--font-num);font-size:4.7rem;font-weight:700;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.pile-top{animation:land .32s .28s cubic-bezier(.2,1.3,.4,1) backwards}.pile-arrow{display:flex}.pile-slot.up .pile-arrow{color:var(--up)}.pile-slot.down .pile-arrow{color:var(--down)}.pile-slot.playable-target{cursor:pointer;border-color:var(--amber);animation:ring 1.8s ease-in-out infinite}.pile-slot.playable-target:hover,.pile-slot.playable-target:focus-visible{transform:translateY(-6px)}.pile-slot.pile-blocked{filter:saturate(.25) brightness(.7);opacity:.6}.pile-slot.pile-requested:not(.playable-target){border-style:dashed;border-color:var(--amber)}.pile-slot:focus-visible{outline:3px solid var(--amber);outline-offset:3px}.step-badge{position:absolute;top:-13px;right:-12px;padding:3px 10px;border-radius:999px;font-size:.8rem;font-weight:700;color:#111;box-shadow:0 4px 12px #0006;animation:pop-in .35s cubic-bezier(.2,1.4,.4,1)}.step-great{background:#38e8a8}.step-okay{background:#ffd24a}.step-poor{background:#ff9a3d}.step-bad{background:#d6382b;color:#fff}.pile-count{font-size:.72rem;color:var(--muted);background:none;border:0;padding:2px 6px;cursor:pointer;text-decoration:underline dotted rgba(255,255,255,.3);text-underline-offset:3px}.pile-count:disabled{cursor:default;text-decoration:none}.pile-count:hover:not(:disabled),.pile-count.on{color:var(--ink)}.pile-slot{cursor:pointer}.pile-tools{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;max-width:176px}.pile-tool{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:#ffffff0a;font-size:.7rem;color:var(--muted);white-space:nowrap;cursor:pointer;transition:all .15s}.pile-tool:hover:not(:disabled){color:var(--ink);border-color:#fff6}.pile-tool.on{color:var(--amber);border-color:var(--amber);background:#ffb84a1f}.pile-tool:disabled{opacity:.35;cursor:not-allowed}.pile-asking{max-width:170px;text-align:center;font-size:.7rem;color:var(--amber)}.pile-history{position:absolute;top:100%;margin:6px 0 0;z-index:5;width:196px;padding:10px;list-style:none;display:flex;flex-wrap:wrap;gap:5px;max-height:150px;overflow-y:auto;border-radius:14px;background:#0a1714;border:1px solid rgba(255,255,255,.14);box-shadow:0 18px 40px #0009;font-family:var(--font-num);font-size:.75rem;font-weight:600;animation:pop-in .22s ease-out}.pile-history li{padding:2px 8px;border-radius:7px;background:#ffffff14}.pile-history li.start{opacity:.5}.pile-history li.latest{outline:2px solid var(--amber)}.status-row{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.turn-pill{display:inline-flex;align-items:center;gap:10px;padding:10px 18px;border-radius:999px;font-size:.85rem;font-weight:600;background:var(--glass);border:1px solid var(--glass-line);color:var(--muted)}.turn-pill.your-turn{color:var(--amber)}.turn-pill .dot{width:8px;height:8px;border-radius:50%;background:var(--muted)}.turn-pill.your-turn .dot{background:var(--amber);animation:dot 1.4s ease-in-out infinite}.turn-pill .reconnecting{color:var(--down);font-weight:500}.progress-wrap{flex:1;min-width:200px}.progress-labels{display:flex;justify-content:space-between;margin-bottom:6px;font-size:.75rem;color:var(--muted)}.progress-labels b{color:var(--ink);font-size:.95rem}.progress{position:relative;height:12px;border-radius:999px;background:#00000059;border:1px solid rgba(255,255,255,.1);overflow:hidden}.progress-fill{position:absolute;inset:0 auto 0 0;border-radius:999px;background:linear-gradient(90deg,#2fc9a0,#ffb84a);box-shadow:0 0 16px #ffb84a80;transition:width .4s ease-out}.progress-ticks{position:absolute;inset:0;background-image:linear-gradient(90deg,rgba(0,0,0,.35) 1px,transparent 1px);background-size:10.2% 100%}.chip{padding:10px 18px;border-radius:999px;font-size:.8rem;color:var(--muted);background:var(--glass);border:1px solid var(--glass-line)}.chip b{color:var(--ink);font-size:.95rem}.last-turn{text-align:center;font-size:.8rem;color:var(--muted);min-height:1.2em}.last-turn b{color:var(--ink)}.player-area{display:flex;flex-direction:column;align-items:center;gap:18px}.zone-label{font-size:.75rem;color:var(--muted)}.hand-row{display:flex;align-items:flex-end;justify-content:center;padding:34px 0 30px;min-height:190px}.card{position:relative;flex:none;width:88px;height:124px;margin-left:-12px;border-radius:12px;background:var(--card);color:var(--card-ink);overflow:hidden;box-shadow:0 10px 22px #00000080;transform:translateY(var(--y, 0)) rotate(var(--r, 0deg));transition:transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .2s,opacity .2s;-webkit-user-select:none;user-select:none}.card:first-child{margin-left:0}.card-value{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-num);font-size:2.9rem;font-weight:700;letter-spacing:-.03em}.card-corner{position:absolute;left:8px;top:6px;font-family:var(--font-num);font-size:.8rem;font-weight:700}.card-band{position:absolute;left:0;right:0;bottom:0;height:7px}.card-low{background:#2fc9a0}.card-mid{background:#ffb84a}.card-high{background:#ff7f6e}.card.clickable{cursor:pointer;touch-action:none}.drag-ghost{position:fixed;left:0;top:0;margin:0;z-index:1000;pointer-events:none;cursor:grabbing;animation:none;box-shadow:0 0 0 3px var(--amber),0 24px 36px #0000008c}.card.clickable:hover{transform:translateY(calc(var(--y, 0px) - 16px)) rotate(0);z-index:3}.card.unplayable{opacity:.4;cursor:not-allowed}.card.selected{transform:translateY(-30px) rotate(0);z-index:4;box-shadow:0 0 0 3px var(--amber),0 0 34px #ffb84a8c,0 20px 30px #00000080}.card.selected:after{content:"";position:absolute;inset:0;background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,.7) 50%,transparent 65%);transform:translate(-120%);animation:sheen 2.6s ease-in-out infinite}.action-row{display:flex;justify-content:center;align-items:center;gap:14px;flex-wrap:wrap}.turn-counter{display:inline-flex;align-items:center;gap:10px;height:48px;padding:0 18px;border-radius:14px;font-size:.8rem;color:var(--muted)}.turn-counter b{color:var(--ink)}.pips{display:flex;gap:5px}.pip{width:10px;height:10px;border-radius:50%;border:2px solid var(--muted)}.pip.filled{background:var(--amber);border-color:var(--amber)}@keyframes ring{0%,to{box-shadow:0 3px #08140f,0 6px #060e0b,0 0 0 3px #ffb84a8c,0 0 22px #ffb84a47}50%{box-shadow:0 3px #08140f,0 6px #060e0b,0 0 0 4px #ffb84af2,0 0 44px #ffb84a8c}}@keyframes pop-in{0%{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}@keyframes sheen{0%,55%{transform:translate(-120%)}to{transform:translate(120%)}}@keyframes dot{0%,to{box-shadow:0 0 #ffb84ab3}50%{box-shadow:0 0 0 7px #ffb84a00}}@keyframes bob{0%,to{transform:translateY(0) rotate(var(--r, 0deg))}50%{transform:translateY(-16px) rotate(calc(var(--r, 0deg) + 2deg))}}@keyframes land{0%{transform:scale(1.35);opacity:.3}}@keyframes deal-in{0%{opacity:0;transform:translateY(40px) rotate(0) scale(.9)}}.hand-row .card{animation:deal-in .4s cubic-bezier(.2,.9,.3,1) backwards}.hand-row .card:nth-child(2){animation-delay:.04s}.hand-row .card:nth-child(3){animation-delay:.08s}.hand-row .card:nth-child(4){animation-delay:.12s}.hand-row .card:nth-child(5){animation-delay:.16s}.hand-row .card:nth-child(6){animation-delay:.2s}.hand-row .card:nth-child(7){animation-delay:.24s}.hand-row .card:nth-child(8){animation-delay:.28s}@media(max-width:960px){.piles-row{grid-template-columns:repeat(2,176px)}}@media(max-height:500px)and (orientation:landscape){.table-rail{padding:12px 8px}.piles-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.pile-wrap{width:auto}.pile-under,.pile-slot{width:100px;height:112px;border-radius:12px}.pile-top{font-size:3rem}.pile-tool{padding:4px 6px;font-size:.62rem;gap:3px}}.segmented.three{grid-template-columns:repeat(3,1fr)}.hint-text{margin:6px 0 0;font-size:.75rem;color:var(--muted)}.pile-tool.offer.on{color:var(--up);border-color:var(--up);background:#3fe0b51f}.pile-offering{max-width:170px;text-align:center;font-size:.7rem;color:var(--up)}.pile-slot.pile-offered:not(.playable-target):not(.pile-requested){border-color:var(--up);box-shadow:0 0 18px #3fe0b547}.pile-slot.pile-fire{border-color:#ff7f6e;box-shadow:0 0 22px #ff7f6e80}.fire-badge{position:absolute;top:6px;right:8px;font-size:1.1rem}.pile-slot.pile-hint{outline:3px dashed var(--amber);outline-offset:4px;animation:dot 1.2s ease-in-out infinite}.chip-btn{display:inline-flex;align-items:center;gap:6px;padding:9px 14px;border-radius:999px;border:1px solid var(--glass-line);background:var(--glass);color:var(--ink);font-size:.8rem;cursor:pointer}.chip-btn:hover:not(:disabled),.chip-btn.on{border-color:var(--amber);color:var(--amber)}.chip-btn:disabled{opacity:.4;cursor:not-allowed}.rules-chip{color:var(--amber)}.talk-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.phrase-picker{position:relative}.phrase-list{position:absolute;bottom:calc(100% + 8px);left:0;z-index:20;margin:0;padding:6px;list-style:none;min-width:220px;max-width:calc(100vw - 32px);border-radius:14px;background:#0a1714;border:1px solid rgba(255,255,255,.14);box-shadow:0 18px 40px #0009;animation:pop-in .18s ease-out}.phrase-list button{width:100%;text-align:left;padding:10px 12px;border:0;border-radius:9px;background:transparent;color:var(--ink);font-size:.85rem;cursor:pointer}.phrase-list button:hover{background:#ffffff14}.phrase-bubble{position:absolute;top:calc(100% + 6px);left:8px;z-index:15;padding:6px 12px;border-radius:12px;background:var(--ink);color:#0a1714;font-size:.78rem;font-weight:600;white-space:nowrap;box-shadow:0 8px 20px #00000073;animation:pop-in .25s cubic-bezier(.2,1.4,.4,1)}.phrase-bubble.mine{position:static;display:inline-block}.opponent-area{position:relative}.opening-banner{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;padding:10px 14px;border-radius:14px;background:var(--glass);border:1px solid var(--glass-line);font-size:.85rem;text-align:center}.opening-banner b{color:var(--ink)}.opening-banner .chip-btn.on{background:#ffffff1f;font-weight:700}.opening-banner .chip-btn.agree{border-color:var(--up);color:var(--up)}.opening-banner .chip-btn.decline{border-color:var(--down);color:var(--down)}.hint-msg{text-align:center;font-size:.85rem;font-weight:600;color:var(--amber)}.recap{margin:16px 0;display:flex;flex-direction:column;gap:8px;text-align:left;font-size:.78rem}.recap-pile{display:flex;gap:10px;align-items:baseline}.recap-pile b{flex:none;width:56px}.recap-pile b.up{color:var(--up)}.recap-pile b.down{color:var(--down)}.recap-cards{font-family:var(--font-num);color:var(--muted);line-height:1.5;word-break:break-word}.recap-players{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;color:var(--muted)}.recap-players b{color:var(--ink)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}@media(max-width:720px){.lobby-card,.waiting-card,.winner-box{padding:26px 22px}.float-card{display:none}.game-header{min-height:56px}.table-rail{padding:16px 8px 14px;border-radius:28px}.piles-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 0;justify-items:center}.pile-wrap{width:auto;gap:4px}.pile-under,.pile-slot{width:100px;height:110px;border-radius:12px}.pile-top{font-size:3rem}.pile-history{width:170px}.pile-tool{padding:5px 8px;font-size:.66rem;gap:4px}.pile-tools{gap:3px;max-width:100%}.phrase-list{left:auto;right:0}.status-row{gap:12px}.progress-wrap{min-width:140px;order:3;flex-basis:100%}.hand-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:18px 4px 4px;min-height:0}.card{width:100%;height:84px;margin-left:0;transform:none;border-radius:10px}.card-value{font-size:2rem}.card-corner{font-size:.65rem;left:6px;top:4px}.card.clickable:hover{transform:none}.card.selected{transform:translateY(-14px)}.player-area{gap:6px;align-items:stretch}.action-row{gap:8px;padding:4px 0 8px}.action-row .turn-counter{flex:1 1 100%;order:-1;height:36px;justify-content:center}.action-row .btn{flex:1 1 0;height:48px}}
