/* ---------------------------------------------------------        */
/* Cell Highlight Config — pos/neg from theme via inline style      */
/* ---------------------------------------------------------        */
:root {
  --highlight-alpha-max: 0.80;
  --highlight-alpha-min: 0.00;

  --highlight-radius-min: 95%;
  --highlight-radius-max: 95%;
}

/* --------------------------------------------------------- */
/* UNIFIED HIGHLIGHT CLASS (works for -100..100)             */
/* --------------------------------------------------------- */
.grid-cell-highlight {
  --p: 0;                                      /* user sets -100..100 */

  /* per-cell override capability */
  --pos-color: var(--highlight-pos-rgb);
  --neg-color: var(--highlight-neg-rgb);

  /* derive sign and intensity */
  --pos: clamp(0, (var(--p) / 100), 1);        /* 0..1 when p > 0 */
  --neg: clamp(0, (-1 * var(--p) / 100), 1);   /* 0..1 when p < 0 */
  --t:   max(var(--pos), var(--neg));          /* |p| normalized */

  /* alpha scales with |p| */
  --alpha-pos: calc(var(--pos) * var(--highlight-alpha-max));
  --alpha-neg: calc(var(--neg) * var(--highlight-alpha-max));

  /* optional size modulation */
  --radius: calc(
    var(--highlight-radius-min) +
    var(--t) * (var(--highlight-radius-max) - var(--highlight-radius-min))
  );

  /* TWO radial gradients: only one is visible based on sign */
  background:
    radial-gradient(circle at 50% 50%,
      rgb(var(--pos-color) / var(--alpha-pos)) 0 var(--radius),
      rgb(var(--pos-color) / 0) var(--radius)
    ),
    radial-gradient(circle at 50% 50%,
      rgb(var(--neg-color) / var(--alpha-neg)) 0 var(--radius),
      rgb(var(--neg-color) / 0) var(--radius)
    );

  transition: background 150ms ease;
}

/* Grid-based table: column widths align across all rows */
.gen-table-grid {
    display: grid;
    width: 100%;
    min-width: 0;
}
.gen-table-grid-cell {
    min-width: 0;
}
/* Header cells: small min-width so labels remain readable when using small-fr columns */
.gen-table-grid-cell.gen-table-header-row {
    min-width: 3ch;
}
.gen-table-body-row-btn {
    width: 100%;
    padding: 0;
    border: none;
    text-align: inherit;
}
.gen-table-body-row-btn > * {
    width: 100%;
}

/* Body cells: wrap at word boundaries only; column width from grid. */
.gen-table-cell {
    overflow: visible;
    line-height: 1rem;
    text-transform: none;
    font-variant-numeric: tabular-nums;
    font-family: ui-monospace, 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
    word-break: normal;
    overflow-wrap: break-word;
}

.gen-table-cell-nowrap {
    white-space: nowrap;
}

/* Table headers: normal case, not ALL CAPS */
.gen-table-row-header {
    text-transform: none;
}

