/* =========================================================
   QATROS DESIGN SYSTEM (QDS)
   ---------------------------------------------------------
   Sistema visual unificado para todos los modulos QATROS.
   Cargar este archivo en layout.phtml. Cada modulo puede
   sumar overrides en su propio /css/modules/.../index.css.

   Convenciones:
   - Prefijo `qds-` para todas las clases del sistema.
   - Tokens via CSS custom properties (var(--qds-*)).
   - Compatible con Bootstrap 5 + plantilla Admindek20.
   ========================================================= */


/* ---------------------------------------------------------
   1. Tokens
   --------------------------------------------------------- */
:root {
  /* Colores semanticos (cada color tiene solid + hover + soft) */
  --qds-red:        #ef4444;
  --qds-red-hover:  #dc2626;
  --qds-red-soft:   #fee2e2;

  --qds-blue:       #3b82f6;
  --qds-blue-hover: #2563eb;
  --qds-blue-soft:  #eff6ff;

  --qds-green:       #10b981;
  --qds-green-hover: #059669;
  --qds-green-soft:  #ecfdf5;

  --qds-amber:       #f59e0b;
  --qds-amber-hover: #d97706;
  --qds-amber-soft:  #fef3c7;

  --qds-cyan:        #06b6d4;
  --qds-cyan-hover:  #0891b2;
  --qds-cyan-soft:   #cffafe;

  --qds-purple:       #8b5cf6;
  --qds-purple-hover: #7c3aed;
  --qds-purple-soft:  #ede9fe;

  --qds-pink:        #ec4899;
  --qds-pink-hover:  #db2777;
  --qds-pink-soft:   #fce7f3;

  --qds-gray:        #64748b;
  --qds-gray-hover:  #475569;
  --qds-gray-soft:   #f1f5f9;

  /* Superficies y bordes */
  --qds-bg:            #fafafb;
  --qds-surface:       #ffffff;
  --qds-border:        #e2e8f0;
  --qds-border-strong: #cbd5e1;

  /* Texto */
  --qds-text:        #1f2937;
  --qds-text-muted:  #64748b;
  --qds-text-faint:  #94a3b8;

  /* Radios */
  --qds-radius-sm: 8px;
  --qds-radius-md: 10px;
  --qds-radius-lg: 14px;
  --qds-radius-pill: 999px;

  /* Sombras */
  --qds-shadow-sm: 0 1px 2px rgba(15, 23, 42, .04);
  --qds-shadow-md: 0 6px 18px rgba(15, 23, 42, .06);
  --qds-shadow-lg: 0 16px 40px rgba(15, 23, 42, .12);

  /* Tipografia */
  --qds-font-xs: 11px;
  --qds-font-sm: 12px;
  --qds-font-md: 13px;
  --qds-font-lg: 15px;
  --qds-font-xl: 17px;
  --qds-font-2xl: 22px;
  --qds-font-3xl: 28px;

  /* Espaciado base */
  --qds-space-1: 4px;
  --qds-space-2: 8px;
  --qds-space-3: 12px;
  --qds-space-4: 16px;
  --qds-space-5: 20px;
  --qds-space-6: 24px;

  /* Transiciones */
  --qds-trans: all .15s ease;
}


/* ---------------------------------------------------------
   2. Page header (titulo + breadcrumb)
   --------------------------------------------------------- */
.qds-page-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--qds-space-4);
  padding: 16px 20px;
  background: var(--qds-surface);
  border-radius: var(--qds-radius-lg);
  border: 1px solid var(--qds-border);
  box-shadow: var(--qds-shadow-sm);
  margin-bottom: var(--qds-space-4);
  flex-wrap: wrap;
}
.qds-ph-left {
  display: flex;
  align-items: center;
  gap: var(--qds-space-3);
  min-width: 0;
}
.qds-ph-icon {
  width: 40px;
  height: 40px;
  border-radius: var(--qds-radius-md);
  background: var(--qds-red);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  flex-shrink: 0;
}
/* Variante back: link a la pagina anterior con flecha */
a.qds-ph-icon,
.qds-back-btn {
  width: 40px;
  height: 40px;
  border-radius: var(--qds-radius-md);
  background: var(--qds-red);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  flex-shrink: 0;
  text-decoration: none;
  transition: var(--qds-trans);
  border: 0;
}
a.qds-ph-icon:hover,
.qds-back-btn:hover {
  background: var(--qds-red-hover);
  color: #fff;
  transform: translateX(-2px);
}
.qds-ph-title {
  font-size: var(--qds-font-xl);
  font-weight: 700;
  color: var(--qds-text);
  margin: 0;
  line-height: 1.2;
}
.qds-ph-subtitle {
  display: block;
  font-size: var(--qds-font-sm);
  color: var(--qds-text-muted);
  font-weight: 400;
  margin-top: 2px;
}
.qds-breadcrumb {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: var(--qds-font-sm);
}
.qds-breadcrumb li { display: inline-flex; align-items: center; }
.qds-breadcrumb a {
  color: var(--qds-text-muted);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.qds-breadcrumb a:hover { color: var(--qds-blue); }
.qds-breadcrumb .sep { color: var(--qds-text-faint); }
.qds-breadcrumb .current {
  color: var(--qds-text);
  font-weight: 600;
}


/* ---------------------------------------------------------
   3. Section / Toolbar
   --------------------------------------------------------- */
.qds-section {
  background: var(--qds-surface);
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-lg);
  box-shadow: var(--qds-shadow-sm);
  margin-bottom: var(--qds-space-4);
}
.qds-section-toolbar {
  padding: var(--qds-space-4) var(--qds-space-5);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--qds-space-4);
  flex-wrap: wrap;
}
.qds-section-info {
  flex: 1 1 280px;
  min-width: 0;
  color: var(--qds-text-muted);
  font-size: var(--qds-font-md);
}
.qds-section-info p { margin: 0; }

.qds-toolbar {
  display: inline-flex;
  align-items: center;
  gap: var(--qds-space-2);
  flex-wrap: wrap;
  justify-content: flex-end;
}


/* ---------------------------------------------------------
   4. Botones (.qds-btn + variantes)
   --------------------------------------------------------- */
