/* ═══════════════════════════════════════════════════════════════════════
 * RV2 · styles/reservas-tabla.css
 * Estilos de tabla, cells, badges, health dot, footer.
 * Sub-fase 1.B.3.a · LUZOcrm V2 · TRANSED ONG
 *
 * Reglas absolutas respetadas:
 * - Cero border-left / lateral color stripes (todo via bg uniforme o box-shadow uniforme)
 * - Cero hex/rgba hardcodeado · solo var(--lk-*) o var(--rv2-*)
 * - font-weight 500, borders .5px, radius 10px cards / 4px chips
 * - Microanimaciones cubic-bezier(0.16, 1, 0.3, 1) ease-out-expo
 * ═══════════════════════════════════════════════════════════════════════ */

/* ─── Local tokens · derivados de LUZOkit ─────────────────────────────── */
:root,
.rv2-tokens {
  --rv2-accent:        var(--lk-brand);
  --rv2-accent-lt:     var(--lk-bg-active, rgba(109,40,217,.08));
  --rv2-accent-bd:     var(--lk-brand-border, rgba(109,40,217,.30));
  --rv2-accent-soft:   var(--lk-brand-muted, rgba(109,40,217,.15));
  --rv2-panel:         var(--lk-bg-card);
  --rv2-bg2:           var(--lk-bg-surface);
  --rv2-bg-hover:      var(--lk-bg-hover, rgba(0,0,0,.04));
  --rv2-bg-selected:   var(--lk-bg-selected, #ede9fe);
  --rv2-border:        var(--lk-border-soft, rgba(0,0,0,.06));
  --rv2-bm:            var(--lk-border, rgba(0,0,0,.12));
  --rv2-tx:            var(--lk-text-primary);
  --rv2-tx-2:          var(--lk-text-secondary);
  --rv2-muted:         var(--lk-text-muted);
  --rv2-faint:         var(--lk-text-faint, #94a3b8);
  --rv2-inverse:       var(--lk-text-inverse, #fff);

  --rv2-health-ok:     var(--lk-green, #16a34a);
  --rv2-health-ok-sft: var(--lk-green-soft, rgba(22,163,74,.18));
  --rv2-health-wa:     var(--lk-amber, #d97706);
  --rv2-health-wa-sft: var(--lk-amber-soft, rgba(217,119,6,.18));
  --rv2-health-er:     var(--lk-red,   #dc2626);
  --rv2-health-er-sft: var(--lk-red-soft, rgba(220,38,38,.18));

  --rv2-mono:          'SF Mono', ui-monospace, Menlo, monospace;

  /* Microanimaciones */
  --rv2-ease:  cubic-bezier(0.16, 1, 0.3, 1);
  --rv2-tfast: 120ms;
  --rv2-tbase: 160ms;
  --rv2-tslow: 220ms;

  /* Estados · paleta calendar (1 color único por estado) */
  --rv2-st-reservada-bg:#f1f5f9;  --rv2-st-reservada-tx:#475569;  --rv2-st-reservada-dot:#64748b;
  --rv2-st-confirmada-bg:#dbeafe; --rv2-st-confirmada-tx:#1e40af; --rv2-st-confirmada-dot:#2563eb;
  --rv2-st-espera-bg:#fef3c7;     --rv2-st-espera-tx:#92400e;     --rv2-st-espera-dot:#d97706;
  --rv2-st-pagada-bg:#ccfbf1;     --rv2-st-pagada-tx:#115e59;     --rv2-st-pagada-dot:#0d9488;
  --rv2-st-no_pagada-bg:#ffe4e6;  --rv2-st-no_pagada-tx:#9f1239;  --rv2-st-no_pagada-dot:#e11d48;
  --rv2-st-atendida-bg:#dcfce7;   --rv2-st-atendida-tx:#166534;   --rv2-st-atendida-dot:#16a34a;
  --rv2-st-cancelada-bg:#fee2e2;  --rv2-st-cancelada-tx:#991b1b;  --rv2-st-cancelada-dot:#dc2626;
  --rv2-st-no_presenta-bg:#e2e8f0;--rv2-st-no_presenta-tx:#1e293b;--rv2-st-no_presenta-dot:#475569;
  --rv2-st-reagendada-bg:#ede9fe; --rv2-st-reagendada-tx:#5b21b6; --rv2-st-reagendada-dot:#7c3aed;
  --rv2-st-adicional-bg:#fce7f3;  --rv2-st-adicional-tx:#9d174d;  --rv2-st-adicional-dot:#db2777;
  --rv2-st-pend_canc-bg:#ffedd5;  --rv2-st-pend_canc-tx:#9a3412;  --rv2-st-pend_canc-dot:#ea580c;
}

[data-theme="dark"],
[data-theme="midnight"] {
  --rv2-st-reservada-bg:rgba(100,116,139,.18); --rv2-st-reservada-tx:#cbd5e1; --rv2-st-reservada-dot:#94a3b8;
  --rv2-st-confirmada-bg:rgba(37,99,235,.20);  --rv2-st-confirmada-tx:#93c5fd; --rv2-st-confirmada-dot:#60a5fa;
  --rv2-st-espera-bg:rgba(217,119,6,.20);      --rv2-st-espera-tx:#fcd34d;     --rv2-st-espera-dot:#f59e0b;
  --rv2-st-pagada-bg:rgba(13,148,136,.18);     --rv2-st-pagada-tx:#5eead4;     --rv2-st-pagada-dot:#14b8a6;
  --rv2-st-no_pagada-bg:rgba(225,29,72,.18);   --rv2-st-no_pagada-tx:#fda4af;  --rv2-st-no_pagada-dot:#f43f5e;
  --rv2-st-atendida-bg:rgba(22,163,74,.20);    --rv2-st-atendida-tx:#86efac;   --rv2-st-atendida-dot:#4ade80;
  --rv2-st-cancelada-bg:rgba(220,38,38,.20);   --rv2-st-cancelada-tx:#fca5a5;  --rv2-st-cancelada-dot:#ef4444;
  --rv2-st-no_presenta-bg:rgba(71,85,105,.30); --rv2-st-no_presenta-tx:#cbd5e1;--rv2-st-no_presenta-dot:#64748b;
  --rv2-st-reagendada-bg:rgba(124,58,237,.20); --rv2-st-reagendada-tx:#c4b5fd; --rv2-st-reagendada-dot:#a78bfa;
  --rv2-st-adicional-bg:rgba(219,39,119,.18);  --rv2-st-adicional-tx:#f9a8d4;  --rv2-st-adicional-dot:#ec4899;
  --rv2-st-pend_canc-bg:rgba(234,88,12,.20);   --rv2-st-pend_canc-tx:#fdba74;  --rv2-st-pend_canc-dot:#f97316;
}

/* ─── Body · override seguro vía modifier ────────────────────────────── */
/* El shell (reservas.css) define .rv2-body { flex:1; overflow-y:auto; padding:20px 22px }. */
/* Cuando vista Lista activa, agregamos .rv2-body--lista para overridear lo necesario:
 *   - flex: 1 (heredado del shell, no necesita redeclaración)
 *   - flex column en lugar de scroll vertical: la tabla scrollea internamente
 *   - padding ajustado, min-height:0 para que tbl-wrap pueda contraerse
 */
.rv2-body.rv2-body--lista {
  display: flex;
  flex-direction: column;
  gap: 0;
  padding: 0;
  overflow: hidden;
  min-height: 0;
}

/* ─── Toolbar ─────────────────────────────────────────────────────────── */
.rv2-tlb {
  display: flex; align-items: center; gap: 10px;
  flex-shrink: 0; min-height: 48px;
  padding: 8px 16px;
  background: var(--rv2-panel);
  border-bottom: .5px solid var(--rv2-border);
}
.rv2-tlb-pills {
  display: flex; align-items: center; gap: 6px;
  flex: 1; flex-wrap: wrap;
}
.rv2-tlb-actions {
  display: flex; align-items: center; gap: 4px;
  flex-shrink: 0; position: relative;
}
.rv2-tlb-btn {
  height: 32px; padding: 0 10px;
  background: var(--rv2-panel); border: .5px solid var(--rv2-bm);
  border-radius: 7px; color: var(--rv2-muted); cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px;
  font: 500 11.5px/1 system-ui, -apple-system, 'Segoe UI', sans-serif;
  transition: background var(--rv2-tfast) var(--rv2-ease),
              color var(--rv2-tfast) var(--rv2-ease),
              border-color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-tlb-btn.icon-only {
  padding: 0; width: 32px; justify-content: center;
}
.rv2-tlb-btn:hover:not(:disabled) {
  color: var(--rv2-tx); border-color: var(--rv2-accent-bd);
}
.rv2-tlb-btn:disabled {
  opacity: .55; cursor: not-allowed;
}
.rv2-tlb-btn svg {
  width: 14px; height: 14px;
}

/* ─── Health dot (en toolbar, tras Personalizar) ──────────────────────── */
.rv2-health-host {
  display: inline-flex; align-items: center;
  margin-left: 2px;
}
.rv2-health {
  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px;
  cursor: pointer;
  border-radius: 50%;
  outline: none;
  transition: background var(--rv2-tfast) var(--rv2-ease);
}
.rv2-health:hover,
.rv2-health:focus-visible {
  background: var(--rv2-bg-hover);
}
.rv2-health-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--rv2-health-ok);
  position: relative;
}
.rv2-health-dot::before {
  content: ''; position: absolute; inset: -2px;
  border-radius: 50%; background: var(--rv2-health-ok);
  opacity: .4;
  animation: rv2-pulse-soft 2.4s var(--rv2-ease) infinite;
}
.rv2-health[data-status="warning"] .rv2-health-dot,
.rv2-health[data-status="warning"] .rv2-health-dot::before {
  background: var(--rv2-health-wa);
}
.rv2-health[data-status="error"] .rv2-health-dot,
.rv2-health[data-status="error"] .rv2-health-dot::before {
  background: var(--rv2-health-er);
}
@keyframes rv2-pulse-soft {
  0%   { transform: scale(.8); opacity: .6; }
  50%  { transform: scale(1.8); opacity: 0; }
  100% { transform: scale(.8); opacity: 0; }
}

.rv2-health-tip {
  position: absolute; top: calc(100% + 8px); right: 0;
  z-index: 60; width: 300px;
  background: var(--rv2-panel);
  border: .5px solid var(--rv2-bm);
  border-radius: 8px;
  box-shadow: 0 12px 32px rgba(0,0,0,.18);
  opacity: 0; pointer-events: none;
  transform: translateY(-4px);
  transition: opacity var(--rv2-tbase) var(--rv2-ease),
              transform var(--rv2-tbase) var(--rv2-ease);
  overflow: hidden;
}
.rv2-health:hover .rv2-health-tip,
.rv2-health:focus-visible .rv2-health-tip {
  opacity: 1; pointer-events: auto; transform: translateY(0);
}
.rv2-health-tip-head {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 14px 10px;
  border-bottom: .5px solid var(--rv2-border);
}
.rv2-health-tip-title {
  font-size: 12.5px; font-weight: 500; color: var(--rv2-tx);
}
.rv2-health-tip-tag {
  font: 500 9.5px/1 system-ui;
  text-transform: uppercase; letter-spacing: 0.06em;
  padding: 3px 6px; border-radius: 4px;
  background: var(--rv2-health-ok-sft); color: var(--rv2-health-ok);
  margin-left: auto;
}
.rv2-health[data-status="warning"] .rv2-health-tip-tag {
  background: var(--rv2-health-wa-sft); color: var(--rv2-health-wa);
}
.rv2-health[data-status="error"] .rv2-health-tip-tag {
  background: var(--rv2-health-er-sft); color: var(--rv2-health-er);
}
.rv2-health-tip-body {
  padding: 8px 14px 10px;
  display: flex; flex-direction: column; gap: 6px;
}
.rv2-health-tip-item {
  display: flex; align-items: center; gap: 8px; font-size: 11px;
}
.rv2-health-tip-item-status {
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--rv2-health-ok); flex-shrink: 0;
}
.rv2-health-tip-item-status[data-ok="false"] {
  background: var(--rv2-health-wa);
}
.rv2-health-tip-item-k { color: var(--rv2-muted); flex: 1; }
.rv2-health-tip-item-v {
  color: var(--rv2-tx); font-family: var(--rv2-mono); font-weight: 500;
}
.rv2-health-tip-foot {
  padding: 8px 14px;
  border-top: .5px solid var(--rv2-border);
  background: var(--rv2-bg2);
  font-size: 10.5px; color: var(--rv2-muted);
  display: flex; justify-content: space-between; align-items: center;
}
.rv2-health-tip-foot a {
  color: var(--rv2-accent); text-decoration: none; font-weight: 500;
}
.rv2-health-tip-foot a:hover { text-decoration: underline; }

/* ─── Tabla ────────────────────────────────────────────────────────────── */
.rv2-tbl-wrap {
  min-height: 0;
  background: var(--rv2-panel);
  border: 0;
  border-radius: 0;
  overflow: hidden;
  display: flex; flex-direction: column;
}
.rv2-tbl {
  flex: 1 1 auto;
  overflow: auto;
  min-height: 0;
}
.rv2-tbl-head,
.rv2-tbl-row {
  display: grid;
  /* 1.B.3.c · grid-template-columns dinámico via CSS variable.
     tabla.js setea --rv2-grid-cols en .rv2-tbl-wrap según colWidths/colOrder/colHidden.
     Fallback: distribución default por si la variable no está definida. */
  grid-template-columns: var(--rv2-grid-cols, 32px 112px 100px 70px minmax(220px, 1.6fr) 200px 130px 130px 40px);
  align-items: center;
  padding: 0 8px;
}
.rv2-tbl-head {
  position: sticky; top: 0; z-index: 2;
  background: var(--rv2-bg2);
  border-bottom: .5px solid var(--rv2-border);
  height: 36px;
}
.rv2-head-cell {
  font: 500 10px/1 system-ui;
  color: var(--rv2-muted);
  text-transform: uppercase; letter-spacing: 0.06em;
  display: inline-flex; align-items: center; gap: 4px;
  height: 100%; padding: 0 6px;
  user-select: none;
  transition: color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-head-cell[data-col="folio"],
.rv2-head-cell[data-col="fecha"],
.rv2-head-cell[data-col="hora"],
.rv2-head-cell[data-col="paciente"] {
  cursor: pointer;
}
.rv2-head-cell:hover { color: var(--rv2-tx); }
.rv2-head-cell .rv2-sort {
  width: 10px; height: 10px; opacity: .4;
  transition: opacity var(--rv2-tfast) var(--rv2-ease);
}
.rv2-head-cell.sorted { color: var(--rv2-accent); }
.rv2-head-cell.sorted .rv2-sort { opacity: 1; color: var(--rv2-accent); }

/* ─── Rows ────────────────────────────────────────────────────────────── */
.rv2-tbl-row {
  height: 52px;
  border-bottom: .5px solid var(--rv2-border);
  cursor: pointer;
  background: var(--rv2-panel);
  transition: background var(--rv2-tbase) var(--rv2-ease);
}
.rv2-tbl-row:last-child { border-bottom: none; }
.rv2-tbl-row:hover { background: var(--rv2-bg-hover); }
.rv2-tbl-row[data-selected="true"] { background: var(--rv2-bg-selected); }
.rv2-tbl-row[data-row-active="true"] { background: var(--rv2-accent-lt); }
.rv2-tbl-row[data-selected="true"][data-row-active="true"] {
  background: var(--rv2-bg-selected);
  box-shadow: inset 0 0 0 1px var(--rv2-accent-bd);
}

/* ─── Cells ────────────────────────────────────────────────────────────── */
.rv2-cell-cb {
  display: inline-flex; align-items: center; justify-content: center;
}
.rv2-cb {
  width: 16px; height: 16px;
  border: 1.5px solid var(--rv2-bm);
  border-radius: 4px; background: var(--rv2-panel);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
  transition: background var(--rv2-tfast) var(--rv2-ease),
              border-color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-cb:hover { border-color: var(--rv2-accent-bd); }
.rv2-cb[data-checked="true"] {
  background: var(--rv2-accent); border-color: var(--rv2-accent);
}
.rv2-cb[data-checked="true"]::after {
  content: ''; width: 4px; height: 8px;
  border: solid var(--rv2-inverse); border-width: 0 1.5px 1.5px 0;
  transform: rotate(45deg) translate(-1px, -1px);
}

/* Folio */
.rv2-cell-folio-wrap {
  padding: 0 6px;
  display: inline-flex; align-items: center; gap: 4px;
}
.rv2-cell-folio {
  font: 500 11px/1 var(--rv2-mono);
  color: var(--rv2-accent);
  background: var(--rv2-accent-soft);
  padding: 4px 8px;
  border-radius: 4px;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: filter var(--rv2-tfast) var(--rv2-ease);
}
.rv2-cell-folio:hover { filter: brightness(.96); }
.rv2-cell-folio-cp {
  width: 20px; height: 20px;
  background: transparent; border: none; border-radius: 4px;
  color: var(--rv2-muted); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  opacity: 0;
  transition: opacity var(--rv2-tbase) var(--rv2-ease),
              background var(--rv2-tfast) var(--rv2-ease),
              color var(--rv2-tfast) var(--rv2-ease),
              transform var(--rv2-tfast) var(--rv2-ease);
}
.rv2-tbl-row:hover .rv2-cell-folio-cp { opacity: 1; }
.rv2-cell-folio-cp:hover {
  background: var(--rv2-bg-hover); color: var(--rv2-accent);
}
.rv2-cell-folio-cp:active { transform: scale(.92); }
.rv2-cell-folio-cp svg {
  width: 11px; height: 11px;
}
.rv2-cell-folio-cp.copied {
  color: var(--rv2-health-ok); opacity: 1;
}

/* Fecha y hora · MISMA tipografía mono 12px medium */
.rv2-cell-fecha,
.rv2-cell-hora {
  font: 500 12px/1 var(--rv2-mono);
  color: var(--rv2-tx);
  letter-spacing: 0.02em;
  padding: 0 6px;
}

/* Paciente · PIXD plano · mismo styling que RUT */
.rv2-cell-paciente {
  display: flex; flex-direction: column; gap: 2px;
  min-width: 0; padding: 0 6px;
}
.rv2-cell-paciente-nm {
  font-size: 12.5px; font-weight: 500; color: var(--rv2-tx);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rv2-cell-paciente-ids {
  display: inline-flex; align-items: center; gap: 6px;
  font: 400 10.5px/1 var(--rv2-mono);
  color: var(--rv2-muted);
  letter-spacing: 0.02em;
}
.rv2-cell-paciente-sep {
  width: 2px; height: 2px; border-radius: 50%;
  background: var(--rv2-faint); flex-shrink: 0;
}

/* Profesional */
.rv2-cell-prof {
  display: flex; align-items: center; gap: 8px;
  min-width: 0; padding: 0 6px;
}
.rv2-cell-prof-av {
  width: 26px; height: 26px;
  border-radius: 50%; overflow: hidden;
  flex-shrink: 0;
  background: var(--rv2-bg2);
  border: .5px solid var(--rv2-border);
  display: flex; align-items: center; justify-content: center;
  color: var(--rv2-muted);
}
.rv2-cell-prof-av img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.rv2-cell-prof-av-fallback svg {
  width: 14px; height: 14px;
}
.rv2-cell-prof-nm {
  font-size: 12.5px; color: var(--rv2-tx);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Modalidad · icon + label */
.rv2-cell-mod {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11.5px; color: var(--rv2-tx-2); padding: 0 6px;
}
.rv2-cell-mod svg {
  width: 12px; height: 12px;
}

/* Estado · badge mismo ancho 116px */
.rv2-cell-estado { padding: 0 6px; }
.rv2-st {
  display: inline-flex; align-items: center; justify-content: center;
  gap: 5px;
  width: 116px;
  height: 22px;
  padding: 0;
  font: 500 10.5px/1 system-ui;
  border-radius: 11px;
  white-space: nowrap; letter-spacing: -0.005em;
  transition: filter var(--rv2-tfast) var(--rv2-ease);
}
.rv2-st-dot {
  width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0;
}
.rv2-st-reservada    { background: var(--rv2-st-reservada-bg);   color: var(--rv2-st-reservada-tx);   }
.rv2-st-reservada    .rv2-st-dot { background: var(--rv2-st-reservada-dot); }
.rv2-st-confirmada   { background: var(--rv2-st-confirmada-bg);  color: var(--rv2-st-confirmada-tx);  }
.rv2-st-confirmada   .rv2-st-dot { background: var(--rv2-st-confirmada-dot); }
.rv2-st-en_espera    { background: var(--rv2-st-espera-bg);      color: var(--rv2-st-espera-tx);      }
.rv2-st-en_espera    .rv2-st-dot { background: var(--rv2-st-espera-dot); }
.rv2-st-pagada       { background: var(--rv2-st-pagada-bg);      color: var(--rv2-st-pagada-tx);      }
.rv2-st-pagada       .rv2-st-dot { background: var(--rv2-st-pagada-dot); }
.rv2-st-no_pagada    { background: var(--rv2-st-no_pagada-bg);   color: var(--rv2-st-no_pagada-tx);   }
.rv2-st-no_pagada    .rv2-st-dot { background: var(--rv2-st-no_pagada-dot); }
.rv2-st-atendida     { background: var(--rv2-st-atendida-bg);    color: var(--rv2-st-atendida-tx);    }
.rv2-st-atendida     .rv2-st-dot { background: var(--rv2-st-atendida-dot); }
.rv2-st-cancelada    { background: var(--rv2-st-cancelada-bg);   color: var(--rv2-st-cancelada-tx);   }
.rv2-st-cancelada    .rv2-st-dot { background: var(--rv2-st-cancelada-dot); }
.rv2-st-no_presenta  { background: var(--rv2-st-no_presenta-bg); color: var(--rv2-st-no_presenta-tx); }
.rv2-st-no_presenta  .rv2-st-dot { background: var(--rv2-st-no_presenta-dot); }
.rv2-st-reagendada   { background: var(--rv2-st-reagendada-bg);  color: var(--rv2-st-reagendada-tx);  }
.rv2-st-reagendada   .rv2-st-dot { background: var(--rv2-st-reagendada-dot); }
.rv2-st-adicional    { background: var(--rv2-st-adicional-bg);   color: var(--rv2-st-adicional-tx);   }
.rv2-st-adicional    .rv2-st-dot { background: var(--rv2-st-adicional-dot); }
.rv2-st-pend_canc    { background: var(--rv2-st-pend_canc-bg);   color: var(--rv2-st-pend_canc-tx);   }
.rv2-st-pend_canc    .rv2-st-dot { background: var(--rv2-st-pend_canc-dot); }

/* Acciones por fila */
.rv2-cell-act {
  display: inline-flex; align-items: center; justify-content: center;
}
.rv2-row-menu {
  width: 26px; height: 26px;
  background: transparent; border: none; border-radius: 5px;
  color: var(--rv2-muted); cursor: pointer;
  opacity: 0;
  display: inline-flex; align-items: center; justify-content: center;
  transition: opacity var(--rv2-tbase) var(--rv2-ease),
              background var(--rv2-tfast) var(--rv2-ease),
              color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-tbl-row:hover .rv2-row-menu,
.rv2-tbl-row[data-selected="true"] .rv2-row-menu,
.rv2-tbl-row[data-row-active="true"] .rv2-row-menu {
  opacity: 1;
}
.rv2-row-menu:hover {
  background: var(--rv2-bg2); color: var(--rv2-tx);
}
.rv2-row-menu svg { width: 14px; height: 14px; }

/* ─── Empty / Error / Loading ─────────────────────────────────────────── */
.rv2-tbl-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px;
  padding: 64px 24px;
  color: var(--rv2-muted);
  font-size: 12.5px;
}
.rv2-tbl-empty svg {
  width: 32px; height: 32px; opacity: .5;
}
.rv2-tbl-empty small {
  font-size: 11px;
  color: var(--rv2-faint);
  font-family: var(--rv2-mono);
  text-align: center;
  max-width: 320px;
  word-break: break-word;
}
.rv2-tbl-retry {
  margin-top: 4px;
  height: 28px; padding: 0 12px;
  background: var(--rv2-accent); color: var(--rv2-inverse);
  border: none; border-radius: 6px;
  font: 500 11.5px/1 system-ui; cursor: pointer;
  transition: filter var(--rv2-tfast) var(--rv2-ease);
}
.rv2-tbl-retry:hover { filter: brightness(1.08); }

/* Loading skeleton */
.rv2-tbl-row--sk { cursor: default; }
.rv2-tbl-row--sk:hover { background: var(--rv2-panel); }
.rv2-skel {
  display: inline-block;
  background: linear-gradient(90deg,
    var(--rv2-bg2) 0%, var(--rv2-bg-hover) 50%, var(--rv2-bg2) 100%);
  background-size: 200% 100%;
  border-radius: 3px;
  animation: rv2-skel-shimmer 1.4s var(--rv2-ease) infinite;
}
.rv2-skel--circle { border-radius: 50% !important; }
@keyframes rv2-skel-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ─── Footer / paginación ─────────────────────────────────────────────── */
.rv2-foot {
  height: 44px; border-top: .5px solid var(--rv2-border);
  display: flex; align-items: center; padding: 0 14px; gap: 10px;
  flex-shrink: 0; background: var(--rv2-bg2);
}
.rv2-foot-info {
  font-size: 11.5px; color: var(--rv2-muted);
}
.rv2-foot-info strong {
  color: var(--rv2-tx); font-weight: 500;
}
.rv2-foot-spacer { flex: 1; }
.rv2-pager {
  display: inline-flex; align-items: center; gap: 4px;
}
.rv2-pager-btn {
  width: 26px; height: 26px;
  background: transparent; border: .5px solid transparent;
  border-radius: 5px; color: var(--rv2-muted); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  transition: background var(--rv2-tfast) var(--rv2-ease),
              color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-pager-btn:hover:not(:disabled) {
  background: var(--rv2-bg-hover); color: var(--rv2-tx);
}
.rv2-pager-btn:disabled {
  opacity: .3; cursor: not-allowed;
}
.rv2-pager-btn svg { width: 12px; height: 12px; }
.rv2-pager-page {
  min-width: 26px; height: 26px; padding: 0 8px;
  border-radius: 5px;
  font: 500 11px/1 var(--rv2-mono);
  color: var(--rv2-muted);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
  background: transparent; border: none;
  transition: background var(--rv2-tfast) var(--rv2-ease),
              color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-pager-page.current {
  background: var(--rv2-accent-lt); color: var(--rv2-accent);
}
.rv2-pager-page:hover:not(.current) {
  background: var(--rv2-bg-hover); color: var(--rv2-tx);
}
.rv2-pager-gap {
  font-size: 11px; color: var(--rv2-faint); padding: 0 4px;
}
.rv2-page-size {
  height: 26px;
  background: var(--rv2-panel);
  border: .5px solid var(--rv2-bm);
  border-radius: 5px;
  padding: 0 8px;
  color: var(--rv2-tx);
  font: 500 11px/1 system-ui;
  cursor: pointer;
}

/* ─── Toast global del módulo ─────────────────────────────────────────── */
.rv2-toast {
  position: fixed; bottom: 16px; left: 50%;
  transform: translateX(-50%) translateY(16px);
  z-index: 12000;
  background: var(--lk-text-primary, #0f172a);
  color: var(--lk-text-inverse, #fff);
  padding: 8px 14px; border-radius: 8px;
  font: 500 12px/1 system-ui;
  display: flex; align-items: center; gap: 8px;
  opacity: 0; pointer-events: none;
  transition: opacity 220ms cubic-bezier(0.16, 1, 0.3, 1),
              transform 220ms cubic-bezier(0.16, 1, 0.3, 1);
  box-shadow: 0 4px 16px rgba(0,0,0,.16);
}
.rv2-toast[data-show="true"] {
  opacity: 1; transform: translateX(-50%) translateY(0);
}
.rv2-toast svg { width: 13px; height: 13px; }

/* ═══════════════════════════════════════════════════════════════════════
 * 1.B.3.c · Search · Filters · Pills · Tooltip fixed · thead compact
 * ═══════════════════════════════════════════════════════════════════════ */

/* ─── Search slide-in (patrón staff: .open + .has-q) ───────────────────── */
.rv2-search {
  position: relative;
  display: inline-flex; align-items: center;
  height: 32px;
  border-radius: 7px;
  background: transparent;
  border: .5px solid transparent;
  transition: background .2s var(--rv2-ease, ease),
              border-color .2s var(--rv2-ease, ease);
}
.rv2-search.open {
  background: var(--rv2-panel);
  border-color: var(--rv2-bm);
}
.rv2-search-btn {
  height: 32px; width: 32px;
  border: 0; padding: 0;
  background: transparent;
  color: var(--rv2-muted);
  cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 7px;
  transition: color var(--rv2-tfast) var(--rv2-ease),
              background var(--rv2-tfast) var(--rv2-ease);
  flex-shrink: 0;
}
.rv2-search-btn svg { width: 14px; height: 14px; }
.rv2-search-btn:hover {
  color: var(--rv2-tx);
  background: var(--rv2-bg-hover);
}
.rv2-search.open .rv2-search-btn {
  color: var(--rv2-accent);
  background: transparent;
}
.rv2-search-input {
  width: 0;
  height: 30px;
  border: 0; outline: none; padding: 0;
  background: transparent;
  color: var(--rv2-tx);
  font: 500 12px/1 system-ui, -apple-system, sans-serif;
  overflow: hidden;
  transition: width .22s var(--rv2-ease, ease),
              padding .22s var(--rv2-ease, ease);
}
.rv2-search-input::placeholder {
  color: var(--rv2-muted);
  opacity: .6;
}
.rv2-search.open .rv2-search-input {
  width: 200px;
  padding: 0 4px;
}
.rv2-search-clear {
  width: 22px; height: 22px;
  border: 0; padding: 0;
  background: transparent;
  color: var(--rv2-muted);
  cursor: pointer;
  display: none;
  align-items: center; justify-content: center;
  border-radius: 50%;
  flex-shrink: 0;
  margin-right: 3px;
}
.rv2-search-clear:hover {
  background: var(--rv2-bg-hover);
  color: var(--rv2-tx);
}
.rv2-search-clear svg { width: 10px; height: 10px; }
.rv2-search.open.has-q .rv2-search-clear {
  display: inline-flex;
}

/* ─── Filters dropdown ─────────────────────────────────────────────────── */
.rv2-filters-wrap {
  position: relative;
  display: inline-flex; align-items: center;
}
.rv2-filters-dd {
  position: absolute; top: calc(100% + 6px); right: 0;
  width: 360px; max-height: 480px;
  background: var(--rv2-panel);
  border: .5px solid var(--rv2-bm);
  border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0,0,0,.18);
  opacity: 0; pointer-events: none;
  transform: translateY(-4px);
  transition: opacity .15s var(--rv2-ease, ease),
              transform .15s var(--rv2-ease, ease);
  z-index: 60;
  display: flex; flex-direction: column;
  overflow: hidden;
}
.rv2-filters-wrap[data-expanded="1"] .rv2-filters-dd {
  opacity: 1; pointer-events: auto; transform: translateY(0);
}
.rv2-filters-wrap[data-expanded="1"] > .rv2-tlb-btn {
  background: var(--rv2-accent-lt);
  border-color: var(--rv2-accent-bd);
  color: var(--rv2-accent);
}
.rv2-filters-head {
  display: flex; align-items: center;
  padding: 12px 14px 10px;
  border-bottom: .5px solid var(--rv2-border);
  font-size: 13px; font-weight: 500;
  color: var(--rv2-tx);
}
.rv2-filters-head strong { font-weight: 500; flex: 1; }
.rv2-filters-close {
  width: 22px; height: 22px;
  border: 0; background: transparent;
  color: var(--rv2-muted); cursor: pointer;
  border-radius: 5px;
  display: inline-flex; align-items: center; justify-content: center;
}
.rv2-filters-close:hover { background: var(--rv2-bg-hover); color: var(--rv2-tx); }
.rv2-filters-close svg { width: 14px; height: 14px; }

.rv2-filters-body {
  padding: 6px 0; overflow-y: auto; flex: 1; min-height: 0;
}
.rv2-filters-grp {
  padding: 10px 14px;
  border-bottom: .5px solid var(--rv2-border);
}
.rv2-filters-grp:last-child { border-bottom: 0; }
.rv2-filters-grp-t {
  font: 500 10px/1 system-ui;
  text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--rv2-muted);
  margin-bottom: 8px;
}
.rv2-filters-grp-list {
  display: grid; grid-template-columns: 1fr 1fr; gap: 4px 14px;
  max-height: 160px; overflow-y: auto;
}
.rv2-filters-empty {
  font-size: 11.5px; color: var(--rv2-muted);
  padding: 4px 0;
}
.rv2-chk {
  display: flex; align-items: center; gap: 7px;
  font: 500 12px/1 system-ui;
  color: var(--rv2-tx-2);
  cursor: pointer;
  padding: 4px 0;
  user-select: none;
}
.rv2-chk input { width: 13px; height: 13px; accent-color: var(--rv2-accent); cursor: pointer; }
.rv2-chk span { line-height: 1.3; }

.rv2-filters-fechas {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px;
}
.rv2-filters-fechas label {
  display: flex; flex-direction: column; gap: 4px;
  font: 500 10px/1 system-ui;
  text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--rv2-muted);
}
.rv2-filters-fechas input[type="date"] {
  height: 30px; padding: 0 8px;
  border: .5px solid var(--rv2-bm);
  border-radius: 6px;
  background: var(--rv2-panel);
  font: 500 11.5px/1 system-ui;
  color: var(--rv2-tx);
}

.rv2-filters-foot {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px;
  border-top: .5px solid var(--rv2-border);
  background: var(--rv2-bg2);
}
.rv2-tlb-btn--primary {
  background: var(--rv2-accent) !important;
  color: var(--rv2-inverse, #fff) !important;
  border-color: var(--rv2-accent) !important;
}
.rv2-tlb-btn--primary:hover:not(:disabled) {
  filter: brightness(1.08);
}

/* ─── Pills aplicados ──────────────────────────────────────────────────── */
.rv2-tlb-pills {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 6px;
  flex: 1;
}
.rv2-pill {
  display: inline-flex; align-items: center; gap: 6px;
  height: 24px;
  padding: 0 4px 0 10px;
  background: var(--rv2-accent-lt);
  border: .5px solid var(--rv2-accent-bd);
  border-radius: 12px;
  color: var(--rv2-accent);
  font: 500 11px/1 system-ui;
  cursor: default;
}
.rv2-pill-text {
  max-width: 200px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rv2-pill-x {
  display: inline-flex; align-items: center; justify-content: center;
  width: 16px; height: 16px;
  border-radius: 50%;
  cursor: pointer;
  flex-shrink: 0;
}
.rv2-pill-x:hover {
  background: rgba(109,40,217,.18);
}
.rv2-pill-x svg { width: 9px; height: 9px; }

.rv2-pill--clear {
  background: transparent;
  border-color: var(--rv2-bm);
  color: var(--rv2-muted);
  padding: 0 10px;
  cursor: pointer;
}
.rv2-pill--clear:hover {
  background: var(--rv2-bg-hover);
  color: var(--rv2-tx);
}

/* ─── Tooltip health-dot · position fixed override ──────────────────────
 * El tooltip de health-dot necesita escapar del overflow:hidden del body.
 * JS le aplica position:fixed + top/left calculados al hover.
 * Aquí dejamos la transición visual igual; el `position: absolute` original
 * del CSS se sobreescribe por inline JS cuando se activa.
 */
.rv2-health-tip {
  z-index: 9000;  /* sobre todo */
}

/* ─── Thead compact (sutilmente más baja) ─────────────────────────────── */
.rv2-tbl-head {
  height: 32px;     /* era 36 */
}
.rv2-head-cell {
  font-size: 9.5px;  /* era 10 */
}

/* ═══════════════════════════════════════════════════════════════════════
 * 1.B.3.c · Sort multi-key + Resize columnas + Gestor Personalizar + Densidad
 * ═══════════════════════════════════════════════════════════════════════ */

/* ─── Sort badge numérico (multi-key) ──────────────────────────────────── */
.rv2-head-cell {
  position: relative;
}
.rv2-head-cell-lbl {
  /* No tomar más espacio que el necesario para que el sort/resize quepan al lado */
}
.rv2-sort {
  width: 11px; height: 11px;
  margin-left: 4px;
  flex-shrink: 0;
  transition: color var(--rv2-tfast) var(--rv2-ease);
}
.rv2-sort--off {
  opacity: 0;
  color: var(--rv2-muted);
}
.rv2-head-cell:hover .rv2-sort--off {
  opacity: .6;
}
.rv2-sort--on {
  opacity: 1;
  color: var(--rv2-accent);
}
.rv2-sort-num {
  display: inline-flex;
  align-items: center; justify-content: center;
  width: 14px; height: 14px;
  margin-left: 3px;
  border-radius: 7px;
  background: var(--rv2-accent);
  color: var(--rv2-inverse, #fff);
  font: 600 8.5px/1 system-ui;
  letter-spacing: 0;
  flex-shrink: 0;
}
.rv2-sortable--on {
  color: var(--rv2-accent);
}

/* ─── Resize handle (sobre el borde derecho del head-cell) ─────────────── */
.rv2-col-resize {
  position: absolute;
  top: 4px; bottom: 4px;
  right: -3px;
  width: 7px;
  cursor: col-resize;
  z-index: 3;
  user-select: none;
  display: flex; align-items: center; justify-content: center;
}
.rv2-col-resize::after {
  content: '';
  width: 1px; height: 14px;
  background: transparent;
  transition: background var(--rv2-tfast) var(--rv2-ease);
}
.rv2-col-resize:hover::after {
  background: var(--rv2-accent);
}
body.rv2-resizing,
body.rv2-resizing * {
  cursor: col-resize !important;
  user-select: none !important;
}
body.rv2-resizing .rv2-col-resize::after {
  background: var(--rv2-accent);
}

/* ─── Gestor "Personalizar" dropdown ───────────────────────────────────── */
.rv2-prefs-wrap {
  position: relative;
  display: inline-flex; align-items: center;
}
.rv2-prefs-dd {
  position: absolute; top: calc(100% + 6px); right: 0;
  width: 340px; max-height: 520px;
  background: var(--rv2-panel);
  border: .5px solid var(--rv2-bm);
  border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0,0,0,.18);
  opacity: 0; pointer-events: none;
  transform: translateY(-4px);
  transition: opacity .15s var(--rv2-ease, ease),
              transform .15s var(--rv2-ease, ease);
  z-index: 60;
  display: flex; flex-direction: column;
  overflow: hidden;
}
.rv2-prefs-wrap[data-expanded="1"] .rv2-prefs-dd {
  opacity: 1; pointer-events: auto; transform: translateY(0);
}
.rv2-prefs-wrap[data-expanded="1"] > .rv2-tlb-btn {
  background: var(--rv2-accent-lt);
  border-color: var(--rv2-accent-bd);
  color: var(--rv2-accent);
}
.rv2-prefs-head {
  display: flex; align-items: center;
  padding: 12px 14px 10px;
  border-bottom: .5px solid var(--rv2-border);
  font: 500 13px/1 system-ui;
  color: var(--rv2-tx);
}
.rv2-prefs-head strong { font-weight: 500; flex: 1; }
.rv2-prefs-body {
  padding: 6px 0; overflow-y: auto; flex: 1; min-height: 0;
}
.rv2-prefs-grp {
  padding: 12px 14px;
  border-bottom: .5px solid var(--rv2-border);
}
.rv2-prefs-grp:last-child { border-bottom: 0; }
.rv2-prefs-grp-t {
  font: 500 10px/1 system-ui;
  text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--rv2-muted);
  margin-bottom: 10px;
}

/* Densidad · 3 botones */
.rv2-prefs-density {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 6px;
}
.rv2-prefs-density-btn {
  height: 30px;
  background: var(--rv2-bg2);
  border: .5px solid var(--rv2-bm);
  border-radius: 6px;
  color: var(--rv2-tx-2);
  font: 500 11.5px/1 system-ui;
  cursor: pointer;
  transition: all var(--rv2-tfast) var(--rv2-ease);
}
.rv2-prefs-density-btn:hover:not(.is-active) {
  background: var(--rv2-bg-hover);
  color: var(--rv2-tx);
}
.rv2-prefs-density-btn.is-active {
  background: var(--rv2-accent-lt);
  border-color: var(--rv2-accent-bd);
  color: var(--rv2-accent);
}

/* Columnas list · drag handle + toggle */
.rv2-prefs-cols {
  display: flex; flex-direction: column;
  gap: 2px;
}
.rv2-prefs-col-row {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 8px;
  border-radius: 6px;
  background: transparent;
  cursor: grab;
  transition: background var(--rv2-tfast) var(--rv2-ease);
}
.rv2-prefs-col-row:hover {
  background: var(--rv2-bg-hover);
}
.rv2-prefs-col-row.is-dragging {
  opacity: .4;
}
.rv2-prefs-col-row.is-drag-over {
  background: var(--rv2-accent-lt);
  outline: .5px dashed var(--rv2-accent-bd);
  outline-offset: -1px;
}
.rv2-prefs-col-drag {
  color: var(--rv2-muted);
  display: inline-flex; align-items: center;
  cursor: grab;
}
.rv2-prefs-col-drag svg { width: 14px; height: 14px; }
.rv2-prefs-col-name {
  flex: 1;
  font: 500 12.5px/1 system-ui;
  color: var(--rv2-tx);
}
.rv2-prefs-col-toggle {
  position: relative;
  display: inline-flex;
  cursor: pointer;
}
.rv2-prefs-col-toggle.is-disabled { cursor: not-allowed; opacity: .5; }
.rv2-prefs-col-toggle input { display: none; }
.rv2-switch {
  display: inline-flex; align-items: center;
  width: 30px; height: 17px;
  background: var(--rv2-bm);
  border-radius: 10px;
  padding: 1px;
  transition: background var(--rv2-tfast) var(--rv2-ease);
}
.rv2-switch-knob {
  width: 15px; height: 15px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 2px rgba(0,0,0,.18);
  transition: transform var(--rv2-tfast) var(--rv2-ease);
}
.rv2-prefs-col-toggle input:checked + .rv2-switch {
  background: var(--rv2-accent);
}
.rv2-prefs-col-toggle input:checked + .rv2-switch .rv2-switch-knob {
  transform: translateX(13px);
}

.rv2-prefs-foot {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px;
  border-top: .5px solid var(--rv2-border);
  background: var(--rv2-bg2);
}

/* ─── Densidad · ajuste de row-height + padding ────────────────────────── */
.rv2-body--lista[data-density="compact"] .rv2-tbl-row {
  min-height: 52px;
}
.rv2-body--lista[data-density="compact"] .rv2-cell-paciente-nm,
.rv2-body--lista[data-density="compact"] .rv2-cell-prof-nm {
  font-size: 12px;
}
.rv2-body--lista[data-density="compact"] .rv2-cell-paciente-ids {
  font-size: 10px;
}

.rv2-body--lista[data-density="normal"] .rv2-tbl-row {
  /* default · ya definido por la regla base */
}

.rv2-body--lista[data-density="comfortable"] .rv2-tbl-row {
  min-height: 92px;
}
.rv2-body--lista[data-density="comfortable"] .rv2-cell-paciente-nm,
.rv2-body--lista[data-density="comfortable"] .rv2-cell-prof-nm {
  font-size: 13px;
}
.rv2-body--lista[data-density="comfortable"] .rv2-cell-prof-av {
  width: 32px; height: 32px;
}
