/*
 * components.css — UI Kit Velandra
 * Fuente única de verdad para todos los componentes visuales del sistema.
 *
 * REGLA:
 *   Usa clases de este archivo. No inventes estilos propios.
 *   Claude añade nuevos componentes aquí cuando la pantalla lo requiere.
 *   Si necesitas un componente que no existe → reportar, no improvisar.
 *
 * Depende de: design-tokens.css (debe cargarse antes que este archivo)
 * Uso:
 *   <link rel="stylesheet" href="/shared/design-tokens.css">
 *   <link rel="stylesheet" href="/shared/components.css">
 */

/* ─── Fuente base ─────────────────────────────────────────────────────────
 * Inter NO se importa aquí (viola GOV-NEW-28 + Camino A regla §7).
 * Cada layout debe cargar Inter via <link> en el <head>:
 *   <link rel="preconnect" href="https://fonts.googleapis.com">
 *   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 *   <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Inter+Tight:wght@600;700;800&display=swap" rel="stylesheet">
 * El fallback `system-ui` mantiene legibilidad si falla la red. */
@import url('./components-utilities.css');

/* ─── Velandra wordmark · utility classes (v3 Bespoke + optical sizing) ───
 * Tipografía de marca grade Linear/Stripe. Inter Tight para hero (autoridad
 * + tracking compacto); Inter regular para tamaños chicos (respira mejor).
 *
 *   .wm-hero   · 40-64 px · Inter Tight 800 · -0.042em + ss01/ss02/cv11
 *   .wm-mid    · 22-32 px · Inter Tight 700 · -0.025em
 *   .wm-small  · 14-18 px · Inter 700        · -0.008em
 *
 * Lockup horizontal: <span class="brand-lockup"> (flex row + gap 14)
 * --------------------------------------------------------------------- */
.wm-hero {
  font-family: 'Inter Tight', 'Inter', system-ui, -apple-system, sans-serif;
  font-weight: 600;
  letter-spacing: -0.042em;
  font-feature-settings: "ss01", "ss02", "cv11";
  line-height: 1;
}
.wm-mid {
  font-family: 'Inter Tight', 'Inter', system-ui, -apple-system, sans-serif;
  font-weight: 600;
  letter-spacing: -0.025em;
  line-height: 1.05;
}
.wm-small {
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  font-weight: 600;
  letter-spacing: -0.008em;
  line-height: 1.1;
}

.brand-lockup {
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.brand-lockup--compact { gap: 8px; }
.brand-lockup--tight   { gap: 6px; }

*, *::before, *::after { box-sizing: border-box; }

/* ─── Foco de teclado accesible ─────────────────────────────────────────── */
*:focus-visible {
  outline: 2px solid var(--input-focus);
  outline-offset: 2px;
}

/* ─── Scrollbars (Sensación Nativa macOS) ───────────────────────────────── */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}
::-webkit-scrollbar-track {
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: var(--border-strong);
  border-radius: var(--radius-md);
}
::-webkit-scrollbar-thumb:hover {
  background: var(--text-tertiary);
}

/* TYPE-SCALE-ROOT-16PX-FIX-2026-06-02-01 — el rem base debe ser 16px para que la escala ADR-29
   {11,12,13,15,17,20,24} rinda su px DOCUMENTADO. `font-size: var(--text-base)` (0.9375rem) aplicado a
   `html` fijaba el root en 15px y encogía TODA la escala ~6.25% (body 15→14.06px · --text-sm 13→12.19px,
   medido vía getComputedStyle). Separado: html = rem base (16px) · body = --text-base (15px copy). */
html { font-size: 16px; }
body { font-size: var(--text-base); }
html, body {
  margin: 0;
  padding: 0;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  line-height: 1.5;
  background: var(--bg-page);
  color: var(--text-primary);
  -webkit-font-smoothing: antialiased;
  scrollbar-gutter: stable;
}

/* ─── Tipografía ────────────────────────────────────────────────────────── */
.text-xs   { font-size: var(--text-xs); }
.text-sm   { font-size: var(--text-sm); }
.text-base { font-size: var(--text-base); }
.text-lg   { font-size: var(--text-lg); }
.text-xl   { font-size: var(--text-xl); }
.text-2xl  { font-size: var(--text-2xl); }
.text-3xl  { font-size: 2rem; }

.font-normal  { font-weight: 400; }
.font-medium  { font-weight: 500; }
.font-semibold{ font-weight: 600; }
.font-bold    { font-weight: 600; }

.text-primary   { color: var(--text-primary); }
.text-secondary { color: var(--text-secondary); }
.text-muted     { color: var(--text-tertiary); }
.text-danger    { color: var(--danger); }
.text-success   { color: var(--success); }
.text-warning   { color: var(--warning); }
.text-accent    { color: var(--accent-light); }

/* ─── Botones ─────────────────────────────────────────────────────────────
 * Camino A · Linear-grade · 3 canónicos + aliases legacy.
 * Sólo `.btn-primary`, `.btn-secondary`, `.btn-ghost` son de uso nuevo.
 * Aliases (sign/clinical/gold/success/danger) sobreviven por compat
 * y todos colapsan visualmente a .btn-primary salvo .btn-danger semántico. */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 8px 16px;
  border-radius: var(--radius-sm);   /* 6px Linear */
  font-size: var(--text-sm);
  font-weight: 500;                  /* Linear weight, no 600 */
  font-family: inherit;
  cursor: pointer;
  border: 1px solid transparent;
  transition: background var(--transition), border-color var(--transition), color var(--transition);
  text-decoration: none;
  white-space: nowrap;
  user-select: none;
  min-height: 32px;
}
.btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

/* Primario — acción primaria. Accent fill. */
.btn-primary {
  background: var(--accent);
  color: var(--text-on-accent);
  border-color: var(--accent);
}
.btn-primary:hover:not(:disabled) {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
}

/* Secundario — acción alternativa. Border + bg-elevated. */
.btn-secondary {
  background: var(--bg-elevated);
  color: var(--text-primary);
  border-color: var(--border-strong);
}
.btn-secondary:hover:not(:disabled) {
  background: var(--bg-hover);
}

/* Ghost — sin fondo, hover sutil. */
.btn-ghost {
  background: transparent;
  color: var(--text-secondary);
  border-color: transparent;
}
.btn-ghost:hover:not(:disabled) {
  background: var(--bg-hover);
  color: var(--text-primary);
}

/* Modificador semántico — danger.
 * Uso: <button class="btn btn-primary is-danger"> o solo .btn-danger legacy. */
.btn.is-danger,
.btn-primary.is-danger,
.btn-danger {
  background: var(--danger);
  color: var(--text-on-accent);
  border-color: var(--danger);
}
.btn.is-danger:hover:not(:disabled),
.btn-primary.is-danger:hover:not(:disabled),
.btn-danger:hover:not(:disabled) {
  background: var(--danger);
  filter: brightness(1.08);
}

/* Aliases legacy — TODOS colapsan a primary. Mantener por compat HTML/JS. */
.btn-sign,
.btn-clinical,
.btn-success {
  background: var(--accent);
  color: var(--text-on-accent);
  border-color: var(--accent);
}
.btn-sign:hover:not(:disabled),
.btn-clinical:hover:not(:disabled),
.btn-success:hover:not(:disabled) {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
}

/* btn-gold — DEPRECATED. Sin usos en HTML/JS al 2026-05-20. Alias por seguridad. */
.btn-gold {
  background: var(--accent);
  color: var(--text-on-accent);
  border-color: var(--accent);
}
.btn-gold:hover:not(:disabled) {
  background: var(--accent-hover);
}

/* Tamaños */
.btn-sm { padding: 4px 10px; font-size: var(--text-xs); min-height: 26px; }
.btn-lg { padding: 10px 20px; font-size: var(--text-sm); min-height: 36px; }
.btn-block { width: 100%; }
.btn-icon { padding: 6px; width: 32px; height: 32px; min-height: 32px; }

/* ─── Cards ───────────────────────────────────────────────────────────────
 * Camino A · una sola .card. Sin sombra inline (1px border define elevación).
 * Aliases legacy (.card-glass, .card-elevated, .card-metric) colapsan al
 * mismo estilo base. `.card-elevated` mantiene su shadow para usos
 * floating (popovers, dropdowns) donde sí aplica. */
.card,
.card-glass,
.card-metric {
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);   /* 8px Linear */
  padding: 16px;
}

.card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--divider);
}

.card-title {
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--text-primary);
  margin: 0;
}

.card-subtitle {
  font-size: var(--text-sm);
  color: var(--text-secondary);
  margin: 4px 0 0;
}

/* Card elevated — única que carga sombra. Solo para floating layers
 * (popovers, dropdowns, command palette). NO usar como card de contenido. */
.card-elevated {
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 16px;
  box-shadow: var(--shadow-floating);
  transition: background var(--transition);
}

/* Card metric — KPIs con cifras grandes. Sin gradient decorativo. */
.card-metric-value {
  font-size: var(--text-3xl);
  font-weight: 600;                  /* Camino A: era 800 (extrabold) */
  color: var(--text-primary);
  line-height: 1;
  letter-spacing: -0.025em;
}
.card-metric-label {
  font-size: var(--text-sm);
  color: var(--text-secondary);
  margin-top: 4px;
}

/* Ambient background arc — para secciones hero (opacity muy baja) */
.ambient-arc {
  position: absolute;
  pointer-events: none;
  opacity: 0.04;
  color: var(--text-primary);
  z-index: var(--z-base);
}

/* ─── Badges / Pills ────────────────────────────────────────────────────── */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 10px;
  border-radius: var(--radius-md);
  font-size: var(--text-xs);
  font-weight: 600;
  line-height: 1;
}

.badge-success { background: var(--success-subtle); color: var(--success); }
.badge-warning { background: var(--warning-subtle); color: var(--warning); }
.badge-danger  { background: var(--danger-subtle);  color: var(--danger); }
.badge-info    { background: var(--info-subtle);    color: var(--info); }
.badge-in-progress  { background: var(--info-subtle);  color: var(--info); }
.badge-clinical{ background: var(--clinical-subtle); color: var(--clinical-light); }
.badge-neutral { background: var(--bg-hover);       color: var(--text-secondary); }
.badge-llegó, .badge-llego { background: var(--warning-subtle); color: var(--warning); }

/* Dot indicator */
.dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}
.dot-success { background: var(--success); }
.dot-warning { background: var(--warning); }
.dot-danger  { background: var(--danger); }
.dot-info    { background: var(--info); }

/* Indicador de confianza IA (para panel copiloto) */
.confidence-dot         { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.confidence-dot.high    { background: var(--success); }
.confidence-dot.mid     { background: var(--warning); }
.confidence-dot.low     { background: var(--danger); }

/* ─── Alertas Clínicas (panel izquierdo) ────────────────────────────────── */
.sidebar-logo-link {
  display: flex;
  align-items: center;
  gap: 12px;
  color: var(--text-primary);
  text-decoration: none;
  font-weight: 600;
  font-size: var(--text-lg);
  letter-spacing: -0.02em;
}

.velandra-sidebar-mark {
  flex-shrink: 0;
}
.sidebar-collapsed .velandra-sidebar-mark {
  margin: 0 auto;
}
.alert-clinical {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 8px;
  font-size: var(--text-sm);
  font-weight: 500;
  line-height: 1.5;
  letter-spacing: -0.01em;
}
.alert-clinical + .alert-clinical { margin-top: 8px; }

.alert-danger  { background: var(--danger-subtle);  color: var(--danger);  border-left: 3px solid var(--danger); }
.alert-warning { background: var(--warning-subtle); color: var(--warning); border-left: 3px solid var(--warning); }
.alert-info    { background: var(--info-subtle);    color: var(--info);    border-left: 3px solid var(--info); }
.alert-success { background: var(--success-subtle); color: var(--success); border-left: 3px solid var(--success); }

/* ─── Formularios ───────────────────────────────────────────────────────── */
.form-group {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 16px;
}

.form-label {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--text-secondary);
}

.form-input, .search-input, .admin-select {
  width: 100%;
  padding: 10px 12px;
  background: var(--bg-surface);
  border: 1px solid var(--input-border);
  border-radius: var(--radius-md);
  color: var(--text-primary);
  font-family: inherit;
  font-size: var(--text-sm);
  outline: none;
  transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition);
  box-shadow: var(--shadow-inset);
}
.form-input option,
.form-input optgroup,
.admin-select option,
.admin-select optgroup {
  background: var(--bg-surface);
  color: var(--text-primary);
}
.form-input::placeholder, .search-input::placeholder { color: var(--text-tertiary); }
.form-input:hover, .search-input:hover, .admin-select:hover {
  border-color: var(--border-strong);
}
.form-input:focus, .search-input:focus, .admin-select:focus {
  border-color: var(--text-primary);
  box-shadow: 0 0 0 1px var(--text-primary);
}
/* Select-specific overrides */
select.admin-select { padding: 8px 12px; width: auto; }
.form-input:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ── Checkboxes y Radios ── */
input[type="checkbox"],
input[type="radio"] {
  accent-color: var(--clinical);
  cursor: pointer;
  width: 16px;
  height: 16px;
  margin: 0;
  vertical-align: middle;
}
input[type="checkbox"]:disabled,
input[type="radio"]:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}


.form-textarea {
  resize: vertical;
  min-height: 120px;
}

.form-error {
  font-size: var(--text-xs);
  color: var(--danger);
  margin-top: 4px;
}

/* ─── Navegación Sidebar ────────────────────────────────────────────────── */
/*
 * Uso:
 *   <aside class="sidebar" id="sidebar">
 *     <div class="sidebar-header">...</div>
 *     <nav class="sidebar-nav">...</nav>
 *     <div class="sidebar-footer">...</div>
 *   </aside>
 *
 * Estado colapsado: agregar clase .sidebar-collapsed al elemento .sidebar
 * Toggle: document.getElementById('sidebar').classList.toggle('sidebar-collapsed')
 */

/* Prevenir "ghost menu" flash en carga de página.
   Regla general para TODO el shell, así nuevos badges / labels / iconos
   no reintroducen el bug cuando se agregan ítems al menú. */
html.sidebar-preload .sidebar,
html.sidebar-preload .sidebar::before,
html.sidebar-preload .sidebar::after,
html.sidebar-preload .sidebar *,
html.sidebar-preload .sidebar ~ .page-content,
html.sidebar-preload .sidebar + .page-content {
  transition: none !important;
  animation: none !important;
}

html.sidebar-pref-collapsed .sidebar {
  width: 64px;
}

html.sidebar-pref-collapsed .sidebar .nav-label,
html.sidebar-pref-collapsed .sidebar .nav-section-label,
html.sidebar-pref-collapsed .sidebar .sidebar-clinic-name,
html.sidebar-pref-collapsed .sidebar .sidebar-user-info {
  opacity: 0;
  pointer-events: none;
  width: 0;
  min-width: 0;
  flex: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

html.sidebar-pref-collapsed .sidebar .sidebar-header {
  padding: 16px 0;
  justify-content: center;
}

html.sidebar-pref-collapsed .sidebar .nav-item {
  padding: 10px 0;
  padding-right: 4px;
  justify-content: center;
  align-items: center;
}

html.sidebar-pref-collapsed .page-content {
  margin-left: 64px;
}

.sidebar {
  width: 240px;
  height: 100vh;
  background: var(--bg-surface);
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  position: fixed;
  top: 0;
  left: 0;
  z-index: var(--z-drawer);
  overflow: visible;
}

/* Estado colapsado — solo iconos (patrón Epic/athenahealth) */
.sidebar-collapsed {
  width: 64px;
}
.sidebar-collapsed .nav-label,
.sidebar-collapsed .nav-section-label,
.sidebar-collapsed .sidebar-clinic-name,
.sidebar-collapsed .sidebar-user-info {
  opacity: 0;
  pointer-events: none;
  width: 0;
  min-width: 0;
  flex: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
.sidebar-collapsed .sidebar-header {
  padding: 16px 0;
  justify-content: center;
}
.sidebar-collapsed .nav-item {
  padding: 10px 0;
  padding-right: 4px; /* Compensa el border-left: 3px para centrado matemático exacto */
  justify-content: center;
  align-items: center;
  gap: 0;
  overflow: visible; /* necesario para que ::after salga del sidebar */
}
.sidebar-collapsed .nav-badge {
  position: absolute;
  top: 4px;
  right: 14px;
  min-width: 14px;
  height: 14px;
  font-size: 11px;
  padding: 0 4px;
  border: 2px solid var(--bg-surface);
  opacity: 1;
  pointer-events: none;
}

/* ── InBasket sidebar badge — Opción C (benchmark 2026-04-09) ────────────────
   Técnica: position:absolute sobre .nav-item { position:relative }
   Expansión: número visible completo
   Colapsado: solo punto 8×8px (dot), sin número — patrón Slack/Figma
   Separador: border: 2px solid var(--bg-surface) — truco Discord premium
   El badge NUNCA vive en el flujo flex → ícono siempre centrado
─────────────────────────────────────────────────────────────────────────── */
#inbox-main-trigger { position: relative; }

/* Expanded state — pill con número completo, alineado a la derecha */
#inbox-main-trigger .inb-sidebar-badge {
  position: absolute !important;
  top: 50%;
  right: 18px;
  transform: translateY(-50%);
  /* El margin-left: auto ya no aplica — sacado del flujo */
  margin-left: 0 !important;
  /* Pill con número */
  background: var(--danger);
  color: var(--text-on-accent);
  border-radius: var(--radius-md);
  font-size: var(--text-micro);
  font-weight: 600;
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  display: none; /* JS lo activa con .visible */
  align-items: center;
  justify-content: center;
  letter-spacing: -0.3px;
  pointer-events: none;
  /* Truco Discord: borde separador que hace flotar el badge sobre el ícono */
  border: 2px solid var(--bg-surface);
  z-index: var(--z-raised);
  line-height: 1;
}
#inbox-main-trigger .inb-sidebar-badge.visible {
  display: flex !important;
}