.qds-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 8px 14px;
  font-size: var(--qds-font-md);
  font-weight: 600;
  line-height: 1;
  border-radius: var(--qds-radius-sm);
  border: 1px solid transparent;
  background: transparent;
  color: var(--qds-text);
  cursor: pointer;
  text-decoration: none;
  transition: var(--qds-trans);
  white-space: nowrap;
  user-select: none;
}
.qds-btn:focus { outline: none; box-shadow: 0 0 0 3px rgba(59, 130, 246, .15); }
.qds-btn:disabled,
.qds-btn.is-disabled { opacity: .55; cursor: not-allowed; pointer-events: none; }
.qds-btn i,
.qds-btn .feather { font-size: 14px; line-height: 1; }

/* Tamanos */
.qds-btn-sm { padding: 6px 10px; font-size: var(--qds-font-sm); }
.qds-btn-lg { padding: 10px 18px; font-size: var(--qds-font-lg); }
.qds-btn-block { width: 100%; }
.qds-btn-icon-only { padding: 8px; width: 36px; height: 36px; }
.qds-btn-icon-only.qds-btn-sm { width: 30px; height: 30px; padding: 6px; }
.qds-btn-icon-only i { font-size: 16px; }

/* Variantes solidas */
.qds-btn-primary { background: var(--qds-blue); color: #fff; border-color: var(--qds-blue); }
.qds-btn-primary:hover { background: var(--qds-blue-hover); border-color: var(--qds-blue-hover); color: #fff; }

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

.qds-btn-danger { background: var(--qds-red); color: #fff; border-color: var(--qds-red); }
.qds-btn-danger:hover { background: var(--qds-red-hover); border-color: var(--qds-red-hover); color: #fff; }

.qds-btn-warning { background: var(--qds-amber); color: #fff; border-color: var(--qds-amber); }
.qds-btn-warning:hover { background: var(--qds-amber-hover); border-color: var(--qds-amber-hover); color: #fff; }

.qds-btn-info { background: var(--qds-cyan); color: #fff; border-color: var(--qds-cyan); }
.qds-btn-info:hover { background: var(--qds-cyan-hover); border-color: var(--qds-cyan-hover); color: #fff; }

/* Soft (fondo blanco, borde) */
.qds-btn-soft {
  background: var(--qds-surface);
  color: var(--qds-text-muted);
  border-color: var(--qds-border);
}
.qds-btn-soft:hover {
  background: var(--qds-gray-soft);
  color: var(--qds-text);
  border-color: var(--qds-border-strong);
}

/* Ghost (transparente, sin borde) */
.qds-btn-ghost {
  background: transparent;
  color: var(--qds-text-muted);
}
.qds-btn-ghost:hover {
  background: var(--qds-gray-soft);
  color: var(--qds-text);
}


/* ---------------------------------------------------------
   5. Indicator cards (filtrables, click)
   Diseno minimalista: fondo blanco, barra lateral de color,
   numero+label inline, opcional hint y icono pequeno a la derecha.
   --------------------------------------------------------- */
.qds-indicator-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--qds-space-3);
  margin-bottom: var(--qds-space-4);
}

.qds-indicator-card {
  --ic-accent: var(--qds-text-muted);
  --ic-accent-soft: var(--qds-gray-soft);

  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 14px 10px 14px;
  min-height: 64px;
  border-radius: var(--qds-radius-md);
  background: var(--qds-surface);
  border: 1px solid var(--qds-border);
  border-left: 4px solid var(--ic-accent);
  color: var(--qds-text);
  cursor: pointer;
  transition: var(--qds-trans);
  position: relative;
  overflow: hidden;
  box-shadow: var(--qds-shadow-sm);
}
.qds-indicator-card:hover {
  border-color: var(--qds-border-strong);
  border-left-color: var(--ic-accent);
  box-shadow: var(--qds-shadow-md);
}
.qds-ic-body {
  display: grid;
  grid-template-columns: auto 1fr;
  column-gap: 10px;
  row-gap: 0;
  align-items: baseline;
  min-width: 0;
  flex: 1 1 auto;
}
.qds-ic-value {
  grid-column: 1;
  grid-row: 1;
  font-size: 22px;
  font-weight: 800;
  color: var(--qds-text);
  line-height: 1.1;
  letter-spacing: -0.02em;
}
.qds-ic-label {
  grid-column: 2;
  grid-row: 1;
  font-size: var(--qds-font-md);
  font-weight: 700;
  color: var(--qds-text);
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.qds-ic-hint {
  grid-column: 1 / -1;
  grid-row: 2;
  font-size: var(--qds-font-xs);
  color: var(--qds-text-muted);
  font-weight: 400;
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.qds-ic-icon {
  width: 26px;
  height: 26px;
  border-radius: var(--qds-radius-pill);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  flex-shrink: 0;
  background: var(--ic-accent-soft);
  color: var(--ic-accent);
  border: 0;
}

/* Tokens de color por data-color (la unica parte coloreada es la barra lateral) */
.qds-indicator-card[data-color="red"]    { --ic-accent: var(--qds-red);    --ic-accent-soft: var(--qds-red-soft); }
.qds-indicator-card[data-color="blue"]   { --ic-accent: var(--qds-blue);   --ic-accent-soft: var(--qds-blue-soft); }
.qds-indicator-card[data-color="green"]  { --ic-accent: var(--qds-green);  --ic-accent-soft: var(--qds-green-soft); }
.qds-indicator-card[data-color="amber"]  { --ic-accent: var(--qds-amber);  --ic-accent-soft: var(--qds-amber-soft); }
.qds-indicator-card[data-color="cyan"]   { --ic-accent: var(--qds-cyan);   --ic-accent-soft: var(--qds-cyan-soft); }
.qds-indicator-card[data-color="purple"] { --ic-accent: var(--qds-purple); --ic-accent-soft: var(--qds-purple-soft); }
.qds-indicator-card[data-color="pink"]   { --ic-accent: var(--qds-pink);   --ic-accent-soft: var(--qds-pink-soft); }
.qds-indicator-card[data-color="gray"]   { --ic-accent: var(--qds-text-muted); --ic-accent-soft: var(--qds-gray-soft); }

/* Estado activo (filtrado): tinte muy suave + barra mas gruesa */
.qds-indicator-card.is-active {
  background: var(--ic-accent-soft);
  border-color: var(--ic-accent);
  border-left-width: 4px;
  box-shadow: var(--qds-shadow-md);
}
.qds-indicator-card.is-active .qds-ic-value,
.qds-indicator-card.is-active .qds-ic-label {
  color: var(--ic-accent);
}


/* ---------------------------------------------------------
   6. Status badges (pildoras coloreadas con icono)
   --------------------------------------------------------- */
.qds-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border-radius: var(--qds-radius-pill);
  font-size: var(--qds-font-xs);
  font-weight: 600;
  background: var(--qds-gray-soft);
  color: var(--qds-gray-hover);
  line-height: 1.2;
  white-space: nowrap;
}
.qds-badge i { font-size: 11px; line-height: 1; }
.qds-badge-red    { background: var(--qds-red-soft);    color: var(--qds-red-hover); }
.qds-badge-blue   { background: var(--qds-blue-soft);   color: var(--qds-blue-hover); }
.qds-badge-green  { background: var(--qds-green-soft);  color: var(--qds-green-hover); }
.qds-badge-amber  { background: var(--qds-amber-soft);  color: var(--qds-amber-hover); }
.qds-badge-cyan   { background: var(--qds-cyan-soft);   color: var(--qds-cyan-hover); }
.qds-badge-purple { background: var(--qds-purple-soft); color: var(--qds-purple-hover); }
.qds-badge-pink   { background: var(--qds-pink-soft);   color: var(--qds-pink-hover); }
.qds-badge-gray   { background: var(--qds-gray-soft);   color: var(--qds-gray-hover); }


/* ---------------------------------------------------------
   7. Table card (envoltorio para DataTables)
   --------------------------------------------------------- */
.qds-table-card {
  background: var(--qds-surface);
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-lg);
  box-shadow: var(--qds-shadow-sm);
  overflow: hidden;
  margin-bottom: var(--qds-space-4);
}
.qds-table-head {
  padding: 16px 18px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--qds-space-3);
  border-bottom: 1px solid var(--qds-border);
  background: var(--qds-surface);
  flex-wrap: wrap;
}
.qds-tab-title { display: flex; align-items: baseline; gap: 10px; flex-shrink: 0; }
.qds-tab-title h5 {
  position: relative;
  display: inline-block;
  margin: 0;
  padding-bottom: 6px;
  font-size: var(--qds-font-lg);
  font-weight: 700;
  color: var(--qds-text);
}
.qds-tab-title h5::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: var(--qds-blue);
  border-radius: var(--qds-radius-pill);
}
.qds-tab-count {
  font-size: var(--qds-font-sm);
  color: var(--qds-text-faint);
  font-weight: 500;
}
.qds-tab-actions {
  display: inline-flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  justify-content: flex-end;
}

/* Input de busqueda standalone (reemplaza el filtro nativo de DataTables) */
.qds-search { position: relative; display: inline-block; }
.qds-search-input {
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-sm);
  padding: 8px 12px 8px 34px;
  font-size: var(--qds-font-sm);
  background-color: var(--qds-surface);
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: 10px center;
  background-size: 16px 16px;
  min-width: 240px;
  color: var(--qds-text);
  transition: var(--qds-trans);
}
.qds-search-input::placeholder { color: var(--qds-text-faint); font-weight: 400; }
.qds-search-input:focus {
  outline: none;
  border-color: var(--qds-blue);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, .12);
}

.qds-table-card .table { margin: 0; }

/* Altura mínima del cuerpo de la tabla para que no se vea hueco con pocos registros */
.qds-table-card .table-responsive {
  min-height: 280px;
}
.qds-table-card .dataTables_scrollBody {
  min-height: 240px;
}
/* En tabs/contenedores con tablas, también aplica */
.qds-tab-pane .table-responsive {
  min-height: 280px;
}

.qds-table-card table.qds-table thead th {
  background: var(--qds-bg);
  font-size: var(--qds-font-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--qds-text-muted);
  border-top: 0;
  border-bottom: 1px solid var(--qds-border);
  padding: 12px 14px;
}
.qds-table-card table.qds-table tbody td {
  font-size: var(--qds-font-md);
  color: var(--qds-text);
  padding: 12px 14px;
  vertical-align: middle;
  border-color: var(--qds-border);
}
.qds-table-card table.qds-table tbody tr:hover { background: var(--qds-bg); }

/* DataTables filtro buscador (con icono de lupa) */
.qds-table-card .dataTables_filter {
  margin: 0;
  text-align: right;
  padding: 10px 18px 4px;
}
.qds-table-card .dataTables_filter label {
  margin: 0;
  font-size: 0;             /* oculta el texto "Buscar" generado por DataTables */
  color: transparent;
}
.qds-table-card .dataTables_filter input {
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-sm);
  padding: 8px 12px 8px 34px;
  font-size: var(--qds-font-sm);
  background-color: var(--qds-surface);
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: 10px center;
  background-size: 16px 16px;
  margin-left: 6px;
  min-width: 260px;
  color: var(--qds-text);
}
.qds-table-card .dataTables_filter input::placeholder {
  color: var(--qds-text-faint);
  font-weight: 400;
}
.qds-table-card .dataTables_filter input:focus {
  outline: none;
  border-color: var(--qds-blue);
  box-shadow: 0 0 0 3px rgba(59,130,246,.12);
}
.qds-table-card .dataTables_info {
  padding: 10px 18px;
  font-size: var(--qds-font-sm);
  color: var(--qds-text-muted);
}
.qds-table-card .dataTables_wrapper { padding: 0 18px 4px; }
.qds-table-card .dataTables_scrollHead th { background: var(--qds-bg); }


/* ---------------------------------------------------------
   8. Row actions (dropdown "Opciones" en la tabla)
   --------------------------------------------------------- */
.qds-row-actions { display: inline-block; }
.qds-row-actions .qds-btn.dropdown-toggle::after {
  display: inline-block;
  margin-left: 6px;
  vertical-align: middle;
  border-top: 4px solid currentColor;
  border-right: 4px solid transparent;
  border-bottom: 0;
  border-left: 4px solid transparent;
  opacity: .9;
}
.qds-row-actions .qds-btn i + span { margin-left: 2px; }

.qds-dropdown {
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-md);
  box-shadow: var(--qds-shadow-md);
  padding: 4px;
  min-width: 170px;
}
.qds-dropdown .dropdown-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 6px 10px;
  border-radius: 6px;
  font-size: var(--qds-font-sm);
  line-height: 1.3;
  color: var(--qds-text);
  transition: var(--qds-trans);
}
.qds-dropdown .dropdown-item i {
  font-size: 13px;
  color: var(--qds-text-muted);
  width: 14px;
  text-align: center;
  flex-shrink: 0;
}
.qds-dropdown .dropdown-item:hover,
.qds-dropdown .dropdown-item:focus {
  background: var(--qds-gray-soft);
  color: var(--qds-text);
}
.qds-dropdown .dropdown-item:hover i { color: var(--qds-blue); }
.qds-dropdown .dropdown-item.text-danger { color: var(--qds-red-hover); }
.qds-dropdown .dropdown-item.text-danger:hover { background: var(--qds-red-soft); color: var(--qds-red-hover); }
.qds-dropdown .dropdown-item.text-danger:hover i { color: var(--qds-red-hover); }
.qds-dropdown .dropdown-divider {
  margin: 4px 0;
  border-color: var(--qds-border);
}


