/* /Components/Broadcast/CommentatorMatchPanel.razor.rz.scp.css */
.commentator-panel[b-d1soxjq286] {
    /* The producer's values (broadcast.css .producer-layout / .producer-controls
       / .right-drawer), so the panel and the page it sits in are one surface. */
    --cp-bg: #0a0a1a;
    --cp-panel: #16213e;
    --cp-panel-2: #1e2a44;
    --cp-border: #2a2a4a;
    --cp-text: #e0e0e0;
    --cp-muted: #8888aa;
    --cp-gold: #ffc85a;
    --cp-gold-dim: #a87626;
    --cp-gold-bg: rgba(255, 200, 90, 0.12);
    --cp-live: #e63946;
    --cp-dice-red: #b8372a;
    --cp-dice-bone: #f3e8cf;

    background: var(--cp-panel);
    border: 1px solid var(--cp-border);
    border-radius: 8px;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
    color: var(--cp-text);
    font: 13px/1.4 "Inter", "Segoe UI", system-ui, sans-serif;
}

.cp-empty[b-d1soxjq286] {
    padding: 20px 14px;
    color: var(--cp-muted);
    text-align: center;
}

.cp-tabs[b-d1soxjq286] {
    display: flex;
    border-bottom: 1px solid var(--cp-border);
    background: var(--cp-panel-2);
}

/* The review picker: one select, the width of the panel, under the tabs. */
.cp-review[b-d1soxjq286] {
    padding: 6px 10px;
    border-bottom: 1px solid var(--cp-border);
    background: var(--cp-panel-2);
}
.cp-review-pick[b-d1soxjq286] {
    width: 100%;
    padding: 5px 6px;
    font-size: .78rem;
    border-radius: 6px;
    border: 1px solid var(--cp-border);
    background: var(--cp-bg);
    color: var(--cp-text);
}

