/* ---
Design System: SecurIA Modern - Diseño Global Unificado
--- */

:root {
  /* Typography */
  --font-family: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif;

  /* Layout & Background (BitStream) */
  --bg: #F7F8FA;
  --surface: #FFFFFF;
  --border: #EAECEF;

  /* Text Colors */
  --text: #1A202C;
  --muted: #6B7280;
  --placeholder: #9CA3AF;

  /* Brand Palette (BitStream) */
  /* Paleta azul OSCURA */
  --brand: #1F3A8A;        /* base (dark indigo/blue) */
  --brand-600: #1A337A;    /* hover */
  --brand-700: #152C69;    /* active */
  --brand-100: #DEE4F4;    /* suaves fondos */
  --brand-50: #EDF1FA;     /* aún más tenue */

  /* Status Colors */
  --success: #0D925D;
  --warning: #F59E0B;
  --danger: #EF4444;
  --info: #0284C7;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(16,24,40,.06);
  --shadow-md: 0 4px 10px rgba(16,24,40,.08);

  /* Radii */
  --radius: 12px;
  --radius-sm: 10px;
  --radius-pill: 999px;

  /* Typography Scale */
  --fs-h1: 24px; --lh-h1: 32px; --fw-h1: 700;
  --fs-h2: 18px; --lh-h2: 24px; --fw-h2: 600;
  --fs-h3: 16px; --lh-h3: 22px; --fw-h3: 600;
  --fs-body: 15px; --lh-body: 22px; --fw-body: 500;
  --fs-small: 14px; --lh-small: 20px; --fw-small: 500;
  --fs-label: 12px; --lh-label: 16px; --fw-label: 600;

  /* Component Heights */
  --h-input: 44px;
  --h-btn: 44px;
  --h-btn-lg: 52px;
  --h-btn-icon: 40px;
  --h-topbar: 72px;

  /* Spacing Scale */
  --space-4: 4px;
  --space-8: 8px;
  --space-12: 12px;
  --space-16: 16px;
  --space-20: 20px;
  --space-24: 24px;
  --space-32: 32px;
  /* Alias consistente para normalizaciones previas que usan --radius-12 */
  --radius-12: 12px; /* mantener igual que --radius deseado */
}

/* ---
Global Styles & Typography
--- */

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
  background-color: var(--bg);
  color: var(--text);
  font-family: var(--font-family);
  font-size: 16px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

h1, .h1 { 
  font-size: var(--fs-h1); 
  line-height: var(--lh-h1); 
  font-weight: var(--fw-h1); 
  margin: 0 0 var(--space-20) 0;
}

h2, .h2 { 
  font-size: var(--fs-h2); 
  line-height: var(--lh-h2); 
  font-weight: var(--fw-h2); 
  margin: 0 0 var(--space-16) 0;
}

h3, .h3 { 
  font-size: var(--fs-h3); 
  line-height: var(--lh-h3); 
  font-weight: var(--fw-h3); 
  margin: 0 0 var(--space-12) 0;
}

p {
  margin: 0 0 var(--space-16) 0;
  font-size: var(--fs-body);
  line-height: var(--lh-body);
}

label, .form-label { 
  display: block;
  font-size: var(--fs-label); 
  line-height: var(--lh-label); 
  font-weight: var(--fw-label); 
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-bottom: var(--space-8);
}

small, .text-muted {
  font-size: var(--fs-small);
  line-height: var(--lh-small);
  color: var(--muted);
}

hr {
  border: none;
  border-top: 1px solid var(--border);
  margin: var(--space-16) 0;
}

/* ---
App Shell / Layout
--- */

.app-shell {
  display: flex;
  height: 100vh;
}

.sidebar {
  width: 240px;
  flex-shrink: 0;
  background-color: var(--surface);
  border-right: 1px solid var(--border);
  padding: var(--space-16);
  display: flex;
  flex-direction: column;
}

.sidebar-header {
  padding: var(--space-12) var(--space-12) var(--space-24);
  display: flex;
  align-items: center;
  gap: var(--space-12);
  justify-content: center;
}

.sidebar-logo {
  display: block;
  width: 50%; /* mitad del ancho del contenedor */
  height: auto; /* mantiene proporción */
  max-width: 100%;
  margin-left: 0;
  margin-right: 0;
}

/* Mostrar solo el logo en la cabecera lateral (ocultar texto) */
.sidebar-header span { display: none; }

.sidebar-nav {
  flex-grow: 1;
}

.nav-item {
  display: flex;
  align-items: center;
  padding: 12px 20px;
  border-radius: 10px;
  color: var(--muted);
  text-decoration: none;
  font-weight: 500;
  font-size: var(--fs-body);
  margin-bottom: var(--space-8);
  transition: all 150ms ease;
  position: relative;
  background: transparent;
}

.nav-item:hover {
  background-color: var(--brand-50);
  color: var(--brand-700);
}

.nav-item.active {
  background-color: var(--brand-100);
  color: var(--brand-700);
  font-weight: 600;
}

/* Navegación deshabilitada (features próximas) */
.nav-item.nav-item-disabled {
  opacity: .45;
  filter: grayscale(.4) brightness(.95);
  cursor: not-allowed;
}
.nav-item.nav-item-disabled:hover {
  background: transparent;
  color: var(--muted);
}

/* Contenedor para etiqueta secundaria en items deshabilitados */
.nav-disabled-wrap { display:flex; flex-direction:column; line-height:1.1; }
.nav-disabled-wrap .nav-label-line { display:flex; align-items:center; gap:8px; }
.nav-coming-inline {
  margin-top:4px;
  font-size:11px;
  font-weight:600;
  letter-spacing:.5px;
  text-transform:uppercase;
  color: var(--brand-600);
  opacity: .9;
}

/* Nueva pila para alineación vertical conjunta (icono + texto principal + sub) */
.nav-item .nav-text-stack { display:flex; flex-direction:column; line-height:1.15; }
.nav-item .nav-text-main { font-weight:500; font-size: var(--fs-body); }
.nav-item .nav-text-sub { margin-top:2px; font-size:11px; font-weight:600; letter-spacing:.5px; text-transform:uppercase; color: var(--brand-600); }
.nav-item.nav-item-disabled { align-items:flex-start; }
.nav-item.nav-item-disabled i { margin-top:2px; }

.nav-item i {
  font-size: 20px;
  margin-right: var(--space-16);
  width: 20px;
  text-align: center;
}

.main-wrapper {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.topbar {
  height: var(--h-topbar);
  background-color: var(--surface);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--space-32);
  flex-shrink: 0;
}

/* Ajuste estabilidad topbar en móviles: evita desplazamientos bruscos al cambiar a vista scan */
@media (max-width: 640px) {
  .topbar { transition: none !important; }
  body.nav-scan-active .topbar { position:sticky !important; top:0 !important; background:#fff !important; z-index:1200 !important; }
}

.topbar-left {
  display: flex;
  align-items: center;
  gap: var(--space-16);
}

.topbar-title {
  font-size: var(--fs-h2);
  font-weight: 500;
  color: var(--text);
  margin: 0;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.btn-back {
  height: 36px;
  padding: 0 var(--space-16);
  font-size: var(--fs-small);
  border-radius: var(--radius-sm);
}

.btn-back i {
  margin-right: var(--space-8);
  font-size: 16px;
}

.topbar-actions {
  display: flex;
  align-items: center;
  gap: var(--space-16);
}

.user-info {
  display: flex;
  align-items: center;
  gap: var(--space-12);
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--muted);
  background: #F7F8FA;
  padding: 4px 12px;
  border-radius: 9999px;
}

.user-info i {
  font-size: 24px;
}

.content-area {
  flex: 1;
  padding: var(--space-32);
  overflow-y: auto;
  max-width: 1280px;
  margin: 0 auto;
  width: 100%;
}

/* ---
Component: Card
--- */

.card {
  background-color: var(--surface);
  border: 1px solid var(--border);
  /* Unificado: mismo radio que capas grises (headers / footers) */
  border-radius: var(--radius);
  box-shadow: 0 2px 6px rgba(0,0,0,0.03);
  margin-bottom: var(--space-24);
  transition: box-shadow 150ms ease;
}

/* Desactivado efecto elevación en hover */
.card:hover { box-shadow: inherit; }

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

.card-body {
  padding: var(--space-24);
}

.card-footer {
  padding: var(--space-20) var(--space-24);
  background-color: var(--brand-50);
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: flex-end;
  gap: var(--space-12);
  border-radius: 0 0 var(--radius) var(--radius);
}

/* ---
NUEVO: Modificadores de estado para tarjetas
--- */
.card-help {
  background-color: #F0FDF4; /* Verde claro de éxito */
  border-color: #A7F3D0;
}

.card-help h1, .card-help h2, .card-help h3 {
  color: #15803D; /* Verde oscuro para texto */
}

.card-help ul {
  list-style-position: inside;
  padding-left: 0;
  color: #166534;
}

.card-help ul li {
   margin-bottom: var(--space-8);
}

/* ---
Component: Buttons
--- */

.btn {
  height: var(--h-btn);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 var(--space-20);
  border-radius: var(--radius);
  font-weight: 600;
  font-size: var(--fs-body);
  line-height: 1;
  border: 1px solid transparent;
  text-decoration: none;
  cursor: pointer;
  transition: all 150ms ease;
  white-space: nowrap;
}

.btn:focus-visible, .btn:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
}

.btn i {
  margin-right: var(--space-12);
  font-size: 18px;
}

.btn-primary {
  background-color: var(--brand);
  color: #FFF;
  border-color: var(--brand);
  box-shadow: 0 2px 4px rgba(37,63,151,0.25);
  transition: background-color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.btn-primary:hover {
  background-color: var(--brand-600);
  border-color: var(--brand-600);
  box-shadow: 0 3px 6px rgba(37,63,151,0.30);
}
.btn-primary:active {
  background-color: var(--brand-700);
  border-color: var(--brand-700);
  box-shadow: 0 2px 4px rgba(37,63,151,0.35) inset;
}
.btn-primary:focus-visible { box-shadow: 0 0 0 3px rgba(44,74,175,0.35); }

.btn-secondary {
  background: transparent;
  color: var(--brand);
  border: 1px solid var(--border);
}

.btn-secondary:hover {
  background-color: var(--brand-50);
  border-color: #D1D5DB;
}

.btn-ghost {
  background-color: transparent;
  color: var(--muted);
  border-color: transparent;
  font-size: var(--fs-small);
}

.btn-ghost:hover {
  background-color: var(--brand-50);
  color: var(--brand);
}

.btn-icon {
  width: var(--h-btn-icon);
  height: var(--h-btn-icon);
  padding: 0;
  background: transparent;
  border: none;
  color: var(--muted);
  border-radius: 50%;
  transition: background-color .15s ease, color .15s ease;
}

.btn-icon:hover {
  background-color: var(--brand-100);
  border-color: var(--brand-100);
  color: var(--brand-700);
}

.btn-icon i {
  margin: 0;
  font-size: 20px;
}

/* Logout: hover con fondo circular explícito */
#logoutButton { border-radius: 50% !important; }
#logoutButton:hover { background: var(--brand-50) !important; color: var(--brand-700) !important; border-radius: 50% !important; }

.btn-sm {
  height: 32px;
  padding: 0 var(--space-12);
  font-size: var(--fs-small);
  border-radius: var(--radius-sm);
}

.btn-lg {
  height: var(--h-btn-lg);
  padding: 0 var(--space-32);
  font-size: var(--fs-h3);
}

.btn-success {
  background-color: var(--success);
  color: white;
  border-color: var(--success);
}

.btn-success:hover {
  background-color: #15803D;
  border-color: #15803D;
  color: white;
  transform: none;
}

.btn-danger {
    background-color: var(--danger);
    color: white;
    border-color: var(--danger);
}

.btn-danger:hover {
    background-color: #d02a2a;
    border-color: #d02a2a;
    color: white;
}

/* ---
Component: Form Inputs
--- */

.form-group {
  margin-bottom: var(--space-20);
}

.form-group:last-child {
  margin-bottom: 0;
}

.form-control, .form-select {
  height: var(--h-input);
  width: 100%;
  padding: 0 var(--space-16);
  border: 1px solid var(--border);
  border-radius: 10px;
  background-color: #F7F8FA;
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  transition: all 150ms ease;
}

.form-control::placeholder {
  color: var(--placeholder);
  font-weight: 400;
}

.form-control:focus, .form-select:focus {
  outline: none;
  border-color: var(--brand);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.25);
  background-color: var(--surface);
}

textarea.form-control {
  height: auto;
  min-height: 80px;
  padding: var(--space-12) var(--space-16);
  resize: vertical;
}

.form-check {
  display: flex;
  align-items: center;
  margin: var(--space-16) 0;
}

.form-check-input {
  width: 16px;
  height: 16px;
  margin-right: var(--space-12);
  accent-color: var(--brand);
}

.form-check-label {
  text-transform: none;
  letter-spacing: 0;
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  margin-bottom: 0;
}

/* ---
Component: Chips / Badges
--- */

.chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-8);
  padding: 6px var(--space-12);
  border-radius: var(--radius-pill);
  font-size: var(--fs-label);
  font-weight: 600;
  line-height: 1;
}

.chip-success { 
  background-color: #E6F7F0; 
  color: #0D925D; 
}

.chip-warn { 
  background-color: #FEF3C7; 
  color: #92400E; 
}

.chip-neutral {
  background-color: var(--border);
  color: var(--muted);
}

/* ---
Component: Table
--- */

.table-wrapper {
  overflow-x: auto;
  border-radius: var(--radius);
  border: 1px solid var(--border);
  overflow: hidden;
}

.table {
  width: 100%;
  border-collapse: collapse;
  background-color: var(--surface);
  margin: 0;
}

.table thead {
    position: sticky;
    top: 0;
    z-index: 10;
}

.table th {
  background: transparent;
  color: var(--muted);
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .05em;
  padding: 16px 16px; /* espacio igual arriba y abajo */
  text-align: left;
  border-bottom: 1px solid var(--border);
}

.table td {
  border: none;
  padding: 20px 16px;
  font-size: 14px;
  font-weight: 500;
  color: var(--text);
  border-bottom: 1px solid var(--border);
  background: transparent;
  vertical-align: middle;
}

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



/* Evitar que el contenedor complete parezca azul al pasar el mouse por múltiples filas */
#main-menu .table-wrapper:hover { background-color: var(--surface) !important; }

/* Table Hierarchy Styles */
/* (Eliminado bloque legacy .table-day-header – centralizado ahora en registro.css) */

.table-lote-header {
  background-color: #F8FAFC !important;
  cursor: pointer;
  transition: all 150ms ease;
}

.table-lote-header:hover {
  background-color: #F6F7FA !important;
}

.table-lote-header td {
  font-weight: 600;
  color: var(--muted);
  padding-left: var(--space-32) !important;
  font-size: var(--fs-small) !important;
}

.record-row-lote td {
  padding-left: 48px !important;
  background-color: #FBFCFF;
  border-left: 3px solid var(--border);
}
.record-row-lote:hover td { background-color:#F6F7FA; }

.bi-caret-right-fill, .bi-caret-down-fill {
  transition: transform 150ms ease;
  margin-right: var(--space-8);
}

.active-row {
  background-color: rgba(233, 238, 248, 0.7) !important;
}

/* ---
Component: Modal
--- */
.modal-content {
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  border: none;
}
.modal-header {
  padding: var(--space-24);
  border-bottom: 1px solid var(--border);
}
.modal-title {
  margin: 0;
  font-size: var(--fs-h2);
}
.modal-body {
  padding: var(--space-24);
}
.modal-body p {
  font-size: var(--fs-body);
  color: var(--text);
  margin: 0;
}
.modal-body p.text-muted {
  color: var(--muted);
  font-size: var(--fs-small);
  margin-top: var(--space-4);
}
.modal-footer {
  padding: var(--space-20) var(--space-24);
  background-color: var(--brand-50);
  border-top: 1px solid var(--border);
  border-radius: 0 0 var(--radius) var(--radius);
}
.btn-close {
  opacity: 1;
  border-radius: 50%;
  background-color: var(--border);
  width: 32px;
  height: 32px;
  transition: all 150ms ease;
  filter: invert(1);
}
.btn-close:hover {
  background-color: var(--muted);
  color: white;
}
.modal-icon {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto var(--space-16);
}
.modal-icon i {
  font-size: 28px;
  color: white;
}
.modal-icon-success {
  background-color: var(--success);
}
.modal-icon-danger {
  background-color: var(--danger);
}

/* ---
Login View
--- */

.login-view {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  width: 100%;
  padding: var(--space-20);
}

.login-card {
  width: 100%;
  max-width: 420px;
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  padding: var(--space-32);
}

.login-logo {
  height: 60px;
}

/* ---
Page Header & Breadcrumbs
--- */

.page-header {
  margin-bottom: var(--space-32);
}

.page-header h1 {
  font-size: var(--fs-h1);
  font-weight: var(--fw-h1);
  color: var(--text);
  margin-bottom: var(--space-8);
}

.page-subtitle {
  font-size: var(--fs-body);
  color: var(--muted);
  margin: 0;
}

.page-header-content {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--space-24);
}

