/*
 * Ajustes visuales sutiles sobre soft-ui-dashboard.css.
 * No reemplaza el archivo base: se carga después y sobreescribe puntualmente
 * botones y el estado activo del sidebar. Cero cambios de estructura/lógica.
 */

/* --- Botones: menos "gritones", mismo color de marca (bg-gradient-*) --- */
.btn {
  text-transform: none;
  letter-spacing: normal;
  font-weight: 600;
  border-radius: 0.75rem;
  box-shadow: 0 1px 2px rgba(20, 20, 40, 0.08), 0 6px 14px -8px rgba(20, 20, 40, 0.35);
}

.btn:hover:not(.btn-icon-only) {
  box-shadow: 0 2px 4px rgba(20, 20, 40, 0.1), 0 8px 18px -8px rgba(20, 20, 40, 0.4);
}

.btn:active,
.btn:active:focus,
.btn:active:hover {
  box-shadow: 0 1px 2px rgba(20, 20, 40, 0.08);
}

/* El vendor atenúa botones deshabilitados con opacity:0.65 sobre TODO el
   botón, fondo y texto juntos. Eso mezcla el blanco del texto con el degradé
   rojo/amarillo de fondo y sale un rosado lavado en vez de blanco (ej. los
   botones "Descargar manual" antes de que exista el archivo). Se reemplaza
   por un filtro de brillo/saturación: atenúa el color de fondo igual, pero
   el texto blanco se mantiene blanco. Aplica en los dos temas por igual. */
.btn:disabled,
.btn.disabled,
fieldset:disabled .btn {
  opacity: 1;
  filter: brightness(0.8) saturate(0.85);
}

/* --- Tarjetas: sombra grande y difusa -> borde fino + sombra corta, se ven más asentadas --- */
.card {
  border: 1px solid rgba(20, 20, 40, 0.14);
  box-shadow: 0 1px 3px rgba(20, 20, 40, 0.08), 0 12px 26px -14px rgba(20, 20, 40, 0.32);
}

/* --- Estados (badges/pills/texto): warning hoy es el mismo rojo que el botón primario. */
/* Se separan las 3 semánticas y se alinean con la paleta ya usada en el gauge del Escritorio. */
.bg-success {
  background-color: #00cc78 !important;
}

.bg-warning {
  background-color: #ffb400 !important;
}

.bg-danger {
  background-color: #ff3355 !important;
}

.text-success {
  color: #009e5c !important;
}

.text-warning {
  color: #b97b00 !important;
}

.text-danger {
  color: #e21f3d !important;
}

/* --- Sidebar: fila activa con tinte de marca en vez de la tarjeta blanca flotante --- */
.navbar-vertical .navbar-nav > .nav-item .nav-link.active {
  background-color: rgba(245, 57, 57, 0.08);
}

.navbar-vertical .navbar-nav .nav-link.active {
  box-shadow: none;
  border-radius: 0.75rem;
}

/* Los íconos nuevos del sidebar (trazo simple, stroke="currentColor") no usan
   el sistema de relleno color-background/color-foreground de los íconos
   viejos — necesitan su propia regla para ponerse blancos en el ítem activo. */
.navbar-vertical .navbar-nav > .nav-item .nav-link.active .icon svg {
  color: #fff;
}

/* ==========================================================================
   Tema oscuro real. Opt-in por completo: solo se activa con [data-theme="dark"]
   en <html>, puesto por el botón del navbar (ver base.blade.php). Nunca sigue
   la preferencia del sistema operativo.
   Primera pasada: superficies principales (fondo, tarjetas, sidebar, navbar,
   inputs, tablas, dropdowns, modales). Se afina componente por componente
   a medida que se detecten casos puntuales, igual que el resto de la propuesta.
   ========================================================================== */

:root[data-theme="dark"] body.bg-gray-100 {
  background-color: #0f1020 !important;
}

/* .bg-gray-100 también se usa suelto sobre otros elementos (ej. cada <li>
   de la lista de notificaciones), no solo en el body. Esa regla de arriba
   es más específica y sigue ganando ahí, así que esta no le pisa nada. */
:root[data-theme="dark"] .bg-gray-100 {
  background-color: #1f2140 !important;
}

:root[data-theme="dark"] body {
  color: #c1c3de;
}

/* Los títulos y textos "oscuros" del tema claro traen su propio color fijo
   (#252f40, casi negro) que no depende del body — hay que pisarlos aparte. */
:root[data-theme="dark"] h1,
:root[data-theme="dark"] h2,
:root[data-theme="dark"] h3,
:root[data-theme="dark"] h4,
:root[data-theme="dark"] h5,
:root[data-theme="dark"] h6,
:root[data-theme="dark"] .h1,
:root[data-theme="dark"] .h2,
:root[data-theme="dark"] .h3,
:root[data-theme="dark"] .h4,
:root[data-theme="dark"] .h5,
:root[data-theme="dark"] .h6 {
  color: #f1f1f8;
}

