.game-loading,.game-board .game-loading-inner{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--felt-dark)}.game-loading-inner{min-height:auto;text-align:center;color:#f4efe4b3}.game-loading-suits{display:block;font-size:1.5rem;color:var(--gold);margin-bottom:.75rem;letter-spacing:.5rem}.home{min-height:100vh;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.home-bg{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at 30% 20%,rgba(201,162,39,.08) 0%,transparent 50%),radial-gradient(ellipse at 70% 80%,rgba(107,29,58,.12) 0%,transparent 50%),var(--felt-dark)}.home-content{position:relative;z-index:1;max-width:480px;width:100%;padding:2rem 1.5rem;text-align:center}.home-suits{display:flex;justify-content:center;gap:1rem;font-size:2rem;margin-bottom:.5rem}.suit.red{color:var(--red-suit)}.suit.black{color:var(--cream);opacity:.7}.home-title{font-family:var(--font-display);font-size:3.5rem;font-weight:700;color:var(--gold);letter-spacing:.02em;line-height:1.1}.home-subtitle{color:#f4efe4a6;margin-top:.5rem;font-size:1rem}.home-actions{display:flex;flex-direction:column;gap:.75rem;margin:2rem 0}.home-form{display:flex;flex-direction:column;gap:1rem;margin:2rem 0;text-align:left}.home-form label{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:#f4efe4b3}.home-form input{padding:.75rem 1rem;border-radius:8px;border:1px solid rgba(201,162,39,.3);background:#0000004d;color:var(--cream);font-size:1rem}.home-form input:focus{border-color:var(--gold);outline:none}.code-input{font-family:monospace;font-size:1.25rem!important;letter-spacing:.2em;text-transform:uppercase}.rules-preview{margin-top:2.5rem;text-align:left;padding:1.25rem;background:#0003;border-radius:12px;border:1px solid rgba(201,162,39,.15)}.rules-preview h2{font-family:var(--font-display);font-size:1.1rem;color:var(--gold);margin-bottom:.75rem}.rules-preview ul{list-style:none;font-size:.85rem;color:#f4efe499;line-height:1.7}.rules-preview li:before{content:"♦ ";color:var(--gold);font-size:.7rem}.rules-link{display:inline-block;margin-top:.75rem;font-size:.8rem;color:var(--gold);text-decoration:none}.rules-link:hover{text-decoration:underline}.btn{padding:.75rem 1.5rem;border-radius:8px;font-size:.95rem;font-weight:600;transition:transform .15s,background .15s,opacity .15s}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--gold);color:var(--felt-dark)}.btn-primary:hover:not(:disabled){background:var(--gold-light)}.btn-secondary{background:#c9a22726;color:var(--gold);border:1px solid rgba(201,162,39,.35)}.btn-secondary:hover:not(:disabled){background:#c9a22740}.btn-ghost{background:transparent;color:#f4efe499}.btn-ghost:hover:not(:disabled){color:var(--cream)}.btn-sm{padding:.4rem .8rem;font-size:.8rem}.status-banner{padding:.75rem 1rem;border-radius:8px;margin:1rem 0;font-size:.9rem}.status-banner.error{background:#c41e3a33;border:1px solid var(--red-suit);color:#ff8a9b}.status-banner.connecting{background:#c9a2271a;color:var(--gold)}.lobby{min-height:100vh;max-width:800px;margin:0 auto;padding:1.5rem}.lobby-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.lobby-header h2{font-family:var(--font-display);color:var(--gold)}.invite-box{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.25rem;background:#00000040;border-radius:12px;border:1px solid rgba(201,162,39,.25)}.invite-code{display:flex;flex-direction:column;gap:.25rem}.invite-label{font-size:.75rem;color:#f4efe480;text-transform:uppercase;letter-spacing:.1em}.invite-value{font-family:monospace;font-size:2rem;font-weight:700;color:var(--gold);letter-spacing:.3em}.invite-hint{font-size:.85rem;color:#f4efe473;margin:.75rem 0 1.5rem}.lobby-body{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;margin-bottom:1.5rem}@media(max-width:600px){.lobby-body{grid-template-columns:1fr}}.lobby-camera-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem}.players-list h3,.lobby-video-section h3{font-size:.85rem;color:#f4efe480;text-transform:uppercase;letter-spacing:.08em;margin-bottom:.75rem}.player-row{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:#0003;border-radius:8px;margin-bottom:.5rem;border:1px solid transparent}.player-row.ready{border-color:#2a6b5580;background:#2a6b5526}.player-name{font-weight:600}.host-badge{font-size:.7rem;background:var(--burgundy);color:var(--cream);padding:.15rem .5rem;border-radius:4px;margin-left:.5rem}.player-status{font-size:.8rem;color:#f4efe480}.lobby-actions{display:flex;gap:.75rem;justify-content:center}.camera-error{color:#ff8a9b;font-size:.85rem;margin-bottom:.5rem}.video-panel{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.video-tile{position:relative;width:var(--video-w);height:var(--video-h);border-radius:8px;overflow:hidden;background:#0006;border:2px solid rgba(201,162,39,.2)}.video-tile-local{border-color:var(--gold)}.video-feed{width:100%;height:100%;object-fit:cover;background:#000;display:block}.video-mirrored{transform:scaleX(-1)}.video-placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:.6rem;color:#f4efe466;pointer-events:none}.video-name{position:absolute;bottom:0;left:0;right:0;padding:.2rem .4rem;background:#0009;font-size:.65rem;text-align:center}.card{width:var(--card-w);height:var(--card-h);background:var(--card-white);border-radius:9px;border:1px solid rgba(0,0,0,.1);box-shadow:0 2px 8px var(--shadow);position:relative;flex-shrink:0;transition:transform .15s,box-shadow .15s;padding:0}.card:hover:not(:disabled){transform:translateY(-7px);box-shadow:0 6px 16px var(--shadow)}.card-selected{transform:translateY(-14px)!important;box-shadow:0 0 0 2px var(--gold),0 8px 20px var(--shadow)!important}.card-sm{width:var(--card-sm-w);height:var(--card-sm-h);font-size:.72rem}.card-back{background:linear-gradient(135deg,var(--burgundy) 0%,#4a1028 100%);cursor:default}.card-back-pattern{width:100%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 4px,rgba(201,162,39,.15) 4px,rgba(201,162,39,.15) 8px),repeating-linear-gradient(-45deg,transparent,transparent 4px,rgba(201,162,39,.1) 4px,rgba(201,162,39,.1) 8px);border-radius:7px}.card-corner{position:absolute;display:flex;flex-direction:column;align-items:center;line-height:1;font-size:.82rem;font-weight:700}.card-corner.top-left{top:4px;left:5px}.card-corner.bottom-right{bottom:4px;right:5px;transform:rotate(180deg)}.card-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.card-suit-large{font-size:1.85rem}.card-sm .card-suit-large{font-size:1.15rem}@media(min-width:1400px){.card-suit-large{font-size:2.1rem}.card-sm .card-suit-large{font-size:1.35rem}}.red{color:var(--red-suit)}.black{color:var(--black-suit)}.card-joker{background:linear-gradient(135deg,#2d1b69,#1a0f3c)}.card-joker-content{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--gold)}.card-joker-star{font-size:1.7rem}.card-joker-text{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.game-board{min-height:100vh;display:flex;flex-direction:column;background:radial-gradient(ellipse at center,var(--felt-light) 0%,var(--felt) 40%,var(--felt-dark) 100%);padding:.75rem;position:relative;--card-w: 80px;--card-h: 112px;--card-sm-w: 54px;--card-sm-h: 76px;--video-w: 120px;--video-h: 90px;--hand-overlap: -22px;--hand-min-h: 155px}.game-top-bar{display:flex;justify-content:space-between;align-items:center;padding:.25rem .5rem}.round-info{display:flex;align-items:center;gap:.75rem}.round-badge{background:var(--burgundy);color:var(--cream);padding:.5rem 1.1rem;border-radius:8px;font-size:1.05rem;font-weight:700;letter-spacing:.5px;box-shadow:0 2px 4px #0003}.round-contract{font-family:var(--font-display);color:var(--gold);font-size:1.6rem;font-weight:700;text-shadow:0 2px 4px rgba(0,0,0,.4);white-space:nowrap}.round-info{display:flex;align-items:center;gap:1.1rem;background:#0006;padding:.5rem 1.2rem;border-radius:12px;border:2px solid rgba(201,162,39,.35);box-shadow:0 6px 16px #00000059;min-height:2.2rem}.game-top-actions{display:flex;gap:.25rem}.game-board .video-panel{position:absolute;top:3rem;right:.75rem;z-index:10}.opponents-bar{display:flex;justify-content:center;gap:.75rem;padding:.5rem;flex-wrap:wrap}.opponent-chip{display:flex;align-items:center;gap:.5rem;padding:.4rem .8rem;background:#0000004d;border-radius:20px;font-size:.8rem;border:1px solid transparent}.opponent-chip.active{border-color:var(--gold);background:#c9a22726}.opponent-chip.laid-down{border-color:#2a6b5599}.opponent-cards{color:#f4efe480;font-size:.75rem}.dealer-dot{font-size:.7rem}.table-center{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.5rem;min-height:200px}@media(min-width:1400px){.table-center{gap:2rem}}.deck-area{display:flex;gap:2rem;align-items:center}@media(min-width:1400px){.deck-area{gap:2.5rem}}.deck-pile{position:relative;background:none;padding:0}.pile-count{position:absolute;bottom:-1.2rem;left:50%;transform:translate(-50%);font-size:.7rem;color:#f4efe480}.discard-pile button{background:none;padding:0}.empty-pile{width:var(--card-w);height:var(--card-h);border:2px dashed rgba(244,239,228,.2);border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:.65rem;color:#f4efe44d}.table-melds{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;max-width:90%}.meld-group{background:#0003;border-radius:8px;padding:.5rem;border:1px solid rgba(201,162,39,.15)}.meld-label{font-size:.65rem;color:var(--gold);text-transform:uppercase;letter-spacing:.08em;display:block;margin-bottom:.35rem}.meld-cards{display:flex;gap:3px;align-items:center}.meld-add-btn{background:#c9a22733;color:var(--gold);border:1px dashed var(--gold);border-radius:4px;padding:.25rem .5rem;font-size:.65rem;margin-left:.25rem}.turn-indicator{text-align:center;padding:.5rem;font-size:.9rem}.my-turn{color:var(--gold);font-weight:600;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.hand-area{padding:.25rem 0 .5rem;overflow-x:auto}.hand-hint{text-align:center;font-size:.72rem;color:#f4efe466;margin-bottom:.35rem;-webkit-user-select:none;user-select:none}.hand-cards{display:flex;justify-content:center;align-items:flex-end;padding:.75rem 1rem .5rem;min-height:var(--hand-min-h);gap:0}.hand-card-slot{flex-shrink:0;margin-left:var(--hand-overlap);cursor:grab;transition:transform .15s ease,filter .15s ease;position:relative;touch-action:none}.hand-card-slot .card{-webkit-user-drag:none;-webkit-user-select:none;user-select:none}.hand-card-slot:first-of-type{margin-left:0}.hand-card-slot:hover{z-index:50;transform:translateY(-28px) scale(1.04)}.hand-card-slot.drag-over{z-index:20;margin-left:30px!important}.hand-card-slot.drag-over:before{content:"";position:absolute;left:-6px;top:2px;bottom:2px;width:4px;background:#ffeb3b;border-radius:3px;box-shadow:0 0 12px #ffeb3b,0 0 4px #fff;z-index:30}.hand-card-slot.is-dragging{opacity:.9;cursor:grabbing;transform:scale(1.18) translateY(-32px);z-index:100;box-shadow:0 30px 60px #0000008c}.hand-card-slot .card-selected{z-index:30;transform:translateY(-22px) scale(1.05)!important}.hand-card-slot:has(.card-selected){margin-left:10px!important;z-index:25}.hand-cards.hand-is-dragging .hand-card-slot:not(.is-dragging){margin-left:2px!important;transition:margin-left .1s ease,transform .1s ease}.hand-drop-end{width:28px;min-height:var(--card-h);flex-shrink:0;margin-left:-8px;border-radius:4px;align-self:stretch}.hand-cards:has(.is-dragging) .hand-drop-end{background:#c9a22714;border:1px dashed rgba(201,162,39,.25)}.action-bar{display:flex;justify-content:center;gap:.5rem;padding:.75rem;flex-wrap:wrap}.action-error{text-align:center;color:#ff8a9b;font-size:.85rem;padding:.25rem}.laydown-panel{background:#0006;border:1px solid rgba(201,162,39,.3);border-radius:12px;padding:1rem;margin:.5rem auto;max-width:600px}.laydown-panel h4{color:var(--gold);font-family:var(--font-display);margin-bottom:.25rem}.laydown-panel p{font-size:.8rem;color:#f4efe480;margin-bottom:.75rem}.laydown-actions{display:flex;gap:.5rem;margin-bottom:.75rem}.laydown-melds{display:flex;flex-direction:column;gap:.5rem}.laydown-meld{display:flex;align-items:center;gap:.5rem;font-size:.8rem}.scores-mini{display:flex;justify-content:center;gap:1rem;padding:.5rem;font-size:.75rem;color:#f4efe480}.scores-mini .me{color:var(--gold);font-weight:600}.round-end-overlay{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.25rem;text-align:center;padding:2rem}.round-end-overlay h2{font-family:var(--font-display);color:var(--gold);font-size:2rem}.round-winner{font-size:1.1rem}.scores-table{background:#0000004d;border-radius:12px;padding:1.25rem 2rem;min-width:280px}.scores-table h3{font-size:.8rem;color:#f4efe480;text-transform:uppercase;letter-spacing:.08em;margin-bottom:.75rem}.score-row{display:flex;justify-content:space-between;padding:.4rem 0;border-bottom:1px solid rgba(244,239,228,.08)}.game-over-winner{font-size:1.3rem;color:var(--gold)}.deck-pile[draggable=true],.discard-pile button[draggable=true]{cursor:grab}.deck-pile[draggable=true]:active,.discard-pile button[draggable=true]:active{cursor:grabbing}.discard-pile.can-drop-discard{border-radius:12px;transition:box-shadow .1s,background .1s}.discard-pile.can-drop-discard:hover{box-shadow:0 0 0 2px #c9a2274d}.discard-pile.drag-over{background:#c41e3a26;box-shadow:0 0 0 3px var(--gold)}.meld-group.can-drop{transition:box-shadow .1s,background .1s;cursor:copy}.meld-group.drag-over,.meld-group.can-drop.drag-over{background:#c9a2272e;box-shadow:0 0 0 2px var(--gold);outline:none}.hand-cards.can-draw-drop{border-radius:12px;transition:background .1s,outline .1s;min-height:120px}.hand-cards.draw-over,.hand-cards.can-draw-drop.draw-over{background:#2a6b5533;outline:2px dashed #4a9c7d;outline-offset:-2px}@media(min-width:1400px){.game-board{--card-w: 92px;--card-h: 128px;--card-sm-w: 62px;--card-sm-h: 87px;--video-w: 140px;--video-h: 105px;--hand-overlap: -26px;--hand-min-h: 175px}.round-contract{font-size:1.7rem}.pile-count{font-size:.85rem}}@media(min-width:1800px){.game-board{--card-w: 105px;--card-h: 147px;--card-sm-w: 70px;--card-sm-h: 98px;--video-w: 160px;--video-h: 120px;--hand-overlap: -30px;--hand-min-h: 195px}.round-contract{font-size:1.9rem}.video-name{font-size:.75rem}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--felt: #1a4a3a;--felt-dark: #0f2e24;--felt-light: #2a6b55;--cream: #f4efe4;--gold: #c9a227;--gold-light: #e8c84a;--burgundy: #6b1d3a;--card-white: #faf8f3;--red-suit: #c41e3a;--black-suit: #1a1a2e;--shadow: rgba(0, 0, 0, .35);--font-display: "Playfair Display", Georgia, serif;--font-body: "DM Sans", system-ui, sans-serif}html,body,#root{height:100%}body{font-family:var(--font-body);background:var(--felt-dark);color:var(--cream);-webkit-font-smoothing:antialiased}button{font-family:var(--font-body);cursor:pointer;border:none;outline:none}button:focus-visible{outline:2px solid var(--gold);outline-offset:2px}input{font-family:var(--font-body)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