.page-header-actions {
  display: flex;
  align-items: center;
  gap: var(--space-12);
  flex-shrink: 0;
}

.breadcrumb-nav {
  margin-bottom: var(--space-24);
}

.breadcrumb {
  display: flex;
  align-items: center;
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: var(--fs-small);
}

.breadcrumb-item {
  display: flex;
  align-items: center;
}

.breadcrumb-item + .breadcrumb-item::before {
  content: "/";
  margin: 0 var(--space-8);
  color: var(--muted);
}

.breadcrumb-link {
  color: var(--brand);
  text-decoration: none;
  display: flex;
  align-items: center;
  gap: var(--space-8);
  transition: color 150ms ease;
  cursor: pointer;
}

.breadcrumb-link:hover {
  color: var(--brand-600);
}

.breadcrumb-item.active {
  color: var(--muted);
  font-weight: 500;
}

/* ---
Dashboard View
--- */

.dashboard-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: var(--space-20);
  margin-bottom: var(--space-32);
}

.stat-card {
  background-color: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: var(--space-24);
  display: flex;
  align-items: center;
  gap: var(--space-16);
  transition: all 150ms ease;
}

/* Desactivado efecto hover en tarjetas de estadística */
.stat-card:hover { box-shadow: inherit; transform:none; }

.stat-icon {
  width: 48px;
  height: 48px;
  border-radius: var(--radius);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  flex-shrink: 0;
}

.stat-icon-primary {
  background-color: var(--brand-100);
  color: var(--brand);
}
.stat-icon-warning {
  background-color: #FEF3C7;
  color: var(--warning);
}
.stat-icon-success {
  background-color: #DCFCE7;
  color: var(--success);
}
.stat-icon-info {
  background-color: #DBEAFE;
  color: var(--info);
}

.stat-content h3 {
  font-size: var(--fs-h1);
  font-weight: var(--fw-h1);
  color: var(--text);
  margin: 0 0 var(--space-4) 0;
}

.stat-content p {
  font-size: var(--fs-small);
  color: var(--muted);
  margin: 0;
  font-weight: 500;
}

.quick-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-16);
}

.activity-list {
  /* Ajustado para mostrar ~6 items (antes 8) */
  max-height: 450px;
  overflow-y: auto;
}
/* Consistencia visual con filas de registro */
.activity-item { padding:16px 20px; }
.activity-icon { width:40px; height:40px; font-size:18px; }
.activity-title { font-size:14px; font-weight:500; margin-bottom:4px; }
.activity-subtitle { font-size:12px; font-weight:500; }
.activity-time { font-size:12px; font-weight:600; }
/* Espaciado botón 'Ver todos' en actividad reciente */
#view-all-records { display:inline-flex; align-items:center; gap:6px; }
#view-all-records i { margin:0 !important; }
.activity-item {
  display: flex;
  align-items: center;
  gap: var(--space-16);
  padding: var(--space-16) var(--space-24);
  border-bottom: 1px solid var(--border);
  transition: background-color 150ms ease;
}
.activity-item:hover {
  background-color: var(--brand-50);
}
.activity-item:last-child {
  border-bottom: none;
}
.activity-icon {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  flex-shrink: 0;
}
.activity-icon.ingreso {
  background-color: #DCFCE7;
  color: var(--success);
}
.activity-icon.egreso {
  background-color: #F3F4F6;
  color: var(--muted);
}
.activity-content {
  flex: 1;
  min-width: 0;
}
.activity-title {
  font-weight: 600;
  font-size: var(--fs-body);
  color: var(--text);
  margin: 0 0 var(--space-4) 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.activity-subtitle {
  font-size: var(--fs-small);
  color: var(--muted);
  margin: 0;
}
.activity-time {
  font-size: var(--fs-label);
  color: var(--muted);
  font-weight: 600;
  flex-shrink: 0;
}

/* ---
Search & Banners
--- */

.search-container {
  display: flex;
  align-items: center;
}

.search-input-wrapper {
  position: relative;
  width: 280px;
}

.search-input {
  border-radius: var(--radius-pill) !important;
  padding-right: 48px !important;
  background-color: var(--surface) !important;
}


/* Buscador minimalista y alineado */
.search-btn {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: none;
  color: #b0b6c3;
  border: none;
  box-shadow: none;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: color .18s;
}
.search-btn i {
  font-size: 18px;
  margin: 0;
}
.search-btn:hover, .search-btn:focus {
  background: none;
  color: var(--brand-600);
  box-shadow: none;
}

.search-btn:hover {
  background: none;
  color: var(--brand-600);
}

/* Registro: botón de lupa con fondo circular en hover (sin romper estilos globales) */
#searchButton { border-radius: 50% !important; }
#searchButton:hover, #searchButton:focus-visible {
  background: transparent !important;
  color: var(--brand-700) !important;
  border-radius: 50% !important;
}

.alert-banner {
  background-color: #FEF2F2;
  border-bottom: 1px solid #FECACA;
  padding: var(--space-12) var(--space-24);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.alert-content {
  display: flex;
  align-items: center;
  gap: var(--space-12);
  color: #B91C1C;
  font-weight: 600;
  font-size: var(--fs-small);
}

.alert-content i {
  font-size: 16px;
}

/* ---
NUEVO: Estilos para estados de carga y error
--- */

.loading-placeholder {
  color: var(--muted);
  padding: var(--space-32) var(--space-24);
  text-align: center;
  font-style: italic;
  font-size: var(--fs-body);
}

.error-message {
  padding: var(--space-16) var(--space-24);
  background-color: #FEF2F2; /* Rojo claro */
  color: #B91C1C; /* Rojo oscuro */
  border-left: 4px solid var(--danger);
  margin: var(--space-16) 0;
  font-weight: 500;
}

/* ---
Time Indicators & Tooltips
--- */
.time-warning {
  position: relative;
}
.time-warning::after {
  content: '';
  position: absolute;
  top: 50%;
  right: -8px;
  transform: translateY(-50%);
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background-color: var(--warning);
}
.time-critical::after {
  background-color: var(--danger);
  animation: pulse 1s infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
.time-badge {
  font-size: 10px;
  padding: 2px 6px;
  border-radius: var(--radius-pill);
  margin-left: var(--space-8);
  font-weight: 600;
}
.time-badge.warning {
  background-color: #FEF3C7;
  color: #92400E;
}
.time-badge.critical {
  background-color: #FEE2E2;
  color: #B91C1C;
}

.obs-tooltip {
  position: relative;
}
.obs-tooltip::before {
  content: attr(data-tooltip);
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%) translateY(-4px);
  background-color: var(--text);
  color: white;
  padding: var(--space-8) var(--space-12);
  border-radius: var(--radius-sm);
  font-size: var(--fs-label);
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: all 150ms ease;
  z-index: 1000;
}
.obs-tooltip:hover::before {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

/* ---
Manual Form Layout
--- */

.manual-form .form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-20);
  margin-bottom: var(--space-24);
}

.manual-form .form-row:last-child {
  margin-bottom: 0;
}

.form-text {
  font-size: var(--fs-label);
  color: var(--muted);
  margin-top: var(--space-8);
}

/* ---
Scan View
--- */

.scan-status {
  display: flex;
  align-items: center;
  justify-content: center;
}
.scan-indicator {
  display: flex;
  align-items: center;
  gap: var(--space-12);
}
.indicator-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background-color: var(--success);
  animation: pulse 1.5s infinite;
}
.scan-text {
  font-size: var(--fs-small);
  font-weight: 600;
  color: var(--muted);
}
.video-container {
  position: relative;
  overflow: hidden;
  background-color: #000;
}
.scan-overlay {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.scan-frame {
  width: 60%;
  height: 60%;
  max-width: 60vw;
  max-height: 60vh;
  border: 3px solid rgba(255, 255, 255, 0.7);
  border-radius: var(--radius);
  position: absolute;
  top: 20%;
  left: 20%;
  right: 20%;
  bottom: 20%;
  box-shadow: 0 0 0 9999px rgba(0,0,0,0.5);
  pointer-events: none;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: border-color 0.12s linear, box-shadow .25s ease;
}

.scan-frame.success {
  border-color: var(--success) !important;
  box-shadow: 0 0 0 9999px rgba(0,0,0,0.55), 0 0 10px 2px rgba(13,146,93,0.55) inset;
}

/* Región activa sutil donde se intenta decodificar (puede cambiar de tamaño/posición) */
.scan-active-region {
  position: absolute;
  border: 2px dashed rgba(255,255,255,0.40);
  border-radius: 3px;
  box-sizing: border-box;
  top: 0; left: 0; width: 0; height: 0;
  pointer-events: none;
  opacity: 0;
  transition: none; /* seguimiento en tiempo real sin delay */
}
.scan-active-region.visible { opacity: 1; }
.scan-active-region.progressing {
  border-color: rgba(255, 200, 80, 0.65);
  box-shadow: 0 0 6px 2px rgba(255,200,80,0.35);
}
.scan-active-region.locked {
  border-color: rgba(13,146,93,0.85);
  box-shadow: 0 0 10px 2px rgba(13,146,93,0.55);
}

/* (Eliminados controles zoom/torch) */

/* Mensaje distancia / blur */
#scan-distance-msg {
  position: absolute;
  top: 12px;
  left: 50%;
  transform: translateX(-50%);
  background: rgba(0,0,0,0.55);
  color: #fff;
  font-size: 13px;
  padding: 6px 14px;
  border-radius: 999px;
  opacity: 0;
  transition: opacity .18s ease;
  letter-spacing:.3px;
  pointer-events: none;
}
#scan-distance-msg.visible { opacity: 1; }

/* ---
Bootstrap Grid Compatibility & Utilities
--- */
.row {
  display: flex;
  flex-wrap: wrap;
  margin-right: calc(-0.5 * var(--space-16));
  margin-left: calc(-0.5 * var(--space-16));
}
.row > * {
  flex-shrink: 0;
  width: 100%;
  max-width: 100%;
  padding-right: calc(var(--space-16) * .5);
  padding-left: calc(var(--space-16) * .5);
  margin-top: 0;
}
@media (min-width: 768px) {
  .col-md-6 {
    flex: 0 0 auto;
    width: 50%;
  }
}
.fw-medium, .fw-bold { font-weight: 600 !important; }
.d-grid { display: grid !important; }
.gap-3 { gap: var(--space-16) !important; }
.mt-4 { margin-top: var(--space-24) !important; }
.text-center { text-align: center !important; }
.mb-0 { margin-bottom: 0 !important; }
.mb-4 { margin-bottom: var(--space-24) !important; }
.my-3 { margin-top: var(--space-16) !important; margin-bottom: var(--space-16) !important; }
.p-0 { padding: 0 !important; }
.p-4 { padding: var(--space-24) !important; }
.mt-3 { margin-top: var(--space-16) !important; }
.opacity-50 { opacity: .5 !important; }
.mobile-action-bar .opacity-50 { display:none !important; }

/* Forzar ocultar items deshabilitados en cualquier ancho cuando se active modo móvil via clase */
html.is-mobile .sidebar-nav .nav-item.nav-item-disabled { display:none !important; }
.d-none { display: none !important; }

/* ---
Mobile Action Bar
--- */

.mobile-action-bar {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: var(--surface);
  border-top: 1px solid var(--border);
  padding: var(--space-8) var(--space-12);
  display: flex;
  justify-content: space-around;
  z-index: 1000;
  box-shadow: 0 -2px 10px rgba(0,0,0,0.1);
  padding-bottom: calc(var(--space-8) + env(safe-area-inset-bottom));
}

.mobile-action-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-6);
  background: none;
  border: none;
  color: var(--muted);
  font-size: var(--fs-label);
  font-weight: 600;
  cursor: pointer;
  transition: all 150ms ease;
  border-radius: var(--radius-sm);
  min-width: 60px;
}

.mobile-action-btn:hover,
.mobile-action-btn.active {
  color: var(--brand);
  background-color: var(--brand-50);
}

.mobile-action-btn i {
  font-size: 18px;
}

.mobile-action-btn span {
  font-size: 9px;
  line-height: 1;
}

/* ---
Responsive Design System
--- */
@media (max-width: 992px) {
  .manual-form .form-row {
    grid-template-columns: 1fr;
    gap: var(--space-16);
  }
   .dashboard-stats {
    grid-template-columns: repeat(2, 1fr);
  }
}
  /* Escala tipografía global ligeramente menor */
  body { font-size: 15px; }
  h1.topbar-title, .topbar-title { font-size: 12px !important; }
  .card { margin-bottom: var(--space-16) !important; }
  .card-body { padding: 18px 18px !important; }
  .card-header { padding: 14px 18px !important; }
  .stat-card { padding: 16px 16px !important; }
  .stat-card .stat-icon { width:38px; height:38px; font-size:18px; }
  .stat-card h3 { font-size:18px !important; }
  /* Más aire entre bloques principales */
  .dashboard-stats { gap: var(--space-12) !important; margin-bottom: var(--space-16) !important; }
  .quick-actions { gap: var(--space-12) !important; }
  /* Inputs y botones un poco más compactos */
  .form-control, .form-select { min-height:40px !important; padding:0 12px !important; font-size:14px !important; }
  .btn { min-height:40px !important; padding:10px 18px !important; font-size:14px !important; }
  .btn-icon { width:38px !important; height:38px !important; }
  /* Lista móvil registros: más separación entre filas */
  .mobile-table-row { margin-bottom: 14px; }
  .mobile-row-header { padding: 12px 14px; }
  .mobile-dni { font-size:14px; }
  .mobile-lote { font-size:11px; }
  /* Reducir grid interior para disminuir altura total al expandir */
  .mobile-detail-grid { grid-template-columns: 1fr; gap:10px; margin-bottom:12px; }
  .mobile-detail-label { font-size:10px; }
  .mobile-detail-value { font-size:12px; }
  /* Paneles flotantes (notificaciones/export) ligeramente más angostos en móvil */
  .overstay-panel { max-width:420px; }