:root[data-theme="dark"] .text-dark {
  color: #f1f1f8 !important;
}

:root[data-theme="dark"] .text-secondary,
:root[data-theme="dark"] .text-body,
:root[data-theme="dark"] .text-muted {
  color: #a3a6c4 !important;
}

/* Regla del vendor "label, .form-label { color: #252f40 }" aplica a TODO
   <label> de la app (no solo a los que llevan la clase .form-label) — cubre
   cada campo de cada formulario/tabla editable. */
:root[data-theme="dark"] label,
:root[data-theme="dark"] .form-label {
  color: #f1f1f8;
}

:root[data-theme="dark"] .card {
  background-color: #171933;
  border-color: rgba(255, 255, 255, 0.08);
}

:root[data-theme="dark"] .sidenav {
  background-color: #171933 !important;
}

:root[data-theme="dark"] .navbar-vertical .nav-link {
  color: #c1c3de;
}

:root[data-theme="dark"] .navbar-vertical .navbar-nav > .nav-item .nav-link.active {
  color: #f1f1f8;
}

:root[data-theme="dark"] .navbar-vertical .icon.bg-white {
  background-color: #1f2140 !important;
}

:root[data-theme="dark"] .navbar-main,
:root[data-theme="dark"] #navbarBlur {
  background-color: #171933 !important;
}

:root[data-theme="dark"] .form-control,
:root[data-theme="dark"] .form-select {
  background-color: #1f2140;
  border-color: #30325a;
  color: #f1f1f8;
}

:root[data-theme="dark"] .table {
  color: #c1c3de;
  border-color: #30325a;
}

:root[data-theme="dark"] .table-secondary,
:root[data-theme="dark"] thead {
  background-color: #1f2140;
  color: #f1f1f8;
}

:root[data-theme="dark"] .dropdown-menu {
  background-color: #171933;
  color: #c1c3de;
}

:root[data-theme="dark"] .modal-content {
  background-color: #171933;
  border-color: rgba(255, 255, 255, 0.1);
}

/* Botones "outline" (fondo transparente, borde y texto en rojo de marca por
   diseño): en claro se leen bien sobre fondo blanco, pero contra el fondo
   oscuro se ven "rojizos" e inconsistentes con el resto del texto. Se pasan
   a blanco solo en el estado normal — el :hover sigue rellenando de rojo
   con texto blanco, ese sí queda bien y no se toca. */
:root[data-theme="dark"] .btn-outline-primary,
:root[data-theme="dark"] .btn-outline-danger {
  color: #f1f1f8;
  border-color: #f1f1f8;
}

/* El vendor define "a" dos veces: una en rojo de marca, y otra más abajo
   en el archivo que la pisa con negro puro (#000) para toda la app. En claro
   pasa desapercibido; en oscuro deja cualquier link ilegible (ej. los nombres
   de indicador en la tabla del Escritorio).
   :not(.btn) es clave: varios botones de la app son <a class="btn ..."> en
   vez de <button> (ej. "Descargar manual" cuando el archivo ya existe). Sin
   excluir .btn, esta regla le gana por especificidad al color propio de esos
   botones (.btn.bg-gradient-primary{color:#fff}) y los deja rojizos/rosados
   en vez de blancos. */
:root[data-theme="dark"] a:not(.btn) {
  color: #ff8a90;
}

:root[data-theme="dark"] hr.horizontal.dark {
  background-image: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0));
}

/* ==========================================================================
   Segunda pasada: componentes puntuales detectados en el barrido sobre
   soft-ui-dashboard.css, cruzados contra el uso real en resources/views.
   Misma paleta de 6 colores de arriba, nada nuevo por componente.
   ========================================================================== */

/* --- Cabeceras y pies de tarjeta: traen su propio fondo blanco fijo,
   independiente del .card ya oscurecido arriba (son selectores distintos,
   no heredan el override de .card). Aparecen en casi todas las páginas. --- */
:root[data-theme="dark"] .card-header,
:root[data-theme="dark"] .card-footer {
  background-color: #171933;
  border-color: #30325a;
}

/* --- Encabezado de tabla con variante "table-secondary" (ej. dashboard):
   Bootstrap no pinta el fondo directamente sobre el elemento con la clase,
   lo guarda en la variable --bs-table-bg, y son las celdas (td/th) las que
   la leen. Si solo se pisa background-color en .table-secondary como antes,
   las celdas siguen mostrando el gris claro original porque la variable
   nunca cambió. Hay que pisar la variable, no la propiedad. --- */
:root[data-theme="dark"] .table-secondary {
  --bs-table-bg: #1f2140;
  color: #f1f1f8;
  border-color: #30325a;
}

/* --- Items de menús desplegables (usuario, notificaciones): el estado
   normal ya hereda el color de .dropdown-menu de arriba, pero :hover/:focus
   traen su propio gris claro fijo pensado para fondo blanco. --- */
:root[data-theme="dark"] .dropdown-item {
  color: #c1c3de;
}

