/* ==========================================================================
   Custom Modern Override - Corporate Blue + Glassmorphism
   Applied on top of Focus2/Bootstrap 4
   ========================================================================== */

/* --- Google Font --- */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');

/* --- CSS Variables --- */
:root {
  --cm-primary: #2563EB;
  --cm-primary-hover: #1D4ED8;
  --cm-primary-light: #EFF6FF;
  --cm-primary-subtle: #DBEAFE;
  --cm-secondary: #0F172A;
  --cm-accent: #06B6D4;
  --cm-success: #10B981;
  --cm-success-light: #ECFDF5;
  --cm-warning: #F59E0B;
  --cm-warning-light: #FFFBEB;
  --cm-danger: #EF4444;
  --cm-danger-light: #FEF2F2;
  --cm-info: #3B82F6;
  --cm-bg: #F0F4FA;
  --cm-card-bg: #FFFFFF;
  --cm-border: #E2E8F0;
  --cm-border-light: #F1F5F9;
  --cm-text: #1E293B;
  --cm-text-secondary: #64748B;
  --cm-text-muted: #94A3B8;
  --cm-radius: 12px;
  --cm-radius-sm: 8px;
  --cm-radius-lg: 16px;
  --cm-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
  --cm-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
  --cm-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
  --cm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
  --cm-transition: all 0.2s ease;
  /* Glassmorphism */
  --cm-glass-bg: rgba(255, 255, 255, 0.7);
  --cm-glass-border: rgba(255, 255, 255, 0.3);
  --cm-glass-blur: 16px;
  /* Sidebar light glassmorphism — matches header */
  --cm-sidebar-bg: rgba(255, 255, 255, 0.7);
  --cm-sidebar-hover: rgba(37, 99, 235, 0.08);
  --cm-sidebar-active: rgba(37, 99, 235, 0.14);
  --cm-sidebar-text: #1E293B;
  --cm-sidebar-text-hover: #2563EB;
  --cm-sidebar-label: #94A3B8;
  --cm-sidebar-icon: #64748B;
  --cm-sidebar-icon-hover: #2563EB;
  --cm-sidebar-submenu-bg: rgba(37, 99, 235, 0.04);
}

/* --- Typography --- */
body,
.content-body,
.card,
.card-body,
.form-control,
.btn,
.nav-text,
.metismenu,
.dropdown-menu,
.table,
.breadcrumb,
h1, h2, h3, h4, h5, h6 {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
}

body {
  background-color: var(--cm-bg) !important;
  color: var(--cm-text) !important;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ==========================================================================
   GLASSMORPHISM CARDS
   ========================================================================== */
.card {
  background: rgba(255, 255, 255, 0.85) !important;
  backdrop-filter: blur(var(--cm-glass-blur)) !important;
  -webkit-backdrop-filter: blur(var(--cm-glass-blur)) !important;
  border: 1px solid rgba(255, 255, 255, 0.5) !important;
  border-radius: var(--cm-radius) !important;
  box-shadow: var(--cm-shadow-sm) !important;
  transition: var(--cm-transition);
  overflow: hidden;
}

.card:hover {
  box-shadow: var(--cm-shadow-sm) !important;
}

.card-header {
  background: rgba(255, 255, 255, 0.6) !important;
  border-bottom: 1px solid var(--cm-border) !important;
  padding: 1rem 1.25rem !important;
}

.card-body {
  padding: 1.25rem !important;
}

.card-title {
  font-weight: 600 !important;
  color: var(--cm-secondary) !important;
  font-size: 1rem !important;
  letter-spacing: -0.01em;
}

/* ==========================================================================
   BUTTONS
   ========================================================================== */
.btn {
  border-radius: var(--cm-radius-sm) !important;
  font-weight: 500 !important;
  font-size: 0.875rem !important;
  padding: 0.5rem 1rem !important;
  transition: var(--cm-transition) !important;
  letter-spacing: 0;
  border: none !important;
  white-space: nowrap !important;
}

.btn-primary {
  background-color: var(--cm-primary) !important;
  color: #fff !important;
}

.btn-primary:hover,
.btn-primary:focus {
  background-color: var(--cm-primary-hover) !important;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2) !important;
}

.btn-success {
  background-color: var(--cm-success) !important;
}

.btn-success:hover {
  background-color: #059669 !important;
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2) !important;
}

.btn-danger {
  background-color: var(--cm-danger) !important;
}

.btn-danger:hover {
  background-color: #DC2626 !important;
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2) !important;
}

.btn-warning {
  background-color: var(--cm-warning) !important;
  color: #fff !important;
}

.btn-warning:hover {
  background-color: #D97706 !important;
}

.btn-info {
  background-color: var(--cm-accent) !important;
  color: #fff !important;
}

.btn-info:hover {
  background-color: #0891B2 !important;
}

.btn-secondary {
  background-color: #64748B !important;
  color: #fff !important;
}

.btn-secondary:hover {
  background-color: #475569 !important;
}

.btn-outline-primary {
  background-color: transparent !important;
  border: 1.5px solid var(--cm-primary) !important;
  color: var(--cm-primary) !important;
}

.btn-outline-primary:hover {
  background-color: var(--cm-primary) !important;
  color: #fff !important;
}

.btn-light {
  background-color: var(--cm-border-light) !important;
  color: var(--cm-text) !important;
  border: 1px solid var(--cm-border) !important;
}

.btn-light:hover {
  background-color: var(--cm-border) !important;
}

.btn-dark {
  background-color: var(--cm-secondary) !important;
}

.btn-sm {
  padding: 0.35rem 0.75rem !important;
  font-size: 0.8125rem !important;
}

.btn-lg {
  padding: 0.75rem 1.5rem !important;
  font-size: 1rem !important;
}

.btn-rounded {
  border-radius: 50px !important;
}

/* ==========================================================================
   FORM CONTROLS
   ========================================================================== */
.form-control {
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  padding: 0.375rem 0.75rem !important;
  font-size: 0.875rem !important;
  line-height: 1.5 !important;
  color: var(--cm-text) !important;
  background-color: var(--cm-card-bg) !important;
  transition: var(--cm-transition) !important;
  height: calc(1.5em + 0.75rem + 4px) !important;
}

.form-control:focus {
  border-color: var(--cm-primary) !important;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15) !important;
  outline: none !important;
}

.form-control::placeholder {
  color: var(--cm-text-muted) !important;
}

.form-group label,
label {
  font-weight: 500 !important;
  font-size: 0.8125rem !important;
  color: var(--cm-text) !important;
  margin-bottom: 0.375rem !important;
}

select.form-control,
select.form-select {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748B' d='M6 8L1 3h10z'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 0.75rem center !important;
  background-size: 12px !important;
  padding-right: 2rem !important;
  outline: none !important;
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
}

/* Multiple/sized selects: respect size attribute, restore native list */
select[multiple].form-control,
select[size].form-control:not([size="1"]) {
  height: auto !important;
  min-height: 200px !important;
  -webkit-appearance: listbox !important;
  -moz-appearance: listbox !important;
  appearance: listbox !important;
  background-image: none !important;
  padding-right: 0.75rem !important;
}

/* When Select2 wraps a select, fully hide the original */
select.form-control.select2-hidden-accessible {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
  display: none !important;
}

.input-group-text {
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  background-color: var(--cm-border-light) !important;
  color: var(--cm-text-secondary) !important;
  font-size: 0.875rem !important;
}

.form-select {
  --bs-form-select-bg-img: none !important;
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
}

.form-select:focus {
  border-color: var(--cm-primary) !important;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15) !important;
}

/* ==========================================================================
   SIDEBAR - DARK THEME (fixes visibility issues)
   ========================================================================== */

/* Nav header (logo area) - match top header exactly (same white, no blur) */
.nav-header {
  height: 4rem !important;
  background: #FFFFFF !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  border-bottom: none !important;
  border-right: 1px solid var(--cm-border) !important;
  border-radius: 0 16px 0 0 !important;
  transition: width 0.3s ease !important;
}

/* Sidebar container — solid white, matches header */
.quixnav {
  top: 4rem !important;
  padding-bottom: 1rem !important;
  background: #FFFFFF !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  background-image: none !important;
  border-right: 1px solid var(--cm-border) !important;
  border-radius: 0 !important;
  box-shadow: 4px 0 24px rgba(15, 23, 42, 0.04) !important;
  transition: width 0.3s ease !important;
}

.quixnav-scroll {
  height: calc(100vh - 4rem) !important;
  overflow-y: auto !important;
  padding-bottom: 0.5rem !important;
}

.quixnav .ps__rail-x,
.quixnav .ps__rail-y {
  display: none !important;
}

.quixnav-scroll::-webkit-scrollbar {
  width: 4px;
}

.quixnav-scroll::-webkit-scrollbar-track {
  background: transparent;
}

.quixnav-scroll::-webkit-scrollbar-thumb {
  background: rgba(15, 23, 42, 0.15);
  border-radius: 2px;
}

