/* Turbo theme overrides for Radzen */
/* See https://github.com/radzenhq/radzen-blazor/blob/master/Radzen.Blazor/themes/default.scss */
:root {
  /* Primary */
  --rz-primary: var(--color-primary);
  --rz-primary-light: var(--color-primary-light);
  --rz-primary-lighter: rgba(var(--color-primary-rgb), 0.16);
  --rz-primary-dark: var(--color-primary-hover);
  --rz-primary-darker: var(--color-primary-dark);
  --rz-secondary: var(--color-primary);
  --rz-secondary-light: var(--color-primary-light);
  --rz-secondary-lighter: rgba(var(--color-primary-rgb), 0.2);
  --rz-secondary-dark: var(--color-primary-hover);
  --rz-secondary-darker: var(--color-primary-dark);
  --rz-on-primary-lighter: var(--color-primary);
  --rz-on-secondary-lighter: var(--color-primary);

  /* Semantic */
  --rz-info: var(--color-info);
  --rz-info-light: var(--color-info-light);
  --rz-info-lighter: rgba(var(--color-info-rgb), 0.2);
  --rz-info-dark: var(--color-info-hover);
  --rz-success: var(--color-success);
  --rz-success-light: var(--color-success-light);
  --rz-success-lighter: rgba(var(--color-success-rgb), 0.16);
  --rz-success-dark: var(--color-success-hover);
  --rz-warning: var(--color-warning);
  --rz-warning-light: var(--color-warning-light);
  --rz-warning-lighter: rgba(var(--color-warning-rgb), 0.2);
  --rz-warning-dark: var(--color-warning-hover);
  --rz-danger: var(--color-error);
  --rz-danger-light: var(--color-error-light);
  --rz-danger-lighter: rgba(var(--color-error-rgb), 0.2);
  --rz-danger-dark: var(--color-error-hover);

  /* Text */
  --rz-text-color: var(--color-text-primary);
  --rz-text-title-color: var(--color-text-primary);
  --rz-text-selection-background-color: var(--color-primary);
  --rz-text-selection-color: var(--color-text-inverse);

  /* Notifications — Radzen's default is white text on the saturated semantic
     color, which fails contrast on warning yellow. Use the Turbo alert pair. */
  --rz-notification-success-background-color: var(--color-success-bg-subtle);
  --rz-notification-warning-background-color: var(--color-warning-bg-subtle);
  --rz-notification-error-background-color:   var(--color-error-bg-subtle);
  --rz-notification-info-background-color:    var(--color-info-bg-subtle);
  --rz-notification-success-color: var(--color-success-text-emphasis);
  --rz-notification-warning-color: var(--color-warning-text-emphasis);
  --rz-notification-error-color:   var(--color-error-text-emphasis);
  --rz-notification-info-color:    var(--color-info-text-emphasis);
  --rz-notification-success-icon-color: var(--color-success-text-emphasis);
  --rz-notification-warning-icon-color: var(--color-warning-text-emphasis);
  --rz-notification-error-icon-color:   var(--color-error-text-emphasis);
  --rz-notification-info-icon-color:    var(--color-info-text-emphasis);
}

/* Wrapper sits behind the item with a transparent bg and no border-radius —
   the item's rounded corners ring page bg. Mirror the item's bg/radius. */
.rz-notification-success { --rz-notification-container-background-color: var(--color-success-bg-subtle); }
.rz-notification-warn    { --rz-notification-container-background-color: var(--color-warning-bg-subtle); }
.rz-notification-error   { --rz-notification-container-background-color: var(--color-error-bg-subtle); }
.rz-notification-info    { --rz-notification-container-background-color: var(--color-info-bg-subtle); }
.rz-notification-item-wrapper { border-radius: var(--rz-notification-border-radius); }

/* Re-map Radzen tokens in dark mode.
   Radzen's component styles reference --rz-base-* for backgrounds, borders, and text.
   The base palette goes from lightest (50) to darkest (900). In dark mode we invert the
   luminance axis: "light" values become dark surfaces; "dark" values become light text.
   This ensures DataGrid odd rows, hover states, inputs, and cards all render correctly. */