/* Colapsado: convierte el pill en punto 8×8px — oculta el número */
.sidebar-collapsed #inbox-main-trigger .inb-sidebar-badge.visible {
  top: 6px;
  right: 6px;
  transform: none;
  width: 8px;
  height: 8px;
  min-width: 0;
  border-radius: 50%;
  padding: 0;
  font-size: 0; /* oculta el número, mantiene el color */
  border: 2px solid var(--bg-surface);
}
.sidebar-collapsed .sidebar-logo-link { color: var(--text-primary); text-decoration: none; user-select: none; -webkit-user-select: none; 
  display: none;
}
.sidebar-collapsed .sidebar-user {
  padding: 12px 0;
  justify-content: center;
  margin: 0;
  border-radius: 0;
}

/* ─── Q3 Ronda 10 — Tooltips en sidebar colapsado (CSS puro) ─── */
.sidebar-collapsed .nav-item::after {
  content: attr(title);
  position: absolute;
  left: calc(100% + 12px);
  top: 50%;
  transform: translateY(-50%);
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 4px 10px;
  font-size: var(--text-xs);
  font-weight: 500;
  color: var(--text-primary);
  white-space: nowrap;
  box-shadow: var(--shadow-md);
  pointer-events: none;
  z-index: var(--z-drawer);
  opacity: 0;
  transition: opacity var(--transition);
}
.sidebar-collapsed .nav-item:hover::after {
  opacity: 1;
  transition-delay: 0.2s;
}
/* El tooltip NO debe aparecer en el Inbox (inbox-main-trigger tiene su propio panel) */
.sidebar-collapsed #inbox-main-trigger::after {
  display: none;
}


.sidebar-collapsed .sidebar-toggle svg {
  transform: rotate(180deg);
}

/* Header: logo + toggle collapse */
.sidebar-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  border-bottom: 1px solid var(--divider);
  flex-shrink: 0;
  gap: 8px;
}

.sidebar-logo-link { user-select: none; -webkit-user-select: none; 
  display: flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  min-width: 0;
}

.sidebar-logo-link:active, .sidebar-logo-link:visited { color: var(--text-primary); }
.sidebar-clinic-name {
  font-family: var(--font-brand);
  font-size: var(--text-base);
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  transition: opacity var(--transition-fast), width var(--transition-base);
}

/* Botón de collapse */
.sidebar-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 6px;
  background: transparent;
  border: 1px solid var(--border);
  color: var(--text-tertiary);
  cursor: pointer;
  flex-shrink: 0;
  transition: background var(--transition-fast), color var(--transition-fast);
}
.sidebar-toggle:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}

.sidebar-toggle svg {
  transition: transform 0s ease 0.25s;
}

/* Nav scroll area */
.sidebar-nav {
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 8px 0;
  scrollbar-width: none;
}
.sidebar-nav::-webkit-scrollbar { display: none; }

/* Etiqueta de sección */
.nav-section-label {
  padding: 4px 20px;
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-tertiary);
  margin-top: 16px;
  margin-bottom: 4px;
  white-space: nowrap;
  overflow: hidden;
  transition: opacity var(--transition-fast);
}

/* Separador visual sutil entre Sistemas y Settings */
.nav-section-divider {
  display: block;
  height: 1px;
  background: var(--divider);
  margin: 8px 20px;
  opacity: 0.6;
}
/* En collapsed: el separador queda más estrecho */
.sidebar-collapsed .nav-section-divider {
  margin: 8px 8px;
}

/* Nav item */
.nav-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 20px;
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-secondary);
  text-decoration: none;
  cursor: pointer;
  border-radius: 0;
  transition: background var(--transition-fast), color var(--transition-fast);
  border-left: 3px solid transparent;
  background: none;
  width: 100%;
  text-align: left;
  white-space: nowrap;
  position: relative;
}
.nav-item:hover {
  background: var(--bg-hover);
  color: var(--text-primary);
}
.nav-item.active {
  background: var(--bg-hover);
  color: var(--text-primary);
  border-left: 3px solid var(--accent);
}
.nav-item .nav-icon {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}
.sidebar-nav-action {
  padding: 8px 12px 4px;
}

.nav-label {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: clip; /* Ensures text doesn't show ellipsis when fading out, just gets cleanly cut */
  transition: opacity var(--transition), width var(--transition), padding var(--transition);
}

/* Ocultar ícono externo en collapsed state — el tooltip ya tiene la info */
.sidebar-collapsed .nav-external-icon {
  display: none;
}

/* Badge de notificación en nav (ej: cola activa) */
.nav-badge {
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  background: var(--danger);
  color: var(--text-on-accent);
  border-radius: var(--radius-md);
  font-size: 0.6875rem;
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  transition: opacity var(--transition-fast);
}

/* BADGE-01 — Cola de turnos: badge INFO (azul) — patrón Epic EHR / Linear
   Semántica: ROJO = clínico/personal — firmatura urgente (InBasket)
              AZUL = operacional/equipo — pacientes esperando en sala
   El médico distingue instantáneamente sin leer el label. */
#nav-badge-cola {
  background: var(--info) !important;
}

/* Badges del sidebar fuera del flujo para que su hidratación no mueva labels. */
.nav-badge,
.nav-badge-info {
  position: absolute;
  top: 50%;
  right: 18px;
  transform: translateY(-50%);
  margin-left: 0;
  pointer-events: none;
}

/* Footer: info de usuario + logout */
.sidebar-footer {
  border-top: 1px solid var(--divider);
  padding: 12px 20px;
  flex-shrink: 0;
}

.sidebar-collapsed .sidebar-footer {
  padding: 12px 0;
  display: flex;
  justify-content: center;
}

.sidebar-collapsed .sidebar-logout-icon {
  display: none !important;
}

/* User Menu Wrapper & Dropdown */
.user-menu-wrapper {
  position: relative;
  width: 100%;
  display: flex;
  justify-content: center;
}

.sidebar-collapsed .user-menu-wrapper {
  width: auto;
}

.user-dropdown-menu {
  position: absolute;
  bottom: calc(100% + 10px);
  left: 0;
  width: 100%;
  min-width: 180px;
  background: var(--bg-surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: var(--shadow-lg);
  padding: 6px;
  opacity: 0;
  pointer-events: none;
  transform: translateY(10px);
  transition: opacity var(--transition), transform var(--transition);
  z-index: var(--z-dropdown);
}

.user-dropdown-menu.show {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0);
}

.dropdown-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8px 12px;
  background: none;
  border: none;
  border-radius: 6px;
  color: var(--text-primary);
  font-size: var(--text-sm);
  text-align: left;
  cursor: pointer;
  transition: background var(--transition);
  text-decoration: none;
}
.dropdown-item:hover {
  background: var(--bg-hover);
}

.sidebar-user {
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  border-radius: 8px;
  padding: 8px;
  margin: -8px;
  transition: background var(--transition-fast);
  text-decoration: none;
  width: 100%;
}

.sidebar-user:hover { background: var(--bg-hover); }

.sidebar-avatar {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--accent-subtle);
  border: 1px solid var(--border-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--accent-light);
  flex-shrink: 0;
}

.sidebar-user-info {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  transition: opacity var(--transition-fast);
}

.sidebar-user-name {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  transition: opacity var(--transition-fast);
}

.sidebar-user-role {
  font-size: 0.6875rem;
  color: var(--text-tertiary);
  white-space: nowrap;
  transition: opacity var(--transition-fast);
}

/* ─── Tablas ────────────────────────────────────────────────────────────── */
.table-wrapper, .table-wrap {
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow-x: auto;
  width: 100%;
}

.table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

.table thead th {
  background: var(--bg-surface);
  color: var(--text-tertiary);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 10px 16px;
  text-align: left;
  border-bottom: 1px solid var(--border);
}

.table tbody td {
  padding: 12px 16px;
  color: var(--text-primary);
  border-bottom: 1px solid var(--divider);
  vertical-align: middle;
  transition: background var(--transition-fast);
}

.table tbody tr:last-child td { border-bottom: none; }

.table tbody tr:hover td { background: var(--bg-hover); }

/* ─── Modales ───────────────────────────────────────────────────────────── */
.modal-overlay,
.modal-backdrop {
  position: fixed;
  inset: 0;
  background: var(--bg-overlay);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  align-items: center;
  justify-content: center;
  z-index: var(--z-modal);
  padding: 20px;
  overflow-y: auto;
  display: none;  /* Oculto por defecto — SIEMPRE */
}

/* Mostrar cuando se añade .open o .visible (ambas convenciones del codebase) */
.modal-overlay.open,
.modal-overlay.visible,
.modal-overlay.active,
.modal-backdrop.open,
.modal-backdrop.visible {
  display: flex;
  animation: fadeIn 0.2s ease;
}

.modal {
  background: var(--bg-elevated);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  padding: 28px;
  width: 100%;
  max-width: 540px;
  max-height: 90vh;
  overflow-y: auto;
  box-shadow: var(--shadow-floating);
  animation: slideUp var(--transition);
}
#modal-detail .modal { min-height: 75vh; }

.modal-lg { max-width: 720px; }
.modal-xl { max-width: 900px; }

.modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 20px;
}

.modal-title {
  font-size: var(--text-lg);
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--text-primary);
}

.modal-footer {
  display: flex;
  justify-content: flex-end;
  flex-wrap: wrap; /* WRAP MODAL FOOTER */
  gap: 10px;
  margin-top: 24px;
  padding-top: 16px;
  border-top: 1px solid var(--divider);
}

/* ─── AI Consent modal (staff · demo-gate D13) ──────────────────────────── */
.ai-consent { max-width: 480px; }
.ai-consent__head { align-items: flex-start; }
.ai-consent__eyebrow {
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 4px;
}
.ai-consent__x { padding: 4px; line-height: 0; }
.ai-consent__desc {
  margin: 0 0 16px;
  font-size: var(--text-sm);
  color: var(--text-secondary);
  line-height: 1.5;
}
.ai-consent__list { display: flex; flex-direction: column; gap: 14px; }
.ai-consent__item { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; }
.ai-consent__check {
  margin-top: 3px;
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  accent-color: var(--accent);
  cursor: pointer;
}
.ai-consent__item-copy { display: flex; flex-direction: column; gap: 2px; }
.ai-consent__item-title { font-size: var(--text-sm); font-weight: 600; color: var(--text-primary); }
.ai-consent__item-desc { font-size: var(--text-xs); color: var(--text-secondary); line-height: 1.45; }
.ai-consent__captor {
  margin-top: 16px;
  padding: 10px 12px;
  background: var(--accent-subtle);
  border-radius: var(--radius-md);
  font-size: var(--text-xs);
  color: var(--text-secondary);
  line-height: 1.45;
}
.ai-consent__status { margin-top: 10px; min-height: 18px; font-size: var(--text-sm); color: var(--text-secondary); }
.ai-consent__status.is-error { color: var(--danger); }
.ai-consent__status.is-success { color: var(--success); }

/* Botón secundario del Peek (variante ghost · usado por el trigger de consent) */
.patient-peek__cta--ghost {
  margin-top: 8px;
  background: transparent;
  border-color: var(--border-strong);
  color: var(--text-secondary);
  cursor: pointer;
}
.patient-peek__cta--ghost:hover { background: var(--accent-subtle); border-color: var(--accent); color: var(--text-primary); }

/* ─── Indicador de grabación ────────────────────────────────────────────── */
.recording-indicator {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 12px;
  border-radius: var(--radius-md);
  background: var(--danger-subtle);
  border: 1px solid var(--danger);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--danger);
}

.rec-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--danger);
  animation: pulse-rec 1.4s ease-in-out infinite;
}

/* --- Velandra Learning Badge ---------------------------------------------
 * @component VelandraLearningBadge
 * @description Shared personal learning badge for doctor-specific AI
 * confidence in consultation, dashboard, and intelligence surfaces.
 * @api
 *   mode: "compact" | "full" via data-mode
 *   state: "loading" | "learning" | "ready" | "error" via data-learning-state
 *   stats: Array<{ key: "encounters" | "precision" | "delta", value, label }>
 *     via [data-learning-value] and [data-learning-label]
 *   meta: string via .velandra-learning-badge__meta
 * @states
 *   loading: numeric cells render skeleton shimmer
 *   learning: shows only the meta/baseline copy while the model learns
 *   ready: renders the 3 personalized stats
 *   error: hidden, avoiding fake confidence numbers
 * @example
 *   <div class="velandra-learning-badge" data-mode="compact" data-learning-state="loading" aria-live="polite">
 *     <div class="velandra-learning-badge__head">Velandra aprende contigo</div>
 *     <div class="velandra-learning-badge__stats">
 *       <div class="velandra-learning-badge__stat">
 *         <span class="velandra-learning-badge__num" data-learning-value="encounters"></span>
 *         <span class="velandra-learning-badge__lbl" data-learning-label="encounters"></span>
 *       </div>
 *     </div>
 *     <div class="velandra-learning-badge__meta">Cargando aprendizaje personalizado...</div>
 *   </div>
 */
.velandra-learning-badge {
  display: grid;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3) var(--space-3);
  color: var(--text-primary);
}

.velandra-learning-badge[hidden],
.velandra-learning-badge[data-learning-state='error'],
.velandra-learning-badge[data-state='error'] {
  display: none;
}

.velandra-learning-badge__head {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  padding-block: 0 var(--space-1);
  color: var(--accent);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  line-height: 1.25;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.velandra-learning-badge__head svg,
.velandra-learning-badge__icon {
  flex: 0 0 auto;
  width: 0.75rem;
  height: 0.75rem;
  color: var(--accent);
  stroke: currentColor;
}

.velandra-learning-badge__stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-1);
  min-width: 0;
  padding: var(--space-2);
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg-hover);
}

.velandra-learning-badge__stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  min-width: 0;
  padding: var(--space-1) 4px;
  text-align: center;
}

.velandra-learning-badge__stat + .velandra-learning-badge__stat {
  border-left: 1px solid var(--border);
}

.velandra-learning-badge__num {
  color: var(--text-primary);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

.velandra-learning-badge__lbl {
  color: var(--text-tertiary);
  font-size: var(--text-tiny);
  line-height: 1.2;
  letter-spacing: 0;
}

.velandra-learning-badge[data-learning-state='loading'] .velandra-learning-badge__num,
.velandra-learning-badge[data-learning-state='loading'] .velandra-learning-badge__lbl,
.velandra-learning-badge[data-state='loading'] .velandra-learning-badge__num,
.velandra-learning-badge[data-state='loading'] .velandra-learning-badge__lbl {
  display: block;
  overflow: hidden;
  border-radius: var(--radius-pill);
  background: var(--bg-elevated);
  background-image: linear-gradient(
    90deg,
    color-mix(in srgb, var(--text-tertiary) 5%, transparent) 0%,
    color-mix(in srgb, var(--text-tertiary) 17%, transparent) 45%,
    color-mix(in srgb, var(--text-tertiary) 5%, transparent) 90%
  );
  background-size: 220% 100%;
  color: transparent;
  animation: velandra-skeleton-shimmer 1200ms linear infinite;
}

.velandra-learning-badge[data-learning-state='loading'] .velandra-learning-badge__num,
.velandra-learning-badge[data-state='loading'] .velandra-learning-badge__num {
  width: 2.125rem;
  height: 0.9375rem;
}

.velandra-learning-badge[data-learning-state='loading'] .velandra-learning-badge__lbl,
.velandra-learning-badge[data-state='loading'] .velandra-learning-badge__lbl {
  width: 3rem;
  height: 0.5625rem;
}

.velandra-learning-badge[data-learning-state='learning'] .velandra-learning-badge__stats,
.velandra-learning-badge[data-learning-state='empty'] .velandra-learning-badge__stats,
.velandra-learning-badge[data-state='baseline'] .velandra-learning-badge__stats,
.velandra-learning-badge[data-state='empty'] .velandra-learning-badge__stats {
  display: none;
}

.velandra-learning-badge__delta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
}

.velandra-learning-badge__delta svg {
  width: 0.625rem;
  height: 0.625rem;
}

.velandra-learning-badge__meta {
  min-width: 0;
  padding-inline: 2px;
  color: var(--text-tertiary);
  font-size: var(--text-xs);
  line-height: 1.5;
}

.velandra-learning-badge[data-mode='full'] {
  padding: var(--card-padding-compact);
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg-surface);
  box-shadow: var(--shadow-sm);
}