@media (max-width: 768px) {
  /* Global Adjustments */
  :root { --mobile-nav-height: 66px; }
  .app-shell { flex-direction: column; }
  .content-area {
    padding: var(--space-16);
    /* Dejamos espacio para la nueva barra inferior de navegación */
    padding-bottom: calc(var(--mobile-nav-height) + var(--space-24) + env(safe-area-inset-bottom));
  }

  /* Sidebar ahora funciona como barra de navegación inferior fija */
  .sidebar {
    position: fixed;
    bottom: 0; left: 0; right: 0;
    width: 100%;
    height: var(--mobile-nav-height);
    flex-direction: row;
    align-items: stretch;
    justify-content: space-around;
    overflow-x: auto;
    border-right: none;
    border-bottom: none;
    border-top: 1px solid var(--border);
    padding: var(--space-8) var(--space-12);
    background: var(--surface);
    z-index: 1200;
    box-shadow: 0 -2px 6px rgba(0,0,0,0.05);
  }
  .sidebar-header { display: none; }
  .sidebar-nav {
    display: flex;
    flex-direction: row;
    gap: var(--space-4);
    width: 100%;
  /* Tras ocultar items deshabilitados, distribuimos equitativamente los activos */
  justify-content: space-evenly;
  }
  .nav-item {
    flex: 1 1 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 4px 4px 2px;
    margin-bottom: 0;
    font-size: 11px;
    border-radius: 10px;
    min-height: unset;
  }
  /* Ocultar entradas deshabilitadas (las de baja opacidad) en la barra inferior móvil */
  .sidebar-nav .nav-item.nav-item-disabled { display: none !important; }
  .nav-item i {
    margin: 0;
    font-size: 18px;
    line-height: 1;
  }
  /* Compactar texto secundario en items deshabilitados */
  .nav-item .nav-text-main { font-size: 11px; }
  .nav-item .nav-text-sub { display: none; }

  /* Ocultar antigua barra de acciones móvil para no duplicar elementos */
  /* La barra inferior específica (.mobile-action-bar) vuelve a estar activa sólo cuando la necesitamos.
    Si se prefiere usar únicamente la barra convertida desde .sidebar, dejar comentado. */
  /* .mobile-action-bar { display: none !important; } */

  /* Topbar */
  .topbar {
    padding: 0 var(--space-16);
    height: 60px;
    position: sticky;
    top: 0;
    z-index: 1200; /* por encima de contenido pero debajo de overlays */
    background: var(--surface);
    backdrop-filter: blur(6px);
  }
  /* Asegurar scroll interno sin cortar y dejar espacio inicial si hay superposición */
  .content-area {
    padding-top: calc(60px + var(--space-16));
  }
  .topbar-left {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-4);
  }
  .topbar-title {
    font-size: var(--fs-h3);
  }
  
  /* Page Headers */
  .page-header-content {
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-16);
  }
  /* Mostrar contenedor de acciones en móvil solo para el botón icono */
  .page-header { position:relative; }
  .page-header-actions {
    display:flex;
    justify-content:flex-end;
    align-items:flex-start;
    width:100%;
    min-height:0;
    padding:0;
  }
  /* Ajustar spacing del título al dejar botón flotante */
  .page-header-content > div:first-child { padding-right:56px; position:relative; }

  /* Cards */
  .card-header {
    flex-direction: column;
    gap: var(--space-16);
    align-items: stretch;
  }
  
  /* Quick Actions */
  .quick-actions {
    grid-template-columns: 1fr;
    gap: var(--space-12);
  }

  /* Search */
  .search-input-wrapper {
    width: 100%;
  }

  /* Dashboard */
  .dashboard-stats {
    grid-template-columns: 1fr;
    gap: var(--space-12);
  }
  .stat-card {
    padding: var(--space-16);
  }
  .stat-icon {
    width: 40px;
    height: 40px;
    font-size: 20px;
  }
  .stat-content h3 {
    font-size: var(--fs-h2);
  }
  .activity-item {
    padding: var(--space-12) var(--space-16);
    gap: var(--space-12);
  }
  .activity-icon {
    width: 28px;
    height: 28px;
    font-size: 12px;
  }

  /* Mobile Table */
  .table-wrapper {
    display: none;
  }
  .table-mobile-wrapper {
    display: block;
    padding: 0;
  }
  .mobile-table-row {
    background-color: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    margin-bottom: var(--space-12);
    overflow: hidden;
  }
  .mobile-row-header {
    padding: var(--space-16);
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    transition: background-color 150ms ease;
  }
  .mobile-row-header:hover {
    background-color: var(--brand-50);
  }
  .mobile-row-main {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex: 1;
    gap: var(--space-16);
  }
  .mobile-row-primary {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
  }
  .mobile-dni {
    font-weight: 600;
    font-size: var(--fs-body);
    color: var(--text);
  }
  .mobile-lote {
    font-size: var(--fs-small);
    color: var(--muted);
  }
  .mobile-status {
    display: flex;
    align-items: center;
    gap: var(--space-8);
  }
  .mobile-expand-icon {
    color: var(--muted);
    transition: transform 150ms ease;
  }
  .mobile-expand-icon.expanded {
    transform: rotate(180deg);
  }
  .mobile-row-details {
  padding: 4px 12px 10px;
  border-top: 1px solid var(--border);
  background-color: var(--brand-50);
  display: none;
  /* Sin max-height ni scroll interno */
  overflow: visible;
  transition: opacity .18s ease; /* transición ligera */
  }
  /* Prevención de desbordes horizontales en detalles */
  .mobile-row-details, .mobile-detail-grid, .mobile-detail-item { max-width:100%; }
  .mobile-detail-item { flex-wrap: wrap; }
  .mobile-detail-label, .mobile-detail-value { max-width:100%; }
  .mobile-detail-value { white-space:normal; text-overflow:clip; }
  .mobile-row-actions { flex-wrap:wrap; }
  .mobile-row-actions .btn, .mobile-row-actions .btn-icon { flex:1 1 48%; min-width:44%; }
  /* Botón egreso circular no estirado */
  .mobile-row-actions .btn-egreso { 
    flex:0 0 auto !important;
    width:44px !important; height:44px !important; min-width:44px !important; min-height:44px !important;
    border-radius:50% !important; padding:0 !important; 
    display:flex !important; align-items:center; justify-content:center;
  }

  /* Estilo verde puro para botón de egreso (tabla y móvil) */
  .btn.btn-egreso {
    background-color: #00C853 !important; /* verde intenso */
    border: none !important;
    color: #ffffff !important;
    box-shadow: none !important;
  }
  .btn.btn-egreso .bi { color: #ffffff !important; }
  .btn.btn-egreso:hover {
    background-color: #00B14A !important;
    border: none !important;
  }
  .btn.btn-egreso:active {
    background-color: #00A043 !important;
    border: none !important;
  }
  /* Disabled/mutado */
  .btn.btn-egreso.btn-egreso-disabled,
  .btn.btn-egreso:disabled,
  .btn.btn-egreso[aria-disabled="true"] {
  background-color: #E2E8F0 !important; /* gris neutro */
  border: none !important;
  color: #475569 !important; /* slate-600 */
  }

  /* Overrides específicos para botón de egreso en el cuadro de registro (desktop) */
  #main-menu #scanResults .btn-egreso,
  #main-menu .table .btn-egreso {
    background: #00C853 !important;
    border: none !important;
    color: #FFFFFF !important;
    box-shadow: none !important;
  }
  #main-menu #scanResults .btn-egreso .bi,
  #main-menu .table .btn-egreso .bi { color:#FFFFFF !important; }
  #main-menu #scanResults .btn-egreso:hover,
  #main-menu .table .btn-egreso:hover {
    background: #00B14A !important;
    border: none !important;
    color: #FFFFFF !important;
  }
  #main-menu #scanResults .btn-egreso:active,
  #main-menu .table .btn-egreso:active {
    background: #00A043 !important;
    border: none !important;
    color: #FFFFFF !important;
  }
  /* Aún deshabilitado debe verse claramente diferente */
  #main-menu #scanResults .btn-egreso.btn-egreso-disabled,
  #main-menu #scanResults .btn-egreso[aria-disabled="true"],
  #main-menu .table .btn-egreso.btn-egreso-disabled,
  #main-menu .table .btn-egreso[aria-disabled="true"] {
  background: #E2E8F0 !important; /* gris neutro */
  border: none !important;
  color: #475569 !important;
  }
  .mobile-row-details.show {
  display: block;
  opacity: 1;
  animation: slideDown 160ms ease;
  }
  .mobile-detail-grid {
    display: grid;
    grid-template-columns: 1fr; /* una columna: cada item ocupa todo el ancho */
    gap: 4px;
    margin-bottom: 6px;
  }
  .mobile-detail-item {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 2px 0;
    border-bottom: 1px dashed var(--border);
  }
  .mobile-detail-item:last-child { border-bottom:none; }
  .mobile-detail-label {
    flex: 0 0 54%;
    font-size: 9px;
    font-weight: 600;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: .45px;
    line-height:1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .mobile-detail-value {
    flex:1;
    text-align: right;
    font-size: 12px;
    color: var(--text);
    font-weight: 600;
    line-height:1.25;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
  .mobile-row-actions {
    display: flex;
    gap: var(--space-8);
    justify-content: center;
    padding-top: var(--space-12);
    border-top: 1px solid var(--border);
  }

  /* Improved Touch Targets */
  .btn {
    min-height: 44px;
  }
  .btn-icon {
    min-width: 44px;
    min-height: 44px;
  }
  .form-control, .form-select {
    min-height: 44px;
  }
  .nav-item {
    min-height: 44px;
  }
}

/* =============================================================
   Fallback adicional: Forzar barra inferior en móviles/tablets
   usando clase de contexto (.is-mobile) para cubrir casos donde
   el ancho lógico supera 768px (por ejemplo dispositivos 800-912px)
   o caching impide aplicar la media query original.
   ============================================================= */
html.is-mobile .content-area {
  padding-bottom: calc(var(--mobile-nav-height, 66px) + 32px + env(safe-area-inset-bottom));
}
html.is-mobile .sidebar {
  position: fixed;
  bottom: 0; left: 0; right: 0;
  width: 100%;
  height: var(--mobile-nav-height, 66px);
  flex-direction: row;
  align-items: stretch;
  justify-content: space-around;
  border-top: 1px solid var(--border);
  border-right: none;
  border-bottom: none;
  padding: 8px 12px;
  background: var(--surface);
  z-index: 1300;
  box-shadow: 0 -2px 6px rgba(0,0,0,0.05);
}
html.is-mobile .sidebar-header { display: none; }
html.is-mobile .sidebar-nav { display:flex; flex:1; gap:4px; justify-content:space-between; }
html.is-mobile .nav-item {
  flex:1 1 0;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:4px; padding:4px 4px 2px; margin-bottom:0;
  font-size:11px; border-radius:10px; min-height:unset;
}
html.is-mobile .nav-item i { margin:0; font-size:18px; line-height:1; }
html.is-mobile .nav-item .nav-text-main { font-size:11px; }
html.is-mobile .nav-item .nav-text-sub { display:none; }
/* Se elimina el ocultamiento forzado para permitir mostrar sólo los botones funcionales */
/* html.is-mobile .mobile-action-bar { display:none !important; } */

/* Ajustes de distribución cuando la barra esté visible (por ejemplo en vistas que requieran acciones rápidas) */
html.is-mobile .mobile-action-bar {
  display: flex !important;
  justify-content: space-evenly;
}

/* Prioridad: asegurar que nada sobreescriba el posicionamiento */
@media (max-width: 1024px) {
  html.is-mobile .sidebar { position:fixed; }
}

@keyframes slideDown {
  from {
    opacity: 0;
    max-height: 0;
    padding-top: 0;
    padding-bottom: 0;
  }
  to {
    opacity: 1;
    max-height: 500px;
    padding-top: var(--space-16);
    padding-bottom: var(--space-16);
  }
}

/* Registro: wrapper tabla (unificado)
   - Se elimina border-top y radio específico para no romper estilo "REGISTRO MINIMALISTA Y SUTIL"
   - Se mantiene sólo overflow para recortar contenido dentro del borde uniforme (1.5px #e0e6f2 / 18px) */
#main-menu .card .table-wrapper {
  overflow: hidden;
}

/* Limpieza registro: se eliminan overrides previos para unificar borde/sombra con estilo minimalista */

/* Fallback mínimo sin :has(): asegurar fondo transparente interno */
#main-menu .card .card-body.p-0 {
  background: transparent;
}

/* =============================================================
   OVERRIDES: Fondo más oscuro y azul de acento menos saturado
   (No se modifica HTML ni JS)
   ============================================================= */
:root {
  /* Azul oscuro unificado */
  --brand: #1F3A8A;        /* Base */
  --brand-600: #193075;    /* Hover */
  --brand-700: #14265E;    /* Active */
  --brand-100: #D9E2F6;    /* Tint activo */
  --brand-50:  #ECF1FA;    /* Fondo suave */
}

/* Fondo general ligeramente más oscuro para resaltar tarjetas */
body { background: #EBEEF2; }

/* Panel principal (derecha) ahora fondo claro uniforme para mayor homogeneidad */
.content-area {
  /* Fondo anterior (gradiente) eliminado para aclarar: linear-gradient(180deg,#ECEFF3,#E6E9EE) */
  background: var(--bg);
  background-attachment: local;
}

/* Sidebar queda blanca para contraste lateral */
.sidebar { background: #FFFFFF; }

/* Tarjetas: asegurar contraste limpio */
.card, .stat-card, .login-card, .table-wrapper, .mobile-table-row {
  background:#FFFFFF;
  box-shadow: 0 3px 10px rgba(20,30,50,0.06), 0 1px 2px rgba(20,30,50,0.08);
}

/* Navegación activa/hover adaptada al nuevo azul */
.nav-item:hover { background: var(--brand-50); color: var(--brand-700); }
.nav-item.active { background: var(--brand-100); color: var(--brand-700); }

/* Botón primario menos saturado */
.btn-primary {
  background: var(--brand);
  border-color: var(--brand);
  box-shadow: 0 2px 4px rgba(31,58,138,0.28);
}
.btn-primary, .btn-primary i { color:#FFF; }
.btn-primary:hover { background: var(--brand-600); border-color: var(--brand-600); box-shadow: 0 3px 8px rgba(25,48,117,0.34); }
.btn-primary:active { background: var(--brand-700); border-color: var(--brand-700); box-shadow: 0 2px 4px rgba(20,38,94,0.38) inset; }

/* Forzar azul oscuro consistente en botones clave (IDs específicos) */
/* Ajustes: se mantiene override del quick nuevo registro ya aplicado más arriba y ahora se unifica Escanear DNI */
#paqueteria-view .filter-buttons .filter-btn.active {
  background:#425273 !important; /* se conserva color anterior sólo para filtros activos paquetería */
  border-color:#425273 !important;
  color:#FFF !important;
  box-shadow:0 2px 4px rgba(0,0,0,0.25) !important;
}
#paqueteria-view .filter-buttons .filter-btn.active:hover { background:#3A495F !important; border-color:#3A495F !important; }
#paqueteria-view .filter-buttons .filter-btn.active:active { background:#324052 !important; border-color:#324052 !important; }

/* Escanear DNI: aplicar misma escala azul saturado que Nuevo registro (#2563EB base) */
#startScanButton.btn-primary {
  background:#2563EB !important;
  border-color:#2563EB !important;
  color:#FFFFFF !important;
  box-shadow:0 2px 4px rgba(37,99,235,0.35) !important;
}
#startScanButton.btn-primary:hover { background:#1D4ED8 !important; border-color:#1D4ED8 !important; }
#startScanButton.btn-primary:active { background:#1E40AF !important; border-color:#1E40AF !important; box-shadow:0 2px 4px rgba(30,64,175,0.45) inset !important; }
#startScanButton.btn-primary:focus-visible { outline:0; box-shadow:0 0 0 3px rgba(37,99,235,0.35) !important; }
.btn-primary:hover { background: var(--brand-600); border-color: var(--brand-600); box-shadow: 0 3px 8px rgba(25,48,117,0.34); }
.btn-primary:active { background: var(--brand-700); border-color: var(--brand-700); box-shadow: 0 2px 4px rgba(20,38,94,0.38) inset; }

/* Botón secundario: borde neutro, texto azul sobrio */
.btn-secondary { color: var(--brand-700); border-color: #D0D5DD; }
.btn-secondary:hover { background: var(--brand-50); }

/* Icon buttons más discretos */
.btn-icon { color: var(--muted); }
.btn-icon:hover { background: var(--brand-50); color: var(--brand-700); }

/* Chips estado con nuevo esquema mantiene contraste */
.chip-success { background:#E3F6EE; color:#0A7147; }

/* (Eliminado override tint .table-day-header – usar tokens en registro.css) */

/* Hover filas tabla acorde al nuevo fondo */


/* Inputs: borde focal con azul sobrio */
.form-control:focus, .form-select:focus { box-shadow: 0 0 0 3px rgba(46,76,154,0.28); }

/* Breadcrumb y links en azul atenuado */
.breadcrumb-link { color: var(--brand); }
.breadcrumb-link:hover { color: var(--brand-600); }

/* Barra usuario (chip) en tint suave actualizado */
.user-info { background: var(--brand-50); color: var(--brand-700); }
.user-info i { color: var(--brand-700); }

/* Ajuste de foco accesible */
.btn:focus-visible, .nav-item:focus-visible, .form-control:focus-visible { box-shadow: 0 0 0 3px rgba(46,76,154,0.38); }

/* =============================================================
   FIX: Espaciado inferior excesivo en panel de edición (móvil)
   - Aplica sólo en contexto móvil (html.is-mobile) o anchos <= 900px
   - No afecta escritorio ni otros paneles reutilizados
   ============================================================= */
html.is-mobile #editPanel .panel-body {
  padding-bottom: 8px !important;   /* antes ~22px por reglas generales */
}
html.is-mobile #editPanel .panel-body > :last-child {
  margin-bottom: 0 !important;
}
html.is-mobile #editPanel .d-grid {
  margin-bottom: 0 !important;       /* evita dejar un gap debajo de los botones */
}
html.is-mobile #editPanel #edit-mobile-status {
  margin-top: 0 !important;
  margin-bottom: 0 !important;
}
html.is-mobile #editPanel #edit-mobile-status:empty { display: none !important; }

@media (max-width: 900px) {
  /* Cobertura adicional para tablets que disparan vista móvil sin clase aún */
  #editPanel { max-height: 82vh !important; }
  #editPanel .panel-body { padding-bottom: 8px !important; }
  #editPanel .panel-body > :last-child { margin-bottom: 0 !important; }
  #editPanel .d-grid { margin-bottom: 0 !important; }
  #editPanel #edit-mobile-status { margin-top: 0 !important; margin-bottom: 0 !important; }
  #editPanel #edit-mobile-status:empty { display: none !important; }
}

/* Fin overrides */

