/* Shared tables: dUI.DataTable, CRM records, agent tables, Bootstrap and AG Grid.
   Palette: datalyse-modern.css (--dt-*). Existing engines retain their events,
   widths, virtualization, sorting, filtering, selection and drag behavior. */

/* --- Table headers: neutral, no colored backgrounds --- */
thead,
.table thead,
.table > thead > tr > th,
table thead th,
.dataTable thead th,
.table-list__header {
    background-color: var(--dt-surface-2) !important;
    color: var(--dt-muted) !important;
    font-weight: 600;
    font-size: var(--font-size-1);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 0 !important;
}


/* ============================================================
 * 26. dUI.DataTable — tabla shadcn/ui style
 * ============================================================ */
.dui-dt {
  display: flex;
  flex-direction: column;
  gap: 12px;
  font-family: var(--font-sans);
  color: var(--dt-text);
}
.dui-dt-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}
.dui-dt-toolbar-left { display: flex; gap: 8px; align-items: center; flex: 1; min-width: 0; }
.dui-dt-toolbar-right { display: flex; gap: 8px; align-items: center; flex-shrink: 0; }
.dui-dt-search {
  display: flex;
  align-items: center;
  background: var(--dt-surface);
  border: 0;
  border-radius: var(--dt-radius);
  padding: 6px 10px;
  max-width: 320px;
  width: 100%;
  gap: 8px;
}
.dui-dt-search i { color: var(--dt-muted); font-size: 14px; flex-shrink: 0; }
.dui-dt-search input {
  background: transparent !important;
  border: none !important;
  outline: none !important;
  box-shadow: none !important;
  color: var(--dt-text) !important;
  font-size: 13px !important;
  font-family: var(--font-sans);
  flex: 1;
  min-width: 0;
  padding: 0 !important;
  height: auto !important;
  line-height: 1.4 !important;
}
.dui-dt-search input::placeholder { color: var(--dt-muted); }
/* 2026: el fondo del buscador NO cambia al enfocar — la regla global input:focus lo oscurecia en light y dark */
.dui-dt-search input:focus:not(.form-check-input):not([type="checkbox"]):not([type="radio"]),
.dui-dt-search input:hover,
.dui-dt-search input:active {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
}

/* Column visibility dropdown */
.dui-dt-colvis { position: relative; }
.dui-dt-colvis-btn {
  background: var(--dt-surface);
  border: 0;
  color: var(--dt-text);
  padding: 6px 12px;
  border-radius: var(--dt-radius);
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-sans);
  transition: background .15s, border-color .15s;
}
.dui-dt-colvis-btn:hover { background: var(--dt-hover); border-color: var(--dt-border-strong); }
.dui-dt-colvis-menu {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  background: var(--dt-surface);
  border: 0;
  border-radius: 12px;
  box-shadow: none;
  padding: 6px;
  min-width: 200px;
  max-height: 320px;
  overflow-y: auto;
  z-index: 100;
  display: none;
}
.dui-dt-colvis.open .dui-dt-colvis-menu { display: block; }
.dui-dt-colvis-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 10px;
  font-size: 13px;
  cursor: pointer;
  border-radius: 6px;
  color: var(--dt-text);
  user-select: none;
  transition: background .1s;
}
.dui-dt-colvis-item:hover { background: var(--dt-hover); }
.dui-dt-colvis-item input[type="checkbox"] {
  width: 15px;
  height: 15px;
  accent-color: var(--dt-text);
  cursor: pointer;
}

/* Card wrapper */
.dui-dt-card {
  background: var(--dt-surface);
  border: 0;
  border-radius: 12px;
  overflow-x: auto;
  overflow-y: auto;
  max-height: calc(100vh - 200px);
}

/* Table */
.dui-dt-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: auto;
}
.dui-dt-table thead {
  border-bottom: 0;
}
.dui-dt-th {
  padding: 10px 16px;
  text-align: left;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .5px;
  color: var(--dt-muted);
  white-space: nowrap;
  user-select: none;
  position: relative;
}
.dui-dt-th.sortable { cursor: pointer; transition: color .15s; }
.dui-dt-th.sortable:hover { color: var(--dt-text); }
.dui-dt-sort-icon {
  margin-left: 4px;
  font-size: 12px;
  opacity: .4;
  vertical-align: middle;
  transition: opacity .15s;
}
.dui-dt-th.sorted-asc .dui-dt-sort-icon,
.dui-dt-th.sorted-desc .dui-dt-sort-icon { opacity: 1; color: var(--dt-text); }