/* DisplayTable header row: solid dark background + line grid (no Card, no dots) */
.gen-table-header-row,
.gen-table-grid-cell.gen-table-header-row {
    background-color: var(--bs-dark, #212529) !important;
    background-image:
        linear-gradient(to right, rgba(255, 255, 255, 0.06) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
    background-size: 12px 12px;
    background-origin: padding-box;
    background-clip: padding-box;
    border: none !important;
    box-shadow: none !important;
}
/* Header cells: no dotted outline, no radial/circle bg so grid shows through; wrap at word boundaries only */
.gen-table-header-row .gen-table-row-header,
.gen-table-header-row .btn,
.gen-table-grid-cell.gen-table-header-row .gen-table-row-header,
.gen-table-grid-cell.gen-table-header-row .btn {
    background: transparent !important;
    background-image: none !important;
    border: none !important;
    outline: none !important;
    outline-width: 0 !important;
    box-shadow: none !important;
    list-style: none !important;
    word-break: normal;
    overflow-wrap: break-word;
}
.gen-table-header-row .gen-table-row-header::before,
.gen-table-header-row .gen-table-row-header::after,
.gen-table-header-row .btn::before,
.gen-table-header-row .btn::after,
.gen-table-grid-cell.gen-table-header-row .gen-table-row-header::before,
.gen-table-grid-cell.gen-table-header-row .gen-table-row-header::after,
.gen-table-grid-cell.gen-table-header-row .btn::before,
.gen-table-grid-cell.gen-table-header-row .btn::after {
    display: none !important;
}
/* Ensure cell-highlight (radial gradient) never applies in header */
.gen-table-header-row .grid-cell-highlight,
.gen-table-grid-cell.gen-table-header-row .grid-cell-highlight {
    background: transparent !important;
    background-image: none !important;
}
.gen-table-header-row .gen-table-row-header:hover,
.gen-table-header-row .btn:hover,
.gen-table-grid-cell.gen-table-header-row .gen-table-row-header:hover,
.gen-table-grid-cell.gen-table-header-row .btn:hover {
    background: rgba(255, 255, 255, 0.08) !important;
    background-image: none !important;
}

/* DisplayTable footer row: solid dark, no Card, no dots; compact padding */
.gen-table-footer-row,
.gen-table-grid-cell.gen-table-footer-row {
    background-color: var(--bs-dark, #212529) !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0.5rem !important;
    font-weight: bold;
    color: white;
}

/* Overview page: compact weekly table headers and cells */
.overview-weekly-table .gen-table-header-row .gen-table-row-header,
.overview-weekly-table .gen-table-header-row .btn,
.overview-weekly-table .gen-table-grid-cell.gen-table-header-row .gen-table-row-header,
.overview-weekly-table .gen-table-grid-cell.gen-table-header-row .btn {
    font-size: 0.75rem;
    padding: 0.35rem 0.5rem;
    white-space: nowrap;
    font-weight: 600;
}
.overview-weekly-table .gen-table-row .gen-table-cell,
.overview-weekly-table .gen-table-row-outer .gen-table-cell {
    font-size: 0.8rem;
    padding: 0.35rem 0.5rem;
}
.overview-table-scroll {
    border-radius: 0.375rem;
    border: 1px solid rgba(0, 0, 0, 0.08);
}

/* Responsive table scroll wrapper: horizontal scroll + touch-friendly on mobile */
.gen-table-scroll-wrapper {
    border-radius: 0.375rem;
    border: 1px solid rgba(0, 0, 0, 0.08);
    width: 100%;
    min-width: 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}
.gen-table-scroll-inner {
    min-width: max-content;
}

/* AG Grid theme overrides: match DisplayTable dark header */
.display-table-ag-wrapper .ag-theme-balham .ag-header {
	background-color: var(--bs-dark, #212529) !important;
	color: white !important;
}
.display-table-ag-wrapper .ag-theme-balham .ag-header-cell-label {
	color: white !important;
}
.display-table-ag-wrapper .ag-theme-balham .ag-root-wrapper {
	border-radius: 0.375rem;
	border: 1px solid rgba(0, 0, 0, 0.08);
}
.display-table-ag-wrapper .ag-theme-balham .ag-cell {
	font-family: ui-monospace, 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
	font-variant-numeric: tabular-nums;
}

/* Mobile: compact cells and footer */
@media (max-width: 767.98px) {
    .gen-table-cell {
        padding: 0.25rem 0.35rem;
        font-size: 0.8rem;
        line-height: 1rem;
    }
    .gen-table-header-row .gen-table-row-header,
    .gen-table-header-row .btn,
    .gen-table-grid-cell.gen-table-header-row .gen-table-row-header,
    .gen-table-grid-cell.gen-table-header-row .btn {
        padding: 0.3rem 0.35rem;
        font-size: 0.75rem;
    }
    .gen-table-footer-row,
    .gen-table-grid-cell.gen-table-footer-row {
        padding: 0.35rem !important;
        font-size: 0.8rem;
    }
    .gen-table-row-footer {
        flex-wrap: wrap;
        gap: 0.5rem;
    }
}