/* ============================================================
   Scoreboard — LED board style
   ============================================================ */

@font-face {
  font-family: 'Digital-7 Mono';
  src: url('/static/fonts/digital_7mono.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
  font-display: block;
}

:root {
  --led-color: #ff9500;
  --led-dim: #3a2200;
  --led-glow: 0 0 8px #ff9500, 0 0 20px #ff9000;
  --board-bg: #0a0a0a;
  --board-surface: #111111;
  --board-border: #2a2a2a;
  --team0-color: #FF6B35;
  --team1-color: #4A90D9;
  --control-bg: #1a1a1a;
  --control-hover: #2a2a2a;
  --text-muted: #666;
  --text-secondary: #aaa;
  --font-led: 'Orbitron', 'Courier New', monospace;
  --font-digits: 'Digital-7 Mono', 'Courier New', monospace;
}

/* ---- Page layout ---- */
.scoreboard-app {
  min-height: 100vh;
  background: var(--board-bg);
  color: #eee;
  display: flex;
  flex-direction: column;
}

/* Remove common.css padding when on board page */
.scoreboard-game .page-container,
.scoreboard-game .main-content {
  padding: 0 !important;
  margin: 0 !important;
  max-width: none !important;
}

/* ============================================================
   FULLSCREEN MODE
   ============================================================ */
.scoreboard-game.board-fullscreen nav,
.scoreboard-game.board-fullscreen footer,
.scoreboard-game.board-fullscreen .page-container > *:not(.main-content) {
  display: none !important;
}

.scoreboard-game.board-fullscreen .main-content {
  position: fixed;
  inset: 0;
  z-index: 9000;
  overflow-y: auto;
}

.scoreboard-game.board-fullscreen .scoreboard-app {
  min-height: 100%;
}

/* ============================================================
   CONFIG PAGE
   ============================================================ */
#section-config {
  max-width: 760px;
  margin: 0 auto;
  padding: 40px 20px 60px;
  width: 100%;
}

.config-header {
  text-align: center;
  margin-bottom: 36px;
}

.config-title {
  font-family: var(--font-led);
  font-size: 2rem;
  color: var(--led-color);
  text-shadow: var(--led-glow);
  margin: 0 0 10px;
  letter-spacing: 0.05em;
}

.config-subtitle {
  color: var(--text-secondary);
  font-size: 1rem;
  margin: 0;
}

/* Sport Cards Grid */
.sport-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: 14px;
  margin-bottom: 32px;
}

.sport-card {
  background: var(--board-surface);
  border: 2px solid var(--board-border);
  border-radius: 12px;
  padding: 24px 12px 18px;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  transition: border-color 0.15s, transform 0.1s, background 0.15s;
  color: #ddd;
}

.sport-card:hover {
  border-color: var(--led-color);
  background: #181818;
  transform: translateY(-2px);
}

.sport-card.selected {
  border-color: var(--led-color);
  background: #1a1000;
  box-shadow: 0 0 12px rgba(255, 149, 0, 0.3);
}

.sport-icon {
  font-size: 2.2rem;
  line-height: 1;
}

.sport-label {
  font-size: 0.8rem;
  font-weight: 600;
  text-align: center;
  color: #ccc;
  letter-spacing: 0.03em;
}

/* Custom Settings */
.custom-settings {
  background: var(--board-surface);
  border: 1px solid var(--board-border);
  border-radius: 10px;
  padding: 24px;
  margin-bottom: 24px;
}

.custom-settings h3 {
  margin: 0 0 20px;
  color: var(--led-color);
  font-family: var(--font-led);
  font-size: 0.95rem;
  letter-spacing: 0.05em;
}

.settings-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}

.settings-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 0.85rem;
  color: var(--text-secondary);
}

.settings-row input[type="number"],
.settings-row input[type="text"] {
  background: #1a1a1a;
  border: 1px solid #333;
  border-radius: 6px;
  padding: 8px 10px;
  color: #eee;
  font-size: 0.9rem;
  width: 100%;
  box-sizing: border-box;
}

.toggle-row {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}

.toggle-input {
  width: 18px;
  height: 18px;
  cursor: pointer;
  accent-color: var(--led-color);
}

/* Team Names */
.team-names-section {
  background: var(--board-surface);
  border: 1px solid var(--board-border);
  border-radius: 10px;
  padding: 24px;
  margin-bottom: 24px;
}

.team-names-section h3 {
  margin: 0 0 20px;
  color: var(--led-color);
  font-family: var(--font-led);
  font-size: 0.95rem;
  letter-spacing: 0.05em;
}

.team-inputs {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.team-input-row {
  display: flex;
  align-items: center;
  gap: 12px;
}

.color-pick {
  width: 40px;
  height: 40px;
  border: none;
  border-radius: 8px;
  padding: 2px;
  cursor: pointer;
  background: transparent;
}

.team-name-input {
  flex: 1;
  background: #1a1a1a;
  border: 1px solid #333;
  border-radius: 8px;
  padding: 10px 14px;
  color: #eee;
  font-size: 1rem;
}

/* Start Section */
.start-section {
  text-align: center;
  margin-top: 10px;
}

.btn-start {
  background: var(--led-color);
  color: #000;
  border: none;
  border-radius: 10px;
  padding: 16px 48px;
  font-size: 1.1rem;
  font-weight: 700;
  font-family: var(--font-led);
  letter-spacing: 0.05em;
  cursor: pointer;
  transition: opacity 0.15s, transform 0.1s;
}

.btn-start:hover {
  opacity: 0.9;
  transform: translateY(-1px);
}

.btn-start:disabled {
  opacity: 0.4;
  cursor: not-allowed;
  transform: none;
}

.config-status {
  margin-top: 14px;
  font-size: 0.9rem;
  color: var(--text-secondary);
  min-height: 20px;
}

.config-status.error {
  color: #e74c3c;
}

/* ============================================================
   SCOREBOARD PAGE
   ============================================================ */
#section-board {
  display: flex;
  flex-direction: column;
  flex: 1;
  background: var(--board-bg);
  padding: 0;
  position: relative;
}

