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