:root[data-theme="dark"] .dropdown-item:hover,
:root[data-theme="dark"] .dropdown-item:focus {
  color: #f1f1f8;
  background-color: #1f2140;
}

:root[data-theme="dark"] .dropdown-divider {
  border-top-color: #30325a;
}

/* --- Separadores internos del modal: el fondo general ya se oscurece
   arriba (.modal-content), pero header/footer traen su propio borde claro
   fijo aparte. --- */
:root[data-theme="dark"] .modal-header,
:root[data-theme="dark"] .modal-footer {
  border-color: #30325a;
}

/* --- Checkboxes y radios sin marcar: fondo blanco sólido fijo (el estado
   marcado ya usa un degradado oscuro de marca y no necesita cambios). --- */
:root[data-theme="dark"] .form-check-input {
  background-color: #1f2140;
}

:root[data-theme="dark"] .form-check:not(.form-switch) .form-check-input[type="checkbox"],
:root[data-theme="dark"] .form-check:not(.form-switch) .form-check-input[type="radio"] {
  border-color: #30325a;
}

/* --- Switches (toggle): la pista sin activar es un tinte casi transparente
   pensado para verse sobre blanco; sobre el fondo oscuro se vuelve casi
   invisible. El estado activado ya es un color sólido oscuro y no cambia. --- */
:root[data-theme="dark"] .form-switch .form-check-input {
  background-color: #1f2140;
  border-color: #30325a;
}

/* --- Select nativo: la flechita del combo es un SVG con trazo oscuro fijo
   (#343a40), invisible sobre el fondo oscuro que ya tiene el input. --- */
:root[data-theme="dark"] .form-select {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23c1c3de' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
}

/* --- Inputs y selects deshabilitados o de solo lectura: fondo gris claro
   fijo, muy común en campos calculados/no editables de los formularios. --- */
:root[data-theme="dark"] .form-control:disabled,
:root[data-theme="dark"] .form-control:read-only,
:root[data-theme="dark"] .form-select:disabled {
  background-color: #1f2140;
  color: #a3a6c4;
}

/* --- Texto adosado a inputs (unidades, prefijos/sufijos de campo). --- */
:root[data-theme="dark"] .input-group-text {
  background-color: #1f2140;
  border-color: #30325a;
  color: #c1c3de;
}

/* --- Paginación (Bootstrap, usada por WithPagination de Livewire):
   fondo blanco y bordes claros fijos. El estado activo ya usa el rojo de
   marca y no se toca. --- */
:root[data-theme="dark"] .page-link {
  background-color: #171933;
  border-color: #30325a;
  color: #c1c3de;
}

:root[data-theme="dark"] .page-link:hover,
:root[data-theme="dark"] .page-link:focus {
  background-color: #1f2140;
  border-color: #30325a;
  color: #f1f1f8;
}

:root[data-theme="dark"] .page-item.disabled .page-link {
  background-color: #171933;
  border-color: #30325a;
  color: #a3a6c4;
}

/* --- Listas tipo "list-group" (ej. resumen de entrega de EPP): item con
   fondo blanco fijo. --- */
:root[data-theme="dark"] .list-group-item {
  background-color: #171933;
  border-color: #30325a;
}

/* --- Pestañas (nav-tabs, ej. vincular capacitaciones): la pestaña activa
   se pinta blanca a propósito para "fundirse" con la tarjeta de abajo; en
   oscuro debe fundirse con la tarjeta oscura en su lugar. --- */
:root[data-theme="dark"] .nav-tabs {
  border-bottom-color: #30325a;
}

:root[data-theme="dark"] .nav-tabs .nav-link.active,
:root[data-theme="dark"] .nav-tabs .nav-item.show .nav-link {
  color: #f1f1f8;
  background-color: #171933;
  border-color: #30325a #30325a #171933;
}

:root[data-theme="dark"] .nav-tabs .nav-link:hover,
:root[data-theme="dark"] .nav-tabs .nav-link:focus {
  border-color: #30325a #30325a #30325a;
}

/* --- Barra de progreso (indicadores SGC): solo se oscurece el riel; el
   relleno usa las clases bg-success/bg-warning/bg-danger que ya tienen su
   color de marca y no se tocan. --- */
:root[data-theme="dark"] .progress {
  background-color: #1f2140;
}

/* --- Alertas neutras (secondary/light, ej. login/reset-password): son
   casi blancas a propósito y chocan fuerte con el fondo oscuro. Las
   semánticas con color (primary/success/info/danger) se dejan intactas:
   siguen siendo legibles como "insignias" de color sobre fondo oscuro,
   igual que los badges bg-success/warning/danger de arriba. --- */
:root[data-theme="dark"] .alert-secondary,
:root[data-theme="dark"] .alert-light {
  background-color: #1f2140;
  border-color: #30325a;
  color: #c1c3de;
}