/* ---- Top Bar — precision instrument panel ---- */
.board-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 14px;
  height: 46px;
  background: #0d0d0d;
  border-bottom: 1px solid #1c1c1c;
  box-shadow: 0 1px 0 rgba(255, 149, 0, 0.1), inset 0 -1px 0 #000;
  flex-shrink: 0;
  gap: 12px;
  position: relative;
  overflow: hidden;
}

/* Scanline texture */
.board-topbar::before {
  content: '';
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 3px,
    rgba(0, 0, 0, 0.2) 3px,
    rgba(0, 0, 0, 0.2) 4px
  );
  pointer-events: none;
  z-index: 0;
}

/* Amber top-edge glow line */
.board-topbar::after {
  content: '';
  position: absolute;
  top: 0;
  left: 10%;
  right: 10%;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255, 149, 0, 0.5), transparent);
}

.topbar-left,
.topbar-center,
.topbar-right {
  display: flex;
  align-items: center;
  gap: 8px;
  position: relative;
  z-index: 1;
}

.topbar-left { flex: 1; }
.topbar-right { flex: 1; justify-content: flex-end; }
.topbar-center { flex-shrink: 0; }

.topbar-wordmark {
  font-family: var(--font-led);
  font-size: 0.6rem;
  letter-spacing: 0.3em;
  color: #3a3a3a;
  text-transform: uppercase;
  user-select: none;
}

.topbar-wordmark-accent {
  color: #4a4a4a;
}

/* Back button — panel key style */
.btn-back {
  font-family: var(--font-led);
  font-size: 0.58rem;
  letter-spacing: 0.15em;
  color: #555;
  text-decoration: none;
  padding: 5px 10px;
  border-radius: 3px;
  border: 1px solid #252525;
  background: #0a0a0a;
  line-height: 1;
  transition: color 0.15s, border-color 0.15s, box-shadow 0.15s;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.6), 0 1px 0 rgba(255,255,255,0.02);
}

.btn-back:hover {
  color: var(--led-color);
  border-color: rgba(255, 149, 0, 0.35);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.6), 0 0 8px rgba(255, 149, 0, 0.12);
}

/* Fullscreen button — same panel key style */
.btn-topbar-icon {
  font-family: var(--font-led);
  background: #0a0a0a;
  border: 1px solid #252525;
  color: #555;
  cursor: pointer;
  font-size: 0.85rem;
  padding: 5px 8px;
  border-radius: 3px;
  line-height: 1;
  transition: color 0.15s, border-color 0.15s, box-shadow 0.15s;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.6), 0 1px 0 rgba(255,255,255,0.02);
}

.btn-topbar-icon:hover {
  color: var(--led-color);
  border-color: rgba(255, 149, 0, 0.35);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.6), 0 0 8px rgba(255, 149, 0, 0.12);
}

/* Period display */
.period-display {
  font-family: var(--font-led);
  font-size: 1.1rem;
  color: var(--led-color);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-align: center;
  padding: 8px 20px 4px;
  flex-shrink: 0;
}

/* Role badge — status indicator with LED dot */
.role-badge {
  font-family: var(--font-led);
  font-size: 0.55rem;
  padding: 4px 9px;
  border-radius: 3px;
  letter-spacing: 0.2em;
  display: flex;
  align-items: center;
  gap: 6px;
}

.role-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  flex-shrink: 0;
  display: inline-block;
}

.role-host {
  background: rgba(255, 149, 0, 0.07);
  color: var(--led-color);
  border: 1px solid rgba(255, 149, 0, 0.25);
}

.role-host .role-dot {
  background: var(--led-color);
  box-shadow: 0 0 5px var(--led-color);
  animation: dot-pulse 2.2s ease-in-out infinite;
}

.role-viewer {
  background: rgba(60, 60, 60, 0.1);
  color: #484848;
  border: 1px solid #222;
}

.role-viewer .role-dot {
  background: #333;
}

@keyframes dot-pulse {
  0%, 100% { opacity: 1; box-shadow: 0 0 5px var(--led-color); }
  50%       { opacity: 0.3; box-shadow: 0 0 2px var(--led-color); }
}

/* ---- Large timer section (between topbar and scoreboard) ---- */
.timer-section {
  text-align: center;
  padding: 12px 20px 4px;
  background: var(--board-bg);
  flex-shrink: 0;
}

.led-timer-main {
  font-family: var(--font-digits);
  font-size: clamp(4rem, 16vw, 11rem);
  color: var(--led-color);
  text-shadow: var(--led-glow);
  letter-spacing: 0.06em;
  font-weight: 900;
  cursor: default;
  line-height: 1;
  display: block;
  font-variant-numeric: tabular-nums;
}

/* Main Scoreboard */
.scoreboard-main {
  display: flex;
  flex: 1;
  align-items: stretch;
  min-height: 220px;
}

.team-panel {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 20px 16px;
  gap: 12px;
}