.quixnav-scroll::-webkit-scrollbar-thumb:hover {
  background: rgba(15, 23, 42, 0.3);
}

/* All sidebar links - base state */
.quixnav .metismenu a {
  color: var(--cm-sidebar-text) !important;
  font-size: 0.8125rem !important;
  transition: var(--cm-transition) !important;
}

/* Top level menu items */
.quixnav .metismenu > li > a {
  color: var(--cm-sidebar-text) !important;
  font-size: 0.8125rem !important;
  font-weight: 500 !important;
  padding: 0.4375rem 0.75rem !important;
  border-radius: 6px;
  margin: 1px 8px !important;
  transition: var(--cm-transition) !important;
  background: transparent !important;
  display: flex !important;
  align-items: center !important;
  gap: 0.5rem !important;
}

/* Top level icons */
.quixnav .metismenu > li > a i {
  color: var(--cm-sidebar-icon) !important;
  font-size: 0.9375rem !important;
  width: 1.5rem !important;
  min-width: 1.5rem !important;
  height: 1.5rem !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 4px !important;
  transition: var(--cm-transition) !important;
  padding: 0 !important;
  margin: 0 !important;
  top: 0 !important;
  position: relative !important;
}

/* Hover state - top level */
.quixnav .metismenu > li > a:hover,
.quixnav .metismenu > li:hover > a,
.quixnav .metismenu > li:focus > a {
  background: var(--cm-sidebar-hover) !important;
  color: var(--cm-sidebar-text-hover) !important;
}

.quixnav .metismenu > li > a:hover i,
.quixnav .metismenu > li:hover > a i,
.quixnav .metismenu > li:focus > a i {
  color: var(--cm-sidebar-icon-hover) !important;
}

/* Active/expanded section - top level (the expanded parent) */
.quixnav .metismenu > li.mm-active > a {
  background: var(--cm-primary-subtle) !important;
  color: var(--cm-primary-hover) !important;
  font-weight: 600 !important;
  border-left: 3px solid var(--cm-primary) !important;
  padding-left: calc(0.75rem - 3px) !important;
}

.quixnav .metismenu > li.mm-active > a i {
  color: var(--cm-primary) !important;
}

/* Submenu container background */
.quixnav .metismenu ul,
.quixnav .metismenu > li.mm-active ul,
.quixnav .metismenu > li.mm-active ul ul {
  background-color: var(--cm-sidebar-submenu-bg) !important;
}

/* Submenu links */
.quixnav .metismenu ul a {
  color: var(--cm-sidebar-text) !important;
  font-size: 0.75rem !important;
  font-weight: 400 !important;
  padding: 0.3125rem 0.75rem 0.3125rem 2.75rem !important;
  border-left: 2px solid transparent !important;
  margin: 0 8px !important;
  border-radius: 0 4px 4px 0 !important;
}

/* Submenu hover */
.quixnav .metismenu ul a:hover,
.quixnav .metismenu ul a:focus {
  color: var(--cm-primary) !important;
  background: rgba(37, 99, 235, 0.08) !important;
  border-left-color: rgba(37, 99, 235, 0.4) !important;
}

/* Submenu active (current page) - clearly distinct */
.quixnav .metismenu ul a.mm-active {
  color: var(--cm-primary-hover) !important;
  background: var(--cm-primary-subtle) !important;
  border-left-color: var(--cm-primary) !important;
  font-weight: 600 !important;
}

/* Section labels (CRM, REGISTRO, AJUSTES, etc) */
.quixnav .metismenu .nav-label {
  color: var(--cm-sidebar-label) !important;
  font-size: 0.625rem !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.1em !important;
  padding: 1rem 0.875rem 0.25rem !important;
}

/* Sidebar arrow — hide for flat menu */
.quixnav .metismenu .has-arrow::after {
  display: none !important;
}