/* ---------------------------------------------------------
   9. Modales (modificador .qds-modal sobre .modal)
   --------------------------------------------------------- */
.qds-modal .modal-content {
  border: 0;
  border-radius: var(--qds-radius-lg);
  box-shadow: var(--qds-shadow-lg);
  overflow: hidden;
}
.qds-modal .modal-header {
  border-bottom: 1px solid var(--qds-border);
  padding: 16px 20px;
  background: var(--qds-surface);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.qds-modal-title {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.qds-modal-title h5 {
  margin: 0;
  font-size: var(--qds-font-lg);
  font-weight: 700;
  color: var(--qds-text);
}
.qds-modal-icon {
  width: 34px;
  height: 34px;
  border-radius: var(--qds-radius-sm);
  background: var(--qds-blue-soft);
  color: var(--qds-blue);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  flex-shrink: 0;
}
.qds-modal-icon.is-red    { background: var(--qds-red-soft);    color: var(--qds-red); }
.qds-modal-icon.is-green  { background: var(--qds-green-soft);  color: var(--qds-green); }
.qds-modal-icon.is-amber  { background: var(--qds-amber-soft);  color: var(--qds-amber); }
.qds-modal-icon.is-cyan   { background: var(--qds-cyan-soft);   color: var(--qds-cyan); }
.qds-modal-icon.is-purple { background: var(--qds-purple-soft); color: var(--qds-purple); }
.qds-modal .modal-body {
  padding: 20px;
  background: var(--qds-surface);
}
.qds-modal .modal-footer {
  border-top: 1px solid var(--qds-border);
  padding: 14px 20px;
  background: var(--qds-surface);
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}
.qds-modal .btn-close {
  background-size: 12px;
  padding: 0;
  margin: 0;
  opacity: .6;
}
.qds-modal .btn-close:hover { opacity: 1; }


/* ---------------------------------------------------------
   9.4 Vistas dentro de iframe (html.qds-in-iframe)
   Cuando una vista se carga dentro de un modal padre con
   .qds-iframe-loader, ocultar los spinners/preloaders del
   template para evitar dobles loaders.
   La clase la setea blank.phtml en <html> via JS temprano.
   --------------------------------------------------------- */
/* Preloader del template (animación blanca al cargar la página) */
html.qds-in-iframe .loader-bg,
html.qds-in-iframe .loader-bar { display: none !important; }
/* Modal global de "Cargando..." que dispara spinnerLoading() (id real: modal-loading) */
html.qds-in-iframe #modal-loading,
html.qds-in-iframe #modal-loading.show,
html.qds-in-iframe #modal-loading.modal { display: none !important; }
/* Backdrops oscuros que el modal podría inyectar al body del iframe */
html.qds-in-iframe body > .modal-backdrop { display: none !important; }
/* Por si el template inyecta otros overlays de carga */
html.qds-in-iframe .preloader,
html.qds-in-iframe .pre-loader,
html.qds-in-iframe .page-loader,
html.qds-in-iframe #preloader { display: none !important; }


/* ---------------------------------------------------------
   9.5 Iframe modal body (loader + iframe)
   Estandar para cualquier modal que cargue una URL en iframe.
   --------------------------------------------------------- */
.qds-iframe-body {
  position: relative;
  padding: 0;
  background: var(--qds-surface);
  min-height: 320px;
  overflow: hidden;
}
.qds-iframe-loader {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  background: var(--qds-surface);
  z-index: 2;
  transition: opacity .2s ease;
}
.qds-iframe-loader.is-hidden {
  opacity: 0;
  pointer-events: none;
}
.qds-iframe-loader-spinner {
  width: 38px;
  height: 38px;
  border: 3px solid var(--qds-border);
  border-top-color: var(--qds-blue);
  border-radius: 50%;
  animation: qds-spin .8s linear infinite;
}
.qds-iframe-loader-text {
  font-size: var(--qds-font-md);
  font-weight: 500;
  color: var(--qds-text-muted);
  letter-spacing: .01em;
}
@keyframes qds-spin {
  to { transform: rotate(360deg); }
}
.qds-iframe-frame {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
  background: var(--qds-surface);
}


/* ---------------------------------------------------------
   10. Form fields .qds-field
   --------------------------------------------------------- */
.qds-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: var(--qds-space-4);
}
.qds-field-label {
  font-size: var(--qds-font-xs);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--qds-text-muted);
  margin: 0;
}
.qds-field-label.is-required::after {
  content: '*';
  color: var(--qds-red);
  margin-left: 3px;
}
.qds-input,
.qds-field .form-control,
.qds-field .form-select {
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-md);
  padding: 10px 14px;
  font-size: var(--qds-font-md);
  background: var(--qds-surface);
  color: var(--qds-text);
  transition: var(--qds-trans);
  width: 100%;
  line-height: 1.4;
}
.qds-input::placeholder,
.qds-field .form-control::placeholder { color: var(--qds-text-faint); }
.qds-input:focus,
.qds-field .form-control:focus,
.qds-field .form-select:focus {
  outline: none;
  border-color: var(--qds-blue);
  box-shadow: 0 0 0 3px rgba(59,130,246,.15);
  background: var(--qds-surface);
}
.qds-field-hint {
  font-size: var(--qds-font-xs);
  color: var(--qds-text-faint);
}
.qds-field-error {
  font-size: var(--qds-font-xs);
  color: var(--qds-red-hover);
  font-weight: 500;
  display: none;
}
.qds-field.is-invalid .qds-input,
.qds-field.is-invalid .form-control,
.qds-field.is-invalid .form-select {
  border-color: var(--qds-red);
}
.qds-field.is-invalid .qds-field-error { display: block; }