/* Rows */
.dui-dt-row {
  border-bottom: 1px solid var(--dt-border);
  transition: background .1s;
}
.dui-dt-row:last-child { border-bottom: none; }
.dui-dt-row:hover { background: var(--dt-hover); }
.dui-dt-row.is-me { background: var(--dt-active); }
.dui-dt-row > td {
  padding: 10px 16px;
  font-size: 13px;
  color: var(--dt-text);
  vertical-align: middle;
  white-space: nowrap;
}

/* Empty state */
.dui-dt-empty {
  padding: 48px 20px;
  text-align: center;
  color: var(--dt-muted);
  font-size: 14px;
}

/* Footer / pagination */
.dui-dt-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 4px 0 0 0;
  font-size: 12px;
  color: var(--dt-muted);
}
.dui-dt-footer-left { padding-left: 4px; }
.dui-dt-footer-right { display: flex; gap: 4px; align-items: center; }
/* 2026-10-21 (Marc): la paginación en el CENTRO del pie de la tabla (a la derecha la tapaba la bolita del asistente) */
@media (min-width: 768px) {
  .dui-dt-footer { position: relative; min-height: 34px; }
  .dui-dt-footer-right { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); padding-top: 2px; }
}
.dui-dt-page-btn {
  background: var(--dt-surface);
  border: 0;
  color: var(--dt-muted);
  width: 28px;
  height: 28px;
  border-radius: 6px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  font-size: 14px;
  transition: background .15s, color .15s, border-color .15s;
}
.dui-dt-page-btn:hover:not([disabled]) { background: var(--dt-hover); color: var(--dt-text); border-color: var(--dt-border-strong); }
.dui-dt-page-btn[disabled] { opacity: .3; cursor: not-allowed; }
.dui-dt-page-info {
  padding: 0 6px;
  font-size: 12px;
  color: var(--dt-text);
  font-weight: 500;
  min-width: 60px;
  text-align: center;
}
.dui-dt-pagesize {
  background: var(--dt-surface);
  border: 0;
  color: var(--dt-text);
  padding: 4px 8px;
  border-radius: 6px;
  font-size: 12px;
  font-family: var(--font-sans);
  margin-right: 6px;
  cursor: pointer;
  outline: none;
}
.dui-dt-pagesize:focus { border-color: var(--dt-border-strong); }

/* Actions row cell — para dropdowns/botones */
.dui-dt-row .dropdown-menu {
  background: var(--dt-surface) !important;
  border: 0 !important;
  border-radius: 10px !important;
  box-shadow: var(--dt-pop-shadow) !important;
  padding: 4px !important;
}
.dui-dt-row .dropdown-item {
  font-size: 13px;
  padding: 7px 10px;
  border-radius: 6px;
  color: var(--dt-text) !important;
  transition: background .1s;
}
.dui-dt-row .dropdown-item:hover { background: var(--dt-hover) !important; }
.dui-dt-row .dropdown-item.text-danger { color: var(--dt-danger) !important; }

/* Responsive */
@media (max-width: 900px) {
  .dui-dt-card { overflow-x: auto; }
  .dui-dt-toolbar { flex-direction: column; align-items: stretch; }
  .dui-dt-search { max-width: none; }
  .dui-dt-toolbar-right { justify-content: flex-end; }
}

.dui-table-shell {
  background: var(--dt-surface);
  border: 0;
  border-radius: var(--dt-radius-lg, 12px);
  overflow: hidden;
  box-shadow: none;
}

.dui-table-shell table {
  width: 100%;
  border-collapse: collapse;
  margin: 0;
}

.dui-table-shell thead th {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--dt-muted);
  background: var(--dt-surface-2);
  border-bottom: 1px solid var(--dt-border);
  padding: 10px 14px;
  text-align: left;
  white-space: nowrap;
}

.dui-table-shell tbody td {
  font-size: 13px;
  color: var(--dt-text);
  border-bottom: 1px solid var(--dt-border);
  padding: 10px 14px;
  vertical-align: middle;
}

.dui-table-shell tbody tr:last-child td {
  border-bottom: 0;
}

.dui-table-shell tbody tr:hover td {
  background: var(--dt-hover);
}

