/* Modo oscuro del sistema tradicional. Se activa con [data-theme="dark"] en <html> (ver el script anti-parpadeo
   en template.tpl justo después de <head>, y dark-mode.js para el interruptor). Mismo enfoque que v3
   (v3/public/assets/dark-mode.css): no se reescribe global.css, se añaden overrides puntuales por encima usando
   los nombres de clase reales de este sistema.

   Regla sobre el azul oscuro de marca de Colpay (#21214F / .bg-primary / .border-primary): se conserva en
   botones, badges y acentos pequeños (.btn-primary, el badge "Perfil: ..." de la tarjeta de Balance, el borde
   de "Registrarse", etc.) porque ahí SÍ lee como una elección de marca. En bloques grandes de fondo (el hero
   de home, la tarjeta de Balance, la barra de navegación) se oscurece igual que el resto de la página, tal
   como muestran los mockups de modo oscuro - ver los selectores `.home-hero.bg-primary` y
   `.account-balance-card .bg-primary` más abajo, que son las excepciones explícitas.
   `.text-primary` es solo texto (nunca fondo), así que se aclara siempre para mantener contraste. */

/* Valores por defecto (modo claro) de un par de grises que el propio HTML fija inline con !important en la
   topbar de cuenta (ID/ubicación/último inicio de sesión) - un CSS externo nunca puede pisar un color inline
   !important, así que esos dos atributos style="" ahora usan var(--cp-topbar-muted)/var(--cp-session-meta) en
   vez del hex fijo, y es ESTA variable la que cambia según el tema. */
:root {
    --cp-topbar-muted: #777b8d;
    --cp-session-meta: #555b6e;
}

:root[data-theme="dark"] {
    --cp-bg: #0a0a12;
    --cp-surface: #12121c;
    --cp-surface-alt: #20202e;
    --cp-border: #34344a;
    --cp-text: #f2f3f8;
    --cp-text-muted: #9a9ab2;
    --cp-link: #2ec4f1;
    --cp-success: #00f5a6;
    --cp-topbar-muted: #9a9ab2;
    --cp-session-meta: #9a9ab2;
    color-scheme: dark;
}

:root[data-theme="dark"] body {
    background: var(--cp-bg) !important;
    color: var(--cp-text);
}

