:root{--bg:#0c0c10;--panel:#15151a;--ink:#eee8dd;--muted:#a9a398;--red:#8e2634;--gold:#d4a84b;--accent:#42b8a9}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 50% 8%,#27171c 0,#0c0c10 42%,#08080a 100%);color:var(--ink);font-family:"Microsoft YaHei",system-ui,sans-serif;min-height:100vh}.app-shell{width:min(1440px,94vw);margin:auto;padding:42px 0 28px}.hero{text-align:center;margin-bottom:28px}.eyebrow,.section-kicker{margin:0;color:var(--gold);font:700 11px/1.3 Arial;letter-spacing:2px}.hero h1{margin:7px 0;font-family:Georgia,"Microsoft YaHei",serif;font-size:clamp(30px,5vw,52px);letter-spacing:2px}.hero h1 span{color:#d64753}.hero-copy{margin:0;color:var(--muted)}.session-bar,.panel{background:linear-gradient(135deg,#1b1b20,#111116);border:1px solid #4c4141;box-shadow:inset 0 0 0 1px #000,0 15px 38px #0006}.session-bar{display:flex;align-items:end;gap:10px;padding:14px 18px;margin-bottom:20px}.player-field{display:grid;gap:6px;min-width:210px;color:var(--muted);font-size:12px}.player-field input{background:#09090c;border:1px solid #514747;color:var(--ink);font:inherit;padding:11px;border-radius:3px;outline:none}.player-field input:focus{border-color:var(--gold)}.current-player-chip{margin-left:auto;border-left:1px solid #544846;padding-left:17px;display:grid;gap:3px}.current-player-chip span{font-size:11px;color:var(--muted)}.current-player-chip strong{color:#f0d38a}.game-layout{display:grid;grid-template-columns:minmax(220px,1fr) minmax(470px,2fr) minmax(220px,1fr);gap:20px;align-items:start}.panel{padding:19px;min-height:410px}.panel-heading{border-bottom:1px solid #403939;padding-bottom:12px;margin-bottom:13px}.panel h2{font:600 18px Georgia,"Microsoft YaHei",serif;margin:5px 0 0}.result-list,.players-list{display:grid;gap:9px}.empty-state{color:#8d8881;font-size:13px;line-height:1.6}.result-row{display:flex;justify-content:space-between;gap:8px;border-bottom:1px solid #302c2e;padding:7px 0;font-size:13px}.result-row span{color:var(--muted)}.result-value{font-weight:700;text-align:right}.map-card{margin-top:22px;padding:13px;border:1px solid #34583c;background:#112016;text-align:center}.map-card p{margin:0 0 5px;color:#8da992;font-size:12px}.map-card strong{color:#a4d888}.wheel-stage{text-align:center;min-width:0}.category-tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:7px;margin-bottom:14px}.category-tab{background:#15151a;border:1px solid #514748;color:#cfc8bb;padding:8px 11px;cursor:pointer;font:600 12px "Microsoft YaHei";transition:.2s}.category-tab:hover,.category-tab.active{border-color:var(--type-color);color:#fff;box-shadow:0 0 13px color-mix(in srgb,var(--type-color) 45%,transparent)}.draw-status{color:var(--type-color);font-size:16px;font-weight:700;margin:8px}.wheel-area{position:relative;display:flex;justify-content:center;padding:27px 0 13px}.wheel-frame{width:min(470px,72vw);aspect-ratio:1;border-radius:50%;padding:12px;background:linear-gradient(135deg,#111,#605a55,#111);box-shadow:0 0 0 2px var(--type-color),0 0 30px color-mix(in srgb,var(--type-color) 35%,transparent),0 18px 30px #000b;position:relative}.wheel{border-radius:50%;width:100%;height:100%;position:relative;overflow:hidden;transition:transform 4.4s cubic-bezier(.14,.85,.13,1);background:#222}.wheel::after{content:"";position:absolute;inset:0;border-radius:50%;background:repeating-radial-gradient(circle,transparent 0 70%,#0002 71% 72%)}.wheel-divider{position:absolute;z-index:1;left:calc(50% - .5px);top:0;width:1px;height:50%;background:#08080ad9;box-shadow:1px 0 #ffffff38;transform-origin:50% 100%;pointer-events:none}.wheel-label{position:absolute;z-index:2;display:block;width:38%;margin:0;color:#fff;line-height:1.1;text-align:center;font-size:clamp(10px,1.35vw,14px);font-weight:800;text-shadow:0 1px 2px #000,0 0 5px #000;white-space:nowrap;pointer-events:none;transform:translate(-50%,-50%);transform-origin:50% 50%}.wheel-label-dense{font-size:clamp(8px,1vw,11px);letter-spacing:-.4px}.wheel-hub{position:absolute;inset:35%;display:grid;place-content:center;border-radius:50%;background:radial-gradient(circle,#312526,#120f12);border:2px solid var(--type-color);box-shadow:0 0 14px #000;color:#d8cbb6;z-index:2;font-family:Georgia,"Microsoft YaHei",serif}.wheel-hub span{font-size:11px;letter-spacing:2px}.wheel-hub strong{font-size:20px;color:var(--type-color)}.pointer{position:absolute;top:12px;z-index:4;width:0;height:0;border-left:17px solid transparent;border-right:17px solid transparent;border-top:34px solid #f4d47b;filter:drop-shadow(0 3px 2px #000)}.wheel-hint{min-height:24px;margin:2px auto 12px;color:var(--muted);font-size:13px}.announcement{min-height:22px;margin:12px;color:var(--type-color);font-weight:700}.button{border:1px solid #71605a;padding:11px 16px;color:#f1e8da;background:#262329;cursor:pointer;font:700 13px "Microsoft YaHei";transition:.2s}.button:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.16)}.button:disabled{cursor:not-allowed;opacity:.55}.button-primary{min-width:180px;border-color:var(--type-color);background:linear-gradient(135deg,#2b2025,var(--type-color));color:white;box-shadow:0 0 15px color-mix(in srgb,var(--type-color) 35%,transparent)}.button-danger{border-color:#923742;color:#f3c3c7;background:#351317}.player-card{border:1px solid #40393a;background:#0e0e12;padding:11px;cursor:pointer}.player-card.active{border-color:#d0a04b;box-shadow:inset 3px 0 #d0a04b}.player-card h3{margin:0 0 7px;font-size:14px}.player-summary{font-size:11px;color:#aaa298;line-height:1.55}.footer-actions{display:flex;justify-content:center;gap:12px;margin:23px}.toast{position:fixed;bottom:25px;left:50%;transform:translate(-50%,100px);opacity:0;background:#211c20;border:1px solid #d4a84b;color:#f7ebd0;padding:10px 18px;transition:.25s;z-index:9}.toast.show{opacity:1;transform:translate(-50%,0)}@media(max-width:980px){.game-layout{grid-template-columns:1fr 1fr}.wheel-stage{grid-column:1/-1;grid-row:1}.wheel-frame{width:min(470px,85vw)}.session-bar{flex-wrap:wrap}.current-player-chip{margin-left:0}}@media(max-width:620px){.app-shell{padding-top:25px}.game-layout{grid-template-columns:1fr}.wheel-stage{grid-column:auto}.session-bar{align-items:stretch}.player-field{width:100%}.current-player-chip{width:100%}.button{flex:1}.panel{min-height:auto}.wheel-frame{width:88vw}.category-tab{font-size:11px;padding:7px}}
/* ===== v2：8 槽位 + 进度 + 历史记录 ===== */
.net-status{display:inline-block;margin:12px auto 0;padding:4px 12px;border-radius:999px;font:700 11px/1.6 Arial;letter-spacing:1px;border:1px solid #4a4040}
.net-status.local{color:#a9a398;background:#1d1d22}
.net-status.online{color:#7ee0b8;background:#12241d;border-color:#2f5c48}
.net-status.offline{color:#e08a8a;background:#241416;border-color:#5c3030}
.category-tabs{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:14px}
.category-tab{position:relative;padding:8px 12px;font-size:12px}
.category-tab.is-done{opacity:.62}
.category-tab.is-locked{opacity:.32;cursor:not-allowed;border-style:dashed}
.category-tab.is-done::after{content:'';position:absolute;left:10px;right:10px;bottom:3px;height:2px;background:var(--type-color);opacity:.8}
.progress-chip{border-left:1px solid #544846;padding-left:17px;display:grid;gap:3px}
.progress-chip span{font-size:11px;color:var(--muted)}
.progress-chip strong{color:#f0d38a}
.player-card{position:relative}
.player-card.is-done{border-left:3px solid #4d7c4a}
.player-card h3{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.card-progress{font:700 11px Arial;color:var(--gold);opacity:.85}
.player-summary{font-size:12px;line-height:1.7;color:var(--muted)}
.history-panel{margin-top:20px}
.history-heading{display:flex;align-items:end;justify-content:space-between;gap:12px;flex-wrap:wrap}
.history-heading .panel-heading{border:0;padding:0;margin:0}
.history-actions{display:flex;gap:8px;flex-wrap:wrap}
.history-actions .button{padding:8px 14px;font-size:12px}
.history-list{display:grid;gap:6px;max-height:320px;overflow:auto;padding-right:6px}
.history-row{display:grid;grid-template-columns:74px 96px 92px 1fr;gap:10px;align-items:center;border-bottom:1px solid #2c292b;padding:7px 2px;font-size:13px}
.history-row:last-child{border-bottom:0}
.history-time{color:#7f7a73;font:12px/1.4 Consolas,monospace}
.history-who{color:#cbb98a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.history-slot{color:var(--muted);font-size:12px}
.history-item{font-weight:700;text-align:right}
.history-join{grid-template-columns:74px 96px 1fr}
.history-join .history-text{color:var(--muted)}
.card-me{margin-left:6px;padding:1px 6px;border-radius:3px;background:#3a2f22;color:var(--gold);font:700 10px Arial;letter-spacing:1px}
.players-list{gap:6px}
.player-row{position:relative;display:flex;align-items:center;gap:9px;padding:8px 11px;border:1px solid #40393a;border-left:3px solid #40393a;background:#0e0e12;cursor:pointer;transition:border-color .15s,background .15s}
.player-row:hover{background:#14141a}
.player-row.active{border-color:#d0a04b;background:#171310}
.player-row.active{border-left-color:#d0a04b;box-shadow:inset 3px 0 #d0a04b}
.player-row.is-done{border-left-color:#4d7c4a}
.pl-dot{width:8px;height:8px;border-radius:50%;background:#55504c;flex:none}
.player-row.is-done .pl-dot{background:#6aa860;box-shadow:0 0 6px rgba(106,168,96,.55)}
.pl-name{flex:1;min-width:0;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-status{flex:none;font:700 11px Arial;color:#8d8881}
.pl-status.done{color:#7fb872}
.modal-mask{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}
.modal-panel{width:min(620px,92vw);background:linear-gradient(135deg,#1b1b20,#111116);border:1px solid #4c4141;padding:20px;border-radius:4px;box-shadow:0 20px 60px #000a}
.modal-panel h3{margin:0 0 12px;font:600 17px Georgia,"Microsoft YaHei",serif;color:#f0d38a}
.modal-text{width:100%;height:150px;background:#09090c;border:1px solid #514747;color:var(--ink);font:12px/1.6 Consolas,monospace;padding:10px;border-radius:3px;resize:vertical;outline:none;word-break:break-all}
.modal-text:focus{border-color:var(--gold)}
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:12px}
.modal-actions .button{flex:0 0 auto;padding:9px 18px}
.footer-note{margin:22px 0 0;text-align:center;color:#7f7a73;font-size:12px;line-height:1.7}
@media(max-width:1100px){.game-layout{grid-template-columns:1fr}.players-panel{order:3}.history-row{grid-template-columns:64px 1fr 1fr;row-gap:2px}.history-time{grid-column:1}.history-who{grid-column:2}.history-slot{grid-column:3}.history-item{grid-column:1/-1;text-align:left}}
@media(max-width:760px){.session-bar{flex-wrap:wrap;align-items:stretch}.progress-chip{width:100%;border-left:0;padding-left:0}.current-player-chip{width:100%;border-left:0;padding-left:0;margin-left:0}.history-actions .button{flex:1}}