.team-name {
  font-family: var(--font-led);
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #ccc;
  text-align: center;
  max-width: 200px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.score-display {
  cursor: pointer;
  user-select: none;
  padding: 8px 16px;
  border-radius: 12px;
  transition: background 0.1s;
  position: relative;
}

.score-display:hover .led-score {
  text-shadow: var(--led-glow), 0 0 40px var(--led-color);
}

.led-score {
  font-family: var(--font-digits);
  font-size: clamp(5rem, 15vw, 10rem);
  font-weight: 900;
  color: var(--led-color);
  text-shadow: var(--led-glow);
  line-height: 1;
  letter-spacing: 0.02em;
  display: block;
  font-variant-numeric: tabular-nums;
}

.team-stats {
  display: flex;
  gap: 16px;
  align-items: center;
}

.stat-item {
  display: flex;
  align-items: center;
  gap: 5px;
  cursor: pointer;
  padding: 5px 10px;
  border-radius: 8px;
  background: #151515;
  border: 1px solid #222;
  transition: border-color 0.15s;
}

.stat-item:hover {
  border-color: var(--led-color);
}

.stat-label {
  font-size: 0.68rem;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.stat-value {
  font-family: var(--font-digits);
  font-size: 0.95rem;
  font-weight: 700;
  color: #ccc;
  font-variant-numeric: tabular-nums;
}

/* Score Shortcuts */
.score-shortcuts {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  justify-content: center;
}

.btn-shortcut {
  background: #1a1a1a;
  border: 1px solid #333;
  border-radius: 8px;
  padding: 6px 12px;
  color: var(--led-color);
  font-family: var(--font-led);
  font-size: 0.8rem;
  font-weight: 700;
  cursor: pointer;
  transition: background 0.1s, border-color 0.1s;
  letter-spacing: 0.05em;
}

.btn-shortcut:hover {
  background: #222;
  border-color: var(--led-color);
}

.btn-shortcut.btn-minus {
  color: #e74c3c;
  border-color: #3a1a1a;
}

.btn-shortcut.btn-minus:hover {
  border-color: #e74c3c;
}

/* Center Divider */
.center-divider {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 20px 8px;
  gap: 18px;
  min-width: 70px;
}

.vs-text {
  font-family: var(--font-led);
  font-size: 1rem;
  color: var(--text-muted);
  letter-spacing: 0.2em;
  font-weight: 700;
}

/* Sub-timer (shot clock) — horizontal row below main timer */
.sub-timer-section {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  gap: 16px;
  padding: 4px 20px 8px;
  background: var(--board-bg);
  flex-shrink: 0;
}

.sub-timer-controls {
  display: flex;
  align-items: center;
  gap: 6px;
}

.btn-sub-timer-start,
.btn-sub-timer-pause {
  padding: 5px 10px;
  font-size: 0.8rem;
}

.led-shot-clock {
  font-family: var(--font-digits);
  font-size: clamp(2.5rem, 8vw, 5rem);
  font-weight: 900;
  color: var(--led-color);
  text-shadow: var(--led-glow);
  letter-spacing: 0.05em;
  line-height: 1;
  transition: color 0.2s, text-shadow 0.2s;
  font-variant-numeric: tabular-nums;
}

.led-shot-clock.urgent {
  color: #e74c3c;
  text-shadow: 0 0 8px #e74c3c, 0 0 20px #e74c3c;
}

.btn-shot-clock-reset {
  background: transparent;
  border: 1px solid #333;
  border-radius: 6px;
  color: #888;
  cursor: pointer;
  font-size: 0.9rem;
  padding: 3px 7px;
  transition: border-color 0.15s, color 0.15s;
}

.btn-shot-clock-reset:hover {
  border-color: var(--led-color);
  color: var(--led-color);
}

/* Host Controls */
.host-controls {
  background: var(--board-surface);
  border-top: 1px solid var(--board-border);
  padding: 12px 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex-shrink: 0;
}

.timer-controls,
.game-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
}

.btn-control {
  background: var(--control-bg);
  border: 1px solid #333;
  border-radius: 8px;
  color: #ccc;
  cursor: pointer;
  font-size: 0.82rem;
  font-weight: 600;
  padding: 9px 16px;
  transition: background 0.1s, border-color 0.1s, color 0.1s;
  letter-spacing: 0.03em;
  display: flex;
  align-items: center;
  gap: 5px;
}

.btn-control:hover {
  background: var(--control-hover);
  border-color: #555;
  color: #fff;
}

.btn-timer-start {
  border-color: rgba(39, 174, 96, 0.5);
  color: #27ae60;
}
.btn-timer-start:hover { border-color: #27ae60; }

.btn-timer-pause {
  border-color: rgba(255, 149, 0, 0.5);
  color: var(--led-color);
}
.btn-timer-pause:hover { border-color: var(--led-color); }

.btn-undo {
  border-color: rgba(100, 100, 200, 0.4);
}

.btn-period {
  border-color: rgba(100, 180, 255, 0.4);
  color: #4a90d9;
}
.btn-period:hover { border-color: #4a90d9; }

.btn-end {
  border-color: rgba(231, 76, 60, 0.4);
  color: #e74c3c;
}
.btn-end:hover { border-color: #e74c3c; }

/* ============================================================
   ACTION LOG — event terminal
   ============================================================ */
.action-log-section {
  background: #0b0b0b;
  border-top: 1px solid #181818;
  flex-shrink: 0;
}

.btn-log-toggle {
  width: 100%;
  background: none;
  border: none;
  color: #3a3a3a;
  cursor: pointer;
  font-size: 0.56rem;
  padding: 7px 16px;
  text-align: left;
  display: flex;
  align-items: center;
  gap: 8px;
  transition: color 0.15s;
  letter-spacing: 0.18em;
  font-family: var(--font-led);
  text-transform: uppercase;
}

.btn-log-toggle::before {
  content: '▸';
  font-size: 0.5rem;
  color: #2a2a2a;
  transition: color 0.15s;
}

.btn-log-toggle:hover { color: #666; }
.btn-log-toggle:hover::before { color: rgba(255,149,0,0.4); }

.log-arrow {
  margin-left: auto;
  font-size: 0.5rem;
  transition: transform 0.25s ease;
  color: #2a2a2a;
}

.action-log-panel {
  max-height: 180px;
  overflow-y: auto;
  border-top: 1px solid #141414;
  background: #080808;
}

.action-log-panel::-webkit-scrollbar {
  width: 3px;
}
.action-log-panel::-webkit-scrollbar-track { background: #080808; }
.action-log-panel::-webkit-scrollbar-thumb { background: #252525; border-radius: 2px; }

.action-log-list {
  padding: 3px 0;
}

.log-entry {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 4px 16px;
  font-size: 0.68rem;
  border-bottom: 1px solid #0e0e0e;
  color: #606060;
  font-family: var(--font-led);
  letter-spacing: 0.05em;
  transition: background 0.1s;
}

.log-entry:first-child {
  color: #a0a0a0;
  border-left: 2px solid rgba(255,149,0,0.3);
}

.log-entry:last-child { border-bottom: none; }

.log-entry:hover { background: rgba(255,255,255,0.01); }

.log-entry-icon {
  font-size: 0.8rem;
  flex-shrink: 0;
  opacity: 0.7;
}

.log-entry:first-child .log-entry-icon { opacity: 0.95; }

.log-entry-text {
  flex: 1;
}

.log-entry-time {
  color: #484848;
  font-size: 0.6rem;
  flex-shrink: 0;
  font-family: var(--font-digits);
  letter-spacing: 0.03em;
}

.log-entry:first-child .log-entry-time { color: #666; }

.log-empty {
  text-align: center;
  color: #2a2a2a;
  font-size: 0.62rem;
  padding: 12px;
  font-family: var(--font-led);
  letter-spacing: 0.1em;
}

/* Game Over Screen */
.game-over-screen {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.92);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 24px;
  z-index: 100;
  padding: 20px;
  overflow-y: auto;
}

.game-over-title {
  font-family: var(--font-led);
  font-size: 2.2rem;
  color: var(--led-color);
  text-shadow: var(--led-glow);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin: 0;
}

.final-scores {
  display: flex;
  gap: 40px;
  align-items: center;
}

.final-score-team {
  text-align: center;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.final-score-name {
  font-size: 1rem;
  color: var(--text-secondary);
  font-family: var(--font-led);
  letter-spacing: 0.08em;
}

.final-score-value {
  font-family: var(--font-led);
  font-size: 4rem;
  font-weight: 900;
  color: var(--led-color);
  text-shadow: var(--led-glow);
  line-height: 1;
}

.btn-new-game {
  background: var(--led-color);
  color: #000;
  border: none;
  border-radius: 10px;
  padding: 14px 36px;
  font-size: 1rem;
  font-weight: 700;
  font-family: var(--font-led);
  letter-spacing: 0.05em;
  text-decoration: none;
  transition: opacity 0.15s;
}

.btn-new-game:hover { opacity: 0.85; }

/* Sync Status */
.sync-status {
  position: fixed;
  bottom: 12px;
  right: 12px;
  z-index: 50;
}

#sync-indicator {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #222;
  transition: background 0.3s, box-shadow 0.3s;
}
#sync-indicator.synced  { background: #27ae60; box-shadow: 0 0 6px #27ae60; }
#sync-indicator.syncing { background: var(--led-color); box-shadow: 0 0 6px var(--led-color); animation: dot-pulse 1s ease-in-out infinite; }
#sync-indicator.error   { background: #e74c3c; box-shadow: 0 0 6px #e74c3c; }

/* Board Footer — broadcast panel */
.board-footer {
  padding: 8px 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #0b0b0b;
  border-top: 1px solid #181818;
}


/* ============================================================
   BROADCAST MODE overrides
   ============================================================ */
.broadcast-mode .board-topbar {
  padding: 14px 28px;
}

.broadcast-mode .led-timer-main {
  font-size: clamp(6rem, 20vw, 14rem);
}

.broadcast-mode .led-score {
  font-size: clamp(7rem, 20vw, 15rem);
}

.broadcast-mode .team-name {
  font-size: 1.4rem;
}

.broadcast-mode .host-controls,
.broadcast-mode .board-footer,
.broadcast-mode .action-log-section,
.broadcast-mode .roster-section,
.broadcast-mode .sync-status {
  display: none !important;
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 600px) {
  .sport-grid {
    grid-template-columns: repeat(3, 1fr);
  }

  .settings-grid {
    grid-template-columns: 1fr;
  }

  .led-score {
    font-size: clamp(4rem, 18vw, 15rem);
  }

  .led-timer-main {
    font-size: clamp(3rem, 18vw, 7rem);
  }

  .team-name {
    font-size: 0.8rem;
  }

  .board-topbar {
    padding: 8px 10px;
  }

  .btn-control {
    padding: 7px 10px;
    font-size: 0.76rem;
  }

  .host-controls {
    padding: 10px;
  }

  .timer-section {
    padding: 8px 12px 2px;
  }
}

/* ============================================================
   Roster panels
   ============================================================ */

.roster-section {
  margin-top: 8px;
}

.btn-roster-toggle {
  background: none;
  border: 1px solid var(--board-border);
  color: var(--text-secondary);
  padding: 3px 9px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 0.75rem;
  transition: color 0.2s, border-color 0.2s;
}

.btn-roster-toggle:hover,
.btn-roster-toggle.active {
  color: #eee;
  border-color: #555;
}

.roster-panel {
  background: #111;
  border: 1px solid var(--board-border);
  border-radius: 6px;
  padding: 8px;
  margin-top: 6px;
}

.player-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
  border-bottom: 1px solid #1e1e1e;
  font-size: 0.82rem;
}

.player-row:last-child { border-bottom: none; }

.player-number {
  color: var(--text-muted);
  min-width: 28px;
}

.player-name {
  flex: 1;
  color: #ddd;
}

.player-pts,
.player-fouls {
  color: var(--text-secondary);
  font-size: 0.75rem;
}

.btn-remove-player {
  background: none;
  border: none;
  color: #555;
  cursor: pointer;
  padding: 2px 6px;
  border-radius: 3px;
  font-size: 0.75rem;
}

.btn-remove-player:hover { color: #e55; }

.player-row.fouled-out .player-name,
.player-row.fouled-out .player-number {
  opacity: 0.45;
  text-decoration: line-through;
}

.player-fouls.foul-limit {
  color: #e74c3c;
  font-weight: 700;
}

.no-players-msg {
  color: var(--text-muted);
  font-size: 0.78rem;
  text-align: center;
  margin: 6px 0;
}

.add-player-form {
  display: flex;
  gap: 6px;
  margin-top: 8px;
  align-items: center;
}

.player-name-input {
  flex: 1;
  background: #1a1a1a;
  border: 1px solid #333;
  color: #eee;
  padding: 4px 8px;
  border-radius: 4px;
  font-size: 0.8rem;
}

.player-number-input {
  width: 44px;
  background: #1a1a1a;
  border: 1px solid #333;
  color: #eee;
  padding: 4px 6px;
  border-radius: 4px;
  font-size: 0.8rem;
  text-align: center;
}

.btn-add-player {
  background: #2a3a2a;
  border: 1px solid #3a5a3a;
  color: #7c7;
  padding: 4px 12px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 1rem;
  font-weight: bold;
}

.btn-add-player:hover { background: #3a4a3a; }

/* ============================================================
   Credit player popup
   ============================================================ */

.credit-popup {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.7);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1000;
}

.credit-popup-inner {
  background: #1a1a1a;
  border: 1px solid #333;
  border-radius: 10px;
  padding: 20px 24px;
  min-width: 220px;
  max-width: 340px;
  width: 90%;
}

.credit-title {
  color: var(--text-secondary);
  font-size: 0.85rem;
  text-align: center;
  margin: 0 0 12px;
}

.credit-player-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-height: 220px;
  overflow-y: auto;
}

.btn-credit-player {
  background: #252525;
  border: 1px solid #3a3a3a;
  color: #ddd;
  padding: 8px 12px;
  border-radius: 6px;
  cursor: pointer;
  text-align: left;
  font-size: 0.9rem;
  transition: background 0.15s;
}

.btn-credit-player:hover { background: #333; }

.btn-credit-skip {
  display: block;
  width: 100%;
  margin-top: 10px;
  background: none;
  border: 1px solid #333;
  color: var(--text-muted);
  padding: 7px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 0.82rem;
}

.btn-credit-skip:hover { border-color: #555; color: #aaa; }

/* ============================================================
   Player stats (game over)
   ============================================================ */

.player-stats-section {
  margin-top: 20px;
  display: none;
}

.player-stats-title {
  color: var(--text-secondary);
  font-size: 0.9rem;
  font-family: var(--font-led);
  letter-spacing: 0.06em;
  margin-bottom: 12px;
}

.player-stats-team {
  margin-bottom: 16px;
}

.player-stats-team h4 {
  color: #aaa;
  font-size: 0.8rem;
  margin-bottom: 6px;
}

.player-stats-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.82rem;
}

.player-stats-table th {
  color: var(--text-muted);
  text-align: left;
  padding: 3px 6px;
  border-bottom: 1px solid #2a2a2a;
}

.player-stats-table td {
  color: #ccc;
  padding: 3px 6px;
}

/* ============================================================
   My Recent Games (config page)
   ============================================================ */

.my-games-section {
  margin-top: 40px;
}

.my-games-title {
  color: var(--text-secondary);
  font-size: 1rem;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--board-border);
  padding-bottom: 8px;
}

.my-game-item {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px;
  background: #fff1;
  border: 1px solid #ddd2;
  border-radius: 8px;
  margin-bottom: 10px;
  transition: background 0.15s;
}

.my-game-item:hover { background: #fff2; }

.my-game-icon {
  font-size: 1.8rem;
  flex-shrink: 0;
}

.my-game-info {
  flex: 1;
  min-width: 0;
}

.my-game-teams {
  font-weight: 600;
  font-size: 0.95rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.my-game-score {
  color: var(--text-secondary);
  font-size: 0.85rem;
  margin-top: 2px;
}

.my-game-date {
  color: var(--text-muted);
  font-size: 0.75rem;
  margin-top: 2px;
}

.my-game-actions {
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex-shrink: 0;
}

.btn-my-game {
  padding: 5px 12px;
  border-radius: 5px;
  font-size: 0.78rem;
  cursor: pointer;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
}

.btn-my-game-resume {
  background: #1e3a1e;
  border: 1px solid #3a6a3a;
  color: #7c7;
}

.btn-my-game-resume:hover { background: #2a4a2a; }

.btn-my-game-copy {
  background: #1e1e3a;
  border: 1px solid #3a3a6a;
  color: #88c;
}

.btn-my-game-copy:hover { background: #2a2a4a; }

/* ============================================================
   TABLE TENNIS BOARD
   ============================================================ */

/* Config page options */
.tt-options {
  margin: 12px auto 0;
  padding: 14px 20px;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid rgba(255, 255, 255, 0.07);
  border-radius: 10px;
  max-width: 520px;
}

.tt-options-row {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}

.tt-options-row:last-child { margin-bottom: 0; }

.tt-options-label {
  font-family: var(--font-led);
  font-size: 0.7rem;
  letter-spacing: 0.14em;
  color: var(--text-muted);
  text-transform: uppercase;
  min-width: 100px;
}

.tt-limit-btns,
.tt-bestof-btns {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.btn-tt-limit,
.btn-tt-bestof {
  font-family: var(--font-led);
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  padding: 5px 14px;
  border-radius: 6px;
  border: 1px solid #333;
  background: transparent;
  color: #666;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
}

.btn-tt-limit.selected,
.btn-tt-bestof.selected {
  border-color: var(--color-accent);
  color: var(--color-accent);
  background: rgba(221, 118, 140, 0.08);
}

.btn-tt-limit:hover:not(.selected),
.btn-tt-bestof:hover:not(.selected) {
  border-color: #555;
  color: #888;
}

/* Board */
.tt-board {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 12px 12px 8px;
  width: 100%;
  gap: 12px;
}

.tt-game-info {
  font-family: var(--font-led);
  font-size: clamp(0.65rem, 2vw, 0.95rem);
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
  text-align: center;
}

.tt-main-row {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  max-width: 680px;
}

.tt-team-col {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 0 12px;
}

.tt-name {
  font-family: var(--font-led);
  font-size: clamp(0.75rem, 2.5vw, 1.25rem);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-align: center;
  /* color set inline */
}

.tt-games-row {
  display: flex;
  gap: 8px;
  align-items: center;
  min-height: 26px;
}

.tt-game-dot {
  font-size: clamp(0.85rem, 2.5vw, 1.3rem);
  transition: color 0.2s, text-shadow 0.2s;
}

.tt-dot-empty { color: #252525; }
/* .tt-dot-won color set inline */

.tt-pts {
  font-family: var(--font-digits);
  font-size: clamp(6rem, 20vw, 13rem);
  line-height: 0.9;
  font-variant-numeric: tabular-nums;
  transition: color 0.2s, text-shadow 0.2s;
  /* color and text-shadow set inline */
}

.tt-sep {
  font-family: var(--font-digits);
  font-size: clamp(3rem, 10vw, 6rem);
  color: #1e1e1e;
  flex-shrink: 0;
  align-self: flex-end;
  padding-bottom: 12px;
  line-height: 1;
}

/* Completed games history row */
.tt-history {
  width: 100%;
  max-width: 680px;
  text-align: center;
}

.tt-hist-inner {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  justify-content: center;
}

.tt-hist-game {
  font-family: var(--font-digits);
  font-size: clamp(1.1rem, 3.5vw, 2rem);
  font-variant-numeric: tabular-nums;
  display: flex;
  align-items: center;
  gap: 4px;
}

.tt-hist-sep {
  color: #2a2a2a;
  font-size: 0.8em;
}

/* Point buttons */
.tt-point-btns {
  display: flex;
  gap: 20px;
  justify-content: center;
  padding: 8px 12px 4px;
  flex-wrap: wrap;
  width: 100%;
}

.btn-tt-point {
  background: #141414;
  border: 2px solid #2a2a2a;
  border-radius: 10px;
  padding: 14px 32px;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  flex: 1;
  max-width: 260px;
  min-width: 130px;
  transition: background 0.1s, border-color 0.15s;
}

.btn-tt-point:hover  { background: #1e1e1e; }
.btn-tt-point:active { transform: scale(0.98); }

.btn-tt-pname {
  font-family: var(--font-led);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  /* color set inline */
}

.btn-tt-label {
  font-family: var(--font-led);
  font-size: 0.55rem;
  letter-spacing: 0.25em;
  color: #3a3a3a;
  text-transform: uppercase;
}

/* Broadcast mode overrides */
.broadcast-mode .tt-pts  { font-size: clamp(8rem, 25vw, 16rem); }
.broadcast-mode .tt-name { font-size: clamp(1.1rem, 3.5vw, 2rem); }
.broadcast-mode .tt-point-btns { display: none !important; }

/* ============================================================
   TENNIS BOARD
   ============================================================ */

.tennis-board {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 20px 12px 8px;
  width: 100%;
}

.tennis-table-wrap {
  width: 100%;
  overflow-x: auto;
}

.tennis-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: auto;
}

/* Column sizing */
.tc-name { width: 40%; }
.tc-set  { width: 10%; }
.tc-pts  { width: 18%; }

/* Header row */
.tennis-header-row {
  border-bottom: 1px solid #222;
}

.tennis-th {
  font-family: var(--font-led);
  font-size: 0.6rem;
  letter-spacing: 0.22em;
  color: var(--text-muted);
  text-transform: uppercase;
  text-align: center;
  padding: 0 8px 8px;
  font-weight: 400;
}

.tennis-th-name { text-align: left; padding-left: 0; }
.tennis-th-pts  { text-align: right; }

/* Team rows */
.tennis-team-row {
  border-bottom: 1px solid #181818;
}

.tennis-team-row:last-child { border-bottom: none; }

/* Player name column */
.tennis-td-name {
  font-family: var(--font-led);
  font-size: clamp(1rem, 3.5vw, 1.8rem);
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 16px 20px 16px 0;
  white-space: nowrap;
  text-align: left;
}

/* Set score columns */
.tennis-td-set {
  font-family: var(--font-digits);
  font-size: clamp(2.5rem, 8vw, 6rem);
  text-align: center;
  padding: 10px 8px;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  transition: color 0.2s, text-shadow 0.2s;
}

.tennis-set-done {
  color: #444;
}

.tennis-set-current {
  /* color and text-shadow set inline by JS per team color */
}

.tennis-set-future {
  color: #252525;
}

/* Current game points column */
.tennis-td-pts {
  font-family: var(--font-led);
  font-size: clamp(1.8rem, 6vw, 4.5rem);
  font-weight: 700;
  text-align: right;
  padding: 10px 0 10px 8px;
  line-height: 1;
  letter-spacing: 0.04em;
  transition: color 0.2s, text-shadow 0.2s;
}

.tennis-pts-normal {
  /* color & shadow set inline by JS */
}

.tennis-pts-deuce {
  color: #ff9500 !important;
  text-shadow: 0 0 8px #ff9500, 0 0 20px #ff9500 !important;
  font-size: clamp(1.2rem, 4vw, 2.8rem) !important;
  letter-spacing: 0.08em;
}

.tennis-pts-adv {
  color: #00e5ff !important;
  text-shadow: 0 0 8px #00e5ff, 0 0 20px #00c4dd !important;
  font-size: clamp(1.2rem, 4vw, 2.8rem) !important;
  letter-spacing: 0.08em;
}

.tennis-pts-adv-other {
  color: #2a2a2a !important;
  text-shadow: none !important;
  font-size: clamp(1.4rem, 4.5vw, 3rem) !important;
}

/* Point buttons */
.tennis-point-btns {
  display: flex;
  gap: 20px;
  justify-content: center;
  padding: 16px 12px 4px;
  flex-wrap: wrap;
  width: 100%;
}

.btn-tennis-point {
  background: #141414;
  border: 2px solid #2a2a2a;
  border-radius: 10px;
  padding: 14px 32px;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  flex: 1;
  max-width: 260px;
  min-width: 140px;
  transition: background 0.1s, border-color 0.15s, box-shadow 0.15s;
}

.btn-tennis-point:hover {
  background: #1e1e1e;
  box-shadow: 0 0 16px rgba(255, 149, 0, 0.1);
}

.btn-tennis-point:active {
  transform: scale(0.98);
}

.btn-tennis-name {
  font-family: var(--font-led);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  /* color set inline */
}

.btn-tennis-label {
  font-family: var(--font-led);
  font-size: 0.55rem;
  letter-spacing: 0.25em;
  color: #3a3a3a;
  text-transform: uppercase;
}

/* Tiebreak label in period-display */
.period-display #period-label {
  /* reuse existing period-display styles */
}

/* Tennis game over final table */
.tennis-final-table {
  text-align: center;
}

.tennis-final-table table {
  border-collapse: collapse;
  margin: 0 auto;
}

.tennis-final-table th {
  font-family: var(--font-led);
  font-size: 0.65rem;
  letter-spacing: 0.18em;
  color: var(--text-muted);
  text-transform: uppercase;
  padding: 4px 12px 10px;
}

.tf-name {
  font-family: var(--font-led);
  font-size: clamp(1.2rem, 3.5vw, 2rem);
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 8px 24px 8px 0;
  text-align: left;
  white-space: nowrap;
}

.tf-set {
  font-family: var(--font-digits);
  font-size: clamp(2rem, 6vw, 4rem);
  color: #555;
  text-align: center;
  padding: 8px 12px;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.tf-sets-won {
  font-family: var(--font-digits);
  font-size: clamp(2.5rem, 8vw, 5.5rem);
  font-weight: 900;
  text-align: center;
  padding: 8px 4px 8px 20px;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

/* Broadcast mode overrides for tennis */
.broadcast-mode .tennis-td-name {
  font-size: clamp(1.4rem, 4vw, 2.4rem);
}
.broadcast-mode .tennis-td-set {
  font-size: clamp(3.5rem, 11vw, 8rem);
}
.broadcast-mode .tennis-td-pts {
  font-size: clamp(2.5rem, 8vw, 6rem);
}
.broadcast-mode .tennis-point-btns {
  display: none !important;
}

/* ============================================================
   Period / End-game confirmation modal
   ============================================================ */
.period-modal {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.75);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2000;
}

.period-modal-box {
  background: #1a1a1a;
  border: 1px solid #444;
  border-radius: 14px;
  padding: 28px 32px;
  max-width: 380px;
  width: 90%;
  text-align: center;
  font-family: var(--font-led);
}

#period-modal-msg {
  color: #ddd;
  font-size: 1rem;
  margin: 0 0 24px;
  letter-spacing: 0.03em;
  line-height: 1.5;
}

.period-modal-actions {
  display: flex;
  justify-content: center;
  gap: 20px;
}

.btn-modal-confirm {
  background: rgba(39, 174, 96, 0.15);
  border: 2px solid #27ae60;
  color: #27ae60;
  border-radius: 8px;
  padding: 12px 28px;
  font-size: 1.4rem;
  cursor: pointer;
  transition: background 0.15s;
}

.btn-modal-confirm:hover { background: rgba(39, 174, 96, 0.3); }

.btn-modal-cancel {
  background: rgba(231, 76, 60, 0.15);
  border: 2px solid #e74c3c;
  color: #e74c3c;
  border-radius: 8px;
  padding: 12px 28px;
  font-size: 1.4rem;
  cursor: pointer;
  transition: background 0.15s;
}

.btn-modal-cancel:hover { background: rgba(231, 76, 60, 0.3); }

/* ============================================================
   VALUE-SET POPUP — Phosphor Terminal Correction Interface
   ============================================================ */

.vsp-overlay {
  position: fixed;
  inset: 0;
  z-index: 3000;
  display: flex;
  align-items: center;
  justify-content: center;
}

.vsp-scrim {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.82);
  backdrop-filter: blur(2px);
}

.vsp-panel {
  position: relative;
  background: #0d0d0d;
  border: 1px solid #2a2a2a;
  border-radius: 4px;
  min-width: 260px;
  max-width: 360px;
  width: 90%;
  overflow: hidden;
  box-shadow: 0 0 0 1px #111,
    0 0 40px rgba(255, 149, 0, 0.12),
    0 24px 60px rgba(0, 0, 0, 0.85);
}

/* Left accent rail */
.vsp-rail {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: linear-gradient(to bottom, var(--led-color), rgba(255, 149, 0, 0.15));
  z-index: 2;
}

/* Scanline texture overlay */
.vsp-texture {
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(
    0deg,
    transparent,
    transparent 3px,
    rgba(0, 0, 0, 0.15) 3px,
    rgba(0, 0, 0, 0.15) 4px
  );
  pointer-events: none;
  z-index: 1;
}

.vsp-header {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px 12px 20px;
  border-bottom: 1px solid #1c1c1c;
  background: #080808;
}

.vsp-icon {
  font-size: 1.1rem;
  color: var(--led-color);
  flex-shrink: 0;
  opacity: 0.85;
}

.vsp-header-text {
  flex: 1;
  min-width: 0;
}

.vsp-label {
  font-family: var(--font-led);
  font-size: 0.62rem;
  letter-spacing: 0.25em;
  color: var(--led-color);
  margin: 0;
  text-transform: uppercase;
}

.vsp-sub {
  font-family: var(--font-led);
  font-size: 0.52rem;
  letter-spacing: 0.15em;
  color: #3a3a3a;
  margin: 3px 0 0;
  text-transform: uppercase;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.vsp-live-tag {
  font-family: var(--font-led);
  font-size: 0.46rem;
  letter-spacing: 0.2em;
  color: #c0392b;
  border: 1px solid rgba(192, 57, 43, 0.4);
  padding: 2px 6px;
  border-radius: 2px;
  flex-shrink: 0;
  animation: onair-pulse 1.8s ease-in-out infinite;
}

.vsp-body {
  position: relative;
  z-index: 2;
  padding: 24px 20px 20px;
}

.vsp-field-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
}

/* CRT display frame */
.vsp-display-frame {
  background: #050505;
  border: 1px solid #222;
  border-radius: 3px;
  padding: 10px 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.85);
}

/* Digit input */
.vsp-number-input {
  background: transparent;
  border: none;
  outline: none;
  font-family: var(--font-digits);
  font-size: clamp(2.8rem, 8vw, 4.2rem);
  color: var(--led-color);
  text-shadow: 0 0 8px var(--led-color), 0 0 20px rgba(255, 149, 0, 0.35);
  text-align: center;
  font-variant-numeric: tabular-nums;
  -moz-appearance: textfield;
  appearance: textfield;
  line-height: 1;
}

.vsp-number-input::-webkit-outer-spin-button,
.vsp-number-input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.vsp-unit-label {
  font-family: var(--font-led);
  font-size: 0.5rem;
  letter-spacing: 0.22em;
  color: #2a2a2a;
  text-transform: uppercase;
}

/* Time-mode row (MM : SS) */
.vsp-time-row {
  display: flex;
  align-items: center;
  gap: 8px;
}

.vsp-time-colon {
  font-family: var(--font-digits);
  font-size: clamp(2rem, 6vw, 3rem);
  color: rgba(255, 149, 0, 0.45);
  line-height: 1;
  margin-top: -4px;
}

/* Actions footer */
.vsp-actions {
  position: relative;
  z-index: 2;
  display: flex;
  border-top: 1px solid #1c1c1c;
}

.vsp-btn {
  flex: 1;
  background: none;
  border: none;
  cursor: pointer;
  padding: 14px 10px;
  font-family: var(--font-led);
  font-size: 0.6rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  transition: background 0.12s;
}

.vsp-btn-inner {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}

.vsp-btn-icon {
  font-size: 0.95rem;
}

.vsp-btn-cancel {
  color: #3a3a3a;
  border-right: 1px solid #1c1c1c;
}

.vsp-btn-cancel:hover {
  background: rgba(255, 255, 255, 0.02);
  color: #666;
}

.vsp-btn-confirm {
  color: var(--led-color);
  text-shadow: 0 0 8px rgba(255, 149, 0, 0.25);
}

.vsp-btn-confirm:hover {
  background: rgba(255, 149, 0, 0.06);
}