.velandra-learning-badge[data-mode='full'] .velandra-learning-badge__stats {
  background: var(--bg-elevated);
}

@media (prefers-reduced-motion: reduce) {
  .velandra-learning-badge[data-learning-state='loading'] .velandra-learning-badge__num,
  .velandra-learning-badge[data-learning-state='loading'] .velandra-learning-badge__lbl,
  .velandra-learning-badge[data-state='loading'] .velandra-learning-badge__num,
  .velandra-learning-badge[data-state='loading'] .velandra-learning-badge__lbl {
    animation: none;
  }
}

/* --- Velandra Outcomes Inline --------------------------------------------
 * @component VelandraOutcomesInline
 * @description Shared aggregated outcomes block for similar-patient treatment
 * response rates in consultation, chart hover previews, and future clinical
 * evidence surfaces.
 * @api
 *   state: "idle" | "loading" | "empty" | "insufficient" | "happy" | "error"
 *     via data-state
 *   treatments: Array<{ name: string, dose?: string, improvement: 0-100, n: number }>
 *     via .velandra-outcomes-inline__row
 *   sampleSize: number via .velandra-outcomes-inline__meta
 *   windowMonths: number via .velandra-outcomes-inline__meta
 *   improvement: percentage via --ar-bar-w on .velandra-outcomes-inline__bar > span
 *   foot: string via .velandra-outcomes-inline__foot
 * @states
 *   loading: skeleton row plus pending copy
 *   empty: waits for real patient demographics
 *   insufficient: shows sample-size copy without bars
 *   happy: renders up to three treatment rows
 *   error: warns without blocking the clinical workflow
 * @example
 *   <div class="velandra-outcomes-inline" data-state="happy" aria-live="polite">
 *     <div class="velandra-outcomes-inline__head">
 *       <svg class="velandra-outcomes-inline__icon" aria-hidden="true"></svg>
 *       Outcomes en pacientes similares
 *       <span class="velandra-outcomes-inline__meta">n=312 · 12 m</span>
 *     </div>
 *   </div>
 */
.velandra-outcomes-inline {
  display: grid;
  gap: var(--space-2);
  margin-block-start: var(--space-3);
  padding: var(--space-3);
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg-hover);
  color: var(--text-primary);
}

.velandra-outcomes-inline[hidden] {
  display: none;
}

.velandra-outcomes-inline__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  line-height: 1.25;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.velandra-outcomes-inline__head svg,
.velandra-outcomes-inline__icon {
  flex: 0 0 auto;
  width: 0.75rem;
  height: 0.75rem;
  color: var(--accent);
  stroke: currentColor;
}

.velandra-outcomes-inline__meta {
  margin-inline-start: auto;
  color: var(--text-tertiary);
  font-weight: var(--weight-medium);
  font-variant-numeric: tabular-nums;
  line-height: 1.25;
  text-transform: none;
  letter-spacing: 0;
  white-space: nowrap;
}

.velandra-outcomes-inline__list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  min-width: 0;
}

.velandra-outcomes-inline__row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 4.375rem 2rem;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  color: var(--text-primary);
  font-size: var(--text-xs);
  line-height: 1.35;
}

.velandra-outcomes-inline__tx {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.velandra-outcomes-inline__tx small {
  margin-inline-start: 0.25rem;
  color: var(--text-tertiary);
  font-size: var(--text-tiny);
}

.velandra-outcomes-inline__bar {
  display: block;
  height: 0.25rem;
  overflow: hidden;
  border-radius: var(--radius-pill);
  background: var(--border);
}

.velandra-outcomes-inline__bar > span {
  display: block;
  width: var(--ar-bar-w, 0%);
  height: 100%;
  border-radius: inherit;
  background: var(--accent);
  transition: width var(--transition);
}

.velandra-outcomes-inline__pct {
  color: var(--text-primary);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  font-variant-numeric: tabular-nums;
  line-height: 1.25;
  text-align: right;
}

.velandra-outcomes-inline__foot {
  padding-block-start: var(--space-2);
  border-block-start: 1px solid var(--border);
  color: var(--text-tertiary);
  font-size: var(--text-xs);
  line-height: 1.45;
}

.velandra-outcomes-inline__state {
  padding-block: var(--space-2) 2px;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  line-height: 1.45;
}

.velandra-outcomes-inline[data-state='insufficient'] .velandra-outcomes-inline__state {
  color: var(--text-tertiary);
}

.velandra-outcomes-inline[data-state='error'] .velandra-outcomes-inline__state {
  color: var(--warning);
}

.velandra-outcomes-inline__skeleton {
  display: block;
  height: 0.5rem;
  overflow: hidden;
  border-radius: var(--radius-pill);
  background: var(--bg-elevated);
  background-image: linear-gradient(
    90deg,
    color-mix(in srgb, var(--text-tertiary) 5%, transparent) 0%,
    color-mix(in srgb, var(--text-tertiary) 17%, transparent) 45%,
    color-mix(in srgb, var(--text-tertiary) 5%, transparent) 90%
  );
  background-size: 220% 100%;
  animation: velandra-skeleton-shimmer 1200ms linear infinite;
}

@media (prefers-reduced-motion: reduce) {
  .velandra-outcomes-inline__bar > span {
    transition: none;
  }

  .velandra-outcomes-inline__skeleton {
    animation: none;
  }
}

@media (max-width: 520px) {
  .velandra-outcomes-inline__row {
    grid-template-columns: minmax(0, 1fr) 3.5rem 1.75rem;
  }
}

/* --- Velandra Dx Card ------------------------------------------------------
 * @component VelandraDxCard
 * @description Shared diagnosis suggestion card with linked evidence, model
 * confidence, clinician actions, and accepted/rejected state affordances.
 * @api
 *   id: string via data-dx-id
 *   state: "suggested" | "differential" | "accepted" | "rejected" via data-state
 *   source: string via data-dx-source
 *   name: string via data-dx-name
 *   code: CIE-10 string via data-dx-code
 *   confidence: number 0-100 via --ar-conf-w and data-dx-confidence-pct
 *   confidenceLevel: "high" | "medium" | "low" via data-level
 *   evidence: linked quote/timestamp via data-dx-evidence, data-dx-quote
 *   reasoning: optional paragraph via data-dx-reasoning
 *   actions: accept/modify/reject/undo via data-dx-action
 * @events
 *   velandra-dx-card:accept, velandra-dx-card:modify, velandra-dx-card:reject,
 *   velandra-dx-card:undo, velandra-dx-card:timestamp-click
 * @example
 *   <article class="velandra-dx-card" data-state="suggested" data-dx-id="g43-0">
 *     <header class="velandra-dx-card__top">
 *       <span class="velandra-dx-card__source">Principal</span>
 *       <span class="velandra-dx-card__confidence" data-level="high">
 *         <span class="velandra-dx-card__confidence-bar" style="--ar-conf-w: 87%"><span></span></span>
 *         <span class="velandra-dx-card__confidence-pct">87%</span>
 *       </span>
 *     </header>
 *   </article>
 */
.velandra-dx-card {
  display: grid;
  gap: var(--space-3);
  padding: var(--card-padding-compact);
  border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border));
  border-radius: 8px;
  background: var(--bg-surface);
  box-shadow: var(--shadow-sm), inset 3px 0 0 color-mix(in srgb, var(--accent) 62%, transparent);
  color: var(--text-primary);
}

.velandra-dx-card[hidden],
.velandra-dx-card[data-state='rejected'] {
  display: none;
}

.velandra-dx-card__top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
  min-width: 0;
}

.velandra-dx-card__source {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  line-height: 1.35;
}

.velandra-dx-card__source-icon {
  width: 0.65rem;
  height: 0.65rem;
  border-radius: 999px;
  background: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent);
}

.velandra-dx-card__confidence {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  flex: 0 0 auto;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  line-height: 1;
}

.velandra-dx-card__confidence-bar {
  --ar-conf-w: 0%;
  display: block;
  width: 4.5rem;
  height: 0.45rem;
  overflow: hidden;
  border-radius: 999px;
  background: var(--bg-hover);
}

.velandra-dx-card__confidence-bar > span {
  display: block;
  width: var(--ar-conf-w);
  height: 100%;
  border-radius: inherit;
  background: var(--success);
  transition: width var(--transition);
}

.velandra-dx-card__confidence[data-level='medium'] .velandra-dx-card__confidence-bar > span {
  background: var(--warning);
}

.velandra-dx-card__confidence[data-level='low'] .velandra-dx-card__confidence-bar > span {
  background: var(--danger);
}

.velandra-dx-card__confidence-pct {
  min-width: 2.25rem;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.velandra-dx-card__conf-info {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.35rem;
  height: 1.35rem;
  border: 1px solid var(--border);
  border-radius: 999px;
  color: var(--text-tertiary);
  cursor: help;
}

.velandra-dx-card__name-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
  min-width: 0;
}

.velandra-dx-card__name {
  min-width: 0;
  margin: 0;
  color: var(--text-primary);
  font-size: var(--text-base);
  font-weight: var(--weight-semibold);
  line-height: 1.35;
  overflow-wrap: anywhere;
}

.velandra-dx-card__code {
  flex: 0 0 auto;
  padding: 0.2rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-pill);
  color: var(--text-secondary);
  background: var(--bg-subtle);
  font-size: var(--text-tiny);
  font-weight: var(--weight-bold);
  line-height: 1.2;
}

.velandra-dx-card__evidence,
.velandra-dx-card__reasoning {
  display: grid;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: color-mix(in srgb, var(--bg-elevated) 74%, transparent);
}

.velandra-dx-card__evidence-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
}

.velandra-dx-card__evidence-label {
  color: var(--text-tertiary);
  font-size: var(--text-tiny);
  font-weight: var(--weight-bold);
  line-height: 1.25;
}

.velandra-dx-card__timestamp {
  color: var(--accent-light);
  font-size: var(--text-tiny);
  font-weight: var(--weight-semibold);
  line-height: 1.25;
  text-decoration: none;
  cursor: pointer;
}

.velandra-dx-card__timestamp:hover {
  color: var(--accent-hover);
  text-decoration: underline;
}

.velandra-dx-card__quote,
.velandra-dx-card__reasoning-text {
  margin: 0;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  line-height: 1.45;
}

.velandra-dx-card__actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.velandra-dx-card__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2rem;
  padding: 0.4rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg-surface);
  color: var(--text-secondary);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
}

.velandra-dx-card__btn--accept {
  border-color: color-mix(in srgb, var(--success) 70%, var(--border));
  background: var(--success-subtle);
  color: var(--success);
}

.velandra-dx-card__btn--reject {
  border-color: color-mix(in srgb, var(--danger) 58%, var(--border));
  color: var(--danger);
}

.velandra-dx-card__accepted-bar {
  display: none;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  border: 1px solid color-mix(in srgb, var(--success) 58%, var(--border));
  border-radius: var(--radius-md);
  background: var(--success-subtle);
  color: var(--success);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
}

.velandra-dx-card__accepted-check {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.35rem;
  height: 1.35rem;
  border-radius: 999px;
  background: var(--success);
  color: var(--text-on-accent);
  font-size: var(--text-xs);
}

.velandra-dx-card__accepted-undo {
  color: var(--success);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  cursor: pointer;
}

.velandra-dx-card[data-state='differential'] {
  border-color: color-mix(in srgb, var(--warning) 55%, var(--border));
  box-shadow: var(--shadow-sm), inset 3px 0 0 var(--warning);
}

.velandra-dx-card[data-state='differential'] .velandra-dx-card__source-icon {
  background: var(--warning);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--warning) 18%, transparent);
}

.velandra-dx-card[data-state='accepted'] .velandra-dx-card__top,
.velandra-dx-card[data-state='accepted'] .velandra-dx-card__name-row,
.velandra-dx-card[data-state='accepted'] .velandra-dx-card__evidence,
.velandra-dx-card[data-state='accepted'] .velandra-dx-card__reasoning,
.velandra-dx-card[data-state='accepted'] .velandra-dx-card__actions {
  display: none;
}

.velandra-dx-card[data-state='accepted'] .velandra-dx-card__accepted-bar {
  display: flex;
}

@media (max-width: 640px) {
  .velandra-dx-card__top,
  .velandra-dx-card__name-row,
  .velandra-dx-card__evidence-header {
    flex-direction: column;
    align-items: stretch;
  }

  .velandra-dx-card__confidence,
  .velandra-dx-card__actions,
  .velandra-dx-card__btn {
    width: 100%;
  }
}

/* --- Velandra Confidence Popover ------------------------------------------
 * @component VelandraConfidencePopover
 * @description Shared calibration popover for AI confidence scores across
 * diagnosis, medication, orders, anamnesis, and agent recommendations.
 * @api
 *   id: string via id/data-confidence-popover-id
 *   label: string via data-confidence-label
 *   score: number 0-100 via data-confidence-score
 *   factors: Array<{ tone: "positive" | "negative", delta: string, label: string }>
 *     via .velandra-confidence-popover__item[data-tone]
 *   source: string via data-confidence-source
 *   open: boolean via hidden/aria-hidden
 *   placement: "top" | "bottom" | "right" via data-placement
 * @events
 *   velandra-confidence-popover:open, velandra-confidence-popover:close
 * @keyboard
 *   Trigger uses aria-haspopup="dialog" and aria-controls. Popover root is
 *   focusable with tabindex="-1"; close affordance is role="button" tabindex="0".
 * @example
 *   <div class="velandra-confidence-popover" role="dialog" tabindex="-1">
 *     <header class="velandra-confidence-popover__head">
 *       <span class="velandra-confidence-popover__label">Confianza del modelo</span>
 *       <strong class="velandra-confidence-popover__score">87%</strong>
 *     </header>
 *   </div>
 */
.velandra-confidence-popover {
  position: absolute;
  inset-block-start: calc(100% + var(--space-2));
  inset-inline-end: 0;
  z-index: var(--z-dropdown);
  display: grid;
  gap: var(--space-3);
  width: min(20rem, calc(100vw - var(--space-6)));
  padding: var(--card-padding-compact);
  border: 1px solid var(--border-strong);
  border-radius: 8px;
  background: var(--bg-elevated);
  color: var(--text-primary);
  box-shadow: var(--shadow-lg);
}

.velandra-confidence-popover[hidden] {
  display: none;
}

.velandra-confidence-popover[data-placement='top'] {
  inset-block-start: auto;
  inset-block-end: calc(100% + var(--space-2));
}

.velandra-confidence-popover[data-placement='right'] {
  inset-block-start: 0;
  inset-inline-start: calc(100% + var(--space-2));
  inset-inline-end: auto;
}

.velandra-confidence-popover:focus-visible,
.velandra-confidence-popover__close:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.velandra-confidence-popover__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
  min-width: 0;
}

.velandra-confidence-popover__title {
  display: grid;
  gap: var(--space-1);
  min-width: 0;
}

.velandra-confidence-popover__label {
  color: var(--text-primary);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  line-height: 1.25;
}

.velandra-confidence-popover__meta {
  color: var(--text-tertiary);
  font-size: var(--text-tiny);
  font-weight: var(--weight-semibold);
  line-height: 1.3;
}

.velandra-confidence-popover__score {
  flex: 0 0 auto;
  padding: 0.25rem 0.55rem;
  border: 1px solid color-mix(in srgb, var(--accent) 50%, var(--border));
  border-radius: var(--radius-pill);
  background: var(--accent-subtle);
  color: var(--text-primary);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}

