/* State and utility styles. Visual design is defined once in workspace.css. */
label { display:block; font-size:.875rem; font-weight:600; color:var(--muted); margin-bottom:8px; }
.error-box,.result-card { display:none; }
.error-box.show,.result-card.show { display:block; }
.hint.success { color:var(--positive); }.hint.error { color:var(--negative); }
.admin-only { display:none!important; }
body.logged-in .admin-only { display:revert!important; }
.logged-out-only { display:none!important; }
body:not(.logged-in) .logged-out-only { display:revert!important; }
.needs-review { background:var(--warning-bg)!important; }
.warn-note,#reviewCountBadge { color:var(--negative); }
.pending-row { background:var(--accent-light)!important; }
.pending-note { color:var(--accent); font-weight:600; }
/* Deliberately-excluded-by-rule rows (no games / <50% participation) — a
   neutral gray, distinct from the red "error" and amber "needs-review"
   colors, since this is an intentional, policy-driven skip, not a problem. */
.skipped-row { background:var(--border-subtle)!important; }
.skipped-note { color:var(--muted); font-weight:600; }
.tournament-group { border:1px solid var(--border); border-radius:10px; padding:14px 16px; margin-bottom:14px; }
.tournament-group h3 { margin:0 0 4px; text-align:center; }
.tournament-group .tournament-meta { color:var(--muted); font-size:.875rem; margin-bottom:10px; text-align:center; }
.tournament-group .category-group { margin-top:10px; }
.tournament-group .category-group h4 { margin:0 0 6px; font-size:.9375rem; color:var(--accent); text-align:center; }
/* Each category's player table sits centered directly under its heading,
   sized to its own content (not stretched edge-to-edge of the card) — a
   tidy little roster under each tournament/category title rather than a
   sparse full-width table when there are only a few players. */
.tournament-group .category-group .table-wrap { display:flex; justify-content:center; border:0; background:none; max-height:none; overflow:visible; }
.tournament-players-table { width:auto; min-width:min(100%, 480px); margin:0 auto; border:1px solid var(--border); border-radius:9px; overflow:hidden; background:var(--card); }
.tournament-players-table th, .tournament-players-table td { text-align:center; }
.progress-item { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:8px 0; border-bottom:1px solid var(--border); }
.progress-item .fname { flex:1; min-width:0; }
.progress-item.status-success .fname { color:var(--positive); }
.progress-item.status-error .fname { color:var(--negative); }
.progress-item.status-skipped .fname { color:var(--muted); }
/* Улирлын эцсийн чансаа гаргах — big friendly numbers up top, then a
   name-by-name, old->new breakdown below so nothing moves into the
   Federation's real list without the admin having seen every row first. */
.season-close-stats { display:flex; flex-wrap:wrap; gap:12px; margin-bottom:16px; }
.season-close-stat { flex:1; min-width:140px; border:1px solid var(--border); border-radius:10px; padding:14px 16px; text-align:center; background:var(--card); }
.season-close-stat .num { display:block; font-size:1.75rem; font-weight:700; line-height:1.2; }
.season-close-stat .lbl { display:block; font-size:.8125rem; color:var(--muted); margin-top:4px; }
.season-close-stat.updated .num { color:var(--accent); }
.season-close-stat.added .num { color:var(--positive); }
.season-close-stat.skipped .num { color:var(--negative); }
.season-close-group { border:1px solid var(--border); border-radius:10px; padding:12px 16px; margin-bottom:14px; }
.season-close-group h4 { margin:0 0 10px; text-align:center; font-size:.9375rem; }
.season-close-group.updated h4 { color:var(--accent); }
.season-close-group.added h4 { color:var(--positive); }
.season-close-group.skipped h4 { color:var(--negative); }
.season-close-rows { display:flex; flex-direction:column; gap:0; max-height:360px; overflow-y:auto; }
.season-close-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:7px 4px; border-bottom:1px solid var(--border-subtle); font-size:.9375rem; }
.season-close-row:last-child { border-bottom:0; }
.season-close-row .name { flex:1; min-width:0; }
.season-close-row .change { font-variant-numeric:tabular-nums; white-space:nowrap; }
.season-close-row .change .arrow { color:var(--muted); margin:0 4px; }
.season-close-row .delta-up { color:var(--positive); font-weight:600; }
.season-close-row .delta-down { color:var(--negative); font-weight:600; }
.season-close-row .delta-flat { color:var(--muted); }
#syncErrorBanner { text-align:center; padding:8px 16px; cursor:pointer; }
td { text-align:left; }
#historyTable td,#summaryTable td,#npPendingTable td,#batchReviewTable td { white-space:nowrap; }
#historyTable td:nth-child(n+9):not(:last-child),#summaryTable td:nth-child(n+2),#npPendingTable td:nth-child(4),#npPendingTable td:nth-child(6),#npPendingTable td:nth-child(7) { text-align:right; font-variant-numeric:tabular-nums; }
@media(max-width:700px) { #authStatusLabel { display:none; } }
@media print { body { background:white!important;color:black!important; }.compute-btn,.add-btn,.mini-btn,.dropzone,#photoCard,.modal-overlay,#feedbackView { display:none!important; } }