/* --- DataTables (plugin jQuery con CSS propio cargado por CDN en las
   páginas "-interno" de informes): controles de búsqueda/longitud/paginación
   con textos y bordes oscuros fijos pensados solo para fondo blanco. La
   tabla en sí ya hereda el estilo de .table de arriba, no hace falta
   tocarla aparte. --- */
:root[data-theme="dark"] .dataTables_wrapper .dataTables_length,
:root[data-theme="dark"] .dataTables_wrapper .dataTables_filter,
:root[data-theme="dark"] .dataTables_wrapper .dataTables_info {
  color: #c1c3de;
}

:root[data-theme="dark"] .dataTables_wrapper .dataTables_length select,
:root[data-theme="dark"] .dataTables_wrapper .dataTables_filter input {
  background-color: #1f2140;
  border-color: #30325a;
  color: #f1f1f8;
}

:root[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button {
  color: #c1c3de !important;
  border-color: transparent;
}

:root[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button.current,
:root[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
  color: #f1f1f8 !important;
  background: #1f2140 !important;
  border-color: #30325a !important;
}

:root[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
:root[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover {
  color: #a3a6c4 !important;
  background: transparent !important;
  border-color: transparent !important;
}

/* --- SweetAlert2 (confirmaciones tipo "¿Estás seguro de eliminar?", usadas
   en varios formularios SGC): el popup trae su propio fondo blanco y texto
   oscuro fijos que el tema no toca por defecto. Los íconos de éxito/alerta
   se dejan igual, son semánticos y ya tienen buen contraste. --- */
:root[data-theme="dark"] .swal2-popup {
  background-color: #171933;
}

:root[data-theme="dark"] .swal2-title {
  color: #f1f1f8;
}

:root[data-theme="dark"] .swal2-html-container {
  color: #c1c3de;
}

/* ==========================================================================
   Tercera pasada: páginas puntuales con markup propio que el barrido
   genérico no puede cubrir (calidad-interno.blade.php y sus @include/
   @livewire reales, e informes.blade.php). Misma paleta de 6 colores.
   ========================================================================== */

/* --- Mosaico de módulos (calidad-interno y varios modales-sgc con
   sub-mosaicos: auditoriasgc, capacitaciones, paciente, riesgossgc): cada
   icono usa "bg-white" a propósito sobre un ".card.card-plain" que ya es
   transparente, así que el bg-white queda como único responsable del fondo
   blanco. Se pisa aparte (no tocar ".bg-white" a secas: esa misma clase la
   usa el canvas de firma, que necesita blanco real siempre, y el toggle de
   la sidenav, que ya está protegido por ".sidenav" con más especificidad). --- */
:root[data-theme="dark"] .card-body.bg-white {
  background-color: #171933 !important;
}

/* --- Wizard "msform" (Personalización: sgc-calidad, sgc-condiciones,
   sgc-pgirasa, sgc-bioseguridad — las 4 comparten este único bloque
   <style> que en realidad vive en store-calificacion-proveedor.blade.php,
   un componente Livewire aparte incluido en la misma página; como es un
   <style> normal, sus reglas aplican a toda la página, no solo a ese
   componente). Fondo blanco fijo del fieldset y título en negro puro:
   el peor combo para modo oscuro, texto negro sobre fondo casi negro. --- */
:root[data-theme="dark"] #msform fieldset {
  background: #171933;
}

:root[data-theme="dark"] .fs-title {
  color: #f1f1f8 !important;
}

:root[data-theme="dark"] #msform fieldset .form-card {
  color: #a3a6c4;
}

/* --- Indicador de pasos del wizard (#progressbar, usado en
   registro-indicadores.blade.php con el mismo patrón msform): el paso
   activo se pinta en negro puro a propósito para contrastar sobre fondo
   claro. Los círculos numerados no se tocan: ya traen su propio fondo y
   texto blanco fijos, autocontenidos en cualquier tema. --- */
:root[data-theme="dark"] #progressbar .active {
  color: #f1f1f8;
}

/* --- Etiquetas "Sugerencia: ..." de colores LASA/MAR/PICD (sgc-condiciones,
   paso "Identificación de Productos LASA y MAR"): el borde del contenedor
   agrupador es gris claro fijo, pensado para tarjeta blanca. Los badges de
   colores (rojo/amarillo/azul) no se tocan: ya son legibles por diseño,
   con su propio fondo y texto fijos independientes del tema. --- */
:root[data-theme="dark"] .lasa-group {
  border-color: #30325a;
}

/* --- Dirección de la droguería en el mosaico de "informes.blade.php":
   "text-gradient text-dark" pinta el texto con un degradado oscuro
   (casi negro) recortado sobre el propio texto (background-clip: text),
   no con la propiedad "color" — por eso el override genérico de
   ".text-dark" no alcanza. Se reemplaza el degradado por uno claro. --- */
:root[data-theme="dark"] .text-gradient.text-dark {
  background-image: linear-gradient(310deg, #a3a6c4, #f1f1f8);
}

/* --- Tarjeta de perfil de droguería ("card card-body blur shadow-blur",
   header con logo/dirección/"Informes"): ".blur" fija un blanco translúcido
   con !important pensado para flotar sobre una imagen de portada clara.
   ".shadow-blur" suma un brillo interior casi blanco a juego. Se oscurecen
   los dos manteniendo el mismo efecto de vidrio esmerilado. --- */
:root[data-theme="dark"] .blur {
  background-color: rgba(23, 25, 51, 0.8) !important;
}

:root[data-theme="dark"] .shadow-blur {
  box-shadow: inset 0 0px 1px 1px rgba(48, 50, 90, 0.9), 0 20px 27px 0 rgba(0, 0, 0, 0.3) !important;
}

/* --- Logo del sidebar: el archivo está pensado para fondo claro y se pierde
   contra el sidebar oscuro. En vez de aclarar todo el sidebar (perdería el
   contraste que ya funciona bien), se le da un fondo claro acotado solo al
   encabezado donde vive el logo. --- */
:root[data-theme="dark"] .sidenav-header {
  background-color: #f1f1f8;
  border-radius: 0.75rem;
  margin: 0.5rem 0.75rem 0;
}

/* Ícono del toggle de tema: en oscuro hereda el gris de .text-body, se ve
   apagado para el solecito que indica "estás en modo oscuro". Blanco fijo. */
:root[data-theme="dark"] #themeToggleIcon {
  color: #f1f1f8;
}

/* Listados con DataTables (informes "-interno", CDN jquery.dataTables.min.css
   1.11.3): esa hoja de estilos se carga inline en el propio componente, DESPUÉS
   de theme-propuesta.css en el HTML final — en empates de especificidad, la de
   DataTables gana por orden de carga aunque la nuestra esté pensada para pisarla.
   Se fuerza el fondo de las celdas con !important para no depender de ese orden. */
:root[data-theme="dark"] table.dataTable > tbody > tr > td,
:root[data-theme="dark"] .dataTables_empty {
  background-color: #171933 !important;
  color: #c1c3de !important;
}

/* --- Chevron de los grupos colapsables del sidebar (Frecuentes/Módulos):
   gira 90° cuando el grupo está colapsado (ver base.blade.php, IIFE de
   data-nav-group-toggle). --- */
.nav-group-chevron {
  transition: transform .15s ease;
  flex: none;
  opacity: .6;
}

.nav-group-chevron.is-collapsed {
  transform: rotate(-90deg);
}

/* Íconos del sidebar (los nuevos de trazo, stroke="currentColor") en oscuro:
   heredan el gris lavanda de .nav-link, se ven apagados. Blancos fijos.
   No afecta a Escritorio/Vehículos (íconos viejos con relleno fijo, ignoran
   la propiedad color). */
:root[data-theme="dark"] .navbar-vertical .icon svg {
  color: #fff;
}

/* --- Barra de desplazamiento del sidebar: el contenedor con scroll real es
   .navbar-vertical.navbar-expand-xs (overflow-y:auto), nunca se le puso
   estilo propio y usaba la barra gruesa por defecto del navegador. --- */
.navbar-vertical.navbar-expand-xs,
body,
.table-responsive {
  scrollbar-width: thin;
  scrollbar-color: rgba(20, 20, 40, 0.18) transparent;
}

.navbar-vertical.navbar-expand-xs::-webkit-scrollbar,
body::-webkit-scrollbar,
.table-responsive::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

.navbar-vertical.navbar-expand-xs::-webkit-scrollbar-track,
body::-webkit-scrollbar-track,
.table-responsive::-webkit-scrollbar-track {
  background: transparent;
}

.navbar-vertical.navbar-expand-xs::-webkit-scrollbar-thumb,
body::-webkit-scrollbar-thumb,
.table-responsive::-webkit-scrollbar-thumb {
  background-color: rgba(20, 20, 40, 0.18);
  border-radius: 999px;
}

.navbar-vertical.navbar-expand-xs::-webkit-scrollbar-thumb:hover,
body::-webkit-scrollbar-thumb:hover,
.table-responsive::-webkit-scrollbar-thumb:hover {
  background-color: rgba(20, 20, 40, 0.32);
}

:root[data-theme="dark"] .navbar-vertical.navbar-expand-xs,
:root[data-theme="dark"] body,
:root[data-theme="dark"] .table-responsive {
  scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
}

:root[data-theme="dark"] .navbar-vertical.navbar-expand-xs::-webkit-scrollbar-thumb,
:root[data-theme="dark"] body::-webkit-scrollbar-thumb,
:root[data-theme="dark"] .table-responsive::-webkit-scrollbar-thumb {
  background-color: rgba(255, 255, 255, 0.18);
}

:root[data-theme="dark"] .navbar-vertical.navbar-expand-xs::-webkit-scrollbar-thumb:hover,
:root[data-theme="dark"] body::-webkit-scrollbar-thumb:hover,
:root[data-theme="dark"] .table-responsive::-webkit-scrollbar-thumb:hover {
  background-color: rgba(255, 255, 255, 0.3);
}

/* --- Despliegue de grupos del sidebar: antes era instantáneo (display:none
   via d-none). Se reemplaza por una transición de alto+opacidad más lenta.
   El JS de base.blade.php ahora togglea .nav-group-collapsed en vez de
   .d-none sobre los mismos [data-nav-group="..."]. --- */
[data-nav-group] {
  overflow: hidden;
  max-height: 3rem;
  opacity: 1;
  transition: max-height 0.4s ease, opacity 0.3s ease, margin 0.4s ease, padding 0.4s ease;
}

[data-nav-group].nav-group-collapsed {
  max-height: 0;
  opacity: 0;
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 0;
  padding-bottom: 0;
}

/* --- Buscador de navegación del sidebar (#sidenavSearchInput, mismo id en
   los 3 sidebars): estilo "pill" redondeado coherente con Soft UI, en vez
   del input-group cuadrado por defecto de Bootstrap. --- */
.sidenav .input-group-sm {
  border-radius: 0.75rem;
  overflow: hidden;
  box-shadow: inset 0 0 0 1px rgba(20, 20, 40, 0.08);
}

.sidenav .input-group-sm .input-group-text,
.sidenav .input-group-sm .form-control {
  background-color: rgba(20, 20, 40, 0.025);
  border: none;
  box-shadow: none;
}

.sidenav .input-group-sm .input-group-text {
  padding-right: 0;
}

.sidenav .input-group-sm .form-control {
  padding-left: 0.5rem;
  font-size: 0.8rem;
}

.sidenav .input-group-sm .form-control:focus {
  background-color: rgba(20, 20, 40, 0.025);
  box-shadow: none;
}

:root[data-theme="dark"] .sidenav .input-group-sm {
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
}

:root[data-theme="dark"] .sidenav .input-group-sm .input-group-text,
:root[data-theme="dark"] .sidenav .input-group-sm .form-control {
  background-color: #1f2140;
  color: #f1f1f8;
}

:root[data-theme="dark"] .sidenav .input-group-sm .form-control::placeholder {
  color: #8688ab;
}

/* --- Chip de usuario en el navbar (ícono + nombre + "Cerrar sesión"):
   antes era texto suelto con un <br> a la fuerza entre el link y el nombre. --- */
.user-chip-icon {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(20, 20, 40, 0.06);
  font-size: 11px;
}

.user-chip-icon.is-active {
  background-image: linear-gradient(310deg, #f53939 0%, #fbcf33 100%);
  color: #fff;
}

.user-chip-name {
  font-size: 12.5px;
  font-weight: 700;
  line-height: 1.25;
}

.user-chip-logout {
  font-size: 10.5px;
  font-weight: 600;
  color: #8392ab;
  cursor: pointer;
  line-height: 1.25;
}

.user-chip-logout:hover {
  color: #d94a56;
  text-decoration: underline;
}

:root[data-theme="dark"] .user-chip-icon {
  background: rgba(255, 255, 255, 0.12);
}

:root[data-theme="dark"] .user-chip-logout {
  color: #a3a6c4;
}

:root[data-theme="dark"] .user-chip-logout:hover {
  color: #ff8a90;
}

/* --- Login/registro/recuperar contraseña: ".section-height-100" fuerza
   min-height:100vh y la tarjeta suma "mt-8" (8rem) de margen superior —
   con el footer debajo, la página siempre quedaba más alta que la pantalla
   y obligaba a scrollear. Estas dos clases solo se usan en estas 3 páginas. --- */
.section-height-100 {
  min-height: auto;
  padding-bottom: 0;
  padding-top: 2.5rem;
}

/* El navbar de invitado flota encima (position-absolute) y con el header
   más chico terminaba tapando la tarjeta y la imagen. Además de dejarle
   aire arriba (ver padding-top de .section-height-100), se lo hace más
   transparente para que, si algo roza, no se sienta pesado. Se escopa a
   "nav.blur" (el navbar), no a ".blur" en general, para no afectar la
   tarjeta de perfil de droguería que usa esa misma clase. */
nav.blur {
  background-color: rgba(255, 255, 255, 0.55) !important;
}

:root[data-theme="dark"] nav.blur {
  background-color: rgba(23, 25, 51, 0.55) !important;
}

/* En mobile el navbar de invitado (logo + boton de menu) queda apretado
   lado a lado. Se apila verticalmente para dejarle mas aire a cada uno. */
@media (max-width: 767.98px) {
  nav.blur .container-fluid {
    flex-direction: column;
    align-items: center;
  }

  nav.blur .navbar-toggler {
    margin: 0.35rem 0 0 0 !important;
  }
}

.mt-8 {
  margin-top: 1.5rem !important;
}

/* Login: imagen a la izquierda ocupando todo el alto de la fila, tarjeta
   centrada (vertical y horizontal) a la derecha. Se escopa a "#login-hero-row"
   porque es un id exclusivo de esta página — no afecta registro/recuperar
   contraseña, que no comparten este layout. */
#login-hero-row {
  /* min-height, no height: si la imagen y la tarjeta se apilan (mobile o
     ventanas muy bajas) y necesitan mas de 100vh, la fila tiene que poder
     crecer. Con "height" fijo, ".page-header" (que trae overflow:hidden
     de fábrica) recortaba la tarjeta sin dejar scroll para llegar a ella. */
  min-height: calc(100vh - 2.5rem);
  justify-content: center;
}

#login-hero-row .login-image-col {
  justify-content: center;
  overflow: hidden;
  padding: 0.75rem;
}