.velandra-confidence-popover__list {
  display: grid;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.velandra-confidence-popover__item {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: var(--space-2);
  align-items: start;
  min-width: 0;
  padding: var(--space-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: color-mix(in srgb, var(--bg-surface) 78%, transparent);
}

.velandra-confidence-popover__delta {
  min-width: 2.75rem;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  line-height: 1.3;
  font-variant-numeric: tabular-nums;
}

.velandra-confidence-popover__text {
  min-width: 0;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  line-height: 1.4;
}

.velandra-confidence-popover__item[data-tone='positive'] {
  border-color: color-mix(in srgb, var(--success) 46%, var(--border));
  background: color-mix(in srgb, var(--success-subtle) 55%, var(--bg-surface));
}

.velandra-confidence-popover__item[data-tone='positive'] .velandra-confidence-popover__delta {
  color: var(--success);
}

.velandra-confidence-popover__item[data-tone='negative'] {
  border-color: color-mix(in srgb, var(--warning) 50%, var(--border));
  background: color-mix(in srgb, var(--warning-subtle) 58%, var(--bg-surface));
}

.velandra-confidence-popover__item[data-tone='negative'] .velandra-confidence-popover__delta {
  color: var(--warning);
}

.velandra-confidence-popover__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  min-width: 0;
  padding-block-start: var(--space-2);
  border-top: 1px solid var(--border);
}

.velandra-confidence-popover__source {
  min-width: 0;
  color: var(--text-tertiary);
  font-size: var(--text-tiny);
  line-height: 1.35;
}

.velandra-confidence-popover__close {
  flex: 0 0 auto;
  color: var(--accent-light);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  line-height: 1.25;
  cursor: pointer;
}

@media (max-width: 640px) {
  .velandra-confidence-popover,
  .velandra-confidence-popover[data-placement='right'] {
    position: fixed;
    inset: auto var(--space-3) var(--space-3) var(--space-3);
    width: auto;
  }
}

/* --- Velandra Lifecycle Inline --------------------------------------------
 * @component VelandraLifecycleInline
 * @description Shared lifecycle pill rail for encounter, appointment, queue,
 * and dashboard progress states.
 * @api
 *   stages: Array<{ key: string, label: string, ariaLabel: string }>
 *   currentStage: "arrived" | "in-consult" | "documenting" | "signed"
 *     via data-stage on .velandra-lifecycle-inline
 *   orientation: "horizontal" | "vertical" via data-orientation
 *   density: "compact" | "default" via data-density
 * @events
 *   velandra-lifecycle-inline:stage-click (optional for interactive hosts)
 * @example
 *   <nav class="velandra-lifecycle-inline" data-stage="documenting" data-orientation="horizontal">
 *     <ol class="velandra-lifecycle-inline__list">
 *       <li class="velandra-lifecycle-inline__stage" data-stage="arrived">Llego</li>
 *       <li class="velandra-lifecycle-inline__stage" data-stage="documenting">Documentando</li>
 *     </ol>
 *   </nav>
 */
.velandra-lifecycle-inline {
  --velandra-lifecycle-active: var(--accent);
  --velandra-lifecycle-complete: var(--success);
  display: block;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  line-height: 1.25;
}

.velandra-lifecycle-inline[hidden] {
  display: none;
}

.velandra-lifecycle-inline__list {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

.velandra-lifecycle-inline__stage {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  min-height: 1.875rem;
  padding: 0.35rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-pill);
  background: var(--bg-surface);
  color: var(--text-secondary);
  font-size: inherit;
  font-weight: var(--weight-semibold);
  white-space: nowrap;
  transition: background var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition);
}

.velandra-lifecycle-inline__stage::before {
  content: '';
  flex: 0 0 auto;
  width: 0.45rem;
  height: 0.45rem;
  border-radius: 999px;
  background: var(--border-strong);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--border-strong) 16%, transparent);
  transition: background var(--transition), box-shadow var(--transition);
}

.velandra-lifecycle-inline__label {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.velandra-lifecycle-inline__connector {
  display: block;
  flex: 0 0 1rem;
  height: 1px;
  background: var(--border);
  transition: background var(--transition);
}

.velandra-lifecycle-inline__connector[data-state='complete'] {
  background: var(--success);
}

.velandra-lifecycle-inline__stage[data-state='complete'] {
  border-color: color-mix(in srgb, var(--velandra-lifecycle-complete) 52%, var(--border));
  background: var(--success-subtle);
  color: var(--success);
}

.velandra-lifecycle-inline__stage[data-state='complete']::before {
  background: var(--velandra-lifecycle-complete);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--velandra-lifecycle-complete) 18%, transparent);
}

.velandra-lifecycle-inline[data-stage='arrived'] .velandra-lifecycle-inline__stage[data-stage='arrived'],
.velandra-lifecycle-inline[data-stage='in-consult'] .velandra-lifecycle-inline__stage[data-stage='in-consult'],
.velandra-lifecycle-inline[data-stage='documenting'] .velandra-lifecycle-inline__stage[data-stage='documenting'],
.velandra-lifecycle-inline[data-stage='signed'] .velandra-lifecycle-inline__stage[data-stage='signed'] {
  border-color: color-mix(in srgb, var(--velandra-lifecycle-active) 70%, var(--border));
  background: var(--accent-subtle);
  color: var(--text-primary);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--velandra-lifecycle-active) 18%, transparent);
}

.velandra-lifecycle-inline[data-stage='arrived'] .velandra-lifecycle-inline__stage[data-stage='arrived']::before,
.velandra-lifecycle-inline[data-stage='in-consult'] .velandra-lifecycle-inline__stage[data-stage='in-consult']::before,
.velandra-lifecycle-inline[data-stage='documenting'] .velandra-lifecycle-inline__stage[data-stage='documenting']::before,
.velandra-lifecycle-inline[data-stage='signed'] .velandra-lifecycle-inline__stage[data-stage='signed']::before {
  background: var(--velandra-lifecycle-active);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--velandra-lifecycle-active) 18%, transparent);
}

.velandra-lifecycle-inline[data-orientation='vertical'] .velandra-lifecycle-inline__list {
  flex-direction: column;
  align-items: stretch;
}

.velandra-lifecycle-inline[data-orientation='vertical'] .velandra-lifecycle-inline__stage {
  width: 100%;
}

.velandra-lifecycle-inline[data-orientation='vertical'] .velandra-lifecycle-inline__connector {
  width: 1px;
  height: var(--space-3);
  margin-inline-start: 0.875rem;
}

.velandra-lifecycle-inline[data-density='compact'] {
  font-size: var(--text-tiny);
}

.velandra-lifecycle-inline[data-density='compact'] .velandra-lifecycle-inline__stage {
  min-height: 1.5rem;
  padding: 0.25rem 0.55rem;
}

@media (max-width: 640px) {
  .velandra-lifecycle-inline__list {
    flex-wrap: wrap;
  }

  .velandra-lifecycle-inline__connector {
    display: none;
  }

  .velandra-lifecycle-inline__stage {
    flex: 1 1 8rem;
    justify-content: center;
  }
}

/* --- Velandra Live Lane -----------------------------------------------------
 * @component VelandraLiveLane
 * @description Shared real-time lane for transcript, diagnosis, CDS, queue,
 * agent activity, and dashboard event previews.
 * @api
 *   lane: "transcript" | "diagnosis" | "cds" | string via data-lane
 *   priority: "info" | "warning" | "critical" via data-priority
 *   state: "idle" | "active" | "done" via data-state
 *   label: string via .velandra-live-lane__title
 *   preview: string via .velandra-live-lane__preview
 *   alertDot: boolean via .velandra-live-lane__alert-dot
 * @events
 *   velandra-live-lane:update, velandra-live-lane:drill-down
 * @animation
 *   Pulse is applied only for data-state="active" and respects
 *   prefers-reduced-motion.
 * @example
 *   <button class="velandra-live-lane" data-lane="transcript" data-state="active">
 *     <span class="velandra-live-lane__icon"></span>
 *     <span class="velandra-live-lane__preview">Esperando audio...</span>
 *     <span class="velandra-live-lane__alert-dot"></span>
 *   </button>
 */
.velandra-live-lane-group {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-3);
  min-width: 0;
}

.velandra-live-lane {
  --velandra-live-lane-accent: var(--accent);
  --velandra-live-lane-soft: var(--accent-subtle);
  position: relative;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--space-3);
  min-width: 0;
  min-height: 4rem;
  padding: var(--card-padding-compact);
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg-surface);
  color: var(--text-primary);
  text-align: start;
  box-shadow: var(--shadow-sm);
  cursor: pointer;
  transition:
    border-color var(--transition), background var(--transition), box-shadow var(--transition), transform var(--transition);
}

.velandra-live-lane[hidden] {
  display: none;
}

.velandra-live-lane:hover {
  border-color: color-mix(in srgb, var(--velandra-live-lane-accent) 48%, var(--border));
  background: var(--bg-hover);
  transform: translateY(-1px);
}

.velandra-live-lane:focus-visible {
  outline: 2px solid var(--velandra-live-lane-accent);
  outline-offset: 2px;
}

.velandra-live-lane__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: var(--radius-pill);
  background: var(--velandra-live-lane-soft);
  color: var(--velandra-live-lane-accent);
}

.velandra-live-lane__icon svg {
  width: 1rem;
  height: 1rem;
  stroke: currentColor;
}

.velandra-live-lane__body {
  display: grid;
  gap: var(--space-1);
  min-width: 0;
}

.velandra-live-lane__title {
  color: var(--text-primary);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  line-height: 1.25;
}

.velandra-live-lane__preview {
  min-width: 0;
  overflow: hidden;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  line-height: 1.35;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.velandra-live-lane__alert-dot {
  display: inline-flex;
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 999px;
  background: var(--border-strong);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--border-strong) 14%, transparent);
}

.velandra-live-lane[data-lane='transcript'] {
  --velandra-live-lane-accent: var(--accent);
  --velandra-live-lane-soft: var(--accent-subtle);
}

.velandra-live-lane[data-lane='diagnosis'] {
  --velandra-live-lane-accent: var(--success);
  --velandra-live-lane-soft: var(--success-subtle);
}

.velandra-live-lane[data-lane='cds'] {
  --velandra-live-lane-accent: var(--warning);
  --velandra-live-lane-soft: var(--warning-subtle);
}

.velandra-live-lane[data-priority='warning'] {
  --velandra-live-lane-accent: var(--warning);
  --velandra-live-lane-soft: var(--warning-subtle);
}

.velandra-live-lane[data-priority='critical'] {
  --velandra-live-lane-accent: var(--danger);
  --velandra-live-lane-soft: var(--danger-subtle);
}

.velandra-live-lane[data-state='active'] {
  border-color: color-mix(in srgb, var(--velandra-live-lane-accent) 62%, var(--border));
  background: color-mix(in srgb, var(--velandra-live-lane-soft) 64%, var(--bg-surface));
  box-shadow: var(--shadow-sm), inset 3px 0 0 var(--velandra-live-lane-accent);
}

.velandra-live-lane[data-state='active'] .velandra-live-lane__alert-dot {
  background: var(--velandra-live-lane-accent);
  animation: velandra-live-lane-pulse 1.4s ease-in-out infinite;
}

.velandra-live-lane[data-state='done'] .velandra-live-lane__alert-dot {
  background: var(--success);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--success) 16%, transparent);
}

.velandra-live-lane[data-state='idle'] .velandra-live-lane__preview {
  color: var(--text-tertiary);
}

@keyframes velandra-live-lane-pulse {
  0%,
  100% {
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--velandra-live-lane-accent) 16%, transparent);
    transform: scale(1);
  }

  50% {
    box-shadow: 0 0 0 8px color-mix(in srgb, var(--velandra-live-lane-accent) 0%, transparent);
    transform: scale(1.12);
  }
}

@media (prefers-reduced-motion: reduce) {
  .velandra-live-lane,
  .velandra-live-lane__alert-dot {
    animation: none;
    transition: none;
  }

  .velandra-live-lane:hover {
    transform: none;
  }
}

@media (max-width: 900px) {
  .velandra-live-lane-group {
    grid-template-columns: 1fr;
  }
}

/* ─── Sugerencias IA (panel copiloto) ───────────────────────────────────── */
.suggestion-card {
  background: var(--bg-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 12px 12px;
  transition: border-color var(--transition);
}
.suggestion-card + .suggestion-card { margin-top: 8px; }
.suggestion-card:hover { border-color: var(--border-strong); }

.suggestion-header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}

.suggestion-label {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--text-primary);
  flex: 1;
}

.suggestion-source {
  display: none;
  font-size: var(--text-xs);
  color: var(--text-tertiary);
  font-style: italic;
  border-left: 2px solid var(--border-strong);
  padding-left: 8px;
  margin-bottom: 10px;
}
.suggestion-card:hover .suggestion-source { display: block; }

.suggestion-actions {
  display: flex;
  gap: 8px;
}

.btn-ai-accept {
  flex: 1;
  padding: 4px 12px;
  background: var(--clinical-subtle);
  color: var(--clinical);
  border: 1px solid var(--clinical);
  border-radius: 6px;
  font-size: var(--text-sm);
  font-weight: 600;
  cursor: pointer;
  transition: background var(--transition), color var(--transition);
}
.btn-ai-accept:hover { background: var(--clinical); color: var(--text-on-accent); }

.btn-ai-ignore {
  padding: 4px 10px;
  background: transparent;
  color: var(--text-tertiary);
  border: 1px solid var(--border);
  border-radius: 6px;
  font-size: var(--text-sm);
  cursor: pointer;
  transition: color var(--transition), border-color var(--transition);
}
.btn-ai-ignore:hover { color: var(--danger); border-color: var(--danger); }

/* ─── Layouts de página ─────────────────────────────────────────────────── */
/*
 * Uso estándar:
 *   <div class="page-layout">
 *     <aside class="sidebar" id="sidebar">...</aside>
 *     <div class="page-content" id="page-content">
 *       <main class="page-main">...</main>
 *     </div>
 *   </div>
 *
 * page-content se ajusta automáticamente según el sidebar width.
 */
.page-layout {
  display: block;
  min-height: 100vh;
}

/* Wrapper del contenido — se mueve cuando sidebar colapsa */
.page-content {
  display: flex;
  flex-direction: column;
  margin-left: 240px; /* G5: igualar al ancho real del rail .sidebar (240px); antes 128px → el contenido quedaba bajo el sidebar fijo */
  transition: margin-left var(--transition-base);
  min-height: 100vh;
  min-width: 0;
}

/* Sidebar colapsado */
.page-content.sidebar-open  { margin-left: 240px; }
.page-content.sidebar-small { margin-left: 64px; }
.sidebar-collapsed ~ .page-content,
.sidebar-collapsed + .page-content {
  margin-left: 64px;
}

.page-main {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  padding: 28px 32px;
  position: relative;
}

.page-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 28px;
  gap: 16px;
}

.page-title {
  font-family: var(--font-display); /* Inter Display · ADR-30 (paridad Linear: headings display) */
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: -0.02em; /* tracking display Linear-grade */
  color: var(--text-primary);
  margin: 0;
}

/* Headings grandes bare → Inter Display (ADR-30). Body/small se quedan en Inter. */
h1, h2, h3 {
  font-family: var(--font-display);
  letter-spacing: -0.02em;
}
.page-title small {
  display: block;
  font-size: var(--text-sm);
  color: var(--text-secondary);
  font-weight: 400;
  margin-top: 4px;
}

.page-subtitle {
  font-size: var(--text-sm);
  color: var(--text-secondary);
  margin: 4px 0 0;
}

/* ─── Estados vacíos ────────────────────────────────────────────────────── */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 48px 24px;
  text-align: center;
  color: var(--text-secondary);
}

.empty-state-icon {
  font-size: var(--text-4xl);
  margin-bottom: 12px;
  opacity: 0.6;
}

.empty-state-title {
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 6px;
}

.empty-state-body {
  font-size: var(--text-sm);
  color: var(--text-secondary);
  max-width: 320px;
}

/* ─── Separadores ───────────────────────────────────────────────────────── */
.divider {
  height: 1px;
  background: var(--divider);
  border: none;
  margin: 16px 0;
}