/* ---------- Select2 unificado (cubre theme default y bootstrap-5) ---------- */
.qds-field .select2-container,
.qds-form-section .select2-container,
.qds-modal .select2-container { width: 100% !important; }

/* Caja cerrada (single + bootstrap-5 theme) */
.qds-field .select2-container .select2-selection,
.qds-field .select2-container .select2-selection--single,
.qds-form-section .select2-container .select2-selection,
.qds-form-section .select2-container .select2-selection--single,
.qds-modal .select2-container .select2-selection,
.qds-modal .select2-container .select2-selection--single {
  background-color: var(--qds-surface) !important;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 16 16' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9' transform='translate(-4 -4)'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 14px center !important;
  background-size: 14px 14px !important;
  border: 1px solid var(--qds-border) !important;
  border-radius: var(--qds-radius-md) !important;
  height: auto !important;
  min-height: 42px !important;
  padding: 8px 36px 8px 14px !important;
  display: flex !important;
  align-items: center !important;
  transition: var(--qds-trans) !important;
  outline: none !important;
  box-shadow: none !important;
}

/* Texto seleccionado / placeholder */
.qds-field .select2-container .select2-selection__rendered,
.qds-form-section .select2-container .select2-selection__rendered,
.qds-modal .select2-container .select2-selection__rendered {
  color: var(--qds-text) !important;
  font-size: var(--qds-font-md) !important;
  line-height: 1.4 !important;
  padding: 0 !important;
  font-weight: 400 !important;
}
.qds-field .select2-container .select2-selection__placeholder,
.qds-form-section .select2-container .select2-selection__placeholder,
.qds-modal .select2-container .select2-selection__placeholder {
  color: var(--qds-text-faint) !important;
}

