/**
 * DSF — tableaux Bootstrap 5 & DataTables 2 (quadrat, gener).
 *
 * Fichier identique dans chaque application ; seules les variables de thème
 * définies dans :root (gener.css / quadrat.css) changent les couleurs.
 *
 * Variables attendues :
 *   --dsf-tbl-primary-rgb      RGB du thème (survol, bordures, tri actif)
 *   --dsf-tbl-header-bg        Fond des en-têtes
 *   --dsf-tbl-header-color     Texte des en-têtes (défaut : --sf-forest-dark)
 *   --dsf-tbl-row-even-bg      Bande paire (fond clair explicite)
 *   --dsf-tbl-row-odd-bg       Bande impaire (Bootstrap table-striped)
 *   --dsf-tbl-row-odd-inset    Bande impaire (DataTables stripe)
 *   --dsf-tbl-hover-bg         Survol (Bootstrap table-hover)
 *   --dsf-tbl-hover-solid      Survol (DataTables, inset)
 *   --dsf-tbl-border           Bordures principales
 *   --dsf-tbl-border-light     Bordures légères / séparateurs
 *   --dsf-tbl-sort-active      Couleur tri actif
 *   --dsf-tbl-control-border   Bordure champs filtre / pagination
 *   --dt-row-selected          RGB ligne sélectionnée DataTables (optionnel)
 */

/* -------------------------------------------------------------------------- */
/* Tableaux Bootstrap                                                         */
/* -------------------------------------------------------------------------- */

.app-dsf .table {
  --bs-table-hover-bg: var(--dsf-tbl-hover-bg, rgba(0, 0, 0, 0.04));
  margin-bottom: 0;
}