/* ─── Toasts / Notificaciones ───────────────────────────────────────────── */
.toast-container {
  position: fixed;
  bottom: 20px;
  right: 20px;
  z-index: var(--z-max);
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.toast {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  font-weight: 500;
  background: var(--bg-elevated);
  border: 1px solid var(--border-strong);
  box-shadow: var(--shadow-lg);
  min-width: 280px;
  animation: slideInRight 0.3s var(--ease-out);
}

.toast-success { border-left: 4px solid var(--success); }
.toast-error   { border-left: 4px solid var(--danger); }
.toast-warning { border-left: 4px solid var(--warning); }
.toast-info    { border-left: 4px solid var(--info); }

/* ─── Animaciones ───────────────────────────────────────────────────────── */
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes slideUp {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes slideInRight {
  from { opacity: 0; transform: translateX(20px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes pulse-rec {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%       { opacity: 0.4; transform: scale(0.85); }
}

/* ─── Velandra Motion Taxonomy · v4 ─────────────────────────────────────────
 * Sistema vivo del mark F-punto: 6 estados con cadencia áurea.
 *
 * Tokens temporales — todos múltiplos / potencias de φ:
 *   --phi-duration-instant  = 0.382s  · 1/φ²
 *   --phi-duration-quick    = 0.618s  · 1/φ
 *   --phi-duration-medium   = 1.2s
 *   --phi-duration-natural  = 1.382s
 *   --phi-duration-heart    = 1.618s  · φ   ← latido del sistema
 *   --phi-duration-rest     = 8s
 *
 * Curva canónica: cubic-bezier(0.382, 0, 0.618, 1) — control points 1/φ² y 1/φ.
 *
 * Estados disponibles (clases CSS):
 *   .velandra-loading  · heartbeat · IA pensando (default, upgrade v4 in-place)
 *   .v4-idle         · respiración 8s · mark vivo en reposo
 *   .v4-pulse        · ripple expansivo · notificación entrante
 *   .v4-bloom        · scale + glow · éxito / confirmación
 *   .v4-enter        · stroke-draw · primer render / page load
 *   .v4-hover        · scale sutil · interactive feedback
 *
 * El mark F-punto trae los handles: .arc-outer (los 2 trazos), .velandra-dot
 * (el punto). Hermano de marca: velandra-ai-mark.svg (alma de IA, ya φ puro:
 * radios 13/8/5, opacidades 1/0.618/0.382). F-punto en v4 se sibling-alinea
 * con su hermana via translate(0 -2) → dot @ y=22 = baseline velandra.
 *
 * Para spinner standalone: <div class="velandra-spinner velandra-spinner-md"></div>
 * Reduced motion fallback abajo (prefers-reduced-motion: reduce).
 * ──────────────────────────────────────────────────────────────────────────── */

:root {
  --phi-duration-instant: 0.382s;
  --phi-duration-quick:   0.618s;
  --phi-duration-medium:  1.2s;
  --phi-duration-natural: 1.382s;
  --phi-duration-heart:   1.618s;
  --phi-duration-rest:    8s;
  --phi-ease: cubic-bezier(0.382, 0, 0.618, 1);
}

/* ── 1 · Loading · heartbeat (default) ──────────────────────────────────── */
@keyframes velandra-heartbeat {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.35; }
}
@keyframes velandra-dot-breathe {
  0%, 100% { r: 2.5; opacity: 1; }
  50%      { r: 3.5; opacity: 0.55; }
}
.velandra-loading .arc-outer {
  animation: velandra-heartbeat var(--phi-duration-heart) var(--phi-ease) infinite;
}
.velandra-loading .velandra-dot {
  animation: velandra-dot-breathe var(--phi-duration-heart) 1s var(--phi-ease) infinite;
}

/* ── 2 · Idle · respiración (mark vivo en reposo) ───────────────────────── */
@keyframes v4-idle {
  0%, 100% { transform: scale(1);     opacity: 1; }
  50%      { transform: scale(1.018); opacity: 0.95; }
}
.v4-idle {
  animation: v4-idle var(--phi-duration-rest) ease-in-out infinite;
  transform-origin: center;
  transform-box: fill-box;
}

/* ── 3 · Pulse · ripple expansivo (notificación) ────────────────────────── */
@keyframes v4-pulse-ring {
  0%   { r: 2.5; opacity: 0.9; }
  100% { r: 13;  opacity: 0; }
}
.v4-pulse .pulse-ring {
  animation: v4-pulse-ring var(--phi-duration-medium) var(--phi-ease) infinite;
}

/* ── 4 · Bloom · scale + glow (éxito) ───────────────────────────────────── */
@keyframes v4-bloom {
  0%, 100% { transform: scale(1);    }
  40%      { transform: scale(1.12); }
}
@keyframes v4-bloom-glow {
  0%, 100% { stroke-opacity: 0; }
  40%      { stroke-opacity: 0.45; }
}
.v4-bloom {
  animation: v4-bloom var(--phi-duration-quick) var(--phi-ease);
  transform-origin: center;
  transform-box: fill-box;
}
.v4-bloom .glow {
  animation: v4-bloom-glow var(--phi-duration-quick) var(--phi-ease);
}

/* ── 5 · Enter · stroke-draw (page load) ────────────────────────────────── */
@keyframes v4-enter-arc {
  0%   { stroke-dashoffset: 50; opacity: 0; }
  30%  { opacity: 1; }
  100% { stroke-dashoffset: 0;  opacity: 1; }
}
@keyframes v4-enter-dot {
  0%, 70% { r: 0;   opacity: 0; }
  100%    { r: 2.5; opacity: 1; }
}
.v4-enter .arc-outer {
  stroke-dasharray: 50;
  animation: v4-enter-arc var(--phi-duration-natural) var(--phi-ease) forwards;
}
.v4-enter .velandra-dot {
  animation: v4-enter-dot var(--phi-duration-natural) var(--phi-ease) forwards;
}

/* ── 6 · Hover · scale sutil (interactive feedback) ─────────────────────── */
@keyframes v4-hover-pulse {
  0%, 100% { transform: scale(1);     }
  50%      { transform: scale(1.045); }
}
.v4-hover:hover {
  animation: v4-hover-pulse var(--phi-duration-instant) var(--phi-ease);
  transform-origin: center;
  transform-box: fill-box;
}

/* ── Reduced motion fallback (accesibilidad WCAG) ───────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .v4-idle, .v4-bloom, .v4-hover:hover { animation: none; }
  .velandra-loading .arc-outer {
    animation: velandra-heartbeat 2.4s ease-in-out infinite;
  }
  .velandra-loading .velandra-dot { animation: none; }
  .v4-pulse .pulse-ring       { animation: none; opacity: 0; }
  .v4-enter .arc-outer        { animation: none; stroke-dashoffset: 0; opacity: 1; }
  .v4-enter .velandra-dot       { animation: none; opacity: 1; }
}

/* Spinner standalone — F-punto como indicador de carga */
.velandra-spinner {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--accent);
}
.velandra-spinner svg { display: block; width: 100%; height: 100%; }

/* Tamaños del spinner — F-punto es cuadrado */
.velandra-spinner-sm  { width: 22px; height: 22px; }
.velandra-spinner-md  { width: 36px; height: 36px; }
.velandra-spinner-lg  { width: 60px; height: 60px; }

/* Squircle de login con animación */
.brand-squircle {
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--text-primary);
  border-radius: 22%;
  box-shadow: var(--shadow-lg);
  transition: box-shadow var(--transition);
}
.brand-squircle.velandra-loading {
  box-shadow: var(--shadow-md);
}
.brand-squircle-lg { width: 96px; height: 96px; }
.brand-squircle-md { width: 68px; height: 68px; }
.brand-squircle-sm { width: 44px; height: 44px; }



/* ─── Bottom Tab Nav (móvil) ─────────────────────────────────────────────── */
.bottom-nav {
  display: none;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: color-mix(in srgb, var(--bg-surface) 96%, transparent);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-top: 1px solid var(--border);
  z-index: var(--z-shell);
  /* iPhone home-indicator safe area — sin esto el indicador tapa los ítems */
  padding-bottom: env(safe-area-inset-bottom, 0px);
}

:where([hidden]) {
  display: none !important;
}

.bottom-nav-items {
  display: flex;
  width: 100%;            /* FIX: sin esto el contenedor era ancho-contenido → ítems pegados a la izquierda */
  height: 58px;
  padding: 4px 8px 6px;
  gap: 2px;
}

.bottom-nav-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--text-tertiary);
  cursor: pointer;
  border: none;
  background: none;
  min-width: 0;
  padding: 5px 2px 4px;
  position: relative;
  transition: color var(--transition);
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}

.bottom-nav-item.active { color: var(--accent); }
.bottom-nav-item.active svg { color: var(--accent); }

.bottom-nav-item:hover,
.bottom-nav-item:focus-visible {
  color: var(--accent);
  text-decoration: none;
}

/* contenido (ícono + label) por encima del pill */
.bottom-nav-item > svg {
  position: relative;
  z-index: 1;
  width: 22px;
  height: 22px;
  flex-shrink: 0;
}
.bottom-nav-item > span {
  position: relative;
  z-index: 1;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Active = icono/label accent; no dibujar barras ni pills que se leen como artefactos en iOS. */
.bottom-nav-item.active::before {
  content: none;
}

.bottom-nav-badge {
  position: absolute;
  top: 6px;
  right: calc(50% - 18px);
  background: var(--danger);
  color: var(--text-on-accent);
  font-size: 0.6875rem;
  font-weight: 600;
  min-width: 16px;
  height: 16px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
}

/* ─── Responsive ─────────────────────────────────────────────────────────── */
@media (max-width: 1024px) {
  .sidebar { width: 200px; }
  .page-content { margin-left: 200px; } /* G5: match al rail de 200px en ≤1024px */
  .sidebar-collapsed ~ .page-content,
  .sidebar-collapsed + .page-content { margin-left: 64px; }
  .page-main { padding: 16px 20px; }
  .modal { padding: 20px; }
}

@media (max-width: 640px) {
  .sidebar { transform: translateX(-100%); transition: transform var(--transition-base); }
  .sidebar.sidebar-open { transform: translateX(0); }
  .sidebar-collapsed { transform: translateX(-100%); }
  .page-content { margin-left: 0; }
  html.sidebar-pref-collapsed .page-content,
  .sidebar-collapsed ~ .page-content,
  .sidebar-collapsed + .page-content { margin-left: 0; }
  .bottom-nav { display: flex; }
  .page-main { padding: 12px; padding-bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }
  .modal { border-radius: var(--radius-md) var(--radius-md) 0 0; margin-bottom: 0; align-self: flex-end; max-width: 100%; }
  .modal-overlay,
  .modal-backdrop { align-items: flex-end; padding: 0; }
  .btn-lg { padding: 12px 20px; }
  .card { padding: 16px; }

  /* Mobile hamburger toggle (sidebar) */
  .mobile-nav-toggle {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 8px;
    background: transparent;
    border: 1px solid var(--border);
    color: var(--text-secondary);
    cursor: pointer;
  }
}

@media (min-width: 641px) {
  .bottom-nav { display: none !important; }
  .mobile-nav-toggle { display: none; }
}

/* Configuración vive dentro del menú de usuario para evitar duplicados en sidebar */
#nav-settings {
  display: none !important;
}

/* ── Role-based FOUC Prevention ─────────────────────── */
html[data-role="doctor"] #nav-dashboard,
html[data-role="doctor"] #nav-doctores,
html[data-role="doctor"] #nav-cola,
html[data-role="doctor"] #nav-intelligence,
html[data-role="doctor"] a[href*="queue-operator"],
html[data-role="doctor"] a[href*="kiosk"],
html[data-role="doctor"] a[href*="display"],
html[data-role="doctor"] a[href*="/queue.html"],
html[data-role="doctor"] a[href*="/doctors.html"],
html[data-role="operador"] #nav-dashboard,
html[data-role="operador"] #nav-day,
html[data-role="operador"] #nav-doctores,
html[data-role="operador"] #nav-intelligence,
html[data-role="operador"] #nav-kiosco,
html[data-role="operador"] #nav-display,
html[data-role="operador"] #nav-portal,
html[data-role="operador"] #nav-settings,
html[data-role="operador"] a.bottom-nav-item[href="/admin/"],
html[data-role="paciente"] #nav-intelligence {
  display: none !important;
}



/* removed */

.table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; width: 100%; margin-bottom: 1rem; }
.table-responsive table { min-width: 800px; }

.doctor-list { display: flex; flex-direction: row; gap: 8px; padding: 12px 20px; overflow-x: auto; background: var(--bg-surface); border-bottom: 1px solid var(--border); }

/* ─── UI Standardization (Violet Constitution) overrides ─── */
.main-title, .tb-title {
  font-size: var(--text-2xl) !important;
  font-weight: 600 !important;
  color: var(--text-primary) !important;
  letter-spacing: -0.02em !important;
  line-height: 1.2 !important;
  margin: 0 !important;
}

.main-subtitle, .tb-subtitle, #tb-subtitle {
  font-size: var(--text-sm) !important;
  color: var(--text-secondary) !important;
  margin-top: 4px !important;
  font-weight: 400 !important;
  display: block !important;
}

.btn {
  font-size: var(--text-sm) !important;
  padding: 10px 20px !important;
}
.btn-sm {
  font-size: var(--text-sm) !important;
  padding: 6px 12px !important;
}

/* Force view-tab to look like uniform segmented controls */
.view-tab {
  font-size: var(--text-sm) !important;
  padding: 8px 16px !important;
  font-weight: 500 !important;
  border: 1px solid var(--border) !important;
  background: var(--bg-surface) !important;
  color: var(--text-secondary) !important;
  border-radius: 8px !important;
  cursor: pointer !important;
  transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition) !important;
}
.view-tab.active {
  background: var(--accent-subtle) !important;
  color: var(--accent-light) !important;
  border-color: var(--text-primary) !important;
  font-weight: 600 !important;
}
.view-tab:hover:not(.active) {
  background: var(--bg-hover) !important;
  color: var(--text-primary) !important;
}



html[data-role="doctor"] button[data-view="agenda"] { display: none !important; }

/* ─── Typography overrides for Homogeneity (Violet Constitution) ─── */
.table-row,
.table-row * {
  font-size: var(--text-sm) !important;
}
.table-header,
.table-header * {
  font-size: var(--text-xs) !important;
  font-weight: 600 !important;
}
.stat-card-title {
  font-size: var(--text-sm) !important;
  font-weight: 500 !important;
}
.stat-card-value {
  font-family: var(--font-display) !important; /* Inter Display · ADR-30 (números grandes Linear-grade) */
  font-size: var(--text-2xl) !important;
  font-weight: 600 !important;
  letter-spacing: -0.02em !important;
}
.search-input {
  font-size: var(--text-sm) !important;
}
.btn {
  font-size: var(--text-sm) !important;
  font-weight: 600 !important;
}

/* ── Sidebar Search & Recent Patients (UX-UI-02 / UX-UI-04) ── */
.sidebar-search-container {
  padding: 0 16px 12px 16px;
  position: relative;
}
.sidebar-search-wrapper {
  position: relative;
  display: flex;
  align-items: center;
}
.sidebar-search-icon {
  position: absolute;
  left: 10px;
  color: var(--text-tertiary);
  pointer-events: none;
}
.search-clear-btn {
  position: absolute;
  right: 8px;
  background: none;
  border: none;
  color: var(--text-tertiary);
  cursor: pointer;
  font-size: var(--text-base);
  line-height: 1;
  padding: 0 4px;
  display: none;
}
.search-clear-btn:hover {
  color: var(--text-primary);
}
.sidebar-search-input {
  width: 100%;
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  color: var(--text-primary);
  border-radius: var(--radius-md);
  padding: 8px 32px 8px 32px;
  font-size: var(--text-sm);
  transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition);
}
.sidebar-search-input:focus {
  outline: none;
  border-color: var(--border-strong);
  box-shadow: none;
}
.sidebar-search-input::placeholder {
  color: var(--text-muted);
}
.sidebar-collapsed .sidebar-search-input {
  display: none;
}
.sidebar-collapsed .sidebar-search-icon {
  position: static;
  margin: 0 auto;
  cursor: pointer;
  padding: 8px;
  border-radius: var(--radius-md);
  color: var(--text-secondary);
}
.sidebar-collapsed .sidebar-search-icon:hover {
  background: var(--bg-hover);
}
@keyframes searchDropdownIn {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: translateY(0); }
}

.sidebar-search-dropdown {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  right: auto;
  min-width: 300px;
  max-width: 360px;
  background: var(--glass-bg);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border, var(--border-strong));
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  z-index: var(--z-dropdown);
  display: none;
  flex-direction: column;
  overflow: hidden;
  max-height: 300px;
  overflow-y: auto;
}
.sidebar-search-dropdown.show {
  display: flex;
  animation: searchDropdownIn 0.12s ease forwards;
}
.search-dropdown-item {
  padding: 8px 12px;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: var(--text-primary);
  border-bottom: 1px solid var(--border);
  cursor: pointer;
}
.search-dropdown-item:last-child {
  border-bottom: none;
}
.search-dropdown-item:hover,
.search-dropdown-item.keyboard-active {
  background: var(--bg-hover);
}
.search-dropdown-name {
  font-size: var(--text-sm);
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex: 1;
}
.search-dropdown-meta {
  font-size: var(--text-tiny);
  flex-shrink: 0;
  margin-left: auto;
  color: var(--text-tertiary);
}
.search-result-avatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  color: var(--text-secondary);
  font-size: var(--text-micro);
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  text-transform: uppercase;
}
.search-dropdown-icon {
  width: 14px;
  height: 14px;
  color: var(--text-tertiary);
  flex-shrink: 0;
}
.search-dropdown-allergy {
  font-size: var(--text-micro);
  color: var(--danger);
  flex-shrink: 0;
  margin-right: 4px;
  cursor: help;
}
.search-dropdown-footer {
  padding: 8px 12px;
  border-top: 1px solid var(--divider);
  font-size: var(--text-tiny);
  color: var(--text-tertiary);
  text-align: center;
  text-decoration: none;
  display: block;
}
.search-dropdown-footer:hover {
  color: var(--text-secondary);
}
.search-empty-state {
  padding: 12px;
  font-size: var(--text-xs);
  color: var(--text-tertiary);
  text-align: center;
}
/* deprecated UX-UI-08 — 2026-04-07 */


.quick-actions-wrapper {
  position: relative;
  display: flex;
  justify-content: center;
}
.sidebar-collapsed .quick-actions-wrapper {
  margin: 0 auto;
}

/* Stat Card Icon added per DSIGN-11 */
.stat-card-icon {
  background: var(--bg-elevated);
  color: var(--text-secondary);
  border-radius: var(--radius-md);
  padding: 10px;
  display: flex;
  align-items: center;
}

/* Sistema de Glassmorphism & Borders (Regla de la Luz) */
.glass-header {
  background: var(--bg-surface);
  opacity: 0.95;
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--border);
}
/* .search-fields-hint — eliminado (UX-UI-08 rev2): info de campos buscables vive solo en el dropdown, no como texto permanente bajo el input. Patrón GitHub/Linear. */

.search-hint-in-dropdown {
  font-size: var(--text-micro);
  color: var(--text-muted);
  padding: 4px 12px 8px;
  border-top: 1px solid var(--divider);
  margin: 0;
  text-align: center;
}

/* ── Layout: Topbar (NAV-04) ─────────────────────────────────────────── */
.topbar {
  height: 48px;
  display: flex;
  align-items: center;
  padding: 0 var(--space-8);
  border-bottom: 1px solid var(--border);
  background: var(--bg-surface);
  position: sticky;
  top: 0;
  z-index: var(--z-shell);
  flex-shrink: 0;
  gap: var(--space-4);
}
.topbar-title {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--text-primary);
  flex: 0 0 auto;
  white-space: nowrap;
}
.topbar-actions {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}
@media (max-width: 1024px) {
  .topbar { padding: 0 var(--space-6); }
}
@media (max-width: 640px) {
  .topbar-actions .btn-label { display: none; }
}