/* --- Flat menu styles --- */
/* Section heading (group label, non-clickable) */
.quixnav .metismenu > li.menu-section-heading {
  margin-top: 0.75rem !important;
  list-style: none !important;
  background: transparent !important;
  border: none !important;
}
.quixnav .metismenu > li.menu-section-heading:first-child {
  margin-top: 0 !important;
}
.quixnav .metismenu > li.menu-section-heading > a,
.quixnav .metismenu > li.menu-section-heading:hover > a,
.quixnav .metismenu > li.menu-section-heading:focus > a {
  padding: 0.625rem 1.125rem 0.25rem !important;
  background: transparent !important;
  border: none !important;
  margin: 0 !important;
  cursor: default !important;
  pointer-events: none !important;
  display: block !important;
}
.quixnav .metismenu > li.menu-section-heading > a .nav-text {
  font-size: 0.6875rem !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  color: var(--cm-text-muted, #94A3B8) !important;
  display: block !important;
}
/* En modo colapsado el heading se oculta (no hay espacio) */
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-section-heading {
  display: none !important;
}

/* Sub-heading dentro de una sección (agrupación de children por grupo) */
.quixnav .metismenu > li.menu-child-group-heading {
  list-style: none !important;
  padding: 0.625rem 1.125rem 0.25rem 2.25rem !important;
  margin: 0.375rem 0 0 !important;
  background: transparent !important;
  border: none !important;
  pointer-events: none !important;
  cursor: default !important;
}
.quixnav .metismenu > li.menu-child-group-heading .nav-text {
  font-size: 0.625rem !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.1em !important;
  color: var(--cm-text-muted, #94A3B8) !important;
  display: block !important;
  opacity: 0.85;
}
/* Primer sub-heading pegado al menu-section-title no necesita margin-top extra */
.quixnav .metismenu > li.menu-section-title + li.menu-child-group-heading {
  margin-top: 0 !important;
}
/* Sub-heading oculto en modo colapsado */
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-group-heading,
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-group-heading {
  display: none !important;
}

/* Section title (parent with children) */
.quixnav .metismenu > li.menu-section-title > a {
  font-size: 0.6875rem !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  color: var(--cm-sidebar-label) !important;
  padding: 0.375rem 0.75rem 0.125rem !important;
  cursor: default !important;
  pointer-events: none !important;
  background: transparent !important;
  border: none !important;
  margin-top: 0.25rem !important;
}

.quixnav .metismenu > li.menu-section-title:first-child > a {
  margin-top: 0 !important;
  padding-top: 0.25rem !important;
}

.quixnav .metismenu > li.menu-section-title > a i {
  font-size: 0.75rem !important;
  color: var(--cm-sidebar-label) !important;
  width: 1.25rem !important;
  min-width: 1.25rem !important;
}

.quixnav .metismenu > li.menu-section-title:hover > a,
.quixnav .metismenu > li.menu-section-title > a:hover {
  background: transparent !important;
  color: var(--cm-sidebar-label) !important;
}

/* Child item (flat, indented) */
.quixnav .metismenu > li.menu-child-item > a {
  padding: 0.25rem 0.75rem 0.25rem 2.25rem !important;
  font-size: 0.75rem !important;
  font-weight: 400 !important;
  border-left: 2px solid transparent !important;
  margin: 0 8px !important;
  border-radius: 0 4px 4px 0 !important;
}

.quixnav .metismenu > li.menu-child-item > a:hover {
  color: var(--cm-primary) !important;
  background: rgba(37, 99, 235, 0.08) !important;
  border-left-color: rgba(37, 99, 235, 0.4) !important;
}

.quixnav .metismenu > li.menu-child-item.active > a {
  color: var(--cm-primary-hover) !important;
  background: var(--cm-primary-subtle) !important;
  border-left-color: var(--cm-primary) !important;
  font-weight: 600 !important;
}
.quixnav .metismenu > li.menu-child-item.active > a i,
.quixnav .metismenu > li.menu-child-item > a:hover i {
  color: var(--cm-primary) !important;
}

/* Icono base de sub-items: tamaño/alineación consistente (ADR 0005) */
.quixnav .metismenu > li.menu-child-item > a i {
  width: 1rem !important;
  font-size: 0.8125rem !important;
  text-align: center !important;
  color: var(--cm-sidebar-icon) !important;
}

/* --- Collapsed sidebar — floating card --- */
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav {
  overflow: visible !important;
  border-radius: 0 !important;
}

[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .nav-header {
  background: var(--cm-sidebar-bg) !important;
  backdrop-filter: blur(20px) saturate(1.4) !important;
  -webkit-backdrop-filter: blur(20px) saturate(1.4) !important;
  border-radius: 0 16px 0 0 !important;
}

[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav-scroll {
  overflow: visible !important;
}

/* Regular items (no children) in collapsed mode */
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li:not(.menu-section-title):not(.menu-child-item) > a {
  padding: 0.75rem 0 !important;
  margin: 2px 0 !important;
  justify-content: center !important;
}

[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li:not(.menu-section-title):not(.menu-child-item) > a i {
  margin: 0 !important;
  padding: 0 !important;
  width: auto !important;
  font-size: 1.125rem !important;
}

/* Collapsed mode — SCOPED a la sección cobranza:
   - Ocultar el ícono padre "Cobranza" (menu-section-title)
   - Mostrar children de cobranza como íconos individuales con tooltip flotante
   ESTRUCTURA ORIGINAL preservada (cubre data-sidebar-style="full"+menu-toggle, "mini",
   y #main-wrapper.menu-collapsed). */
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-section-title[data-section="cobranza"],
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-section-title[data-section="cobranza"],
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-section-title[data-section="cobranza"] {
  display: none !important;
}

[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a,
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a,
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a {
  padding: 0.5rem 0 !important;
  margin: 1px 0 !important;
  justify-content: center !important;
  padding-left: 0 !important;
}
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a .nav-text,
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a .nav-text,
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a .nav-text {
  display: none !important;
}
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a i,
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] > a i {
  font-size: 1.125rem !important;
  margin: 0 !important;
  width: auto !important;
}
/* El estilo base `.menu-child-item` tiene display:none en collapsed (original del tema).
   Para cobranza específicamente, mostrarlos como bloque. */
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"],
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-item[data-section="cobranza"],
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] {
  display: block !important;
}

/* Collapsed hover — tooltip flotante con nombre del item (scoped a cobranza). */
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"]:hover > a,
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-item[data-section="cobranza"]:hover > a,
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"]:hover > a {
  background: var(--cm-primary-subtle) !important;
  color: var(--cm-primary) !important;
  width: auto !important;
  padding-left: 0 !important;
}
[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"]:hover > a .nav-text,
#main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-item[data-section="cobranza"]:hover > a .nav-text,
body[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"]:hover > a .nav-text {
  display: inline-block !important;
  position: absolute !important;
  left: 100% !important;
  top: 50% !important;
  transform: translateY(-50%);
  margin-left: 8px !important;
  padding: 4px 10px !important;
  background: #fff !important;
  border: 1px solid var(--cm-border, #E2E8F0);
  border-radius: 6px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  white-space: nowrap;
  color: var(--cm-text) !important;
  font-size: 0.8125rem;
  z-index: 1050;
}

/* SCOPE FIX: estructura original aplica solo en vistas DE cobranza.
   Cuando estamos fuera (body[data-active-section] != "cobranza"), ocultar los íconos
   children-cobranza para no contaminar los menús colapsados de otras secciones,
   y mostrar el parent "Cobranza" como ícono normal con flyout default. */
body:not([data-active-section="cobranza"])[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-child-item[data-section="cobranza"],
body:not([data-active-section="cobranza"]) [data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li.menu-child-item[data-section="cobranza"],
body:not([data-active-section="cobranza"]) #main-wrapper.menu-collapsed .quixnav .metismenu > li.menu-child-item[data-section="cobranza"] {
  display: none !important;
}
body:not([data-active-section="cobranza"])[data-sidebar-style="mini"] .quixnav .metismenu > li.menu-section-title[data-section="cobranza"] {
  display: list-item !important;
}

/* Quitar flechas (spinners) de inputs numéricos en todo el sistema.
   Aplica a Chrome/Safari/Edge (-webkit) y Firefox (-moz). */
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none !important;
    margin: 0 !important;
}
input[type="number"] {
    -moz-appearance: textfield !important;
}

.flyout-children {
  display: none;
  position: absolute;
  left: 100%;
  top: 0;
  min-width: 11rem;
  background: var(--cm-sidebar-bg);
  backdrop-filter: blur(20px) saturate(1.4);
  -webkit-backdrop-filter: blur(20px) saturate(1.4);
  border-radius: 0 var(--cm-radius-sm) var(--cm-radius-sm) 0;
  box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.25);
  padding: 0.375rem 0;
  z-index: 100;
}

.flyout-children a {
  display: block;
  padding: 0.375rem 1rem !important;
  color: var(--cm-sidebar-text) !important;
  font-size: 0.8125rem !important;
  transition: var(--cm-transition) !important;
  white-space: nowrap;
}

.flyout-children a:hover {
  color: #FFFFFF !important;
  background: rgba(255, 255, 255, 0.1) !important;
}

[data-sidebar-style="full"][data-layout="vertical"] .menu-toggle .quixnav .metismenu > li:hover:nth-last-child(-n + 1) > ul {
  box-shadow: 4px -4px 20px rgba(0, 0, 0, 0.3) !important;
}

/* ==========================================================================
   TOP HEADER / NAVBAR - Glassmorphism
   ========================================================================== */
.header {
  height: 4rem !important;
  background: #FFFFFF !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  border-bottom: 1px solid var(--cm-border) !important;
  box-shadow: none !important;
}

.header-content {
  height: 100% !important;
}

.header-content .navbar {
  height: 100% !important;
  min-height: auto !important;
  padding: 0 1rem !important;
}

.header-right .nav-item .nav-link {
  color: var(--cm-text-secondary) !important;
  transition: var(--cm-transition) !important;
}

.header-right .nav-item .nav-link:hover {
  color: var(--cm-primary) !important;
}

.header-profile img {
  border: 2px solid var(--cm-border) !important;
  border-radius: 50% !important;
}

/* ==========================================================================
   HAMBURGER — modern FA6 icon replacing legacy 3-line spans
   ========================================================================== */
.hamburger .line {
  display: none !important;
}

.hamburger {
  position: relative !important;
  top: 0 !important;
  width: 36px !important;
  height: 36px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 8px !important;
  transition: background 0.2s ease !important;
}

.hamburger:hover {
  background: rgba(0, 0, 0, 0.06) !important;
}

.hamburger::before {
  content: "\f0c9" !important;
  font-family: "Font Awesome 6 Free" !important;
  font-weight: 900 !important;
  font-size: 1rem !important;
  color: var(--cm-text-secondary) !important;
  transition: transform 0.25s ease !important;
}

/* When sidebar is active/expanded, show close-like icon */
.hamburger.is-active::before {
  content: "\f00d" !important;
  transform: rotate(90deg) !important;
}

/* Nav-control cleanup */
.nav-control {
  background: transparent !important;
}

/* ==========================================================================
   DROPDOWN MENUS - Glassmorphism
   ========================================================================== */
.dropdown-menu {
  background: var(--cm-glass-bg) !important;
  backdrop-filter: blur(20px) !important;
  -webkit-backdrop-filter: blur(20px) !important;
  border: 1px solid var(--cm-glass-border) !important;
  border-radius: var(--cm-radius) !important;
  box-shadow: var(--cm-shadow-lg) !important;
  padding: 0.5rem !important;
}

.dropdown-item {
  border-radius: var(--cm-radius-sm) !important;
  padding: 0.5rem 0.75rem !important;
  font-size: 0.875rem !important;
  color: var(--cm-text) !important;
  transition: var(--cm-transition) !important;
}

.dropdown-item:hover,
.dropdown-item:focus {
  background-color: var(--cm-primary-light) !important;
  color: var(--cm-primary) !important;
}

/* ==========================================================================
   BREADCRUMBS — lives in the topnav header-left
   ========================================================================== */
.breadcrumb {
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
  font-size: 0.8125rem !important;
  flex-wrap: nowrap !important;
  white-space: nowrap !important;
}

.breadcrumb-item a {
  color: var(--cm-text-secondary) !important;
  text-decoration: none !important;
  transition: color 0.15s ease !important;
}

.breadcrumb-item a:hover {
  color: var(--cm-primary) !important;
}

.breadcrumb-item.active {
  color: var(--cm-text) !important;
  font-weight: 500 !important;
}

.breadcrumb-item + .breadcrumb-item::before {
  color: var(--cm-text-muted) !important;
  content: "›" !important;
  font-size: 1rem !important;
  line-height: 1 !important;
}

/* Botón "Volver" global del top bar (inyectado por main.js a la izquierda del breadcrumb).
   Visible también en móvil (icon-only), a diferencia del breadcrumb. */
.topbar-back-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  margin-right: 12px;
  padding: 0;
  border: 1px solid var(--rs-200, #E2E3F0);
  border-radius: var(--rs-r-xs, 8px);
  background: var(--rs-surface, #fff);
  color: var(--rs-fg-muted, #555);
  font-size: 0.85rem;
  line-height: 1;
  cursor: pointer;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.topbar-back-btn:hover {
  background: var(--rs-100, #F3F3FA);
  color: var(--rs-blue, #3D52F0);
  border-color: var(--rs-blue, #3D52F0);
}
.topbar-back-btn:active { transform: translateY(1px); }
.topbar-back-btn:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(61, 82, 240, 0.18);
}

/* Breadcrumb in header-left: hidden on mobile, visible on desktop */
.header-left .breadcrumb {
  display: none !important;
}

@media (min-width: 768px) {
  .header-left .breadcrumb {
    display: flex !important;
  }
}

/* ==========================================================================
   PAGE TITLES — hidden, replaced by breadcrumb in topnav
   ========================================================================== */
.page-titles {
  display: none !important;
}

/* ==========================================================================
   TABLES / DATATABLES
   ========================================================================== */
/* Tablas + controles de DataTables: fuente única en resti-bridge.css (tokens --rs-*).
   Se removió el bloque .table/--cm-* de aquí para evitar drift (usaba #2563EB). */

/* ==========================================================================
   DATATABLE EXPORT BUTTONS - Compact Pill Style
   ========================================================================== */
.dt-buttons {
  margin-bottom: 1rem !important;
  display: inline-flex !important;
  gap: 6px !important;
  flex-wrap: wrap !important;
  background: var(--cm-border-light) !important;
  padding: 4px !important;
  border-radius: var(--cm-radius-sm) !important;
}

.dt-buttons .dt-button,
.dt-buttons .btn.buttons-copy,
.dt-buttons .btn.buttons-print,
.dt-buttons .btn.buttons-excel,
.dt-buttons .btn.buttons-pdf,
.dt-buttons .btn.buttons-csv,
.dt-buttons .buttons-copy,
.dt-buttons .buttons-print,
.dt-buttons .buttons-excel,
.dt-buttons .buttons-pdf,
.dt-buttons .buttons-csv {
  background: transparent !important;
  color: var(--cm-text-secondary) !important;
  border: none !important;
  border-radius: 6px !important;
  padding: 0.3rem 0.6rem !important;
  font-size: 0.75rem !important;
  font-weight: 500 !important;
  font-family: 'Inter', sans-serif !important;
  transition: var(--cm-transition) !important;
  cursor: pointer;
  display: inline-flex !important;
  align-items: center !important;
  gap: 0.25rem !important;
  white-space: nowrap !important;
  line-height: 1.4 !important;
  box-shadow: none !important;
}

.dt-buttons .dt-button:hover,
.dt-buttons .buttons-copy:hover,
.dt-buttons .buttons-print:hover,
.dt-buttons .buttons-excel:hover,
.dt-buttons .buttons-pdf:hover,
.dt-buttons .buttons-csv:hover {
  background: var(--cm-card-bg) !important;
  color: var(--cm-primary) !important;
  box-shadow: var(--cm-shadow-sm) !important;
}

.dt-buttons .dt-button:active {
  transform: scale(0.97);
}

/* Remove btn-group border-radius override */
.dt-buttons.btn-group > .btn:not(:first-child),
.dt-buttons.btn-group > .btn-group:not(:first-child) > .btn {
  border-radius: 6px !important;
}

.dt-buttons.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
.dt-buttons.btn-group > .btn-group:not(:last-child) > .btn {
  border-radius: 6px !important;
}

/* Ensure btn-group doesn't force no-gap */
.dt-buttons.btn-group {
  display: inline-flex !important;
  gap: 4px !important;
}

.dt-buttons.btn-group > .btn + .btn {
  margin-left: 0 !important;
}

/* BS5 override: DataTable buttons must be compact in card-header */
.dt-buttons.btn-group > .btn,
.dt-buttons > .btn {
  padding: 0.3rem 0.6rem !important;
  font-size: 0.75rem !important;
  background: transparent !important;
  color: var(--cm-text-secondary) !important;
  border: none !important;
  box-shadow: none !important;
}

/* ==========================================================================
   BADGES
   ========================================================================== */
.badge {
  font-weight: 500 !important;
  font-size: 0.75rem !important;
  padding: 0.25rem 0.625rem !important;
  border-radius: 6px !important;
  letter-spacing: 0.01em;
}

.badge-primary {
  background-color: var(--cm-primary-light) !important;
  color: var(--cm-primary) !important;
}

.badge-success {
  background-color: var(--cm-success-light) !important;
  color: var(--cm-success) !important;
}

.badge-danger {
  background-color: var(--cm-danger-light) !important;
  color: var(--cm-danger) !important;
}

.badge-warning {
  background-color: var(--cm-warning-light) !important;
  color: #92400E !important;
}

.badge-info {
  background-color: #ECFEFF !important;
  color: var(--cm-accent) !important;
}

/* Badge counters on action buttons */
.btn.position-relative .badge.rounded-pill {
  font-size: 0.6rem !important;
  min-width: 1.1rem !important;
  height: 1.1rem !important;
  padding: 0 0.25rem !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  transform: translate(50%, -50%) !important;
  line-height: 1 !important;
  border-radius: 50% !important;
  background-color: var(--cm-danger) !important;
  color: #fff !important;
  z-index: 1;
}

/* ==========================================================================
   STAT WIDGETS
   ========================================================================== */
.stat-widget-one {
  display: flex !important;
  align-items: center !important;
  gap: 1rem;
  padding: 1.25rem !important;
}

.stat-widget-one .stat-content {
  flex: 1;
}

.stat-widget-one .stat-text {
  font-size: 0.75rem !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.05em !important;
  color: var(--cm-text-secondary) !important;
  margin-bottom: 0.25rem;
}

.stat-widget-one .stat-digit {
  font-size: 1.75rem !important;
  font-weight: 700 !important;
  color: var(--cm-secondary) !important;
  line-height: 1.2;
}

.stat-widget-one i {
  font-size: 1.5rem !important;
  color: var(--cm-primary) !important;
  background: var(--cm-primary-light);
  width: 52px;
  height: 52px;
  display: flex !important;
  align-items: center;
  justify-content: center;
  border-radius: var(--cm-radius) !important;
  flex-shrink: 0;
}

.stat-widget-one .text-pink {
  color: var(--cm-primary) !important;
}

/* ==========================================================================
   ALERTS
   ========================================================================== */
.alert {
  border-radius: var(--cm-radius-sm) !important;
  border: none !important;
  font-size: 0.875rem !important;
}

.alert-primary {
  background-color: var(--cm-primary-light) !important;
  color: var(--cm-primary-hover) !important;
}

.alert-success {
  background-color: var(--cm-success-light) !important;
  color: #065F46 !important;
}

.alert-danger {
  background-color: var(--cm-danger-light) !important;
  color: #991B1B !important;
}

.alert-warning {
  background-color: var(--cm-warning-light) !important;
  color: #92400E !important;
}

/* ==========================================================================
   MODALS
   ========================================================================== */
.modal-content {
  background: #FFFFFF !important;
  border: 1px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-lg) !important;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05) !important;
  overflow: hidden;
}

.modal-header {
  border-bottom: none !important;
  padding: 0.75rem 1.25rem !important;
  background: var(--cm-primary) !important;
}

.modal-header .modal-title {
  font-weight: 600 !important;
  font-size: 0.95rem !important;
  color: #FFFFFF !important;
}

.modal-header .btn-close {
  font-size: 1.1rem !important;
  opacity: 0.7 !important;
  transition: var(--cm-transition) !important;
  filter: invert(1) !important;
}

.modal-header .btn-close:hover {
  opacity: 1 !important;
  color: #FFFFFF !important;
}

.modal-body {
  padding: 1.5rem !important;
  background: #FFFFFF !important;
  max-height: 70vh !important;
  overflow-y: auto !important;
}

.modal-footer {
  border-top: 1px solid var(--cm-border) !important;
  padding: 1rem 1.5rem !important;
  background: #FFFFFF !important;
}

.modal-backdrop.show {
  background-color: rgba(15, 23, 42, 0.5) !important;
  backdrop-filter: blur(4px) !important;
}

/* ==========================================================================
   SELECT2 — Consistent with .form-control theme
   ========================================================================== */

/* Default theme */
.select2-container--default .select2-selection--single {
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  height: calc(1.5em + 0.75rem + 4px) !important;
  padding: 0.375rem 0.75rem !important;
  font-size: 0.875rem !important;
  background-color: #fff !important;
  background-image: none !important;
  transition: var(--cm-transition) !important;
  overflow: hidden !important;
}

/* Bootstrap5 theme */
.select2-container--bootstrap-5 .select2-selection--single {
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  height: calc(1.5em + 0.75rem + 4px) !important;
  padding: 0.375rem 0.75rem !important;
  font-size: 0.875rem !important;
  background-color: #fff !important;
  background-image: none !important;
  transition: var(--cm-transition) !important;
}

.select2-container--default .select2-selection--single .select2-selection__rendered,
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__rendered {
  padding-left: 0 !important;
  padding-right: 1.5rem !important;
  line-height: 1.5 !important;
  color: var(--cm-text) !important;
}

.select2-container--default .select2-selection--single .select2-selection__arrow,
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__arrow {
  position: absolute !important;
  top: 50% !important;
  right: 0.75rem !important;
  transform: translateY(-50%) !important;
  height: auto !important;
  width: auto !important;
  background: transparent !important;
  border-left: none !important;
}

.select2-container--default .select2-selection--single .select2-selection__arrow b,
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__arrow b {
  display: none !important;
}

.select2-container--default .select2-selection--single .select2-selection__arrow::after,
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__arrow::after {
  content: "\f078";
  font-family: "Font Awesome 6 Free";
  font-weight: 900;
  font-size: 0.6rem;
  color: var(--cm-text-secondary);
  transition: transform 0.2s ease;
}

.select2-container--default.select2-container--open .select2-selection__arrow::after,
.select2-container--bootstrap-5.select2-container--open .select2-selection__arrow::after {
  transform: rotate(180deg);
}

/* Hide native select when Select2 is active */
select.select2-hidden-accessible {
  display: none !important;
}

/* Focus states */
.select2-container--default .select2-selection--single:focus,
.select2-container--default.select2-container--focus .select2-selection--single,
.select2-container--default.select2-container--open .select2-selection--single,
.select2-container--bootstrap-5 .select2-selection--single:focus,
.select2-container--bootstrap-5.select2-container--focus .select2-selection--single,
.select2-container--bootstrap-5.select2-container--open .select2-selection--single {
  border-color: var(--cm-primary) !important;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15) !important;
}

.select2-dropdown {
  border: 1px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  box-shadow: var(--cm-shadow-lg) !important;
}

.select2-container--default .select2-results__option--highlighted[aria-selected],
.select2-container--bootstrap-5 .select2-results__option--highlighted[aria-selected] {
  background-color: var(--cm-primary) !important;
}

/* Multi-select variant */
.select2-container--default .select2-selection--multiple,
.select2-container--bootstrap-5 .select2-selection--multiple {
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  min-height: calc(1.5em + 0.75rem + 4px) !important;
  padding: 0.2rem 0.5rem !important;
  background-color: #fff !important;
}

/* ==========================================================================
   SWEETALERT2
   ========================================================================== */
.swal2-popup {
  border-radius: var(--cm-radius-lg) !important;
  font-family: 'Inter', sans-serif !important;
}

.swal2-styled.swal2-confirm {
  background-color: var(--cm-primary) !important;
  border-radius: var(--cm-radius-sm) !important;
}

.swal2-styled.swal2-cancel {
  border-radius: var(--cm-radius-sm) !important;
}

/* ==========================================================================
   TABS / NAV TABS
   ========================================================================== */
.nav-tabs {
  border-bottom: 2px solid var(--cm-border) !important;
}

.nav-tabs .nav-link {
  border: none !important;
  color: var(--cm-text-secondary) !important;
  font-weight: 500 !important;
  font-size: 0.875rem !important;
  padding: 0.75rem 1.25rem !important;
  transition: var(--cm-transition) !important;
  border-bottom: 2px solid transparent !important;
  margin-bottom: -2px;
}

.nav-tabs .nav-link:hover {
  color: var(--cm-primary) !important;
  border-color: transparent !important;
  border-bottom-color: var(--cm-primary-subtle) !important;
}

.nav-tabs .nav-link.active {
  color: var(--cm-primary) !important;
  background: transparent !important;
  border-color: transparent !important;
  border-bottom: 2px solid var(--cm-primary) !important;
  font-weight: 600 !important;
}

/* ==========================================================================
   PAGINATION
   ========================================================================== */
.pagination .page-item .page-link {
  border: 1px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  color: var(--cm-text) !important;
  margin: 0 2px !important;
  padding: 0.45rem 0.85rem !important;
  min-width: 2.25rem !important;
  text-align: center !important;
  font-size: 0.875rem !important;
  line-height: 1.5 !important;
  cursor: pointer !important;
  transition: var(--cm-transition) !important;
}

.pagination .page-item.active .page-link {
  background-color: var(--cm-primary) !important;
  border-color: var(--cm-primary) !important;
  color: #fff !important;
}

.pagination .page-item .page-link:hover {
  background-color: var(--cm-primary-light) !important;
  color: var(--cm-primary) !important;
}

/* ==========================================================================
   PRELOADER
   ========================================================================== */
#preloader {
  background: var(--cm-card-bg) !important;
}

.sk-three-bounce .sk-child {
  background-color: var(--cm-primary) !important;
}

/* ==========================================================================
   SCROLLBAR
   ========================================================================== */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

::-webkit-scrollbar-track {
  background: transparent;
}

::-webkit-scrollbar-thumb {
  background: var(--cm-border);
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: var(--cm-text-muted);
}

/* ==========================================================================
   CONTENT AREA
   ========================================================================== */
/* El tema base pone `overflow: hidden` en #main-wrapper, lo cual rompe
   `position: sticky` en cualquier descendiente. `overflow: clip` mantiene
   el clipping visual pero no crea un scroll-context, permitiendo sticky. */
#main-wrapper {
  overflow: clip !important;
}

.content-body {
  background: var(--cm-bg) !important;
  transition: margin-left 0.3s ease !important;
}

/* Compensate for compact 4rem header (was 5rem → padding was 7rem) */
[data-header-position="fixed"] .content-body {
  padding-top: 5rem !important;
}

.content-body .container-fluid {
  padding: 1rem 1.5rem !important;
}

/* ==========================================================================
   LOGIN PAGE - Glassmorphism
   ========================================================================== */
.authincation-content {
  background: var(--cm-glass-bg) !important;
  backdrop-filter: blur(20px) !important;
  -webkit-backdrop-filter: blur(20px) !important;
  border: 1px solid var(--cm-glass-border) !important;
  border-radius: var(--cm-radius-lg) !important;
  box-shadow: var(--cm-shadow-lg) !important;
}

.auth-form {
  padding: 2rem !important;
}

.auth-form h4 {
  font-weight: 700 !important;
  color: var(--cm-secondary) !important;
}

/* ==========================================================================
   CHAT BUTTON
   ========================================================================== */
.btn-chat {
  background: var(--cm-primary) !important;
  border-radius: var(--cm-radius-sm) !important;
  box-shadow: var(--cm-shadow) !important;
  border: none !important;
  padding: 0.5rem 0.875rem !important;
}

.btn-chat:hover {
  background: var(--cm-primary-hover) !important;
  box-shadow: var(--cm-shadow-md) !important;
}

/* ==========================================================================
   TOASTR
   ========================================================================== */
.toast-success {
  background-color: var(--cm-success) !important;
}

.toast-error {
  background-color: var(--cm-danger) !important;
}

.toast-warning {
  background-color: var(--cm-warning) !important;
}

.toast-info {
  background-color: var(--cm-primary) !important;
}

/* ==========================================================================
   UTILITY OVERRIDES
   ========================================================================== */
.text-primary { color: var(--cm-primary) !important; }
.text-success { color: var(--cm-success) !important; }
.text-danger { color: var(--cm-danger) !important; }
.text-warning { color: var(--cm-warning) !important; }
.text-info { color: var(--cm-accent) !important; }
.text-muted { color: var(--cm-text-muted) !important; }
.bg-primary { background-color: var(--cm-primary) !important; }
.bg-success { background-color: var(--cm-success) !important; }
.bg-danger { background-color: var(--cm-danger) !important; }
.bg-warning { background-color: var(--cm-warning) !important; }
.bg-info { background-color: var(--cm-accent) !important; }

/* ==========================================================================
   NOTIFICATION DROPDOWN
   ========================================================================== */
.notification_dropdown .dropdown-menu {
  min-width: 280px !important;
  max-height: 350px;
  overflow-y: auto;
}

.notification_dropdown .media {
  padding: 0.625rem 0.75rem !important;
  border-radius: var(--cm-radius-sm) !important;
  transition: var(--cm-transition) !important;
}

.notification_dropdown .media:hover {
  background: var(--cm-primary-light) !important;
}

.all-notification {
  display: block !important;
  text-align: center !important;
  padding: 0.75rem !important;
  color: var(--cm-primary) !important;
  font-weight: 500 !important;
  font-size: 0.8125rem !important;
  border-top: 1px solid var(--cm-border) !important;
}

/* ==========================================================================
   MISC
   ========================================================================== */
.pulse-css {
  background: var(--cm-danger) !important;
}

a {
  color: var(--cm-primary);
  transition: var(--cm-transition);
}

a:hover {
  color: var(--cm-primary-hover);
  text-decoration: none;
}

.table-responsive {
  border-radius: var(--cm-radius-sm);
  overflow-x: auto !important;
  overflow-y: visible !important;
  -webkit-overflow-scrolling: touch;
}

.form-check-input:checked {
  background-color: var(--cm-primary) !important;
  border-color: var(--cm-primary) !important;
}

.form-check-input:focus {
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15) !important;
  border-color: var(--cm-primary) !important;
}

/* Unchecked checkbox/radio: visible border on light backgrounds */
.form-check:not(.form-switch) .form-check-input:not(:checked) {
  border-color: #adb5bd !important;
  background-color: #fff !important;
}

/* Unchecked switch: darker pill for visibility on light backgrounds */
.form-switch .form-check-input:not(:checked) {
  border-color: #9ca3af !important;
  background-color: #b0b7c3 !important;
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e") !important;
}

/* Kill Quixkit theme pseudo-element overlays on BS5 native form-check */
.form-check-input::before,
.form-check-input::after {
  display: none !important;
}

.progress {
  border-radius: var(--cm-radius-sm) !important;
  background-color: var(--cm-border-light) !important;
  height: 0.5rem !important;
  overflow: hidden;
}

.progress-bar {
  background-color: var(--cm-primary) !important;
  border-radius: var(--cm-radius-sm) !important;
}

.list-group-item {
  border-color: var(--cm-border) !important;
  padding: 0.75rem 1.25rem !important;
  font-size: 0.875rem !important;
  transition: var(--cm-transition) !important;
}

.list-group-item:hover {
  background-color: var(--cm-primary-light) !important;
}

.list-group-item.active {
  background-color: var(--cm-primary) !important;
  border-color: var(--cm-primary) !important;
}

/* ==========================================================================
   OPTIONS DROPDOWN BUTTON (Tables)
   ========================================================================== */
.btn-group .dropdown-toggle {
  border-radius: var(--cm-radius-sm) !important;
}

/* ==========================================================================
   TABLE ACTION BUTTONS - Flat soft-color style
   ========================================================================== */
/* All action buttons - flat soft style.
   Aplica en tablas (td) y en cualquier contenedor .action-buttons (cards, headers).
   Ver ADR 0005. */
td .btn,
td a.btn,
.action-buttons .btn,
.action-buttons a.btn {
  padding: 0.3rem 0.45rem !important;
  font-size: 0.75rem !important;
  min-width: auto !important;
  line-height: 1.3 !important;
  border-radius: 4px !important;
  border: none !important;
  transition: var(--cm-transition) !important;
}

/* Contenedor flex para botoneras fuera de tablas */
.action-buttons {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px;
}

/* Icon-only buttons */
td .btn i:only-child,
td a.btn i:only-child,
.action-buttons .btn i:only-child,
.action-buttons a.btn i:only-child {
  margin: 0 !important;
}

/* Soft colored backgrounds instead of outline borders */
td .btn-outline-primary,
td .btn-sm.btn-outline-primary,
.action-buttons .btn-outline-primary,
.action-buttons .btn-sm.btn-outline-primary {
  background: var(--cm-primary-light) !important;
  color: var(--cm-primary) !important;
  border: none !important;
}
td .btn-outline-primary:hover,
.action-buttons .btn-outline-primary:hover {
  background: var(--cm-primary-subtle) !important;
}

td .btn-outline-success,
td .btn-sm.btn-outline-success,
.action-buttons .btn-outline-success,
.action-buttons .btn-sm.btn-outline-success {
  background: var(--cm-success-light) !important;
  color: var(--cm-success) !important;
  border: none !important;
}
td .btn-outline-success:hover,
.action-buttons .btn-outline-success:hover {
  background: #D1FAE5 !important;
}

td .btn-outline-danger,
td .btn-sm.btn-outline-danger,
.action-buttons .btn-outline-danger,
.action-buttons .btn-sm.btn-outline-danger {
  background: var(--cm-danger-light) !important;
  color: var(--cm-danger) !important;
  border: none !important;
}
td .btn-outline-danger:hover,
.action-buttons .btn-outline-danger:hover {
  background: #FEE2E2 !important;
}

td .btn-outline-warning,
td .btn-sm.btn-outline-warning,
.action-buttons .btn-outline-warning,
.action-buttons .btn-sm.btn-outline-warning {
  background: var(--cm-warning-light) !important;
  color: #D97706 !important;
  border: none !important;
}
td .btn-outline-warning:hover,
.action-buttons .btn-outline-warning:hover {
  background: #FEF3C7 !important;
}

td .btn-outline-info,
td .btn-sm.btn-outline-info,
.action-buttons .btn-outline-info,
.action-buttons .btn-sm.btn-outline-info {
  background: #ECFEFF !important;
  color: var(--cm-accent) !important;
  border: none !important;
}
td .btn-outline-info:hover,
.action-buttons .btn-outline-info:hover {
  background: #CFFAFE !important;
}

td .btn-outline-secondary,
td .btn-sm.btn-outline-secondary,
.action-buttons .btn-outline-secondary,
.action-buttons .btn-sm.btn-outline-secondary {
  background: var(--cm-border-light) !important;
  color: var(--cm-text-secondary) !important;
  border: none !important;
}
td .btn-outline-secondary:hover,
.action-buttons .btn-outline-secondary:hover {
  background: var(--cm-border) !important;
}

/* Consistent spacing (tablas; .action-buttons usa gap) */
td .btn + .btn,
td a.btn + a.btn,
td .btn + a.btn,
td a.btn + .btn {
  margin-left: 3px !important;
}

/* Small buttons */
td .btn-xs,
td .btn-sm,
.action-buttons .btn-xs,
.action-buttons .btn-sm {
  padding: 0.3rem 0.45rem !important;
  font-size: 0.75rem !important;
}

/* ==========================================================================
   CARD HOVER (utilidad opt-in) — ADR 0005. Prohibido en dashboards.
   ========================================================================== */
.card-hover {
  transition: transform 0.2s ease, box-shadow 0.2s ease !important;
}
.card-hover:hover {
  transform: translateY(-6px);
  box-shadow: var(--cm-shadow-lg) !important;
}

/* ==========================================================================
   "OPCIONES" DROPDOWN → THREE DOTS
   ========================================================================== */
/* Transform the "Opciones" dropdown into a three-dots icon button */
.btn-group .btn.btn-secondary.btn-block.dropdown-toggle,
.btn-group .btn.btn-primary.btn-block.dropdown-toggle {
  font-size: 0 !important;
  padding: 0.4rem 0.55rem !important;
  background: transparent !important;
  color: var(--cm-text-secondary) !important;
  border: none !important;
  border-radius: 6px !important;
  min-width: auto !important;
  width: auto !important;
  line-height: 1 !important;
}

/* Hide the caret */
.btn-group .btn.btn-secondary.btn-block.dropdown-toggle::after,
.btn-group .btn.btn-primary.btn-block.dropdown-toggle::after {
  display: none !important;
}

/* Show three dots via pseudo-element */
.btn-group .btn.btn-secondary.btn-block.dropdown-toggle::before,
.btn-group .btn.btn-primary.btn-block.dropdown-toggle::before {
  content: "\f141" !important;
  font-family: "Font Awesome 6 Free" !important;
  font-weight: 900 !important;
  font-size: 1rem !important;
  display: inline-block !important;
}

.btn-group .btn.btn-secondary.btn-block.dropdown-toggle:hover,
.btn-group .btn.btn-primary.btn-block.dropdown-toggle:hover {
  background: var(--cm-primary-light) !important;
  color: var(--cm-primary) !important;
  border: none !important;
}

/* Fix the btn-group width */
.btn-group {
  margin-bottom: 0 !important;
}

/* ==========================================================================
   DATATABLE CONTROLS IN CARD HEADER
   ========================================================================== */
/* Search input in card header — fills parent width */
.dt-header-search input {
  border: 1.5px solid var(--cm-border) !important;
  border-radius: var(--cm-radius-sm) !important;
  padding: 0.35rem 0.75rem !important;
  font-size: 0.8125rem !important;
  width: 100% !important;
  transition: var(--cm-transition) !important;
}

.dt-header-search input:focus {
  border-color: var(--cm-primary) !important;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15) !important;
  outline: none !important;
}

/* Export buttons in card header */
.dt-header-buttons .dt-buttons {
  margin-bottom: 0 !important;
}

/* Card header as single-line flex container
   Handles both: .card-header.row and .card-header > .row */
.card-header.row,
.card-header > .row {
  display: flex !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 0.5rem !important;
  --bs-gutter-x: 0 !important;
  overflow: visible !important;
}

/* Title cannot shrink below content */
.card-header.row > [class*="col-sm"]:first-child,
.card-header > .row > [class*="col-sm"]:first-child {
  min-width: fit-content !important;
}

/* Search input should shrink to allow space for buttons */
.card-header .dt-header-search {
  min-width: 80px !important;
}

/* Action button column should never shrink or hide */
.card-header.row > [class*="col-sm"]:last-child,
.card-header > .row > [class*="col-sm"]:last-child {
  min-width: fit-content !important;
}

/* Title column: shrink to content, push rest to the right */
.card-header.row > [class*="col-sm"]:first-child,
.card-header > .row > [class*="col-sm"]:first-child {
  flex: 0 1 auto !important;
  width: auto !important;
  max-width: none !important;
  margin-right: auto !important;
}

/* Add button column: shrink to content */
.card-header.row > [class*="col-sm"]:last-child,
.card-header > .row > [class*="col-sm"]:last-child {
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
  padding: 0 !important;
}

/* DT search fills available space; buttons shrink to content */
.card-header .dt-header-search,
.card-header.row > .dt-header-search {
  flex: 1 1 0 !important;
  min-width: 120px !important;
}

.card-header .dt-header-buttons,
.card-header.row > .dt-header-buttons {
  flex: 0 0 auto !important;
  display: inline-flex !important;
  width: auto !important;
}

/* Card-header title: match clauses style */
.card-header .card-title,
.card-header h4 {
  font-size: 1rem !important;
  font-weight: 600 !important;
  color: var(--cm-primary) !important;
  margin: 0 !important;
  white-space: nowrap !important;
}

.card-header .card-title i,
.card-header h4 i {
  margin-right: 0.4rem !important;
  color: var(--cm-primary) !important;
}

/* Card-header buttons: compact, matching clauses btn-md sizing */
.card-header.row .btn,
.card-header > .row .btn,
.card-header > .btn {
  padding: 0.35rem 0.85rem !important;
  font-size: 0.8rem !important;
  white-space: nowrap !important;
}

/* Hide any leftover DataTable filter/button containers inside table area */
.dataTables_wrapper > .d-flex {
  display: none !important;
}

/* Keep DataTable info and pagination visible */
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_paginate {
  display: block !important;
}

/* ==========================================================================
   CONTRACT HEADER — Identity + KPI strip header for contract module views
   Used by: contract_dashboard, contract_billing, contract_warranties,
   contract_attachment, contract_sales, contract_renewals, contract_milestones,
   discounts, clauses (via contract_header.php partial)
   ========================================================================== */
.contract-header {
  background: #fff;
  border: 1px solid var(--cm-border);
  border-radius: 12px;
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}

.contract-header__identity {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  margin-bottom: 0.85rem;
}

.contract-header__icon {
  width: 44px;
  height: 44px;
  border-radius: 10px;
  background: rgba(37, 99, 235, 0.10);
  color: var(--cm-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 1.15rem;
  flex-shrink: 0;
}

.contract-header__title-block {
  flex: 1;
  min-width: 0;
}

.contract-header__title {
  margin: 0 !important;
  font-size: 1.4rem !important;
  font-weight: 700 !important;
  color: #0f172a !important;
  line-height: 1.2 !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.contract-header__subtitle {
  margin: 0.2rem 0 0;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
  font-size: 0.8125rem;
  color: var(--cm-text-secondary);
}

.contract-header__sep {
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: var(--cm-border);
  display: inline-block;
}

.contract-header__status {
  margin-left: 0.25rem;
}

.contract-header .status-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.72rem;
  font-weight: 600;
  padding: 0.2em 0.7em;
  border-radius: 999px;
  letter-spacing: 0.01em;
}

.contract-header .status-pill__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

.contract-header .status-pill--active     { background: rgba(16, 185, 129, 0.14); color: #047857; }
.contract-header .status-pill--warning    { background: rgba(245, 158, 11, 0.14); color: #B45309; }
.contract-header .status-pill--terminated { background: rgba(239, 68, 68, 0.14); color: #B91C1C; }

.contract-header__action {
  margin-left: auto;
  flex-shrink: 0;
}

.contract-header__kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.75rem;
}

.contract-header__kpi {
  position: relative;
  background: #fafbfc;
  border: 1px solid var(--cm-border);
  border-radius: 10px;
  padding: 0.75rem 0.95rem;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  overflow: hidden;
  min-width: 0;
}

.contract-header__kpi::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: var(--cm-border);
}

.contract-header__kpi--ok::before      { background: #10B981; }
.contract-header__kpi--warning::before { background: #F59E0B; }
.contract-header__kpi--danger::before  { background: #EF4444; }

.contract-header__kpi-value {
  font-size: 1.6rem;
  font-weight: 700;
  color: #0f172a;
  font-variant-numeric: tabular-nums;
  line-height: 1.05;
}

.contract-header__kpi-value-md {
  font-size: 1.25rem;
  font-weight: 700;
  color: #0f172a;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

.contract-header__kpi-value-sm {
  font-size: 0.9rem;
  font-weight: 600;
  color: #0f172a;
  font-variant-numeric: tabular-nums;
  line-height: 1.3;
}

.contract-header__kpi-end {
  color: #475569;
}

.contract-header__kpi-arrow {
  color: var(--cm-text-muted);
  font-weight: 400;
  margin: 0 0.15rem;
}

.contract-header__kpi-label {
  font-size: 0.72rem;
  color: var(--cm-text-secondary);
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.contract-header__kpi-label-top {
  font-size: 0.7rem;
  color: var(--cm-text-secondary);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin-bottom: 0.1rem;
}

.contract-header__kpi--meta {
  background: #fff;
  gap: 0.3rem;
  justify-content: center;
}

.contract-header__kpi-meta {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.78rem;
  color: var(--cm-text-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.contract-header__kpi-meta i {
  color: var(--cm-text-muted);
  font-size: 0.7rem;
  flex-shrink: 0;
  width: 12px;
  text-align: center;
}

@media (max-width: 992px) {
  .contract-header__kpis {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 576px) {
  .contract-header__identity {
    flex-wrap: wrap;
  }
  .contract-header__action {
    margin-left: 0;
    margin-top: 0.25rem;
  }
  .contract-header__kpis {
    grid-template-columns: 1fr;
  }
  .contract-header__title {
    white-space: normal;
  }
}


/* ==========================================================================
   METRIC CARDS — Canonical KPI/dashboard primitives (promoted from inline)
   Used by: dashboards/general, contract_dashboard, future dashboards.
   See docs/patterns/ui-design-patterns.md (KPI Cards section).
   ========================================================================== */
.metric-card {
  background: var(--rs-surface, #fff);
  border-radius: var(--rs-r-xs, 8px);
  padding: var(--rs-3, 12px) var(--rs-4, 16px);
  box-shadow: var(--rs-sh-sm, 0 2px 4px rgba(0, 0, 0, 0.1));
  text-align: left;
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  position: relative;
  overflow: hidden;
}

.metric-label {
  font-size: var(--rs-text-xs, 12px);
  color: var(--rs-fg-muted, #666);
  font-weight: var(--rs-w-medium, 500);
  margin-bottom: 2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.metric-value {
  font-size: 1.6rem;
  font-weight: var(--rs-w-bold, 700);
  color: var(--rs-blue, #3D52F0);
  margin: 4px 0;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}

.metric-change {
  font-size: 0.7rem;
  margin-top: 2px;
  font-weight: var(--rs-w-medium, 500);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Texto de variación: usar los *-fg (más oscuros) para cumplir 4.5:1 en ~11px */
.metric-change.positive { color: var(--rs-success-fg, #0E8A4F); }
.metric-change.negative { color: var(--rs-danger-fg, #C42337); }
.metric-change.neutral  { color: var(--rs-fg-muted, #666); }

.metric-card--danger .metric-value  { color: var(--rs-danger-fg, #C42337); }
.metric-card--success .metric-value { color: var(--rs-success-fg, #0E8A4F); }
.metric-card--warning .metric-value { color: var(--rs-warning-fg, #B97D0A); }
.metric-card--neutral .metric-value { color: var(--rs-fg, #0f172a); }

.metric-card .metric-icon {
  position: absolute;
  top: 12px;
  right: 14px;
  font-size: 1.1rem;
  opacity: 0.55;
}

/* Unidad que acompaña a un metric-value (ej. "12.345 m²") */
.metric-unit {
  font-size: 0.95rem;
  font-weight: var(--rs-w-semibold, 600);
  color: var(--rs-fg-muted, #888);
  margin-left: 2px;
}

/* Acento lateral por color — refuerza la jerarquía cromática de la banda KPI */
.metric-card.kpi-accent { border-left: 3px solid var(--rs-blue, #3D52F0); }
.metric-card--success.kpi-accent { border-left-color: var(--rs-success-fg, #0E8A4F); }
.metric-card--warning.kpi-accent { border-left-color: var(--rs-warning-fg, #B97D0A); }
.metric-card--danger.kpi-accent  { border-left-color: var(--rs-danger-fg, #C42337); }

/* ==========================================================================
   LIST FILTER BAR — Toolbar de filtros canónico para vistas con tabla.
   Estándar para grillas (/store y siguientes). Acompaña la banda KPI.
   ========================================================================== */
.list-filter-bar {
  background: var(--rs-surface, #fff);
  border: 1px solid var(--rs-150, #ECEDF6);
  border-radius: var(--rs-r-xs, 8px);
  padding: 14px 16px;
  box-shadow: var(--rs-sh-sm, 0 2px 4px rgba(0, 0, 0, 0.06));
}

.list-filter-label {
  display: block;
  font-size: var(--rs-text-xs, 12px);
  font-weight: var(--rs-w-semibold, 600);
  color: var(--rs-fg-muted, #666);
  margin-bottom: 5px;
  letter-spacing: 0.01em;
}

.list-filter-label i {
  margin-right: 5px;
  opacity: 0.7;
  color: var(--rs-blue, #3D52F0);
}

.list-filter-bar .btn-clear-filters {
  white-space: nowrap;
  border: 1px solid var(--rs-150, #ECEDF6);
  color: var(--rs-fg-muted, #666);
  font-weight: var(--rs-w-medium, 500);
}
.list-filter-bar .btn-clear-filters:hover {
  background: var(--rs-100, #F3F3FA);
  color: var(--rs-fg, #0f172a);
}

/* select2 dentro del toolbar: alinear altura con .form-control de Focus2 */
.list-filter-bar .select2-container--bootstrap-5 .select2-selection {
  min-height: calc(1.5em + 0.75rem + 2px);
}

.chart-container {
  background: var(--rs-surface, #fff);
  border-radius: var(--rs-r-xs, 8px);
  padding: var(--rs-3, 12px) var(--rs-4, 16px);
  box-shadow: var(--rs-sh-sm, 0 2px 4px rgba(0, 0, 0, 0.1));
  height: 100%;
  position: relative;
}

/* Quick actions del header: dropdown de atajos fijados por el usuario (genérico). */
.qa-trigger i { font-size: 1.05rem; }
.qa-menu { min-width: 244px; padding: 6px; }
.qa-menu .qa-head { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--rs-fg-muted, #888); padding: 6px 10px 5px; }
.qa-menu .qa-empty { padding: 12px 10px; font-size: .82rem; color: var(--rs-fg-muted, #aaa); text-align: center; }
.qa-menu .qa-item { display: flex; align-items: center; gap: 6px; border-radius: 6px; }
.qa-menu .qa-item i { width: 18px; text-align: center; color: var(--rs-blue, #3D52F0); }

/* Skeleton de carga: shimmer que cubre el gráfico hasta que llegan los datos
   (regla progressive-loading: evita el flash de gráficos en cero).
   Los charts no tienen estructura interna predecible → overlay plano.
   Las metric-cards usan un skeleton estructural (más abajo). */
.chart-container.is-loading::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background:
    linear-gradient(90deg,
      rgba(255, 255, 255, 0) 0%,
      var(--rs-150, #ECEDF6) 50%,
      rgba(255, 255, 255, 0) 100%),
    var(--rs-surface, #fff);
  background-size: 200% 100%;
  animation: rs-skeleton 1.2s ease-in-out infinite;
  z-index: 2;
}

@keyframes rs-skeleton {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@media (prefers-reduced-motion: reduce) {
  .chart-container.is-loading::after {
    animation: none;
    background: var(--rs-100, #F3F3FA);
  }
}

/* Skeleton estructural de metric-cards/KPIs: convierte la silueta real de la card
   (icono, label, valor, variación) en barras shimmer en vez de un bloque plano.
   Cero markup extra: basta la clase .is-loading que aplican las vistas (o el helper
   metricsLoading() en assets/js/main.js). */
.metric-card.is-loading .metric-icon,
.metric-card.is-loading .metric-label,
.metric-card.is-loading .metric-value,
.metric-card.is-loading .metric-change {
  color: transparent !important;
  border-radius: 6px;
  background:
    linear-gradient(90deg,
      rgba(255, 255, 255, 0) 0%,
      var(--rs-150, #ECEDF6) 50%,
      rgba(255, 255, 255, 0) 100%),
    var(--rs-100, #F3F3FA);
  background-size: 200% 100%;
  animation: rs-skeleton 1.2s ease-in-out infinite;
}

.metric-card.is-loading .metric-icon {
  display: inline-block;
  width: 1.6rem;
  height: 1.6rem;
  border-radius: 50%;
  opacity: 1;
}

.metric-card.is-loading .metric-label  { width: 55%; height: 0.7rem; }
.metric-card.is-loading .metric-value  { width: 42%; height: 1.5rem; }
.metric-card.is-loading .metric-change { width: 72%; height: 0.65rem; }
.metric-card.is-loading .metric-unit   { display: none; }

@media (prefers-reduced-motion: reduce) {
  .metric-card.is-loading .metric-icon,
  .metric-card.is-loading .metric-label,
  .metric-card.is-loading .metric-value,
  .metric-card.is-loading .metric-change {
    animation: none;
    background: var(--rs-100, #F3F3FA);
  }
}

/* Skeleton de tablas AJAX (DataTables): overlay que cubre el área de la tabla
   mientras llega el request. Lo inyecta loadDataTableAjax en assets/js/main.js;
   reutiliza la animación rs-skeleton de los charts/metric-cards. */
.dt-skeleton-host {
  position: relative;
  min-height: 320px;
}

.dt-skeleton-overlay {
  position: absolute;
  inset: 0;
  z-index: 3;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 16px 8px;
  background: var(--rs-surface, #fff);
  border-radius: inherit;
}

.dt-skeleton-row {
  display: grid;
  gap: 12px;
  align-items: center;
}

.dt-skeleton-bar {
  display: block;
  height: 14px;
  border-radius: 6px;
  background:
    linear-gradient(90deg,
      rgba(255, 255, 255, 0) 0%,
      var(--rs-150, #ECEDF6) 50%,
      rgba(255, 255, 255, 0) 100%),
    var(--rs-100, #F3F3FA);
  background-size: 200% 100%;
  animation: rs-skeleton 1.2s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .dt-skeleton-bar {
    animation: none;
    background: var(--rs-100, #F3F3FA);
  }
}

.chart-title {
  font-size: 0.9rem;
  font-weight: var(--rs-w-semibold, 600);
  margin-bottom: 10px;
  color: var(--rs-fg-2, #333);
}

.chart-subtitle {
  font-size: 0.72rem;
  font-weight: var(--rs-w-medium, 500);
  color: var(--rs-fg-muted, var(--cm-text-secondary));
  margin-top: -8px;
  margin-bottom: 10px;
}


/* intl-tel-input: ensure flag + dial code don't overlap input text */
.iti {
  display: block !important;
  width: 100% !important;
}

.iti input.form-control,
.iti input[type="tel"].form-control {
  width: 100% !important;
}

.iti.iti--separate-dial-code input.form-control,
.iti.iti--separate-dial-code input[type="tel"] {
  padding-left: 90px !important;
}

/* =============================================
   BS5 Override: Remove default link underline
   BS4 had text-decoration:none by default on <a>,
   BS5 changed to underline. Restore BS4 behavior.
   ============================================= */
a {
  text-decoration: none !important;
}

a:hover {
  text-decoration: none !important;
}

/* Lou multi-select: larger panels */
.ms-container {
  width: 100% !important;
}

.ms-container .ms-selectable,
.ms-container .ms-selection {
  width: 46% !important;
}

.ms-container .ms-list {
  height: 450px !important;
  border-radius: var(--cm-radius-sm) !important;
  border-color: var(--cm-border) !important;
}

/* BS5 Override: btn-block removed in BS5 — restore it */
.btn-block {
  display: block !important;
  width: 100% !important;
}

/* ==========================================================================
   APP LAUNCHER
   ========================================================================== */

/* Launcher (Command Palette trigger) en el topbar.
   Se presenta como buscador para comunicar la acción real: abrir Ctrl+K. */
.header-right .nav-item.header-profile:has(#launcher-btn) {
  padding-left: 10px;
}

#launcher-btn.launcher-search {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  height: 38px;
  min-width: 240px;
  padding: 0 0.5rem 0 0.75rem;
  border: 1px solid var(--cm-border);
  border-radius: var(--cm-radius-sm);
  background: var(--cm-card-bg, #fff);
  color: var(--cm-text-muted);
  font-size: 0.85rem;
  cursor: text;
  transition: border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
}

.launcher-search__icon {
  font-size: 0.85rem;
  color: var(--cm-text-muted);
  transition: color 0.2s ease;
}

.launcher-search__label {
  flex: 1 1 auto;
  text-align: left;
  white-space: nowrap;
}

.launcher-search__kbd {
  display: inline-flex;
  gap: 2px;
  flex: 0 0 auto;
}

.launcher-search__kbd kbd {
  font-family: inherit;
  font-size: 0.68rem;
  font-weight: 600;
  line-height: 1;
  padding: 3px 5px;
  border-radius: 5px;
  background: var(--cm-bg, #f1f3f5);
  border: 1px solid var(--cm-border);
  color: var(--cm-text-secondary);
}

#launcher-btn.launcher-search:hover,
#launcher-btn.launcher-search:focus-visible {
  border-color: var(--cm-primary);
  color: var(--cm-text-secondary);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
  outline: none;
}

#launcher-btn.launcher-search:hover .launcher-search__icon {
  color: var(--cm-primary);
}

/* Pantallas chicas: colapsa a solo el ícono (la barra ocuparía demasiado). */
@media (max-width: 768px) {
  #launcher-btn.launcher-search {
    min-width: 0;
    width: 38px;
    padding: 0;
    justify-content: center;
  }
  .launcher-search__label,
  .launcher-search__kbd {
    display: none;
  }
}

/* Section title in topbar */
.launcher-section-title {
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--cm-primary);
  margin-right: 1rem;
  padding-right: 1rem;
  border-right: 2px solid var(--cm-border);
}









































































