/* Ocultar arrow nativo del theme bootstrap-5 (el SVG ya lo dibujamos como background) */
.qds-field .select2-container .select2-selection__arrow,
.qds-form-section .select2-container .select2-selection__arrow,
.qds-modal .select2-container .select2-selection__arrow {
  display: none !important;
}

/* Estado focus / open */
.qds-field .select2-container.select2-container--focus .select2-selection,
.qds-field .select2-container.select2-container--open .select2-selection,
.qds-form-section .select2-container.select2-container--focus .select2-selection,
.qds-form-section .select2-container.select2-container--open .select2-selection,
.qds-modal .select2-container.select2-container--focus .select2-selection,
.qds-modal .select2-container.select2-container--open .select2-selection {
  border-color: var(--qds-blue) !important;
  box-shadow: 0 0 0 3px rgba(59,130,246,.15) !important;
}

/* Dropdown abierto */
.select2-dropdown {
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-md);
  box-shadow: var(--qds-shadow-md);
  overflow: hidden;
}
.select2-search--dropdown .select2-search__field {
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-sm);
  padding: 8px 12px;
  font-size: var(--qds-font-sm);
}
.select2-results__option {
  padding: 8px 12px;
  font-size: var(--qds-font-md);
}
.select2-container--default .select2-results__option--highlighted[aria-selected],
.select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option.select2-results__option--highlighted {
  background-color: var(--qds-blue) !important;
  color: #fff !important;
}


/* ---------------------------------------------------------
   10.5 Form sections (.qds-form-section)
   --------------------------------------------------------- */
.qds-form-section {
  background: var(--qds-surface);
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-lg);
  box-shadow: var(--qds-shadow-sm);
  margin-bottom: var(--qds-space-4);
  overflow: hidden;
}
.qds-form-section-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 20px;
  border-bottom: 1px solid var(--qds-border);
  background: var(--qds-surface);
}
.qds-fs-icon {
  width: 38px;
  height: 38px;
  border-radius: var(--qds-radius-sm);
  background: var(--qds-blue-soft);
  color: var(--qds-blue);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  flex-shrink: 0;
}
.qds-fs-icon.is-red    { background: var(--qds-red-soft);    color: var(--qds-red); }
.qds-fs-icon.is-green  { background: var(--qds-green-soft);  color: var(--qds-green); }
.qds-fs-icon.is-amber  { background: var(--qds-amber-soft);  color: var(--qds-amber); }
.qds-fs-icon.is-cyan   { background: var(--qds-cyan-soft);   color: var(--qds-cyan); }
.qds-fs-icon.is-purple { background: var(--qds-purple-soft); color: var(--qds-purple); }
.qds-fs-title h3,
.qds-fs-title h4 {
  margin: 0;
  font-size: var(--qds-font-lg);
  font-weight: 700;
  color: var(--qds-text);
  line-height: 1.2;
}
.qds-fs-subtitle {
  display: block;
  margin-top: 2px;
  font-size: var(--qds-font-sm);
  color: var(--qds-text-muted);
  font-weight: 400;
}
.qds-form-section-body { padding: 20px; }
.qds-form-section-footer {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  padding: 14px 20px;
  border-top: 1px solid var(--qds-border);
  background: var(--qds-bg);
}


/* ---------------------------------------------------------
   10.6 File drop area (.qds-file-drop)
   Estilo de drop zone reusable. Funciona con Dropify o input simple.
   --------------------------------------------------------- */