/* NAV-05: Topbar User, Bell, Breadcrumbs */
.topbar-avatar-btn {
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--bg-elevated); border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; color: var(--text-primary); flex-shrink: 0;
  transition: background var(--transition);
}
.topbar-avatar-btn:hover { background: var(--bg-hover); }
.topbar-user-menu.show { display: block; }

.bell-badge {
  position: absolute; top: 6px; right: 6px;
  background: var(--danger); color: var(--text-on-accent); border-radius: 50%;
  font-size: 11px; font-weight: 600; width: 15px; height: 15px;
  display: flex; align-items: center; justify-content: center;
  padding: 0; pointer-events: none;
  border: 1.5px solid var(--bg-surface);
  line-height: 1; letter-spacing: -0.5px;
}

/* BADGE-01 — Topbar: el badge de la campana/bandeja es un PIN DOT semántico
   Patrón: Epic EHR / Canvas Medical / Linear
   El número solo vive en el sidebar InBasket. El topbar solo avisa de urgencia.
   Pin dot 8×8px = "hay algo urgente" — el doctor sabe dónde ir (sidebar). */
#bell-badge {
  width: 8px !important;
  height: 8px !important;
  min-width: 8px !important;
  padding: 0 !important;
  border-radius: 50% !important;
  font-size: 0 !important;         /* texto invisible — solo color */
  top: 5px !important;
  right: 5px !important;
  border-width: 2px !important;
}

.bell-menu.show { display: block; }

.topbar-breadcrumb { display: flex; align-items: center; gap: var(--space-2); flex: 1; min-width: 0; }
.topbar-breadcrumb > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; flex: 0 1 auto; }
.topbar-breadcrumb > span.topbar-title { display: inline-block; flex-shrink: 0; overflow: visible; text-overflow: clip; }
.topbar-back {
  display: flex; align-items: center; gap: 4px; color: var(--text-secondary);
  font-size: var(--text-sm); text-decoration: none; transition: color var(--transition);
  flex-shrink: 0;
}
.topbar-back:hover { color: var(--text-primary); }
.topbar-sep { color: var(--text-muted); font-size: var(--text-sm); flex-shrink: 0; }

/* UX-05: Skeleton Loading (Shimmers) */
.skeleton {
  background: var(--bg-elevated);
  border-radius: 4px;
  animation: skeleton-shimmer 1.5s ease-in-out infinite;
}
@keyframes skeleton-shimmer {
  0% { opacity: 1; }
  50% { opacity: 0.4; }
  100% { opacity: 1; }
}
.skeleton-text { height: 14px; margin-bottom: 6px; }
.skeleton-title { height: 20px; width: 55%; }
.skeleton-avatar { width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0; }
.skeleton-row { height: 44px; border-radius: 6px; margin-bottom: 4px; }
.skeleton-card { height: 80px; border-radius: 8px; }
.skeleton-badge { width: 60px; height: 22px; border-radius: 999px; }

/* SHELL-01 Topbar Additions */
.topbar-user-btn { display:flex;align-items:center;gap: 8px;padding: 4px 10px;background:transparent;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;color:var(--text-primary);font-family:var(--font-body);transition:background var(--transition), border-color var(--transition); }
.topbar-user-btn:hover { background:var(--bg-hover);border-color:var(--border); }
.topbar-user-initials { width:28px;height:28px;border-radius:50%;background:var(--bg-elevated);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size: var(--text-tiny);font-weight:600;color:var(--text-primary);flex-shrink:0; }
.topbar-user-name { font-size:var(--text-sm);font-weight:500;color:var(--text-primary);max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.topbar-icon-btn { position:relative;width:34px;height:34px;border-radius:var(--radius-md);background:transparent;border:1px solid transparent;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-secondary);transition:background var(--transition), color var(--transition); }
.topbar-icon-btn:hover { background:var(--bg-hover);color:var(--text-primary); }
.topbar-dropdown { display:none; }
.topbar-dropdown.show { display:flex !important; flex-direction:column; }
@media (max-width:1024px) { .topbar-user-name { display:none; } }

/* ── InBasket (YA NO: bell-menu dropdown) ─────────────────────────────────── */
/* El dropdown #bell-menu está reemplazado por el panel #velandra-inbox-panel    */
/* inbox.js lo oculta vía JS; esta regla es la capa de seguridad CSS          */
#bell-menu {
  display: none !important;
  pointer-events: none !important;
}
#bell-menu.show {
  display: flex !important;
  pointer-events: auto !important;
}
/* Bell topbar = semáforo de urgencia: solo el badge rojo cuando hay críticos */
.topbar-bell-wrapper { position: relative; margin-left: 8px; }


/* Global CTA (CTA-01)
   COMMIT 8/100 · Linear-grade · dropdown items con radius propio + margin.
   Antes: padding 9px 14px sin radius → hover bg cubría las esquinas del
   popover container, anulando su radius visible. Ahora: padding compact,
   margin 4px lateral, radius 6px propio → hover queda inset y respeta el
   container. Linear pattern (UI refresh blog): "smaller icon-only pills,
   rounded corners". */
.quick-action-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 8px;
  margin: 0 4px;
  width: calc(100% - 8px);
  background: none;
  border: none;
  border-radius: 6px;
  cursor: pointer !important;
  color: var(--text-primary);
  font-size: var(--text-sm);
  font-family: var(--font-body);
  text-decoration: none;
  transition: background var(--transition);
}
.quick-action-item:hover { background: var(--bg-hover); }
.quick-action-item:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: -1px;
}

.quick-action-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 6px;
  background: var(--bg-elevated);
  color: var(--text-secondary);
  flex-shrink: 0;
}

/* Método de pago activo en modal cobro */
.cobro-metodo-btn.active-metodo {
  background: var(--accent-subtle);
  border-color: var(--accent);
  color: var(--accent);
}
.cobro-metodo-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* ─── Q7 Ronda 10 — Badge informativo (no urgente) ─── */
/* Diferente al nav-badge rojo — este es contextual e informativo */
.nav-badge-info {
  font-size: var(--text-xs);   /* mismo tamaño que nav-badge */
  font-weight: 500;
  color: var(--text-muted);    /* gris — no urgente */
  margin-left: auto;           /* empuja al borde derecho */
  flex-shrink: 0;
  /* Sin background — solo texto plano */
  line-height: 1;
  transition: opacity var(--transition-fast);
}
/* En collapsed: el count informativo desaparece — no tiene espacio en 64px */
.sidebar-collapsed .nav-badge-info {
  display: none !important;
}
/* El badge NO aparece si el valor es 0 — el JS lo oculta vía display:none */

/* Topbar search base: start at 280px (overriding inline if necessary) */
#topbar-search-input-box {
  width: 280px !important;
  max-width: 100%; /* prevents overflow on tiny screens */
  height: 36px !important;
  border-radius: 8px !important;
  background: rgba(255,255,255,0.05) !important;
  border: 1px solid rgba(255,255,255,0.08) !important;
}

/* Topbar search focus state: expand cleanly and apply border */
#topbar-search-input-box:focus-within,
#topbar-search-wrapper.search-open #topbar-search-input-box {
  width: 480px !important;
  border-color: color-mix(in srgb, var(--accent) 60%, transparent) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent) !important;
}

/* Toggle aptitud activo — mismo estilo que cobro-metodo-btn */
.aptitud-btn.active-metodo {
  background: var(--accent-subtle);
  border-color: var(--accent);
  color: var(--accent);
}

/* ── Command Center v2 (Ronda 13) ───────────────────────────────── */
@keyframes cmdDropdownIn {
  from { opacity: 0; transform: scale(0.97); transform-origin: top center; }
  to   { opacity: 1; transform: scale(1); }
}

#topbar-search-dropdown {
  display: none;
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  width: 520px;
  max-height: 440px;
  overflow-y: auto;
  background: var(--bg-surface);
  border: 1px solid rgba(255,255,255,0.10); /* D-MV3 overrides var(--border) */
  border-radius: var(--radius-md); /* D-MV3: 12px dropdown */
  box-shadow: 0 20px 40px rgba(0,0,0,0.6), 0 8px 16px rgba(0,0,0,0.4);
  z-index: var(--z-modal);
  animation: cmdDropdownIn 100ms var(--ease-out) forwards;
}

.cmd-section {
  padding: 4px 0;
}
.cmd-section + .cmd-section {
  border-top: 1px solid var(--divider);
}

.cmd-section-header {
  font-size: var(--text-tiny);
  font-weight: 500; /* D-MV4 muted */
  text-transform: uppercase;
  letter-spacing: 0.08em; /* D-MV4 increased */
  color: var(--text-muted);
  padding: 10px 12px 4px;
}

.cmd-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  text-decoration: none;
  color: var(--text-primary);
  cursor: pointer !important;
  transition: background var(--transition);
  font-size: var(--text-sm);
  border: none;
  background: none;
  width: 100%;
  text-align: left;
}
.cmd-item:hover {
  background: var(--bg-hover);
  border-radius: 4px; /* var(--radius-sm) */
}
.cmd-item.keyboard-active {
  background: rgba(122, 74, 212, 0.15) !important; /* fallback a var(--accent-subtle) si no existe token */
  border-radius: 4px; /* var(--radius-sm) */
}

.cmd-avatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--bg-elevated);
  color: var(--text-secondary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-tiny);
  font-weight: 600;
  flex-shrink: 0;
}
.cmd-avatar-doctor { font-size: var(--text-sm); }
.cmd-avatar-cita   { font-size: var(--text-sm); }
.cmd-avatar-patient {
  border: none;
}
.cmd-avatar-tone-0 {
  background: var(--bg-hover);
  color: var(--text-secondary);
}
.cmd-avatar-tone-1 {
  background: color-mix(in srgb, var(--accent) 13%, transparent);
  color: var(--accent);
}
.cmd-avatar-tone-2 {
  background: var(--success-subtle);
  color: var(--success);
}
.cmd-avatar-tone-3 {
  background: var(--warning-subtle);
  color: var(--warning);
}
.cmd-avatar-tone-4 {
  background: var(--info-subtle);
  color: var(--info);
}
.cmd-avatar-tone-5 {
  background: var(--danger-subtle);
  color: var(--danger);
}
.cmd-avatar-dx,
.cmd-avatar-nota {
  background: var(--accent-subtle);
  color: var(--accent);
}
.cmd-item-inline-meta {
  color: var(--text-muted);
  font-size: 0.85em;
  font-weight: 400;
}
.cmd-highlight {
  color: var(--text-primary);
  font-weight: 600;
}

.cmd-item-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 500;
  color: var(--text-primary);
}
.cmd-item-meta {
  font-size: var(--text-tiny);
  color: var(--text-tertiary);
  white-space: nowrap;
  flex-shrink: 0;
}

.cmd-action-item {
  color: var(--text-secondary);
  font-size: var(--text-sm);
  cursor: pointer !important;
}
.cmd-action-item:hover { color: var(--text-primary); }

.cmd-context-section { padding: 4px 0; }
.cmd-context-item {
  color: var(--accent);
  font-size: var(--text-sm);
  font-weight: 500;
  cursor: pointer !important;
}
.cmd-context-hint {
  font-size: var(--text-tiny);
  color: var(--text-muted);
  padding: 8px 12px;
  font-style: italic;
}

.cmd-skeleton-item {
  height: 36px;
  margin: 4px 12px;
  border-radius: 4px;
  background: var(--bg-hover);
  animation: skeleton-shimmer 1.5s ease-in-out infinite;
}

.cmd-ver-todos {
  display: block;
  padding: 6px 12px;
  font-size: var(--text-tiny);
  font-weight: 600;
  color: var(--accent);
  text-decoration: none;
  text-align: right;
}
.cmd-ver-todos:hover { text-decoration: underline; }

.cmd-footer-link {
  border-top: 1px solid var(--divider);
  padding: 8px 12px;
}
.cmd-footer-link a {
  font-size: var(--text-tiny);
  color: var(--accent);
  text-decoration: none;
  font-weight: 500;
}
.cmd-footer-link a:hover { text-decoration: underline; }

.cmd-empty {
  padding: 20px 16px;
  font-size: var(--text-sm);
  color: var(--text-secondary);
  text-align: center;
}
.cmd-search-hint {
  padding: 10px 12px;
  font-size: var(--text-tiny);
  color: var(--text-muted);
  text-align: center;
  border-top: 1px solid var(--divider);
}
/* SEARCH-07 Light/Dark Mode Fixes
   SEARCH-FIX-2026-05-17: founder reportó "search duplicado en el medio".
   3 root causes:
     (a) `--bg-overlay` !important dejaba la página totalmente legible
         detrás del modal → no parecía modal, parecía segundo input.
     (b) trigger del sidebar quedaba visible cuando overlay abría → 2 elementos
         de búsqueda simultáneos visualmente.
     (c) input box sin shadow modal → se mimetizaba con el contenido.
   Linear/Stripe/Notion cmd-K pattern: backdrop dim sólido, modal con
   shadow significativa, trigger del sidebar oculto/inactivo cuando abierto. */
#topbar-search-backdrop {
  background: rgba(15, 23, 42, 0.55) !important;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
[data-theme="dark"] #topbar-search-backdrop {
  background: rgba(0, 0, 0, 0.65) !important;
}
#topbar-search-wrapper.search-open #topbar-search-input-box {
  box-shadow: 0 24px 64px -16px rgba(0, 0, 0, 0.35),
              0 8px 24px -8px rgba(0, 0, 0, 0.2) !important;
  border-radius: var(--radius-md) !important;
  z-index: var(--z-modal) !important;
}
[data-theme="light"] #topbar-search-wrapper.search-open #topbar-search-input-box {
  box-shadow: 0 24px 64px -16px rgba(15, 23, 42, 0.25),
              0 8px 24px -8px rgba(15, 23, 42, 0.12) !important;
}
body:has(#topbar-search-wrapper.search-open) #topbar-search-trigger {
  visibility: hidden !important;
}

/* SEARCH-FIX-2026-05-17 (modal positioning): cuando .search-open, el wrapper
   se promueve de inline-topbar a modal flotante centrado (Linear cmd-K pattern).
   Override inline `position:relative` con !important para que el modal flote
   a 18vh del top, 640px de ancho (sweet spot Linear=640, Stripe=620, Notion=640). */
#topbar-search-wrapper.search-open {
  position: fixed !important;
  top: 18vh !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  width: 640px !important;
  max-width: 92vw !important;
  margin: 0 !important;
  z-index: var(--z-modal) !important;
}
#topbar-search-wrapper.search-open #topbar-search-input-box {
  width: 100% !important;
  max-width: 100% !important;
  height: 56px !important;
  padding: 0 16px !important;
  background: var(--bg-elevated) !important;
  border-color: var(--border-strong) !important;
}
[data-theme="light"] #topbar-search-wrapper.search-open #topbar-search-input-box {
  background: #ffffff !important;
}
[data-theme="dark"] #topbar-search-wrapper.search-open #topbar-search-input-box {
  background: #1a1a1a !important;
}
#topbar-search-wrapper.search-open #topbar-search-input {
  font-size: 15px !important;
  padding: 12px 8px !important;
}
#topbar-search-wrapper.search-open #topbar-search-hint {
  font-size: 12px !important;
  padding: 4px 8px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg-surface);
}
[data-theme="light"] #topbar-search-dropdown {
  box-shadow: 0 16px 48px rgba(0,0,0,0.12);
}
[data-theme="light"] .cmd-avatar {
  background: var(--bg-surface);
  border: 1px solid var(--border-strong);
}
[data-theme="light"] .cmd-skeleton-item {
  background: var(--bg-hover);
}

@media (max-width: 1024px) {
  #topbar-search-input-box {
    width: 36px !important;
    overflow: hidden;
    cursor: pointer;
    transition: width var(--transition);
  }
  #topbar-search-input-box.cmd-tablet-expanded {
    position: absolute;
    top: 6px;
    left: 48px;
    right: 16px;
    width: auto !important;
    max-width: calc(100vw - 80px);
    z-index: var(--z-modal);
  }
  #topbar-search-input,
  #topbar-search-hint,
  #topbar-search-clear {
    display: none;
  }
  #topbar-search-input-box.cmd-tablet-expanded #topbar-search-input,
  #topbar-search-input-box.cmd-tablet-expanded #topbar-search-hint {
    display: flex;
  }
  #topbar-search-dropdown {
    width: calc(100vw - 32px);
    left: auto;
    right: 0;
    max-width: 480px;
  }
}

@media (max-width: 640px) {
  #topbar-search-dropdown {
    width: calc(100vw - 16px);
    right: -8px;
  }
}
/* ── FIN Command Center v2 ───────────────────────────────────── */