:root[data-theme="dark"] a { color: var(--cp-link); }
:root[data-theme="dark"] .text-muted { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .text-muted-light { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .text-secondary { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] hr { border-color: var(--cp-border); }
/* Utilidad .border (border-color:#dee2e6 !important en el CSS base): nunca se había cubierto de forma
   genérica, solo en casos puntuales ya más específicos (ej. #myTab .nav-btn). Es el borde gris claro que
   rodea tarjetas como .card.shadow.border.border-2 (el wrapper de "Mi Cuenta" en el dashboard) - se ve como
   un borde blanco/desteñido sobre fondo oscuro. .border solo define color de borde, nunca fondo/texto, así
   que oscurecerlo en todo el sitio es seguro. */
:root[data-theme="dark"] .border { border-color: var(--cp-border) !important; }
/* Texto que usa el azul de marca (enlaces, títulos de sección como "Nuestros servicios"/"Publicidad en
   Colpay", el nombre del usuario en la topbar) se aclara para que se lea bien sobre fondo oscuro. Los FONDOS
   de marca (.bg-primary, botones, badges) no se tocan - ver más abajo. .text-primary solo se usa para texto,
   nunca para fondo, así que ampliar esto a toda la clase (no solo <a>) es seguro. */
:root[data-theme="dark"] .text-primary { color: var(--cp-link) !important; }
/* Texto casi negro pensado para fondo claro (ej. checkboxes de registro sobre un panel bg-light ya oscurecido,
   badge "Perfil: Comercios" de Configuración) - queda ilegible si no se aclara. */
:root[data-theme="dark"] .text-dark { color: var(--cp-text) !important; }
:root[data-theme="dark"] .text-success { color: var(--cp-success) !important; }

/* Hero de home: aunque usa .bg-primary (azul de marca), en el mockup de modo oscuro pasa a ser tan oscuro
   como el resto de la página (igual que la barra de navegación y la tarjeta de Balance) - la regla de
   "conservar el azul de marca" es para botones/badges pequeños, no para bloques grandes de fondo. */
:root[data-theme="dark"] .home-hero.bg-primary {
    background-color: var(--cp-surface) !important;
}

/* Enlaces del menú superior (Anunciar, Noticias, Juegos, Ayuda, Foro, etc): el color base (#848484, un gris
   pensado para navbar blanco) nunca se tocaba, quedando casi invisible sobre el navbar ya oscurecido - esta
   es la causa de que "no se vean" los botones del menú. */
:root[data-theme="dark"] .nav-link {
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .nav-link:hover,
:root[data-theme="dark"] .nav-link:focus {
    color: var(--cp-link) !important;
}
:root[data-theme="dark"] #navbarSupportedContent ul li:hover {
    background: var(--cp-surface-alt) !important;
}

/* Barra de navegación principal (sitewide) y secciones claras genéricas de contenido (home, login, etc).
   Solo contenedores de bloque, nunca <img> - varios íconos usan bg-white/bg-light como fondo de recorte
   y perderían su ícono si el fondo se oscurece. */
:root[data-theme="dark"] nav.navbar-default {
    background-color: var(--cp-surface) !important;
}
/* Logo del topbar: en modo oscuro se usa el mismo logo de letras blancas del footer (colpay_white.webp). Las
   dos <img> están en template.tpl y aquí se alterna cuál se ve. El blanco está recortado al ras (226x76) y el
   de color trae margen (300x117), así que se muestra a 132px de ancho (~44px de alto) para que el ícono
   quede del mismo tamaño que en modo claro. */
/* Íconos de menú en modo oscuro -> blanco. La hamburguesa de la barra superior es una imagen SVG de Bootstrap
   con trazo negro (.navbar-light .navbar-toggler-icon, rgba(0,0,0,.55)) y el "×" que la reemplaza al abrirse
   (.close-menu) es azul marino fijo: ambos desaparecían sobre la barra oscura. Se reemplaza el SVG por el mismo
   dibujo con trazo blanco. El botón lateral del dashboard (.bg-primary con ícono feather) también se fuerza a
   blanco por si el color heredado no llegara. */
:root[data-theme="dark"] .navbar-toggler-icon {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23ffffff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") !important;
}
:root[data-theme="dark"] .close-menu { color: #fff !important; }
:root[data-theme="dark"] .navbar-toggler { border-color: var(--cp-border); }
:root[data-theme="dark"] .navbar-toggler [data-feather],
:root[data-theme="dark"] .navbar-toggler svg { color: #fff !important; stroke: #fff !important; }
/* "X" de cierre del sidebar: no es el ícono <i class="bi-x-lg"> (ese va con d-none), sino las dos barras que dibujan
   los ::before/::after de `#container-custom .bg-none[aria-expanded="true"]`, con fondo azul marino fijo
   (#21214F !important en template.tpl / template-home.min.css). Sobre el panel oscuro no se veía; se pintan blancas. */
:root[data-theme="dark"] #container-custom .bg-none[aria-expanded="true"]::before,
:root[data-theme="dark"] #container-custom .bg-none[aria-expanded="true"]::after { background: #fff !important; }
:root[data-theme="dark"] #sidenav .navbar-toggler .bi-x-lg { color: #fff !important; }
/* Botones de acción rápida del dashboard (Comprar/Retirar/Cobrar/Enviar saldo): el ícono de "Enviar saldo" trae
   style="color: var(--bs-primary)" (azul marino) fijo en el HTML y no se veía sobre el botón oscuro. */
:root[data-theme="dark"] .btn-service .bi-send,
:root[data-theme="dark"] .btn-service i[style*="var(--bs-primary)"] { color: #fff !important; }
.logo-colpay-nav--dark { display: none; }
/* Logo de las vistas de acceso (login, registro, recuperar contraseña/usuario): mismo par claro/oscuro que el topbar.
   El de color (colpay.png) se muestra a 70px de alto (~179px de ancho) con margen propio; el blanco viene recortado
   al ras, así que a 168px de ancho el ícono queda del mismo tamaño que en modo claro. */
.logo-auth--dark { display: none; }
:root[data-theme="dark"] .logo-auth--light { display: none; }
:root[data-theme="dark"] .logo-auth--dark {
    display: inline-block;
    width: 168px;
    height: auto;
}
:root[data-theme="dark"] .logo-colpay-nav--light { display: none; }
:root[data-theme="dark"] .logo-colpay-nav--dark {
    display: inline-block;
    width: 132px;
    height: auto;
    max-height: 46px;
}
:root[data-theme="dark"] div.bg-white,
:root[data-theme="dark"] section.bg-white {
    background-color: var(--cp-surface) !important;
}
/* .bg-light un tono más claro que .bg-white a propósito: donde ambos aparecen juntos (ej. el login, con el
   formulario en bg-white y la ilustración en bg-light) tienen que distinguirse entre sí, no verse como un
   solo bloque plano. */
:root[data-theme="dark"] div.bg-light,
:root[data-theme="dark"] section.bg-light {
    background-color: var(--cp-surface-alt) !important;
}
:root[data-theme="dark"] .home-provider-section {
    background-color: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
}

/* Menu lateral del panel (sidenav) y dropdown del usuario */
:root[data-theme="dark"] .sidenav {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border);
}
:root[data-theme="dark"] .sidenav .nav-link,
:root[data-theme="dark"] .icon-menu-dashboard,
:root[data-theme="dark"] .nav-icon {
    color: var(--cp-text);
}
:root[data-theme="dark"] .btn-menu-footer {
    background: var(--cp-surface);
    color: var(--cp-text-muted);
}
:root[data-theme="dark"] .btn-menu-footer.active,
:root[data-theme="dark"] .btn-menu-footer:hover { color: var(--cp-link); }
:root[data-theme="dark"] .dropdown-menu {
    background: var(--cp-surface-alt);
    border-color: var(--cp-border);
    color: var(--cp-text);
}
:root[data-theme="dark"] .dropdown-item { color: var(--cp-text); }
:root[data-theme="dark"] .dropdown-item:hover,
:root[data-theme="dark"] .dropdown-item:focus,
:root[data-theme="dark"] .dropdown-item.active { background: var(--cp-surface); color: var(--cp-link); }
:root[data-theme="dark"] .dropdown-divider { border-color: var(--cp-border); }

/* .btn-primary (Iniciar sesión, Registrarse, etc): el navy plano no tiene suficiente contraste sobre un fondo
   ya oscuro (el navy es la variante "pop" en modo claro, pero en oscuro ese rol lo cumple el azul brillante
   de --cp-link, igual que .btn-info/"Crear cuenta" que ya usa un azul vivo). Las demás variantes .bg-primary
   pequeñas (badges, bordes) sí se dejan intactas. */
:root[data-theme="dark"] .btn-primary {
    background-color: var(--cp-link) !important;
    border-color: var(--cp-link) !important;
    color: #fff !important;
}
:root[data-theme="dark"] .btn-primary:hover,
:root[data-theme="dark"] .btn-primary:focus,
:root[data-theme="dark"] .btn-primary:active {
    background-color: #55d3fb !important;
    border-color: #55d3fb !important;
    color: #fff !important;
}

:root[data-theme="dark"] .btn-light,
:root[data-theme="dark"] .btn-outline-secondary,
:root[data-theme="dark"] .btn-secondary,
:root[data-theme="dark"] .btn-sec-info {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .btn-light:hover,
:root[data-theme="dark"] .btn-outline-secondary:hover,
:root[data-theme="dark"] .btn-sec-info:hover {
    background: var(--cp-surface) !important;
    color: var(--cp-text) !important;
}
/* .btn-service (accesos rápidos del dashboard: Comprar saldo, Retirar saldo, etc. Y las tarjetas de
   proveedor de "Servicios P2P" - comparten esta misma clase): borde cian de acento en vez del borde gris
   neutro genérico, según el mockup. */
:root[data-theme="dark"] .btn-service {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .btn-service:hover {
    background: var(--cp-surface) !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-text) !important;
}
/* .btn-sec-color ya es verde de marca incluso en modo claro (Copiar, "¿Reportar error?", etc.) - se deja
   igual, solo se asegura que el texto quede legible. */
:root[data-theme="dark"] .btn-sec-color {
    color: #062018 !important;
}

/* Pestañas tipo .nav-pills que además llevan .btn-light (ej. Configuración personal de custom_processors,
   id="myTab"/.nav-btn): el override genérico de .btn-light de arriba fuerza el mismo gris en TODAS, tapando
   el resaltado azul de la pestaña activa (.nav-pills .nav-link.active, sin !important en el CSS base) - por
   eso "no se distinguían como antes". Esta regla es más específica y va después, así que gana. */
:root[data-theme="dark"] .nav-pills .nav-link.active,
:root[data-theme="dark"] .nav-pills .show > .nav-link {
    background-color: var(--cp-link) !important;
    border-color: var(--cp-link) !important;
    color: #fff !important;
}

/* Formularios */
:root[data-theme="dark"] .form-control,
:root[data-theme="dark"] .form-select,
:root[data-theme="dark"] .input-group-text {
    background-color: var(--cp-surface-alt);
    border-color: var(--cp-border);
    color: var(--cp-text);
}
:root[data-theme="dark"] .form-control::placeholder { color: var(--cp-text-muted); }
:root[data-theme="dark"] .form-control:focus,
:root[data-theme="dark"] .form-select:focus {
    background-color: var(--cp-surface-alt);
    color: var(--cp-text);
    box-shadow: 0 0 0 .2rem rgba(46, 196, 241, .25);
}
:root[data-theme="dark"] .form-label,
:root[data-theme="dark"] label { color: var(--cp-text); }
:root[data-theme="dark"] .form-control[readonly],
:root[data-theme="dark"] .form-control:disabled { background-color: var(--cp-surface); color: var(--cp-text-muted); }

/* Tarjetas, tablas y sombras genéricas (las que ya usan bg-primary quedan fuera de este selector) */
:root[data-theme="dark"] .card:not(.bg-primary):not(.text-bg-primary) {
    background-color: var(--cp-surface);
    border-color: var(--cp-border);
    color: var(--cp-text);
}
:root[data-theme="dark"] .card-header:not(.bg-primary) { background-color: var(--cp-surface-alt); border-bottom-color: var(--cp-border); }
:root[data-theme="dark"] .table { color: var(--cp-text); }
:root[data-theme="dark"] .table > :not(caption) > * > * { background-color: transparent; border-color: var(--cp-border); color: var(--cp-text); }
:root[data-theme="dark"] .table-striped > tbody > tr:nth-of-type(odd) > * { background-color: var(--cp-surface-alt); }
/* Encabezados de tabla con .bg-secondary (ej. historial de Transferir saldo): el gris medio de Bootstrap
   no se había cubierto - se ve como una franja gris clara sin relación con el resto de la tarjeta oscura. */
:root[data-theme="dark"] .bg-secondary { background-color: var(--cp-surface-alt) !important; }
/* .btn-outline-primary ("Abrir" del comprobante en el historial, "Ver completo" del modal, etc.): navy
   sobre transparente es casi ilegible sobre una fila ya oscura - mismo cambio de acento que .btn-primary. */
:root[data-theme="dark"] .btn-outline-primary {
    color: var(--cp-link) !important;
    border-color: var(--cp-link) !important;
}
:root[data-theme="dark"] .btn-outline-primary:hover,
:root[data-theme="dark"] .btn-outline-primary:focus {
    background-color: var(--cp-link) !important;
    border-color: var(--cp-link) !important;
    color: #fff !important;
}
:root[data-theme="dark"] .shadow,
:root[data-theme="dark"] .shadow-sm,
:root[data-theme="dark"] .shadow-lg { box-shadow: 0 .5rem 1.5rem rgba(0, 0, 0, .45) !important; }

/* Alertas propias (colpay-smart-alert): sistema fijo de mensajes de formulario, no un toast - solo se
   ajustan sus colores base, no su comportamiento (ver memoria smart-alert-conversion-pattern). */
:root[data-theme="dark"] .colpay-smart-alert {
    background: var(--cp-surface-alt);
    border-color: var(--cp-border);
    color: var(--cp-text);
}
:root[data-theme="dark"] .colpay-smart-alert__close { color: var(--cp-text-muted); }
:root[data-theme="dark"] .colpay-smart-alert__close:hover,
:root[data-theme="dark"] .colpay-smart-alert__close:focus { background: var(--cp-surface); color: var(--cp-text); }

/* Footer: igual que .home-hero, trae .bg-primary (azul de marca) además de .footer-main. El .bg-primary
   base usa !important (assets/components/bootstrap5/css/blue.css:8619), así que sin !important aquí esa
   regla de marca seguía ganando y el footer se quedaba azul en vez de pasar al tono oscuro del resto de
   la página - por eso "seguía igual" aunque ya existiera esta regla. */
:root[data-theme="dark"] .footer-main {
    background: var(--cp-surface) !important;
    color: var(--cp-text-muted) !important;
    border-color: var(--cp-border) !important;
}
/* El <div class="container bg-primary p-2"> anidado dentro de .footer-main es un segundo bloque de marca
   independiente - sin esto quedaría como un rectángulo azul flotando dentro del footer ya oscuro. */
:root[data-theme="dark"] .footer-main .bg-primary {
    background-color: transparent !important;
}

/* Modales de Bootstrap (genérico, usado en 45+ .tpl distintos). */
:root[data-theme="dark"] .modal-content {
    background-color: var(--cp-surface);
    color: var(--cp-text);
    border-color: var(--cp-border);
}
:root[data-theme="dark"] .modal-header,
:root[data-theme="dark"] .modal-footer {
    border-color: var(--cp-border) !important;
    background-color: var(--cp-surface-alt) !important;
}
:root[data-theme="dark"] .modal-body { color: var(--cp-text); }
:root[data-theme="dark"] .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }
/* Estos dos traen su propio fondo blanco hardcodeado con más especificidad/!important que lo genérico de
   arriba, así que necesitan su propio selector: el anuncio de login (sitewide) y el modal de confirmación
   de compra (usado en custom_services, refacil_services, api_services, ptc_offerwall, etc). */
:root[data-theme="dark"] #loginAdsModal .modal-content { background: var(--cp-surface) !important; color: var(--cp-text); }
/* Familia .breb-* compartida por Zona Bre-B (refacil_services/breb.tpl) y Cobrar saldo > Links de pago
   (refacil_services/payment_links.tpl): ambas plantillas traen su propio <style> con fondos blancos, degradados
   celestes y textos navy/azul fijos. Los degradados van en `background:` (no en background-color), por eso las
   reglas genéricas de .card/.modal-content no los tapaban - de ahí el cuadro "Comienza tu experiencia con
   Bre-B" claro tras cerrar el modal. Va ANTES del bloque de .breb-experience-modal para que este último
   (mismo nivel de especificidad) siga ganando en el título blanco de ese modal. */
:root[data-theme="dark"] .breb-card { background: var(--cp-surface) !important; box-shadow: 0 18px 40px rgba(0, 0, 0, .45); }
:root[data-theme="dark"] .breb-hero-card { background: var(--cp-surface-alt) !important; }
:root[data-theme="dark"] .breb-hero-card h4 { color: var(--cp-link) !important; }
:root[data-theme="dark"] .breb-hero-card p { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .breb-back-button {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-link) !important;
}
:root[data-theme="dark"] .breb-back-button:hover,
:root[data-theme="dark"] .breb-back-button:focus { color: #fff !important; }
/* Sobre las franjas azules de registro/llaves el botón "volver" sí va blanco translúcido. */
:root[data-theme="dark"] .breb-register-hero .breb-back-button,
:root[data-theme="dark"] .breb-keys-hero .breb-back-button {
    background: rgba(255, 255, 255, .12) !important;
    border-color: rgba(255, 255, 255, .35) !important;
    color: #fff !important;
}
:root[data-theme="dark"] .breb-modal .modal-title { color: var(--cp-link) !important; }
:root[data-theme="dark"] .breb-modal .btn-outline-primary { background-color: transparent !important; }
:root[data-theme="dark"] .breb-modal .btn-outline-primary:hover,
:root[data-theme="dark"] .breb-modal .btn-outline-primary:focus {
    background-color: var(--cp-link) !important;
    color: #fff !important;
}
:root[data-theme="dark"] .breb-description-panel {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text-muted) !important;
}
/* Cajas / campos con fondo blanco o celeste pálido fijo */
:root[data-theme="dark"] .breb-link-field,
:root[data-theme="dark"] .breb-link-image-tile,
:root[data-theme="dark"] .breb-link-additional-item,
:root[data-theme="dark"] .breb-invoice-card,
:root[data-theme="dark"] .breb-register-card,
:root[data-theme="dark"] .breb-register-key-input,
:root[data-theme="dark"] .breb-register-existing-key,
:root[data-theme="dark"] .breb-key-card,
:root[data-theme="dark"] .breb-global-progress-box {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .breb-register-body { background: var(--cp-surface) !important; }
:root[data-theme="dark"] .breb-link-result-url-row,
:root[data-theme="dark"] .breb-link-fields-list,
:root[data-theme="dark"] .breb-inline-progress,
:root[data-theme="dark"] .breb-register-confirmation,
:root[data-theme="dark"] .breb-confirm-card,
:root[data-theme="dark"] .breb-register-key-row {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .breb-key-action-card {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-link) !important;
}
:root[data-theme="dark"] .breb-key-action-icon { background: rgba(46, 196, 241, .16) !important; color: var(--cp-link) !important; }
:root[data-theme="dark"] .breb-summary-field .form-control {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .breb-link-favorite {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text-muted) !important;
}
:root[data-theme="dark"] .breb-link-favorite.is-favorite {
    background: rgba(245, 158, 11, .16) !important;
    border-color: rgba(245, 158, 11, .5) !important;
    color: #f59e0b !important;
}
:root[data-theme="dark"] .breb-key-card .breb-copy-button {
    background: rgba(46, 196, 241, .12) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-link) !important;
}
:root[data-theme="dark"] .breb-key-card .breb-copy-button:hover,
:root[data-theme="dark"] .breb-key-card .breb-copy-button:focus {
    background: var(--cp-link) !important;
    color: #fff !important;
}
:root[data-theme="dark"] .breb-register-existing-key .breb-copy-button { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .breb-register-prefix-chip,
:root[data-theme="dark"] .breb-key-catalog-chip,
:root[data-theme="dark"] .breb-link-add-field-btn {
    background: rgba(46, 196, 241, .12) !important;
    border-color: rgba(46, 196, 241, .35) !important;
    color: var(--cp-link) !important;
}
:root[data-theme="dark"] .breb-invoice-status { background: rgba(46, 196, 241, .16) !important; color: var(--cp-link) !important; }
:root[data-theme="dark"] .breb-invoice-status.is-inactive { background: rgba(154, 154, 178, .16) !important; color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .breb-link-fields-required { background: rgba(248, 113, 113, .16) !important; color: #f87171 !important; }
:root[data-theme="dark"] .breb-link-fields-optional { background: rgba(154, 154, 178, .16) !important; color: var(--cp-text-muted) !important; }
/* Textos: los "navy" pasan a blanco, los azules de acento al cian, los grises al gris del tema */
:root[data-theme="dark"] .breb-invoice-card-name,
:root[data-theme="dark"] .breb-link-result-title,
:root[data-theme="dark"] .breb-link-input,
:root[data-theme="dark"] .breb-link-additional-item input[type="text"],
:root[data-theme="dark"] .breb-link-toggle-label,
:root[data-theme="dark"] .breb-link-fields-list li,
:root[data-theme="dark"] .breb-register-key-input input,
:root[data-theme="dark"] .breb-key-card .breb-key-value,
:root[data-theme="dark"] .breb-register-existing-key .breb-key-value { color: var(--cp-text) !important; }
:root[data-theme="dark"] .breb-link-additional-item input[type="text"] { background: transparent !important; }
:root[data-theme="dark"] .breb-link-input::placeholder { color: var(--cp-text-muted); }
:root[data-theme="dark"] .breb-invoice-card-meta,
:root[data-theme="dark"] .breb-invoice-card-expiry,
:root[data-theme="dark"] .breb-links-disclaimer,
:root[data-theme="dark"] .breb-link-help,
:root[data-theme="dark"] .breb-link-share-url,
:root[data-theme="dark"] .breb-link-result-subtitle,
:root[data-theme="dark"] .breb-link-image-hint,
:root[data-theme="dark"] .breb-invoicing-empty,
:root[data-theme="dark"] .breb-register-heading p,
:root[data-theme="dark"] .breb-register-note,
:root[data-theme="dark"] .breb-register-card .breb-register-subtext,
:root[data-theme="dark"] .breb-key-card .breb-key-meta { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .breb-invoice-card-amounts,
:root[data-theme="dark"] .breb-link-result-url,
:root[data-theme="dark"] .breb-link-label,
:root[data-theme="dark"] .breb-link-image-title,
:root[data-theme="dark"] .breb-link-image-upload-btn,
:root[data-theme="dark"] .breb-link-fields-toggle,
:root[data-theme="dark"] .breb-register-heading h5,
:root[data-theme="dark"] .breb-register-card h6,
:root[data-theme="dark"] .breb-register-confirmation h6,
:root[data-theme="dark"] .breb-register-confirmation .form-label,
:root[data-theme="dark"] .breb-summary-field .form-label,
:root[data-theme="dark"] .breb-key-catalog-label,
:root[data-theme="dark"] .breb-key-action-card .breb-key-action-text { color: var(--cp-link) !important; }
:root[data-theme="dark"] .breb-link-image-icon { background: rgba(46, 196, 241, .16) !important; color: var(--cp-link) !important; }

/* Modal "Aquí empieza tu experiencia Bre-B" (refacil_services/breb.tpl): trae su propio <style> con
   colores claros hardcodeados para el título y las tarjetas de opciones (Cobrar con QR, Recibir dinero,
   etc). El fondo general del modal ya se oscurece por la regla genérica .modal-content de arriba, pero el
   título (navy oscuro) y las tarjetas (fondo blanco, texto navy) se quedaban igual - ilegibles sobre el
   modal ya oscuro. Los íconos mantienen su color vivo (azul/verde/turquesa) tal como se pidió - solo se
   oscurece el "chip" pálido casi blanco detrás de cada uno. */
:root[data-theme="dark"] .breb-experience-modal .modal-content { background: var(--cp-surface) !important; }
:root[data-theme="dark"] .breb-experience-modal .modal-title { color: var(--cp-text) !important; }
:root[data-theme="dark"] .breb-experience-modal .breb-description-toggle { background: var(--cp-surface-alt) !important; }
:root[data-theme="dark"] .breb-experience-modal .breb-description-panel {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text-muted) !important;
}
:root[data-theme="dark"] .breb-experience-modal .breb-option {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .breb-experience-modal .breb-option-copy strong { color: var(--cp-text) !important; }
:root[data-theme="dark"] .breb-experience-modal .breb-option-copy small { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .breb-experience-modal .breb-option-icon { background: rgba(22, 141, 228, 0.18) !important; }
:root[data-theme="dark"] .breb-experience-modal .breb-option[data-breb-open="keys"] .breb-option-icon { background: rgba(15, 178, 197, 0.18) !important; }
:root[data-theme="dark"] .breb-experience-modal .breb-option[data-breb-open="send"] .breb-option-icon { background: rgba(0, 184, 141, 0.18) !important; }
:root[data-theme="dark"] .breb-experience-modal a.breb-option .breb-option-icon { background: rgba(24, 88, 216, 0.18) !important; }
/* Misma lista de opciones sin el prefijo .breb-experience-modal (otras pantallas de Bre-B que reusan
   .breb-option/.breb-option-icon/.breb-option-copy fuera de ese modal específico) - mismo tratamiento. */
:root[data-theme="dark"] .breb-option {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .breb-option-icon { background: rgba(46, 196, 241, 0.18) !important; }
:root[data-theme="dark"] .breb-option-copy strong { color: var(--cp-text) !important; }
:root[data-theme="dark"] .breb-option-copy small { color: var(--cp-text-muted) !important; }
/* Estados de color propios que las reglas genéricas de .breb-* de arriba taparían */
:root[data-theme="dark"] .breb-key-card .breb-copy-button.is-copied { background: #2b9a43 !important; border-color: #2b9a43 !important; color: #fff !important; }
:root[data-theme="dark"] .breb-key-card .breb-copy-button.is-error { background: rgba(248, 113, 113, .16) !important; border-color: rgba(248, 113, 113, .4) !important; color: #f87171 !important; }
:root[data-theme="dark"] .breb-invoice-status.is-paid { background: rgba(27, 154, 76, .2) !important; color: #34d399 !important; }
:root[data-theme="dark"] .breb-invoice-status.is-partial { background: rgba(245, 158, 11, .2) !important; color: #fbbf24 !important; }

/* Modal de compra de saldo BePay / PSE (members/deposit.tpl y members/partials/bepay_modals.tpl): sus
   estilos van con #bepayModal (ID), así que ninguna regla de clase del modo oscuro los alcanzaba - por eso el
   selector de método (PSE, Bancolombia, QR...) y el indicador de pasos salían en blanco. Se mantiene el
   overlay de carga (azul oscuro a propósito) y el ✔ verde de éxito. */
:root[data-theme="dark"] #bepayModal .bepay-stepper .step-circle { background-color: var(--cp-surface-alt) !important; color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] #bepayModal .bepay-stepper .step-label { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] #bepayModal .bepay-stepper .bepay-step.active .step-circle,
:root[data-theme="dark"] #bepayModal .bepay-stepper .bepay-step.completed .step-circle {
    background-color: var(--cp-link) !important;
    color: #fff !important;
    box-shadow: 0 .25rem .75rem rgba(46, 196, 241, .3);
}
:root[data-theme="dark"] #bepayModal .bepay-stepper .bepay-step.active .step-label,
:root[data-theme="dark"] #bepayModal .bepay-stepper .bepay-step.completed .step-label { color: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayModal .bepay-stepper .bepay-step-line { background-color: var(--cp-border) !important; }
:root[data-theme="dark"] #bepayModal .bepay-stepper .bepay-step-line.active { background-color: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-option,
:root[data-theme="dark"] #bepayModal .bepay-link-option {
    background-color: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .35);
}
:root[data-theme="dark"] #bepayModal .bepay-method-option:hover,
:root[data-theme="dark"] #bepayModal .bepay-method-option:focus { border-color: var(--cp-link) !important; box-shadow: 0 .75rem 1.5rem rgba(46, 196, 241, .16); }
:root[data-theme="dark"] #bepayModal .bepay-method-option.active {
    background-color: rgba(46, 196, 241, .12) !important;
    border-color: var(--cp-link) !important;
}
:root[data-theme="dark"] #bepayModal .bepay-method-icon { background-color: rgba(46, 196, 241, .16) !important; color: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-option.active .bepay-method-icon { background-color: rgba(46, 196, 241, .28) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-title,
:root[data-theme="dark"] #bepayModal .bepay-link-title { color: var(--cp-text) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-description,
:root[data-theme="dark"] #bepayModal .bepay-link-description,
:root[data-theme="dark"] #bepayModal .bepay-method-extra { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-option.active .bepay-method-extra { color: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-badge { background-color: rgba(245, 158, 11, .2) !important; color: #fbbf24 !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-summary {
    background-color: rgba(46, 196, 241, .1) !important;
    border-color: rgba(46, 196, 241, .3) !important;
    box-shadow: none;
}
:root[data-theme="dark"] #bepayModal .bepay-method-summary-icon { background-color: var(--cp-surface-alt) !important; color: var(--cp-link) !important; box-shadow: none; }
:root[data-theme="dark"] #bepayModal .bepay-method-summary h6 { color: var(--cp-text) !important; }
:root[data-theme="dark"] #bepayModal .bepay-method-summary p,
:root[data-theme="dark"] #bepayModal .bepay-summary-row { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] #bepayModal .bepay-summary-total { border-top-color: var(--cp-border) !important; color: var(--cp-text) !important; }
:root[data-theme="dark"] #bepayModal .bepay-step-back { color: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayModal .bepay-step-back:hover { color: #55d3fb !important; }
/* Resultado PSE / QR / Nequi: caja informativa "Colpay" y detalle de la transacción PSE */
:root[data-theme="dark"] #bepayPseResultModal .bepay-colpay-info,
:root[data-theme="dark"] #bepayQrResultModal .bepay-colpay-info,
:root[data-theme="dark"] #bepayNequiSuccessModal .bepay-colpay-info {
    background: rgba(46, 196, 241, .1) !important;
    border-color: rgba(46, 196, 241, .25) !important;
    border-left-color: #2bcc6b !important;
    color: var(--cp-text) !important;
    box-shadow: none;
}
:root[data-theme="dark"] #bepayPseResultModal .bepay-colpay-info-title,
:root[data-theme="dark"] #bepayQrResultModal .bepay-colpay-info-title,
:root[data-theme="dark"] #bepayNequiSuccessModal .bepay-colpay-info-title { color: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayPseResultModal .bepay-colpay-info-icon,
:root[data-theme="dark"] #bepayQrResultModal .bepay-colpay-info-icon,
:root[data-theme="dark"] #bepayNequiSuccessModal .bepay-colpay-info-icon { background: var(--cp-link) !important; }
:root[data-theme="dark"] #bepayPseResultModal .bepay-pse-details {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}

:root[data-theme="dark"] .colpay-sale-confirmation .modal-content,
:root[data-theme="dark"] .colpay-sale-confirmation .modal-header,
:root[data-theme="dark"] .colpay-sale-confirmation .modal-footer {
    background: var(--cp-surface) !important;
    color: var(--cp-text) !important;
    border-color: var(--cp-border) !important;
}

/* Tabs y pills (settings.tpl, dashboard.tpl, etc) */
:root[data-theme="dark"] .nav-tabs { border-bottom-color: var(--cp-border); }
:root[data-theme="dark"] .nav-tabs .nav-link { color: var(--cp-text-muted); border-color: transparent; }
:root[data-theme="dark"] .nav-tabs .nav-link.active,
:root[data-theme="dark"] .nav-tabs .nav-link:hover {
    background-color: var(--cp-surface-alt);
    color: var(--cp-text);
    border-color: var(--cp-border) var(--cp-border) var(--cp-surface-alt);
}
:root[data-theme="dark"] .tab-content { color: var(--cp-text); }

/* Badges/insignias con fondo claro (membresía, "Sin verificar", saldo principal/compras, estados, etc) */
:root[data-theme="dark"] .badge.bg-white,
:root[data-theme="dark"] .badge.bg-light,
:root[data-theme="dark"] a.badge.bg-light {
    background-color: var(--cp-surface-alt) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .badge.alert-warning { background-color: #3a2f0b !important; color: #f2d675 !important; }
:root[data-theme="dark"] .badge.alert-secondary { background-color: var(--cp-surface-alt) !important; color: var(--cp-text) !important; }

/* Paginación: el proyecto genera <ul class="pagination"><li><a>, no el .page-link/.page-item de Bootstrap 5. */
:root[data-theme="dark"] .pagination > li > a,
:root[data-theme="dark"] .pagination > li > span {
    background-color: var(--cp-surface-alt);
    border-color: var(--cp-border);
    color: var(--cp-text);
}
:root[data-theme="dark"] .pagination > li > a:hover,
:root[data-theme="dark"] .pagination > li > span:hover {
    background-color: var(--cp-surface);
    color: var(--cp-link);
}
:root[data-theme="dark"] .pagination > .disabled > a,
:root[data-theme="dark"] .pagination > .disabled > span {
    background-color: var(--cp-surface-alt);
    color: var(--cp-text-muted);
}

/* Select2 (plugin de terceros que reemplaza <select>, usado en depósitos, facturación, upgrade, etc) */
:root[data-theme="dark"] .select2-container--bootstrap-5 .select2-selection,
:root[data-theme="dark"] .select2-dropdown {
    background-color: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .select2-results__option { background-color: var(--cp-surface-alt); color: var(--cp-text); }
:root[data-theme="dark"] .select2-results__option--highlighted { background-color: var(--cp-surface) !important; }
:root[data-theme="dark"] .select2-selection__rendered { color: var(--cp-text) !important; }

/* Otros puntuales con fondo blanco hardcodeado propio */
:root[data-theme="dark"] .list-group-item { background-color: var(--cp-surface); color: var(--cp-text); border-color: var(--cp-border); }
:root[data-theme="dark"] .withdraw-v2__method-chip { background: var(--cp-surface-alt) !important; border-color: var(--cp-border) !important; color: var(--cp-text) !important; }
/* Retiro de saldo (members/withdraw.tpl; estilos base en global.css bajo .withdraw-v2): el título, la flecha de
   volver y las filas del resumen usan --w2-dark, que es el azul marino de la marca, y quedaban casi invisibles sobre
   la tarjeta oscura. No se redefine --w2-dark porque también es el fondo de la cápsula de la cuenta/monto (.pill), que
   lleva texto blanco. Las filas de tarifa (rojo) y total (verde) conservan su color. */
:root[data-theme="dark"] .withdraw-v2 {
    --w2-muted: var(--cp-text-muted);
    --w2-border: var(--cp-border);
    --w2-chip-bg: var(--cp-surface-alt);
    --w2-blue: var(--cp-link);
    --w2-blue-dark: var(--cp-text);
}
:root[data-theme="dark"] .withdraw-v2__title,
:root[data-theme="dark"] .withdraw-v2__back,
:root[data-theme="dark"] .withdraw-v2__summary-row:not(.withdraw-v2__summary-row--fee):not(.withdraw-v2__summary-row--total) { color: var(--cp-text); }
:root[data-theme="dark"] .withdraw-v2__back:hover { background: var(--cp-surface-alt); }
:root[data-theme="dark"] .withdraw-v2__pill {
    background: var(--cp-surface-alt);
    border: 1px solid var(--cp-border);
    color: var(--cp-text);
}
:root[data-theme="dark"] .withdraw-v2__chip { background: var(--cp-surface-alt); }
:root[data-theme="dark"] .withdraw-v2__chip:hover { background: var(--cp-surface); }

/* Alertas nativas de Bootstrap (.alert-*, distintas de .colpay-smart-alert): se usan tal cual como cajas de
   aviso (registro, activación, KYC, configuración, mensajería) y como badges (.badge.alert-* ya cubierto
   arriba tiene más especificidad y gana cuando ambas clases coinciden). */
:root[data-theme="dark"] .alert-light {
    background-color: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .alert-secondary {
    background-color: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text-muted) !important;
}
:root[data-theme="dark"] .alert-info {
    background-color: rgba(46, 196, 241, .12) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-link) !important;
}
:root[data-theme="dark"] .alert-warning {
    background-color: rgba(255, 193, 7, .14) !important;
    border-color: var(--cp-border) !important;
    color: #ffc107 !important;
}
:root[data-theme="dark"] .alert-success {
    background-color: rgba(0, 245, 166, .12) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-success) !important;
}
:root[data-theme="dark"] .alert-danger {
    background-color: rgba(255, 80, 80, .14) !important;
    border-color: var(--cp-border) !important;
    color: #ff8a8a !important;
}
:root[data-theme="dark"] .badge.alert-info { background-color: rgba(46, 196, 241, .18) !important; color: var(--cp-link) !important; }

/* Checkbox/archivo de formularios (registro) */
:root[data-theme="dark"] .form-check-input {
    background-color: var(--cp-surface-alt);
    border-color: var(--cp-border);
}
:root[data-theme="dark"] .form-check-input:checked {
    background-color: var(--cp-link);
    border-color: var(--cp-link);
}
:root[data-theme="dark"] .form-control::file-selector-button {
    background-color: var(--cp-surface);
    color: var(--cp-text);
    border-color: var(--cp-border);
}
:root[data-theme="dark"] .btn-frm:focus,
:root[data-theme="dark"] .btn-frm:hover,
:root[data-theme="dark"] .btn-frm:active,
:root[data-theme="dark"] #password:focus ~ .btn-frm {
    border-color: var(--cp-link) !important;
    box-shadow: 0 0 0 .2rem rgba(46, 196, 241, .25) !important;
}

/* Barra de progreso (activación/verificación) */
:root[data-theme="dark"] .progress { background-color: var(--cp-surface-alt); }

/* Loader de navegación (aparece en cualquier página al navegar) */
:root[data-theme="dark"] .my-commissions-navigation-loader__panel {
    background: var(--cp-surface) !important;
    color: var(--cp-text) !important;
}

/* Toast nativo de Bootstrap (colpay-alerts.js) - distinto de .colpay-smart-alert, trae su propio !important */
:root[data-theme="dark"] .toast { background-color: var(--cp-surface-alt) !important; color: var(--cp-text); }

/* Círculos de los íconos de redes sociales del footer (todas las páginas salvo home) */
:root[data-theme="dark"] .footer_redes a i,
:root[data-theme="dark"] .footer_redes a svg {
    background-color: var(--cp-surface-alt) !important;
    color: var(--cp-text) !important;
}

/* Enlaces de "ads" de texto patrocinados dentro de tarjetas */
:root[data-theme="dark"] .featured-ads li a { color: var(--cp-link) !important; }

/* Menú lateral en móvil: el panel deslizante (#sidenav) es un elemento aparte del <nav class="sidenav"> ya
   cubierto arriba, con su propio fondo blanco fijo en el CSS base para pantallas chicas. */
:root[data-theme="dark"] #sidenav,
:root[data-theme="dark"] #sidenav .navbar-nav {
    background: var(--cp-surface) !important;
}
/* El ítem del menú de la página actual: el CSS base fuerza el texto a azul marino con !important, quedando
   casi invisible sobre el sidenav ya oscurecido - necesita su propio !important para ganar. */
:root[data-theme="dark"] .sidenav .navbar-nav .nav-item.active,
:root[data-theme="dark"] .sidenav .navbar-nav .active > .nav-link {
    color: var(--cp-link) !important;
    background-color: rgba(46, 196, 241, .15) !important;
}
/* Encabezados de acordeón del menú (Global/Configuración/Referidos/Historial): son <a class="bg-white">,
   fuera del selector div.bg-white/section.bg-white de arriba. */
:root[data-theme="dark"] a.bg-white { background-color: var(--cp-surface) !important; color: var(--cp-text) !important; }

/* Tarjeta de Balance del dashboard: única excepción al "no tocar el azul de marca" (ver mockup del modo oscuro). */
:root[data-theme="dark"] .account-balance-card .bg-primary {
    background: var(--cp-surface) !important;
    border: 1px solid var(--cp-border);
}
:root[data-theme="dark"] .account-balance-card #accountBalanceTitle { color: var(--cp-link) !important; }
:root[data-theme="dark"] .account-balance-card .text-white { color: var(--cp-text) !important; }
/* Badge "Perfil: Comercios" de la tarjeta de Balance: trae fondo/borde navy inline (style="background-color:
   #21214F;border:1px solid #00ade1;") - en el mockup pasa a ser un chip transparente con borde/texto cian,
   no un relleno azul sólido. */
:root[data-theme="dark"] .account-balance-card .badge.text-white {
    background: transparent !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-link) !important;
}

/* Tarjetas de categoría del dashboard ("Favoritos", "Suerte y Azar", el catálogo P2P dinámico): clase propia
   definida en members/dashboard.tpl, blanca con borde cian y texto navy - no pasa por .card ni .bg-white. */
:root[data-theme="dark"] .site-category-card {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .site-category-card:hover,
:root[data-theme="dark"] .site-category-card:focus-visible {
    background: var(--cp-surface) !important;
    border-color: var(--cp-link) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .site-category-card__media { background: transparent !important; }
:root[data-theme="dark"] .site-category-card__icon,
:root[data-theme="dark"] .site-category-card__name { color: var(--cp-text) !important; }
:root[data-theme="dark"] .site-category-section__title { color: var(--cp-link) !important; }

/* Tarjetas de planes personalizados P2P (includes/template/custom_services/store.tpl): definen sus propios
   colores fijos (fondo blanco, texto navy, botón de detalle gris claro) en un <style> inline del propio
   template, igual que .site-category-card - nunca quedaron cubiertas por el modo oscuro hasta ahora. */
:root[data-theme="dark"] .p2p-plan-card {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-link) !important;
}
:root[data-theme="dark"] .p2p-plan-card:has(.p2p-plan-card__input:checked) {
    background: rgba(46, 196, 241, .12) !important;
    border-color: var(--cp-link) !important;
    box-shadow: 0 0 0 2px rgba(46, 196, 241, .35);
}
:root[data-theme="dark"] .p2p-plan-card__icon,
:root[data-theme="dark"] .p2p-plan-card__name {
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .p2p-plan-card__price { color: var(--cp-link) !important; }
:root[data-theme="dark"] .p2p-plan-card__details-btn {
    background: var(--cp-surface) !important;
    border-top-color: var(--cp-border) !important;
    color: var(--cp-text-muted) !important;
}
:root[data-theme="dark"] .p2p-plan-card__details-btn:hover,
:root[data-theme="dark"] .p2p-plan-card__details-btn:focus {
    background: var(--cp-border) !important;
    color: var(--cp-link) !important;
}
/* El input de cantidad hereda el fondo casi negro de .form-control genérico (var(--cp-surface-alt)), que
   ahora es el mismo tono que la tarjeta y lo deja ilegible - se le da un gris propio, más claro que la
   tarjeta, para que se note como campo editable. */
:root[data-theme="dark"] .p2p-plan-card__quantity {
    background-color: var(--cp-border) !important;
    border-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
}
:root[data-theme="dark"] .p2p-plan-card__quantity:focus {
    background-color: var(--cp-border) !important;
    color: var(--cp-text) !important;
    box-shadow: 0 0 0 .2rem rgba(46, 196, 241, .25);
}

/* Barra de búsqueda de productos del dashboard: trae un borde navy fijo por style="" inline. */
:root[data-theme="dark"] .input-group.rounded-pill {
    border-color: var(--cp-border) !important;
}

/* Borde de las pestañas .nav-pills con .nav-btn (dashboard, Mi Cuenta): el borde gris claro genérico de
   .border se ve desteñido sobre la tarjeta oscura - se oscurece solo para estas pestañas, sin tocar la
   utilidad .border en el resto del sitio. */
:root[data-theme="dark"] #myTab .nav-btn {
    border-color: var(--cp-border) !important;
}

/* Comprobante de venta / recibos (confirmación, historiales, Bre-B, Nequi push, etc.): la franja que
   atenúa la marca de agua trae un fondo blanco translúcido fijo por style="" inline (mismo string literal
   en ~17 lugares de ~10 plantillas). Sobre una tarjeta blanca eso solo aclara un poco la marca de agua,
   pero sobre la tarjeta oscura de modo oscuro se ve como un velo gris feo. Se invierte a un negro
   translúcido del mismo nivel de opacidad para lograr el mismo efecto de atenuación sin el velo - el
   selector de atributo cubre todos los casos de una sola vez, sin tocar cada plantilla. */
:root[data-theme="dark"] [style*="background-color: rgba(255,255,255, 0.5)"] {
    background-color: rgba(0, 0, 0, 0.5) !important;
}

/* "Mejora tu Plan" (assets/evolution/css/membership-plans.css, includes/template/members/upgrade.tpl):
   toda la comparación de planes vive en su propio CSS con colores claros fijos (fondo blanco, texto navy)
   que nunca se había cubierto. La tabla además carga la clase genérica .table, cuya regla de modo oscuro
   (más arriba) le pone fondo transparente y texto casi blanco a las celdas - sin este bloque, ese texto
   casi blanco terminaba flotando sobre el fondo blanco sin oscurecer de .membership-comparison, e ilegible
   por partida doble. Redefinir las variables --plan-* del propio componente resuelve la mayoría de casos
   (ya las usa el CSS original); el resto son colores hex sueltos que necesitan su propio override. */
:root[data-theme="dark"] .membership-plans,
:root[data-theme="dark"] .membership-purchase-card {
    --plan-ink: var(--cp-text);
    --plan-primary: var(--cp-link);
    --plan-muted: var(--cp-text-muted);
    --plan-border: var(--cp-border);
}
:root[data-theme="dark"] .membership-plans-heading h2 { color: var(--cp-text) !important; }
:root[data-theme="dark"] .membership-plans-notice {
    color: var(--cp-text-muted) !important;
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .membership-comparison {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .membership-comparison-table th,
:root[data-theme="dark"] .membership-comparison-table td {
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .membership-comparison-table thead tr:last-child > th {
    border-bottom-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .membership-comparison-table thead th {
    color: var(--cp-text) !important;
    background: var(--cp-surface) !important;
}
:root[data-theme="dark"] .membership-comparison-table .is-premium {
    color: var(--cp-link) !important;
    background: var(--cp-surface-alt) !important;
}
:root[data-theme="dark"] .membership-comparison-table tbody th,
:root[data-theme="dark"] .membership-comparison-table tbody td {
    background-color: var(--cp-surface) !important;
}
:root[data-theme="dark"] .membership-comparison-table tbody th { color: var(--cp-text) !important; }
:root[data-theme="dark"] .membership-comparison-table tbody td { color: var(--cp-text) !important; }
:root[data-theme="dark"] .membership-comparison-table tbody td.is-premium {
    color: var(--cp-link) !important;
    background: var(--cp-surface-alt) !important;
}
:root[data-theme="dark"] .membership-comparison-table__price td strong { color: var(--cp-text) !important; }
:root[data-theme="dark"] .membership-comparison-table__price td.is-premium strong { color: var(--cp-link) !important; }
:root[data-theme="dark"] .membership-purchase-card {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .membership-purchase-card > .card-header { background: var(--cp-surface) !important; }
:root[data-theme="dark"] .membership-purchase-card .form-label { color: var(--cp-text) !important; }
:root[data-theme="dark"] .membership-purchase-card .form-select {
    color: var(--cp-text) !important;
    border-color: var(--cp-border) !important;
    background-color: var(--cp-surface-alt) !important;
}

/* Formularios de documentos ("Quiero ser perfil Personas/Comercio/Ambulante", documentos de producto, KYC,
   depósito bancario, ofertas): todos incluyen members/partials/document_form_styles.tpl, que trae su propio
   <style> con fondo blanco, títulos navy y grises claros fijos - nunca cubierto por el modo oscuro. Los
   íconos y el "?" pasan al azul de acento (igual que .btn-primary) porque el navy plano se pierde sobre la
   tarjeta oscura; los inputs inline (texto/select, tipo "línea") dejan de usar navy como color de texto. */
:root[data-theme="dark"] .product-doc-card {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    box-shadow: 0 1px 4px rgba(0, 0, 0, .35);
}
:root[data-theme="dark"] .product-doc-card:hover,
:root[data-theme="dark"] .product-doc-card:focus-within {
    border-color: var(--cp-link) !important;
    box-shadow: 0 3px 10px rgba(46, 196, 241, .16);
}
:root[data-theme="dark"] .product-doc-card.is-readonly { background: var(--cp-surface) !important; }
:root[data-theme="dark"] .product-doc-icon { color: var(--cp-link) !important; }
:root[data-theme="dark"] .product-doc-title { color: var(--cp-text) !important; }
:root[data-theme="dark"] .product-doc-hint,
:root[data-theme="dark"] .product-doc-status-text,
:root[data-theme="dark"] .product-doc-file-name,
:root[data-theme="dark"] .product-doc-upload-info { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .product-doc-help { background: var(--cp-link) !important; color: #fff !important; }
:root[data-theme="dark"] .product-doc-inline-input,
:root[data-theme="dark"] .product-doc-inline-select {
    color: var(--cp-text) !important;
    border-bottom-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .product-doc-inline-input::placeholder { color: var(--cp-text-muted); }
:root[data-theme="dark"] .product-doc-inline-input:focus,
:root[data-theme="dark"] .product-doc-inline-select:focus { border-bottom-color: var(--cp-link) !important; }
:root[data-theme="dark"] .product-doc-inline-select option { background: var(--cp-surface-alt); color: var(--cp-text); }
/* Variante "formulario unificado" (KYC, depósito): mismas cajas claras fijas. */
:root[data-theme="dark"] .unified-document-intro {
    background: var(--cp-surface-alt) !important;
    border-color: var(--cp-border) !important;
    box-shadow: 0 1px 4px rgba(0, 0, 0, .35);
}
:root[data-theme="dark"] .unified-document-section {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
}
:root[data-theme="dark"] .unified-document-section-title,
:root[data-theme="dark"] .unified-document-form .form-label { color: var(--cp-text) !important; }
:root[data-theme="dark"] .unified-document-form .form-control:focus,
:root[data-theme="dark"] .unified-document-form .form-select:focus { border-color: var(--cp-link) !important; }

/* Interruptor de modo claro/oscuro (includes/template/members/partials/theme_switch.tpl): pastilla con sol a la
   izquierda y luna a la derecha; la perilla se desliza sobre el ícono del modo activo. Se ve igual en modo claro
   y oscuro (solo cambian los colores) y en móvil y escritorio. */
.theme-switch {
    display: inline-flex;
    align-items: center;
    padding: 0;
    border: 0;
    background: transparent;
    line-height: 1;
    cursor: pointer;
    flex: 0 0 auto;
}
.theme-switch__track {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    width: 60px;
    height: 32px;
    padding: 0 9px;
    box-sizing: border-box;
    border: 1px solid #cfd4e4;
    border-radius: 999px;
    background: #e9ecf5;
    font-size: .95rem;
    transition: background-color .2s ease, border-color .2s ease;
}
.theme-switch__icon {
    position: relative;
    z-index: 1;
    display: block;
    flex: 0 0 auto;
    width: 1em;
    height: 1em;
    transition: color .2s ease;
}
.theme-switch__icon--sun { color: #f59e0b; }
.theme-switch__icon--moon { color: #8a90ab; }
.theme-switch__thumb {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 1px 4px rgba(16, 24, 40, .3);
    transition: transform .2s ease, background-color .2s ease;
}
.theme-switch:focus-visible .theme-switch__track {
    outline: 2px solid var(--cp-link, #0dcaf0);
    outline-offset: 2px;
}
:root[data-theme="dark"] .theme-switch__track {
    border-color: var(--cp-border);
    background: var(--cp-surface-alt);
}
:root[data-theme="dark"] .theme-switch__icon--sun { color: var(--cp-text-muted); }
:root[data-theme="dark"] .theme-switch__icon--moon { color: #0a0a12; }
:root[data-theme="dark"] .theme-switch__thumb {
    transform: translateX(28px);
    background: var(--cp-link);
}
@media (prefers-reduced-motion: reduce) {
    .theme-switch__track,
    .theme-switch__icon,
    .theme-switch__thumb { transition: none; }
}
/* En la barra superior de escritorio (sesión iniciada) el interruptor solo se muestra desde 1024px: por debajo
   ya lo muestra la barra móvil del dashboard (#menu-user). */
.theme-switch-nav--members { display: none; }
@media (min-width: 1024px) {
    .theme-switch-nav--members { display: flex; }
}
/* En móvil (<768px, donde se ven los botones Android/iOS junto al logo) el interruptor va en la barra superior, a la
   derecha de esos botones (.theme-switch-nav--mobile en template.tpl). Solo hay una copia visible: bajo ese ancho
   se ocultan la del menú de invitados y la de #menu-user del dashboard. Desde 768px todo queda como estaba. */
.theme-switch-nav--mobile { display: none; }
@media (max-width: 767.98px) {
    .theme-switch-nav--mobile {
        display: inline-flex;
        align-items: center;
        margin-left: .45rem;
    }
    #menu-user .theme-switch,
    .theme-switch-nav--guest { display: none !important; }
}
/* Versión compacta (46x26) para que quepa entre los botones Android/iOS y la hamburguesa. */
.theme-switch-nav--mobile .theme-switch__track {
    width: 46px;
    height: 26px;
    padding: 0 7px;
    font-size: .78rem;
}
.theme-switch-nav--mobile .theme-switch__thumb {
    top: 2px;
    left: 3px;
    width: 20px;
    height: 20px;
}
:root[data-theme="dark"] .theme-switch-nav--mobile .theme-switch__thumb { transform: translateX(20px); }
/* Teléfonos angostos (<380px): con el interruptor la barra ya no cabe en una fila (el logo, los dos botones, el
   interruptor y la hamburguesa suman más que el ancho), y la hamburguesa saltaba a una segunda línea. Se reduce un
   poco el logo y el relleno lateral de la hamburguesa para que todo siga en una sola fila. */
@media (max-width: 379.98px) {
    #container-main .logo-colpay-nav--light { width: 118px; }
    :root[data-theme="dark"] #container-main .logo-colpay-nav--dark { width: 110px; }
    #container-main > .navbar-toggler { padding-left: .45rem; padding-right: .45rem; }
}
@media (max-width: 339.98px) {
    #container-main .logo-colpay-nav--light { width: 100px; }
    :root[data-theme="dark"] #container-main .logo-colpay-nav--dark { width: 96px; }
}

/* Vista de lista de categorías (dynamic_browser.tpl: Impuestos, Revistas, Planillas, Registraduría, Rec. Plus):
   trae fondo gris claro #f3f4f8, divisores blancos y texto navy fijos en su propio <style>. Solo se oscurece el
   contenedor, el texto y el botón de favorito; la imagen del convenio se deja tal cual. */
:root[data-theme="dark"] .refacil-dynamic-invoice-products-list { background: var(--cp-surface-alt) !important; }
:root[data-theme="dark"] .refacil-dynamic-invoice-products-list > .refacil-dynamic-invoice-product-row { border-bottom-color: var(--cp-border) !important; }
:root[data-theme="dark"] .refacil-dynamic-invoice-product-row .refacil-dynamic-invoice-product-link,
:root[data-theme="dark"] .refacil-dynamic-invoice-product-row .refacil-dynamic-registraduria-summary { color: var(--cp-text) !important; }
:root[data-theme="dark"] .refacil-dynamic-invoice-product-row .refacil-dynamic-invoice-product-logo { background: var(--cp-surface) !important; }
:root[data-theme="dark"] .refacil-dynamic-invoice-product-row .refacil-dynamic-registraduria-provider { color: var(--cp-text-muted) !important; }
:root[data-theme="dark"] .refacil-dynamic-invoice-product-row .refacil-dynamic-invoice-favorite {
    background: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
    box-shadow: none;
}

/* Resultados del buscador general del dashboard (members/dashboard.tpl, renderListGroups): cada producto de un
   grupo tipo lista es un .refacil-search-product-row con style="background:#f3f4f8" puesto en línea por el JS, así
   que salía como una tarjeta clara sobre el panel oscuro. Se oscurece la fila y el botón de favorito (círculo
   blanco definido en template.tpl); el nombre ya toma el texto claro por .text-dark y el convenio/banco por
   .text-secondary. La imagen del producto conserva su recuadro claro a propósito: muchos logos son de trazo
   oscuro o fondo transparente y se perderían sobre el fondo oscuro. */
:root[data-theme="dark"] .refacil-search-product-row { background: var(--cp-surface-alt) !important; }
:root[data-theme="dark"] .refacil-search-product-row .refacil-search-product-name-value { color: var(--cp-text) !important; }
:root[data-theme="dark"] .favorite-toggle-btn {
    background-color: var(--cp-surface) !important;
    border-color: var(--cp-border) !important;
    box-shadow: none;
}
:root[data-theme="dark"] .favorite-toggle-btn:hover,
:root[data-theme="dark"] .favorite-toggle-btn:focus { box-shadow: 0 0 0 2px var(--cp-border); }
/* "X" para limpiar el buscador: su hover es un lila claro fijo. */
:root[data-theme="dark"] .refacil-search-clear:hover,
:root[data-theme="dark"] .refacil-search-clear:focus-visible {
    color: var(--cp-link);
    background: var(--cp-surface-alt) !important;
}

/* Botón para alternar el tema */
.theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
}
/* Muestra el icono de a dónde se cambia al pulsar: luna en claro (para pasar a oscuro), sol en oscuro. */
.theme-toggle .bi-sun-fill { display: none; }
:root[data-theme="dark"] .theme-toggle .bi-moon-stars-fill { display: none; }
:root[data-theme="dark"] .theme-toggle .bi-sun-fill { display: inline-block; }
:root[data-theme="dark"] .theme-toggle { color: var(--cp-text); }