.qds-file-drop {
  border: 2px dashed var(--qds-border-strong);
  border-radius: var(--qds-radius-md);
  background: var(--qds-bg);
  min-height: 220px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  cursor: pointer;
  transition: var(--qds-trans);
  position: relative;
}
.qds-file-drop:hover {
  border-color: var(--qds-blue);
  background: var(--qds-blue-soft);
}
.qds-file-drop.has-preview { padding: 0; border-style: solid; border-color: var(--qds-border); }
.qds-file-drop-icon {
  width: 56px;
  height: 56px;
  border-radius: var(--qds-radius-pill);
  background: var(--qds-surface);
  color: var(--qds-text-faint);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  margin-bottom: 10px;
  border: 1px solid var(--qds-border);
}
.qds-file-drop-text {
  font-size: var(--qds-font-md);
  color: var(--qds-text-muted);
  font-weight: 500;
}
.qds-file-drop-hint {
  font-size: var(--qds-font-xs);
  color: var(--qds-text-faint);
  margin-top: 6px;
}
.qds-file-drop input[type="file"] {
  position: absolute;
  inset: 0;
  opacity: 0;
  cursor: pointer;
}
.qds-file-drop img.preview {
  max-width: 100%;
  max-height: 260px;
  border-radius: var(--qds-radius-sm);
  display: block;
}


/* ---------------------------------------------------------
   10.65 Tabs (.qds-tabs)
   Sistema de pestañas reutilizable que envuelve Bootstrap 5 tabs.
   Estilo unificado con el resto de QDS.
   --------------------------------------------------------- */
.qds-tabs,
.qds-tabs.nav {
  display: flex;
  align-items: center;
  gap: 4px;
  border-bottom: 1px solid var(--qds-border);
  margin: 0 0 var(--qds-space-3);
  padding: 0 4px;
  list-style: none;
  flex-wrap: wrap;
}
.qds-tabs > li { list-style: none; }
.qds-tabs .qds-tab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  font-size: var(--qds-font-md);
  font-weight: 600;
  color: var(--qds-text-muted);
  background: transparent;
  border: 0;
  border-bottom: 3px solid transparent;
  border-radius: var(--qds-radius-sm) var(--qds-radius-sm) 0 0;
  cursor: pointer;
  transition: var(--qds-trans);
  margin-bottom: -1px;
  text-decoration: none;
}
.qds-tabs .qds-tab:hover {
  color: var(--qds-text);
  background: var(--qds-bg);
}
.qds-tabs .qds-tab.active {
  color: var(--qds-blue);
  border-bottom-color: var(--qds-blue);
  background: transparent;
}
.qds-tabs .qds-tab i { font-size: 14px; }
.qds-tabs .qds-tab-count {
  background: var(--qds-gray-soft);
  color: var(--qds-text-muted);
  font-size: var(--qds-font-xs);
  font-weight: 700;
  padding: 2px 8px;
  border-radius: var(--qds-radius-pill);
  line-height: 1.4;
  min-width: 22px;
  text-align: center;
}
.qds-tabs .qds-tab.active .qds-tab-count {
  background: var(--qds-blue-soft);
  color: var(--qds-blue);
}

/* Contenido de tabs (.tab-content de Bootstrap o custom) */
.qds-tab-pane { padding-top: var(--qds-space-2); }

/* Chip contador dentro de un .qds-btn (ej. "Alertas 3" en un botón danger).
   Píldora compacta semi-translúcida que se adapta al color del botón padre. */
.qds-btn .qds-btn-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 7px;
  margin-left: 6px;
  font-size: var(--qds-font-xs);
  font-weight: 700;
  line-height: 1;
  border-radius: var(--qds-radius-pill);
  background: rgba(255,255,255,0.85);
  color: inherit;
}
.qds-btn.qds-btn-danger  .qds-btn-count { color: var(--qds-red); }
.qds-btn.qds-btn-warning .qds-btn-count { color: var(--qds-amber-hover); }
.qds-btn.qds-btn-success .qds-btn-count { color: var(--qds-green-hover); }
.qds-btn.qds-btn-info    .qds-btn-count { color: var(--qds-cyan-hover); }
.qds-btn.qds-btn-primary .qds-btn-count { color: var(--qds-blue); }
.qds-btn.qds-btn-purple  .qds-btn-count { color: var(--qds-purple-hover, var(--qds-purple)); }
.qds-btn.qds-btn-soft    .qds-btn-count,
.qds-btn.qds-btn-ghost   .qds-btn-count {
  background: var(--qds-gray-soft);
  color: var(--qds-text-muted);
}


/* Modificador `.qds-tabs-card`: envuelve la nav en una tarjeta blanca
   con borde y sombra suave para anclar visualmente los tabs cuando viven
   sueltos en la página (no dentro de un .qds-form-section o .qds-table-card). */
.qds-tabs.qds-tabs-card {
  background: var(--qds-surface);
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-md);
  box-shadow: var(--qds-shadow-sm);
  padding: 4px 8px 0;
  margin: 0 0 var(--qds-space-3);
}
.qds-tabs.qds-tabs-card .qds-tab {
  border-bottom-width: 3px;
  margin-bottom: -1px;
  position: relative;
}


/* ---------------------------------------------------------
   10.7 Data summary (.qds-data-summary)
   Conjunto de pares label/valor en bloque horizontal para
   mostrar metadata read-only (p.ej. info de la unidad en
   vistas hijas: documentos, estatus fisico, etc.)
   --------------------------------------------------------- */
.qds-data-summary {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 14px 24px;
  padding: 16px 20px;
  background: var(--qds-surface);
  border: 1px solid var(--qds-border);
  border-radius: var(--qds-radius-lg);
  box-shadow: var(--qds-shadow-sm);
  margin-bottom: var(--qds-space-4);
}
.qds-data-item {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.qds-data-label {
  font-size: var(--qds-font-xs);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--qds-text-faint);
}
.qds-data-value {
  font-size: var(--qds-font-md);
  font-weight: 600;
  color: var(--qds-text);
  word-break: break-word;
}
.qds-data-value.is-mono {
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  letter-spacing: .04em;
}


/* ---------------------------------------------------------
   11. Empty state (sin registros)
   Usar cuando una tabla/lista no tiene datos para mostrar.
   Icono circular grande + titulo + descripcion + boton opcional.
   --------------------------------------------------------- */