[data-theme="dark"] {
  /* Base palette — drives table rows, inputs, cards, checkboxes.
     50–200: used as subtle backgrounds (odd rows, selected, hover tints) → dark surfaces
     300–500: used as borders and dividers → border tokens
     600–900: used as text and icons → light text tokens */
  --rz-base: var(--color-surface-active);
  --rz-base-50: var(--color-surface-hover);      /* odd row bg, selected bg — was text-primary (#fff) */
  --rz-base-100: var(--color-surface-active);    /* hover bg — was text-secondary */
  --rz-base-200: var(--color-border-dark);       /* subtle dividers — was text-tertiary */
  --rz-base-300: var(--color-border);            /* borders */
  --rz-base-400: var(--color-border);            /* borders */
  --rz-base-500: var(--color-text-tertiary);     /* mid-gray icons/placeholders */
  --rz-base-600: var(--color-text-secondary);    /* secondary text */
  --rz-base-700: var(--color-text-secondary);    /* secondary text */
  --rz-base-800: var(--color-text-primary);      /* primary text — was background (#121212) */
  --rz-base-900: var(--color-text-primary);      /* primary text — was #0a0a0a */
  --rz-base-light: var(--color-surface-hover);   /* lighter surface */
  --rz-base-lighter: var(--color-surface);       /* lightest surface */
  --rz-base-dark: var(--color-surface-active);   /* darker surface */
  --rz-base-darker: var(--color-background);     /* darkest bg */

  /* Backgrounds */
  --rz-body-background-color: var(--color-background);
  --rz-base-background-color: var(--color-surface);

  /* Text */
  --rz-text-color: var(--color-text-primary);
  --rz-text-title-color: var(--color-text-primary);

  /* Re-assert brand colors (in case Radzen's dark base overrides them) */
  --rz-primary: var(--color-primary);
  --rz-primary-light: var(--color-primary-light);
  --rz-primary-lighter: rgba(var(--color-primary-rgb), 0.16);
  --rz-primary-dark: var(--color-primary-hover);
  --rz-primary-darker: var(--color-primary-dark);
  --rz-secondary: var(--color-primary);
  --rz-secondary-light: var(--color-primary-light);
  --rz-secondary-lighter: rgba(var(--color-primary-rgb), 0.2);
  --rz-secondary-dark: var(--color-primary-hover);
  --rz-secondary-darker: var(--color-primary-dark);
  --rz-on-primary-lighter: var(--color-primary);
  --rz-on-secondary-lighter: var(--color-primary);
  --rz-info: var(--color-info);
  --rz-info-light: var(--color-info-light);
  --rz-info-lighter: rgba(var(--color-info-rgb), 0.2);
  --rz-info-dark: var(--color-info-hover);
  --rz-success: var(--color-success);
  --rz-success-light: var(--color-success-light);
  --rz-success-lighter: rgba(var(--color-success-rgb), 0.16);
  --rz-success-dark: var(--color-success-hover);
  --rz-warning: var(--color-warning);
  --rz-warning-light: var(--color-warning-light);
  --rz-warning-lighter: rgba(var(--color-warning-rgb), 0.2);
  --rz-warning-dark: var(--color-warning-hover);
  --rz-danger: var(--color-error);
  --rz-danger-light: var(--color-error-light);
  --rz-danger-lighter: rgba(var(--color-error-rgb), 0.2);
  --rz-danger-dark: var(--color-error-hover);
}

/* ── Component integration ──────────────────────────────────────────────
   Universal Radzen-component fixes that apply across every consuming project.
   Project-specific overrides (one-off cursors, project-private hover states)
   stay in the consuming project's CSS file. */

/* Horizontal scroll on narrow viewports — when the viewport is narrower than
   the grid's natural minimum width, scroll the grid horizontally inside its
   host instead of compressing column widths or pushing the page wider. */