/* tablas Bootstrap / DataTables / .table-list: fuera los grises-azules HubSpot de 165_app.css */
table { font-variant-numeric: tabular-nums; }
.table > :not(caption) > * > * { background-color: transparent !important; color: var(--dt-text); border-bottom-color: var(--dt-border) !important; }
.table > thead > tr > th { background-color: transparent !important; color: var(--dt-muted) !important; border-bottom: 1px solid var(--dt-border-strong) !important; font-size: 11.5px; letter-spacing: .05em; }
.table-hover > tbody > tr:hover > * { background-color: var(--dt-hover) !important; color: var(--dt-text) !important; }
table.dataTable { border-color: var(--dt-border) !important; }
table.dataTable thead th, table.dataTable thead td { background-color: transparent !important; color: var(--dt-muted) !important; border-bottom-color: var(--dt-border-strong) !important; }
table.dataTable tbody td, table.dataTable tbody tr.odd td, table.dataTable tbody tr.even td { background-color: transparent !important; color: var(--dt-text) !important; border-bottom-color: var(--dt-border) !important; }
table.dataTable tbody tr:hover td { background-color: var(--dt-hover) !important; }
.dataTables_wrapper .dataTables_paginate .paginate_button.current { background: var(--dt-active) !important; color: var(--dt-text) !important; border-color: var(--dt-border-strong) !important; }
.table-list { border-color: var(--dt-border); background: var(--dt-surface); }
.table-list__header { background: var(--dt-topbar); border-bottom-color: var(--dt-border); }
.table-list__item { color: var(--dt-text); background: var(--dt-surface); border-bottom-color: var(--dt-border); }
.table-list__item--selected, .table-list__item:hover { background: var(--dt-hover); }
.table-list__item::before { background: var(--dt-text); }

/* cabeceras en el gris azulado #f5f8fa de la paleta HubSpot (y #2a2a2a en oscuro) con !important: .table-list__header de
   cssyappv2/salestables.css (listas de Contacts, Empleados...) y .ag-header de 165_app.css (AG Grid: Tarifas, Enrutador). Banda del
   topbar con línea fina, igual que el resto de tablas (§12) */
:root .table-list__header { background: var(--dt-topbar) !important; border-bottom: 1px solid var(--dt-border) !important; }
:root .ag-header { background-color: var(--dt-topbar) !important; border-bottom: 1px solid var(--dt-border) !important; }
    #salesn-root .salesn-tablewrap {
        margin: 0 18px 12px;
        background: var(--dt-surface);
        border: 0;
        border-radius: var(--dt-radius-lg);
    }
    #salesn-root .salesn-toolbar { border-bottom-color: transparent; }
    #salesn-root .salesn-grid thead th {
        background: var(--dt-surface-2);
        color: var(--dt-muted);
        border-bottom-color: transparent;
    }
    #salesn-root .salesn-grid tbody td {
        background: var(--dt-surface);
        color: var(--dt-text);
        border-bottom-color: transparent;
    }
    #salesn-root .salesn-grid tbody tr:hover td { background: var(--dt-surface-2); }
    #salesn-root .salesn-grid tbody tr:is(.is-open, :has(.ccheck input:checked)) td {
        background: color-mix(in srgb, var(--dt-text) 8%, var(--dt-surface));
    }
    #salesn-root .salesn-grid tbody tr:has(.ccheck input:checked) td:first-child {
        box-shadow: inset 2px 0 0 var(--dt-focus);
    }
/* Payments and every table rendered by the CRM share the same canvas and rows. */
:root[data-bs-theme] body :is(.table-list, .dui-dt-card, .dataTables_wrapper .table-responsive,
 .ag-root-wrapper, .ag-root-wrapper-body, .ag-root) { border:0 !important; box-shadow:none !important; background:var(--dt-surface); }