/* ── Tablas Admin (Premium) ── */
.table-wrap { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: visible; }
.table-admin { width: 100%; border-collapse: collapse; }
.table-th { padding: 12px 20px; text-align: left; font-size: var(--text-xs); font-weight: 600; color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.05em; border-bottom: 1px solid var(--border); background: linear-gradient(to right, transparent, var(--bg-page)); }
.table-td { padding: 12px 20px; font-size: var(--text-sm); border-bottom: 1px solid var(--divider); vertical-align: middle; transition: background var(--transition); }
.table-admin tr:last-child .table-td { border-bottom: none; }
.table-admin tr:hover .table-td { background: var(--bg-hover); }

/* ── Pills & Slots ── */
.pill-btn { padding: 6px 12px; border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: 600; cursor: pointer; border: 1px solid var(--border); background: var(--bg-surface); color: var(--text-secondary); transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition); white-space: nowrap; }
.pill-btn:hover { border-color: var(--border-strong); color: var(--text-primary); background: var(--bg-hover); transform: translateY(-1px); box-shadow: var(--shadow-sm); }
.pill-btn.active { background: var(--text-primary); color: var(--bg-surface); border-color: var(--text-primary); }
.pill-btn:disabled { opacity: 0.5; cursor: not-allowed; border-color: var(--border); color: var(--text-muted); background: transparent; transform: none; box-shadow: none; }

.slot-btn { padding: 6px 10px; border-radius: var(--radius-md); font-size: var(--text-xs); font-weight: 600; cursor: pointer; border: 1px solid var(--border); background: var(--bg-surface); color: var(--text-secondary); transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition); }
.slot-btn:hover { border-color: var(--border-strong); color: var(--text-primary); background: var(--bg-hover); transform: translateY(-1px); box-shadow: var(--shadow-sm); }
.slot-btn.selected { background: var(--border-strong); color: var(--text-primary); border-color: var(--text-primary); }
.slot-btn.occupied { opacity: 0.4; cursor: not-allowed; text-decoration: line-through; background: transparent; transform: none; box-shadow: none; }

/* ── Toggle Switches ── */
.toggle-switch {
  display: inline-block; width: 42px; height: 24px; border-radius: var(--radius-md);
  background: var(--border-strong); transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition); position: relative;
  cursor: pointer; box-shadow: var(--toggle-shadow);
}
input:checked + .toggle-switch { background: var(--accent); }
.toggle-handle {
  position: absolute; top: 3px; left: 3px; width: 18px; height: 18px;
  border-radius: 50%; background: var(--bg-surface); transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition);
  box-shadow: var(--toggle-dot-shadow);
}
input:checked + .toggle-switch .toggle-handle { transform: translateX(18px); }

/* ─── Empty States Clínicos Universales (M-HC-EMPTY-01) ─── */
.empty-confirmed {
  font-size: 11px;
  color: var(--success);
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 4px;
}
.empty-undocumented {
  font-size: 11px;
  color: var(--text-tertiary);
  font-style: italic;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.empty-undocumented .btn-add-cta {
  font-size: 11px;
  color: var(--accent);
  background: none;
  border: none;
  cursor: pointer;
  padding: 0;
  font-style: normal;
  font-weight: 600;
}
.empty-undocumented .btn-add-cta:hover {
  text-decoration: underline;
}

/* --- Migrated from inbox.js --- */

    /* Overlay */
    #velandra-inbox-overlay {
      position: fixed; inset: 0;
      background: rgba(0,0,0,0.35);
      backdrop-filter: blur(2px);
      z-index: var(--z-inbox-overlay);
      opacity: 0; pointer-events: none;
      transition: opacity var(--transition);
    }
    #velandra-inbox-overlay.visible { opacity: 1; pointer-events: auto; }

    /* Panel principal · hide vía transform (alineado con inbox.css canónico).
       Antes ocultaba por right:-400 y inbox.css (async) lo sobrescribía a right:0
       + transform:translateX(108%) con transición → el panel saltaba on-screen y
       se deslizaba afuera en CADA carga de página. Mismo mecanismo = sin salto. */
    #velandra-inbox-panel {
      position: fixed; top: 0; right: 0; width: 380px; height: 100vh;
      z-index: var(--z-inbox-panel);
      background: var(--bg-surface);
      border-left: 1px solid var(--border);
      box-shadow: -4px 0 32px rgba(0,0,0,0.18);
      display: flex; flex-direction: column;
      transform: translateX(108%);
      transition: transform var(--transition);
    }
    #velandra-inbox-panel.open { transform: translateX(0); }

    /* Header */
    .inb-header {
      padding: 0 20px;
      height: 56px;
      border-bottom: 1px solid var(--border);
      display: flex; align-items: center; justify-content: space-between;
      flex-shrink: 0;
    }
    .inb-header-left { display: flex; align-items: center; gap: 10px; }
    .inb-title {
      font-size: 15px; font-weight: 600;
      color: var(--text-primary); letter-spacing: -0.01em;
    }
    .inb-count {
      font-size: 11px; font-weight: 600;
      background: var(--danger); color: var(--text-on-accent);
      border-radius: var(--radius-md); padding: 4px 6px;
      min-width: 18px; text-align: center;
      display: none;
    }
    .inb-count.visible { display: inline-block; }

    .inb-header-actions { display: flex; align-items: center; gap: 4px; }
    .inb-btn-icon {
      background: transparent; border: none; cursor: pointer;
      color: var(--text-tertiary); border-radius: 6px;
      width: 32px; height: 32px;
      display: flex; align-items: center; justify-content: center;
      transition: background var(--transition), color var(--transition);
    }
    .inb-btn-icon:hover { background: var(--bg-hover); color: var(--text-primary); }
    .inb-btn-icon svg { width: 16px; height: 16px; }

    /* Tabs */
    .inb-tabs {
      display: flex;
      border-bottom: 1px solid var(--border);
      padding: 0 20px;
      gap: 0; flex-shrink: 0;
    }
    .inb-tab {
      font-size: 12px; font-weight: 600;
      color: var(--text-tertiary);
      padding: 10px 12px;
      cursor: pointer; border: none; background: transparent;
      border-bottom: 2px solid transparent;
      margin-bottom: -1px;
      transition: color var(--transition), border-color var(--transition);
    }
    .inb-tab:hover { color: var(--text-secondary); }
    .inb-tab.active { color: var(--text-primary); border-bottom-color: var(--text-primary); }

    /* Body scrollable */
    .inb-body {
      flex: 1; overflow-y: auto; padding: 12px 0;
      scroll-behavior: smooth;
    }
    .inb-body::-webkit-scrollbar { width: 4px; }
    .inb-body::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 4px; }

    /* Section labels + Mark All */
    .inb-section-row {
      display: flex; align-items: center; justify-content: space-between;
      padding: 0 20px 4px;
      margin-top: 16px;
    }
    .inb-section-row:first-child { margin-top: 0; }
    .inb-section {
      font-size: 11px; font-weight: 600;
      text-transform: uppercase; letter-spacing: 0.06em;
      color: var(--text-tertiary);
    }
    .inb-mark-all {
      font-size: 11px; font-weight: 600;
      color: var(--text-tertiary);
      background: none; border: none; cursor: pointer;
      padding: 4px 6px; border-radius: 4px;
      transition: background var(--transition), color var(--transition);
    }
    .inb-mark-all:hover { background: var(--bg-hover); color: var(--text-secondary); }

    /* Temporal group divider */
    .inb-time-group {
      padding: 6px 20px 4px;
      font-size: 11px; font-weight: 600;
      text-transform: uppercase; letter-spacing: 0.08em;
      color: var(--text-muted);
      margin-top: 4px;
    }

    /* Item */
    .inb-item {
      display: flex; align-items: flex-start; gap: 12px;
      padding: 12px 20px;
      text-decoration: none; color: inherit;
      cursor: pointer;
      border-left: 3px solid transparent;
      transition: background var(--transition), border-color var(--transition), opacity var(--transition), transform var(--transition), max-height var(--transition);
      position: relative;
      max-height: 200px;
      overflow: hidden;
    }
    .inb-item:hover { background: var(--bg-hover); }
    .inb-item:hover .inb-done-btn { opacity: 1; }

    /* Animación de salida al marcar Done */
    .inb-item--dismissing {
      opacity: 0;
      transform: translateX(60px);
      max-height: 0;
      padding-top: 0; padding-bottom: 0;
      pointer-events: none;
    }

    /* Urgencia */
    .inb-item--urgent { border-left-color: var(--warning); }
    .inb-item--danger  { border-left-color: var(--danger);  }
    .inb-item--info    { border-left-color: var(--info);    }
    .inb-item--success { border-left-color: var(--success); }

    /* Punto no leído */
    .inb-unread-dot {
      width: 6px; height: 6px; border-radius: 50%;
      background: var(--info); flex-shrink: 0; margin-top: 4px;
    }
    .inb-item--urgent .inb-unread-dot { background: var(--warning); }
    .inb-item--danger  .inb-unread-dot { background: var(--danger); }

    /* Ícono tipo */
    .inb-icon {
      width: 32px; height: 32px; border-radius: 8px;
      display: flex; align-items: center; justify-content: center;
      flex-shrink: 0;
    }
    .inb-icon--warning { background: var(--warning-subtle); color: var(--warning); }
    .inb-icon--danger  { background: var(--danger-subtle);  color: var(--danger);  }
    .inb-icon--info    { background: var(--info-subtle);    color: var(--info);    }
    .inb-icon--success { background: var(--success-subtle); color: var(--success); }
    .inb-icon--muted   { background: var(--bg-elevated);   color: var(--text-tertiary); }
    .inb-icon svg { width: 16px; height: 16px; }

    /* Contenido */
    .inb-content { flex: 1; min-width: 0; }
    .inb-item-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; margin-bottom: 4px; }
    .inb-patient {
      font-size: 12px; font-weight: 600;
      color: var(--text-primary); line-height: 1.3;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      max-width: 160px;
    }
    .inb-time {
      font-size: 11px; color: var(--text-tertiary);
      white-space: nowrap; flex-shrink: 0; margin-top: 4px;
      cursor: help;
    }
    .inb-desc {
      font-size: 12px; color: var(--text-secondary); line-height: 1.4;
      margin-bottom: 6px;
    }
    .inb-actions-row {
      display: flex; align-items: center; gap: 6px;
    }
    .inb-action {
      display: inline-flex; align-items: center; gap: 4px;
      font-size: 11px; font-weight: 600;
      color: var(--text-secondary);
      background: var(--bg-elevated);
      border: 1px solid var(--border);
      border-radius: 6px; padding: 4px 8px;
      transition: background var(--transition), color var(--transition), border-color var(--transition);
      text-decoration: none; cursor: pointer;
    }
    .inb-action:hover {
      background: var(--bg-hover);
      color: var(--text-primary);
      border-color: var(--border-strong);
    }

    /* Botón Done (✓) por ítem */
    .inb-done-btn {
      display: inline-flex; align-items: center; gap: 4px;
      font-size: 11px; font-weight: 600;
      color: var(--success);
      background: var(--success-subtle);
      border: 1px solid transparent;
      border-radius: 6px; padding: 4px 8px;
      cursor: pointer;
      transition: background var(--transition), opacity var(--transition);
      opacity: 0; /* visible solo en hover del ítem */
    }
    .inb-done-btn:hover { background: var(--success); color: var(--text-on-accent); }
    .inb-done-btn svg { width: 11px; height: 11px; }

    /* Empty state */
    .inb-empty {
      display: flex; flex-direction: column;
      align-items: center; justify-content: center;
      gap: 12px; padding: 56px 32px;
      text-align: center;
    }
    .inb-empty svg { color: var(--text-muted); opacity: 0.5; }
    .inb-empty-title { font-size: 13px; font-weight: 600; color: var(--text-secondary); }
    .inb-empty-sub { font-size: 12px; color: var(--text-tertiary); }

    /* Empty state por sección */
    .inb-section-empty {
      padding: 10px 20px 4px;
      font-size: 12px; color: var(--text-muted); font-style: italic;
    }

    /* Footer — última actualización */
    .inb-footer {
      border-top: 1px solid var(--border);
      padding: 8px 20px;
      font-size: 11px; color: var(--text-muted);
      text-align: center;
      flex-shrink: 0;
    }

    /* Sidebar trigger */
    #inbox-main-trigger { margin-top: auto; }
    #inbox-main-trigger .nav-label { font-size: 12px; }

    /* Sprint 3 — Urgency icon: sidebar InBasket icon turns danger when há críticos */
    #inbox-main-trigger.inb--urgent .nav-icon {
      color: var(--danger);
      transition: color var(--transition);
    }
    #inbox-main-trigger.inb--urgent .nav-label {
      color: var(--danger);
    }

    /* Bell topbar SVG override — reemplazamos la campana por bandeja */
    #bell-btn svg.bell-icon-original { display: none !important; }
    #bell-btn svg.inb-tray-icon { display: flex; }

    /* Bell topbar badge semáforo urgencia */
    #bell-btn .bell-badge-urgent {
      position: absolute; top: 3px; right: 3px;
      width: 8px; height: 8px; border-radius: 50%;
      background: var(--danger);
      border: 2px solid var(--bg-surface);
      display: none;
    }
    #bell-btn .bell-badge-urgent.visible { display: block; }

    /* Sprint 3 — Keyboard hint bar */
    .inb-kbd-hint {
      display: flex; gap: 12px; align-items: center; justify-content: center;
      padding: 6px 20px;
      border-top: 1px solid var(--border);
      flex-shrink: 0;
    }
    .inb-kbd-hint span {
      font-size: 11px; color: var(--text-muted);
      display: flex; align-items: center; gap: 4px;
    }
    .inb-kbd {
      font-size: 11px; font-weight: 600;
      background: var(--bg-elevated); color: var(--text-secondary);
      border: 1px solid var(--border); border-radius: 4px;
      padding: 4px 4px; font-family: monospace;
    }

    /* Sprint 3 — item focused via keyboard */
    .inb-item--focused {
      background: var(--bg-hover);
      outline: 2px solid var(--accent);
      outline-offset: -2px;
    }
    .inb-item--focused .inb-done-btn { opacity: 1; }

    /* Responsive */
    @media (max-width: 640px) {
      #velandra-inbox-panel { width: 100vw; }
      .inb-kbd-hint { display: none; }
    }
  