.rz-data-grid {
  overflow-x: auto;
}

/* table-layout:fixed (Radzen default) ignores cell MinWidth, so a flex column
   (no Width) has no floor and collapses on a narrow host. The floor must live on
   the table; the grid-min-* class sets --grid-min-width (STYLEGUIDE 3.6). */
.rz-data-grid .rz-grid-table {
  min-width: var(--grid-min-width, 0);
}
.rz-data-grid.grid-min-xs { --grid-min-width: var(--grid-min-xs); }
.rz-data-grid.grid-min-sm { --grid-min-width: var(--grid-min-sm); }
.rz-data-grid.grid-min-md { --grid-min-width: var(--grid-min-md); }
.rz-data-grid.grid-min-lg { --grid-min-width: var(--grid-min-lg); }
.rz-data-grid.grid-min-xl { --grid-min-width: var(--grid-min-xl); }

/* Wrap header titles instead of truncating (cell values keep their ellipsis).
   The selector must match Radzen's own `.rz-grid-table thead th
   .rz-column-title-content` depth to beat its rz-text-truncate nowrap. */
.rz-data-grid .rz-grid-table thead th .rz-column-title,
.rz-data-grid .rz-grid-table thead th .rz-column-title-content {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  line-height: var(--line-height-tight);
}

/* RadzenDataGrid as a card section — drop the grid's own outer border so the
   card border doesn't double up. The card-header's own border-bottom serves
   as the separator. The card itself gets `overflow: clip` so its rounded
   corners clip the grid's square edges; otherwise the grid's bottom corners
   poke past the card's radius. */
.card:has(> .rz-data-grid) {
  overflow: clip;
}
.card > .rz-data-grid {
  border: 0;
  border-radius: 0;
}

/* Dialog mask (the backdrop behind every Radzen dialog) */
.rz-dialog-mask {
  background-color: var(--color-overlay) !important;
  opacity: 1 !important;
}

/* Sit below the Blazor reconnect modal (z-index 1050) so the reconnect UI
   remains reachable when a Radzen dialog is open. */
.rz-dialog-wrapper {
  z-index: 1040 !important;
}

/* Toasts sit above open dialogs (raised to 1040 above) but below the Blazor
   reconnect modal (1050). Radzen's default (1002) beats its own dialog default
   but loses to ours, hiding every toast fired while a dialog is open. */
.rz-notification {
  z-index: 1045 !important;
}

/* Danger Confirm dialogs (CssClass="confirm-danger" per STYLEGUIDE §3.4.2):
   rebind --rz-primary so Radzen's .rz-button.rz-primary renders red. Hover
   defaults to neutral --rz-base-200; override for loud destructive feedback. */
.rz-dialog-confirm.confirm-danger {
  --rz-primary: var(--rz-danger);
}
.rz-dialog-confirm.confirm-danger .rz-button.rz-primary:hover,
.rz-dialog-confirm.confirm-danger .rz-button.rz-primary:focus {
  background-color: var(--rz-danger-dark);
}

.rz-dialog-confirm .rz-button:not(.rz-primary) {
  background-color: var(--color-surface) !important;
  color: var(--color-text-primary) !important;
  border: 1px solid var(--color-border) !important;
}
.rz-dialog-confirm .rz-button:not(.rz-primary):hover,
.rz-dialog-confirm .rz-button:not(.rz-primary):focus {
  background-color: var(--color-surface-hover) !important;
}

/* Reorderable-row drop target highlight. Pages that set `draggable="true"` and
   the `reorder-target` class via `RowRender` (see STYLEGUIDE § 3.6.1) get the
   same background tint as the built-in row-hover, so dragover looks identical
   to mouse-hover. Matches Radzen's hover specificity; this file loads after
   the Radzen theme so source-order wins over the striped alternating-row rule. */
.rz-selectable tbody tr.rz-data-row.reorder-target > td {
  background-color: var(--rz-grid-hover-background-color);
}