#login-hero-row .login-image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

/* En mobile la columna de la imagen no tiene un alto de fila para repartir
   (imagen y tarjeta se apilan), así que sin tope la imagen crecia hasta la
   altura que le daba su ancho completo — ocupando media pantalla antes de
   llegar a la tarjeta. Se limita su alto y se reduce para que quede como
   un acento arriba del formulario, no como el protagonista de la pantalla. */
@media (max-width: 767.98px) {
  #login-hero-row .login-image-col {
    max-height: 100px;
    padding: 0.5rem 3.5rem;
  }

  .section-height-100 {
    padding-top: 1rem;
  }

  /* El "min-height:100vh" de #login-hero-row (pensado para centrar imagen+
     tarjeta en desktop) en mobile hace que el flex-wrap reparta ese alto
     de sobra entre las dos filas apiladas (imagen y tarjeta), separandolas
     de mas. En mobile no hace falta forzar el alto: que la fila mida lo
     que ocupa su contenido y las filas queden pegadas arriba. */
  #login-hero-row {
    min-height: auto;
    align-content: flex-start;
  }

  .footer.pb-5 {
    font-size: 0.7rem;
    padding-top: 0.4rem;
    padding-bottom: 0.4rem !important;
  }

  .mt-8 {
    margin-top: 0.5rem !important;
  }
}

