@import url("../fonts/inter/inter.css");

/* ============================================================
   MINISTERIO MISIÓN DRASI — Sistema de diseño
   ============================================================ */
:root {
  /* Marca */
  --drasi-blue: #3fb8ea;
  --drasi-purple: #7c5fa8;
  --drasi-dark: #10112c;
  --drasi-white-bg: #f7f3f8;
  --drasi-light-purple: #e3dee9;
  --drasi-yellow: #cdd737;
  --drasi-red: #dd6464;
  --drasi-blue-dark: #2a9ecf;
  --drasi-purple-dark: #5e4a8a;
  --drasi-text-main: #10112c;
  --drasi-text-muted: #7c5fa8;
  --drasi-border: #e3dee9;
  /* Estado — a tono con la paleta (suaves, misma gama, no chillones) */
  --drasi-success: #3fae74;      /* verde suave de marca */
  --drasi-success-dark: #2f8c5b;
  --drasi-warning: #e0a83e;      /* ámbar suave (antes naranja chillón) */
  --drasi-warning-dark: #bd8826;
  --drasi-danger: #dd6464;       /* coral de marca */
  --drasi-danger-dark: #c24c4c;
  --drasi-info: #4bb6cf;         /* turquesa suave */
  --drasi-info-dark: #3597af;
  --drasi-valid: #2e9e5b;        /* verde legible solo para validación de formularios */
  --bs-form-valid-color: #2e9e5b;
  --bs-form-valid-border-color: #2e9e5b;
  --bs-form-invalid-color: #dd6464;
  --bs-form-invalid-border-color: #dd6464;

  /* Alias legado (no romper módulos viejos) */
  --azul: #3fb8ea;
  --verde: #cdd737;
  --naranja: #e0a83e;
  --bg: #f7f3f8;

  /* Override Bootstrap primary -> DRASI */
  --bs-primary: #3fb8ea;
  --bs-primary-rgb: 63, 184, 234;
  --bs-link-color: #2a9ecf;
  --bs-link-hover-color: #5e4a8a;
  --bs-border-color: #e3dee9;

  /* Override estados Bootstrap -> paleta DRASI (badges, alerts, bg-*-subtle) */
  --bs-success: #3fae74;  --bs-success-rgb: 63, 174, 116;
  --bs-success-text-emphasis: #266b45;
  --bs-success-bg-subtle: #e4f5ec;  --bs-success-border-subtle: #c5e9d4;
  --bs-danger: #dd6464;   --bs-danger-rgb: 221, 100, 100;
  --bs-danger-text-emphasis: #882f2f;
  --bs-danger-bg-subtle: #fbe9e9;   --bs-danger-border-subtle: #f4cccc;
  --bs-warning: #e0a83e;  --bs-warning-rgb: 224, 168, 62;
  --bs-warning-text-emphasis: #6f5212;
  --bs-warning-bg-subtle: #faf1dd;  --bs-warning-border-subtle: #f3e0b3;
  --bs-info: #4bb6cf;     --bs-info-rgb: 75, 182, 207;
  --bs-info-text-emphasis: #235d6a;
  --bs-info-bg-subtle: #e3f4f8;     --bs-info-border-subtle: #c4e7ef;
}

* {
  scrollbar-color: var(--drasi-light-purple) transparent;
}

body {
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  font-size: 14px;
  color: var(--drasi-text-main);
  background-color: var(--drasi-white-bg);
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: 'Inter', sans-serif;
  font-weight: 700;
  color: var(--drasi-dark);
}

.text-muted {
  color: var(--drasi-text-muted) !important;
}

a {
  text-decoration: none;
}

.form-help-link {
  color: var(--drasi-purple);
  font-weight: 600;
}

.form-help-link:hover,
.form-help-link:focus {
  color: var(--drasi-blue-dark);
}

.user-temp-password-alert {
  margin-top: 15px;
}