/* =============================================================
   EXTRA OVERRIDES: Fondo aún más oscuro + tarjetas glass pastel
   ============================================================= */
/* Revertimos el oscurecimiento global para volver a la paleta clara base */
body { background: var(--bg); }
/* Aseguramos nuevamente el fondo claro uniforme (anula posibles overrides previos) */
.content-area { background: var(--bg); }






/* =============================================================
   GLOBAL ROUNDING ENHANCEMENT + PILL ACTION BUTTONS
   ============================================================= */
:root {
  /* Unificación final de radios */
  --radius: 12px;
  --radius-sm: 8px;
  --block-radius: var(--radius);
}

/* Bloques principales con mayor curvatura */
.card, .login-card, .table-wrapper, .mobile-table-row, .modal-content, .activity-item, .breadcrumb,
.search-input, .form-control, .form-select, textarea.form-control {
  border-radius: var(--block-radius) !important;
}
/* Cabeceras de día y lote interior planas dentro de la tabla */
.table-day-header td, .table-lote-header td { border-radius: 0 !important; }

/* Footer/header de tarjetas coherentes */
/* Cabecera y footer: se mantienen para cortar y cerrar la card */
.card-header { border-top-left-radius: var(--radius) !important; border-top-right-radius: var(--radius) !important; }
.card-footer { border-bottom-left-radius: var(--radius) !important; border-bottom-right-radius: var(--radius) !important; }

/* Cards sin footer: asegurar que el último .card-body cierra con radios */
.card:not(:has(>.card-footer)) > .card-body:last-child {
  border-bottom-left-radius: var(--block-radius) !important;
  border-bottom-right-radius: var(--block-radius) !important;
}

/* Botones de acción totalmente redondeados (pill) */
/* Botones: mismo radio que bloques (eliminar pill global) */
.btn, .btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-ghost { border-radius: var(--radius) !important; }
.btn-icon { border-radius: var(--radius) !important; }

/* Ajuste de padding para mantener proporción visual al cambiar radio */
.btn { padding: 12px 28px !important; height: auto !important; min-height: 44px; }
.btn-sm { padding: 8px 18px !important; }
.btn-icon { width: 44px; height: 44px; }

/* Chips ya son pill: reforzar coherencia */
.chip { border-radius: 9999px !important; }

/* Campos de búsqueda pill más marcados */
.search-input { border-radius: 9999px !important; }

/* Asegurar que las tarjetas estadísticas (ya pill) mantienen bordes homogéneos */
/* Tarjetas estadísticas coherentes */
.stat-card, .stat-card::before { border-radius: var(--radius) !important; }

/* Fin global rounding enhancement */

/* =============================================================
   REGISTRO: Remover bordes redondos internos
   (Solo dentro de #main-menu para que el interior sea recto)
   ============================================================= */
#main-menu .table-wrapper { border-radius: var(--block-radius) !important; }
#main-menu .table { border-radius: var(--block-radius) !important; overflow: hidden; }
#main-menu .table thead th:first-child { border-top-left-radius: var(--block-radius) !important; }
#main-menu .table thead th:last-child { border-top-right-radius: var(--block-radius) !important; }
#main-menu .table tbody tr:last-child td:first-child { border-bottom-left-radius: var(--block-radius) !important; }
#main-menu .table tbody tr:last-child td:last-child { border-bottom-right-radius: var(--block-radius) !important; }
#main-menu .table-day-header td, #main-menu .table-lote-header td { border-radius: 0 !important; }
#main-menu .mobile-table-row { border-radius: var(--block-radius) !important; }
#main-menu .mobile-row-details { border-bottom-left-radius: var(--block-radius) !important; border-bottom-right-radius: var(--block-radius) !important; }

/* Evitar doble redondeo en combinación con tarjetas estadísticas si se muestran en registro */
#main-menu .stat-card { border-radius: var(--radius) !important; }

/* Excepción: el buscador dentro del registro debe ser redondeado tipo pill */
#main-menu .search-input { border-radius: 9999px !important; }

/* Fin registro sin bordes internos redondeados */

/* =============================================================
   REGISTRO COMPACTO & ALINEACIÓN VERTICAL (solo datos)
   - Celdas de datos más bajas y tipografía un poco menor
   - Encabezados de día y lote conservan tamaño original
   - Separadores sutiles entre columnas para mayor legibilidad
   - Sin modificar estructura HTML ni JS
   ============================================================= */
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) td {
  padding: 10px 12px !important;          /* Reduce altura */
  font-size: 13px !important;             /* Más compacto (no afecta días) */
  line-height: 1.35 !important;
  vertical-align: middle !important;      /* Asegura centrado vertical */
}

/* Refuerzo de centrado si hay contenedores internos con flex/inline */
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) td > * {
  vertical-align: middle;
}

/* Ajuste específico para filas de registros dentro de lotes (ya con padding adicional) */
#main-menu .table tbody tr.record-row-lote td {
  padding-left: 44px !important; /* Mantener indent pero proporcional al nuevo padding */
}

/* Separadores verticales sutiles entre columnas de los datos (no en headers) */
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) td + td {
  position: relative;
}
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) td + td::before {
  content: "";
  position: absolute;
  left: 0;
  top: 22%;
  bottom: 22%;
  width: 1px;
  background: var(--border);
  opacity: 0.9;
}

/* Hover fila: mantener efecto suave pero sin alterar separadores */
#main-menu .table tbody tr:hover td::before { background: var(--border); }

/* Encabezados de día (mantener) – asegurar que NO se reduzcan */
#main-menu .table-day-header td { font-size: var(--fs-body) !important; padding: 16px 16px !important; }

/* Encabezados de lote también mantienen legibilidad */
#main-menu .table-lote-header td { font-size: 12px !important; }

/* Ajustar chips y botones dentro de filas compactas para armonía */
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) .chip {
  padding: 4px 10px;
  font-size: 11px;
  line-height: 1.1;
}
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) .btn-icon {
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
  font-size: 16px;
}

/* Asegurar que iconos de expansión / caret queden centrados visualmente */
#main-menu .table tbody tr .bi-caret-right-fill,
#main-menu .table tbody tr .bi-caret-down-fill { margin-right: 6px; }

/* Espaciado uniforme final inferior de tabla para que no se vea tan alta la última fila */
#main-menu .table tbody tr:last-child td { border-bottom: none; }

/* Fin registro compacto */

/* (Eliminado bloque 'OVERRIDE FINAL COLOR ENCABEZADOS DÍA REGISTRO') */

/* =============================================================
   REGISTRO: Restaurar bordes inferiores redondeados del bloque
   (Table wrapper dentro de la card de "Registros")
   ============================================================= */
#main-menu .table-wrapper {
  border-radius: var(--radius) !important;
  overflow: hidden;
}
/* Fin restauración bordes inferiores */

/* =============================================================
  REGISTRO NO DESPLEGABLE (vista expandida minimalista)
  ============================================================= */
#main-menu .table-day-header.no-collapse { cursor: default !important; }
#main-menu .table-day-header.no-collapse td { border-top: 2px solid var(--border); }
#main-menu .table-day-header.no-collapse:first-of-type td { border-top: none; }
#main-menu .table-day-header.no-collapse i { display:none !important; }

#main-menu .table-lote-header.no-collapse { cursor: default !important; }
#main-menu .table-lote-header.no-collapse i { display:none !important; }

/* Color diferenciado solo para el bloque del día */
#main-menu .table-day-header.no-collapse {
  background:#132A48 !important;
  position: relative;
}
#main-menu .table-day-header.no-collapse::after {
  content:none !important;
}
#main-menu .table-day-header.no-collapse td {
  color:#FFFFFF !important;
  font-size:17px !important;
  font-weight:700;
  letter-spacing:.3px;
}
/* Encabezado especial para bloque En curso (amarillo pastel) */
#main-menu .table-day-header.en-curso-header.no-collapse {
  background:#FEF3C7 !important; /* mismo pastel usado en chip warn */
}
#main-menu .table-day-header.en-curso-header.no-collapse td {
  color:#92400E !important; /* tono marrón/ámbar para contraste */
}
/* Asegurar celda también hereda fondo (algunas tablas aplican background en td) */
#main-menu .table-day-header.en-curso-header.no-collapse td { background:#FEF3C7 !important; }

/* Versión móvil encabezado En curso */
/* Encabezado móvil 'En curso': fondo sólido completo */
.mobile-day-header.en-curso-header { 
  background:#FEF3C7 !important; 
  border-radius:6px !important; 
  padding:8px 14px !important; 
  display:block;
}
.mobile-day-header.en-curso-header h3 { 
  background:transparent !important; 
  color:#92400E !important; 
  margin:0 !important; 
  padding:0 !important; 
  font-weight:700 !important; 
  letter-spacing:.5px !important; 
}
/* Mantener mismo aspecto al hover (sin oscurecer) */
#main-menu .table-day-header.no-collapse:hover { background:#18324F !important; }
#main-menu .table-day-header.no-collapse:hover td { color: var(--brand-700) !important; }

/* Lotes neutros, menos contraste */
#main-menu .table-lote-header.no-collapse { background:#F7F9FB !important; }
#main-menu .table-lote-header.no-collapse td { color:#5A6470 !important; }

/* Filas de datos minimalistas: quitar indent de borde izquierdo extra si no se necesita color */
#main-menu .record-row-lote td { background:transparent !important; border-left:2px solid transparent !important; }

/* Hover muy sutil */
#main-menu .record-row-lote:hover td { background:#F5F7FA !important; }

/* Eliminar efectos de colapso (estaban ligados a .collapsed / .active-row) */
#main-menu .table-day-header.collapsed, #main-menu .table-lote-header.collapsed { background:inherit !important; }
#main-menu .table-day-header.active-row, #main-menu .table-lote-header.active-row { background:inherit !important; }

/* Ajuste de separación vertical entre grupos (margen visual) */
/* (Regla eliminada para evitar bloque vacío) */

/* Fin registro no desplegable */

/* =============================================================
   DASHBOARD: Eliminar efecto "rebote" en indicadores (stat-card)
   - Quita transiciones, filtros y transform para que no cambien
     al entrar/salir del viewport o en hover
   ============================================================= */
.stat-card, .stat-card:hover {
  transition: none !important;
  transform: none !important;
  filter: none !important;
}
.stat-card::before { transition: none !important; }
/* Mantener solo un shadow estático suave */
.stat-card { box-shadow: 0 2px 8px rgba(20,30,50,0.08) !important; }
.stat-card:hover { box-shadow: 0 2px 8px rgba(20,30,50,0.08) !important; }
/* Fin eliminación rebote */

/* (Eliminado bloque neutro #main-menu .table-day-header – sustituido por tokens en registro.css) */

/* Override: NO hover color en filas de datos del registro */
#main-menu .table tbody tr:hover,
#main-menu .table tbody tr:hover td,
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header):hover,
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header):hover td {
  background: none !important;
  background-color: transparent !important;
}

/* === REGISTRO MINIMALISTA Y SUTIL === */
#main-menu .card, #main-menu .table-wrapper {
  background: rgba(255,255,255,0.92) !important;
  box-shadow: 0 2px 12px rgba(38,63,128,0.07) !important;
  border: 1.5px solid #e0e6f2 !important;
  border-radius: 18px !important;
  padding: 0 !important;
}
#main-menu .table {
  background: transparent !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
}
#main-menu .table th, #main-menu .table td {
  background: transparent !important;
  border: none !important;
  font-size: 14px !important;
  color: #2a3550 !important;
  padding: 10px 10px !important;
  text-align: left;
  vertical-align: middle;
}
#main-menu .table th {
  font-weight: 700 !important;
  color: #7a8bbd !important;
  letter-spacing: 0.02em;
  background: none !important;
  border-bottom: 1.5px solid #e0e6f2 !important;
}
#main-menu .table td {
  font-weight: 500 !important;
  border-bottom: 1px solid #f0f2f7 !important;
}
#main-menu .table tbody tr:last-child td {
  border-bottom: none !important;
}
#main-menu .form-control, #main-menu input, #main-menu select {
  background: #f7fafd !important;
  border: 1.5px solid #e0e6f2 !important;
  border-radius: 10px !important;
  font-size: 14px !important;
  color: #2a3550 !important;
  padding: 8px 12px !important;
  box-shadow: none !important;
  transition: border-color 0.18s, box-shadow 0.18s;
}
#main-menu .form-control:focus, #main-menu input:focus, #main-menu select:focus {
  border-color: #132A48 !important;
  background: #fff !important;
  outline: none !important;
}
#main-menu label, #main-menu .form-label {
  color: #7a8bbd !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0.04em !important;
  margin-bottom: 4px !important;
  text-transform: uppercase !important;
}
#main-menu .btn, #main-menu .btn-primary, #main-menu .btn-secondary {
  border-radius: 9999px !important;
  font-size: 13px !important;
  font-weight: 700 !important;
  padding: 8px 22px !important;
  min-height: 36px !important;
  box-shadow: 0 1px 4px rgba(38,63,128,0.06) !important;
}
#main-menu .btn-primary {
  background: #384667 !important;
  color: #fff !important;
  border: none !important;
}
#main-menu .btn-primary:hover, #main-menu .btn-primary:focus {
  background: #31405A !important;
}
#main-menu .btn-secondary {
  background: #f7fafd !important;
  color: #384667 !important;
  border: 1.5px solid #e0e6f2 !important;
}
#main-menu .btn-secondary:hover, #main-menu .btn-secondary:focus {
  background: #e9eef6 !important;
  color: #31405A !important;
}
#main-menu .chip {
  border-radius: 9999px !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  padding: 3px 12px !important;
  background: #e3f6ee !important;
  color: #0a7147 !important;
  letter-spacing: 0.03em;
}
#main-menu .chip.chip-warn {
  background: #fef3c7 !important;
  color: #92400e !important;
}
#main-menu .chip.chip-neutral {
  background: #f0f2f7 !important;
  color: #7a8bbd !important;
}
#main-menu .chip.chip-danger {
  background: #ffeaea !important;
  color: #b3261e !important;
}
#main-menu .chip.chip-info {
  background: #dbeafe !important;
  color: #0284c7 !important;
}
#main-menu .indicator {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-right: 6px;
  vertical-align: middle;
}
#main-menu .indicator.success { background: #0a7147 !important; }
#main-menu .indicator.warn { background: #f59e0b !important; }
#main-menu .indicator.danger { background: #b3261e !important; }
#main-menu .indicator.info { background: #0284c7 !important; }

/* Simetría y alineación */
#main-menu .table th, #main-menu .table td {
  text-align: center !important;
  vertical-align: middle !important;
}
#main-menu .table th:first-child, #main-menu .table td:first-child {
  border-top-left-radius: 10px !important;
}
#main-menu .table th:last-child, #main-menu .table td:last-child {
  border-top-right-radius: 10px !important;
}

/* Fin registro minimalista */

/* (Eliminado override redundante: ahora usa estilos de "REGISTRO MINIMALISTA Y SUTIL") */

/* (Eliminado override contenedor redundante) */

/* (Eliminado fallback adicional; se confía en estilos unificados) */

/* === REGISTRO: Fix radio visible bloque principal ===
   Forzamos nuevamente los radios en la card contenedora y su table-wrapper
   para evitar que alguna regla previa (reset interno a 0) los aplane.
   Mantiene valores coherentes con estilo "REGISTRO MINIMALISTA Y SUTIL".
   No altera lógica ni estructura. */
#main-menu .card:has(.table-wrapper) {
  border-radius: 18px !important;
  overflow: hidden;
}

#main-menu .card .table-wrapper {
  border-radius: 18px !important;
  overflow: hidden;
}

/* Fallback sin :has(): aplica a última card si coincide patrón común */
@supports not(selector(:has(*))) {
  #main-menu .card .card-body.p-0 > .table-wrapper {
    border-radius: 18px !important;
  }
  #main-menu .card:last-of-type {
    border-radius: 18px !important;
    overflow: hidden;
  }
}
/* Fin fix radio visible registro */

/* (Eliminado bloque 'Encabezado de día (AZUL OSCURO plano)' – ya definido en registro.css) */

/* =============================================================
   ACCIÓN: Actualización color exacto botones de acción (#384667)
   - Estados hover / active derivados
   - Secundario inverso con borde y texto base
   ============================================================= */
.btn-primary {
  background:#384667 !important;
  border-color:#384667 !important;
  box-shadow:0 2px 4px rgba(0,0,0,0.18) !important;
  color:#FFFFFF !important;
}
.btn-primary:hover {
  background:#31405A !important;
  border-color:#31405A !important;
}
.btn-primary:active,
.btn-primary:focus {
  background:#2C3751 !important;
  border-color:#2C3751 !important;
}