.qds-empty {
  text-align: center;
  padding: 56px 24px;
  color: var(--qds-text-muted);
}
.qds-empty-icon {
  width: 96px;
  height: 96px;
  border-radius: var(--qds-radius-pill);
  background: var(--qds-gray-soft);
  color: var(--qds-text-faint);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 36px;
  margin: 0 auto 20px;
}
.qds-empty h5,
.qds-empty h6 {
  font-size: var(--qds-font-2xl);
  font-weight: 800;
  color: var(--qds-text);
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}
.qds-empty p {
  font-size: var(--qds-font-md);
  color: var(--qds-text-muted);
  margin: 0 auto;
  max-width: 420px;
  line-height: 1.5;
}
.qds-empty-action {
  margin-top: 20px;
  display: inline-flex;
  gap: 8px;
  justify-content: center;
}

/* Variante compacta para empty states dentro de modales o cards chicas */
.qds-empty.qds-empty-sm {
  padding: 32px 16px;
}
.qds-empty.qds-empty-sm .qds-empty-icon {
  width: 64px;
  height: 64px;
  font-size: 24px;
  margin-bottom: 12px;
}
.qds-empty.qds-empty-sm h5,
.qds-empty.qds-empty-sm h6 {
  font-size: var(--qds-font-lg);
}
.qds-empty.qds-empty-sm p {
  font-size: var(--qds-font-sm);
}
.qds-empty.qds-empty-sm .qds-empty-action {
  margin-top: 14px;
}


/* ---------------------------------------------------------
   12. Utilidades
   --------------------------------------------------------- */
.qds-mt-0 { margin-top: 0 !important; }
.qds-mt-1 { margin-top: var(--qds-space-1) !important; }
.qds-mt-2 { margin-top: var(--qds-space-2) !important; }
.qds-mt-3 { margin-top: var(--qds-space-3) !important; }
.qds-mt-4 { margin-top: var(--qds-space-4) !important; }
.qds-mb-0 { margin-bottom: 0 !important; }
.qds-mb-3 { margin-bottom: var(--qds-space-3) !important; }
.qds-mb-4 { margin-bottom: var(--qds-space-4) !important; }
.qds-text-muted { color: var(--qds-text-muted) !important; }
.qds-text-faint { color: var(--qds-text-faint) !important; }
.qds-divider {
  height: 1px;
  background: var(--qds-border);
  margin: var(--qds-space-3) 0;
  border: 0;
}


/* ---------------------------------------------------------
   12.1 Pills de periodo .qds-filter-pills
   Segmentado compacto para rangos (Hoy / Semana / Mes / 6 meses).
   Vive dentro de .qds-tab-actions; los botones son .qds-btn-sm.
   --------------------------------------------------------- */
.qds-filter-pills {
  display: inline-flex;
  gap: 4px;
  background: var(--qds-gray-soft);
  padding: 3px;
  border-radius: var(--qds-radius-md);
}
.qds-filter-pills .qds-btn {
  border: 0;
  background: transparent;
  color: var(--qds-text-muted);
  box-shadow: none;
}
.qds-filter-pills .qds-btn:hover {
  background: rgba(255,255,255,.6);
  color: var(--qds-text);
}
.qds-filter-pills .qds-btn.is-active {
  background: var(--qds-surface);
  color: var(--qds-blue);
  box-shadow: var(--qds-shadow-sm);
}


/* ---------------------------------------------------------
   13. Ajustes responsivos generales
   --------------------------------------------------------- */
@media (max-width: 768px) {
  .qds-page-header { padding: 12px 14px; }
  .qds-ph-title { font-size: var(--qds-font-lg); }
  .qds-section-toolbar { padding: 14px; }
  .qds-toolbar { width: 100%; justify-content: flex-start; }
  .qds-table-head { padding: 12px 14px; }
  .qds-modal .modal-body { padding: 16px; }
}


/* ==========================================================================
 * Badge de app recién adquirida en el menú lateral (nav-menu-left.phtml)
 * "Nuevo" (rojo, con pulso suave) / "Configurar" (ámbar).
 * ======================================================================== */
.pcoded-navbar .pcoded-item > li > a{ position:relative; }
.qds-menu-badge{
  position:absolute; right:36px; top:50%; transform:translateY(-50%); padding: 1px 7px;
  font-size: 10px; font-weight:800; text-transform:uppercase; letter-spacing:.04em; line-height:1.5; flex-shrink:0;
}
.qds-menu-badge.is-pulse{ animation: qds-menu-pulse 2s ease-in-out infinite; }
@keyframes qds-menu-pulse{
  0%, 100%{ box-shadow: 0 0 0 0 rgba(220, 38, 38, .35); }
  50%     { box-shadow: 0 0 0 4px rgba(220, 38, 38, 0); }
}
/* Menú colapsado (solo iconos): el badge se vuelve un punto sobre el ícono */
.pcoded[vertical-nav-type="collapsed"] .pcoded-navbar .qds-menu-badge{
  top:8px; left:34px; right:auto; transform:none; padding:0; width:8px; height:8px; font-size:0; border-radius:50%;
}
.pcoded[vertical-nav-type="collapsed"] .pcoded-navbar .qds-menu-badge.qds-badge-red{ background: var(--qds-red); }
.pcoded[vertical-nav-type="collapsed"] .pcoded-navbar .qds-menu-badge.qds-badge-amber{ background: var(--qds-amber); }
@media (prefers-reduced-motion: reduce){ .qds-menu-badge.is-pulse{ animation:none; } }


/* ==========================================================================
 * Modal de bienvenida de apps adquiridas (layouts/modal-bienvenida-apps.phtml)
 * ======================================================================== */