.drasi-gradient {
  background: linear-gradient(135deg, #3fb8ea 0%, #7c5fa8 100%);
}

.drasi-gradient-text {
  background: linear-gradient(135deg, #3fb8ea 0%, #7c5fa8 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* ============================================================
   LAYOUT — sidebar + content
   ============================================================ */
.sidebar {
  position: fixed;
  top: 0;
  left: 0;
  height: 100vh;
  width: 260px;
  background-color: var(--drasi-dark);
  color: #fff;
  overflow-x: hidden;
  overflow-y: auto;
  z-index: 1030;
  transition: width .3s ease;
  display: flex;
  flex-direction: column;
  scrollbar-width: thin;
  scrollbar-color: var(--drasi-purple) transparent;
}
.sidebar::-webkit-scrollbar { width: 8px; }
.sidebar::-webkit-scrollbar-thumb {
  background: var(--drasi-purple);
  border-radius: 4px;
}
.sidebar::-webkit-scrollbar-track { background: transparent; }
/* Brand fijo arriba; el menú hace scroll por debajo. */
.sidebar .brand { flex-shrink: 0; }

.sidebar.collapsed {
  width: 70px;
}

.content {
  margin-left: 260px;
  transition: margin-left .3s ease;
  min-height: 100vh;
}

.content.expanded {
  margin-left: 70px;
}

/* Brand / logo */
.sidebar .brand {
  padding: 18px 16px;
  min-height: 85px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-bottom: 1px solid rgba(255, 255, 255, .08);
}

.sidebar .brand img {
  display: block;
  height: auto;
}

.sidebar .brand .logo-full {
  width: 150px;
  max-width: 100%;
  margin: 0 auto;
}

.sidebar .brand .logo-icon {
  width: 38px;
  height: 38px;
  display: none;
}

.sidebar.collapsed .brand {
  justify-content: center;
  padding: 18px 0;
}

.sidebar.collapsed .brand .logo-full {
  display: none;
}

.sidebar.collapsed .brand .logo-icon {
  display: block;
}

/* Section title */
.sidebar .section {
  font-size: .65rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .35);
  padding: 16px 22px 6px;
}

.sidebar.collapsed .section {
  display: none;
}

/* Nav items */
.sidebar a {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 5px 16px;
  margin: 2px 10px;
  border-radius: 8px;
  color: rgba(255, 255, 255, .75);
  font-size: .875rem;
  font-weight: 500;
  border-left: 3px solid transparent;
  transition: all .2s ease;
  white-space: nowrap;
}

.sidebar a i {
  font-size: 1.1rem;
  width: 20px;
  text-align: center;
  flex-shrink: 0;
}

.sidebar a:not(.brand):hover {
  background-color: rgba(63, 184, 234, .15);
  color: var(--drasi-blue);
}

.sidebar a.active {
  background: linear-gradient(135deg, rgba(63, 184, 234, .18), rgba(124, 95, 168, .18));
  color: var(--drasi-blue);
  border-left-color: var(--drasi-blue);
}

/* Sub-nav (quick access del viaje activo) */
.sidebar .section-sub {
  padding-top: 12px;
  padding-bottom: 4px;
  overflow: visible;          /* no recortar el eyebrow ni el nombre */
}
/* "VIAJE ACTIVO" — eyebrow tenue (hereda uppercase/letter-spacing de .section) */
.sidebar .section-sub .sub-eyebrow {
  display: block;
  color: rgba(255, 255, 255, .4);
  line-height: 1.4;
  overflow: visible;
}
/* Nombre del viaje — legible, una línea propia, ellipsis sólo aquí */
.sidebar .section-sub .sub-name {
  display: block;
  margin-top: 3px;
  text-transform: none;
  letter-spacing: 0;
  font-size: .82rem;
  font-weight: 700;
  color: var(--drasi-blue);
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sidebar.collapsed .section-sub { display: none; }
.sidebar a.nav-sub {
  font-size: .82rem;
  padding-left: 28px;
  color: rgba(255, 255, 255, .62);
}
.sidebar a.nav-sub.active {
  color: var(--drasi-blue);
}
.sidebar a.nav-sub i { font-size: 1rem; }
.sidebar.collapsed a.nav-sub { padding-left: 10px; }

.sidebar.collapsed a {
  justify-content: center;
  padding: 10px;
  margin: 2px 8px;
  border-left: none;
}

.sidebar.collapsed a .nav-label {
  display: none;
}

/* ============================================================
   TOPBAR
   ============================================================ */
.topbar {
  background: #fff !important;
  border-bottom: 1px solid var(--drasi-border);
  min-height: 64px;
}

/* Barra de "Ver como rol" (vista previa del admin) */
.ver-como-bar {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  background: var(--drasi-yellow); color: var(--drasi-dark);
  padding: 8px 18px; font-size: .85rem; font-weight: 600;
}
.ver-como-bar .ver-como-exit {
  background: var(--drasi-dark); color: #fff; border: 0; border-radius: 999px;
  font-weight: 700; padding: 4px 14px; white-space: nowrap;
}
.ver-como-bar .ver-como-exit:hover { background: #000; color: #fff; }

.topbar .navbar-brand {
  font-weight: 700;
  color: var(--drasi-dark) !important;
  font-size: 1.05rem;
}

.trip-badge {
  background: linear-gradient(135deg, #3fb8ea, #7c5fa8);
  color: #fff;
  font-size: .72rem;
  font-weight: 600;
  padding: 6px 12px;
  border-radius: 20px;
}

.user-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: linear-gradient(135deg, #3fb8ea, #7c5fa8);
  color: #fff;
  font-weight: 700;
  font-size: .75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

/* ============================================================
   CARDS / KPI
   ============================================================ */
.card {
  border: 1px solid var(--drasi-border);
  border-radius: 12px;
  background: #fff;
}

.card.shadow-sm {
  box-shadow: none !important;
}

.card-header {
  background: #fff;
  border-bottom: 1px solid var(--drasi-border);
  font-weight: 600;
}

.kpi-card {
  background: #fff;
  border-radius: 12px;
  padding: 18px 20px 18px 24px;
  border: 1px solid var(--drasi-border);
  position: relative;
  overflow: hidden;
  transition: transform .2s ease;
  min-height: 108px;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 14px;
}

.kpi-card:hover {
  transform: translateY(-2px);
  box-shadow: none;
}

/* Portal del misionero: tarjetas sin animación al pasar el cursor */
.portal-page .kpi-card,
.portal-page .card { transition: none; }
.portal-page .kpi-card:hover,
.portal-page .card:hover { transform: none; box-shadow: var(--bs-box-shadow-sm, 0 .125rem .25rem rgba(0,0,0,.075)); }

.viaje-resumen-tab .kpi-card,
.viaje-resumen-tab .card,
.viaje-camisetas-tab .kpi-card,
.viaje-camisetas-tab .card {
  transition: none;
}

.viaje-resumen-tab .kpi-card:hover,
.viaje-resumen-tab .card:hover,
.viaje-camisetas-tab .kpi-card:hover,
.viaje-camisetas-tab .card:hover {
  transform: none;
}

.kpi-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 4px;
  height: 100%;
  background: linear-gradient(180deg, #3fb8ea, #7c5fa8);
  border-radius: 12px 0 0 12px;
}

.kpi-icon {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.35rem;
  margin-bottom: 0;
  flex: 0 0 48px;
}

.kpi-icon.blue {
  background: rgba(63, 184, 234, .15);
  color: #3fb8ea;
}

.kpi-icon.blue-dark {
  background: rgba(42, 158, 207, .15);
  color: var(--drasi-blue-dark);
}

.kpi-icon.purple {
  background: rgba(124, 95, 168, .15);
  color: #7c5fa8;
}

.kpi-icon.green {
  background: rgba(205, 215, 55, .15);
  color: #9da832;
}

.kpi-icon.red {
  background: rgba(221, 100, 100, .15);
  color: #dd6464;
}

.kpi-icon.yellow {
  background: rgba(205, 215, 55, .15);
  color: #9da832;
}

.kpi-content {
  min-width: 0;
}

.kpi-number {
  font-size: clamp(1.35rem, 2vw, 1.85rem);
  font-weight: 800;
  color: var(--drasi-dark);
  line-height: 1.1;
  margin-bottom: 2px;
  word-break: break-word;
  display: block;
}

.kpi-label {
  display: block;
  font-size: .8rem;
  color: var(--drasi-text-muted);
  font-weight: 500;
}

.page-title {
  font-size: 1.4rem;
  font-weight: 700;
  color: var(--drasi-dark);
}

/* ============================================================
   BOTONES
   ============================================================ */
.btn {
  border-radius: 8px;
  font-weight: 600;
}

/* v3: btn-primary plano azul (sin gradiente) */
.btn-primary,
.btn-drasi-primary {
  background-color: var(--drasi-blue) !important;
  border-color: var(--drasi-blue) !important;
  color: #fff !important;
  font-weight: 600;
  border-radius: 8px;
  box-shadow: none !important;
  transition: background-color .2s ease, border-color .2s ease;
}

.btn-primary:hover,
.btn-drasi-primary:hover,
.btn-primary:focus,
.btn-drasi-primary:focus,
.btn-primary:active,
.btn-drasi-primary:active {
  background-color: var(--drasi-blue-dark) !important;
  border-color: var(--drasi-blue-dark) !important;
  color: #fff !important;
  box-shadow: none !important;
}

.btn-outline-primary,
.btn-drasi-outline {
  border: 1.5px solid var(--drasi-blue);
  color: var(--drasi-blue);
  background: transparent;
}

.btn-outline-primary:hover,
.btn-drasi-outline:hover {
  background: var(--drasi-blue);
  border-color: var(--drasi-blue);
  color: #fff;
}

.btn-info {
  background: var(--drasi-purple);
  border-color: var(--drasi-purple);
  color: #fff;
}

.btn-info:hover {
  background: var(--drasi-purple-dark);
  border-color: var(--drasi-purple-dark);
  color: #fff;
}

.btn-success {
  background: var(--drasi-success);
  border-color: var(--drasi-success);
  color: #fff;
}

.btn-success:hover {
  background: var(--drasi-success-dark);
  border-color: var(--drasi-success-dark);
  color: #fff;
}

.btn-warning {
  background: var(--drasi-warning);
  border-color: var(--drasi-warning);
  color: #3a2d05;
}

.btn-warning:hover {
  background: var(--drasi-warning-dark);
  border-color: var(--drasi-warning-dark);
  color: #3a2d05;
}

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

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

/* Botones de acción en tablas */
.btn-act {
  --bs-btn-padding-y: .25rem;
  --bs-btn-padding-x: .5rem;
  --bs-btn-font-size: .85rem;
}

.btn-action {
  width: 32px;
  height: 32px;
  border-radius: 6px;
  border: none;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: .85rem;
  transition: all .15s ease;
}

.btn-view {
  background: #e3f6fd;
  color: #3fb8ea;
}

.btn-edit {
  background: #ede8f5;
  color: #7c5fa8;
}

.btn-delete {
  background: #fdeaea;
  color: #dd6464;
}

.btn-pay {
  background: #f5f7e0;
  color: #9da832;
}

.btn-tourism {
  background: #fff3e0;
  color: #e07c00;
}

/* ============================================================
   .btn-icon — componente único de acción (solo icono).
   Reemplaza la mezcla btn-action/btn-act en tablas. Igual
   tamaño, padding, borde, hover y alineación en todo el sistema.
   ============================================================ */
.btn-icon {
  width: 32px;
  height: 32px;
  padding: 0;
  border-radius: 7px;
  border: 1px solid var(--drasi-border);
  background: var(--drasi-surface, #fff);
  color: var(--drasi-text-muted);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: .9rem;
  line-height: 1;
  vertical-align: middle;
  transition: all .15s ease;
}
.btn-icon + .btn-icon { margin-left: 4px; }
.btn-icon:hover {
  background: var(--drasi-blue);
  border-color: var(--drasi-blue);
  color: #fff;
}
.btn-icon.btn-icon-danger:hover {
  background: var(--drasi-red);
  border-color: var(--drasi-red);
}
/* Dentro de una fila seleccionada (.active, fondo azul): el botón de icono
   queda transparente con borde/icono blancos para que se vea (antes era
   blanco-sobre-blanco e invisible). Ej.: menú "⋮" de la carpeta activa. */
.list-group-item.active .btn-icon {
  background: transparent;
  border-color: rgba(255, 255, 255, .55);
  color: #fff;
}
.list-group-item.active .btn-icon:hover {
  background: rgba(255, 255, 255, .2);
  border-color: #fff;
  color: #fff;
}

.btn-view:hover {
  background: #3fb8ea;
  color: #fff;
}

.btn-edit:hover {
  background: #7c5fa8;
  color: #fff;
}

.btn-delete:hover {
  background: #dd6464;
  color: #fff;
}

.btn-pay:hover {
  background: #cdd737;
  color: #fff;
}

.btn-tourism:hover {
  background: #e07c00;
  color: #fff;
}

/* ============================================================
   AVATAR iniciales (usado por avatar_html / db.php)
   ============================================================ */
.avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--av-bg, #3fb8ea);
  color: #fff;
  font-weight: 700;
  line-height: 1;
  flex: 0 0 auto;
  text-transform: uppercase;
  letter-spacing: .02em;
}

.avatar-row,
.td-misionero {
  display: flex;
  align-items: center;
  gap: 10px;
}

.misionero-name {
  font-weight: 600;
  color: var(--drasi-dark);
  font-size: .875rem;
  line-height: 1.2;
}

.misionero-email {
  font-size: .75rem;
  color: var(--drasi-text-muted);
}

/* ============================================================
   TABLAS / DataTables
   ============================================================ */
/* Encabezado de tabla unificado — gana sobre .table-light de Bootstrap
   para mantener contraste consistente en todo el sistema. */
/* Alineación de tablas: TODO a la izquierda (incluye columnas/celdas
   que tengan .text-end o .text-center; se fuerza con !important). */
.table thead th,
.table tbody td,
table.dataTable thead th,
table.dataTable tbody td {
  text-align: left !important;
}

.table thead th,
.table > thead > tr > th,
table.dataTable thead th {
  background-color: var(--drasi-dark) !important;
  color: rgba(255, 255, 255, .9) !important;
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .05em;
  text-transform: uppercase;
  border: none;
  padding: 12px 16px;
}

.table tbody tr {
  border-bottom: 1px solid var(--drasi-border);
  transition: background-color .15s ease;
}

.table tbody tr:hover {
  background-color: rgba(227, 222, 233, .3);
}

.table tbody td {
  padding: 12px 16px;
  vertical-align: middle;
  font-size: .875rem;
  border: none;
}

table.dataTable {
  border-collapse: separate;
}

div.dataTables_wrapper {
  padding: 4px 2px;
}

div.dataTables_wrapper div.dataTables_filter input,
div.dataTables_wrapper div.dataTables_length select {
  border: 1.5px solid var(--drasi-border);
  border-radius: 8px;
  padding: 6px 12px;
  font-size: .875rem;
}

div.dataTables_wrapper div.dataTables_length select {
  width: auto;
  min-width: 74px;
  padding-right: 30px;
}

div.dt-container div.dt-length select {
  width: 70px;
  display: inline-block;
  margin-right: 0.5em;
  margin-left: .5rem;
}

div.dataTables_wrapper div.dataTables_filter input:focus,
div.dataTables_wrapper div.dataTables_length select:focus {
  border-color: var(--drasi-blue);
  outline: none;
  box-shadow: 0 0 0 3px rgba(63, 184, 234, .15);
}

div.dataTables_wrapper .pagination .page-link,
div.dt-container .pagination .page-link,
.dataTables_paginate .paginate_button {
  box-shadow: none !important;
}

div.dataTables_wrapper .pagination .page-link:focus,
div.dataTables_wrapper .pagination .page-link:hover,
div.dt-container .pagination .page-link:focus,
div.dt-container .pagination .page-link:hover,
.dataTables_paginate .paginate_button:focus,
.dataTables_paginate .paginate_button:hover {
  box-shadow: none !important;
}

div.dataTables_wrapper .pagination .page-item.active .page-link,
div.dt-container .pagination .page-item.active .page-link,
.dataTables_paginate .paginate_button.current,
.dataTables_paginate .paginate_button.current:hover {
  background: var(--drasi-blue) !important;
  border-color: var(--drasi-blue) !important;
  color: #fff !important;
  box-shadow: none !important;
}

div.dataTables_wrapper .pagination .page-link:hover,
div.dt-container .pagination .page-link:hover,
.dataTables_paginate .paginate_button:hover {
  background: var(--drasi-light-purple) !important;
  border-color: var(--drasi-border) !important;
  color: var(--drasi-dark) !important;
}

/* Paginación propia del CMS (.cms-pagination) — mismos colores que la de las
   tablas (DataTables): activo azul DRASI, hover lila suave, texto oscuro. */
.cms-pagination .page-link {
  color: var(--drasi-dark);
  box-shadow: none;
}
.cms-pagination .page-item.active .page-link {
  background: var(--drasi-blue);
  border-color: var(--drasi-blue);
  color: #fff;
}
.cms-pagination .page-link:hover {
  background: var(--drasi-light-purple);
  border-color: var(--drasi-border);
  color: var(--drasi-dark);
}
.cms-pagination .page-item.disabled .page-link {
  color: var(--drasi-text-muted);
}

/* ============================================================
   BADGES pill
   ============================================================ */
.badge-status,
.badge-pill {
  padding: 4px 10px;
  border-radius: 20px;
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .03em;
}

.badge-activo,
.badge-pagado {
  background: rgba(205, 215, 55, .2);
  color: #7a8220;
}

.badge-pendiente {
  background: rgba(63, 184, 234, .15);
  color: #2a7ea0;
}

.badge-parcial {
  background: rgba(240, 165, 0, .15);
  color: #a06000;
}

.badge-inactivo,
.badge-pendiente-pago {
  background: rgba(221, 100, 100, .15);
  color: #c04040;
}

/* ============================================================
   FORMULARIOS
   ============================================================ */
.form-label {
  font-size: .8rem;
  font-weight: 600;
  color: var(--drasi-dark);
  margin-bottom: 6px;
}

.required-star {
  color: var(--drasi-red);
  font-weight: 700;
}

.form-control,
.form-select {
  border: 1.5px solid var(--drasi-border);
  border-radius: 8px;
  padding: 8px 12px;
  font-size: .875rem;
  color: var(--drasi-text-main);
  background-color: #fff;
}

/* Placeholders siempre visibles (gris-morado suave, opacidad plena).
   Bootstrap/algunos navegadores los dejan casi invisibles. */
.form-control::placeholder,
.form-select::placeholder,
textarea.form-control::placeholder {
  color: #9b93ac;
  opacity: 1;
}
.form-control::-webkit-input-placeholder { color: #9b93ac; opacity: 1; }
.form-control::-moz-placeholder { color: #9b93ac; opacity: 1; }

/* Tamaño uniforme de inputs (también dentro de modales): los controles y el
   addon del icono comparten alto, fuente y padding. Evita el desajuste de
   tamaño que se veía en los modales. */
.input-group > .form-control,
.input-group > .form-select {
  min-height: 38px;
  font-size: .875rem;
}
.modal .form-control,
.modal .form-select,
.modal .input-group-text {
  font-size: .875rem;
}

/* v3: foco plano sin sombra azul de Bootstrap */
.form-control:focus,
.form-select:focus,
.form-control:active,
.form-select:active {
  border-color: var(--drasi-border);
  box-shadow: none !important;
  outline: none;
}
.input-group:focus-within .form-control,
.input-group:focus-within .form-select,
.input-group:focus-within .input-group-text {
  border-color: var(--drasi-border);
  box-shadow: none !important;
}
/* Select2 — mismo estilo que .form-control/.form-select */
.select2-container {
  width: 100% !important;
}
/* Select2 dentro de input-group (icono a la izquierda): el contenedor de
   select2 actúa como control flexible y se cuadran sus esquinas izquierdas. */
.input-group > .select2-container {
  flex: 1 1 auto;
  width: 1% !important;
}
.input-group > .select2-container .select2-selection {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  height: 100%;
}
/* El addon del icono pega contra el control (sin doble esquina). */
.input-group > .input-group-text + .select2-container .select2-selection,
.input-group > .input-group-text ~ .form-control,
.input-group > .input-group-text ~ .form-select {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
}
.select2-container--bootstrap-5 .select2-selection {
  border: 1.5px solid var(--drasi-border) !important;
  border-radius: 8px !important;
  background-color: #fff;
  min-height: unset;
}
.select2-container--bootstrap-5 .select2-selection--single {
  height: auto;
  padding: 8px 12px;
}
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__rendered {
  padding: 0;
  font-size: .875rem;
  line-height: 2.1;
  color: var(--drasi-text-main);
}
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__placeholder {
  color: #6c757d;
}
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__arrow {
  height: 100%;
  right: 10px;
}
.select2-container--bootstrap-5 .select2-selection,
.select2-container--bootstrap-5.select2-container--focus .select2-selection,
.select2-container--bootstrap-5.select2-container--open .select2-selection,
.select2-container--bootstrap-5 .select2-selection:focus,
.select2-container--bootstrap-5 .select2-selection--single:focus {
  border-color: var(--drasi-border) !important;
  box-shadow: none !important;
  outline: none !important;
}
.select2-dropdown {
  border: 1.5px solid var(--drasi-border);
  border-radius: 8px;
  font-size: .875rem;
}
.select2-container--bootstrap-5 .select2-results__option--highlighted[aria-selected] {
  background-color: var(--drasi-blue) !important;
  color: #fff !important;
}
.select2-container--bootstrap-5 .select2-results__option[aria-selected=true],
.select2-container--bootstrap-5 .select2-results__option--selected {
  background-color: var(--drasi-purple) !important;
  color: #fff !important;
}
.select2-container--bootstrap-5 .select2-search--dropdown .select2-search__field {
  border: 1.5px solid var(--drasi-border);
  border-radius: 6px;
  font-size: .875rem;
  padding: 6px 10px;
}
.select2-container--bootstrap-5 .select2-search--dropdown .select2-search__field:focus {
  border-color: var(--drasi-border) !important;
  outline: none;
  box-shadow: none !important;
}

.tareas-board {
  align-items: stretch;
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  overflow-x: visible;
}
.tarea-col {
  min-width: 240px;
  width: auto;
}
.tarea-pool-col {
  min-width: 240px;
}
.tarea-pool-col > .card,
.tarea-pool-col > .border {
  border-top: 3px solid var(--drasi-purple) !important;
}
.tarea-dropzone {
  min-height: 84px;
  transition: background-color .15s ease, outline-color .15s ease;
}
.tarea-dropzone.is-over {
  background-color: var(--drasi-white-bg);
  outline: 2px dashed var(--drasi-blue);
  outline-offset: -4px;
}
.tarea-person {
  cursor: grab;
  background: #fff;
}
.tarea-person:active {
  cursor: grabbing;
}
.tarea-person.is-moving {
  opacity: .55;
}

/* Controles de selección con paleta DRASI */
.form-check-input {
  accent-color: var(--drasi-blue);
  border-color: var(--drasi-border);
}

.form-check-input:checked {
  background-color: var(--drasi-blue);
  border-color: var(--drasi-blue);
}

.form-check-input:focus {
  border-color: var(--drasi-blue);
  box-shadow: 0 0 0 .2rem rgba(63, 184, 234, .18);
}

.form-check-input:checked:disabled {
  background-color: var(--drasi-blue);
  border-color: var(--drasi-blue);
}

.cms-card-bulk-check {
  width: 1.25rem;
  height: 1.25rem;
  background-color: #fff;
  border: 2px solid var(--drasi-dark);
  box-shadow: 0 2px 8px rgba(16, 17, 44, .22);
  cursor: pointer;
}

.cms-card-bulk-check:checked {
  background-color: var(--drasi-blue);
  border-color: #fff;
  box-shadow: 0 0 0 2px var(--drasi-blue), 0 3px 10px rgba(16, 17, 44, .28);
}

/* Validación Pristine */
.has-danger .form-control, .has-danger .form-select { border-color: var(--drasi-red) !important; }
.has-success .form-control, .has-success .form-select { border-color: var(--drasi-valid) !important; }
.text-danger.small { color: var(--drasi-red) !important; font-size:.78rem; margin-top:4px; }
.was-validated .form-control:invalid,
.was-validated .form-select:invalid,
.was-validated .form-check-input:invalid {
  border-color: var(--drasi-red) !important;
}

.was-validated .form-control:valid,
.was-validated .form-select:valid,
.was-validated .form-check-input:valid {
  border-color: var(--drasi-valid) !important;
}

/* Validación de un INPUT-GROUP = una sola pieza: anillo exterior alrededor de
   TODO el grupo (icono + campo + addons), con los bordes internos en transparente
   para que no se vea dividido. Misma técnica que usa el login. */
.was-validated .input-group:has(.form-control:invalid),
.was-validated .input-group:has(.form-select:invalid),
.input-group:has(.is-invalid),
.has-danger .input-group {
  border-radius: 8px;
  box-shadow: 0 0 0 1.5px var(--drasi-red);
}
.was-validated .input-group:has(.form-control:valid),
.was-validated .input-group:has(.form-select:valid),
.input-group:has(.is-valid),
.has-success .input-group {
  border-radius: 8px;
  box-shadow: 0 0 0 1.5px var(--drasi-valid);
}
/* Bordes internos transparentes: el grupo se ve como un único bloque. */
.was-validated .input-group:has(.form-control:invalid) > .form-control,
.was-validated .input-group:has(.form-control:invalid) > .form-select,
.was-validated .input-group:has(.form-control:invalid) > .input-group-text,
.was-validated .input-group:has(.form-select:invalid) > .form-select,
.was-validated .input-group:has(.form-select:invalid) > .input-group-text,
.was-validated .input-group:has(.form-control:valid) > .form-control,
.was-validated .input-group:has(.form-control:valid) > .form-select,
.was-validated .input-group:has(.form-control:valid) > .input-group-text,
.was-validated .input-group:has(.form-select:valid) > .form-select,
.was-validated .input-group:has(.form-select:valid) > .input-group-text,
.input-group:has(.is-invalid) > .form-control,
.input-group:has(.is-invalid) > .form-select,
.input-group:has(.is-invalid) > .input-group-text,
.input-group:has(.is-valid) > .form-control,
.input-group:has(.is-valid) > .form-select,
.input-group:has(.is-valid) > .input-group-text,
.has-danger .input-group > .form-control,
.has-danger .input-group > .form-select,
.has-danger .input-group > .input-group-text,
.has-success .input-group > .form-control,
.has-success .input-group > .form-select,
.has-success .input-group > .input-group-text {
  border-color: transparent !important;
}
/* El icono toma el color del estado. */
.was-validated .input-group:has(.form-control:invalid) .input-group-text,
.was-validated .input-group:has(.form-select:invalid) .input-group-text,
.input-group:has(.is-invalid) .input-group-text,
.has-danger .input-group .input-group-text {
  color: var(--drasi-red) !important;
}
.was-validated .input-group:has(.form-control:valid) .input-group-text,
.was-validated .input-group:has(.form-select:valid) .input-group-text,
.input-group:has(.is-valid) .input-group-text,
.has-success .input-group .input-group-text {
  color: var(--drasi-valid) !important;
}
/* Inputs sueltos (sin grupo): borde de color normal. */
.is-valid, .was-validated .form-control:valid, .was-validated .form-select:valid {
  border-color: var(--drasi-valid) !important;
}
.is-invalid, .was-validated .form-control:invalid, .was-validated .form-select:invalid {
  border-color: var(--drasi-red) !important;
}
/* Quitar el ícono de fondo (check/cruz) de Bootstrap que descoloca campos con addon. */
.was-validated .input-group .form-control:valid,
.was-validated .input-group .form-control:invalid,
.was-validated .input-group .form-select:valid,
.was-validated .input-group .form-select:invalid {
  background-image: none !important;
  padding-right: .75rem !important;
}
/* Flatpickr branding */
.flatpickr-day.today { border-color: var(--drasi-blue); }
.flatpickr-day.selected, .flatpickr-day.selected:hover { background: transparent; border-color: var(--drasi-blue); color: var(--drasi-dark); }
.flatpickr-day:hover { background: var(--drasi-light-purple); }
.flatpickr-months .flatpickr-month, .flatpickr-weekdays, .flatpickr-weekday { background: var(--drasi-dark); color:#fff; }
.flatpickr-weekdays .flatpickr-weekdaycontainer .flatpickr-weekday { color:#fff !important; }
.flatpickr-current-month .flatpickr-monthDropdown-months, .flatpickr-current-month input.cur-year { color:#fff; }
.flatpickr-current-month input.cur-year[disabled], .flatpickr-current-month input.cur-year[disabled]:hover { color:#fff !important; }
.flatpickr-months .flatpickr-prev-month svg, .flatpickr-months .flatpickr-next-month svg { fill:#fff; }

.input-group-text {
  border: 1.5px solid var(--drasi-border);
  background-color: var(--drasi-white-bg);
  color: var(--drasi-text-muted);
  border-radius: 8px;
}
/* El addon pega contra el control: esquinas derechas cuadradas. */
.input-group > .input-group-text:first-child {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}

/* Textarea con icono: el icono se mantiene SIEMPRE arriba a la izquierda
   (no centrado verticalmente como en inputs de una línea). */
.input-group:has(textarea) > .input-group-text {
  align-items: flex-start;
  padding-top: 9px;
}
.input-group > textarea.form-control {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}

.form-section-title {
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--drasi-blue);
  border-bottom: 2px solid var(--drasi-light-purple);
  padding-bottom: 8px;
  margin: 28px 0 20px;
}

/* Fieldsets — agrupación lógica de formularios */
fieldset {
  background: #fff;
}

.form-fieldset {
  border: 1px solid var(--drasi-border);
  border-radius: 12px;
  padding: 18px 20px 22px;
  margin-bottom: 22px;
}
/* list-group activo con el azul de marca DRASI. Bootstrap define la variable
   dentro del scope .list-group, por eso se sobreescribe ahí (no en :root). */
.list-group {
  --bs-list-group-active-bg: var(--drasi-blue);
  --bs-list-group-active-border-color: var(--drasi-blue);
}
.form-fieldset > legend {
  float: none;
  width: auto;
  padding: 0 10px;
  margin-bottom: 4px;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--drasi-purple);
}

/* ============================================================
   FORMULARIO PÚBLICO DE INSCRIPCIÓN (sin sidebar/topbar)
   ============================================================ */
.public-form-body {
  background: linear-gradient(160deg, var(--drasi-dark) 0%, #1b1f4a 55%, #2a2f63 100%);
  min-height: 100vh;
  padding: 32px 14px 56px;
}
.public-form-wrap {
  max-width: 920px;
  margin: 0 auto;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 18px 50px rgba(0,0,0,.28);
  padding: 28px 26px 34px;
}
.public-form-header { margin-bottom: 22px; }
.public-form-header h4 { color: var(--drasi-dark); font-weight: 700; }
@media (max-width: 576px) {
  .public-form-wrap { padding: 20px 16px 26px; border-radius: 12px; }
}

/* ============================================================
   NAV TABS (perfil misionero)
   ============================================================ */
.nav-tabs {
  border-bottom: 1px solid var(--drasi-border);
}

.nav-tabs .nav-link {
  color: var(--drasi-text-muted);
  font-weight: 600;
  border: none;
}

.nav-tabs .nav-link.active {
  color: var(--drasi-blue);
  background: transparent;
  border-bottom: 3px solid var(--drasi-blue);
}

/* nav-pills con paleta DRASI (Bootstrap por defecto usa azul genérico). */
.nav-pills {
  --bs-nav-pills-link-active-bg: var(--drasi-blue);
}
.nav-pills .nav-link {
  color: var(--drasi-text-muted);
  font-weight: 600;
  border-radius: 8px;
}
.nav-pills .nav-link:hover {
  color: var(--drasi-blue);
  background: var(--drasi-white-bg);
}
.nav-pills .nav-link.active {
  background-color: var(--drasi-blue);
  color: #fff;
}

/* Selector de color dentro de input-group: misma altura que el input de texto
   (Bootstrap le da otra altura/padding y queda desalineado). */
.input-group > .form-control-color {
  min-height: 40px;
  height: 40px;
  padding: 4px 6px;
}

.misionero-profile .card-body {
  padding: 16px;
}

.misionero-profile .tab-content {
  min-height: 0;
  height: auto;
}

.misionero-profile .tab-content > .tab-pane {
  display: none;
  min-height: 0;
}

.misionero-profile .tab-content > .active {
  display: block;
}

.misionero-profile .form-fieldset {
  padding: 12px 14px 14px;
  margin-bottom: 12px;
}

.misionero-profile .form-fieldset > legend {
  margin-bottom: 0;
}

.misionero-profile .info-item {
  margin-bottom: 8px;
}

.misionero-profile .info-label {
  color: var(--drasi-text-muted);
  font-size: .72rem;
  line-height: 1.1;
}

.misionero-profile .info-value {
  font-weight: 700;
  line-height: 1.25;
}

.misionero-profile .compact-table > :not(caption) > * > * {
  padding-top: .35rem;
  padding-bottom: .35rem;
}

/* ============================================================
   ALERTAS
   ============================================================ */
.alert {
  border-radius: 10px;
  border: none;
}

.alert-info {
  background: rgba(63, 184, 234, .1);
  color: #1a7a9e;
  border-left: 4px solid var(--drasi-blue);
}

.alert-success {
  background: rgba(205, 215, 55, .15);
  color: #6a7a10;
  border-left: 4px solid var(--drasi-yellow);
}

.alert-warning {
  background: rgba(240, 165, 0, .12);
  color: #a06000;
  border-left: 4px solid var(--drasi-warning);
}

.alert-danger {
  background: rgba(221, 100, 100, .15);
  color: #a03030;
  border-left: 4px solid var(--drasi-red);
}

.alert-empty {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 24px 28px;
}

.alert-empty i {
  font-size: 1.8rem;
  opacity: .6;
}

/* ============================================================
   MANUAL DE USUARIO
   ============================================================ */
.manual-page { width: 100%; }

.manual-hero {
  background: linear-gradient(120deg, var(--drasi-purple), var(--drasi-blue));
  border-radius: 16px;
  color: #fff;
  padding: 24px;
  overflow: hidden;
}

.manual-hero h1 {
  color: #fff;
  font-size: 1.55rem;
  margin: 0 0 8px;
}

.manual-hero p {
  color: rgba(255, 255, 255, .88);
  max-width: 760px;
  margin: 0;
  line-height: 1.55;
}

.manual-hero .manual-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-radius: 999px;
  background: rgba(124, 95, 168, .28);
  border: 1px solid rgba(255, 255, 255, .22);
  color: #fff;
  font-size: .78rem;
  font-weight: 750;
  padding: 7px 11px;
}

.manual-panel {
  background: #fff;
  border: 1px solid var(--drasi-border);
  border-radius: 14px;
  box-shadow: 0 10px 30px rgba(16, 17, 44, .05);
}

.manual-panel .panel-head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 15px 18px;
  border-bottom: 1px solid var(--drasi-border);
  color: var(--drasi-dark);
  font-weight: 800;
}

.manual-panel .panel-head i { color: var(--drasi-purple); }

.manual-panel .panel-body { padding: 18px; }

.manual-toc a {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 10px 12px;
  border-radius: 10px;
  color: var(--drasi-dark);
  font-weight: 700;
  border: 1px solid transparent;
}

.manual-toc a:hover {
  background: var(--drasi-white-bg);
  border-color: var(--drasi-border);
  color: var(--drasi-dark);
}

.manual-section { scroll-margin-top: 88px; }

.manual-section h2 {
  font-size: 1.15rem;
  margin-bottom: 8px;
}

.manual-section .lead-copy {
  color: var(--drasi-dark);
  line-height: 1.6;
  margin-bottom: 16px;
}

.manual-card {
  height: 100%;
  border: 1px solid var(--drasi-border);
  border-radius: 12px;
  background: #fff;
  padding: 15px;
  display: flex;
  gap: 12px;
  align-items: flex-start;
}

.manual-card .card-icon {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(63, 184, 234, .12);
  color: var(--drasi-blue);
  font-size: 1.1rem;
}

.manual-card h3 {
  font-size: .95rem;
  margin: 0 0 5px;
}

.manual-card p {
  color: var(--drasi-dark);
  font-size: .84rem;
  line-height: 1.48;
  margin: 0;
}

.manual-steps {
  counter-reset: manual-step;
  display: grid;
  gap: 10px;
}

.manual-step {
  counter-increment: manual-step;
  display: flex;
  gap: 12px;
  align-items: flex-start;
  border: 1px solid var(--drasi-border);
  border-radius: 12px;
  padding: 13px 14px;
  background: #fff;
}

.manual-step::before {
  content: counter(manual-step);
  width: 28px;
  height: 28px;
  flex: 0 0 auto;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  color: #fff;
  background: var(--drasi-purple);
}

.manual-step strong {
  display: block;
  color: var(--drasi-dark);
  margin-bottom: 2px;
}

.manual-step span {
  display: block;
  color: var(--drasi-dark);
  font-size: .84rem;
  line-height: 1.45;
}

.manual-procedure {
  border: 1px solid var(--drasi-border);
  border-radius: 12px;
  background: #fff;
  padding: 15px;
  height: 100%;
}

.manual-procedure h3 {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: .98rem;
  margin: 0 0 10px;
  color: var(--drasi-dark);
}

.manual-procedure h3 i { color: var(--drasi-blue); }

.manual-procedure ol {
  margin: 0;
  padding-left: 0;
  color: var(--drasi-dark);
  list-style: none;
}

.manual-procedure li {
  position: relative;
  margin-bottom: 7px;
  padding-left: 26px;
  line-height: 1.45;
}

.manual-procedure li::before {
  content: '-';
  position: absolute;
  left: 0;
  top: 0;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--drasi-dark);
  font-family: inherit;
  font-size: 1rem;
  font-weight: 800;
  line-height: 1;
}

.manual-procedure li:last-child { margin-bottom: 0; }

.manual-procedure strong { color: var(--drasi-dark); }

.manual-note {
  border-left: 4px solid var(--drasi-blue);
  background: rgba(63, 184, 234, .09);
  border-radius: 12px;
  padding: 14px 16px;
  color: var(--drasi-dark);
  line-height: 1.5;
}

.manual-note strong { color: var(--drasi-dark); }

.module-pill {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  border-radius: 999px;
  padding: 6px 10px;
  background: rgba(124, 95, 168, .12);
  color: var(--drasi-purple);
  font-weight: 800;
  font-size: .78rem;
}

@media (max-width:575.98px) {
  .manual-hero { padding: 20px; }
  .manual-hero h1 { font-size: 1.3rem; }
  .manual-panel .panel-body { padding: 14px; }
}

/* ============================================================
   FOOTER
   ============================================================ */
.app-footer {
  margin-left: 260px;
  transition: margin-left .3s ease;
  color: var(--drasi-text-muted);
}

.app-footer.expanded {
  margin-left: 70px;
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
/* Backdrop del sidebar off-canvas (móvil). Oculto/inerte por defecto;
   solo se activa junto a .sidebar.show dentro del media query. */
#sidebarBackdrop {
  position: fixed;
  inset: 0;
  background: rgba(16, 17, 44, .45);
  z-index: 1035;
  opacity: 0;
  visibility: hidden;
  transition: opacity .25s ease, visibility .25s ease;
  pointer-events: none;
}

/* Evita el scroll horizontal accidental de toda la página.
   Solo en <html> (raíz de scroll) para no romper position:sticky del topbar. */
html { overflow-x: hidden; }

@media(max-width:768px) {
  .sidebar {
    left: -260px;
    transition: left .3s ease;
    z-index: 1045;          /* por encima del backdrop (1035) y del topbar sticky */
  }

  .sidebar.show {
    left: 0;
    box-shadow: 0 0 40px rgba(16, 17, 44, .35);
  }

  /* El backdrop aparece cuando el sidebar está abierto en móvil. */
  .sidebar.show ~ #sidebarBackdrop,
  body.sidebar-open #sidebarBackdrop {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
  }

  /* Bloquea el scroll del body mientras el sidebar móvil está abierto. */
  body.sidebar-open {
    overflow: hidden;
  }

  .content,
  .content.expanded {
    margin-left: 0;
  }

  .app-footer,
  .app-footer.expanded {
    margin-left: 0 !important;
  }

  /* Topbar: deja envolver el contenido y reduce el padding lateral. */
  .topbar {
    flex-wrap: wrap;
    row-gap: 6px;
  }
  .topbar .navbar-brand {
    font-size: 1rem;
    max-width: 48vw;
  }

  /* Padding general más ajustado en tablet/móvil. */
  main.p-3,
  main.p-md-4 { padding: 1rem !important; }
  .breadcrumb-wrapper { padding: 10px 1rem; }
  .ver-como-bar { padding: 8px 1rem; }
}

/* ============================================================
   RESPONSIVE — móvil estrecho (≤576px)
   ============================================================ */
@media(max-width:575.98px) {
  main.p-3,
  main.p-md-4 { padding: .85rem !important; }

  /* El título no debe empujar a las acciones fuera de la pantalla. */
  .topbar .navbar-brand {
    max-width: 42vw;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  /* Compacta el grupo de acciones de la derecha. */
  .topbar .ms-auto { gap: .35rem !important; }
  .viaje-selector { font-size: .75rem; padding: 4px 8px; }

  /* Cards y kpi con menos padding interno. */
  .kpi-card { padding: 14px 16px; }
  .card-body { padding: 1rem; }
  .dash-hero { padding: 16px 18px; }
  .manual-hero { padding: 18px; }

  /* La barra "Ver como rol" envuelve correctamente. */
  .ver-como-bar { font-size: .8rem; }

  /* Tablas: el wrapper de DataTables puede desbordar; lo confinamos. */
  .table-responsive { -webkit-overflow-scrolling: touch; }
}

/* ============================================================
   Utilidad de cabecera de página responsive — .page-header
   Cabecera de módulo (título + acciones) que apila en móvil.
   Reutilizable por los agentes de cada módulo.
   ============================================================ */
.page-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}
.page-header .page-header-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
@media(max-width:575.98px) {
  .page-header { align-items: flex-start; }
  .page-header .page-header-actions { width: 100%; }
}

/* Utilidad: confina celdas/anchos largos para que no fuercen scroll-x. */
.cell-truncate {
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ============================================================
   v3: selector de viaje + breadcrumb
   ============================================================ */
.viaje-selector {
  border: 1.5px solid var(--drasi-border);
  background: #fff;
  color: var(--drasi-dark);
  font-size: .8rem;
  font-weight: 600;
  border-radius: 8px;
  padding: 5px 10px;
}
.viaje-selector:hover, .viaje-selector:focus { border-color: var(--drasi-blue); color: var(--drasi-dark); }

.breadcrumb-wrapper {
  background: #fff;
  border-bottom: 1px solid var(--drasi-border);
  padding: 10px 1.5rem;
}
.drasi-breadcrumb { font-size: .8rem; margin: 0; }
.drasi-breadcrumb .breadcrumb-item a {
  color: var(--drasi-blue);
  text-decoration: none;
  font-weight: 500;
}
.drasi-breadcrumb .breadcrumb-item a:hover { color: var(--drasi-purple); }
.drasi-breadcrumb .breadcrumb-item.active { color: var(--drasi-text-muted); font-weight: 600; }
.drasi-breadcrumb .breadcrumb-item + .breadcrumb-item::before {
  content: '\F285';
  font-family: 'bootstrap-icons';
  color: var(--drasi-light-purple);
  font-size: .7rem;
}

.filter-clear-btn {
  min-height: 31px;
}

/* ============================================================
   Dash-hero — encabezado tipo "saludo" reutilizable
   (dashboard.php, perfil de misionero, portal del misionero).
   ============================================================ */
.dash-hero { background:linear-gradient(120deg,var(--drasi-purple),var(--drasi-blue));
  border-radius:14px; color:#fff; padding:20px 24px; }
.dash-hero .avatar { box-shadow:0 0 0 3px #fff; }
.dash-hero h4 { font-weight:700; color:#fff; }
.dash-hero-link { display:inline-flex; align-items:center; gap:6px; margin-top:6px;
  font-size:.82rem; font-weight:700; color:var(--drasi-yellow); text-decoration:none;
  padding:4px 10px; border-radius:999px; background:rgba(205,215,55,.12);
  border:1px solid rgba(205,215,55,.45); transition:all .15s ease;
  cursor:pointer; font-family:inherit; line-height:1.2; }
.dash-hero-link:hover { color:var(--drasi-dark); background:var(--drasi-yellow);
  border-color:var(--drasi-yellow); }
.dash-hero-link .bi-arrow-up-right { font-size:.72rem; opacity:.85; }
/* Chips de datos sobre el hero (estado, viaje, balance) */
.dash-hero .hero-chip { display:inline-flex; align-items:center; gap:8px;
  background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.25);
  border-radius:999px; padding:5px 13px; font-size:.78rem; font-weight:600; color:#fff; }
.dash-hero .hero-chip .bi { opacity:.9; font-size:.9em; }
.dash-hero-link { gap:8px; }

/* Mini KPIs (perfil del misionero, debajo del dash-hero) */
.kpi-mini { background:#fff; border:1px solid var(--drasi-border); border-radius:12px;
  padding:12px 14px; display:flex; align-items:center; gap:12px; height:100%; }
.kpi-mini .km-ico { width:40px; height:40px; border-radius:10px; flex:0 0 40px;
  display:flex; align-items:center; justify-content:center; font-size:1.1rem; }
.kpi-mini .km-ico.blue      { background:rgba(63,184,234,.15);  color:var(--drasi-blue); }
.kpi-mini .km-ico.blue-dark { background:rgba(42,158,207,.15);  color:var(--drasi-blue-dark); }
.kpi-mini .km-ico.green     { background:rgba(63,174,116,.15);  color:var(--drasi-success); }
.kpi-mini .km-ico.purple    { background:rgba(124,95,168,.15);  color:var(--drasi-purple); }
.kpi-mini .km-ico.red       { background:rgba(221,100,100,.15); color:var(--drasi-red); }
.kpi-mini .km-num { font-size:1.25rem; font-weight:800; color:var(--drasi-dark);
  line-height:1.1; white-space:nowrap; }
.kpi-mini .km-lbl { font-size:.74rem; color:var(--drasi-text-muted); line-height:1.2; }

/* ============================================================
   Portal del misionero
   ============================================================ */
.portal-quick { display:flex; align-items:center; gap:14px; padding:16px;
  background:#fff; border:1px solid var(--drasi-border); border-radius:12px;
  text-decoration:none; height:100%; transition:transform .15s, box-shadow .15s; }
.portal-quick:hover { transform:translateY(-3px); box-shadow:0 14px 34px rgba(16,17,44,.12); }
.portal-quick .pq-ico { width:46px; height:46px; border-radius:11px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center; font-size:1.3rem;
  background:var(--drasi-light-purple); color:var(--drasi-purple); }
.portal-quick .pq-title { font-weight:700; color:var(--drasi-dark); line-height:1.2; }
.portal-quick .pq-sub { font-size:.78rem; color:var(--drasi-text-muted); }
.anuncio-item { border:1px solid var(--drasi-border); border-radius:12px;
  padding:14px 16px; background:#fff; margin-bottom:12px; }
.anuncio-item.is-fijado { border-color:var(--drasi-purple); box-shadow:0 0 0 1px var(--drasi-purple) inset; }
.anuncio-item .an-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.anuncio-item .an-title { font-weight:700; color:var(--drasi-dark); }
.anuncio-item .an-body { color:var(--drasi-dark); font-size:.9rem; margin-top:6px; white-space:pre-line; }
.anuncio-item .an-date { font-size:.74rem; color:var(--drasi-text-muted); }
.an-prio-NORMAL    { background:var(--drasi-light-purple); color:var(--drasi-purple); }
.an-prio-IMPORTANTE{ background:#fff3cd; color:#9a7d0a; }
.an-prio-URGENTE   { background:#f8d7da; color:var(--drasi-red); }

/* Links del portal con la paleta de marca */
.portal-link { color:var(--drasi-blue-dark); font-weight:600; text-decoration:none;
  display:inline-flex; align-items:center; gap:5px; }
.portal-link:hover { color:var(--drasi-purple); text-decoration:underline; }

/* Selector de viaje (cambiar de viaje, por defecto el activo) */
.portal-trip-btn { background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.3);
  color:#fff; font-weight:600; border-radius:999px; padding:6px 14px; font-size:.82rem; }
.portal-trip-btn:hover, .portal-trip-btn:focus, .portal-trip-btn.show {
  background:var(--drasi-yellow); border-color:var(--drasi-yellow); color:var(--drasi-dark); }
.portal-trip-menu { --bs-dropdown-min-width:15rem; padding:.35rem; }
.portal-trip-menu .dropdown-item { border-radius:8px; padding:.45rem .65rem; }
.portal-trip-menu .dropdown-item.active,
.portal-trip-menu .dropdown-item:active { background:var(--drasi-purple); color:#fff; }
.portal-trip-menu .dropdown-item .pt-meta { font-size:.74rem; color:var(--drasi-text-muted); }
.portal-trip-menu .dropdown-item.active .pt-meta { color:rgba(255,255,255,.85); }

/* Card de cuenta regresiva (countdown) */
.countdown-card { background:linear-gradient(120deg,var(--drasi-purple),var(--drasi-blue-dark));
  border:0; border-radius:14px; color:#fff; }
.countdown-card .cd-label { font-size:.74rem; text-transform:uppercase; letter-spacing:.05em;
  opacity:.9; font-weight:600; }
.countdown-grid { display:flex; gap:10px; flex-wrap:wrap; }
.countdown-grid .cd-box { background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.22);
  border-radius:12px; padding:10px 0; text-align:center; flex:1 1 0; min-width:64px; }
.countdown-grid .cd-num { font-size:1.7rem; font-weight:800; line-height:1; }
.countdown-grid .cd-unit { font-size:.7rem; text-transform:uppercase; letter-spacing:.04em; opacity:.9; }
.countdown-card .cd-started { font-size:.9rem; font-weight:600; }

/* Card "Próximo vuelo" rediseñado */
.flight-card .fc-head { display:flex; align-items:center; gap:10px; margin-bottom:14px; }
.flight-card .fc-ico { width:42px; height:42px; border-radius:50%; flex:0 0 42px;
  display:flex; align-items:center; justify-content:center; font-size:1.25rem; }
.flight-card .fc-ico.llegada { background:rgba(63,174,116,.15); color:var(--drasi-success); }
.flight-card .fc-ico.salida  { background:rgba(63,184,234,.15); color:var(--drasi-blue); }
.flight-card .fc-dir { font-weight:700; color:var(--drasi-dark); line-height:1.15; }
.flight-card .fc-when { font-size:.8rem; color:var(--drasi-text-muted); }
.flight-route { display:flex; align-items:center; gap:10px; margin:6px 0 12px; }
.flight-route .fr-place { font-weight:700; color:var(--drasi-dark); }
.flight-route .fr-line { flex:1; height:2px; background:var(--drasi-border); position:relative; }
.flight-route .fr-line i { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  background:rgba(124,95,168,.15); color:var(--drasi-purple); font-size:.9rem; }
.flight-meta { display:flex; gap:18px; flex-wrap:wrap; }
.flight-meta .fm-k { font-size:.72rem; color:var(--drasi-text-muted); text-transform:uppercase; letter-spacing:.03em; }
.flight-meta .fm-v { font-weight:700; color:var(--drasi-dark); }

/* KPI "Avance de pago": barra de progreso dentro del card */
.kpi-card .kpi-bar { margin-top:7px; width:100%; height:7px; border-radius:999px;
  background:var(--drasi-light-purple); overflow:hidden; }
.kpi-card .kpi-bar > span { display:block; height:100%; border-radius:999px;
  background:linear-gradient(90deg,var(--drasi-blue),var(--drasi-purple)); }

/* KPI: monto esperado atenuado junto al pagado */
.kpi-number .kpi-of { color:var(--drasi-text-muted); font-weight:600; font-size:.85em; }

/* Portal: textos un poco más pequeños en las tarjetas */
.portal-page .kpi-card { min-height:0; padding:14px 16px; }
.portal-page .kpi-number { font-size:clamp(1.05rem,1.5vw,1.35rem); }
.portal-page .kpi-label { font-size:.72rem; }
.portal-page .card-body h6 { font-size:.92rem; }
.portal-page .anuncio-item .an-title { font-size:.88rem; }
.portal-page .anuncio-item .an-body { font-size:.82rem; }
.portal-page .flight-card .fc-dir { font-size:.92rem; }
.portal-page .flight-route .fr-place { font-size:.88rem; }

/* Historial "Mis viajes": fila del viaje activo en negrita */
.portal-page tr.viaje-activo td { font-weight:700; }
.portal-page tr.viaje-activo { background:rgba(124,95,168,.06); }

/* Anuncios clicables (abren modal con el anuncio completo) */
.anuncio-item.is-click { cursor:pointer;
  transition:border-color .15s ease, background-color .15s ease, box-shadow .15s ease; }
.anuncio-item.is-click:hover { border-color:var(--drasi-purple);
  background:var(--drasi-white-bg); box-shadow:none; }
.anuncio-item .an-body.an-abstract { display:-webkit-box; -webkit-line-clamp:2;
  -webkit-box-orient:vertical; overflow:hidden; }
.anuncio-item .an-ver { font-size:.74rem; font-weight:600; color:var(--drasi-blue-dark);
  display:inline-flex; align-items:center; gap:4px; margin-top:6px; }

/* Footer de card del portal con el link "Ver" */
.portal-page .card-footer { background:transparent; border-top:1px solid var(--drasi-border);
  padding:.6rem 1rem; text-align:right; }

/* Mis pagos: tarjetas pequeñas con gráfica de avance por cuota */
.pago-chart-card { background:#fff; border:1px solid var(--drasi-border); border-radius:12px;
  padding:14px; display:flex; align-items:center; gap:14px; height:100%; }
.pago-chart-card .pcc-canvas { width:74px; height:74px; flex:0 0 74px; position:relative; }
.pago-chart-card .pcc-canvas .pcc-pct { position:absolute; inset:0; display:flex;
  align-items:center; justify-content:center; font-weight:800; font-size:1.05rem; color:var(--drasi-dark); }
.pago-chart-card .pcc-label { font-size:1rem; font-weight:700; color:var(--drasi-dark); line-height:1.25; }
.pago-chart-card .pcc-sub { font-size:.86rem; color:var(--drasi-text-muted); margin-top:3px; }
.pago-chart-card .pcc-sub strong { color:var(--drasi-success); }

/* Mis vuelos: tarjetas estilo "próximo vuelo" del index (sin tablas) */
.portal-page .flight-card .card-body { padding-bottom:14px; }

/* ============================================================
   Notificaciones (campana del topbar)
   ============================================================ */
.notif-bell { color:var(--drasi-purple); background:transparent; line-height:1; }
.notif-bell:hover { color:var(--drasi-blue); }
.notif-bell .notif-dot { position:absolute; top:5px; right:6px; width:10px; height:10px;
  border-radius:50%; background:var(--drasi-red); border:2px solid #fff;
  box-shadow:0 0 0 1px var(--drasi-red); }
.notif-menu { min-width:320px; max-width:360px; padding:8px 0; }
.notif-menu .dropdown-header { font-weight:700; color:var(--drasi-dark); font-size:.85rem; }
.notif-menu .notif-count { background:var(--drasi-red); font-size:.7rem; }
.notif-menu .notif-item { display:flex; align-items:flex-start; gap:10px;
  padding:9px 14px; white-space:normal; }
.notif-menu .notif-item.is-nuevo { background:rgba(63,184,234,.08); }
.notif-menu .notif-item .notif-ico { width:32px; height:32px; border-radius:9px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center; font-size:.9rem; }
.notif-menu .notif-item .notif-body { min-width:0; display:flex; flex-direction:column; gap:1px; }
.notif-menu .notif-item .notif-title { font-weight:650; color:var(--drasi-dark); font-size:.84rem;
  line-height:1.25; }
.notif-menu .notif-item .notif-meta { font-size:.72rem; color:var(--drasi-text-muted); }
.notif-menu .notif-empty { text-align:center; color:var(--drasi-text-muted);
  font-size:.82rem; padding:18px 14px; }

/* ===== Botón "Gestionar" del roster de viajes (paleta de marca) ===== */
.btn-acciones { background:var(--drasi-purple); border:1px solid var(--drasi-purple);
  color:#fff; font-weight:600; }
.btn-acciones:hover, .btn-acciones:focus, .btn-acciones.show {
  background:var(--drasi-purple-dark); border-color:var(--drasi-purple-dark); color:#fff;
  box-shadow:0 0 0 .2rem rgba(124,95,168,.25); }
.menu-acciones { --bs-dropdown-min-width:13rem; padding:.35rem; }
.menu-acciones .dropdown-item { border-radius:8px; padding:.4rem .6rem; font-size:.86rem;
  display:flex; align-items:center; }
.menu-acciones .dropdown-item i { width:1.15em; text-align:center; }
.menu-acciones .dropdown-item:active { background:var(--drasi-purple); color:#fff; }
.menu-acciones .dropdown-item:active i { color:#fff !important; }

/* Selector de módulo: ítem activo con el degradado/azul de marca (no el azul de Bootstrap) */
.modulo-menu .dropdown-item.active,
.modulo-menu .dropdown-item:active {
  background:linear-gradient(135deg, var(--drasi-blue), var(--drasi-purple));
  color:#fff;
}
.modulo-menu .dropdown-item.active i,
.modulo-menu .dropdown-item:active i { color:#fff !important; }
.modulo-menu .dropdown-item:hover { background:var(--drasi-light-purple); color:var(--drasi-text-main); }
.modulo-menu .dropdown-item:hover i { color:var(--drasi-text-main); }
/* Al pasar el mouse sobre el ítem activo, mantener el degradado y texto blanco */
.modulo-menu .dropdown-item.active:hover {
  background:linear-gradient(135deg, var(--drasi-blue), var(--drasi-purple));
  color:#fff;
}
.modulo-menu .dropdown-item.active:hover i { color:#fff !important; }
/* Íconos coloreados por concepto */
.menu-acciones .ico-ver     { color:var(--drasi-info); }
.menu-acciones .ico-pago    { color:var(--drasi-success); }
.menu-acciones .ico-mision  { color:var(--drasi-purple); }
.menu-acciones .ico-turismo { color:var(--drasi-blue); }
.menu-acciones .ico-vuelo   { color:var(--drasi-blue-dark); }
.menu-acciones .ico-cuenta  { color:var(--drasi-success-dark); }
.menu-acciones .ico-editar  { color:var(--drasi-warning); }
.menu-acciones .ico-peligro { color:var(--drasi-red); }

/* Selector visual de iconos (CRUD type=iconpick) */
.admin-iconpick-btn{ width:42px; height:42px; display:inline-flex; align-items:center; justify-content:center; font-size:1.15rem; padding:0; }
.admin-iconpick-btn.active{ background:var(--drasi-blue,#3fb8ea); border-color:var(--drasi-blue,#3fb8ea); color:#fff; }

/* Editor de prioridades: librería de iconos (modal con búsqueda) */
.admin-prio-iconbtn{ width:46px; height:46px; display:inline-flex; align-items:center; justify-content:center; font-size:1.2rem; padding:0; }
.admin-prio-iconlib{ display:grid; grid-template-columns:repeat(auto-fill, minmax(46px, 1fr)); gap:.4rem; }
.admin-prio-iconcell{
  aspect-ratio:1/1; display:inline-flex; align-items:center; justify-content:center; font-size:1.2rem;
  border:1px solid var(--drasi-border,#e3dee9); border-radius:8px; background:#fff; color:#333; cursor:pointer;
  transition:.12s;
}
.admin-prio-iconcell:hover{ background:var(--drasi-blue,#3fb8ea); border-color:var(--drasi-blue,#3fb8ea); color:#fff; transform:translateY(-1px); }

/* ── Selector de Biblioteca dentro de TinyMCE (window.DRASI_mediaPicker) ── */
.drasi-mp-overlay{ position:fixed; inset:0; z-index:200000; background:rgba(16,17,44,.55);
  display:flex; align-items:center; justify-content:center; padding:24px; }
.drasi-mp{ background:#fff; width:min(880px,96vw); max-height:88vh; border-radius:14px;
  display:flex; flex-direction:column; overflow:hidden; box-shadow:0 24px 60px rgba(0,0,0,.35); }
.drasi-mp-head{ display:flex; align-items:center; gap:.75rem; padding:.85rem 1.1rem;
  border-bottom:1px solid var(--drasi-border,#e3dee9); }
.drasi-mp-head strong{ font-size:1rem; color:var(--drasi-dark,#10112c); white-space:nowrap; }
.drasi-mp-search{ flex:1; border:1px solid var(--drasi-border,#e3dee9); border-radius:8px;
  padding:.4rem .7rem; font-size:.9rem; }
.drasi-mp-x{ border:none; background:transparent; font-size:1.6rem; line-height:1; cursor:pointer;
  color:var(--drasi-text-muted,#6b7280); }
.drasi-mp-x:hover{ color:#dc3545; }
.drasi-mp-folders{ display:flex; flex-wrap:wrap; gap:.4rem; padding:.7rem 1.1rem 0; }
.drasi-mp-folder{ font-size:.78rem; font-weight:600; padding:.25rem .7rem; border-radius:999px;
  border:1px solid var(--drasi-border,#e3dee9); background:#fff; color:var(--drasi-text,#374151); cursor:pointer; }
.drasi-mp-folder:hover{ border-color:var(--drasi-blue,#3fb8ea); color:var(--drasi-blue,#3fb8ea); }
.drasi-mp-folder.active{ background:var(--drasi-blue,#3fb8ea); border-color:var(--drasi-blue,#3fb8ea); color:#fff; }
.drasi-mp-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:.6rem;
  padding:1.1rem; overflow-y:auto; }
.drasi-mp-empty{ grid-column:1/-1; color:var(--drasi-text-muted,#6b7280); padding:1.5rem; text-align:center; }
.drasi-mp-cell{ border:1px solid var(--drasi-border,#e3dee9); border-radius:10px; overflow:hidden;
  background:#fff; cursor:pointer; padding:0; transition:.15s; text-align:left; }
.drasi-mp-cell:hover{ border-color:var(--drasi-blue,#3fb8ea); box-shadow:0 0 0 2px rgba(63,184,234,.25); }
.drasi-mp-cell img{ width:100%; height:90px; object-fit:cover; display:block; background:#f4f6fb; }
.drasi-mp-cell span{ display:block; font-size:.72rem; padding:.3rem .4rem; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; color:var(--drasi-text-muted,#6b7280); }

/* ── Insertador visual de bloques (window.DRASI_blockInserter) ── */
/* Insertador de bloques: MODAL centrado con LISTA de filas (no tarjetas). */
.drasi-bi-overlay{ position:fixed; inset:0; z-index:200000; background:rgba(16,17,44,.55);
  display:flex; align-items:center; justify-content:center; padding:32px 24px; }
.drasi-bi{ background:#fff; width:min(560px,96vw); max-height:84vh; border-radius:14px;
  display:flex; flex-direction:column; overflow:hidden; box-shadow:0 24px 60px rgba(0,0,0,.35); }
.drasi-bi-head{ display:flex; align-items:center; gap:.75rem; padding:.85rem 1.1rem;
  border-bottom:1px solid var(--drasi-border,#e3dee9); }
.drasi-bi-head strong{ font-size:1rem; color:var(--drasi-dark,#10112c); white-space:nowrap; }
.drasi-bi-search{ flex:1; border:1px solid var(--drasi-border,#e3dee9); border-radius:8px;
  padding:.4rem .7rem; font-size:.9rem; }
.drasi-bi-x{ border:none; background:transparent; font-size:1.6rem; line-height:1; cursor:pointer; color:var(--drasi-text-muted,#6b7280); }
.drasi-bi-x:hover{ color:#dc3545; }
.drasi-bi-body{ padding:.6rem 1.1rem 1.1rem; overflow-y:auto; }
.drasi-bi-sec-t{ font-size:.72rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em;
  color:var(--drasi-text-muted,#6b7280); margin:.8rem .15rem .4rem; }
/* Lista vertical de filas (reemplaza la antigua rejilla de tarjetas) */
.drasi-bi-list{ display:flex; flex-direction:column; border:1px solid var(--drasi-border,#e3dee9);
  border-radius:12px; overflow:hidden; }
.drasi-bi-row{ display:flex; align-items:center; gap:.75rem; width:100%; text-align:left;
  border:none; border-bottom:1px solid var(--drasi-border,#e3dee9); background:#fff; cursor:pointer;
  padding:.7rem .85rem; transition:background .12s; }
.drasi-bi-row:last-child{ border-bottom:none; }
.drasi-bi-row:hover{ background:var(--drasi-white-bg,#f4f6fb); }
.drasi-bi-row-txt{ flex:1; min-width:0; display:flex; flex-direction:column; }
.drasi-bi-row-t{ font-weight:700; font-size:.9rem; color:var(--drasi-dark,#10112c); }
.drasi-bi-row-d{ font-size:.76rem; color:var(--drasi-text-muted,#6b7280); line-height:1.3;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.drasi-bi-row-go{ flex:0 0 auto; color:var(--drasi-text-muted,#9aa0ad); font-size:1rem; }
.drasi-bi-row:hover .drasi-bi-row-go{ color:var(--drasi-blue,#3fb8ea); }
.drasi-bi-ico{ display:inline-flex; align-items:center; justify-content:center; width:38px; height:38px;
  flex:0 0 38px; border-radius:10px; font-size:1.15rem; color:var(--drasi-purple,#7c3aed);
  background:linear-gradient(135deg, rgba(124,58,237,.12), rgba(63,184,234,.12)); }
.drasi-bi-empty{ color:var(--drasi-text-muted,#6b7280); padding:1.5rem; text-align:center; }
/* Formulario de atributos dentro del insertador */
.drasi-bi-back{ border:none; background:transparent; color:var(--drasi-blue,#3fb8ea); font-weight:600;
  cursor:pointer; padding:.2rem 0; margin-bottom:.6rem; }
.drasi-bi-form-head{ display:flex; align-items:center; gap:.7rem; margin-bottom:1rem; }
.drasi-bi-form-head strong{ display:block; font-size:.95rem; }
.drasi-bi-form-head span{ font-size:.78rem; color:var(--drasi-text-muted,#6b7280); }
.drasi-bi-field{ display:block; margin-bottom:.8rem; }
.drasi-bi-field span{ display:block; font-size:.82rem; font-weight:600; margin-bottom:.25rem; color:var(--drasi-dark,#10112c); }
.drasi-bi-field input, .drasi-bi-field textarea{ width:100%; border:1px solid var(--drasi-border,#e3dee9);
  border-radius:8px; padding:.45rem .7rem; font-size:.9rem; }
.drasi-bi-actions{ display:flex; justify-content:flex-end; gap:.5rem; margin-top:1rem; }
.drasi-bi-cancel{ border:1px solid var(--drasi-border,#e3dee9); background:#fff; border-radius:8px; padding:.45rem 1rem; cursor:pointer; }
.drasi-bi-insert{ border:none; background:var(--drasi-blue,#3fb8ea); color:#fff; font-weight:700; border-radius:8px; padding:.45rem 1.2rem; cursor:pointer; }
.drasi-bi-insert:hover{ filter:brightness(1.06); }

/* ── Reordenador de menús (drag-and-drop nativo) ───────────────── */
.menu-dnd-group{ border:1px solid var(--drasi-border,#e3dee9); border-radius:12px; overflow:hidden; height:100%; }
.menu-dnd-head{ background:var(--drasi-white-bg,#f7f3f8); padding:.5rem .85rem; font-weight:700;
  font-size:.9rem; color:var(--drasi-dark,#10112c); border-bottom:1px solid var(--drasi-border,#e3dee9); }
.menu-dnd-list{ list-style:none; margin:0; padding:.5rem; min-height:54px; display:flex; flex-direction:column; gap:.4rem; }
.menu-dnd-empty{ padding:.6rem .4rem; }
.menu-dnd-item{ display:flex; align-items:center; gap:.55rem; background:#fff; border:1px solid var(--drasi-border,#e3dee9);
  border-radius:10px; padding:.5rem .65rem; cursor:grab; user-select:none; transition:box-shadow .12s, border-color .12s; }
.menu-dnd-item:hover{ border-color:var(--drasi-blue,#3fb8ea); box-shadow:0 2px 8px rgba(63,184,234,.15); }
.menu-dnd-item.dragging{ opacity:.55; cursor:grabbing; border-style:dashed; }
.menu-dnd-item.is-off{ opacity:.7; }
.menu-dnd-grip{ color:var(--drasi-text-muted,#6b7280); flex:0 0 auto; cursor:grab; }
.menu-dnd-label{ font-weight:600; color:var(--drasi-dark,#10112c); }
.menu-dnd-ref{ margin-left:auto; max-width:50%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.menu-dnd-badge{ flex:0 0 auto; background:var(--drasi-light-purple,#e3dee9); color:var(--drasi-purple-dark,#5e4a8a);
  font-size:.7rem; font-weight:700; border-radius:999px; padding:.05rem .5rem; }
.menu-dnd-status:empty{ display:none; }

/* ── Sección "Plantillas" (admin) ──────────────────────────────── */
.tpl-ico{ display:inline-flex; align-items:center; justify-content:center; width:38px; height:38px;
  flex:0 0 38px; border-radius:10px; font-size:1.15rem; color:var(--drasi-purple,#7c3aed);
  background:linear-gradient(135deg, rgba(124,58,237,.12), rgba(63,184,234,.12)); }
.tpl-table thead th{ font-size:.72rem; text-transform:uppercase; letter-spacing:.05em;
  color:var(--drasi-text-muted,#6b7280); border-bottom:1px solid var(--drasi-border,#e3dee9); }
.tpl-prompt{ background:var(--drasi-white-bg,#f4f6fb); border:1px solid var(--drasi-border,#e3dee9);
  border-radius:12px; padding:1rem 1.1rem; max-height:420px; overflow:auto; white-space:pre-wrap;
  word-break:break-word; font-size:.82rem; line-height:1.5; color:var(--drasi-dark,#10112c); }

/* MODAL de vista previa de plantilla (un solo panel, NO rejilla de tarjetas) */
.tpl-modal-overlay{ position:fixed; inset:0; z-index:200000; background:rgba(16,17,44,.55);
  display:flex; align-items:center; justify-content:center; padding:32px 24px; }
.tpl-modal-overlay[hidden]{ display:none; }
.tpl-modal{ background:#fff; width:min(720px,96vw); max-height:90vh; border-radius:14px;
  display:flex; flex-direction:column; overflow:hidden; box-shadow:0 24px 60px rgba(0,0,0,.35); }
.tpl-modal-head{ display:flex; align-items:center; justify-content:space-between; gap:.75rem;
  padding:.9rem 1.1rem; border-bottom:1px solid var(--drasi-border,#e3dee9); }
.tpl-modal-head strong{ font-size:1.05rem; color:var(--drasi-dark,#10112c); }
.tpl-modal-x{ border:none; background:transparent; font-size:1.6rem; line-height:1; cursor:pointer;
  color:var(--drasi-text-muted,#6b7280); }
.tpl-modal-x:hover{ color:#dc3545; }
.tpl-modal-body{ padding:1.1rem; overflow-y:auto; }
.tpl-modal-desc{ font-size:.95rem; line-height:1.5; }
.tpl-modal-meta code{ word-break:break-all; }
.tpl-modal-preview{ border:1px solid var(--drasi-border,#e3dee9); border-radius:12px; overflow:hidden; }
.tpl-modal-preview-bar{ padding:.5rem .8rem; background:var(--drasi-white-bg,#f4f6fb);
  border-bottom:1px solid var(--drasi-border,#e3dee9); }
.tpl-modal-frame-wrap{ height:340px; background:#fff; overflow:hidden; }
.tpl-modal-frame{ width:100%; height:100%; border:0; display:block; }
.tpl-modal-mock{ padding:1.2rem; }
.tpl-mock-hero{ height:96px; border-radius:10px; margin-bottom:1rem;
  background:linear-gradient(135deg, rgba(124,58,237,.18), rgba(63,184,234,.18)); }
.tpl-mock-line{ height:12px; border-radius:6px; margin-bottom:.6rem;
  background:var(--drasi-white-bg,#eef1f7); }
.tpl-modal-foot{ display:flex; justify-content:flex-end; gap:.5rem; padding:.85rem 1.1rem;
  border-top:1px solid var(--drasi-border,#e3dee9); }

/* === Menú del CMS en acordeón (sidebar rama web) === */
.cms-navtoggle{ display:flex; align-items:center; justify-content:space-between; width:100%;
  background:none; border:0; cursor:pointer; text-align:left; }
.cms-navchev{ font-size:.7rem; opacity:.55; transition:transform .2s ease; }
.cms-navtoggle.open .cms-navchev{ transform:rotate(180deg); }
.cms-navgroup{ overflow:hidden; max-height:0; transition:max-height .25s ease; }
.cms-navgroup.open{ max-height:600px; }

/* === Filtro por columna (barra aparte, fuera del thead) === */
/* La inyecta core/crud_engine.php encima de la tabla del listado. */
.cms-colfilter{ border:1px solid var(--drasi-border,#e3dee9); border-radius:10px;
  padding:.7rem .85rem; background:var(--drasi-white-bg,#f7f8fb); }
.cms-colfilter-head{ font-size:.78rem; font-weight:600; text-transform:uppercase;
  letter-spacing:.03em; color:var(--drasi-text-muted,#6b7280); margin-bottom:.5rem; }
.cms-colfilter-head .bi{ margin-right:.3rem; }
.cms-colfilter-fields{ display:flex; flex-wrap:wrap; gap:.5rem; }
.cms-colfilter-item{ flex:1 1 160px; min-width:140px; }
@media (max-width:575.98px){ .cms-colfilter-item{ flex:1 1 100%; } }

/* === Editor de bloques === */
/* Compositor visual "Gutenberg-lite" (assets/js/block-editor.js). Prefijo .be-
   para no chocar con .drasi-* / .tpl-* / .menu-dnd-*. */

/* Botón disparador encima del richtext */
.be-trigger-wrap{ display:flex; }
.be-trigger{ font-weight:600; }

/* Overlay + panel (modal full-width) */
.be-overlay{ position:fixed; inset:0; z-index:200050; background:rgba(16,17,44,.55);
  display:flex; align-items:center; justify-content:center; padding:24px; }
.be-panel{ background:#fff; width:min(820px,96vw); max-height:92vh; border-radius:14px;
  display:flex; flex-direction:column; overflow:hidden; box-shadow:0 24px 60px rgba(0,0,0,.35); }
.be-head{ display:flex; align-items:center; justify-content:space-between; gap:.75rem;
  padding:.9rem 1.1rem; border-bottom:1px solid var(--drasi-border,#e3dee9); }
.be-head strong{ font-size:1.05rem; color:var(--drasi-dark,#10112c); }
.be-x{ border:none; background:transparent; font-size:1.7rem; line-height:1; cursor:pointer;
  color:var(--drasi-text-muted,#6b7280); }
.be-x:hover{ color:#dc3545; }
.be-body{ padding:1.1rem; overflow-y:auto; flex:1 1 auto; background:var(--drasi-white-bg,#f4f6fb); }
.be-list{ display:flex; flex-direction:column; gap:.7rem; }
.be-empty{ text-align:center; color:var(--drasi-text-muted,#6b7280); padding:2.2rem 1rem;
  border:1px dashed var(--drasi-border,#cfc8da); border-radius:12px; background:#fff; }
.be-empty .bi{ font-size:1.6rem; opacity:.6; }

/* Tarjeta de bloque */
.be-block{ background:#fff; border:1px solid var(--drasi-border,#e3dee9); border-radius:12px;
  overflow:hidden; }
.be-block.be-dragging{ opacity:.5; }
.be-block.be-over{ border-color:var(--drasi-primary,#7c3aed); box-shadow:0 0 0 2px rgba(124,58,237,.25); }
.be-block-head{ display:flex; align-items:center; gap:.5rem; padding:.55rem .75rem;
  background:var(--drasi-white-bg,#f4f6fb); border-bottom:1px solid var(--drasi-border,#e3dee9); }
.be-block-title{ font-weight:700; font-size:.9rem; color:var(--drasi-dark,#10112c); flex:1 1 auto; }
.be-drag{ cursor:grab; color:var(--drasi-text-muted,#6b7280); }
.be-drag:active{ cursor:grabbing; }
.be-block-del{ border:none; background:transparent; color:var(--drasi-text-muted,#6b7280);
  cursor:pointer; font-size:1rem; padding:.15rem .35rem; border-radius:6px; }
.be-block-del:hover{ color:#dc3545; background:rgba(220,53,69,.08); }
.be-block-body{ padding:.75rem; display:flex; flex-direction:column; gap:.6rem; }

/* Campos */
.be-field{ display:flex; flex-direction:column; gap:.25rem; margin:0; }
.be-field-label{ font-size:.8rem; font-weight:600; color:var(--drasi-text-muted,#6b7280); }
.be-field input[type="text"], .be-field textarea, .be-field select{
  width:100%; padding:.45rem .6rem; border:1px solid var(--drasi-border,#cfc8da);
  border-radius:8px; font-size:.9rem; color:var(--drasi-dark,#10112c); background:#fff; }
.be-field textarea{ resize:vertical; }
.be-img-row{ display:flex; gap:.5rem; align-items:stretch; }
.be-img-row input{ flex:1 1 auto; }
.be-img-pick{ white-space:nowrap; }
.be-img-prev img{ max-width:160px; max-height:110px; border-radius:8px; margin-top:.4rem;
  border:1px solid var(--drasi-border,#e3dee9); }

/* Pie del modal */
.be-add-wrap{ margin-top:.8rem; }
.be-foot{ display:flex; align-items:center; justify-content:space-between; gap:1rem; flex-wrap:wrap;
  padding:.85rem 1.1rem; border-top:1px solid var(--drasi-border,#e3dee9); background:#fff; }
.be-foot-hint{ font-size:.8rem; color:var(--drasi-text-muted,#6b7280); flex:1 1 220px; }
.be-foot-btns{ display:flex; gap:.5rem; }

/* Picker de tipo de bloque */
.be-picker-overlay{ position:fixed; inset:0; z-index:200060; background:rgba(16,17,44,.45);
  display:flex; align-items:center; justify-content:center; padding:24px; }
.be-picker{ background:#fff; width:min(520px,94vw); border-radius:14px; overflow:hidden;
  box-shadow:0 24px 60px rgba(0,0,0,.35); }
.be-picker-head{ padding:.85rem 1.1rem; border-bottom:1px solid var(--drasi-border,#e3dee9); }
.be-picker-head strong{ color:var(--drasi-dark,#10112c); }
.be-picker-grid{ display:grid; grid-template-columns:repeat(2,1fr); gap:.6rem; padding:1rem; }
.be-picker-item{ display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:.4rem; padding:1rem .6rem; border:1px solid var(--drasi-border,#e3dee9); border-radius:10px;
  background:#fff; cursor:pointer; color:var(--drasi-dark,#10112c); font-weight:600; font-size:.85rem; }
.be-picker-item .bi{ font-size:1.4rem; color:var(--drasi-primary,#7c3aed); }
.be-picker-item:hover{ border-color:var(--drasi-primary,#7c3aed); background:rgba(124,58,237,.06); }

@media (max-width:575.98px){
  .be-picker-grid{ grid-template-columns:1fr; }
  .be-foot{ justify-content:flex-end; }
}