.app-dsf .table thead th {
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
  color: var(--dsf-tbl-header-color, var(--sf-forest-dark, #1e293b));
  background: var(--dsf-tbl-header-bg, rgba(248, 250, 252, 0.95));
  border-bottom: 1px solid var(--dsf-tbl-border, rgba(0, 0, 0, 0.12));
  vertical-align: middle;
}

.app-dsf .table tbody td {
  vertical-align: middle;
  color: var(--bs-body-color, #2d3430);
}

.app-dsf .table-striped > tbody > tr:nth-of-type(even) > * {
  --bs-table-accent-bg: var(--dsf-tbl-row-even-bg, #fff);
  color: var(--bs-body-color, #2d3430);
}

.app-dsf .table-striped > tbody > tr:nth-of-type(odd) > * {
  --bs-table-accent-bg: var(--dsf-tbl-row-odd-bg, rgba(248, 250, 252, 0.9));
  color: var(--bs-body-color, #2d3430);
}

.app-dsf .table-hover > tbody > tr:hover > * {
  --bs-table-hover-bg: var(--dsf-tbl-hover-bg, rgba(0, 0, 0, 0.04));
}

.app-dsf .table-bordered {
  border-color: var(--dsf-tbl-border-light, rgba(0, 0, 0, 0.08));
}

.app-dsf .table-bordered > :not(caption) > * {
  border-color: var(--dsf-tbl-border-light, rgba(0, 0, 0, 0.08));
}

/* -------------------------------------------------------------------------- */
/* DataTables 2                                                               */
/* -------------------------------------------------------------------------- */

.app-dsf .dataTables_wrapper {
  font-size: 0.875rem;
}

.app-dsf table.dataTable {
  width: 100% !important;
  border-collapse: collapse;
  margin-top: 0.5rem !important;
  margin-bottom: 0.5rem !important;
}

.app-dsf table.dataTable thead th,
.app-dsf table.dataTable thead td {
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
  color: var(--dsf-tbl-header-color, var(--sf-forest-dark, #1e293b));
  background: var(--dsf-tbl-header-bg, rgba(248, 250, 252, 0.95));
  border-bottom: 1px solid var(--dsf-tbl-border, rgba(0, 0, 0, 0.12));
  vertical-align: middle;
}

.app-dsf table.dataTable thead th.dt-orderable-asc:hover,
.app-dsf table.dataTable thead th.dt-orderable-desc:hover,
.app-dsf table.dataTable thead td.dt-orderable-asc:hover,
.app-dsf table.dataTable thead td.dt-orderable-desc:hover {
  outline: none;
  background: color-mix(
    in srgb,
    var(--dsf-tbl-header-bg, rgba(248, 250, 252, 0.95)) 75%,
    rgb(var(--dsf-tbl-primary-rgb, 100, 116, 139)) 25%
  );
}

.app-dsf table.dataTable thead .dt-column-order {
  color: var(--dsf-tbl-sort-active, var(--sf-moss, #64748b));
}

.app-dsf table.dataTable tbody td,
.app-dsf table.dataTable tbody th {
  color: var(--bs-body-color, #2d3430);
}

.app-dsf table.dataTable.stripe > tbody > tr:nth-child(even) > *,
.app-dsf table.dataTable.display > tbody > tr:nth-child(even) > *,
.app-dsf table.dataTable.stripe tbody tr.even > *,
.app-dsf table.dataTable.display tbody tr.even > * {
  box-shadow: inset 0 0 0 9999px var(--dsf-tbl-row-even-bg, #fff);
}

.app-dsf table.dataTable.stripe > tbody > tr:nth-child(odd) > *,
.app-dsf table.dataTable.display > tbody > tr:nth-child(odd) > * {
  box-shadow: inset 0 0 0 9999px var(--dsf-tbl-row-odd-inset, rgba(248, 250, 252, 0.85));
}

.app-dsf table.dataTable.stripe tbody tr.odd > *,
.app-dsf table.dataTable.display tbody tr.odd > * {
  box-shadow: inset 0 0 0 9999px var(--dsf-tbl-row-odd-inset, rgba(248, 250, 252, 0.85));
}

.app-dsf table.dataTable.hover > tbody > tr:hover > *,
.app-dsf table.dataTable.display > tbody > tr:hover > *,
.app-dsf table.dataTable tbody tr:hover > * {
  box-shadow: inset 0 0 0 9999px var(--dsf-tbl-hover-solid, rgba(0, 0, 0, 0.05));
  color: var(--bs-body-color, #2d3430);
}

.app-dsf table.dataTable tbody tr.selected > * {
  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected, var(--dsf-tbl-primary-rgb, 100, 116, 139)), 0.12);
}

.app-dsf .dataTables_wrapper .dataTables_length,
.app-dsf .dataTables_wrapper .dataTables_filter,
.app-dsf .dataTables_wrapper .dataTables_info,
.app-dsf .dataTables_wrapper .dataTables_paginate {
  padding-top: 0.5rem;
  color: var(--sf-bark, #475569);
}

.app-dsf .dataTables_wrapper .dataTables_filter input,
.app-dsf .dataTables_wrapper .dataTables_length select {
  border-radius: var(--bs-border-radius, 0.5rem);
  border: 1px solid var(--dsf-tbl-control-border, rgba(0, 0, 0, 0.15));
  padding: 0.35rem 0.65rem;
  background-color: #fff;
}

.app-dsf .dataTables_wrapper .dataTables_length select {
  padding: 0.25rem 2rem 0.25rem 0.5rem;
}

.app-dsf .dataTables_wrapper .dataTables_filter input:focus,
.app-dsf .dataTables_wrapper .dataTables_length select:focus {
  outline: none;
  border-color: var(--dsf-tbl-sort-active, var(--sf-moss, #64748b));
  box-shadow: 0 0 0 2px rgba(var(--dsf-tbl-primary-rgb, 100, 116, 139), 0.2);
}

.app-dsf .dataTables_wrapper .dataTables_paginate .paginate_button {
  border-radius: var(--bs-border-radius, 0.5rem) !important;
  border: 1px solid var(--dsf-tbl-border-light, rgba(0, 0, 0, 0.1)) !important;
  margin-left: 0.15rem;
  padding: 0.25rem 0.6rem !important;
  color: var(--dsf-tbl-header-color, var(--sf-forest-dark, #1e293b)) !important;
  background: #fff !important;
}

.app-dsf .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
  background: rgba(var(--dsf-tbl-primary-rgb, 100, 116, 139), 0.08) !important;
  border-color: var(--dsf-tbl-border, rgba(0, 0, 0, 0.15)) !important;
  color: var(--dsf-tbl-header-color, var(--sf-forest-dark, #1e293b)) !important;
}

.app-dsf .dataTables_wrapper .dataTables_paginate .paginate_button.current,
.app-dsf .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
  background: rgba(var(--dsf-tbl-primary-rgb, 100, 116, 139), 0.14) !important;
  border-color: rgba(var(--dsf-tbl-primary-rgb, 100, 116, 139), 0.35) !important;
  color: var(--dsf-tbl-header-color, var(--sf-forest-dark, #1e293b)) !important;
}

.app-dsf .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
.app-dsf .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover {
  opacity: 0.45;
  background: #fff !important;
  cursor: default;
}

.app-dsf .dataTables_wrapper .dataTables_processing {
  border-radius: var(--bs-border-radius, 0.5rem);
  border: 1px solid var(--dsf-tbl-border-light, rgba(0, 0, 0, 0.1));
  background: rgba(255, 255, 255, 0.95);
  color: var(--sf-bark, #475569);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}

.app-dsf .card .table-responsive + .dataTables_wrapper,
.app-dsf .card .dataTables_wrapper {
  padding: 0 0.25rem 0.25rem;
}