/* Especificación puntual: botón "Nuevo registro" requiere azul saturado exacto (#2563EB)
   Mantiene jerarquía sin afectar otros .btn-primary (se coloca después del override global). */
#dashboard-view #nuevo-registro-quick.btn-primary {
  background:#2563EB !important; /* base */
  border-color:#2563EB !important;
  box-shadow:0 2px 4px rgba(37,99,235,0.35) !important;
}
#dashboard-view #nuevo-registro-quick.btn-primary:hover {
  background:#1D4ED8 !important; /* hover más oscuro */
  border-color:#1D4ED8 !important;
}
#dashboard-view #nuevo-registro-quick.btn-primary:active {
  background:#1E40AF !important; /* active más profundo */
  border-color:#1E40AF !important;
  box-shadow:0 2px 4px rgba(30,64,175,0.45) inset !important;
}
#dashboard-view #nuevo-registro-quick.btn-primary:focus-visible { outline:0; box-shadow:0 0 0 3px rgba(37,99,235,0.35) !important; }


.btn-secondary {
  background:#F4F7FA !important;
  color:#384667 !important;
  border:1px solid #384667 !important;
}
.btn-secondary:hover {
  background:#E8ECF4 !important;
  color:#2C3751 !important;
  border-color:#2C3751 !important;
}

/* Botones fantasma / icono */
.btn-ghost, .btn-icon {
  color:#384667 !important;
}
.btn-ghost:hover, .btn-icon:hover {
  background:rgba(56,70,103,0.08) !important;
  color:#2C3751 !important;
}

/* Unificación visual Accesos rápidos / Acciones rápidas */
.card:has(.quick-actions) {
  background: rgba(255,255,255,0.92) !important;
  box-shadow: 0 2px 12px rgba(56,70,103,0.08) !important;
  border:1.5px solid #e0e6f2 !important;
  border-radius:18px !important;
  padding:0 !important;
}
.card:has(.quick-actions) .card-header {
  border-bottom:1.5px solid #e0e6f2 !important;
}
.card:has(.quick-actions) .card-body {
  padding:24px !important;
}

/* Unificación vertical y botones pill en quick-actions (dashboard y registro) */
.card-quick-actions .quick-actions {
  align-items: stretch;
}
.card-quick-actions .quick-actions .btn {
  height:40px !important; /* compacto */
  line-height:1 !important;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:14px !important; /* igual tipografía del bloque registro */
  border-radius:9999px !important; /* full pill */
  padding:0 20px !important;
  font-weight:600;
}
/* (Eliminado bloque dashboard quick actions - ya no se usa) */
.card-quick-actions .quick-actions .btn i { margin-right:8px; }

/* Igualar altura de ambas cards quick-actions (dashboard vs registro) si hubiese diferencias por margin internos */
.card-quick-actions .card-header { padding-bottom:12px !important; }
.card-quick-actions .card-body { padding-top:20px !important; }

@supports not(selector(:has(*))) {
  /* Fallback parcial (sin poder estilizar el contenedor desde el hijo) */
  #dashboard-view .quick-actions {
    gap:16px;
  }
}
/* Fin actualización color y unificación quick actions */

/* ==== Calendario de rango exportación ==== */
.range-calendar { border:1px solid #E2E8F0; border-radius:12px; padding:8px 10px; background:#FFF; width:100%; max-width:none; }
.range-calendar .cal-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:4px; }
.range-calendar .cal-month-label { font-weight:600; font-size:13px; color:#1E293B; text-transform:capitalize; }
.range-calendar .cal-weekdays { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; margin:2px 0 4px; font-size:10px; font-weight:600; color:#64748B; }
.range-calendar .cal-weekdays span { text-align:center; }
.range-calendar .cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }
.range-calendar .day { position:relative; aspect-ratio:1/1; font-size:11px; border-radius:6px; display:flex; align-items:center; justify-content:center; cursor:pointer; user-select:none; font-weight:500; color:#334155; background:#F1F5F9; transition:background .15s, color .15s; }
.range-calendar .day:hover:not(.disabled):not(.outside) { background:#E2E8F0; }
.range-calendar .day.disabled { opacity:.18; cursor:not-allowed; background:#F8FAFC; }
.range-calendar .day.outside { opacity:.25; }
.range-calendar .day.start, .range-calendar .day.end, .range-calendar .day.in-range { background: var(--brand-700); color:#FFF; }
.range-calendar .day.today::after { content:''; position:absolute; bottom:4px; width:4px; height:4px; background:#10B981; border-radius:50%; }
.range-calendar .cal-selection-info { display:flex; flex-wrap:wrap; gap:4px; font-size:11px; }
.range-calendar .btn-icon { background:transparent; border:0; color:#475569; width:26px; height:26px; border-radius:6px; display:inline-flex; align-items:center; justify-content:center; font-size:14px; }
.range-calendar .btn-icon:hover { background:#E2E8F0; }


/* =============================================================
   MODAL PERMANENCIAS (Campana) - Overlay + Panel centrado
   - Convierte #overstayPanel en modal real sobre todo el contenido
   - Fondo difuminado bloquea interacción detrás
   - Cuerpo bloquea scroll cuando está abierto (body.modal-overstay-open)
   - Punto rojo (.sev-dot) indica alerta crítica (10 min) dentro del nombre
   ============================================================= */
.overstay-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15,23,42,0.45);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  z-index: 4000;
  cursor: pointer;
}
.overstay-overlay.d-none { display: none !important; }

.overstay-panel {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 480px;
  max-width: 92vw;
  max-height: 80vh;
  background: #FFFFFF;
  border: 1px solid #E2E8F0;
  /* Unificado con tarjetas */
  border-radius: var(--radius);
  box-shadow:
    0 24px 56px -14px rgba(15,23,42,0.35),
    0 8px 24px rgba(15,23,42,0.18);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  z-index: 4100;
  animation: overstayModalIn .3s cubic-bezier(.4,.14,.3,1);
}
.overstay-panel.d-none { display: none !important; }

/* Variante pequeña para confirmar egresos */
.overstay-panel.overstay-panel--small {
  width: 420px;
  max-width: 90vw;
}
@media (max-width: 480px) {
  .overstay-panel.overstay-panel--small {
    width: 360px;
    max-width: 92vw;
  }
}

/* Centro robusto solo para el panel de edición (sin afectar otros) */
#editPanel {
  top: auto !important;
  left: auto !important;
  transform: none !important;
  right: auto !important;
  bottom: auto !important;
  inset: 0 !important;            /* ocupa toda la pantalla como caja de posicionamiento */
  margin: auto !important;         /* centra en ambos ejes según su tamaño */
  height: auto !important;         /* ajusta al contenido */
}

@keyframes overstayModalIn {
  from { opacity: 0; transform: translate(-50%, -46%) scale(.96); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}

.overstay-panel .panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 22px;
  background: #F8FAFC;
  border-bottom: 1px solid #E2E8F0;
  /* Asegurar radios superiores coherentes */
  border-top-left-radius: var(--radius);
  border-top-right-radius: var(--radius);
}
.overstay-panel .panel-title {
  font-size: 15px;
  font-weight: 600;
  letter-spacing: .4px;
  color: #1E346A;
  text-transform: uppercase;
  margin: 0;
}
.overstay-panel .btn-close-panel {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: transparent;
  color: #5B6475;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background-color .18s ease, color .18s ease;
}
.overstay-panel .btn-close-panel:hover {
  background: #E6ECF2;
  color: #1E346A;
}

.overstay-panel .panel-body {
  flex: 1;
  overflow: auto;
  padding: 18px 20px 22px;
  background: #FFFFFF;
  /* Mantener continuidad de radio si hay color de fondo interior gris futuro */
  border-bottom-left-radius: var(--radius);
  border-bottom-right-radius: var(--radius);
}

/* Cuerpo del panel: encoge a su contenido (evita espacio vacío bajo los botones) */


.overstay-list {
  display: flex;
  flex-direction: column;
  gap: 14px;
  margin: 0;
  padding: 0;
}

.overstay-empty {
  text-align: center;
  font-size: 14px;
  font-weight: 500;
  color: #6A7484;
  padding: 32px 12px;
  border: 2px dashed #E2E8F0;
  border-radius: 18px;
  background: #F8FAFC;
}

.overstay-item {
  border: 1px solid #E2E8F0;
  border-radius: 18px;
  padding: 14px 16px 16px;
  background: #FFFFFF;
  display: flex;
  flex-direction: column;
  gap: 12px;
  position: relative;
  box-shadow: 0 2px 4px rgba(30,40,60,0.04);
  /* Sin transición para evitar efecto de elevación */
  transition: none !important;
}
/* Hover neutralizado */
.overstay-item:hover { box-shadow: 0 2px 4px rgba(30,40,60,0.04); transform:none !important; }

.overstay-name {
  font-weight: 600;
  font-size: 15px;
  color: #1E346A;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.overstay-meta {
  font-size: 12px;
  font-weight: 500;
  color: #5B6475;
  margin-top: 4px;
  letter-spacing: .25px;
}

.overstay-actions {
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap;
}
.overstay-actions .form-control-sm {
  flex: 1 1 auto;
  min-width: 140px;
  height: 36px;
  border-radius: 10px;
  font-size: 12px;
  padding: 4px 10px;
  background: #F5F7FA;
  border: 1px solid #D5DEE8;
  box-shadow: none;
}
.overstay-actions .form-control-sm:focus {
  background: #FFFFFF;
  border-color: #2E4C9A;
  box-shadow: 0 0 0 2px rgba(46,76,154,0.18);
  outline: none;
}

.overstay-actions .btn {
  height: 36px;
  border-radius: 999px !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  padding: 0 18px !important;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.overstay-item.severity-critical {
  border-left: 5px solid #DC3545;
  background: linear-gradient(95deg,#FFE9EC 0%, #FFF 60%);
}
.overstay-item.severity-early {
  border-left: 5px solid #F3C969;
  background: linear-gradient(95deg,#FFF9E6 0%, #FFF 60%);
}
.overstay-item.severity-medium {
  border-left: 5px solid #F5A733;
  background: linear-gradient(95deg,#FFF4E0 0%, #FFF 60%);
}

/* Punto rojo indicador (alerta crítica / 10 min) */
.sev-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #DC3545;
  box-shadow: 0 0 0 4px rgba(220,53,69,0.18), 0 0 0 0 rgba(220,53,69,0.35);
  position: relative;
  display: inline-block;
  animation: sevPulse 1.8s infinite cubic-bezier(.66,0,.4,1);
}
@keyframes sevPulse {
  0% { box-shadow: 0 0 0 4px rgba(220,53,69,0.20), 0 0 0 0 rgba(220,53,69,0.35); }
  65% { box-shadow: 0 0 0 4px rgba(220,53,69,0.12), 0 0 0 10px rgba(220,53,69,0); }
  100% { box-shadow: 0 0 0 4px rgba(220,53,69,0.20), 0 0 0 0 rgba(220,53,69,0); }
}

body.modal-overstay-open {
  overflow: hidden;
  touch-action: none;
}

@media (max-width: 640px) {
  .overstay-panel {
  width: 92%; /* dejar margen lateral */
  max-width: 440px; /* limitar expansión */
  height: auto;
  max-height: 82vh; /* un poco más alta para evitar encogimiento visual */
  border-radius: 18px;
  left:50%;
  transform: translate(-50%, -50%); /* conservar centrado */
  }
  /* En móvil, asegurar centrado del editPanel también con inset */
  #editPanel { inset: 0 !important; margin: auto !important; transform: none !important; }
  .overstay-panel .panel-body {
    padding: 16px 16px 22px;
  }
  /* Compactar espacio inferior sólo en el panel de edición móvil */
  #editPanel .panel-body { padding-bottom: 0 !important; }
  #editPanel .d-grid { margin-bottom: 0 !important; }
  #editPanel #edit-mobile-status { margin-top: 0 !important; margin-bottom: 0 !important; }
  #editPanel #edit-mobile-status:empty { display: none !important; }
  #editPanel .panel-body > :last-child { margin-bottom: 0 !important; }
  .overstay-item {
    padding: 12px 14px 14px;
    border-radius: 16px;
  }
  .overstay-actions {
    flex-direction: column;
    align-items: stretch;
  }
  .overstay-actions .form-control-sm {
    width: 100%;
  }
  .overstay-actions .btn {
    width: 100%;
    justify-content: center;
  }
}

/* =========================================================
   PERFORMANCE & UNIFICACION DASHBOARD STAT-CARDS (24-08-2025)
   - Simplifica estilos de .stat-card (remueve glass, blur, gradientes,
     radios extremos y múltiples sombras)
   - Mantiene iconos con su fondo de color
   - Reduce costo de repintado y composición al hacer scroll
   - Elimina backdrop-filter de header sticky de la tabla (costoso)
   - Añade contain para aislar la capa de scroll principal
   ========================================================= */
.dashboard-stats .stat-card,
.stat-card {
  border-radius: var(--radius) !important;
  background: var(--surface) !important;
  border: 1px solid var(--border) !important;
  box-shadow: 0 2px 6px rgba(0,0,0,0.04) !important;
  padding: var(--space-24) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  transform: none !important;
  filter: none !important;
  transition: none !important;
}
.stat-card::before { content: none !important; }
/* Hover neutralizado también aquí */
.dashboard-stats .stat-card:hover { box-shadow: 0 2px 6px rgba(0,0,0,0.04) !important; }

.stat-icon {
  width: 48px;
  height: 48px;
  border-radius: var(--radius-sm);
  font-size: 24px;
  display:flex;
  align-items:center;
  justify-content:center;
}

/* Mantener fondos de iconos (consolidado) */
.stat-icon-primary { background-color: var(--brand-100) !important; color: var(--brand) !important; }
.stat-icon-warning { background-color: #FEF3C7 !important; color: var(--warning) !important; }
.stat-icon-success { background-color: #DCFCE7 !important; color: var(--success) !important; }
.stat-icon-info    { background-color: #DBEAFE !important; color: var(--info) !important; }

/* Neutralizar estilos previos definidos vía :has() (sin eliminarlos) */
.dashboard-stats .stat-card:has(.stat-icon-primary),
.dashboard-stats .stat-card:has(.stat-icon-warning),
.dashboard-stats .stat-card:has(.stat-icon-success),
.dashboard-stats .stat-card:has(.stat-icon-info) {
  background: var(--surface) !important;
  border:1px solid var(--border) !important;
  box-shadow: 0 2px 6px rgba(0,0,0,0.04) !important;
  backdrop-filter:none !important;
}

/* Sticky header registro: quitar blur costoso durante scroll */
#main-menu #scanResults thead th {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Aislar área de scroll para reducir invalidaciones de layout global */
.content-area {
  contain: layout paint;
  will-change: auto;
}

/* Fin overrides rendimiento */

/* =========================================================
   Ajuste (04-09-2025): Mayor separación entre títulos de la
   tabla de registros y las filas de datos. Se incrementa el
   padding vertical de los <th> para dar más aire visual.
   (Pedido: "separa un poco mas las casillas del titulo")
   ========================================================= */
#main-menu #scanResults thead th {
  padding-top: 14px !important;
  padding-bottom: 14px !important; /* antes 10px */
}

/* Línea divisoria un poco más marcada para reforzar separación */
#main-menu #scanResults thead th {
  border-bottom: 2px solid var(--registro-border) !important;
}

/* =========================================================
   CAMPANA NOTIFICACIONES: Contorno rojo cuando hay alertas
   - Activado por clase .has-alert agregada vía JS
   - No altera dimensiones ni otros botones
   - Efecto accesible (alto contraste) sin animaciones costosas
   ========================================================= */
#overstayBell.has-alert,
.notification-bell.has-alert {
  border: none !important;             /* sin contorno */
  color: var(--danger) !important;      /* texto/ícono rojo pastel */
  background: #FFECEC !important;       /* fondo rojo pastel como antes */
  box-shadow: none !important;          /* sin halo */
}

#overstayBell.has-alert i,
.notification-bell.has-alert i {
  color: var(--danger) !important;      /* ícono rojo pastel */
}

#overstayBell.has-alert:hover,
.notification-bell.has-alert:hover {
  background: #FFD9D9 !important;       /* hover pastel más oscuro suave */
}

/* === Ajuste campana: forma circular y dimensiones iguales a bloque de usuario === */
#overstayBell, .notification-bell {
  width:36px !important; height:36px !important; min-width:36px !important; min-height:36px !important;
  border-radius:50% !important; padding:0 !important; display:inline-flex !important; align-items:center; justify-content:center;
  aspect-ratio:1/1; line-height:1; position:relative;
}
/* Badge se ajusta centrado relativo */
#overstayBell .notif-badge { top:3px; right:3px; }
/* Mobile tamaños ya definidos abajo; reforzar borde redondo */
@media (max-width:768px){
  #overstayBell, .notification-bell { width:34px !important; height:34px !important; min-width:34px !important; min-height:34px !important; }
}
@media (max-width:480px){
  #overstayBell, .notification-bell { width:30px !important; height:30px !important; min-width:30px !important; min-height:30px !important; }
}

/* =========================================================
   DESIGN TOKENS OPERATIVA SEGURIDAD (Añadidos sin romper IDs)
   ========================================================= */
:root{
  /* Brand (azul operativo) */
  --brand-700:#1E40AF;
  --brand-600:#2563EB; /* primario */
  --brand-500:#3B82F6;
  --brand-100:#DBEAFE; /* fondo activo/hover sidebar */

  /* Semantic */
  --success-600:#16A34A; /* OK/Guardar */
  --success-700:#15803D;
  --danger-600:#DC2626;  /* Denegado/Error */
  --warning-500:#F59E0B; /* En curso/activo */
  --info-600:#2563EB;    /* Info/Pendiente */

  /* Neutrales */
  --bg-0:#FFFFFF;
  --bg-1:#F8FAFC;       /* fondos de panel */
  --bg-2:#F3F4F6;       /* headers suaves */
  --line-1:#E5E7EB;     /* bordes */
  --line-2:#D1D5DB;

  --text-900:#0F172A;   /* títulos */
  --text-700:#374151;   /* cuerpo */
  --text-500:#6B7280;   /* meta/labels */
  --placeholder:#9CA3AF;

  /* Dimensiones y efectos */
  --radius-8:8px;
  --radius-12:12px;
  --shadow-1:0 1px 3px rgba(0,0,0,.08);
  --shadow-2:0 6px 16px rgba(0,0,0,.08);

  /* Focus visible (accesibilidad) */
  --focus-ring:0 0 0 3px rgba(37,99,235,.35);
}

/* Base tipografía / fondo (no altera tamaños existentes) */
body {
  background: var(--bg-1) !important;
  color: var(--text-700) !important;
  font-family: 'Inter','Segoe UI',system-ui,-apple-system,sans-serif;
}

/* Tarjetas unificadas */
.card,
.stat-card,
.login-card,
.table-wrapper,
.overstay-panel {
  background: var(--bg-0) !important;
  border:1px solid var(--line-1) !important;
  border-radius: var(--radius-12) !important;
  box-shadow: var(--shadow-1) !important;
}

/* Encabezados suaves */
.card-header,
.modal-header,
.table thead th {
  background: var(--bg-2) !important;
}

/* Botones (nuevas reglas al final para sobrescribir anteriores) */
.btn-primary{
  background:var(--brand-600) !important;
  color:#fff !important;
  border:1px solid var(--brand-600) !important;
  border-radius:var(--radius-12) !important;
  min-height:44px;
  padding:10px 16px;
  font-weight:600;
  box-shadow:none !important;
}
.btn-primary:hover{
  background:var(--brand-700) !important;
  border-color:var(--brand-700) !important;
}
.btn-primary:focus-visible{
  outline:none;
  box-shadow:var(--focus-ring) !important;
}

.btn-success{
  background:var(--success-600) !important;
  color:#fff !important;
  border:1px solid var(--success-600) !important;
  border-radius:var(--radius-12) !important;
  min-height:44px;
  padding:10px 16px;
  font-weight:600;
}
.btn-success:hover{
  background:var(--success-700) !important;
  border-color:var(--success-700) !important;
}
.btn-success:focus-visible{
  outline:none;
  box-shadow:var(--focus-ring) !important;
}

.btn-secondary{
  background:var(--bg-0) !important;
  color:var(--text-700) !important;
  border:1px solid var(--line-2) !important;
  border-radius:var(--radius-12) !important;
  min-height:44px;
  padding:10px 16px;
  font-weight:600;
  box-shadow:none !important;
}
.btn-secondary:hover{
  background:var(--bg-2) !important;
}
.btn-secondary:focus-visible{
  outline:none;
  box-shadow:var(--focus-ring) !important;
}

/* Badges / chips de estado nuevos (no afecta .chip existente) */
.badge{
  display:inline-flex;
  align-items:center;
  gap:6px;
  height:24px;
  padding:0 8px;
  border-radius:999px;
  font-size:12px;
  font-weight:600;
  line-height:1;
}
.badge--ok{
  background:#E8F5EE;
  color:var(--success-600);
  border:1px solid rgba(22,163,74,.18);
}
.badge--err{
  background:#FEE2E2;
  color:var(--danger-600);
  border:1px solid rgba(220,38,38,.18);
}
.badge--run{
  background:#FEF3C7;
  color:var(--warning-500);
  border:1px solid rgba(245,158,11,.18);
}
.badge--info{
  background:#DBEAFE;
  color:var(--info-600);
  border:1px solid rgba(37,99,235,.18);
}

/* Sidebar estados (mapeo a .nav-item existente) */
.sidebar{
  background:var(--bg-0) !important;
  border-right:1px solid var(--line-1);
}
.sidebar .nav-item{
  color:var(--text-700);
  border-left:3px solid transparent;
  border-radius:8px;
  transition:background .15s, color .15s;
}
.sidebar .nav-item:hover{
  background:#F6F9FF;
  color:var(--brand-700);
}
.sidebar .nav-item.active{
  background:var(--brand-100);
  color:var(--brand-600);
  border-left-color:var(--brand-600);
}
.sidebar .nav-item i{
  color:#6B7280;
}
.sidebar .nav-item.active i{
  color:var(--brand-600);
}

/* Inputs unificados (nuevas clases opcionales .input/.select/.textarea) */
.input, .select, .textarea,
.form-control, .form-select, textarea.form-control{
  background:var(--bg-0);
  border:1px solid var(--line-2);
  border-radius:var(--radius-12) !important;
  color:var(--text-700);
  min-height:44px;
  padding:10px 12px !important;
}
.input::placeholder, .select::placeholder, .textarea::placeholder,
.form-control::placeholder{
  color:var(--placeholder);
}
.input:focus, .select:focus, .textarea:focus,
.form-control:focus, .form-select:focus, textarea.form-control:focus{
  outline:none;
  border-color:var(--brand-600) !important;
  box-shadow:var(--focus-ring) !important;
  background:var(--bg-0);
}

/* Tabla (aplicación suave – respeta overrides específicos existentes) */
.table thead th{
  background:var(--bg-2) !important;
  color:var(--text-700) !important;
  font-weight:600;
}
.table tbody tr:nth-child(even){
  background:#FBFBFD;
}
.table .day-header,
.table-day-header td{
  background:#EAEFF7 !important;
  color:var(--text-700) !important;
  text-transform:uppercase;
  letter-spacing:.02em;
  font-size:12px !important;
  font-weight:700 !important;
}

/* Focus accesible global */
:where(a,button,[role="button"],input,select,textarea,.nav-item,.btn):focus-visible{
  outline:none;
  box-shadow:var(--focus-ring) !important;
  border-radius:4px;
}

/* Accesos rápidos contenedor */
.quick-actions,
.card:has(.quick-actions) .card-body{
  background:var(--bg-0);
}

/* Actividad reciente hover suave */
.activity-item:hover{
  background:var(--bg-2) !important;
}
.activity-day-separator{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:0;
  padding:12px 16px 4px;
  font-size:11px;
  text-transform:uppercase;
  letter-spacing:.06em;
  font-weight:600;
  color:#065F46; /* verde intenso para texto */
  opacity:.95;
}
.activity-day-label{ background:#D1FAE5; padding:2px 12px; border-radius:999px; box-shadow:0 0 0 1px #6EE7B7; color:#065F46; }

/* Ajuste iconos actividad (ingreso / egreso) según semántica */
.activity-icon.ingreso{
  background:#DCFCE7 !important;
  color:var(--success-600) !important;
}
.activity-icon.egreso{
  background:#F3F4F6 !important;
  color:#94A3B8 !important;
}

/* Toasts/alerts semánticos genéricos */
.ui-toast-success{ background:#EAF7ED; color:var(--success-600); }
.ui-toast-error{ background:#FEECEC; color:var(--danger-600); }
.ui-toast-info{ background:#E9F0FF; color:var(--info-600); }

/* Fin tokens + estilo operativo */

/* =========================================================
   CHIPS SEMÁNTICOS (MAPPING .chip-* -> esquema badges tokens)
   - No se modifica HTML ni JS.
   - Se igualan estilos de .chip-* a .badge--*.
   - Se agregan íconos mediante ::before para no depender sólo del color.
   - Se sobreescriben overrides previos con !important.
   ========================================================= */
.chip,
#main-menu .chip {
  display:inline-flex !important;
  align-items:center !important;
  gap:4px !important;
  height:24px !important;
  padding:0 8px !important;
  border-radius:999px !important;
  font-size:12px !important;
  font-weight:600 !important;
  line-height:1 !important;
  border:1px solid transparent !important;
  background:var(--bg-2) !important;
  color:var(--text-700) !important;
  letter-spacing:0 !important;
}

/* Íconos semánticos (evita uso exclusivo de color) */
.chip-success::before,
.chip-warn::before,
.chip-danger::before,
.chip-info::before,
#main-menu .chip-success::before,
#main-menu .chip-warn::before,
#main-menu .chip-danger::before,
#main-menu .chip-info::before {
  content:"";
  display:inline-block;
  font-weight:700;
  font-size:12px;
  line-height:1;
  margin-right:2px;
}

.chip-success::before,
#main-menu .chip-success::before { content:"✔"; }
.chip-warn::before,
#main-menu .chip-warn::before { content:"!"; }
.chip-danger::before,
#main-menu .chip-danger::before { content:"✖"; }
.chip-info::before,
#main-menu .chip-info::before { content:"i"; }

/* Estado: OK / Completado */
.chip-success,
#main-menu .chip-success {
  background:#E8F5EE !important;
  color:var(--success-600) !important;
  border:1px solid rgba(22,163,74,.18) !important;
}

/* Estado: En curso / Activo */
.chip-warn,
#main-menu .chip-warn {
  background:#FEF3C7 !important;
  color:var(--warning-500) !important;
  border:1px solid rgba(245,158,11,.18) !important;
}

/* Estado: Alerta crítica (permanencia excedida 10min) */
.chip-alert,
#main-menu .chip-alert {
  background:#FEE2E2 !important;
  color:#B91C1C !important;
  border:1px solid rgba(239,68,68,.25) !important;
}
.chip-alert::before,
#main-menu .chip-alert::before { content:"!"; }

/* Estado: Error / Denegado */
.chip-danger,
#main-menu .chip-danger {
  background:#FEE2E2 !important;
  color:var(--danger-600) !important;
  border:1px solid rgba(220,38,38,.18) !important;
}

/* Estado: Pendiente / Info */
.chip-info,
#main-menu .chip-info {
  background:#DBEAFE !important;
  color:var(--info-600) !important;
  border:1px solid rgba(37,99,235,.18) !important;
}

/* Neutral (si se usa) */
.chip-neutral,
#main-menu .chip-neutral {
  background:var(--bg-2) !important;
  color:var(--text-700) !important;
  border:1px solid var(--line-2) !important;
}

/* Ajuste en tablas compactas: respetar altura */
#main-menu .table tbody tr:not(.table-day-header):not(.table-lote-header) .chip {
  height:22px !important;
  padding:0 8px !important;
  font-size:11px !important;
}

/* Fin chips semánticos */

/* =========================================================
   KPI SEMÁNTICOS DASHBOARD + OVERRIDES FINALES ACCESIBILIDAD
   - No se elimina código previo: sólo se sobreescribe visual.
   - Aplica semántica solicitada a kpi-visitors / active / completed / packages.
   - Neutraliza header día oscuro (#132A48) con cinta neutra.
   - Unifica focus-visible a --focus-ring.
   ========================================================= */

/* KPI (números y bubble/icon) */
.stat-card.kpi-visitors .stat-icon{
  background: var(--brand-100) !important;
  color: var(--brand-600) !important;
}
.stat-card.kpi-visitors .stat-content h3{
  color: var(--brand-700) !important;
}

.stat-card.kpi-active .stat-icon{
  background: #FEF3C7 !important;
  color: var(--warning-500) !important;
}
.stat-card.kpi-active .stat-content h3{
  color: var(--warning-500) !important;
}

.stat-card.kpi-completed .stat-icon{
  background: #DCFCE7 !important;
  color: var(--success-600) !important;
}
.stat-card.kpi-completed .stat-content h3{
  color: var(--success-600) !important;
}

.stat-card.kpi-packages .stat-icon{
  background: #E2E8F0 !important;
  color: #64748B !important;
}
.stat-card.kpi-packages .stat-content h3{
  color: #475569 !important;
}

/* Ajuste tipografía descriptiva KPI */
.stat-card.kpi-visitors .stat-content p,
.stat-card.kpi-active .stat-content p,
.stat-card.kpi-completed .stat-content p,
.stat-card.kpi-packages .stat-content p{
  color: var(--text-500) !important;
}

/* Cinta día neutra (reemplaza fondo azul oscuro legacy) */
#main-menu .table-day-header.no-collapse{
  background:#EAEFF7 !important;
  position:relative;
}
#main-menu .table-day-header.no-collapse td{
  color:var(--text-700) !important;
  font-size:12px !important;
  font-weight:700 !important;
  letter-spacing:.02em !important;
  text-transform:uppercase;
}
#main-menu .table-day-header.no-collapse:hover{
  background:#EAEFF7 !important;
}

