body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*{box-sizing:border-box}.App{background:#fff;color:#333;min-height:100vh;text-align:center}.game-lobby{justify-content:center;min-height:100vh;padding:20px}.game-lobby,.lobby-layout{align-items:center;display:flex}.lobby-layout{gap:2rem;max-width:1200px;width:100%}.lobby-title{align-items:center;display:flex;flex:2 1;justify-content:center}.lobby-title h1{font-size:8rem;margin:0;text-align:center}.lobby-form-container{flex:1 1;min-width:300px;padding:2rem}.lobby-form{margin:2rem 0}.form-group{margin-bottom:1rem;text-align:left}.form-group label{display:block;font-weight:600;margin-bottom:.5rem}.form-group input{background:#fff;border:1px solid #ced4da;border-radius:8px;box-sizing:border-box;color:#333;font-size:1rem;padding:.75rem;width:100%}.button-group{display:flex;gap:1rem;margin-top:1.5rem}.btn{border:none;border-radius:8px;cursor:pointer;flex:1 1;font-size:1rem;font-weight:600;padding:.75rem 1.5rem;transition:all .3s}.btn-primary{background:#4299e1;color:#fff}.btn-secondary{background:#e53e3e;color:#fff}.btn:disabled{cursor:not-allowed;opacity:.5}.connection-status{font-size:.9rem;margin-top:1rem}.game-board{min-height:100vh}.game-board,.game-header{display:flex;flex-direction:column;padding:1rem}.game-header{align-items:center;border-radius:10px;flex-shrink:0;justify-content:space-between}.game-header h1{font-size:6rem;margin:0 0 1rem;transition:opacity .2s ease}.header-controls{align-items:center;display:flex;gap:1rem}.add-ai-btn,.auto-mode-btn,.cheat-mode-btn,.dev-btn,.new-game-btn{background:#fff;border:2px solid;border-radius:6px;cursor:pointer;font-size:.8rem;font-weight:600;line-height:1;padding:.5rem 1rem;transition:all .2s ease}.add-ai-btn{border-color:#4299e1;color:#4299e1}.dev-btn{border-color:#9333ea;color:#9333ea}.cheat-mode-btn{border-color:#f59e0b;color:#f59e0b}.cheat-mode-btn.active{background:#f59e0b;border-color:#d97706;color:#fff}.auto-mode-btn{border-color:#10b981;color:#10b981}.auto-mode-btn.active{background:#10b981;border-color:#059669;color:#fff}.new-game-btn{border-color:#06b6d4;color:#06b6d4}.game-info{display:inline-block;font-size:.9rem;position:relative}.copy-url-btn{background:#0000;border:1px solid #e9ecef;border-radius:6px;color:#333;cursor:pointer;font-size:.9rem;font-weight:500;padding:.5rem 1rem;transition:all .2s ease;-webkit-user-select:none;user-select:none}.copy-url-btn:active{background:#0000000d;transform:translateY(0)}.custom-tooltip{background:#333;border-radius:4px;bottom:100%;color:#fff;font-size:.8rem;margin-bottom:5px;padding:.5rem;white-space:nowrap;z-index:1000}.custom-tooltip,.custom-tooltip:after{left:50%;position:absolute;transform:translateX(-50%)}.custom-tooltip:after{border:5px solid #0000;border-top-color:#333;content:"";top:100%}.turn-indicator.my-turn{color:#90ee90;font-weight:700}.turn-indicator-banner{background:#f8f9fa;border:2px solid #dee2e6;border-radius:10px;color:#666;font-size:1.2rem;font-weight:700;margin:1rem 0;padding:1rem;text-align:center;transition:all .3s ease}.turn-indicator-banner.my-turn{animation:pulse-green 2s infinite;background:#d4edda;border-color:#28a745;color:#155724}@keyframes pulse-green{0%{box-shadow:0 0 0 0 #28a74566}70%{box-shadow:0 0 0 10px #28a74500}to{box-shadow:0 0 0 0 #28a74500}}.game-content{display:grid;flex:1 1;grid-template-rows:auto 1fr auto}.top-section{align-items:center;display:flex;gap:1rem}.book-status{flex:1 1}.players-layout{display:flex;flex-direction:column;gap:2rem;margin:1rem 0;min-height:250px}.opponents-line,.teammates-line{text-align:center}.opponents-line h4,.teammates-line h4{color:#666;font-size:1rem;margin:0 0 .5rem}.players-row{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.current-player-center{display:flex;justify-content:center;margin:.5rem 0}.player-info{align-items:center;background:#f8f9fa;border:1px solid #e9ecef;border-radius:10px;display:flex;flex-direction:column;padding:.5rem;width:150px}.player-info.active-turn{animation:pulse-green 2s infinite;background:#d4edda;border:2px solid #28a745;color:#155724;font-weight:700}.player-info.disconnected{opacity:.5}.player-info.empty-slot{opacity:.4}.player-avatar{align-items:center;border:2px solid;border-radius:50%;display:flex;font-weight:700;height:40px;justify-content:center;margin-bottom:.5rem;width:40px}.player-avatar.empty{background-color:initial;border-color:#cbd5e0;border-style:dashed;color:#cbd5e0}.player-details{font-size:.8rem;text-align:center}.player-name{font-weight:600;margin-bottom:.25rem}.player-stats{display:flex;font-size:.7rem;gap:.5rem;justify-content:center}.turn-indicator{color:#90ee90;font-size:.7rem;margin-top:.25rem}.turn-info-center{background:#f8f9fa;border:1px solid #e9ecef;border-radius:15px;margin:1rem auto;max-width:300px;padding:1rem;text-align:center}.game-logo{font-size:2rem;margin-bottom:.5rem}.player-hand{border-radius:10px;margin-bottom:1rem;padding:1rem}.hand-groups{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.half-suit-group{background:#fff;border:1px solid #dee2e6;border-radius:8px;min-width:150px;padding:.5rem}.half-suit-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:.5rem;padding:0 .25rem}.half-suit-title{flex:1 1;font-size:.8rem;font-weight:600;text-align:center}.claim-book-btn{background:#e3f2fd;border:1px solid #4299e1;border-radius:4px;color:#4299e1;cursor:pointer;font-size:.7rem;font-weight:600;padding:.25rem .5rem;transition:all .2s ease}.claim-book-btn:disabled{background:#e8f5e8;border-color:#4caf50;color:#4caf50;cursor:default}.cards{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:center}.card-wrapper{display:inline-block;position:relative}.card{align-items:center;background:#fff;border:1px solid #ccc;border-radius:4px;cursor:pointer;display:flex;flex-direction:column;font-size:.8rem;font-weight:700;height:50px;justify-content:center;transition:transform .2s;width:40px}.card.red{color:#e53e3e}.card.black{color:#2d3748}.card.missing{cursor:default;opacity:.3}.card.requestable{border:2px dashed #4299e1;cursor:pointer;opacity:.6}.card-rank{font-size:.7rem}.card-suit{font-size:.9rem}.probability-tooltip{background:#2d3748;border-radius:8px;bottom:100%;box-shadow:0 4px 12px #0000004d;color:#fff;margin-bottom:10px;min-width:200px;padding:12px;pointer-events:none;z-index:1000}.probability-tooltip,.probability-tooltip:after{left:50%;position:absolute;transform:translateX(-50%)}.probability-tooltip:after{border:6px solid #0000;border-top-color:#2d3748;content:"";top:100%}.tooltip-header{align-items:center;border-bottom:1px solid #fff3;display:flex;font-size:.75rem;font-weight:600;justify-content:space-between;margin-bottom:8px;padding-bottom:6px}.tooltip-header .card-id{background:#fff3;border-radius:4px;font-family:monospace;padding:2px 6px}.tooltip-body{font-size:.8rem}.tooltip-body .no-data{color:#ffffffb3;font-style:italic;margin:0}.probability-list{display:flex;flex-direction:column;gap:8px}.probability-row{align-items:center;display:flex;gap:8px}.probability-row.teammate{color:#90cdf4}.probability-row.opponent{color:#fc8181}.player-name{font-size:.75rem;min-width:70px;text-align:center}.probability-bar-container{background:#ffffff1a;border-radius:8px;flex:1 1;height:16px;overflow:hidden}.probability-bar{background:linear-gradient(90deg,#4299e1,#3182ce);height:100%;transition:width .3s ease}.probability-row.teammate .probability-bar{background:linear-gradient(90deg,#48bb78,#38a169)}.probability-row.opponent .probability-bar{background:linear-gradient(90deg,#f56565,#e53e3e)}.probability-value{font-family:monospace;font-size:.75rem;font-weight:600;min-width:40px;text-align:right}.book-status{border-radius:10px;padding:1rem}.scores{align-items:center;display:flex;justify-content:space-between}.team-score{padding:0 1rem;text-align:center}.team-score h3{margin:0 0 .5rem}.score{font-size:1.5rem;font-weight:700}.team1{color:#4299e1}.team2{color:#ffc107}.book-grid{grid-gap:.5rem;display:grid;flex:1 1;gap:.5rem;grid-template-columns:repeat(4,1fr)}.book-item{background:#fff;border:1px solid #dee2e6;border-radius:6px;font-size:.7rem;padding:.5rem;position:relative;text-align:center}.book-item.team1{background:#e3f2fd;border:3px solid #4299e1;box-shadow:0 2px 4px #4299e14d}.book-item.team2{background:#fff8e1;border:3px solid #ffc107;box-shadow:0 2px 4px #ffc1074d}.book-item.unclaimed{background:#fff;border:1px solid #dee2e6;opacity:.7}.book-suit{font-size:1rem;margin-bottom:.25rem}.book-item.red .book-suit{color:#e53e3e}.book-item.black .book-suit{color:#2d3748}.book-owner{align-items:center;background:currentColor;border-radius:50%;color:#fff;display:flex;font-size:.6rem;font-weight:700;height:20px;justify-content:center;position:absolute;right:-5px;top:-5px;width:20px}.game-actions{background:#f8f9fa;border:1px solid #e9ecef;border-radius:10px;padding:1rem}.action-buttons{display:flex;gap:1rem;justify-content:center}.game-actions select{background:#fff;border:1px solid #ced4da;border-radius:6px;box-sizing:border-box;color:#333;padding:.5rem;width:100%}.action-hint{color:#666;font-size:.9rem;margin:.5rem 0 1rem;text-align:center}.name-prompt{align-items:center;display:flex;justify-content:center;min-height:100vh;padding:20px}.name-prompt-content{background:#f8f9fa;border:1px solid #e9ecef;border-radius:15px;max-width:400px;padding:2rem;text-align:center;width:100%}.name-prompt-content h2{color:#333;margin:0 0 1rem}.name-prompt-content p{color:#666;margin:0 0 1.5rem}.name-prompt-content form{display:flex;flex-direction:column;gap:1rem}.name-prompt-content input{background:#fff;border:1px solid #ced4da;border-radius:8px;color:#333;font-size:1rem;padding:.75rem}.name-prompt-content button{border:none;border-radius:8px;cursor:pointer;font-size:1rem;font-weight:600;padding:.75rem 1.5rem;transition:all .3s}.name-prompt-content .connection-status{color:#666;font-size:.9rem;margin-top:1rem}.error-message{background:#e53e3e;border-radius:8px;box-shadow:0 4px 6px #0000001a;color:#fff;padding:1rem;position:fixed;right:20px;top:20px;z-index:1000}.error-message button{background:#0000;border:1px solid #fff;border-radius:4px;color:#fff;cursor:pointer;margin-top:.5rem;padding:.25rem .5rem}.game-board.finished{align-items:center;display:flex;flex-direction:column;justify-content:center;text-align:center}.game-over-modal{background:#fff;border-radius:12px;box-shadow:0 4px 20px #00000026;max-width:500px;padding:3rem}.game-over-modal h1{font-size:2.5rem;margin:0 0 1rem}.game-over-modal h2{color:#4299e1;margin:0 0 2rem}.final-scores{font-size:1.2rem;margin:2rem 0}.final-scores div{margin:.5rem 0}.game-over-modal .btn{font-size:1rem;margin-top:1rem;padding:.75rem 1.5rem}.modal-overlay{align-items:center;background:#00000080;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.modal-content{background:#fff;border-radius:15px;box-shadow:0 10px 25px #0003;max-height:90vh;max-width:400px;overflow-y:auto;padding:2rem;width:90%}.modal-content h3{color:#333;margin:0 0 1.5rem;text-align:center}.requested-card{margin-bottom:1.5rem;text-align:center}.requested-card p{color:#666;font-weight:600;margin:0 0 .5rem}.requested-card .card{align-items:center;background:#fff;border:2px solid #ddd;border-radius:8px;box-shadow:0 2px 4px #0000001a;display:inline-flex;flex-direction:column;font-weight:700;height:80px;justify-content:center;width:60px}.requested-card .card-rank{font-size:1rem}.requested-card .card-suit{font-size:1.2rem}.player-selection p{color:#666;font-weight:600;margin:0 0 1rem;text-align:center}.player-buttons{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1.5rem}.player-select-btn{align-items:center;background:#f8f9fa;border:2px solid #e9ecef;border-radius:10px;cursor:pointer;display:flex;flex-direction:column;padding:1rem;transition:all .2s ease}.player-select-btn:disabled{cursor:not-allowed;opacity:.5}.player-select-btn .player-name{color:#333;font-weight:600;margin-bottom:.25rem}.player-select-btn .player-cards{color:#666;font-size:.8rem}.cancel-btn{background:#fff;border:2px solid #e9ecef;border-radius:8px;color:#666;cursor:pointer;font-weight:600;padding:.75rem;transition:all .2s ease;width:100%}.book-claim-modal{max-width:500px}.claim-instruction{color:#666;font-weight:500;margin:0 0 1.5rem;text-align:center}.missing-cards-assignment{display:flex;flex-direction:column;gap:1rem;margin-bottom:1.5rem}.card-assignment{align-items:center;background:#f8f9fa;border:1px solid #e9ecef;border-radius:10px;display:flex;gap:1rem;padding:1rem}.card-assignment .card{align-items:center;background:#fff;border:2px solid #ddd;border-radius:6px;box-shadow:0 2px 4px #0000001a;display:flex;flex-direction:column;flex-shrink:0;font-weight:700;height:65px;justify-content:center;width:50px}.card-assignment .card-rank{font-size:.9rem}.card-assignment .card-suit{font-size:1rem}.assignment-section{display:flex;flex:1 1;flex-direction:column;gap:.5rem}.assignment-label{color:#666;font-size:.9rem;font-weight:500}.player-options{display:flex;flex-wrap:wrap;gap:.5rem}.player-option{background:#fff;border:2px solid #e9ecef;border-radius:6px;color:#333;cursor:pointer;font-size:.8rem;font-weight:600;padding:.5rem 1rem;transition:all .2s ease}.player-option.selected{background:#4299e1;border-color:#4299e1;color:#fff}.player-option:disabled{cursor:not-allowed;opacity:.5}.complete-book{background:#e8f5e8;border-radius:8px;margin-bottom:1rem;padding:1rem;text-align:center}.complete-book p{color:#4caf50;font-weight:600;margin:0}.modal-buttons{display:flex;gap:1rem}.confirm-claim-btn{background:#4299e1;border:none;border-radius:8px;color:#fff;cursor:pointer;flex:1 1;font-weight:600;padding:.75rem;transition:all .2s ease}.confirm-claim-btn:disabled{background:#cbd5e0;cursor:not-allowed}.game-log{background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;margin:1rem 0;padding:1rem}.game-log h3{color:#495057;font-size:1rem;margin:0 0 1rem;text-align:left}.log-entries{gap:.5rem;max-height:250px;overflow-y:auto}.log-entries,.log-entry{display:flex;flex-direction:column}.log-entry{background:#fff;border-left:3px solid #dee2e6;border-radius:4px;padding:.5rem;text-align:left}.log-entry.empty{border-left:none;color:#6c757d;font-style:italic;text-align:center}.log-entry.game_start{background:#f8fff9;border-left-color:#28a745}.log-entry.card_transfer{background:#f8fbff;border-left-color:#007bff}.log-entry.card_request{background:#fffef8;border-left-color:#ffc107}.log-entry.book_claim{background:#fff8f8;border-left-color:#dc3545}.log-time{color:#6c757d;font-size:.75rem;margin-bottom:.25rem}.log-message{color:#495057;font-size:.875rem;line-height:1.3}.middle-section{flex:1 1;justify-content:center;padding:1rem}.middle-section,.players-and-log{align-items:flex-start;display:flex;gap:2rem}.players-and-log{max-width:1200px;width:100%}.players-section{flex:1 1;min-width:0}.log-section{flex:0 0 500px;min-width:300px}@media (max-width:768px){.App{padding:.25rem}.game-board{padding:.5rem}.game-content{gap:.5rem}.top-section{align-items:stretch;flex-direction:column;gap:.25rem}.game-header{padding:.5rem}.game-header h1{font-size:2.7rem;margin:2rem 0 1rem}.copy-url-btn{display:none}.header-controls{gap:.5rem}.add-ai-btn,.auto-mode-btn,.cheat-mode-btn,.dev-btn,.new-game-btn{font-size:.7rem;padding:.4rem .8rem}.btn-icon{display:none}.book-status{margin:1rem 0 0;padding:.5rem}.scores{flex-wrap:wrap;margin-bottom:.5rem}.team-score{flex:0 0 auto;padding:0}.team-score h3{font-size:.9rem;margin:0 0 .25rem}.book-grid{flex-basis:100%;margin-top:.5rem;order:3}.score{font-size:1.2rem}.book-grid{gap:.1rem;grid-template-columns:repeat(4,1fr)}.book-item{font-size:.5rem;padding:.15rem}.book-suit{font-size:.6rem;margin-bottom:.05rem}.book-owner{font-size:.5rem;height:15px;right:-3px;top:-3px;width:15px}.players-layout{flex:1 1;gap:1.5rem;margin:.25rem 0;min-height:200px}.middle-section{align-items:center;display:flex;flex:1 1;flex-direction:column;justify-content:flex-start;padding:.5rem}.players-and-log{flex-direction:column;gap:1rem;max-width:none;width:100%}.log-section,.players-section{flex:none;min-width:0;width:100%}.opponents-line h4,.teammates-line h4{font-size:.8rem;margin:0 0 .25rem}.players-row{gap:.25rem}.player-info{padding:.3rem;width:120px}.player-avatar{height:25px;margin-bottom:.15rem;width:25px}.player-details{font-size:.6rem}.player-name{margin-bottom:.05rem}.player-stats{font-size:.5rem;gap:.15rem}.player-hand{margin-bottom:.5rem;padding:.5rem}.player-hand h3{font-size:1rem;margin:0 0 .5rem}.hand-groups{flex-direction:column;gap:.3rem;width:100%}.half-suit-group{min-width:auto;padding:.3rem;width:100%}.half-suit-header{margin-bottom:.2rem;padding:0}.half-suit-title{font-size:.6rem}.card-count{font-size:.5rem}.claim-book-btn{font-size:.5rem;padding:.15rem .3rem}.cards{grid-gap:.3rem;display:grid;gap:.3rem;grid-template-columns:repeat(auto-fit,minmax(45px,1fr));width:100%}.card{font-size:.7rem;height:55px;min-width:45px;width:100%}.card-rank{font-size:.6rem}.card-suit{font-size:.8rem}.game-actions{padding:.5rem}.game-actions h3{font-size:1rem;margin:0 0 .25rem}.action-hint{font-size:.7rem;line-height:1.3;margin:.25rem 0 .5rem}.modal-content{margin:.5rem;padding:1rem;width:95%}.book-claim-modal{max-width:none}.card-assignment{align-items:stretch;flex-direction:column;gap:.5rem;padding:.5rem}.card-assignment .card{align-self:center}.player-options{justify-content:center}.player-option{flex:1 1;font-size:.7rem;min-width:0;padding:.5rem .6rem}.lobby-content,.name-prompt-content{margin:.5rem;padding:1rem}.form-group input{font-size:16px}.lobby-layout{flex-direction:column;gap:1rem}.lobby-title h1{font-size:4rem}.lobby-form-container{min-width:0;width:100%}.game-log{margin:.5rem 0;padding:.75rem}.game-log h3{font-size:.9rem}.log-entries{max-height:150px;overflow-x:hidden}.log-entry{word-wrap:break-word;overflow-wrap:break-word;padding:.375rem}.log-time{font-size:.7rem}.log-message{word-wrap:break-word;font-size:.8rem;overflow-wrap:break-word}}@media (hover:hover){.btn-primary:hover:not(:disabled){background:#3182ce}.btn-secondary:hover:not(:disabled){background:#c53030}.game-header h1:hover{opacity:.7}.add-ai-btn:hover{background:#4299e1;color:#fff}.dev-btn:hover{background:#9333ea;color:#fff}.cheat-mode-btn:hover{background:#f59e0b;color:#fff}.auto-mode-btn:hover{background:#10b981;color:#fff}.new-game-btn:hover{background:#06b6d4;color:#fff}.copy-url-btn:hover{background:#00000008;border-color:#dee2e6}.claim-book-btn:hover:not(:disabled){background:#4299e1;color:#fff}.card:hover{transform:translateY(-2px)}.card.missing:hover{transform:none}.card.requestable:hover{border-color:#3182ce;opacity:.8;transform:translateY(-2px)}.player-select-btn:hover:not(:disabled){background:#e3f2fd;border-color:#4299e1}.cancel-btn:hover{border-color:#c53030;color:#c53030}.player-option:hover:not(:disabled){background:#e3f2fd;border-color:#4299e1}.confirm-claim-btn:hover:not(:disabled){background:#3182ce}}
/*# sourceMappingURL=main.2361e6a0.css.map*/