*{box-sizing:border-box;margin:0;padding:0}:root{--bg: #12233a;--bg2: #1a3352;--panel: #1e3a5c;--panel2: #254770;--text: #eef3f9;--muted: #9db4cc;--gold: #d9a441;--primary: #2f8f5b;--primary-hover: #36a76a;--danger: #c0564f;--line: #2f5580}body{font-family:Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:radial-gradient(1200px 700px at 50% -10%,#1d3f66 0%,var(--bg) 60%);color:var(--text);min-height:100vh}.app{min-height:100vh;display:flex;flex-direction:column}.conn-banner{background:var(--danger);text-align:center;padding:6px;font-size:14px}.sound-controls{position:fixed;top:8px;right:10px;z-index:300;display:flex;gap:6px}.sound-controls .btn{background:#141e2dbf;border:1px solid var(--line);color:var(--muted);font-size:12px;padding:4px 10px}.sound-controls .btn.on{border-color:var(--primary);color:var(--primary)}.btn{border:none;border-radius:8px;padding:8px 18px;font-size:14px;cursor:pointer;color:var(--text);background:var(--panel2);transition:background .15s}.btn:hover:not(:disabled){filter:brightness(1.15)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--primary)}.btn-secondary{background:#3b6ea5}.btn-ghost{background:transparent;border:1px solid var(--line)}.btn-start{background:var(--gold);color:#241a05;font-weight:700}.btn-big{padding:12px;font-size:16px;width:100%}.btn-small{padding:4px 10px;font-size:12px}.row{display:flex;gap:10px;align-items:center}.hint{color:var(--muted);font-size:13px;margin:6px 0}.hint-inline{color:var(--muted);font-size:12px}.warn{color:#f0b34c;font-size:13px;margin:6px 0}.ok-note{color:#7ed49a;font-size:13px}.toast{position:fixed;left:50%;bottom:34px;transform:translate(-50%);background:#0a1422eb;border:1px solid var(--line);color:var(--text);padding:10px 22px;border-radius:10px;z-index:300;font-size:14px;box-shadow:0 6px 24px #0006}.lobby{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px}.lobby-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:36px 40px;width:400px;display:flex;flex-direction:column;gap:14px;box-shadow:0 12px 40px #00000059}.lobby-title{text-align:center;font-size:32px;color:var(--gold);letter-spacing:6px}.lobby-sub{text-align:center;color:var(--muted);font-size:13px;margin-bottom:6px}.field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}.field input{background:var(--bg2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:10px 12px;font-size:15px;outline:none}.field input:focus{border-color:var(--gold)}.divider{text-align:center;color:var(--muted);font-size:12px;position:relative}.divider:before,.divider:after{content:"";position:absolute;top:50%;width:40%;height:1px;background:var(--line)}.divider:before{left:0}.divider:after{right:0}.lobby-footer{color:#5d7893;font-size:12px}.room{flex:1;display:flex;gap:20px;padding:30px;max-width:1100px;margin:0 auto;width:100%}.room-main{flex:1;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:26px;display:flex;flex-direction:column;gap:20px}.room-header{display:flex;justify-content:space-between;align-items:center}.room-code-label{color:var(--muted);font-size:12px}.room-code{font-size:34px;font-weight:700;letter-spacing:8px;color:var(--gold)}.seats{display:grid;grid-template-columns:1fr 1fr;gap:14px}.seat{background:var(--bg2);border:1px dashed var(--line);border-radius:12px;padding:18px;min-height:86px}.seat.ready{border:1px solid var(--primary)}.seat-name{font-size:16px;display:flex;align-items:center;gap:8px}.seat-waiting{color:var(--muted);font-size:14px}.seat-state{margin-top:8px;font-size:13px;color:var(--muted)}.badge{font-size:11px;background:var(--gold);color:#241a05;border-radius:4px;padding:1px 6px}.badge-off{background:#55606e;color:#dfe6ee}.room-actions{margin-top:4px}.spectating-note{color:var(--muted);font-size:13px}.chat-panel{display:flex;flex-direction:column}.chat-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:6px;font-size:13px;min-height:80px}.chat-msg{line-height:1.5;word-break:break-all}.chat-name{color:var(--gold)}.chat-input{display:flex;gap:6px;margin-top:8px}.chat-input input{flex:1;background:var(--bg2);border:1px solid var(--line);border-radius:8px;color:var(--text);padding:8px 10px;outline:none}.room>.chat-panel{width:300px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px}.game{flex:1;display:flex;flex-direction:column;padding:10px 16px 16px}.game-header{display:flex;justify-content:space-between;align-items:center;padding:6px 4px 12px}.gh-left{display:flex;gap:16px;align-items:center}.room-code-small{color:var(--muted);font-size:13px}.turn-info{font-size:14px;background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:4px 14px}.turn-info.mine{border-color:var(--primary);color:#9fe8bc}.turn-info.pending{border-color:var(--gold);color:#f0cd85}.turn-info.ended{border-color:var(--gold);color:var(--gold);cursor:pointer}.game-body{flex:1;display:flex;gap:14px;min-height:0}.board{flex:1;background:#102238bf;border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:12px}.board-row{display:flex;align-items:center;gap:10px}.row-label{width:64px;flex-shrink:0;color:var(--muted);font-size:12px;text-align:center}.card-img{width:92px;height:130px;object-fit:cover;border-radius:8px;border:1px solid #0c1a2b;box-shadow:0 2px 8px #00000059}.card-img.small{width:62px;height:88px}.card-img.clickable{cursor:pointer;transition:transform .12s,box-shadow .12s}.card-img.clickable:hover{transform:translateY(-4px);box-shadow:0 6px 18px #d9a44159}.card-img.affordable{outline:2px solid var(--primary);outline-offset:-2px}.card-img.affordable:hover{box-shadow:0 6px 18px #36a76a80}.noble-img{width:92px;height:92px;object-fit:cover;border-radius:10px;border:1px solid #0c1a2b}.noble-img.clickable{cursor:pointer}.noble-img.picked{outline:3px solid var(--gold)}.deck-pile{width:92px;height:130px;flex-shrink:0;border-radius:8px;background:linear-gradient(135deg,#274d78,#16324f);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:28px;color:var(--gold);box-shadow:inset 0 0 0 4px #0f2438,inset 0 0 0 5px var(--line)}.deck-empty{opacity:.35}.gem-strip img,.hand-tokens img{width:44px;height:44px;border-radius:50%;border:1px solid #0c1a2b}.gem-pool-item{position:relative;display:flex;flex-direction:column;align-items:center}.gem-count{position:absolute;bottom:-6px;right:-6px;background:#0c1a2b;border:1px solid var(--line);border-radius:10px;font-size:12px;padding:0 6px}.hand-area{border-top:1px solid var(--line);padding-top:10px;display:flex;flex-direction:column;gap:10px}.hand-tokens{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.hand-reserved{display:flex;gap:8px;align-items:center}.bonus-line{font-size:13px;color:var(--muted);margin-left:12px;display:flex;align-items:center;gap:4px}.bonus-dot{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;color:#0c1a2b;font-weight:700}.bonus-dot.white{background:#e9edf2}.bonus-dot.blue{background:#3f7fd1;color:#fff}.bonus-dot.green{background:#3f9e5f;color:#fff}.bonus-dot.red{background:#c0564f;color:#fff}.bonus-dot.black{background:#30343a;color:#fff}.action-bar{display:flex;gap:10px}.sidebar{width:300px;flex-shrink:0;display:flex;flex-direction:column;gap:12px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px}.panel h4{font-size:13px;color:var(--muted);margin-bottom:8px}.players-panel{flex:1;min-height:140px;overflow-y:auto;display:flex;flex-direction:column}.player-card{display:flex;flex-direction:column;gap:5px;padding:8px;border-radius:8px;font-size:13px}.player-card+.player-card{margin-top:6px;border-top:1px solid var(--line)}.player-card.current{background:#2f8f5b2e;outline:1px solid var(--primary)}.player-head{display:flex;justify-content:space-between;align-items:center}.player-name{font-weight:600}.player-score{color:var(--gold);font-weight:700}.player-tokens{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.mini-token{display:inline-flex;align-items:center;gap:3px}.mini-token img{width:20px;height:20px;border-radius:50%;border:1px solid #0c1a2b}.mini-token b{font-size:12px;font-weight:700}.player-bonuses{display:flex;align-items:center;gap:4px}.pb-label{color:var(--muted);font-size:12px}.mini-noble{width:26px;height:26px;object-fit:cover;border-radius:6px;border:1px solid var(--gold);margin-left:4px}.player-cards{display:flex;flex-wrap:wrap;gap:4px}.mini-card{width:40px;height:56px;object-fit:cover;border-radius:4px;border:1px solid #0c1a2b}.player-meta{color:var(--muted);font-size:12px}.history-panel{flex:none;min-height:100px;display:flex;flex-direction:column}.history-list{overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:4px;font-size:12px;max-height:140px}.history-item{color:#c6d5e5;line-height:1.5}.history-turn{color:var(--muted)}.sidebar .chat-panel{max-height:220px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#040a12b8;display:flex;align-items:center;justify-content:center;z-index:200}.modal{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px 24px;width:min(720px,94vw);max-height:90vh;overflow-y:auto;box-shadow:0 16px 60px #00000080}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.modal-head h3{font-size:17px;color:var(--gold)}.modal-close{background:none;border:none;color:var(--muted);font-size:16px;cursor:pointer}.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}.pool-row{display:flex;gap:14px;flex-wrap:wrap;margin:8px 0}.pool-item{display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;min-width:52px}.token-chip{background:none;border:none;padding:0;position:relative;display:inline-block}.token-chip.interactive{cursor:pointer}.token-chip img{width:46px;height:46px;border-radius:50%;border:2px solid transparent}.token-chip.small img{width:38px;height:38px}.token-chip:hover img{border-color:var(--gold)}.token-count{position:absolute;bottom:-4px;right:-6px;background:#0c1a2b;border:1px solid var(--line);border-radius:9px;padding:0 5px;font-size:11px;color:var(--text)}.pool-label{font-size:12px;color:var(--muted)}.picked{font-size:12px;color:var(--gold);min-height:16px}.pay-chip{background:var(--gold);color:#241a05;border-radius:6px;padding:0 6px;cursor:pointer}.buy-layout{display:flex;gap:18px}.buy-img{width:150px;height:212px;object-fit:cover;border-radius:10px}.buy-info{flex:1}.cost-rows{display:flex;flex-direction:column;gap:6px;margin-bottom:4px}.cost-row{display:flex;align-items:center;gap:8px;font-size:13px}.cost-row img{width:26px;height:26px;border-radius:50%}.paid-tag{color:var(--gold);margin-left:auto}.reserve-row{margin:10px 0}.reserve-level{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--muted);margin-bottom:6px}.card-row{display:flex;gap:10px}.noble-row{display:flex;gap:12px;margin:10px 0}.noble-row .noble-img{width:110px;height:110px}.ranking{display:flex;flex-direction:column;gap:8px}.rank-row{display:flex;align-items:center;gap:12px;background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:10px 14px}.rank-row.winner{border-color:var(--gold);background:#d9a4411f}.rank-pos{width:34px;font-size:18px}.rank-name{flex:1;font-weight:600}.rank-score{color:var(--gold);font-weight:700}.rank-detail{color:var(--muted);font-size:12px;font-weight:400}.lobby-row{display:flex;gap:20px;align-items:stretch;flex-wrap:wrap;justify-content:center}.lobby-rooms{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:20px;width:360px;display:flex;flex-direction:column;gap:10px;max-height:560px;overflow-y:auto}.lobby-rooms h3{font-size:15px;color:var(--gold)}.room-item{display:flex;justify-content:space-between;align-items:center;gap:10px;background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:10px 12px}.room-item-main{display:flex;flex-direction:column;gap:2px;min-width:0}.room-item-code{font-weight:700;letter-spacing:2px}.room-item-meta{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.room-item-side{display:flex;align-items:center;gap:8px;flex-shrink:0}.room-item-state{font-size:11px;border-radius:4px;padding:1px 6px;background:#55606e;color:#dfe6ee}.room-item-state.waiting{background:var(--primary);color:#eafff2}.room-item-state.playing{background:var(--gold);color:#241a05}.seg-row{display:flex;gap:8px}.seg{flex:1;background:var(--bg2);border:1px solid var(--line);color:var(--muted);border-radius:8px;padding:8px 0;font-size:13px;cursor:pointer}.seg.active{background:var(--primary);border-color:var(--primary);color:#eafff2;font-weight:600}.room-settings-line{color:var(--muted);font-size:12px;margin-top:4px}@media (max-width: 900px){.game-body{flex-direction:column}.sidebar{width:100%}.players-panel{max-height:300px}.room{flex-direction:column;padding:16px}.room>.chat-panel{width:100%}.lobby-rooms{width:min(400px,94vw)}}@media (max-width: 640px){.game{padding:6px 8px 10px}.game-header{flex-wrap:wrap;gap:6px}.gh-left{flex-wrap:wrap;gap:8px}.board{padding:10px;gap:8px}.board-row{gap:6px}.row-label{width:40px;font-size:11px}.card-img{width:56px;height:79px}.card-img.small{width:44px;height:62px}.deck-pile{width:56px;height:79px;font-size:20px}.noble-img{width:56px;height:56px}.gem-strip img,.hand-tokens img{width:34px;height:34px}.buy-layout{flex-direction:column;align-items:center}.buy-img{width:120px;height:170px}.modal{padding:14px 16px}.pool-row{gap:8px}.token-chip img{width:40px;height:40px}.lobby-card{padding:24px 20px;width:min(400px,94vw)}.seats{grid-template-columns:1fr!important}.noble-row .noble-img{width:80px;height:80px}}