/* Footer de login/registro/recuperar: fijo abajo, no ocupa lugar en el
   flujo del documento. Solo esta página usa "footer pb-5" — el footer del
   panel logueado usa "footer pb-4", no se ve afectado. */
.footer.pb-5 {
  background-color: rgba(248, 249, 250, 0.75);
  padding-top: 0.75rem;
  padding-bottom: 0.75rem !important;
}

/* Fijo abajo solo desde md hacia arriba: en esos anchos la imagen y la
   tarjeta entran en un solo viewport (ver #login-hero-row), así que el
   footer fijo no tapa nada. En mobile, la imagen y la tarjeta se apilan y
   necesitan scroll — un footer fijo ahi quedaba pegado a mitad del
   formulario sin importar cuánto se scrollee. Por eso en mobile el footer
   va en el flujo normal, despues de todo el contenido. */
@media (min-width: 768px) {
  .footer.pb-5 {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 10;
  }
}

:root[data-theme="dark"] .footer.pb-5 {
  background-color: rgba(15, 16, 32, 0.75);
}

/* Tarjeta del formulario de login/registro/recuperar, un toque más chica.
   align-self:center porque su columna es flex-column: sin esto, el
   max-width hace que la tarjeta se pegue al costado en vez de centrarse. */
.section-height-100 .card.card-plain {
  width: 100%;
  max-width: 340px;
  align-self: center;
}