:root[data-bs-theme] body :is(.table-list, .dui-dt-card, .ag-root-wrapper) { border-radius:var(--dt-radius-lg); }
:root[data-bs-theme] body :is(.table-list__header, .table thead, .v2_table thead th, .dui-dt-head) {
 background:var(--dt-surface-2) !important; color:var(--dt-muted) !important; border:0 !important;
}
:root[data-bs-theme] body :is(.table-list__header-item, .table-list__item-wrapper > div) { color:var(--dt-text) !important; border-color:transparent !important; }
:root[data-bs-theme] body :is(.table-list__item, .table-list__item:nth-child(even), .dui-dt-row) {
 background:var(--dt-surface) !important; color:var(--dt-text); border:0 !important;
}
:root[data-bs-theme] body :is(.table-list__item, .dui-dt-row):hover { background:var(--dt-hover) !important; }
:root[data-bs-theme] body :is(.table, .v2_table, .dui-table-shell table) { --bs-table-bg:var(--dt-surface); --bs-table-color:var(--dt-text); --bs-table-striped-bg:var(--dt-surface); --bs-table-hover-bg:var(--dt-hover); }
:root[data-bs-theme] body :is(.table, .v2_table, .dui-table-shell table) :is(td, th) { border-color:transparent !important; }
:root[data-bs-theme] body :is(.ag-theme-quartz, .ag-theme-alpine, .ag-theme-custom) {
 --ag-background-color:var(--dt-surface);
 --ag-foreground-color:var(--dt-text);
 --ag-secondary-foreground-color:var(--dt-muted);
 --ag-header-background-color:var(--dt-surface-2);
 --ag-header-foreground-color:var(--dt-muted);
 --ag-odd-row-background-color:var(--dt-surface);
 --ag-even-row-background-color:var(--dt-surface);
 --ag-row-hover-color:var(--dt-hover);
 --ag-border-color:transparent;
 --ag-row-border-color:transparent;
 --ag-selected-row-background-color:color-mix(in srgb, var(--dt-text) 8%, var(--dt-surface));
 --ag-input-background-color:var(--dt-field-bg);
 --ag-input-border-color:var(--dt-border);
 --ag-input-focus-border-color:var(--dt-focus);
 --ag-input-focus-box-shadow:none;
 --ag-range-selection-border-color:var(--dt-focus);
 --ag-range-selection-background-color:var(--dt-active);
 --ag-checkbox-checked-color:var(--dt-cta);
 --ag-checkbox-unchecked-color:var(--dt-muted);
 --ag-wrapper-border:0; --ag-wrapper-border-radius:var(--dt-radius-lg); --ag-font-family:var(--font-sans);
}
/* Selected records keep their state when normal rows lose decorative borders. */
:root[data-bs-theme] body :is(.table-list__item--selected, .dui-dt-row.is-selected) {
 background:color-mix(in srgb, var(--dt-text) 8%, var(--dt-surface)) !important;
}

/* One row palette. Cells are transparent so hover and selection remain visible. */
:root[data-bs-theme] body :is(.dui-dt-card, .dui-table-shell, .table-list, .salesn-tablewrap) {
  background: var(--dt-surface); border: 0 !important; border-radius: var(--dt-radius-lg); box-shadow: none !important;
}
:root[data-bs-theme] body :is(.table, .v2_table, .dui-dt-table, .ai-table, .dui-table-shell table, table.dataTable) {
  background: var(--dt-surface); color: var(--dt-text); font-variant-numeric: tabular-nums;
}
:root[data-bs-theme] body :is(.table, .v2_table, .dui-dt-table, .ai-table, .dui-table-shell table, table.dataTable) :is(td, th) { border: 0 !important; }
:root[data-bs-theme] body :is(.table, .v2_table, .dui-dt-table, .ai-table, .dui-table-shell table, table.dataTable) thead :is(th, td),
:root[data-bs-theme] body :is(.table-list__header, .ag-header) {
  background: var(--dt-surface-2) !important; color: var(--dt-muted) !important; border: 0 !important;
}
:root[data-bs-theme] body :is(.table, .v2_table, .dui-dt-table, .ai-table, .dui-table-shell table, table.dataTable) tbody tr > td { background-color: transparent !important; }
:root[data-bs-theme] body :is(.table, .v2_table, .dui-dt-table, .ai-table, .dui-table-shell table, table.dataTable) tbody tr:hover > td {
  background-color: var(--dt-hover) !important;
}
:root[data-bs-theme] body :is(.table, .v2_table, .dui-dt-table, .ai-table, .dui-table-shell table, table.dataTable) tbody tr:is(.is-selected, .selected, [aria-selected="true"]) > td {
  background-color: color-mix(in srgb, var(--dt-text) 8%, var(--dt-surface)) !important;
}
:root[data-bs-theme] body .dui-dt-search { background: var(--dt-field-bg); border: 0; }
:root[data-bs-theme] body .dui-dt-search:focus-within { background: var(--dt-field-hover); }
:root[data-bs-theme] body .dui-dt-colvis-menu { background: var(--dt-overlay); border: 0; box-shadow: var(--dt-pop-shadow); border-radius: var(--dt-radius); }
@media (forced-colors: active) {
  :root[data-bs-theme] body :is(.dui-dt-card, .dui-table-shell, .table-list, .ag-root-wrapper) { border: 1px solid CanvasText !important; }
  :root[data-bs-theme] body :is(.dui-dt-row.is-selected, .table-list__item--selected, .ag-row-selected) { outline: 1px solid Highlight; outline-offset: -1px; }
  .dui-dt-search:focus-within { outline: 2px solid Highlight; outline-offset: -2px; }
}