/* --- Migrated from feedback.js --- */

    #fb-drawer-overlay {
      display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh;
      background: rgba(0,0,0,0.35); z-index: var(--z-max);
      opacity: 0; transition: opacity var(--transition);
    }
    #fb-drawer-overlay.open { display: block; opacity: 1; }

    #fb-drawer {
      position: fixed; top: 0; right: 0; width: 420px; max-width: 100%; height: 100vh;
      background: var(--bg-surface); border-left: 1px solid var(--border); box-shadow: var(--shadow-lg);
      transform: translateX(100%); transition: transform var(--transition);
      z-index: var(--z-max); display: flex; flex-direction: column;
      font-family: var(--font-body);
    }
    #fb-drawer.open { transform: translateX(0); }

    .fb-header {
      display: flex; align-items: center; justify-content: space-between;
      padding: 16px 20px; border-bottom: 1px solid var(--border);
    }
    .fb-title { font-size: 1rem; font-weight: 600; color: var(--text-primary); margin: 0; }
    .fb-close-btn {
      background: transparent; border: 1px solid transparent; color: var(--text-secondary);
      cursor: pointer; width: 28px; height: 28px; border-radius: var(--radius-sm);
      display: flex; align-items: center; justify-content: center;
    }
    .fb-close-btn:hover { background: var(--bg-elevated); color: var(--text-primary); border-color: var(--border); }

    .fb-body { flex: 1; overflow-y: auto; padding: 20px; display: flex; flex-direction: column; gap: 20px; }
    
    .fb-field-group { display: flex; flex-direction: column; gap: 8px; }
    .fb-label { font-size: var(--text-sm); font-weight: 600; color: var(--text-primary); text-transform: uppercase; letter-spacing: 0.02em; }
    
    .fb-chips { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
    .fb-chip {
      background: var(--bg-elevated); border: 1px solid var(--border); color: var(--text-secondary);
      border-radius: var(--radius-md); padding: 10px 12px; font-size: var(--text-sm); font-family: var(--font-body);
      cursor: pointer; text-align: left; display: flex; align-items: center; gap: 6px; transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition);
    }
    .fb-chip:hover { border-color: var(--text-secondary); }
    .fb-chip.selected { background: var(--text-primary); color: var(--bg-surface); border-color: var(--text-primary); }

    .fb-input, .fb-textarea {
      background: var(--input-bg); border: 1px solid var(--input-border); color: var(--text-primary);
      border-radius: var(--radius-md); padding: 10px 12px; font-family: var(--font-body); font-size: var(--text-sm);
      transition: border-color var(--transition); outline: none; width: 100%; box-sizing: border-box;
    }
    .fb-input:focus, .fb-textarea:focus { border-color: var(--text-primary); box-shadow: none; }
    .fb-textarea { resize: vertical; min-height: 80px; }
    .fb-textarea.steps { min-height: 100px; }

    #fb-steps-wrapper { display: none; overflow: hidden; transition: height var(--transition); }
    #fb-steps-wrapper.show { display: flex; }

    .fb-file-upload {
      background: var(--bg-elevated); border: 1px dashed var(--border-strong); color: var(--text-secondary);
      border-radius: var(--radius-md); padding: 12px; text-align: center; cursor: pointer;
      font-size: var(--text-sm); display: flex; align-items: center; justify-content: center; gap: 6px;
    }
    .fb-file-upload:hover { border-color: var(--text-primary); color: var(--text-primary); }
    .fb-file-input { display: none; }
    
    .fb-checkbox-wrapper { display: flex; align-items: center; gap: 8px; font-size: var(--text-sm); color: var(--text-primary); cursor: pointer; }
    #fb-logs-wrapper { display: none; }
    #fb-logs-wrapper.fb-logs-visible { display: flex; }

    .fb-footer {
      padding: 16px 20px; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 12px;
    }
    .fb-footer-meta { font-size: var(--text-xs); color: var(--text-muted); display: flex; justify-content: space-between; }
    .fb-meta-url {
      max-width: 150px;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    .fb-footer-actions { display: flex; gap: 8px; justify-content: flex-end; }
    
    .fb-btn-cancel {
      background: transparent; border: 1px solid var(--border); color: var(--text-secondary);
      padding: 8px 16px; border-radius: var(--radius-md); font-family: var(--font-body); font-size: var(--text-sm);
      cursor: pointer; transition: color var(--transition), background-color var(--transition), border-color var(--transition), box-shadow var(--transition), opacity var(--transition), transform var(--transition);
    }
    .fb-btn-cancel:hover { background: var(--bg-elevated); color: var(--text-primary); }
    
    .fb-btn-submit {
      background: var(--text-primary); color: var(--bg-surface); border: none;
      padding: 8px 16px; border-radius: var(--radius-md); font-family: var(--font-body); font-size: var(--text-sm); font-weight: 600;
      cursor: pointer; transition: filter var(--transition); display: flex; align-items: center; gap: 6px;
    }
    .fb-btn-submit:hover { filter: brightness(0.85); }
    .fb-btn-submit:disabled { opacity: 0.5; cursor: not-allowed; }
    .fb-toast {
      position: fixed;
      bottom: 24px;
      left: 50%;
      z-index: var(--z-max);
      padding: 8px 16px;
      border-radius: 100px;
      background: var(--success);
      color: var(--text-on-accent);
      box-shadow: var(--shadow-md);
      font-family: var(--font-body);
      font-size: 13px;
      transform: translateX(-50%);
    }
  

/* Util */
.hidden { display: none !important; }

/* ── Kebab Menu Velandra (M-ATN-04) ─────────────────────────────── */
.velandra-kebab {
  position: fixed;
  z-index: var(--z-dropdown);
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  min-width: 190px;
  padding: 4px 0;
  animation: cmdDropdownIn 120ms ease;
}
.kebab-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8px 12px;
  background: none;
  border: none;
  cursor: pointer;
  font-size: var(--text-sm);
  color: var(--text-primary);
  text-align: left;
  transition: background var(--transition-fast), color var(--transition-fast);
}
.kebab-item:hover {
  background: var(--bg-hover);
}
.kebab-item.kebab-danger {
  color: var(--danger);
}
.kebab-item.kebab-danger:hover {
  background: var(--danger-subtle);
  color: var(--danger);
}
.kebab-icon, .kebab-icon svg {
  width: 14px;
  height: 14px;
  color: inherit;
}

.velandra-doctor-insights-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding: var(--card-padding-default);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--bg-card);
  box-shadow: var(--shadow-sm);
}

.velandra-doctor-insights-card--dashboard {
  margin-block-start: var(--space-2);
}

.velandra-doctor-insights-card__header {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.velandra-doctor-insights-card__eyebrow,
.velandra-doctor-insights-card__metric-label,
.velandra-doctor-insights-card__meta {
  margin: 0;
  color: var(--text-secondary);
  font-size: var(--text-xs);
}

.velandra-doctor-insights-card__eyebrow,
.velandra-doctor-insights-card__metric-label {
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.velandra-doctor-insights-card__title {
  margin: 0;
  color: var(--text-primary);
  font-size: var(--text-lg);
  line-height: 1.25;
}

.velandra-doctor-insights-card__grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--space-3);
}

.velandra-doctor-insights-card__metric {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  min-width: 0;
  padding: var(--card-padding-compact);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  background: var(--bg-elevated);
}

.velandra-doctor-insights-card__metric-head {
  display: flex;
  justify-content: space-between;
  gap: var(--space-2);
}

.velandra-doctor-insights-card__metric-value {
  color: var(--text-primary);
  font-size: var(--text-xl);
  font-weight: 600;
  line-height: 1.1;
}

.velandra-doctor-insights-card__metric-hint,
.velandra-doctor-insights-card__empty {
  color: var(--text-secondary);
  font-size: var(--text-sm);
}

.velandra-doctor-insights-card__sparkline {
  width: 100%;
  height: 2rem;
  color: var(--accent);
}

.velandra-doctor-insights-card__sparkline path {
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
}

.velandra-doctor-insights-card__sparkline circle {
  fill: currentColor;
}

.velandra-doctor-insights-card__trend {
  align-self: flex-start;
  white-space: nowrap;
  border-radius: var(--radius-pill);
  padding: 0.125rem 0.5rem;
  background: var(--bg-card);
  color: var(--text-secondary);
  font-size: var(--text-xs);
  font-weight: 600;
}

.velandra-doctor-insights-card__trend[data-tone='positive'] {
  color: var(--success);
  background: var(--success-subtle);
}

.velandra-doctor-insights-card__trend[data-tone='negative'] {
  color: var(--danger);
  background: var(--danger-subtle);
}

.velandra-doctor-insights-card__diagnoses {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin-block-start: var(--space-2);
}

.velandra-doctor-insights-card__chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  max-width: 100%;
  border: 1px solid var(--border);
  border-radius: var(--radius-pill);
  padding: 0.25rem 0.625rem;
  background: var(--bg-elevated);
  color: var(--text-secondary);
  font-size: var(--text-xs);
}

.velandra-doctor-insights-card__chip-code {
  color: var(--text-primary);
  font-weight: 600;
}

.velandra-doctor-insights-card__period {
  width: auto;
  min-width: 7rem;
}

/**
 * VelandraSkeletons.createStack({ label: 'Cargando resultados' })
 *
 * API visual:
 * - velandra-skeleton--line: linea de texto
 * - velandra-skeleton--block: bloque rectangular
 * - velandra-skeleton--circle: avatar/icono circular
 * - velandra-skeleton--bar: barra de progreso
 * - velandra-skeleton--card / velandra-skeleton-card: composicion de tarjeta
 * - velandra-skeleton-stack / velandra-skeleton-row: composiciones densas
 */
@keyframes velandra-skeleton-shimmer {
  0% {
    background-position: -120% 0;
  }
  100% {
    background-position: 220% 0;
  }
}

.velandra-skeleton {
  display: block;
  inline-size: 100%;
  min-inline-size: var(--space-4, 1rem);
  min-block-size: var(--space-2, 0.5rem);
  border-radius: 8px;
  background: var(--bg-elevated);
  background-image: linear-gradient(
    90deg,
    color-mix(in srgb, var(--text-tertiary) 5%, transparent) 0%,
    color-mix(in srgb, var(--text-tertiary) 17%, transparent) 45%,
    color-mix(in srgb, var(--text-tertiary) 5%, transparent) 90%
  );
  background-size: 220% 100%;
  animation: velandra-skeleton-shimmer 1200ms linear infinite;
}

.velandra-skeleton--line {
  block-size: 0.75rem;
}

.velandra-skeleton--block {
  block-size: 3.5rem;
}

.velandra-skeleton--circle {
  inline-size: 2rem;
  block-size: 2rem;
  min-inline-size: 2rem;
  border-radius: var(--radius-pill, 999px);
}

.velandra-skeleton--bar {
  block-size: 0.5rem;
  border-radius: var(--radius-pill, 999px);
}

.velandra-skeleton--card,
.velandra-skeleton-card {
  display: grid;
  gap: var(--space-3, 0.75rem);
  inline-size: 100%;
  padding: var(--card-padding-default, var(--space-4, 1rem));
  border: 1px solid var(--border);
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, var(--bg-surface)) 92%, transparent);
  background-image: none;
  animation: none;
}

.velandra-skeleton-stack {
  display: grid;
  gap: var(--space-2, 0.5rem);
  inline-size: 100%;
  min-width: 0;
}

.velandra-skeleton-stack--compact {
  gap: 0.375rem;
}

.velandra-skeleton-row {
  display: flex;
  align-items: center;
  gap: var(--space-3, 0.75rem);
  min-width: 0;
}

.velandra-skeleton--w-full {
  inline-size: 100%;
}

.velandra-skeleton--w-85 {
  inline-size: 85%;
}

.velandra-skeleton--w-80 {
  inline-size: 80%;
}

.velandra-skeleton--w-70 {
  inline-size: 70%;
}

.velandra-skeleton--w-65 {
  inline-size: 65%;
}

.velandra-skeleton--w-55 {
  inline-size: 55%;
}

.velandra-skeleton--w-45 {
  inline-size: 45%;
}

.velandra-skeleton--w-35 {
  inline-size: 35%;
}

/**
 * VelandraEmptyStates.create('labs_empty', { compact: true })
 *
 * API visual:
 * - key: una de las claves de `window.VelandraEmptyStates.keys`
 * - compact: reduce padding para sidebars y dropdowns
 * - inline: transforma el estado en chip textual para listas densas
 * - cta: { label, action, target } para una accion contextual opcional
 */
.velandra-empty-state {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3, 12px);
  width: 100%;
  min-width: 0;
  padding: var(--space-4, 16px);
  border: 1px dashed var(--border);
  border-radius: 8px;
  background: color-mix(in srgb, var(--bg-elevated, var(--bg-surface)) 82%, transparent);
  color: var(--text-secondary);
}

.velandra-empty-state--compact {
  padding: var(--space-3, 12px);
  gap: var(--space-2, 8px);
}

.velandra-empty-state--inline {
  display: inline-flex;
  align-items: center;
  width: auto;
  padding: 0;
  border: 0;
  background: transparent;
}

.velandra-empty-state__illustration {
  flex: 0 0 auto;
  width: 2.35rem;
  height: 2.35rem;
  padding: 0.45rem;
  border-radius: 8px;
  background: var(--bg-surface);
  color: var(--accent);
  box-shadow: inset 0 0 0 1px var(--border);
}

.velandra-empty-state__copy {
  display: grid;
  min-width: 0;
  gap: 0.35rem;
}

.velandra-empty-state__title {
  color: var(--text-primary);
  font-size: var(--text-sm);
  font-weight: 750;
  line-height: 1.25;
}

.velandra-empty-state__body {
  margin: 0;
  color: var(--text-secondary);
  font-size: var(--text-xs);
  line-height: 1.45;
}

.velandra-empty-state__cta {
  justify-self: flex-start;
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  padding: 0.35rem 0.65rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg-surface);
  color: var(--accent-light);
  font-size: var(--text-xs);
  font-weight: 750;
  text-decoration: none;
  cursor: pointer;
}

.velandra-empty-state__cta:hover {
  background: var(--bg-hover);
  color: var(--accent-light);
}

.velandra-empty-state--inline .velandra-empty-state__copy {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}

.velandra-empty-state--inline .velandra-empty-state__title {
  color: var(--text-tertiary);
  font-size: var(--text-xs);
  font-weight: 650;
}

.velandra-empty-state--inline .velandra-empty-state__body {
  display: none;
}

.photo-gallery > .velandra-empty-state,
.consultation-typeahead-dropdown .velandra-empty-state,
.recent-encounters-list .velandra-empty-state,
#copilot-chat-thread > .velandra-empty-state {
  margin: var(--space-2, 8px) 0;
}

@media (prefers-reduced-motion: reduce) {
  .velandra-skeleton,
  .skeleton,
  .shimmer,
  .copilot-shimmer-row,
  .encounter-version-history-skeleton {
    animation: none !important;
    background-image: none;
  }

  .velandra-empty-state,
  .velandra-empty-state__cta {
    transition: none;
  }
}

@media (max-width: 640px) {
  .velandra-doctor-insights-card__grid {
    grid-template-columns: 1fr;
  }

  .velandra-doctor-insights-card__metric-head {
    align-items: flex-start;
  }

  .velandra-empty-state {
    align-items: stretch;
    flex-direction: column;
  }

  .velandra-empty-state__cta {
    width: 100%;
    justify-content: center;
  }
}

/* ─────────────────────────────────────────────────────────────────
 * .dev-preview-banner — WIP "VISTA PREVIA" pill banner
 * QA-10 baseline cleanup 2026-05-15: extraído de inline styles
 * en consultation.html, patients.html, settings.html
 * ─────────────────────────────────────────────────────────────── */
.dev-preview-banner {
  position: fixed;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  z-index: var(--z-max);
  background: var(--accent);
  color: var(--text-on-accent);
  padding: 6px 12px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
  font-family: var(--font-sans);
  box-shadow: 0 2px 8px var(--shadow-strong, rgba(0, 0, 0, 0.18));
  pointer-events: none;
  letter-spacing: 0.02em;
}

/* ─────────────────────────────────────────────────────────────────
 * QA-12 utility classes — DEUDA-LINT-1200-WARNINGS-01
 * 2026-05-16: extracción de patrones repetidos en style= de template
 * literals JS para satisfacer regla aurora/no-template-string-style
 * (solo `display:` permitido inline; resto via class).
 * ─────────────────────────────────────────────────────────────── */
.u-txt-tertiary { color: var(--text-tertiary); }
.u-txt-secondary { color: var(--text-secondary); }
.u-txt-muted { color: var(--text-muted); }
.u-txt-primary { color: var(--text-primary); }
.u-text-xs { font-size: var(--text-xs); }
.u-text-micro { font-size: var(--text-micro); }
.u-fw-bold { font-weight: 600; }
.u-fw-semibold { font-weight: 600; }
.u-text-capitalize { text-transform: capitalize; }
.u-flex-col-center {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.u-flex-row-center {
  display: flex;
  align-items: center;
}
.u-flex-row-center-4 {
  display: flex;
  align-items: center;
  gap: 4px;
}
.u-flex-row-center-8 {
  display: flex;
  align-items: center;
  gap: 8px;
}
.u-empty-state-center {
  padding: 40px;
  text-align: center;
  color: var(--text-muted);
}
.u-txt-xs-tertiary {
  font-size: var(--text-xs);
  color: var(--text-tertiary);
}
.u-link-inherit {
  color: inherit;
  text-decoration: none;
}

/* Atomic spacing utilities (Tailwind-style) */
.u-mt-1 { margin-top: 4px; }
.u-mt-2 { margin-top: 4px; }
.u-mt-4 { margin-top: 4px; }
.u-mt-8 { margin-top: 8px; }
.u-mt-16 { margin-top: 1rem; }
.u-mb-4 { margin-bottom: 4px; }
.u-mb-8 { margin-bottom: 8px; }
.u-mb-12 { margin-bottom: 12px; }
.u-ml-6 { margin-left: 6px; }
.u-cursor-pointer { cursor: pointer; }
.u-text-right { text-align: right; }
.u-inline-flex { display: inline-flex; }

/* Specific compound classes for repeated patterns */
.u-text-24-bold { font-size: 24px; font-weight: 600; }
.u-text-12-bold-primary {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-primary);
}
.u-text-11-secondary {
  font-size: 11px;
  color: var(--text-secondary);
  font-weight: 400;
}
.u-text-10-tertiary {
  font-size: 11px;
  font-weight: 400;
  color: var(--text-tertiary);
}
.u-text-xs-secondary {
  color: var(--text-secondary);
  font-size: var(--text-xs);
}
.u-text-micro-muted {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: var(--text-micro);
  color: var(--text-muted);
  margin-top: 4px;
}
.u-text-sm-warning {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--warning);
}
.u-text-primary-medium {
  color: var(--text-primary);
  font-weight: 500;
}
.u-text-primary-semibold {
  font-weight: 600;
  color: var(--text-primary);
}
.u-text-accent-bold {
  font-weight: 600;
  font-size: 12px;
  color: var(--accent);
}
.u-flex-col-center-text {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
}
.u-row-justify-between {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.u-row-justify-between-bordered {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 4px 0;
  border-bottom: 1px solid var(--border);
}
.u-empty-overlay-watermark {
  position: absolute;
  top: 40px;
  left: 0;
  width: 100%;
  text-align: center;
  color: var(--text-muted);
  font-size: 11px;
  opacity: 0.5;
  pointer-events: none;
}
.u-badge-compact-secondary {
  background: var(--bg-elevated);
  border: 1px solid var(--border);
  color: var(--text-secondary);
  font-size: 0.6875rem;
  text-transform: capitalize;
}
.u-min-h-500-center {
  min-height: 500px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.u-pad-8-12-12 {
  padding: 8px 12px;
  font-size: 12px;
}

/* COMMIT 26/100 · SHELL-DS-02-WIRE-2026-05-15 · sr-only utility canónica.
   WCAG 2.1.1 A · WebAIM technique para esconder visualmente preservando
   semántica para screen readers. Antes definida 3 veces (patients.css,
   consultation.css, consultation-editor.css). Ahora cross-page. */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