/* Gif pequeño de Fundecopi en la esquina del login. Solo desde md hacia
   arriba (mismo motivo que el footer): en mobile la imagen y la tarjeta
   se apilan y necesitan scroll, y un elemento fijo ahi queda flotando
   sobre el formulario sin importar cuánto se scrollee. Es puramente
   decorativo, así que en mobile se oculta en vez de complicar su posición. */
@media (min-width: 768px) {
  .login-fundecopi-badge {
    position: fixed;
    right: 1.25rem;
    bottom: 4.5rem;
    width: 110px;
    height: auto;
    border-radius: 0.75rem;
    box-shadow: 0 6px 18px -6px rgba(20, 20, 40, 0.35);
    z-index: 5;
  }
}

@media (max-width: 767.98px) {
  .login-fundecopi-badge {
    display: none;
  }
}

/* Footer del panel autenticado (aparece en TODAS las páginas logueadas,
   no solo una): mismo tratamiento que el de login — fijo abajo y con algo
   de transparencia. Solo esta página usa "footer pb-4", no choca con
   "footer pb-5" del login. */
.footer.pb-4 {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 995;
  background-color: rgba(248, 249, 250, 0.75);
  padding-top: 0.5rem;
  padding-bottom: 0.5rem !important;
}

.footer.pb-4 .row {
  justify-content: center !important;
}

.footer.pb-4 .col-lg-6 {
  flex: 0 0 100%;
  max-width: 100%;
}

.footer.pb-4 .copyright {
  text-align: center !important;
}