/* Unificación final de focus (accesibilidad AA) */
:where(a,button,[role="button"],input,select,textarea,.nav-item,.btn,.form-control,.form-select):focus-visible{
  outline:none !important;
  box-shadow:var(--focus-ring) !important;
}

/* Garantizar que botones previos oscuros no sobreescriban la paleta final */
.btn-primary{
  background:var(--brand-600) !important;
  border-color:var(--brand-600) !important;
  color:#FFF !important;
}
.btn-primary:hover{
  background:var(--brand-700) !important;
  border-color:var(--brand-700) !important;
}

/* Fin overrides finales UI operativa */

/* =========================================================
   FINAL CLEANUP LEGACY COLORS & BUTTON CONSOLIDATION
   - Normaliza botones en todo el scope (incluye #main-menu)
   - Reemplaza colores duros (#384667, #31405A, #2C3751, #0A7147) por tokens
   - Refuerza eliminación de header día oscuro con cinta neutra
   - Evita que reglas legacy reintroduzcan sombras/fondos inconsistentes
   ========================================================= */

/* Botón primario unificado */
#main-menu .btn-primary,
#main-menu .card .btn-primary,
.btn-primary{
  background:var(--brand-600) !important;
  border:1px solid var(--brand-600) !important;
  color:#FFFFFF !important;
  box-shadow:none !important;
  border-radius:var(--radius-12) !important;
  min-height:44px;
  font-weight:600;
  padding:10px 16px !important;
}
#main-menu .btn-primary:hover,
.btn-primary:hover{
  background:var(--brand-700) !important;
  border-color:var(--brand-700) !important;
}

/* Override específico actualizado: Escanear DNI con color #425273 */
#startScanButton {
  background:#425273 !important;
  border-color:#425273 !important;
  color:#FFFFFF !important;
  box-shadow:0 2px 4px rgba(0,0,0,0.25) !important;
}
#startScanButton:hover { background:#3A495F !important; border-color:#3A495F !important; }
#startScanButton:active { background:#324052 !important; border-color:#324052 !important; }

/* Botón secundario unificado */
#main-menu .btn-secondary,
#main-menu .card .btn-secondary,
.btn-secondary{
  background:var(--bg-0) !important;
  color:var(--text-700) !important;
  border:1px solid var(--line-2) !important;
  box-shadow:none !important;
  border-radius:var(--radius-12) !important;
  min-height:44px;
  font-weight:600;
  padding:10px 16px !important;
}
#main-menu .btn-secondary:hover,
.btn-secondary:hover{
  background:var(--bg-2) !important;
  color:var(--text-700) !important;
}

/* Botón éxito (guardar) unificado */
#main-menu .btn-success,
.btn-success{
  background:var(--success-600) !important;
  border:1px solid var(--success-600) !important;
  color:#FFFFFF !important;
  border-radius:var(--radius-12) !important;
  min-height:44px;
  font-weight:600;
  padding:10px 16px !important;
}
#main-menu .btn-success:hover,
.btn-success:hover{
  background:var(--success-700) !important;
  border-color:var(--success-700) !important;
}

/* Focus accesible consistente (elimina sombras legacy) */
#main-menu .btn:focus-visible,
#main-menu .form-control:focus-visible,
#main-menu .nav-item:focus-visible,
.btn:focus-visible,
.form-control:focus-visible,
.nav-item:focus-visible{
  outline:none !important;
  box-shadow:var(--focus-ring) !important;
}

