/* Atlanta wall clock (fixed; all pages) */
.atlanta-clock {
  position: fixed;
  top: 0.6rem;
  left: 0.65rem;
  z-index: 1080;
  max-width: min(22rem, 92vw);
  padding: 0.3rem 0.55rem;
  font-size: 0.8125rem;
  font-variant-numeric: tabular-nums;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  border-radius: 0.25rem;
  color: var(--tblr-secondary, var(--bs-secondary, #667382));
  background: color-mix(in srgb, var(--tblr-bg-surface, #fff) 92%, transparent);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}

[data-bs-theme="dark"] .atlanta-clock {
  background: color-mix(in srgb, var(--tblr-bg-surface, #1e293b) 92%, transparent);
}

@media (max-width: 767.98px) {
  .atlanta-clock {
    top: 3.5rem;
  }
}

@media (min-width: 768px) {
  body:has(#atlanta-clock) header.navbar > .container-xl {
    padding-left: 11rem;
  }
}

/* Dashboard: sheet switch loading overlay */
#dashboard-content-wrap {
  min-height: 12rem;
}

.dashboard-loading-overlay {
  position: absolute;
  inset: 0;
  z-index: 10;
  border-radius: 0.25rem;
  background: color-mix(in srgb, var(--tblr-bg-surface, #fff) 82%, transparent);
  backdrop-filter: blur(1px);
}

[data-bs-theme="dark"] .dashboard-loading-overlay {
  background: color-mix(in srgb, var(--tblr-bg-surface, #1e293b) 85%, transparent);
}

/* Simple dashboard layout */
.dashboard-simple .dash-dept-card {
  transition: box-shadow 0.2s ease;
}

.dashboard-simple .dash-dept-card:hover {
  box-shadow: 0 0.4rem 1.35rem rgba(0, 0, 0, 0.09) !important;
}

.dashboard-simple .dash-dept-summary,
.dashboard-simple .dash-edgerfails-kpis {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
  font-size: 0.8125rem;
  line-height: 1.4;
}

.dashboard-simple .dash-dept-stat strong {
  font-variant-numeric: tabular-nums;
}

.dashboard-simple .dash-edgerfails-kpis {
  border-bottom: 1px solid var(--tblr-border-color, var(--bs-border-color-translucent, rgba(0, 0, 0, 0.08)));
}

.dashboard-simple tr.dash-leader-row td {
  font-weight: 500;
}

[data-bs-theme="light"] .dashboard-simple tr.dash-leader-row td {
  --dash-leader-bg: color-mix(in srgb, var(--tblr-primary, #206bc4) 9%, transparent);
  background-color: var(--dash-leader-bg) !important;
}

[data-bs-theme="dark"] .dashboard-simple tr.dash-leader-row td {
  background-color: color-mix(in srgb, var(--tblr-primary, #4299e1) 14%, transparent) !important;
}

.dashboard-team-board-link:hover {
  text-decoration: underline !important;
}

/* TV / wallboard */
.page-title {
  font-weight: 600;
}

.dash-dept-card .card-title {
  font-size: 1.25rem;
  font-weight: 600;
}

.dash-table {
  font-size: clamp(0.95rem, 1.2vw, 1.15rem);
}

.dash-table th {
  font-weight: 600;
  white-space: nowrap;
}

.dash-hourly-table th.dash-hourly-hour {
  min-width: 2.75rem;
  font-size: 0.92em;
}

.dash-fitters-summary th,
.dash-fitters-summary td {
  white-space: nowrap;
}

.dash-station {
  /* Allow station names to show fully instead of being cut off. */
  max-width: none;
  white-space: nowrap;
}

.dash-num {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Threshold colors: Tabler @latest may not define --tblr-* for text; Bootstrap --bs-* + hex fallbacks always work. */
.dash-dept-card .dash-table td.dash-num.dash-cell-high,
.team-board-card .dash-table td.dash-num.dash-cell-high {
  color: var(--tblr-success, var(--bs-success, #2fb344)) !important;
  font-weight: 600;
}

.dash-dept-card .dash-table td.dash-num.dash-cell-mid,
.team-board-card .dash-table td.dash-num.dash-cell-mid {
  color: var(--tblr-warning, var(--bs-warning, #f59f00)) !important;
}

.dash-dept-card .dash-table td.dash-num.dash-cell-low,
.team-board-card .dash-table td.dash-num.dash-cell-low {
  color: var(--tblr-danger, var(--bs-danger, #d63939)) !important;
}

@media (min-width: 1200px) {
  .dash-table {
    font-size: 1.2rem;
  }
  .dash-dept-card .card-title {
    font-size: 1.35rem;
  }
}

/* Single-team TV: hide main nav chrome, full width; vertical overflow scrolls */
.team-board-tv {
  min-height: 100vh;
  min-height: 100dvh;
  /* TV readability: subtle zebra striping across all wallboard tables. */
  --team-board-row-odd-bg: rgba(0, 0, 0, 0.02);
  --team-board-row-even-bg: rgba(0, 0, 0, 0.06);
}

/* Lock wallboard to the viewport; table data scrolls inside .team-board-data-scroll */
body.team-board-tv {
  overflow: hidden;
  height: 100vh;
  height: 100dvh;
  max-height: 100vh;
  max-height: 100dvh;
}

[data-bs-theme="dark"] .team-board-tv {
  --team-board-row-odd-bg: rgba(255, 255, 255, 0.03);
  --team-board-row-even-bg: rgba(255, 255, 255, 0.075);
}

.team-board-tv .team-board-table tbody tr:nth-child(odd) > * {
  background-color: var(--team-board-row-odd-bg);
}

.team-board-tv .team-board-table tbody tr:nth-child(even) > * {
  background-color: var(--team-board-row-even-bg);
}

.team-board-tv .page {
  min-height: 100vh;
  min-height: 100dvh;
  height: 100%;
  max-height: 100%;
  display: flex;
  flex-direction: column;
  padding-top: 0 !important;
  overflow: hidden;
}

.team-board-tv .page-wrapper {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  min-height: 0;
  padding-top: 0 !important;
  overflow: hidden;
}

.team-board-tv .page-body {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  min-height: 0;
  /* Tabler adds page padding; flush wallboard to the top of the viewport. */
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  overflow: hidden;
}

.team-board-tv .page-body > .container-xl {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  min-height: 0;
  max-width: none !important;
  width: 100%;
  padding-top: 0.25rem;
  padding-left: clamp(0.25rem, 1vw, 0.85rem);
  padding-right: clamp(0.25rem, 1vw, 0.85rem);
  padding-bottom: 0.25rem;
  overflow: hidden;
}

.team-board-tv .page-header > .container-xl {
  max-width: none !important;
  width: 100%;
  padding-left: clamp(0.5rem, 1.5vw, 1.75rem);
  padding-right: clamp(0.5rem, 1.5vw, 1.75rem);
}

.team-board-viewport-shell {
  flex: 1 1 0;
  min-height: 0;
  width: 100%;
  position: relative;
  overflow: hidden;
}

.team-board-tv .team-board-scale-inner {
  position: relative;
  display: flex;
  flex-direction: column;
  flex: 1 1 0;
  min-height: 0;
  height: 100%;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  /* Auto size from density; table data adds user delta via --team-board-table-data-font-px */
  --team-board-table-font-auto-px: 22px;
  --team-board-table-data-font-px: 22px;
}

.team-board-tv #team-board-stale-live-stats,
.team-board-tv .team-board-meta-row,
.team-board-tv #team-board-status {
  flex-shrink: 0;
}

.team-board-tv #team-board-root {
  flex: 1 1 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

.team-board-tv .team-board-card {
  flex: 1 1 0;
  min-height: 0;
  width: 100%;
  display: flex;
  flex-direction: column;
}

.team-board-tv .team-board-card > .card-header {
  flex-shrink: 0;
}

.team-board-tv .team-board-card-body--scroll {
  flex: 1 1 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.team-board-tv .team-board-summary-zone {
  flex-shrink: 0;
}

.team-board-tv .team-board-data-scroll {
  flex: 1 1 0;
  min-height: 0;
  overflow-x: auto;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
}

.team-board-tv .team-board-data-scroll thead th {
  position: sticky;
  top: 0;
  z-index: 4;
  background-color: var(--tblr-bg-surface, var(--bs-body-bg, #fff));
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
}

[data-bs-theme="dark"] .team-board-tv .team-board-data-scroll thead th {
  background-color: var(--tblr-bg-surface, var(--bs-body-bg, #1a1a2e));
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06);
}

.team-board-tv .team-board-data-scroll .table-responsive {
  min-height: 0;
}

.team-board-card-header--with-font-tools {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

.team-board-font-tools--inline {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem;
  margin-left: auto;
  flex-shrink: 0;
}

.team-board-font-tools--inline .team-board-font-btn {
  min-width: 2.65rem;
  padding: 0.25rem 0.45rem;
  font-size: 0.875rem;
  font-weight: 700;
  line-height: 1.2;
  border-width: 2px;
}

.team-board-font-tools--inline .team-board-theme-btn {
  min-width: 3.35rem;
  font-weight: 600;
}

.team-board-font-tools--inline .team-board-autoscroll-btn {
  min-width: 6.4rem;
  font-weight: 700;
}

.team-board-font-tools--inline .team-board-autoscroll-config {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.25rem;
}

.team-board-font-tools--inline .team-board-scroll-input {
  width: 3.5rem;
  padding: 0.2rem 0.25rem;
  font-size: 0.8rem;
  font-weight: 600;
  line-height: 1.2;
  text-align: center;
  border-width: 2px;
}

.team-board-font-tools--inline .team-board-scroll-input--pause {
  width: 4.25rem;
}

.team-board-tv header.navbar {
  display: none;
}

/* Wallboard: clock would force top inset; sheet line already shows updated time. */
.team-board-tv .atlanta-clock {
  display: none !important;
}

.team-board-tv .page-header {
  display: none;
}

.team-board-tv .team-board-meta-row {
  margin-bottom: 0.35rem !important;
}

.team-board-tv .team-board-meta-row .text-secondary {
  font-size: clamp(0.75rem, 1.35vw, 0.95rem);
  line-height: 1.3;
}

/* Use full width; hourly grid shares space instead of forcing horizontal scroll */
.team-board-tv .table-responsive {
  overflow-x: visible !important;
}

.team-board-tv .dash-hourly-table {
  table-layout: fixed;
  width: 100% !important;
}

.team-board-tv .dash-hourly-table th.dash-hourly-hour,
.team-board-tv .dash-hourly-table td.dash-num {
  min-width: 0 !important;
}

.team-board-tv .dash-hourly-table .dash-station.team-board-station {
  /* On wallboard TVs, give the Station column more width so names stay on one line. */
  max-width: none;
  width: 22%;
  min-width: 18%;
  overflow: visible;
  text-overflow: clip;
  white-space: nowrap;
  text-align: left;
}

.team-board-tv .dash-station {
  max-width: none;
}

.team-board-tv .dash-fitters-summary {
  table-layout: fixed;
  width: 100% !important;
}

.team-board-tv .dash-fitters-summary th,
.team-board-tv .dash-fitters-summary td {
  min-width: 0;
}

.team-board-tv .team-board-table {
  font-size: var(--team-board-table-data-font-px, 22px);
}

/* Row height + alignment track the wallboard font size (set on .team-board-scale-inner). */
.team-board-tv .team-board-table thead th,
.team-board-tv .team-board-table tbody td {
  text-align: center !important;
  vertical-align: middle;
  line-height: 1.28;
  padding-top: calc(var(--team-board-table-data-font-px, 22px) * 0.38);
  padding-bottom: calc(var(--team-board-table-data-font-px, 22px) * 0.38);
  padding-left: calc(var(--team-board-table-data-font-px, 22px) * 0.22);
  padding-right: calc(var(--team-board-table-data-font-px, 22px) * 0.22);
}

.team-board-tv .team-board-table.dash-fitters-summary th {
  font-size: 0.92em;
}

.team-board-tv .team-board-card .card-title {
  font-size: clamp(1rem, calc(var(--team-board-table-font-auto-px, 22px) * 1.45), 2.35rem);
}

.team-board-table {
  font-size: clamp(1.1rem, 2.2vw, 2rem);
}

.team-board-table th {
  font-size: 0.85em;
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

/* On TV wallboards, make non-hour headers ("Station", "Total", "Avg J/H") a bit larger. */
.team-board-tv .team-board-table th:not(.dash-hourly-hour) {
  font-size: 1em;
}

/* Analytics */
.analytics-chart-card {
  min-height: 0;
}

.analytics-chart-wrap {
  position: relative;
  min-height: 320px;
  height: 40vh;
  max-height: 480px;
}

/* Grid dashboard (?grid=1): full horizontal space; default container-xl is narrow/centered */
body.dashboard-grid-page .page-header > .container-xl,
body.dashboard-grid-page .page-body > .container-xl {
  max-width: none !important;
  width: 100%;
  padding-left: clamp(0.65rem, 2vw, 1.25rem);
  padding-right: clamp(0.65rem, 2vw, 1.25rem);
}

#grid-stack-wrap {
  width: 100%;
  max-width: 100%;
  min-width: 0;
}

#grid-stack-wrap .grid-stack {
  width: 100% !important;
  min-height: 50vh;
}

/*
 * Fill each grid cell (not a fixed 70vh cap — that caused scrollbars even after
 * resizing the widget). Toolbar stays fixed; report body scrolls inside the cell.
 */
/* GridStack positions .grid-stack-item-content with top/right/bottom/left; do not cap with vh */
#grid-stack-wrap .grid-stack-item > .grid-stack-item-content {
  max-height: none;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  box-sizing: border-box;
}

#grid-stack-wrap .grid-stack-item-content > *:not(.dash-grid-panel) {
  flex-shrink: 0;
}

#grid-stack-wrap .grid-stack-item-content > .dash-grid-panel {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
}

/* Grid full screen: only #dashboard-content-wrap (nav, title, toolbar, alerts hidden) */
.dashboard-grid-exit-fullscreen {
  display: none;
  position: fixed;
  top: 0.5rem;
  right: 0.5rem;
  z-index: 1060;
}

body.dashboard-grid-fullscreen {
  overflow: hidden;
}

body.dashboard-grid-fullscreen #atlanta-clock,
body.dashboard-grid-fullscreen .page > .navbar,
body.dashboard-grid-fullscreen .page-header {
  display: none !important;
}

body.dashboard-grid-fullscreen .page-body > .container-xl > *:not(#dashboard-content-wrap) {
  display: none !important;
}

body.dashboard-grid-fullscreen .page-wrapper {
  min-height: 100vh;
}

body.dashboard-grid-fullscreen .page-body,
body.dashboard-grid-fullscreen .page-body > .container-xl {
  min-height: 100vh;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-bottom: 0 !important;
}

body.dashboard-grid-fullscreen #dashboard-content-wrap {
  position: fixed;
  inset: 0;
  z-index: 1040;
  margin: 0 !important;
  padding: clamp(0.35rem, 1.2vw, 0.85rem);
  overflow: auto;
  -webkit-overflow-scrolling: touch;
  background-color: var(--tblr-body-bg, var(--bs-body-bg, #fff));
}

body.dashboard-grid-fullscreen .dashboard-grid-exit-fullscreen {
  display: inline-flex;
}

[data-bs-theme="dark"] body.dashboard-grid-fullscreen #dashboard-content-wrap {
  background-color: var(--tblr-body-bg, var(--bs-body-bg, #1a1a2e));
}

.team-board-station {
  font-weight: 500;
}

.team-board-num {
  font-weight: 600;
}

@media (min-width: 992px) {
  .team-board-table {
    font-size: clamp(1.35rem, 2.5vw, 2.25rem);
  }
}

/* Admin: long paths/errors must wrap inside row-cards flex columns (avoid overlap with next card) */
#file-info-dl dd {
  min-width: 0;
  overflow-wrap: anywhere;
}

/* Admin: station display names collapse chevron */
#admin-station-names-toggle .admin-stn-chevron {
  display: inline-block;
  transition: transform 0.2s ease;
  font-size: 0.65rem;
  line-height: 1;
}
#admin-station-names-toggle.collapsed .admin-stn-chevron {
  transform: rotate(-90deg);
}