:root[data-theme="dark"] .footer.pb-4 {
  background-color: rgba(15, 16, 32, 0.75);
}

/* Portadas de las tarjetas de Capacitaciones (SGC/SST): antes eran fotos
   decorativas del template (curved-images) sin relación con el contenido.
   Se reemplazan por un panel con el degradé de marca y el mismo ícono que
   ya se usa para SGC/SG-SST en el sidebar. */
.capacitacion-cover {
  color: #fff;
}

.capacitacion-cover i {
  font-size: 6rem;
  opacity: 0.92;
}

.capacitacion-cover-sgc {
  background-image: linear-gradient(310deg, #f53939 0%, #fbcf33 100%);
}

.capacitacion-cover-sst {
  background-image: linear-gradient(310deg, #2152ff 0%, #21d4fd 100%);
}

/* "Seguridad y salud en el trabajo" envuelve a 2 líneas y "Gestión de
   calidad" a 1, lo que descuadraba la altura de las tarjetas. */
.capacitacion-title {
  min-height: 3rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Ícono estándar para droguerías sin foto de portada: antes caía en una
   textura genérica ("curva-fria.png") sin relación con una farmacia. */
.drogueria-cover-placeholder {
  background: linear-gradient(135deg, rgba(245, 57, 57, 0.14), rgba(251, 207, 51, 0.14));
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Densidad: la plantilla base usa paddings/márgenes muy ajustados
   (card-body 1rem, celdas de tabla 0.5rem, form-group 1rem) que dejan
   los formularios largos y las tablas de datos con sensación de
   amontonado. Se les da más aire sin tocar tamaños de fuente ni layout. */
.card-body {
  padding: 1.25rem 1.5rem;
}

.table> :not(caption)>*>* {
  padding: 0.75rem 1rem;
}

.form-group {
  margin-bottom: 1.25rem;
}

.drogueria-cover-icon {
  color: #d94a56;
  opacity: 0.75;
}

/* Sidebar: un poco más ancho (15.625rem -> 16.875rem) y con posibilidad de
   esconderlo del todo en desktop. El botón vive en la navbar (siempre
   visible, no depende del sidebar), así que sigue accesible para volver a
   mostrarlo. Estado persistido en localStorage vía la clase "td-sidenav-hidden"
   en <html> (mismo patrón que el tema oscuro), para evitar el parpadeo del
   sidebar abierto antes de que corra el JS. */
.navbar-vertical.navbar-expand-xs {
  max-width: 16.875rem !important;
  transition: transform 0.3s ease;
}

/* El sidebar scrollea internamente (overflow-y:auto propio, ver vendor
   CSS), pero el footer fijo del panel se apoya encima de su parte baja.
   Se le agrega aire abajo al menú para que el último ítem no quede tapado. */
.sidenav .navbar-nav {
  padding-bottom: 6rem;
}

@media (min-width: 1200px) {
  .sidenav.fixed-left+.main-content {
    margin-left: 18.375rem;
  }

  html.td-sidenav-hidden .sidenav.fixed-left {
    transform: translateX(-110%);
  }

  html.td-sidenav-hidden .sidenav.fixed-left+.main-content {
    margin-left: 0 !important;
  }
}

/* Títulos de sección dentro de cada droguería (Recursos, Gestión de amenazas,
   Personalización y manuales, etc.): antes eran un <h4> plano del navegador;
   ahora además son el botón para plegar/desplegar esa sección. */
.section-title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: #b45309;
  padding: 0.65rem 1.25rem;
  margin-top: 0.5rem;
  margin-bottom: 0.5rem;
  background-color: rgba(245, 158, 11, 0.1);
  border-radius: 50rem;
  cursor: pointer;
  user-select: none;
  transition: background-color 0.15s ease;
}

.section-title:hover {
  background-color: rgba(245, 158, 11, 0.16);
}

.section-title:first-child {
  margin-top: 0;
}

/* Fila de tarjetas de cada sección: colapsa con la misma animación de
   alto/opacidad que ya usan los grupos plegables del sidebar, en vez del
   x-show de Alpine (que ocultaba/mostraba de golpe, sin transición). */
.section-cards-row {
  max-height: 3000px;
  opacity: 1;
  overflow: hidden;
  transition: max-height 0.35s ease, opacity 0.25s ease;
}

.section-cards-row.section-collapsed {
  max-height: 0;
  opacity: 0;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
}

.section-title-chevron {
  font-size: 0.85rem;
  color: #8392ab;
  transition: transform 0.25s ease;
}

.section-title.is-collapsed .section-title-chevron {
  transform: rotate(-90deg);
}

:root[data-theme="dark"] .section-title {
  color: #fbbf24;
  background-color: rgba(251, 191, 36, 0.14);
}

:root[data-theme="dark"] .section-title:hover {
  background-color: rgba(251, 191, 36, 0.2);
}

:root[data-theme="dark"] .section-title-chevron {
  color: #8d90b3;
}