/* Eliminación reforzada de header día oscuro (usa cinta neutra) */
#main-menu .table-day-header.no-collapse,
#main-menu .table-day-header.no-collapse:hover{
  background:#EAEFF7 !important;
}
#main-menu .table-day-header.no-collapse td{
  color:var(--text-700) !important;
  font-size:12px !important;
  font-weight:700 !important;
  letter-spacing:.02em !important;
  text-transform:uppercase;
}

/* Chips legacy (#main-menu .chip*) ya remapeados arriba—no se reintroducen colores duros */

/* Neutralización de cualquier retorno de colores duros en icon buttons */
#main-menu .btn-icon,
.btn-icon{
  background:transparent !important;
  color:var(--text-700) !important;
  border:none !important;
}
#main-menu .btn-icon:hover,
.btn-icon:hover{
  background:var(--bg-2) !important;
  color:var(--brand-600) !important;
}

/* Excepción: botón de búsqueda (lupita) sin fondo en hover/focus/active dentro de Registro */
#main-menu .registros-search-container #searchButton,
#main-menu .registros-search-container #searchButton:hover,
#main-menu .registros-search-container #searchButton:focus,
#main-menu .registros-search-container #searchButton:focus-visible,
#main-menu .registros-search-container #searchButton:active {
  background: transparent !important;
  box-shadow: none !important;
  border: none !important;
}

/* Fin cleanup final */

/* =========================================================
   FINAL NORMALIZATION RADIUS & STRUCTURAL CLEANUP (Operativa)
   - Unifica radios a 12px para contenedores y botones (excepto chips/badges pill).
   - Anula overrides legacy de 16px/18px/20px y pill globales en botones.
   - Mantiene chips (.chip, .badge) como pill (999px).
   - Asegura que tablas de Registro y stat-cards usen radius estándar.
   - No altera IDs ni lógica JS.
   ========================================================= */
:root{
  --radius:12px;
  --radius-sm:8px;
}

/* Contenedores principales */
.card,
.login-card,
.table-wrapper,
.mobile-table-row,
.modal-content,
.overstay-panel,
.stat-card,
.report-generator,
.report-history,
.card.card-registros {
  border-radius: var(--radius-12) !important;
}

/* Cards que habían sido forzadas a 18px / 20px en Registro */
#main-menu .card,
#main-menu .table-wrapper,
#main-menu .card:has(.table-wrapper),
#main-menu .card .table-wrapper,
#main-menu .card:has(.table-wrapper) .table-wrapper {
  border-radius: var(--radius-12) !important;
}

/* Botones (el bloque de tokens ya define variantes; reforzamos removal pill) */
.btn,
.btn-primary,
.btn-secondary,
.btn-success,
.btn-danger,
.btn-ghost,
#main-menu .btn,
#main-menu .btn-primary,
#main-menu .btn-secondary,
#main-menu .btn-success {
  border-radius: var(--radius-12) !important;
  min-height:44px;
  padding:10px 16px !important;
}

/* =============================================================
  FINAL OVERRIDE: Espaciado inferior en panel de edición móvil
  - Fuerza padding-bottom cero y remueve márgenes residuales
  - Aplica siempre (sin media queries) sólo a #editPanel
  ============================================================= */
#editPanel .panel-body { padding-bottom: 0 !important; }
#editPanel .panel-body > :last-child { margin-bottom: 0 !important; }
#editPanel .panel-body > .d-grid:last-child { margin-bottom: 0 !important; }
#editPanel .d-grid { margin-bottom: 0 !important; }
#editPanel #edit-mobile-status { margin-top: 6px !important; margin-bottom: 0 !important; }
#editPanel #edit-mobile-status:empty { display: none !important; }

/* Refuerzo de especificidad para móviles: gana a reglas previas html.is-mobile */
html.is-mobile #editPanel .panel-body { padding-bottom: 0 !important; }
html.is-mobile #editPanel .panel-body > :last-child { margin-bottom: 0 !important; }
html.is-mobile #editPanel .d-grid { margin-bottom: 0 !important; }
html.is-mobile #editPanel #edit-mobile-status { margin-top: 4px !important; margin-bottom: 0 !important; }
html.is-mobile #editPanel #edit-mobile-status:empty { display: none !important; }

/* Botones de acción en una fila (Guardar / Cancelar) dentro del panel de edición */
#editPanel .d-grid {
  display: flex !important;          /* sobreescribe .d-grid (BS) solo aquí */
  flex-direction: row !important;
  gap: 8px;                           /* equivalente a gap-2, por si se pierde */
  margin-bottom: 0 !important;        /* sin espacio extra bajo los botones */
}
#editPanel .d-grid > .btn {
  flex: 1 1 0;                        /* ambos ocupan 50% */
  min-width: 0;                       /* evita overflow por texto */
  margin-bottom: 0 !important;        /* neutraliza posibles márgenes heredados */
}

/* Icon buttons conservan forma circular si se requiere, pero aquí las normalizamos a radius-12
   (si preferís circulares, eliminar esta regla) */
.btn-icon,
#main-menu .btn-icon {
  border-radius: var(--radius-12) !important;
  width:44px;
  height:44px;
}

/* Stat cards / KPI no pill */
.stat-card,
.dashboard-stats .stat-card {
  border-radius: var(--radius-12) !important;
}

/* Chips & badges permanecen pill */
.chip,
.badge,
#main-menu .chip {
  border-radius:999px !important;
}

/* Inputs normalizados (por si quedaron radios mayores) */
.form-control,
.form-select,
textarea.form-control,
.input,
.select,
.textarea,
#main-menu .form-control,
#main-menu input,
#main-menu select {
  border-radius: var(--radius-12) !important;
}

/* Buscador que sí debe seguir pill: se mantiene excepción explícita */
.search-input,
#main-menu .search-input {
  border-radius:999px !important;
}

/* Eliminación visual de cualquier rastro de radio extremo residual */
.stat-card::before { border-radius: var(--radius-12) !important; }

/* Fin normalización radios */

/* Override final: asegurar que las cards sin footer tengan esquinas inferiores redondeadas */
.card.card--nofooter,
.card.card--nofooter > .card-body:last-child {
  border-bottom-left-radius: var(--block-radius, var(--radius-12)) !important;
  border-bottom-right-radius: var(--block-radius, var(--radius-12)) !important;
}
/* Específico para quick actions si otras reglas intermedias lo anulan */
.card-quick-actions.card.card--nofooter,
.card-quick-actions.card.card--nofooter > .card-body:last-child {
  border-bottom-left-radius: var(--block-radius, var(--radius-12)) !important;
  border-bottom-right-radius: var(--block-radius, var(--radius-12)) !important;
}

/* === Contact Card (Configuración) === */
.contact-card { background:#F1FBF6 !important; border:1px solid #C8EEDB !important; }
.contact-card-content{ display:flex; gap:16px; align-items:flex-start; }
.contact-icon-wrapper{ width:48px; height:48px; border-radius:12px; background:#E0F8ED; color:#047857; display:flex; align-items:center; justify-content:center; font-size:22px; }
.contact-texts h2{ color:#06603F; font-weight:600; font-size:18px; }
.contact-texts p{ color:#276049; font-weight:500; margin:0 0 4px; font-size:13px; }
.contact-numbers{ font-size:14px; line-height:1.4; }
.contact-numbers .number-label{ font-weight:600; color:#055C3A; margin-right:4px; }
.contact-numbers .number-values{ font-weight:700; color:#034D31; font-family:inherit; }
@media (max-width: 640px){ .contact-card-content{ flex-direction:column; } }

/* =============================================================
   FIX MOBILE TOPBAR OVERLAP & BEHAVIOUR (solo móvil)
   - Reduce alturas / tipografía
   - Elimina position:sticky en mobile (actúa como bloque normal)
   - Evita superposición habilitando wrap y controlando gaps
   - No altera lógica JS (solo CSS)
   ============================================================= */
@media (max-width: 768px) {
  /* Topbar deja de ser sticky y se vuelve un bloque normal */
  .topbar {
    position: static !important;
    top: auto !important;
    height: 52px !important; /* antes 60 */
    padding: 0 12px !important;
    flex-wrap: wrap; /* permite que acciones bajen si no entra */
    gap: 4px;
    backdrop-filter: none !important;
  }
  /* Restablecer padding-top del contenido (ya no hay barra fija) */
  .content-area {
    padding-top: var(--space-16) !important;
  }
  /* Se vuelve a fila horizontal para ahorrar altura y evitar apilado que causa solapes */
  .topbar-left {
    flex-direction: row !important;
    align-items: center !important;
    gap: 6px !important;
    flex: 1 1 auto;
    min-width: 0; /* permite truncar */
  }
  .topbar-title {
    font-size: 14px !important;
    line-height: 1.2 !important;
    letter-spacing: .04em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
  }
  .topbar-actions {
    gap: 8px !important;
    flex: 0 0 auto;
  }
  .topbar-actions .btn, .topbar .btn-back {
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 12px !important;
    font-size: 12px !important;
  }
  .topbar-actions .btn-icon, .topbar .btn-icon {
    width: 36px !important;
    height: 36px !important;
    min-width: 36px !important;
  }
  .user-info {
    font-size: 12px !important;
    padding: 2px 8px !important;
    gap: 6px !important;
  }
  .user-info i { font-size: 18px !important; }
  /* Si el ancho es muy reducido, permitir que acciones pasen a segunda línea sin solapar */
  .topbar > * { flex-shrink: 0; }
  /* Scroll de toda la página: la cabecera deja de permanecer siempre visible */
  .main-wrapper { overflow: visible !important; }
  .content-area { overflow: visible !important; height: auto !important; }
}

/* =============================================================
   MOBILE TOPBAR ULTRA COMPACT (segunda fase ajuste)
   - Altura ~44px
   - Título pequeño a la izquierda
   - Iconos uniformes (campana, usuario, logout) a la derecha
   - Oculta texto de usuario para ahorrar espacio
   ============================================================= */
@media (max-width: 768px) {
  .topbar {
    height:44px !important;
    min-height:44px !important;
    padding:0 8px !important;
    gap:8px !important;
  }
  .topbar-left { flex:0 1 auto !important; gap:4px !important; }
  .topbar-title {
    font-size:13px !important;
    font-weight:600 !important;
    margin:0 !important;
    letter-spacing:.03em !important;
  }
  .topbar-actions { flex:1 1 auto !important; justify-content:flex-end !important; gap:6px !important; }
  .topbar-actions .btn,
  .topbar-actions .btn-icon,
  .topbar-actions button,
  .topbar .btn-icon { 
    width:36px !important; height:36px !important; min-width:36px !important; min-height:36px !important; padding:0 !important; display:inline-flex !important; align-items:center; justify-content:center; font-size:16px !important; 
  }
  /* User info compactado a icono */
  .user-info { background:transparent !important; padding:0 !important; gap:0 !important; border-radius:8px !important; width:36px !important; height:36px !important; justify-content:center; }
  .user-info span { display:none !important; }
  .user-info i { font-size:20px !important; margin:0 !important; }
  /* Badge de notificaciones reposicionado si existe */
  #overstayBell { position:relative; }
  #overstayBadge { position:absolute; top:4px; right:4px; transform:none; }
}

/* =============================================================
   MOBILE HEADER FINAL FIX (cabecera fija + scroll único)
   - Reestablece cabecera fija arriba del viewport
   - Elimina scroll interno duplicado (usa scroll del documento)
   - Ajusta padding superior de contenido para evitar solapado
   - No afecta escritorio (>768px)
   ============================================================= */
@media (max-width: 768px) {
  .topbar {
    position: fixed !important;
    top: 0; left: 0; right: 0;
    z-index: 1500;
    background: var(--surface) !important;
    box-shadow: 0 2px 4px rgba(0,0,0,0.06);
  }
  /* Contenido desplaza por debajo de la cabecera fija */
  .content-area {
    overflow: visible !important;
    padding-top: calc(44px + var(--space-16)) !important;
  }
  /* Evitar recorte en wrapper principal */
  .main-wrapper { overflow: visible !important; }
  /* Asegurar que body permita scroll completo */
  html, body { height: auto; }
}

/* =============================================================
   MOBILE OVERRIDE FINAL (Remueve topbar fija y doble scroll)
   - La topbar vuelve a ser flujo normal (static)
   - Un único scroll (body) quitando overflow internos
   - Mantiene altura compacta e iconos ya definidos
   ============================================================= */
@media (max-width: 768px) {
  .app-shell { height:auto !important; min-height:100vh !important; }
  .main-wrapper { overflow:visible !important; height:auto !important; }
  .content-area { overflow:visible !important; height:auto !important; padding-top: var(--space-16) !important; }
  .topbar { position:static !important; top:auto !important; box-shadow:none !important; background:transparent !important; }
}

/* =============================================================
   MOBILE TOPBAR ULTRA MIN (FINAL OVERRIDE)
   - Siempre fija arriba
   - Altura mínima (38-40px)
   - Íconos uniformes, texto comprimido
   - Se coloca al final para ganar la cascada
   ============================================================= */
@media (max-width: 768px) {
  .topbar {
    position: fixed !important;
    top: 0; left: 0; right: 0;
    height: 40px !important;
    min-height: 40px !important;
    padding: 0 6px !important;
    background: var(--surface) !important;
    box-shadow: 0 1px 3px rgba(0,0,0,0.08) !important;
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    z-index: 1600 !important;
  }
  .topbar-left { flex: 0 1 auto !important; gap:4px !important; align-items:center !important; }
  .topbar-title {
    font-size: 12px !important;
    font-weight: 600 !important;
    margin: 0 !important;
    letter-spacing: .04em !important;
    white-space: nowrap !important;
    max-width: 140px;
    overflow: hidden; text-overflow: ellipsis;
  }
  .topbar-actions { flex: 1 1 auto !important; justify-content: flex-end !important; gap:4px !important; }
  .topbar-actions .btn, .topbar-actions .btn-icon, .topbar .btn-icon, .user-info {
    width: 34px !important; height:34px !important; min-width:34px !important; min-height:34px !important;
    padding:0 !important; border-radius:8px !important; font-size:16px !important;
  }
  .user-info { background:transparent !important; box-shadow:none !important; }
  .user-info span { display:none !important; }
  .user-info i { font-size:18px !important; }
  #overstayBell { position:relative; }
  #overstayBadge { top:2px !important; right:2px !important; }
  /* Único scroll: compensación de altura fija */
  .content-area { padding-top: calc(40px + 8px) !important; }
  .main-wrapper { height: auto !important; }
  html, body { height:auto; }
}

/* =============================================================
   ULTRA MIN TOPBAR (FORZADO FINAL) – mitad barra inferior (~32px)
   ============================================================= */
@media (max-width: 768px) {
  .topbar {
    height:38px !important;
    min-height:38px !important;
    padding:0 6px !important;
    gap:6px !important;
  }
  .topbar-title { font-size:12px !important; max-width:140px; }
  .topbar-actions { gap:6px !important; }
  .topbar-actions .btn,
  .topbar-actions .btn-icon,
  .topbar .btn-icon,
  .user-info { width:30px !important; height:30px !important; min-width:30px !important; min-height:30px !important; font-size:14px !important; }
  .user-info i { font-size:16px !important; }
  #overstayBadge { transform:scale(.85); top:2px !important; right:2px !important; }
  .content-area { padding-top: calc(32px + 6px) !important; }
  /* Garantizar fijación también dentro de cualquier vista específica */
  #paqueteria-view ~ .topbar, #paqueteria-view .topbar { position:fixed !important; }
}

/* =============================================================
   FIX: Eliminar bloque fantasma de 3 íconos (mobile-action-bar)
   - Se ocultaba a veces y quedaba detrás al hacer scroll
   - Forzamos display none definitivo en móvil
   ============================================================= */
/* =============================================================
   EDIT PANEL – DIMENSIONES COMPACTAS EN MÓVIL (override final)
   - Ventana más chica: ~56vh y 88% de ancho, máx 360px
   - Cuerpo con scroll interno y padding compacto
   - No afecta otros paneles
   ============================================================= */
@media (max-width: 900px) {
  #editPanel {
    width: 92% !important;
    max-width: 420px !important; /* más ancho para que entren campos sin crecer alto */
    height: auto !important;
    max-height: none !important; /* sin límite de alto: evita scroll interno/externo del panel */
  }
  #editPanel .panel-header { padding: 8px 12px !important; }
  #editPanel .panel-title { font-size: 13px !important; }
  #editPanel .panel-body {
    overflow: visible !important; /* sin scroll interno */
    max-height: none !important;  /* asegura que no se recorte el contenido */
    padding: 8px 12px 0 !important; /* más compacto aún y sin padding inferior */
  }
}

/* =============================================================
   EDIT PANEL – FULLSCREEN EN MÓVIL (override final)
   - El panel ocupa toda la pantalla (solo móvil)
   - Sin bordes ni sombra; header + body llenan alto completo
   - Mantiene compacidad previa de paddings/controles
   ============================================================= */
@media (max-width: 768px) {
  #editPanel {
    position: fixed !important;
    inset: 0 !important;
    width: 100vw !important;
    height: 100vh !important;
    max-width: none !important;
    max-height: none !important;
    transform: none !important;
    margin: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    overflow: hidden !important; /* sin scroll visible de la ventana */
  }
  #editPanel .panel-header {
    padding: 10px 14px !important;
    border-top-left-radius: 0 !important;
    border-top-right-radius: 0 !important;
  }
  #editPanel .panel-title { font-size: 13px !important; }
  #editPanel .panel-body {
    flex: 1 1 auto !important;
    padding: 10px 14px 0 !important;
    overflow: visible !important; /* sin scroll interno */
    max-height: none !important;
  }
}

/* Overrides finales extra para asegurar que no haya scroll ni límites heredados en #editPanel */
html.is-mobile #editPanel { max-height: none !important; height: auto !important; }
html.is-mobile #editPanel .panel-body { overflow: visible !important; max-height: none !important; }
/* Botonera aún más compacta en esa ventana */
#editPanel .d-grid { gap: 6px !important; }
#editPanel .d-grid > .btn { min-height: 36px !important; padding: 8px 12px !important; }
/* Inputs compactos para reducir altura total del formulario sin perder usabilidad */
#editPanel .form-control, #editPanel .form-select, #editPanel textarea.form-control {
  min-height: 36px !important;
  padding: 8px 10px !important;
}
/* Reducir márgenes verticales de grupos y textos auxiliares dentro del panel */
#editPanel .mb-3 { margin-bottom: 8px !important; }
#editPanel .mb-2 { margin-bottom: 6px !important; }
#editPanel .form-text { font-size: 12px !important; margin-top: 2px !important; }
/* Fijar textarea a ~2 líneas visibles sin scroll interno notorio */
#editPanel #edit-mobile-observaciones { max-height: 64px !important; }
/* (no se requiere regla específica para textarea aquí) */
/* Tipografía ligeramente más chica dentro del panel para ahorrar vertical */
#editPanel .form-label { font-size: 12px !important; margin-bottom: 4px !important; }
#editPanel .form-text { font-size: 12px !important; margin-top: 4px !important; }
/* (removido bloque duplicado y líneas huérfanas inválidas) */
@media (max-width: 900px) {
  #mobile-actions,
  .mobile-action-bar { display:none !important; visibility:hidden !important; pointer-events:none !important; }
}