.qds-welcome-hero{ text-align:center; padding: var(--qds-space-2) var(--qds-space-4) var(--qds-space-4); }
.qds-welcome-hero h4{ font-weight:800; font-size: var(--qds-font-2xl); color: var(--qds-text); margin:0 0 var(--qds-space-2); }
.qds-welcome-hero p{ color: var(--qds-text-muted); font-size: var(--qds-font-md); margin:0; line-height:1.55; }
.qds-welcome-list{ display:flex; flex-direction:column; gap: var(--qds-space-3); }
.qds-welcome-item{
  display:flex; align-items:center; gap: var(--qds-space-3); padding: var(--qds-space-3) var(--qds-space-4);
  border:1px solid var(--qds-border); border-radius: var(--qds-radius-md); background: var(--qds-surface); transition: var(--qds-trans);
}
.qds-welcome-item.is-pending{ border-color: var(--qds-amber); background: var(--qds-amber-soft); }
.qds-welcome-icon{
  width:42px; height:42px; flex-shrink:0; border-radius: var(--qds-radius-md);
  display:flex; align-items:center; justify-content:center; font-size:18px;
}
.qds-welcome-info{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.qds-welcome-name{ font-weight:700; color: var(--qds-text); font-size: var(--qds-font-md); }
.qds-welcome-state{ font-size: var(--qds-font-sm); color: var(--qds-text-muted); }
.qds-welcome-item .qds-btn{ flex-shrink:0; }
@media (max-width: 576px){
  .qds-welcome-item{ flex-wrap:wrap; }
  .qds-welcome-item .qds-btn{ width:100%; justify-content:center; }
}

/* Colores de aplicacion (APLICACIONES.COLOR), alineados con APLICACIONES.COLOR_APP
   que recibe la app movil. red/blue/green/yellow/purple sobreescriben a proposito
   los de Admindek (style.css) y qatros.css; cyan/pink/gray Admindek no los trae.
   No hay --qds-yellow: su equivalente es --qds-amber. */
.text-c-red{ color: var(--qds-red) !important; }
.text-c-blue{ color: var(--qds-blue) !important; }
.text-c-green{ color: var(--qds-green) !important; }
.text-c-yellow{ color: var(--qds-amber) !important; }
.text-c-purple{ color: var(--qds-purple) !important; }
.text-c-cyan{ color: var(--qds-cyan) !important; }
.text-c-pink{ color: var(--qds-pink) !important; }
.text-c-gray{ color: var(--qds-gray) !important; }


/* ==========================================================================
 * Aviso de funcion de pago (.qds-upsell)
 *
 * Bloque para decirle a la empresa que lo que esta viendo se puede
 * personalizar con una aplicacion que todavia no tiene, y llevarla a la
 * tienda. Se usa en /aplicaciones/visitas, /aplicaciones/formularios y en el
 * modal de la entrega de /aplicaciones/viajes/alta.
 * ======================================================================== */
.qds-upsell{
  display:flex; align-items:center; gap: var(--qds-space-3);
  padding: var(--qds-space-3) var(--qds-space-4);
  margin-bottom: var(--qds-space-4);
  background: var(--qds-surface);
  border:1px solid var(--qds-border);
  border-left:4px solid var(--qds-amber);
  border-radius: var(--qds-radius-md);
  box-shadow: var(--qds-shadow-sm);
}
.qds-upsell-icon{
  width:38px; height:38px; flex-shrink:0; border-radius: var(--qds-radius-md);
  display:flex; align-items:center; justify-content:center; font-size:17px;
  background: var(--qds-amber-soft); color: var(--qds-amber-hover);
}
.qds-upsell-body{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.qds-upsell-title{
  display:flex; align-items:center; gap: var(--qds-space-2); flex-wrap:wrap;
  font-weight:700; color: var(--qds-text); font-size: var(--qds-font-md);
}
.qds-upsell-text{ color: var(--qds-text-muted); font-size: var(--qds-font-sm); line-height:1.5; }
.qds-upsell .qds-btn{ flex-shrink:0; }

/* Variante compacta para dentro de un modal o una tarjeta chica */
.qds-upsell.qds-upsell-sm{
  padding: var(--qds-space-2) var(--qds-space-3);
  margin-bottom: var(--qds-space-2);
  gap: var(--qds-space-2);
}
.qds-upsell.qds-upsell-sm .qds-upsell-icon{ width:30px; height:30px; font-size:14px; }
.qds-upsell.qds-upsell-sm .qds-upsell-title{ font-size: var(--qds-font-sm); }
.qds-upsell.qds-upsell-sm .qds-upsell-text{ font-size: var(--qds-font-xs); }

@media (max-width: 576px){
  .qds-upsell{ flex-wrap:wrap; }
  .qds-upsell .qds-btn{ width:100%; justify-content:center; }
}

/* ==========================================================================
 * Bloque bloqueado por aplicacion (.qds-locked)
 *
 * Para paneles de datos (graficas, cifras, tablas) cuya informacion sale de
 * una aplicacion que la empresa no tiene: el contenido se pinta con datos de
 * ejemplo dentro de .qds-locked-demo, difuminado, y encima va el velo
 * .qds-locked-veil con el aviso y el boton a la tienda. Sin la clase
 * .qds-locked el envoltorio .qds-locked-demo no cambia nada, asi que el
 * markup es el mismo con y sin la aplicacion. Se usa en /dashboard/admin.
 * ======================================================================== */
.qds-locked{
  position:relative;
  min-height:220px;
}
.qds-locked > .qds-locked-demo{
  filter: blur(2px) grayscale(.3);
  opacity:.55;
  pointer-events:none;
  user-select:none;
}
.qds-locked-veil{ display:none; }
.qds-locked > .qds-locked-veil{
  position:absolute; top:0; right:0; bottom:0; left:0; z-index:2;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap: var(--qds-space-2);
  padding: var(--qds-space-4);
  text-align:center;
  background: rgba(255,255,255,.6);
  border-radius: inherit;
}
.qds-locked-icon{
  width:40px; height:40px; border-radius: var(--qds-radius-pill);
  display:flex; align-items:center; justify-content:center; font-size:17px;
  background: var(--qds-amber-soft); color: var(--qds-amber-hover);
  box-shadow: var(--qds-shadow-sm);
}
.qds-locked-title{
  font-weight:700; color: var(--qds-text); font-size: var(--qds-font-md);
}
.qds-locked-text{
  max-width:300px;
  color: var(--qds-text-muted); font-size: var(--qds-font-sm); line-height:1.5;
}
.qds-locked-veil .qds-btn{ margin-top: var(--qds-space-1); }