.cp-tab[b-d1soxjq286] {
    flex: 1;
    min-width: 0;
    padding: 10px 12px;
    background: transparent;
    color: var(--cp-muted);
    border: none;
    border-right: 1px solid var(--cp-border);
    cursor: pointer;
    font: inherit;
    text-align: left;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.cp-tab:last-child[b-d1soxjq286] { border-right: none; }
.cp-tab:hover[b-d1soxjq286] { color: var(--cp-text); }
.cp-tab.active[b-d1soxjq286] {
    color: var(--cp-text);
    background: var(--cp-panel);
    box-shadow: inset 0 2px 0 var(--cp-gold);
}

.cp-tab-slot[b-d1soxjq286] {
    display: block;
    font-size: 11px;
    color: var(--cp-gold-dim);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cp-tab.active .cp-tab-slot[b-d1soxjq286] { color: var(--cp-gold); }

/* At the 300px panel width two player names plus the en-dash routinely
   overrun the tab — truncate with an ellipsis instead of forcing the column
   wider (.cp-tab's own overflow:hidden only clips these block children, it
   does not give each of them its own "…"). */
.cp-tab-players[b-d1soxjq286] {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cp-header[b-d1soxjq286] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    padding: 10px 14px;
    border-bottom: 1px solid var(--cp-border);
}

.cp-score[b-d1soxjq286] {
    font-variant-numeric: tabular-nums;
    font-size: 14px;
    /* Shrinks instead of pushing .cp-live out of the 300px header: a flex
       item's default min-width is its content size, which is exactly what
       long player names would force the row past. */
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cp-score .cp-sep[b-d1soxjq286] { color: var(--cp-muted); margin: 0 6px; }
.cp-score .cp-val[b-d1soxjq286] { color: var(--cp-gold); font-weight: 600; }

.cp-matchlen[b-d1soxjq286] { color: var(--cp-muted); font-size: 12px; flex-shrink: 0; }

/* The engine behind the overlay's eval panels, in the header beside Live. */
.cp-engine[b-d1soxjq286] {
    max-width: 10rem;
    padding: 2px 4px;
    font-size: 11px;
    border-radius: 4px;
    border: 1px solid var(--cp-border);
    background: var(--cp-bg);
    color: var(--cp-text);
}

.cp-live[b-d1soxjq286] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 8px;
    border-radius: 999px;
    border: 1px solid var(--cp-live);
    color: var(--cp-live);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    cursor: pointer;
    background: transparent;
    margin-left: auto;
    flex-shrink: 0;
}

.cp-live.on[b-d1soxjq286] { background: rgba(208, 69, 69, 0.15); }
.cp-live.off[b-d1soxjq286] { color: var(--cp-muted); border-color: var(--cp-border); }
.cp-live .cp-dot[b-d1soxjq286] { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.cp-live.on .cp-dot[b-d1soxjq286] { animation: cp-pulse-b-d1soxjq286 1.4s infinite; }

@keyframes cp-pulse-b-d1soxjq286 { 50% { opacity: 0.4; } }

.cp-games[b-d1soxjq286] {
    display: flex;
    gap: 6px;
    padding: 10px 14px;
    border-bottom: 1px solid var(--cp-border);
    overflow-x: auto;
}

.cp-game[b-d1soxjq286] {
    flex-shrink: 0;
    padding: 6px 10px;
    background: var(--cp-panel-2);
    color: var(--cp-muted);
    border: 1px solid var(--cp-border);
    border-radius: 6px;
    cursor: pointer;
    font: inherit;
    line-height: 1.2;
    min-width: 58px;
    text-align: center;
}

.cp-game-label[b-d1soxjq286] {
    display: block;
    font-size: 13px;
    color: var(--cp-text);
    font-weight: 600;
}

.cp-game-result[b-d1soxjq286] {
    display: block;
    font-size: 10px;
    margin-top: 2px;
    color: var(--cp-muted);
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

.cp-game.win-bottom[b-d1soxjq286] { border-left: 3px solid var(--cp-dice-bone); }
.cp-game.win-top[b-d1soxjq286] { border-left: 3px solid var(--cp-dice-red); }

.cp-game:hover[b-d1soxjq286] { color: var(--cp-text); border-color: var(--cp-gold-dim); }

.cp-game.active[b-d1soxjq286] {
    background: var(--cp-gold-bg);
    border-color: var(--cp-gold);
}

.cp-game.active .cp-game-label[b-d1soxjq286] { color: var(--cp-gold); }

.cp-live-dot[b-d1soxjq286] {
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--cp-live);
    margin-right: 4px;
    animation: cp-pulse-b-d1soxjq286 1.4s infinite;
    vertical-align: middle;
}

.cp-filter[b-d1soxjq286] {
    padding: 10px 14px;
    border-bottom: 1px solid var(--cp-border);
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.cp-filter input[b-d1soxjq286] {
    width: 100%;
    padding: 7px 10px;
    background: var(--cp-bg);
    color: var(--cp-text);
    border: 1px solid var(--cp-border);
    border-radius: 6px;
    font: inherit;
}

.cp-filter input[b-d1soxjq286]::placeholder { color: var(--cp-muted); }
.cp-filter input:focus[b-d1soxjq286] { outline: none; border-color: var(--cp-gold-dim); }

.cp-pills[b-d1soxjq286] { display: flex; gap: 6px; flex-wrap: wrap; }

.cp-pill[b-d1soxjq286] {
    padding: 3px 9px;
    background: transparent;
    color: var(--cp-muted);
    border: 1px solid var(--cp-border);
    border-radius: 999px;
    cursor: pointer;
    font: inherit;
    font-size: 11px;
}

.cp-pill:hover[b-d1soxjq286] { color: var(--cp-text); border-color: var(--cp-gold-dim); }

.cp-pill.active[b-d1soxjq286] {
    color: var(--cp-gold);
    border-color: var(--cp-gold);
    background: var(--cp-gold-bg);
}

/* The turn list itself is <TurnList> (Components/TurnList.razor.css, the
   th-row design shared with Play/Transcribe/Review) — .cp-turnlist stays
   only as the scrollable container around it. The old .cp-row grid design
   (30px/20px/auto/1fr columns sized for a 420px panel, spelled-out cube
   labels, per-action cube colours) is gone; see broadcast.css for why the
   panel is 300px now. */
.cp-turnlist[b-d1soxjq286] {
    flex: 1;
    overflow-y: auto;
    padding: 4px 0;
    min-height: 0;
}

.cp-footer[b-d1soxjq286] {
    padding: 8px 14px;
    border-top: 1px solid var(--cp-border);
    color: var(--cp-muted);
    font-size: 11px;
    display: flex;
    justify-content: space-between;
    /* Both spans' full text no longer reliably fits one 300px line (it did
       at 420px) — wrap to a second line instead of clipping "navigate". */
    flex-wrap: wrap;
    gap: 2px 10px;
    background: var(--cp-panel-2);
}

.cp-footer .cp-snap[b-d1soxjq286] { color: var(--cp-gold); }
/* A click that moved nothing on air. Red, and the reason on hover. */
.cp-footer .cp-fault[b-d1soxjq286] { color: #ffb4ba; }

/* A click the seat queued because its hub link was down: amber, the measured
   reason on hover. Only the WebAssembly seat has a queue (venue-pages-off-blazor.md §5). */
.cp-footer .cp-queued[b-d1soxjq286] { color: #ffc85a; }
/* /Components/TurnList.razor.rz.scp.css */
/* Moved verbatim out of TurnHistoryComponent's old inline <style> block —
   same class names, same colours. This is now the ONE home for the th-row
   design; CommentatorMatchPanel renders it too instead of its own .cp-row
   markup. CSS isolation scopes every rule below to elements TurnList.razor
   renders directly, so it is safe wherever <TurnList> is used. */
.turn-history[b-108gz4znwe] { font-size: .78rem; display:flex; flex-direction:column; gap:1px; }
.turn-history.empty[b-108gz4znwe] { font-style:italic; opacity:.8; }
.th-row[b-108gz4znwe] { display:flex; align-items:center; gap:4px; padding:3px 6px; cursor:pointer; transition:background .1s; border-radius:3px; white-space:nowrap; }
.th-row:hover[b-108gz4znwe] { background: rgba(255,255,255,0.08); }
.th-row.selected-turn[b-108gz4znwe] { background: rgba(255,138,60,0.22); outline: 2px solid rgba(255,138,60,0.5); outline-offset:-2px; }
.th-row.illegal-turn[b-108gz4znwe] { color:#ff6b6b; }
/* The interesting-position star: quiet until set, gold when it is. */
.th-mark[b-108gz4znwe] { margin-left:auto; flex-shrink:0; background:none; border:none; padding:0 2px; font-size:.8rem; line-height:1; color:rgba(255,255,255,0.22); cursor:pointer; }
.th-mark:hover[b-108gz4znwe] { color:rgba(255,200,90,0.7); }
.th-mark.on[b-108gz4znwe] { color:#ffc85a; }
/* A change the seat has queued and the server has not confirmed: dim gold, whichever way it is going. */
.th-mark.pending[b-108gz4znwe] { color: rgba(255,200,90,0.55); }
span.th-mark[b-108gz4znwe] { cursor:default; }
.th-no[b-108gz4znwe] { color:var(--color-text-muted,#8a95a8); font-size:.68rem; min-width:1.6em; text-align:right; flex-shrink:0; }
.th-dot[b-108gz4znwe] { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.th-dot.player-bottom[b-108gz4znwe] { background: var(--bottom-checker-a, #eee); }
.th-dot.player-top[b-108gz4znwe] { background: var(--top-checker-a, #333); }
.th-dice[b-108gz4znwe] { font-weight:700; min-width:1.6em; flex-shrink:0; }
.th-cube[b-108gz4znwe] { font-size:.68rem; color:#ff8a3c; font-weight:600; flex-shrink:0; }
.th-moves[b-108gz4znwe] { color:var(--color-text,#c8cdd5); overflow:hidden; text-overflow:ellipsis; }
.th-err[b-108gz4znwe] { font-weight:700; flex-shrink:0; padding:0 .25rem; border-radius:3px; font-size:.66rem; }
.th-row.err-doubtful[b-108gz4znwe] { background: rgba(255,200,90,.08); }
.th-row.err-doubtful .th-err[b-108gz4znwe] { color:var(--color-warning,#ffc85a); border:1px solid rgba(255,200,90,.5); }
.th-row.err-bad[b-108gz4znwe] { background: rgba(255,138,60,.10); }
.th-row.err-bad .th-err[b-108gz4znwe] { color:var(--color-accent,#ff8a3c); border:1px solid rgba(255,138,60,.5); }
.th-row.err-blunder[b-108gz4znwe] { background: rgba(255,98,93,.14); }
.th-row.err-blunder .th-err[b-108gz4znwe] { color:var(--color-danger,#ff625d); border:1px solid rgba(255,98,93,.55); }