/* =============================================================
   MOBILE SCAN VIEW COMPACT
   - Reduce altura del video y espacios verticales
   - Mantiene funcionalidad de escaneo
   ============================================================= */
@media (max-width: 768px) {
  #scan-view .page-header { margin-bottom: 8px !important; }
  #scan-view .page-header h1 { font-size:16px !important; margin-bottom:4px !important; }
  #scan-view .page-subtitle { font-size:12px !important; }
  #scan-view .card { margin-bottom:12px !important; }
  #scan-view .card-header { padding:8px 14px !important; }
  #scan-view .scan-indicator { gap:6px !important; }
  #scan-view .scan-text { font-size:11px !important; }
  #scan-view video { height:240px !important; max-height:45vh !important; }
  #scan-view .video-container { max-height:45vh; }
  #scan-view .scan-frame { border-width:2px; width:78%; height:52%; top:22%; left:11%; right:11%; bottom:auto; }
  #scan-view .card-footer { padding:10px 14px !important; }
  #scan-view .card-footer .btn { min-height:38px !important; padding:8px 16px !important; font-size:13px !important; }
  /* Formulario post-scan (si reutiliza manual) */
  #ingresoManualForm .card-header { padding:12px 16px !important; }
  #ingresoManualForm .card-body { padding:16px 16px 12px !important; }
  #ingresoManualForm .form-group { margin-bottom:14px !important; }
  /* Acciones de fila (desplegable registros) apiladas */
  .mobile-row-actions { flex-direction: row !important; align-items: stretch !important; justify-content: space-between !important; gap: 12px !important; width:100%; }
  .mobile-row-actions .btn { 
    flex:0 0 auto !important;
    width:48px !important;
    height:48px !important;
    border-radius:50% !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    padding:0 !important;
    gap:0 !important;
  }
  .mobile-row-actions .btn i { margin:0 !important; font-size:20px !important; }
  .mobile-row-actions .btn .btn-text-label { display:none !important; }
  /* Botón Editar móvil: redondo, icon-only (mismo look que egreso) */
  .mobile-row-actions .btn.btn-editar-mobile { 
    width:48px !important; 
    min-width:48px !important; 
    height:48px !important; 
    padding:0 !important; 
    border-radius:50% !important; 
    gap:0 !important; 
    display:flex !important; align-items:center !important; justify-content:center !important;
  }
  .mobile-row-actions .btn.btn-editar-mobile .btn-text-label { display:none !important; }
}

/* Override final: asegurar bloque 'En curso' móvil completo amarillo (por si algún estilo posterior interfiere) */
.mobile-day-header.en-curso-header { background:#FEF3C7 !important; width:100% !important; display:block !important; padding:8px 14px !important; border-radius:6px !important; }
.mobile-day-header.en-curso-header h3 { color:#92400E !important; }

/* Override solicitado: color específico para botón "Nuevo registro" en dashboard */
#nuevo-registro-quick {
  background:#3A5687 !important;
  border-color:#3A5687 !important;
  color:#FFFFFF !important;
}
#nuevo-registro-quick:hover {
  background:#354D7A !important; /* tono ligeramente más oscuro para hover */
  border-color:#354D7A !important;
}
#nuevo-registro-quick:active,
#nuevo-registro-quick:focus {
  background:#2F456D !important; /* active/focus */
  border-color:#2F456D !important;
}

/* Botón móvil icono compacto (solo en mobile) */
#nuevo-registro-quick-mobile { display:none; }
@media (max-width:768px){
  #nuevo-registro-quick { display:none !important; }
  #nuevo-registro-quick-mobile { 
    display:inline-flex !important; 
    width:60px !important; height:60px !important; 
    min-width:60px !important; min-height:60px !important; 
    aspect-ratio:1/1; 
    padding:0 !important; margin:0 !important; 
    align-items:center; justify-content:center; 
    border-radius:18px !important; 
    background:#2563EB !important; border-color:#2563EB !important; color:#FFF !important; 
    box-shadow:0 6px 14px rgba(37,99,235,0.42); 
    line-height:1 !important; gap:0 !important; 
  }
  #nuevo-registro-quick-mobile i { font-size:28px; line-height:1; margin:0 !important; }
  #nuevo-registro-quick-mobile:hover { background:#1D4ED8 !important; border-color:#1D4ED8 !important; }
  #nuevo-registro-quick-mobile:active { background:#1E40AF !important; border-color:#1E40AF !important; box-shadow:0 2px 4px rgba(30,64,175,0.45) inset; }
  #nuevo-registro-quick-mobile:focus-visible { outline:0; box-shadow:0 0 0 3px rgba(37,99,235,0.35); }
}

/* ================= Footer SecurIA (desactivado) =================
footer.securia-footer { ... }
*/

/* Modal legal desactivado */
/* .legal-modal { ... } */
@media (prefers-reduced-motion:reduce){ .legal-modal__dialog { scroll-behavior:auto; } }
@media (max-width:600px){
  .legal-modal { padding:32px 8px; }
  .legal-modal__dialog { font-size:12px; }
  .legal-modal__body { padding:22px 20px 26px; }
  .legal-page h1 { font-size:20px; }
  .securia-footer__inner { padding:28px 16px 36px; }
}
.legal-modal.d-none { display:none; }

/* Override tamaño iconos KPI (solicitud: más grandes) */
.dashboard-stats .stat-icon { width:60px !important; height:60px !important; font-size:30px !important; }

/* Modal centrada genérica (edición registro) */
.center-modal { position:fixed; inset:0; z-index:4100; display:flex; align-items:center; justify-content:center; padding:24px 16px; opacity:0; transform:translateY(10px); transition:opacity .18s ease, transform .18s ease; }
.center-modal.open { opacity:1; transform:translateY(0); }
.center-modal.d-none { display:none; }
.center-modal__dialog { background:#FFFFFF; width:100%; border-radius:18px; box-shadow:0 8px 40px -4px rgba(0,0,0,0.22), 0 2px 6px rgba(0,0,0,0.06); border:1px solid #E2E8F0; display:flex; flex-direction:column; max-height:calc(100vh - 140px); }
.center-modal__header { padding:20px 24px 12px; display:flex; align-items:center; justify-content:space-between; }
.center-modal__title { font-size:18px; font-weight:600; margin:0; }
.center-modal__body { padding:8px 24px 24px; overflow-y:auto; }
/* Más espacio entre campos del formulario de edición */
#registroEditModal #registro-edit-form { 
  display:flex !important; 
  flex-direction:column !important; 
  gap:26px !important; /* aumento leve para que se note */
  row-gap:26px !important; 
}
#registroEditModal #registro-edit-form > div { margin:0 !important; padding:0 !important; }
#registroEditModal #registro-edit-form > div label { display:block; margin:0 0 8px 0 !important; }
/* Bloque Observaciones: asegurar que el textarea no pegue con acciones */
#registroEditModal #registro-edit-form textarea { resize:vertical; }

/* ==== FINAL OVERRIDE: Botón Egreso (verde saturado, cuadro de registro) ==== */
#main-menu #scanResults .btn-egreso,
#main-menu .table #scanResults .btn-egreso,
#main-menu .table .btn-egreso {
  background-color: #00C853 !important;
  border-color: #00C853 !important;
  color: #FFFFFF !important;
}
#main-menu #scanResults .btn-egreso .bi,
#main-menu .table #scanResults .btn-egreso .bi,
#main-menu .table .btn-egreso .bi { color:#FFFFFF !important; }
#main-menu #scanResults .btn-egreso:hover,
#main-menu .table #scanResults .btn-egreso:hover,
#main-menu .table .btn-egreso:hover {
  background-color: #00B14A !important;
  border-color: #00B14A !important;
}
#main-menu #scanResults .btn-egreso:active,
#main-menu .table #scanResults .btn-egreso:active,
#main-menu .table .btn-egreso:active {
  background-color: #00A043 !important;
  border-color: #00933F !important;
}
/* Disabled: mantener color con opacidad para no parecer pastel */
#main-menu #scanResults .btn-egreso:disabled,
#main-menu #scanResults .btn-egreso[aria-disabled="true"],
#main-menu .table #scanResults .btn-egreso:disabled,
#main-menu .table #scanResults .btn-egreso[aria-disabled="true"],
#main-menu .table .btn-egreso:disabled,
#main-menu .table .btn-egreso[aria-disabled="true"] {
  background-color: #E2E8F0 !important; /* gris neutro */
  border: none !important;
  color: #475569 !important;
  opacity: 1 !important; /* sin efecto lavado verde */
}

/* Forzar color #FFFFFF en texto/ícono del botón de egreso en todos los estados activos */
#main-menu .table .btn-egreso:not([aria-disabled="true"]):not(:disabled),
#main-menu #scanResults .btn-egreso:not([aria-disabled="true"]):not(:disabled),
.mobile-table-row .btn-egreso:not([aria-disabled="true"]):not(:disabled) {
  color: #FFFFFF !important;
}
#main-menu .table .btn-egreso:not([aria-disabled="true"]):not(:disabled) .bi,
#main-menu #scanResults .btn-egreso:not([aria-disabled="true"]):not(:disabled) .bi,
.mobile-table-row .btn-egreso:not([aria-disabled="true"]):not(:disabled) .bi {
  color: #FFFFFF !important;
}
#main-menu .table .btn-egreso:hover .bi,
#main-menu #scanResults .btn-egreso:hover .bi,
.mobile-table-row .btn-egreso:hover .bi,
#main-menu .table .btn-egreso:active .bi,
#main-menu #scanResults .btn-egreso:active .bi,
.mobile-table-row .btn-egreso:active .bi {
  color: #FFFFFF !important;
}

/* Override global: todos los btn-egreso activos usan el mismo verde puro */
.btn-egreso:not([aria-disabled="true"]):not(:disabled) {
  background-color: #00C853 !important;
  border: none !important;
  color: #FFFFFF !important;
  box-shadow: none !important;
  opacity: 1 !important;
  filter: none !important;
}
.btn-egreso:not([aria-disabled="true"]):not(:disabled):hover {
  background-color: #00B14A !important;
}
.btn-egreso:not([aria-disabled="true"]):not(:disabled):active {
  background-color: #00A043 !important;
}
.btn-egreso:not([aria-disabled="true"]):not(:disabled) .bi {
  color: #FFFFFF !important;
}

/* Quitar contorno/halo de enfoque en btn-egreso (no debe mostrar ring) */
.btn-egreso:focus,
.btn-egreso:focus-visible,
#main-menu .table .btn-egreso:focus,
#main-menu .table .btn-egreso:focus-visible,
#main-menu #scanResults .btn-egreso:focus,
#main-menu #scanResults .btn-egreso:focus-visible,
.mobile-table-row .btn-egreso:focus,
.mobile-table-row .btn-egreso:focus-visible {
  outline: none !important;
  box-shadow: none !important;
  border: none !important;
}

/* En segunda alerta (row-critical) el botón activo conserva el mismo verde saturado */
#main-menu .table tr.row-critical .btn-egreso,
#main-menu #scanResults tr.row-critical .btn-egreso,
.mobile-table-row.row-critical .btn-egreso {
  background-color: #00C853 !important;
  border: none !important;
  color: #FFFFFF !important;
  opacity: 1 !important;
  box-shadow: none !important;
}
#main-menu .table tr.row-critical .btn-egreso:hover,
#main-menu #scanResults tr.row-critical .btn-egreso:hover,
.mobile-table-row.row-critical .btn-egreso:hover {
  background-color: #00B14A !important;
}
#main-menu .table tr.row-critical .btn-egreso:active,
#main-menu #scanResults tr.row-critical .btn-egreso:active,
.mobile-table-row.row-critical .btn-egreso:active {
  background-color: #00A043 !important;
}
#registroEditModal #registro-edit-form .form-actions { 
  margin-top:6px !important; /* antes 12px: ahora más pegado a Observaciones */
  padding-top:0 !important; 
}
#registroEditModal #registro-edit-form .form-control, 
#registroEditModal #registro-edit-form .form-select { padding-top:10px; padding-bottom:10px; }
#registroEditModal #modal-edit-lote-owner { margin-top:6px; }
@media (max-width:640px){
  .center-modal { padding:16px 10px; align-items:center; justify-content:center; }
  .center-modal__dialog { border-radius:14px; }
  .center-modal__title { font-size:16px; }
}

/* Flyout edición registro */
#registro-edit-flyout { position:fixed; top:0; right:0; height:100vh; width:0; overflow:hidden; z-index:1300; pointer-events:none; }
#registro-edit-flyout.open { width:420px; pointer-events:auto; }
#registro-edit-flyout .ref-flyout-panel { position:absolute; top:0; right:-420px; width:420px; max-width:100%; height:100%; background:#FFFFFF; box-shadow:-4px 0 18px -4px rgba(0,0,0,0.18); display:flex; flex-direction:column; border-left:1px solid #E2E8F0; transition: right .22s ease; }
#registro-edit-flyout.visible .ref-flyout-panel { right:0; }
#registro-edit-flyout header { padding:18px 20px 14px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid #E2E8F0; }
#registro-edit-flyout header h3 { font-size:16px; font-weight:600; margin:0; line-height:1.2; }
#registro-edit-flyout .close-flyout { background:transparent; border:0; padding:4px; border-radius:8px; color:#475569; }
#registro-edit-flyout .close-flyout:hover { background:#F1F5F9; color:#1E293B; }
#registro-edit-flyout .flyout-body { padding:18px 20px 32px; overflow-y:auto; flex:1; }
#registro-edit-flyout .edit-form-stack .form-group { margin-bottom:16px; }
#registro-edit-flyout .edit-form-stack label { font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:.05em; color:#475569; margin-bottom:4px; display:block; }
#registro-edit-flyout .edit-form-stack input.form-control,#registro-edit-flyout .edit-form-stack textarea.form-control { font-size:14px; }
@media (max-width:640px){
  #registro-edit-flyout.open { width:100%; }
  #registro-edit-flyout .ref-flyout-panel { width:100%; }
}
